16
16
import pytz
17
17
18
18
import trino
19
- from trino .exceptions import TrinoQueryError
19
+ from tests .integration .conftest import trino_version
20
+ from trino .exceptions import TrinoQueryError , TrinoUserError
20
21
from trino .transaction import IsolationLevel
21
22
22
23
@@ -43,16 +44,30 @@ def trino_connection_with_transaction(run_trino):
43
44
)
44
45
45
46
46
- def test_select_query (trino_connection , trino_version ):
47
+ @pytest .fixture
48
+ def trino_connection_in_autocommit (run_trino ):
49
+ _ , host , port = run_trino
50
+
51
+ yield trino .dbapi .Connection (
52
+ host = host ,
53
+ port = port ,
54
+ user = "test" ,
55
+ source = "test" ,
56
+ max_attempts = 1 ,
57
+ isolation_level = IsolationLevel .AUTOCOMMIT ,
58
+ )
59
+
60
+
61
+ def test_select_query (trino_connection ):
47
62
cur = trino_connection .cursor ()
48
63
cur .execute ("SELECT * FROM system.runtime.nodes" )
49
64
rows = cur .fetchall ()
50
65
assert len (rows ) > 0
51
66
row = rows [0 ]
52
- if trino_version == "latest" :
67
+ if trino_version () == "latest" :
53
68
assert row [2 ] is not None
54
69
else :
55
- assert row [2 ] == trino_version
70
+ assert row [2 ] == trino_version ()
56
71
columns = dict ([desc [:2 ] for desc in cur .description ])
57
72
assert columns ["node_id" ] == "varchar"
58
73
assert columns ["http_uri" ] == "varchar"
@@ -362,6 +377,24 @@ def test_transaction_multiple(trino_connection_with_transaction):
362
377
assert len (rows2 ) == 1000
363
378
364
379
380
+ @pytest .mark .skipif (trino_version () == '351' , reason = "Autocommit behaves "
381
+ "differently in older Trino versions" )
382
+ def test_transaction_autocommit (trino_connection_in_autocommit ):
383
+ with trino_connection_in_autocommit as connection :
384
+ connection .start_transaction ()
385
+ cur = connection .cursor ()
386
+ cur .execute (
387
+ """
388
+ CREATE TABLE memory.default.nation
389
+ AS SELECT * from tpch.tiny.nation
390
+ """ )
391
+
392
+ with pytest .raises (TrinoUserError ) as transaction_error :
393
+ cur .fetchall ()
394
+ assert "Catalog only supports writes using autocommit: memory" \
395
+ in str (transaction_error .value )
396
+
397
+
365
398
def test_invalid_query_throws_correct_error (trino_connection ):
366
399
"""Tests that an invalid query raises the correct exception
367
400
"""
0 commit comments