Skip to content

Commit

Permalink
feat(compiler): Always create parameter (#3112)
Browse files Browse the repository at this point in the history
* feat(compiler): Don't drop unknown params
* Add test data

Make sure that params are always added
  • Loading branch information
kyleconroy authored Jan 5, 2024
1 parent 1ad910e commit 593b79e
Show file tree
Hide file tree
Showing 13 changed files with 289 additions and 11 deletions.
36 changes: 25 additions & 11 deletions internal/compiler/resolve.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,20 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
}

var a []Parameter

addUnknownParam := func(ref paramRef) {
defaultP := named.NewInferredParam(ref.name, false)
p, isNamed := params.FetchMerge(ref.ref.Number, defaultP)
a = append(a, Parameter{
Number: ref.ref.Number,
Column: &Column{
Name: p.Name(),
DataType: "any",
IsNamedParam: isNamed,
},
})
}

for _, ref := range args {
switch n := ref.parent.(type) {

Expand Down Expand Up @@ -318,6 +332,8 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
ReturnType: &ast.TypeName{Name: "any"},
}
}

var added bool
for i, item := range n.Args.Items {
funcName := fun.Name
var argName string
Expand Down Expand Up @@ -357,6 +373,7 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,

defaultP := named.NewInferredParam(defaultName, false)
p, isNamed := params.FetchMerge(ref.ref.Number, defaultP)
added = true
a = append(a, Parameter{
Number: ref.ref.Number,
Column: &Column{
Expand Down Expand Up @@ -398,6 +415,7 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,

defaultP := named.NewInferredParam(paramName, true)
p, isNamed := params.FetchMerge(ref.ref.Number, defaultP)
added = true
a = append(a, Parameter{
Number: ref.ref.Number,
Column: &Column{
Expand All @@ -411,6 +429,9 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
}

if fun.ReturnType == nil {
if !added {
addUnknownParam(ref)
}
continue
}

Expand All @@ -420,7 +441,9 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,
Name: fun.ReturnType.Name,
})
if err != nil {
// The return type wasn't a table.
if !added {
addUnknownParam(ref)
}
continue
}
err = indexTable(table)
Expand Down Expand Up @@ -607,16 +630,7 @@ func (comp *Compiler) resolveCatalogRefs(qc *QueryCatalog, rvs []*ast.RangeVar,

default:
slog.Debug("unsupported reference type", "type", fmt.Sprintf("%T", n))
defaultP := named.NewInferredParam(ref.name, false)
p, isNamed := params.FetchMerge(ref.ref.Number, defaultP)
a = append(a, Parameter{
Number: ref.ref.Number,
Column: &Column{
Name: p.Name(),
DataType: "any",
IsNamedParam: isNamed,
},
})
addUnknownParam(ref)
}
}
return a, nil
Expand Down
31 changes: 31 additions & 0 deletions internal/endtoend/testdata/params_in_nested_func/mysql/db/db.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
-- name: GetGroups :many
SELECT
rg.groupId,
rg.groupName
FROM
RouterGroup rg
WHERE
rg.groupName LIKE CONCAT('%', COALESCE(sqlc.narg('groupName'), rg.groupName), '%') AND
rg.groupId = COALESCE(sqlc.narg('groupId'), rg.groupId);
10 changes: 10 additions & 0 deletions internal/endtoend/testdata/params_in_nested_func/mysql/schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
create table RouterGroup
(
groupId int unsigned auto_increment primary key,
groupName varchar(100) not null,
defaultConfigId int unsigned null,
defaultFirmwareVersion varchar(12) null,
parentGroupId int unsigned null,
firmwarePolicy varchar(45) null,
styles text null
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
version: '2'
sql:
- schema: schema.sql
queries: query.sql
engine: mysql
gen:
go:
out: db

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
-- name: GetGroups :many
SELECT
rg.groupId,
rg.groupName
FROM
RouterGroup rg
WHERE
rg.groupName LIKE CONCAT('%', COALESCE(sqlc.narg('groupName')::text, rg.groupName), '%') AND
rg.groupId = COALESCE(sqlc.narg('groupId'), rg.groupId);
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
create table RouterGroup
(
groupId serial primary key,
groupName varchar(100) not null,
defaultConfigId int null,
defaultFirmwareVersion varchar(12) null,
parentGroupId int null,
firmwarePolicy varchar(45) null,
styles text null
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
version: '2'
sql:
- schema: schema.sql
queries: query.sql
engine: postgresql
gen:
go:
out: db

0 comments on commit 593b79e

Please sign in to comment.