@@ -100,6 +100,8 @@ def __init__(
100
100
self .catalog = catalog
101
101
self .schema = schema
102
102
self .session_properties = session_properties
103
+ # mypy cannot follow module import
104
+ self ._http_session = prestodb .client .PrestoRequest .http .Session ()
103
105
self .http_headers = http_headers
104
106
self .http_scheme = http_scheme
105
107
self .auth = auth
@@ -108,6 +110,7 @@ def __init__(
108
110
self .request_timeout = request_timeout
109
111
110
112
self ._isolation_level = isolation_level
113
+ self ._request = None
111
114
self ._transaction = None
112
115
113
116
@property
@@ -124,7 +127,7 @@ def __enter__(self):
124
127
def __exit__ (self , exc_type , exc_value , traceback ):
125
128
try :
126
129
self .commit ()
127
- except :
130
+ except Exception :
128
131
self .rollback ()
129
132
else :
130
133
self .close ()
@@ -135,14 +138,32 @@ def close(self):
135
138
pass
136
139
137
140
def start_transaction (self ):
138
- request = prestodb .client .PrestoRequest (
141
+ self ._transaction = Transaction (self ._create_request ())
142
+ self ._transaction .begin ()
143
+ return self ._transaction
144
+
145
+ def commit (self ):
146
+ if self .transaction is None :
147
+ return
148
+ self ._transaction .commit ()
149
+ self ._transaction = None
150
+
151
+ def rollback (self ):
152
+ if self .transaction is None :
153
+ raise RuntimeError ('no transaction was started' )
154
+ self ._transaction .rollback ()
155
+ self ._transaction = None
156
+
157
+ def _create_request (self ):
158
+ return prestodb .client .PrestoRequest (
139
159
self .host ,
140
160
self .port ,
141
161
self .user ,
142
162
self .source ,
143
163
self .catalog ,
144
164
self .schema ,
145
165
self .session_properties ,
166
+ self ._http_session ,
146
167
self .http_headers ,
147
168
NO_TRANSACTION ,
148
169
self .http_scheme ,
@@ -151,25 +172,10 @@ def start_transaction(self):
151
172
self .max_attempts ,
152
173
self .request_timeout ,
153
174
)
154
- self ._transaction = Transaction (request )
155
- self ._transaction .begin ()
156
- return self ._transaction
157
-
158
- def commit (self ):
159
- if self .transaction is None :
160
- return
161
- self ._transaction .commit ()
162
- self ._transaction = None
163
-
164
- def rollback (self ):
165
- if self .transaction is None :
166
- raise RuntimeError ('no transaction was started' )
167
- self ._transaction .rollback ()
168
- self ._transaction = None
169
175
170
176
def cursor (self ):
171
177
"""Return a new :py:class:`Cursor` object using the connection."""
172
- return Cursor (self )
178
+ return Cursor (self , self . _create_request () )
173
179
174
180
175
181
class Cursor (object ):
@@ -179,13 +185,14 @@ class Cursor(object):
179
185
cursor are immediately visible by other cursors or connections.
180
186
181
187
"""
182
- def __init__ (self , connection ):
188
+ def __init__ (self , connection , request ):
183
189
if not isinstance (connection , Connection ):
184
190
raise ValueError (
185
191
'connection must be a Connection object: {}' .format (
186
192
type (connection )
187
193
))
188
194
self ._connection = connection
195
+ self ._request = request
189
196
190
197
self .arraysize = 1
191
198
self ._iterator = None
@@ -195,7 +202,6 @@ def __init__(self, connection):
195
202
def connection (self ):
196
203
return self ._connection
197
204
198
-
199
205
@property
200
206
def description (self ):
201
207
if self ._query .columns is None :
@@ -234,28 +240,8 @@ def execute(self, operation, params=None):
234
240
if self .connection .isolation_level != IsolationLevel .AUTOCOMMIT :
235
241
if self .connection .transaction is None :
236
242
self .connection .start_transaction ()
237
- transaction_id = self .connection .transaction .id
238
- else :
239
- transaction_id = 'NONE'
240
-
241
- request = prestodb .client .PrestoRequest (
242
- self .connection .host ,
243
- self .connection .port ,
244
- self .connection .user ,
245
- self .connection .source ,
246
- self .connection .catalog ,
247
- self .connection .schema ,
248
- self .connection .session_properties ,
249
- self .connection .http_headers ,
250
- transaction_id ,
251
- self .connection .http_scheme ,
252
- self .connection .auth ,
253
- self .connection .redirect_handler ,
254
- self .connection .max_attempts ,
255
- self .connection .request_timeout ,
256
- )
257
243
258
- self ._query = prestodb .client .PrestoQuery (request , sql = operation )
244
+ self ._query = prestodb .client .PrestoQuery (self . _request , sql = operation )
259
245
result = self ._query .execute ()
260
246
self ._iterator = iter (result )
261
247
return result
0 commit comments