Skip to content

Commit

Permalink
Fix issue with passing parameters to a multiple statements SQL query (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
totem3 committed Jun 28, 2023
1 parent e994d29 commit 4af3e14
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 1 deletion.
4 changes: 3 additions & 1 deletion internal/analyzer.go
Expand Up @@ -208,7 +208,9 @@ func (a *Analyzer) Analyze(ctx context.Context, conn *Conn, query string, args [
if err != nil {
return nil, err
}
args = args[:len(action.Args())]
if mode == zetasql.ParameterPositional {
args = args[len(action.Args()):]
}
return action, nil
})
}
Expand Down
59 changes: 59 additions & 0 deletions query_test.go
Expand Up @@ -4992,6 +4992,65 @@ FROM (
{nil},
},
},

{
name: "single statement with named params",
query: `
SELECT @a + @b;
`,
args: []interface{}{
sql.NamedArg{Name: "a", Value: 1},
sql.NamedArg{Name: "b", Value: 2},
},
expectedRows: [][]interface{}{{int64(3)}},
},
{
name: "not enough named params given",
query: `
SELECT @a + @b;
`,
args: []interface{}{sql.NamedArg{Name: "a", Value: 1}},
expectedErr: "not enough query arguments",
},
{
name: "multiple statements with named params",
query: `
CREATE TEMP TABLE t1 AS SELECT @a c1;
SELECT c1 * @b * @c FROM t1;
`,
args: []interface{}{
sql.NamedArg{Name: "a", Value: 1},
sql.NamedArg{Name: "b", Value: 2},
sql.NamedArg{Name: "c", Value: 3},
},
expectedRows: [][]interface{}{{int64(6)}},
},

{
name: "single statement with positional params",
query: `
SELECT ? + ?;
`,
args: []interface{}{int64(1), int64(2)},
expectedRows: [][]interface{}{{int64(3)}},
},
{
name: "not enough positional params given",
query: `
SELECT ? + ?;
`,
args: []interface{}{int64(1)},
expectedErr: "not enough query arguments",
},
{
name: "multiple statements with positional params",
query: `
CREATE TEMP TABLE t1 AS SELECT ? c1;
SELECT c1 * ? * ? FROM t1;
`,
args: []interface{}{int64(1), int64(2), int64(3)},
expectedRows: [][]interface{}{{int64(6)}},
},
} {
test := test
t.Run(test.name, func(t *testing.T) {
Expand Down

0 comments on commit 4af3e14

Please sign in to comment.