@@ -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
58117func TestQueryWithCommitTxFlag (t * testing.T ) {
0 commit comments