Skip to content

Commit

Permalink
Merge pull request #7493 from planetscale/fix-7379
Browse files Browse the repository at this point in the history
make sure to add necessary bindvars when preparing queries
  • Loading branch information
systay committed Feb 16, 2021
2 parents a577cc4 + d263d30 commit ece9517
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 0 deletions.
16 changes: 16 additions & 0 deletions go/test/endtoend/preparestmt/stmt_methods_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,22 @@ func TestSelect(t *testing.T) {
selectWhere(t, dbo, "")
}

func TestSelectDatabase(t *testing.T) {
defer cluster.PanicHandler(t)
dbo := Connect(t)
defer dbo.Close()
prepare, err := dbo.Prepare("select database()")
require.NoError(t, err)
rows, err := prepare.Query()
require.NoError(t, err)
defer rows.Close()
var resultBytes sql.RawBytes
require.True(t, rows.Next(), "no rows found")
err = rows.Scan(&resultBytes)
require.NoError(t, err)
assert.Equal(t, string(resultBytes), "test_keyspace")
}

// TestInsertUpdateDelete validates all insert, update and
// delete method on prepared statements.
func TestInsertUpdateDelete(t *testing.T) {
Expand Down
6 changes: 6 additions & 0 deletions go/vt/vtgate/executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -1612,6 +1612,12 @@ func (e *Executor) handlePrepare(ctx context.Context, safeSession *SafeSession,
return nil, err
}

err = e.addNeededBindVars(plan.BindVarNeeds, bindVars, safeSession)
if err != nil {
logStats.Error = err
return nil, err
}

qr, err := plan.Instructions.GetFields(vcursor, bindVars)
logStats.ExecuteTime = time.Since(execStart)
var errCount uint64
Expand Down
11 changes: 11 additions & 0 deletions go/vt/vtgate/executor_select_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2178,6 +2178,17 @@ func TestSelectBindvarswithPrepare(t *testing.T) {
}
}

func TestSelectDatabasePrepare(t *testing.T) {
executor, _, _, _ := createExecutorEnv()
executor.normalize = true
logChan := QueryLogger.Subscribe("Test")
defer QueryLogger.Unsubscribe(logChan)

sql := "select database()"
_, err := executorPrepare(executor, sql, map[string]*querypb.BindVariable{})
require.NoError(t, err)
}

func TestSelectWithUnionAll(t *testing.T) {
executor, sbc1, sbc2, _ := createLegacyExecutorEnv()
executor.normalize = true
Expand Down

0 comments on commit ece9517

Please sign in to comment.