MCPcopy Create free account
hub / github.com/cloudquery/cloudquery / tableTransformer

Function tableTransformer

plugins/destination/mssql/queries/tvp.go:89–123  ·  view source on GitHub ↗
(table *schema.Table)

Source from the content-addressed store, hash-verified

87type transformer func([][]any) any
88
89func tableTransformer(table *schema.Table) transformer {
90 // 1 prep the fields
91 fields := make([]reflect.StructField, len(table.Columns))
92 for i, col := range table.Columns {
93 fields[i] = reflect.StructField{
94 Name: "Fld_" + col.Name,
95 Type: reflect.PointerTo(columnGoType(col.Type)), // to account for nullability
96 }
97 }
98
99 // 2 prep transformer for each field
100 row := reflect.StructOf(fields)
101 rowSlice := reflect.SliceOf(row)
102
103 rowTransformer := func(rowData []any) reflect.Value {
104 v := reflect.New(row).Elem()
105 for i, elem := range rowData {
106 val := reflect.ValueOf(elem)
107 switch {
108 case elem == nil, val.IsNil():
109 default:
110 v.Field(i).Set(val)
111 }
112 }
113 return v
114 }
115
116 return func(data [][]any) any {
117 rows := reflect.MakeSlice(rowSlice, len(data), len(data))
118 for i, elem := range data {
119 rows.Index(i).Set(rowTransformer(elem))
120 }
121 return rows.Interface()
122 }
123}

Callers 1

TVPQueryFunction · 0.85

Calls 3

columnGoTypeFunction · 0.85
rowTransformerFuncType · 0.85
SetMethod · 0.45

Tested by

no test coverage detected