@@ -16,6 +16,8 @@ func Generate(m *StructMapping, goPackage string, goFile string, w io.Writer) (o
1616
1717 f .PackageComment ("Code generated by construct, DO NOT EDIT." )
1818
19+ generateConstSchema (f , m )
20+
1921 generateSortFields (f , m )
2022
2123 // ChangeSet struct
@@ -99,7 +101,7 @@ func Generate(m *StructMapping, goPackage string, goFile string, w io.Writer) (o
99101
100102 generateDefaultSelectJsonObject (f , m )
101103
102- // TODO Generate Schema for refactoring friendly access to fields
104+ generateScanJsonRow ( f , m )
103105
104106 ext := filepath .Ext (goFile )
105107 baseFilename := goFile [0 : len (goFile )- len (ext )]
@@ -108,6 +110,20 @@ func Generate(m *StructMapping, goPackage string, goFile string, w io.Writer) (o
108110 return outputFilename , f .Render (w )
109111}
110112
113+ func generateConstSchema (f * File , m * StructMapping ) {
114+ f .Const ().DefsFunc (func (g * Group ) {
115+ for _ , fm := range m .FieldMappings {
116+ if fm .ReadColDef != nil {
117+ g .Id (readColConstId (m , fm )).Op ("=" ).Lit (fm .ReadColDef .Col )
118+ }
119+ }
120+ })
121+ }
122+
123+ func readColConstId (m * StructMapping , fm FieldMapping ) string {
124+ return firstToLower (m .MappingTypeName ) + "_" + firstToLower (fm .Name )
125+ }
126+
111127func generateDefaultSelectJsonObject (f * File , m * StructMapping ) {
112128 varName := firstToLower (m .TargetName + "DefaultSelectJson" )
113129
@@ -126,6 +142,27 @@ func generateDefaultSelectJsonObject(f *File, m *StructMapping) {
126142 }
127143}
128144
145+ func generateScanJsonRow (f * File , m * StructMapping ) {
146+ f .Func ().Id (firstToLower (m .TargetName )+ "ScanJsonRow" ).Params (
147+ Id ("row" ).Qual ("github.com/networkteam/construct" , "RowScanner" ),
148+ ).Params (
149+ Id ("result" ).Qual (m .MappingTypePackage , m .MappingTypeName ),
150+ Id ("err" ).Error (),
151+ ).Block (
152+ Var ().Id ("data" ).Op ("[]" ).Byte (),
153+ If (
154+ Id ("err" ).Op (":=" ).Id ("row" ).Dot ("Scan" ).Call (Op ("&" ).Id ("data" )),
155+ Id ("err" ).Op ("!=" ).Nil (),
156+ ).Block (
157+ If (Id ("err" ).Op ("==" ).Qual ("database/sql" , "ErrNoRows" )).Block (
158+ Return (Id ("result" ), Qual ("github.com/networkteam/construct" , "ErrNotFound" )),
159+ ),
160+ Return (Id ("result" ), Id ("err" )),
161+ ),
162+ Return (Id ("result" ), Qual ("encoding/json" , "Unmarshal" ).Call (Id ("data" ), Op ("&" ).Id ("result" ))),
163+ )
164+ }
165+
129166func generateChangeSetStruct (f * File , m * StructMapping ) (changeSetName string , err error ) {
130167 var structFields []Code
131168
@@ -190,7 +227,7 @@ func generateSortFields(f *File, m *StructMapping) {
190227 sortFieldDict := make (Dict )
191228 for _ , fm := range m .FieldMappings {
192229 if fm .ReadColDef != nil && fm .ReadColDef .Sortable {
193- sortFieldDict [Lit (strings .ToLower (fm .Name ))] = Lit ( fm . ReadColDef . Col )
230+ sortFieldDict [Lit (strings .ToLower (fm .Name ))] = Id ( readColConstId ( m , fm ) )
194231 }
195232 }
196233 f .Var ().Id (firstToLower (m .TargetName + "SortFields" )).Op ("=" ).Map (String ()).String ().
0 commit comments