Skip to content

Commit

Permalink
Add tests to demonstrate failure when reusing prepared statements.
Browse files Browse the repository at this point in the history
  • Loading branch information
grzm committed Aug 19, 2019
1 parent 81454c5 commit 0cdacf8
Showing 1 changed file with 64 additions and 0 deletions.
64 changes: 64 additions & 0 deletions driver_test.go
Expand Up @@ -405,6 +405,70 @@ func TestEmptyStatementError(t *testing.T) {
assertErr(t, err, "empty statement")
}

func TestColumnsWhenReusingPreparedStatements(t *testing.T) {
connDB := openConnection(t)
defer closeConnection(t, connDB)

stmt, err := connDB.PrepareContext(ctx, "SELECT true AS res")
assertNoErr(t, err)

var res bool
rows, err := stmt.QueryContext(ctx)
assertNoErr(t, err)
defer rows.Close()

columns, err := rows.Columns()
assertNoErr(t, err)
assertEqual(t, len(columns), 1)

assertNext(t, rows)
assertNoErr(t, rows.Scan(&res))
assertEqual(t, res, true)
assertNoNext(t, rows)

// Reusing statement
rows, err = stmt.QueryContext(ctx)
assertNoErr(t, err)

columns, err = rows.Columns()
assertNoErr(t, err)
assertEqual(t, len(columns), 1)
}

func TestRowIterationWhenReusingPreparedStatements(t *testing.T) {
connDB := openConnection(t)
defer closeConnection(t, connDB)

stmt, err := connDB.PrepareContext(ctx, "SELECT true AS res")
assertNoErr(t, err)

var res bool
rows, err := stmt.QueryContext(ctx)
assertNoErr(t, err)
defer rows.Close()

columns, err := rows.Columns()
assertNoErr(t, err)
assertEqual(t, len(columns), 1)

assertNoErr(t, err)

assertNext(t, rows)
assertNoErr(t, rows.Scan(&res))
assertEqual(t, res, true)

assertNoNext(t, rows)

// Reusing statement
rows, err = stmt.QueryContext(ctx)
assertNoErr(t, err)

assertNext(t, rows)
assertNoErr(t, rows.Scan(&res))
assertEqual(t, res, true)
assertNoNext(t, rows)
}

func TestValueTypes(t *testing.T) {
connDB := openConnection(t, "test_value_types_pre")
defer closeConnection(t, connDB, "test_value_types_post")
Expand Down

0 comments on commit 0cdacf8

Please sign in to comment.