@@ -41,11 +41,14 @@ func resolveColumn(ctx context.Context, logger zerolog.Logger, m *metrics.Metric
4141 }
4242}
4343
44- func ResolveSingleResource (ctx context.Context , logger zerolog.Logger , m * metrics.Metrics , table * schema.Table , client schema.ClientMeta , parent * schema.Resource , item any , c * caser.Caser ) * schema.Resource {
44+ func ResolveResourcesChunk (ctx context.Context , logger zerolog.Logger , m * metrics.Metrics , table * schema.Table , client schema.ClientMeta , parent * schema.Resource , chunk [] any , c * caser.Caser ) [] * schema.Resource {
4545 ctx , cancel := context .WithTimeout (ctx , 10 * time .Minute )
4646 defer cancel ()
4747
48- resource := schema .NewResourceData (table , parent , item )
48+ resources := make ([]* schema.Resource , len (chunk ))
49+ for i , item := range chunk {
50+ resources [i ] = schema .NewResourceData (table , parent , item )
51+ }
4952 objectStartTime := time .Now ()
5053
5154 clientID := client .ID ()
@@ -60,25 +63,39 @@ func ResolveSingleResource(ctx context.Context, logger zerolog.Logger, m *metric
6063 m .AddPanics (ctx , 1 , selector )
6164 }
6265 }()
63- if table .PreResourceResolver != nil {
64- if err := table .PreResourceResolver (ctx , client , resource ); err != nil {
65- tableLogger .Error ().Err (err ).Msg ("pre resource resolver failed" )
66+
67+ if table .PreResourceChunkResolver != nil {
68+ if err := table .PreResourceChunkResolver .RowsResolver (ctx , client , resources ); err != nil {
69+ tableLogger .Error ().Stack ().Err (err ).Msg ("pre resource chunk resolver finished with error" )
6670 m .AddErrors (ctx , 1 , selector )
6771 return nil
6872 }
6973 }
7074
71- for _ , column := range table .Columns {
72- resolveColumn (ctx , tableLogger , m , selector , client , resource , column , c )
75+ if table .PreResourceResolver != nil {
76+ for _ , resource := range resources {
77+ if err := table .PreResourceResolver (ctx , client , resource ); err != nil {
78+ tableLogger .Error ().Err (err ).Msg ("pre resource resolver failed" )
79+ m .AddErrors (ctx , 1 , selector )
80+ return nil
81+ }
82+ }
83+ }
84+ for _ , resource := range resources {
85+ for _ , column := range table .Columns {
86+ resolveColumn (ctx , tableLogger , m , selector , client , resource , column , c )
87+ }
7388 }
7489
7590 if table .PostResourceResolver != nil {
76- if err := table .PostResourceResolver (ctx , client , resource ); err != nil {
77- tableLogger .Error ().Stack ().Err (err ).Msg ("post resource resolver finished with error" )
78- m .AddErrors (ctx , 1 , selector )
91+ for _ , resource := range resources {
92+ if err := table .PostResourceResolver (ctx , client , resource ); err != nil {
93+ tableLogger .Error ().Stack ().Err (err ).Msg ("post resource resolver finished with error" )
94+ m .AddErrors (ctx , 1 , selector )
95+ }
7996 }
8097 }
8198
82- m .AddResources (ctx , 1 , selector )
83- return resource
99+ m .AddResources (ctx , int64 ( len ( resources )) , selector )
100+ return resources
84101}
0 commit comments