@@ -36,18 +36,31 @@ func QueryCommandFor(rawCommand string) (QueryCommand, error) {
3636 }
3737}
3838
39+ type JavaType struct {
40+ SqlType string
41+ Type string
42+ IsList bool
43+ Nullable bool
44+ }
45+
3946type QueryArg struct {
4047 Number int
4148 Name string
42- Nullable bool
43- JavaType string
49+ JavaType JavaType
4450}
4551
46- // TODO - array types, enum types
52+ // TODO - enum types
4753var literalBindTypes = []string {"Long" , "Short" , "String" , "Boolean" , "Float" , "Double" , "BigDecimal" }
4854
4955func (q QueryArg ) BindStmt () string {
50- typeOnly := q .JavaType [strings .LastIndex (q .JavaType , "." )+ 1 :]
56+ typeOnly := q .JavaType .Type [strings .LastIndex (q .JavaType .Type , "." )+ 1 :]
57+
58+ if q .JavaType .IsList {
59+ if q .JavaType .Nullable {
60+ return fmt .Sprintf ("stmt.setArray(%d, %s == null ? null : conn.createArrayOf(\" %s\" , %s.toArray()));" , q .Number , q .Name , q .JavaType .SqlType , q .Name )
61+ }
62+ return fmt .Sprintf ("stmt.setArray(%d, conn.createArrayOf(\" %s\" , %s.toArray()));" , q .Number , q .JavaType .SqlType , q .Name )
63+ }
5164
5265 if slices .Contains (literalBindTypes , typeOnly ) {
5366 return fmt .Sprintf ("stmt.set%s(%d, %s);" , typeOnly , q .Number , q .Name )
@@ -58,18 +71,20 @@ func (q QueryArg) BindStmt() string {
5871
5972type QueryReturn struct {
6073 Name string
61- Nullable bool
62- JavaType string
74+ JavaType JavaType
6375}
6476
6577func (q QueryReturn ) ResultStmt (number int ) string {
66- typeOnly := q .JavaType [strings .LastIndex (q .JavaType , "." )+ 1 :]
78+ typeOnly := q .JavaType .Type [strings .LastIndex (q .JavaType .Type , "." )+ 1 :]
79+
80+ if q .JavaType .IsList {
81+ return fmt .Sprintf ("Arrays.asList((%s[]) results.getArray(%d).getArray())" , typeOnly , number )
82+ }
6783
6884 if slices .Contains (literalBindTypes , typeOnly ) {
6985 return fmt .Sprintf ("results.get%s(%d)" , typeOnly , number )
7086 }
7187
72- // TODO - check correct!
7388 return fmt .Sprintf ("results.getObject(%d, %s.class)" , number , typeOnly )
7489}
7590
0 commit comments