@@ -43,8 +43,12 @@ type Table struct {
4343 IgnoreError IgnoreErrorFunc `json:"-"`
4444 // Multiplex returns re-purposed meta clients. The sdk will execute the table with each of them
4545 Multiplex func (meta ClientMeta ) []ClientMeta `json:"-"`
46- // Post resource resolver is called after all columns have been resolved, and before resource is inserted to database.
46+ // PostResourceResolver is called after all columns have been resolved, but before the Resource is sent to be inserted. The ordering of resolvers is:
47+ // (Table) Resolver → PreResourceResolver → ColumnResolvers → PostResourceResolver
4748 PostResourceResolver RowResolver `json:"-"`
49+ // PreResourceResolver is called before all columns are resolved but after Resource is created. The ordering of resolvers is:
50+ // (Table) Resolver → PreResourceResolver → ColumnResolvers → PostResourceResolver
51+ PreResourceResolver RowResolver `json:"-"`
4852 // Options allow modification of how the table is defined when created
4953 Options TableCreationOptions `json:"options"`
5054
@@ -200,6 +204,13 @@ func (t Table) Resolve(ctx context.Context, meta ClientMeta, syncTime time.Time,
200204 totalResources += len (objects )
201205 for i := range objects {
202206 resource := NewResourceData (& t , parent , syncTime , objects [i ])
207+ if t .PreResourceResolver != nil {
208+ if err := t .PreResourceResolver (ctx , meta , resource ); err != nil {
209+ meta .Logger ().Error ().Str ("table_name" , t .Name ).Err (err ).Msg ("pre resource resolver failed" )
210+ } else {
211+ meta .Logger ().Trace ().Str ("table_name" , t .Name ).Msg ("pre resource resolver finished successfully" )
212+ }
213+ }
203214 t .resolveColumns (ctx , meta , resource )
204215 if t .PostResourceResolver != nil {
205216 meta .Logger ().Trace ().Str ("table_name" , t .Name ).Msg ("post resource resolver started" )
@@ -226,22 +237,22 @@ func (t Table) Resolve(ctx context.Context, meta ClientMeta, syncTime time.Time,
226237func (t Table ) resolveColumns (ctx context.Context , meta ClientMeta , resource * Resource ) {
227238 for _ , c := range t .Columns {
228239 if c .Resolver != nil {
229- meta .Logger ().Trace ().Str ("colum_name " , c .Name ).Str ("table_name" , t .Name ).Msg ("column resolver custom started" )
240+ meta .Logger ().Trace ().Str ("column_name " , c .Name ).Str ("table_name" , t .Name ).Msg ("column resolver custom started" )
230241 if err := c .Resolver (ctx , meta , resource , c ); err != nil {
231- meta .Logger ().Error ().Str ("colum_name " , c .Name ).Str ("table_name" , t .Name ).Err (err ).Msg ("column resolver finished with error" )
242+ meta .Logger ().Error ().Str ("column_name " , c .Name ).Str ("table_name" , t .Name ).Err (err ).Msg ("column resolver finished with error" )
232243 }
233- meta .Logger ().Trace ().Str ("colum_name " , c .Name ).Str ("table_name" , t .Name ).Msg ("column resolver finished successfully" )
244+ meta .Logger ().Trace ().Str ("column_name " , c .Name ).Str ("table_name" , t .Name ).Msg ("column resolver finished successfully" )
234245 } else {
235- meta .Logger ().Trace ().Str ("colum_name " , c .Name ).Str ("table_name" , t .Name ).Msg ("column resolver default started" )
246+ meta .Logger ().Trace ().Str ("column_name " , c .Name ).Str ("table_name" , t .Name ).Msg ("column resolver default started" )
236247 // base use case: try to get column with CamelCase name
237248 v := funk .Get (resource .Item , strcase .ToCamel (c .Name ), funk .WithAllowZero ())
238249 if v != nil {
239250 if err := resource .Set (c .Name , v ); err != nil {
240- meta .Logger ().Error ().Str ("colum_name " , c .Name ).Str ("table_name" , t .Name ).Err (err ).Msg ("column resolver default finished with error" )
251+ meta .Logger ().Error ().Str ("column_name " , c .Name ).Str ("table_name" , t .Name ).Err (err ).Msg ("column resolver default finished with error" )
241252 }
242- meta .Logger ().Trace ().Str ("colum_name " , c .Name ).Str ("table_name" , t .Name ).Msg ("column resolver default finished successfully" )
253+ meta .Logger ().Trace ().Str ("column_name " , c .Name ).Str ("table_name" , t .Name ).Msg ("column resolver default finished successfully" )
243254 } else {
244- meta .Logger ().Trace ().Str ("colum_name " , c .Name ).Str ("table_name" , t .Name ).Msg ("column resolver default finished successfully with nil" )
255+ meta .Logger ().Trace ().Str ("column_name " , c .Name ).Str ("table_name" , t .Name ).Msg ("column resolver default finished successfully with nil" )
245256 }
246257 }
247258 }
0 commit comments