diff --git a/examples/batch/postgresql/query.sql b/examples/batch/postgresql/query.sql index 33a7843457..4e21f25285 100644 --- a/examples/batch/postgresql/query.sql +++ b/examples/batch/postgresql/query.sql @@ -12,7 +12,7 @@ WHERE book_id = $1; -- name: DeleteBookNamedFunc :batchexec DELETE FROM books -WHERE book_id = sqlc.arg(book_id); +WHERE book_id = sqlc.arg (book_id); -- name: DeleteBookNamedSign :batchexec DELETE FROM books diff --git a/internal/endtoend/testdata/invalid_group_by_reference/mysql/stderr.txt b/internal/endtoend/testdata/invalid_group_by_reference/mysql/stderr.txt index 18a7d6bd0f..1fc9998d4c 100644 --- a/internal/endtoend/testdata/invalid_group_by_reference/mysql/stderr.txt +++ b/internal/endtoend/testdata/invalid_group_by_reference/mysql/stderr.txt @@ -1,2 +1,2 @@ # package querytest -query.sql:9:1: column reference "invalid_reference" not found +query.sql:11:10: column reference "invalid_reference" not found diff --git a/internal/endtoend/testdata/invalid_table_alias/mysql/stderr.txt b/internal/endtoend/testdata/invalid_table_alias/mysql/stderr.txt index d4c26d650f..810c893a70 100644 --- a/internal/endtoend/testdata/invalid_table_alias/mysql/stderr.txt +++ b/internal/endtoend/testdata/invalid_table_alias/mysql/stderr.txt @@ -1,2 +1,2 @@ # package querytest -query.sql:9:1: table alias "p" does not exist +query.sql:11:9: table alias "p" does not exist diff --git a/internal/engine/dolphin/convert.go b/internal/engine/dolphin/convert.go index 56fad07b53..3ddb116ea6 100644 --- a/internal/engine/dolphin/convert.go +++ b/internal/engine/dolphin/convert.go @@ -300,6 +300,7 @@ func (c *cc) convertColumnNameExpr(n *pcast.ColumnNameExpr) *ast.ColumnRef { Fields: &ast.List{ Items: items, }, + Location: n.OriginTextPosition(), } } @@ -603,6 +604,7 @@ func (c *cc) convertValueExpr(n *driver.ValueExpr) *ast.A_Const { Val: &ast.Integer{ Ival: n.Datum.GetInt64(), }, + Location: n.OriginTextPosition(), } case mysql.TypeDouble, @@ -612,6 +614,7 @@ func (c *cc) convertValueExpr(n *driver.ValueExpr) *ast.A_Const { Val: &ast.Float{ // TODO: Extract the value from n.TexprNode }, + Location: n.OriginTextPosition(), } case mysql.TypeBlob, mysql.TypeString, mysql.TypeVarchar, mysql.TypeVarString, mysql.TypeLongBlob, mysql.TypeMediumBlob, mysql.TypeTinyBlob, mysql.TypeEnum: @@ -620,6 +623,7 @@ func (c *cc) convertValueExpr(n *driver.ValueExpr) *ast.A_Const { Val: &ast.String{ Str: n.Datum.GetString(), }, + Location: n.OriginTextPosition(), } } diff --git a/internal/sql/rewrite/parameters.go b/internal/sql/rewrite/parameters.go index 5df437fdcf..bf5e18dfdc 100644 --- a/internal/sql/rewrite/parameters.go +++ b/internal/sql/rewrite/parameters.go @@ -2,6 +2,7 @@ package rewrite import ( "fmt" + "strings" "github.com/kyleconroy/sqlc/internal/config" "github.com/kyleconroy/sqlc/internal/source" @@ -66,7 +67,14 @@ func paramFromFuncCall(call *ast.FuncCall) (named.Param, string) { // TODO: This code assumes that sqlc.arg(name) / sqlc.narg(name) is on a single line // with no extraneous spaces (or any non-significant tokens for that matter) - origText := fmt.Sprintf("%s.%s(%s)", call.Func.Schema, call.Func.Name, origName) + // except between the function name and argument + funcName := call.Func.Schema + "." + call.Func.Name + spaces := "" + if call.Args != nil && len(call.Args.Items) > 0 { + leftParen := call.Args.Items[0].Pos() - 1 + spaces = strings.Repeat(" ", leftParen-call.Location-len(funcName)) + } + origText := fmt.Sprintf("%s%s(%s)", funcName, spaces, origName) return param, origText }