(t *testing.T)
| 1091 | duckTx := sess.TryGetTxn() |
| 1092 | require.True(t, ctx.GetIgnoreAutoCommit()) |
| 1093 | require.NotNil(t, tx) |
| 1094 | require.NotNil(t, duckTx) |
| 1095 | |
| 1096 | query := "SELECT UNHEX(s) FROM mytable ORDER BY i LIMIT 1" |
| 1097 | ctx = ctx.WithQuery(query) |
| 1098 | _, _, _, err = e.Query(ctx, query) |
| 1099 | require.ErrorContains(t, err, "Invalid input for hex digit") |
| 1100 | require.True(t, ctx.GetIgnoreAutoCommit()) |
| 1101 | require.Same(t, tx, ctx.GetTransaction()) |
| 1102 | require.Same(t, duckTx, sess.TryGetTxn()) |
| 1103 | |
| 1104 | var one int |
| 1105 | err = duckTx.QueryRowContext(ctx, "SELECT 1").Scan(&one) |
| 1106 | require.ErrorContains(t, err, "Current transaction is aborted") |
| 1107 | require.Same(t, tx, ctx.GetTransaction()) |
| 1108 | require.Same(t, duckTx, sess.TryGetTxn()) |
| 1109 | |
| 1110 | err = sess.Rollback(ctx, tx) |
| 1111 | require.NoError(t, err) |
| 1112 | ctx.SetIgnoreAutoCommit(false) |
| 1113 | ctx.SetTransaction(nil) |
| 1114 | require.False(t, ctx.GetIgnoreAutoCommit()) |
| 1115 | require.Nil(t, ctx.GetTransaction()) |
| 1116 | require.Nil(t, sess.TryGetTxn()) |
| 1117 | } |
| 1118 | |
| 1119 | func TestInsertReturningTransactionLifecycle(t *testing.T) { |
| 1120 | h := NewDefaultDuckHarness() |
| 1121 | h.Setup([]setup.SetupScript{{ |
| 1122 | "CREATE DATABASE mydb", |
| 1123 | "USE mydb", |
| 1124 | "CREATE TABLE returning_tx (id INT PRIMARY KEY, name VARCHAR(20) NOT NULL)", |
| 1125 | }}) |
| 1126 | e, err := h.NewEngine(t) |
| 1127 | require.NoError(t, err) |
| 1128 | defer e.Close() |
| 1129 | |
| 1130 | ctx := enginetest.NewContext(h) |
| 1131 | sess := ctx.Session.(*backend.Session) |
| 1132 | run := func(query string) ([]sql.Row, error) { |
| 1133 | ctx = ctx.WithQuery(query) |
| 1134 | _, iter, _, err := e.Query(ctx, query) |
| 1135 | if err != nil { |
| 1136 | return nil, err |
| 1137 | } |
| 1138 | return sql.RowIterToRows(ctx, iter) |
| 1139 | } |
| 1140 | begin := func() (sql.Transaction, *stdsql.Tx) { |
| 1141 | for _, query := range []string{"SET autocommit = 0", "START TRANSACTION"} { |
| 1142 | _, err := run(query) |
| 1143 | require.NoError(t, err) |
| 1144 | } |
| 1145 | tx := ctx.GetTransaction() |
| 1146 | duckTx := sess.TryGetTxn() |
| 1147 | require.NotNil(t, tx) |
nothing calls this directly
no test coverage detected