Skip to content

Commit f5cd82f

Browse files
committed
tests with query.Client.DoTx() with different tx settings
1 parent 5bf49ba commit f5cd82f

File tree

2 files changed

+93
-27
lines changed

2 files changed

+93
-27
lines changed

query/errors.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package query
2+
3+
import "errors"
4+
5+
var (
6+
ErrIncompatibleTxSettings = errors.New("incompatible tx settings")
7+
)

tests/integration/query_tx_execute_test.go

Lines changed: 86 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -26,33 +26,92 @@ func TestQueryTxExecute(t *testing.T) {
2626
columnNames []string
2727
columnTypes []string
2828
)
29-
err := scope.DriverWithLogs().Query().DoTx(scope.Ctx, func(ctx context.Context, tx query.TxActor) (err error) {
30-
res, err := tx.Query(ctx, "SELECT 1 AS col1")
31-
if err != nil {
32-
return err
33-
}
34-
rs, err := res.NextResultSet(ctx)
35-
if err != nil {
36-
return err
37-
}
38-
columnNames = rs.Columns()
39-
for _, t := range rs.ColumnTypes() {
40-
columnTypes = append(columnTypes, t.Yql())
41-
}
42-
row, err := rs.NextRow(ctx)
43-
if err != nil {
44-
return err
45-
}
46-
var col1 int
47-
err = row.ScanNamed(query.Named("col1", &col1))
48-
if err != nil {
49-
return err
50-
}
51-
return nil
52-
}, query.WithIdempotent(), query.WithTxSettings(query.TxSettings(query.WithSerializableReadWrite())))
53-
require.NoError(t, err)
54-
require.Equal(t, []string{"col1"}, columnNames)
55-
require.Equal(t, []string{"Int32"}, columnTypes)
29+
t.Run("SerializableReadWrite", func(t *testing.T) {
30+
err := scope.DriverWithLogs().Query().DoTx(scope.Ctx, func(ctx context.Context, tx query.TxActor) (err error) {
31+
res, err := tx.Query(ctx, "SELECT 1 AS col1")
32+
if err != nil {
33+
return err
34+
}
35+
rs, err := res.NextResultSet(ctx)
36+
if err != nil {
37+
return err
38+
}
39+
columnNames = rs.Columns()
40+
for _, t := range rs.ColumnTypes() {
41+
columnTypes = append(columnTypes, t.Yql())
42+
}
43+
row, err := rs.NextRow(ctx)
44+
if err != nil {
45+
return err
46+
}
47+
var col1 int
48+
err = row.ScanNamed(query.Named("col1", &col1))
49+
if err != nil {
50+
return err
51+
}
52+
return nil
53+
}, query.WithIdempotent(), query.WithTxSettings(query.TxSettings(query.WithSerializableReadWrite())))
54+
require.NoError(t, err)
55+
require.Equal(t, []string{"col1"}, columnNames)
56+
require.Equal(t, []string{"Int32"}, columnTypes)
57+
})
58+
t.Run("SnapshotReadOnly", func(t *testing.T) {
59+
err := scope.DriverWithLogs().Query().DoTx(scope.Ctx, func(ctx context.Context, tx query.TxActor) (err error) {
60+
res, err := tx.Query(ctx, "SELECT 1 AS col1")
61+
if err != nil {
62+
return err
63+
}
64+
rs, err := res.NextResultSet(ctx)
65+
if err != nil {
66+
return err
67+
}
68+
columnNames = rs.Columns()
69+
for _, t := range rs.ColumnTypes() {
70+
columnTypes = append(columnTypes, t.Yql())
71+
}
72+
row, err := rs.NextRow(ctx)
73+
if err != nil {
74+
return err
75+
}
76+
var col1 int
77+
err = row.ScanNamed(query.Named("col1", &col1))
78+
if err != nil {
79+
return err
80+
}
81+
return nil
82+
}, query.WithIdempotent(), query.WithTxSettings(query.TxSettings(query.WithSnapshotReadOnly())))
83+
require.NoError(t, err)
84+
require.Equal(t, []string{"col1"}, columnNames)
85+
require.Equal(t, []string{"Int32"}, columnTypes)
86+
})
87+
t.Run("OnlineReadOnly", func(t *testing.T) {
88+
err := scope.DriverWithLogs().Query().DoTx(scope.Ctx, func(ctx context.Context, tx query.TxActor) (err error) {
89+
res, err := tx.Query(ctx, "SELECT 1 AS col1")
90+
if err != nil {
91+
return err
92+
}
93+
rs, err := res.NextResultSet(ctx)
94+
if err != nil {
95+
return err
96+
}
97+
columnNames = rs.Columns()
98+
for _, t := range rs.ColumnTypes() {
99+
columnTypes = append(columnTypes, t.Yql())
100+
}
101+
row, err := rs.NextRow(ctx)
102+
if err != nil {
103+
return err
104+
}
105+
var col1 int
106+
err = row.ScanNamed(query.Named("col1", &col1))
107+
if err != nil {
108+
return err
109+
}
110+
return nil
111+
}, query.WithIdempotent(), query.WithTxSettings(query.TxSettings(query.WithOnlineReadOnly())))
112+
require.Error(t, err)
113+
require.ErrorIs(t, err, query.ErrIncompatibleTxSettings)
114+
})
56115
}
57116

58117
func TestQueryWithCommitTxFlag(t *testing.T) {

0 commit comments

Comments
 (0)