7
7
"github.com/kyleconroy/sqlc/internal/sql/ast"
8
8
"github.com/kyleconroy/sqlc/internal/sql/astutils"
9
9
"github.com/kyleconroy/sqlc/internal/sql/catalog"
10
+ "github.com/kyleconroy/sqlc/internal/sql/named"
10
11
"github.com/kyleconroy/sqlc/internal/sql/sqlerr"
11
12
)
12
13
@@ -18,26 +19,14 @@ func dataType(n *ast.TypeName) string {
18
19
}
19
20
}
20
21
21
- func (comp * Compiler ) resolveCatalogRefs (qc * QueryCatalog , rvs []* ast.RangeVar , args []paramRef , names map [ int ] string ) ([]Parameter , error ) {
22
+ func (comp * Compiler ) resolveCatalogRefs (qc * QueryCatalog , rvs []* ast.RangeVar , args []paramRef , params * named. ParamSet ) ([]Parameter , error ) {
22
23
c := comp .catalog
23
24
24
25
aliasMap := map [string ]* ast.TableName {}
25
26
// TODO: Deprecate defaultTable
26
27
var defaultTable * ast.TableName
27
28
var tables []* ast.TableName
28
29
29
- parameterName := func (n int , defaultName string ) string {
30
- if n , ok := names [n ]; ok {
31
- return n
32
- }
33
- return defaultName
34
- }
35
-
36
- isNamedParam := func (n int ) bool {
37
- _ , ok := names [n ]
38
- return ok
39
- }
40
-
41
30
typeMap := map [string ]map [string ]map [string ]* catalog.Column {}
42
31
indexTable := func (table catalog.Table ) error {
43
32
tables = append (tables , table .Rel )
@@ -92,24 +81,28 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
92
81
switch n := ref .parent .(type ) {
93
82
94
83
case * limitOffset :
84
+ defaultP := named .NewInferredParam ("offset" , true )
85
+ p , isNamed := params .FetchMerge (ref .ref .Number , defaultP )
95
86
a = append (a , Parameter {
96
87
Number : ref .ref .Number ,
97
88
Column : & Column {
98
- Name : parameterName ( ref . ref . Number , "offset" ),
89
+ Name : p . Name ( ),
99
90
DataType : "integer" ,
100
- NotNull : true ,
101
- IsNamedParam : isNamedParam ( ref . ref . Number ) ,
91
+ NotNull : p . NotNull () ,
92
+ IsNamedParam : isNamed ,
102
93
},
103
94
})
104
95
105
96
case * limitCount :
97
+ defaultP := named .NewInferredParam ("limit" , true )
98
+ p , isNamed := params .FetchMerge (ref .ref .Number , defaultP )
106
99
a = append (a , Parameter {
107
100
Number : ref .ref .Number ,
108
101
Column : & Column {
109
- Name : parameterName ( ref . ref . Number , "limit" ),
102
+ Name : p . Name ( ),
110
103
DataType : "integer" ,
111
- NotNull : true ,
112
- IsNamedParam : isNamedParam ( ref . ref . Number ) ,
104
+ NotNull : p . NotNull () ,
105
+ IsNamedParam : isNamed ,
113
106
},
114
107
})
115
108
@@ -127,12 +120,16 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
127
120
if astutils .Join (n .Name , "." ) == "||" {
128
121
dataType = "string"
129
122
}
123
+
124
+ defaultP := named .NewParam ("" )
125
+ p , isNamed := params .FetchMerge (ref .ref .Number , defaultP )
130
126
a = append (a , Parameter {
131
127
Number : ref .ref .Number ,
132
128
Column : & Column {
133
- Name : parameterName ( ref . ref . Number , "" ),
129
+ Name : p . Name ( ),
134
130
DataType : dataType ,
135
- IsNamedParam : isNamedParam (ref .ref .Number ),
131
+ IsNamedParam : isNamed ,
132
+ NotNull : p .NotNull (),
136
133
},
137
134
})
138
135
continue
@@ -185,16 +182,19 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
185
182
if ref .name != "" {
186
183
key = ref .name
187
184
}
185
+
186
+ defaultP := named .NewInferredParam (key , c .IsNotNull )
187
+ p , isNamed := params .FetchMerge (ref .ref .Number , defaultP )
188
188
a = append (a , Parameter {
189
189
Number : ref .ref .Number ,
190
190
Column : & Column {
191
- Name : parameterName ( ref . ref . Number , key ),
191
+ Name : p . Name ( ),
192
192
DataType : dataType (& c .Type ),
193
- NotNull : c . IsNotNull ,
193
+ NotNull : p . NotNull () ,
194
194
IsArray : c .IsArray ,
195
195
Length : c .Length ,
196
196
Table : table ,
197
- IsNamedParam : isNamedParam ( ref . ref . Number ) ,
197
+ IsNamedParam : isNamed ,
198
198
},
199
199
})
200
200
}
@@ -242,15 +242,17 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
242
242
}
243
243
244
244
if c , ok := typeMap [schema ][table.Name ][key ]; ok {
245
+ defaultP := named .NewInferredParam (key , c .IsNotNull )
246
+ p , isNamed := params .FetchMerge (ref .ref .Number , defaultP )
245
247
a = append (a , Parameter {
246
248
Number : number ,
247
249
Column : & Column {
248
- Name : parameterName ( ref . ref . Number , key ),
250
+ Name : p . Name ( ),
249
251
DataType : dataType (& c .Type ),
250
- NotNull : c . IsNotNull ,
252
+ NotNull : p . NotNull () ,
251
253
IsArray : c .IsArray ,
252
254
Table : table ,
253
- IsNamedParam : isNamedParam ( ref . ref . Number ) ,
255
+ IsNamedParam : isNamed ,
254
256
},
255
257
})
256
258
}
@@ -309,12 +311,16 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
309
311
if argName != "" {
310
312
defaultName = argName
311
313
}
314
+
315
+ defaultP := named .NewInferredParam (defaultName , false )
316
+ p , isNamed := params .FetchMerge (ref .ref .Number , defaultP )
312
317
a = append (a , Parameter {
313
318
Number : ref .ref .Number ,
314
319
Column : & Column {
315
- Name : parameterName ( ref . ref . Number , defaultName ),
320
+ Name : p . Name ( ),
316
321
DataType : "any" ,
317
- IsNamedParam : isNamedParam (ref .ref .Number ),
322
+ IsNamedParam : isNamed ,
323
+ NotNull : p .NotNull (),
318
324
},
319
325
})
320
326
continue
@@ -340,13 +346,15 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
340
346
paramName = funcName
341
347
}
342
348
349
+ defaultP := named .NewInferredParam (paramName , true )
350
+ p , isNamed := params .FetchMerge (ref .ref .Number , defaultP )
343
351
a = append (a , Parameter {
344
352
Number : ref .ref .Number ,
345
353
Column : & Column {
346
- Name : parameterName ( ref . ref . Number , paramName ),
354
+ Name : p . Name ( ),
347
355
DataType : dataType (paramType ),
348
- NotNull : true ,
349
- IsNamedParam : isNamedParam ( ref . ref . Number ) ,
356
+ NotNull : p . NotNull () ,
357
+ IsNamedParam : isNamed ,
350
358
},
351
359
})
352
360
}
@@ -399,16 +407,18 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
399
407
}
400
408
401
409
if c , ok := tableMap [key ]; ok {
410
+ defaultP := named .NewInferredParam (key , c .IsNotNull )
411
+ p , isNamed := params .FetchMerge (ref .ref .Number , defaultP )
402
412
a = append (a , Parameter {
403
413
Number : ref .ref .Number ,
404
414
Column : & Column {
405
- Name : parameterName ( ref . ref . Number , key ),
415
+ Name : p . Name ( ),
406
416
DataType : dataType (& c .Type ),
407
- NotNull : c . IsNotNull ,
417
+ NotNull : p . NotNull () ,
408
418
IsArray : c .IsArray ,
409
419
Table : & ast.TableName {Schema : schema , Name : rel },
410
420
Length : c .Length ,
411
- IsNamedParam : isNamedParam ( ref . ref . Number ) ,
421
+ IsNamedParam : isNamed ,
412
422
},
413
423
})
414
424
} else {
@@ -424,7 +434,11 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
424
434
return nil , fmt .Errorf ("*ast.TypeCast has nil type name" )
425
435
}
426
436
col := toColumn (n .TypeName )
427
- col .Name = parameterName (ref .ref .Number , col .Name )
437
+ defaultP := named .NewInferredParam (col .Name , col .NotNull )
438
+ p , _ := params .FetchMerge (ref .ref .Number , defaultP )
439
+
440
+ col .Name = p .Name ()
441
+ col .NotNull = p .NotNull ()
428
442
a = append (a , Parameter {
429
443
Number : ref .ref .Number ,
430
444
Column : col ,
@@ -500,15 +514,17 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
500
514
if ref .name != "" {
501
515
key = ref .name
502
516
}
517
+ defaultP := named .NewInferredParam (key , c .IsNotNull )
518
+ p , isNamed := params .FetchMerge (ref .ref .Number , defaultP )
503
519
a = append (a , Parameter {
504
520
Number : number ,
505
521
Column : & Column {
506
- Name : parameterName ( ref . ref . Number , key ),
522
+ Name : p . Name ( ),
507
523
DataType : dataType (& c .Type ),
508
524
NotNull : c .IsNotNull ,
509
525
IsArray : c .IsArray ,
510
526
Table : table ,
511
- IsNamedParam : isNamedParam ( ref . ref . Number ) ,
527
+ IsNamedParam : isNamed ,
512
528
},
513
529
})
514
530
}
0 commit comments