1
- package dinosql
1
+ package kotlin
2
2
3
3
import (
4
4
"bufio"
@@ -10,6 +10,7 @@ import (
10
10
"strings"
11
11
"text/template"
12
12
13
+ "github.com/kyleconroy/sqlc/internal/dinosql"
13
14
core "github.com/kyleconroy/sqlc/internal/pg"
14
15
15
16
"github.com/jinzhu/inflection"
@@ -137,12 +138,12 @@ type KtQuery struct {
137
138
}
138
139
139
140
type KtGenerateable interface {
140
- KtDataClasses (settings CombinedSettings ) []KtStruct
141
- KtQueries (settings CombinedSettings ) []KtQuery
142
- KtEnums (settings CombinedSettings ) []KtEnum
141
+ KtDataClasses (settings dinosql. CombinedSettings ) []KtStruct
142
+ KtQueries (settings dinosql. CombinedSettings ) []KtQuery
143
+ KtEnums (settings dinosql. CombinedSettings ) []KtEnum
143
144
}
144
145
145
- func KtUsesType (r KtGenerateable , typ string , settings CombinedSettings ) bool {
146
+ func KtUsesType (r KtGenerateable , typ string , settings dinosql. CombinedSettings ) bool {
146
147
for _ , strct := range r .KtDataClasses (settings ) {
147
148
for _ , f := range strct .Fields {
148
149
if f .Type .Name == typ {
@@ -153,7 +154,7 @@ func KtUsesType(r KtGenerateable, typ string, settings CombinedSettings) bool {
153
154
return false
154
155
}
155
156
156
- func KtImports (r KtGenerateable , settings CombinedSettings ) func (string ) [][]string {
157
+ func KtImports (r KtGenerateable , settings dinosql. CombinedSettings ) func (string ) [][]string {
157
158
return func (filename string ) [][]string {
158
159
if filename == "Models.kt" {
159
160
return ModelKtImports (r , settings )
@@ -167,7 +168,7 @@ func KtImports(r KtGenerateable, settings CombinedSettings) func(string) [][]str
167
168
}
168
169
}
169
170
170
- func InterfaceKtImports (r KtGenerateable , settings CombinedSettings ) [][]string {
171
+ func InterfaceKtImports (r KtGenerateable , settings dinosql. CombinedSettings ) [][]string {
171
172
gq := r .KtQueries (settings )
172
173
uses := func (name string ) bool {
173
174
for _ , q := range gq {
@@ -211,7 +212,7 @@ func InterfaceKtImports(r KtGenerateable, settings CombinedSettings) [][]string
211
212
return [][]string {stds }
212
213
}
213
214
214
- func ModelKtImports (r KtGenerateable , settings CombinedSettings ) [][]string {
215
+ func ModelKtImports (r KtGenerateable , settings dinosql. CombinedSettings ) [][]string {
215
216
std := make (map [string ]struct {})
216
217
if KtUsesType (r , "LocalDate" , settings ) {
217
218
std ["java.time.LocalDate" ] = struct {}{}
@@ -235,7 +236,7 @@ func ModelKtImports(r KtGenerateable, settings CombinedSettings) [][]string {
235
236
return [][]string {stds }
236
237
}
237
238
238
- func QueryKtImports (r KtGenerateable , settings CombinedSettings , filename string ) [][]string {
239
+ func QueryKtImports (r KtGenerateable , settings dinosql. CombinedSettings , filename string ) [][]string {
239
240
// for _, strct := range r.KtDataClasses() {
240
241
// for _, f := range strct.Fields {
241
242
// if strings.HasPrefix(f.Type, "[]") {
@@ -320,7 +321,15 @@ func ktEnumValueName(value string) string {
320
321
return strings .ToUpper (id )
321
322
}
322
323
323
- func (r Result ) KtEnums (settings CombinedSettings ) []KtEnum {
324
+ // Result is a wrapper around *dinosql.Result that extends it with Kotlin support.
325
+ // It can be used to generate both Go and Kotlin code.
326
+ // TODO: This is a temporary hack to ensure minimal chance of merge conflicts while Kotlin support is forked.
327
+ // Once it is merged upstream, we can factor split out Go support from the core dinosql.Result.
328
+ type Result struct {
329
+ * dinosql.Result
330
+ }
331
+
332
+ func (r Result ) KtEnums (settings dinosql.CombinedSettings ) []KtEnum {
324
333
var enums []KtEnum
325
334
for name , schema := range r .Catalog .Schemas {
326
335
if name == "pg_catalog" {
@@ -353,7 +362,7 @@ func (r Result) KtEnums(settings CombinedSettings) []KtEnum {
353
362
return enums
354
363
}
355
364
356
- func KtDataClassName (name string , settings CombinedSettings ) string {
365
+ func KtDataClassName (name string , settings dinosql. CombinedSettings ) string {
357
366
if rename := settings .Global .Rename [name ]; rename != "" {
358
367
return rename
359
368
}
@@ -364,11 +373,11 @@ func KtDataClassName(name string, settings CombinedSettings) string {
364
373
return out
365
374
}
366
375
367
- func KtMemberName (name string , settings CombinedSettings ) string {
368
- return LowerTitle (KtDataClassName (name , settings ))
376
+ func KtMemberName (name string , settings dinosql. CombinedSettings ) string {
377
+ return dinosql . LowerTitle (KtDataClassName (name , settings ))
369
378
}
370
379
371
- func (r Result ) KtDataClasses (settings CombinedSettings ) []KtStruct {
380
+ func (r Result ) KtDataClasses (settings dinosql. CombinedSettings ) []KtStruct {
372
381
var structs []KtStruct
373
382
for name , schema := range r .Catalog .Schemas {
374
383
if name == "pg_catalog" {
@@ -475,7 +484,7 @@ func (t ktType) fromJDBCValue(expr string) string {
475
484
return expr
476
485
}
477
486
478
- func (r Result ) ktType (col core.Column , settings CombinedSettings ) ktType {
487
+ func (r Result ) ktType (col core.Column , settings dinosql. CombinedSettings ) ktType {
479
488
typ , isEnum := r .ktInnerType (col , settings )
480
489
return ktType {
481
490
Name : typ ,
@@ -486,7 +495,7 @@ func (r Result) ktType(col core.Column, settings CombinedSettings) ktType {
486
495
}
487
496
}
488
497
489
- func (r Result ) ktInnerType (col core.Column , settings CombinedSettings ) (string , bool ) {
498
+ func (r Result ) ktInnerType (col core.Column , settings dinosql. CombinedSettings ) (string , bool ) {
490
499
columnType := col .DataType
491
500
492
501
switch columnType {
@@ -582,7 +591,7 @@ func (r Result) ktInnerType(col core.Column, settings CombinedSettings) (string,
582
591
}
583
592
}
584
593
585
- func (r Result ) ktColumnsToStruct (name string , columns []core.Column , settings CombinedSettings ) * KtStruct {
594
+ func (r Result ) ktColumnsToStruct (name string , columns []core.Column , settings dinosql. CombinedSettings ) * KtStruct {
586
595
gs := KtStruct {
587
596
Name : name ,
588
597
}
@@ -613,7 +622,7 @@ func ktArgName(name string) string {
613
622
return out
614
623
}
615
624
616
- func ktParamName (p Parameter ) string {
625
+ func ktParamName (p dinosql. Parameter ) string {
617
626
if p .Column .Name != "" {
618
627
return ktArgName (p .Column .Name )
619
628
}
@@ -636,7 +645,7 @@ func jdbcSQL(s string) string {
636
645
return jdbcSQLRe .ReplaceAllString (s , "?" )
637
646
}
638
647
639
- func (r Result ) KtQueries (settings CombinedSettings ) []KtQuery {
648
+ func (r Result ) KtQueries (settings dinosql. CombinedSettings ) []KtQuery {
640
649
structs := r .KtDataClasses (settings )
641
650
642
651
qs := make ([]KtQuery , 0 , len (r .Queries ))
@@ -651,9 +660,9 @@ func (r Result) KtQueries(settings CombinedSettings) []KtQuery {
651
660
gq := KtQuery {
652
661
Cmd : query .Cmd ,
653
662
ClassName : strings .Title (query .Name ),
654
- ConstantName : LowerTitle (query .Name ),
655
- FieldName : LowerTitle (query .Name ) + "Stmt" ,
656
- MethodName : LowerTitle (query .Name ),
663
+ ConstantName : dinosql . LowerTitle (query .Name ),
664
+ FieldName : dinosql . LowerTitle (query .Name ) + "Stmt" ,
665
+ MethodName : dinosql . LowerTitle (query .Name ),
657
666
SourceName : query .Filename ,
658
667
SQL : jdbcSQL (query .SQL ),
659
668
Comments : query .Comments ,
@@ -898,7 +907,7 @@ type ktTmplCtx struct {
898
907
Enums []KtEnum
899
908
KtDataClasses []KtStruct
900
909
KtQueries []KtQuery
901
- Settings GenerateSettings
910
+ Settings dinosql. GenerateSettings
902
911
903
912
// TODO: Race conditions
904
913
SourceName string
@@ -928,9 +937,9 @@ func ktFormat(s string) string {
928
937
return o
929
938
}
930
939
931
- func KtGenerate (r KtGenerateable , settings CombinedSettings ) (map [string ]string , error ) {
940
+ func KtGenerate (r KtGenerateable , settings dinosql. CombinedSettings ) (map [string ]string , error ) {
932
941
funcMap := template.FuncMap {
933
- "lowerTitle" : LowerTitle ,
942
+ "lowerTitle" : dinosql . LowerTitle ,
934
943
"imports" : KtImports (r , settings ),
935
944
"offset" : Offset ,
936
945
}
0 commit comments