Skip to content

Commit d2f5bbf

Browse files
committed
Add sql execute to connection
Closes #159 Co-authored-by Denis Ignatenko <[email protected]>
1 parent 3b0a3fa commit d2f5bbf

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
lines changed

tarantool/connection.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
RequestSubscribe,
3535
RequestUpdate,
3636
RequestUpsert,
37-
RequestAuthenticate
37+
RequestAuthenticate,
38+
RequestExecute
3839
)
3940
from tarantool.space import Space
4041
from tarantool.const import (
@@ -785,3 +786,22 @@ def generate_sync(self):
785786
Need override for async io connection
786787
'''
787788
return 0
789+
790+
def execute(self, query, params=None):
791+
'''
792+
Execute SQL request.
793+
794+
:param query: SQL syntax query
795+
:type query: str
796+
797+
:param params: Bind values to use in query
798+
:type params: list, dict
799+
800+
:return: query result data
801+
:rtype: list
802+
'''
803+
if not params:
804+
params = []
805+
request = RequestExecute(self, query, params)
806+
response = self._send_request(request)
807+
return response

tarantool/const.py

+6
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
#
3030
IPROTO_DATA = 0x30
3131
IPROTO_ERROR = 0x31
32+
#
33+
IPROTO_METADATA = 0x32
34+
IPROTO_SQL_TEXT = 0x40
35+
IPROTO_SQL_BIND = 0x41
36+
IPROTO_SQL_INFO = 0x42
3237

3338
IPROTO_GREETING_SIZE = 128
3439
IPROTO_BODY_MAX_LEN = 2147483648
@@ -44,6 +49,7 @@
4449
REQUEST_TYPE_EVAL = 8
4550
REQUEST_TYPE_UPSERT = 9
4651
REQUEST_TYPE_CALL = 10
52+
REQUEST_TYPE_EXECUTE = 11
4753
REQUEST_TYPE_PING = 64
4854
REQUEST_TYPE_JOIN = 65
4955
REQUEST_TYPE_SUBSCRIBE = 66

tarantool/request.py

+19
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
IPROTO_OPS,
2828
# IPROTO_INDEX_BASE,
2929
IPROTO_SCHEMA_ID,
30+
IPROTO_SQL_TEXT,
31+
IPROTO_SQL_BIND,
3032
REQUEST_TYPE_OK,
3133
REQUEST_TYPE_PING,
3234
REQUEST_TYPE_SELECT,
@@ -37,6 +39,7 @@
3739
REQUEST_TYPE_UPSERT,
3840
REQUEST_TYPE_CALL16,
3941
REQUEST_TYPE_CALL,
42+
REQUEST_TYPE_EXECUTE,
4043
REQUEST_TYPE_EVAL,
4144
REQUEST_TYPE_AUTHENTICATE,
4245
REQUEST_TYPE_JOIN,
@@ -332,3 +335,19 @@ def __init__(self, conn, sync):
332335
request_body = msgpack.dumps({IPROTO_CODE: self.request_type,
333336
IPROTO_SYNC: sync})
334337
self._body = request_body
338+
339+
340+
class RequestExecute(Request):
341+
'''
342+
Represents EXECUTE request
343+
'''
344+
request_type = REQUEST_TYPE_EXECUTE
345+
346+
# pylint: disable=W0231
347+
def __init__(self, conn, sql, args):
348+
super(RequestExecute, self).__init__(conn)
349+
350+
request_body = msgpack.dumps({IPROTO_SQL_TEXT: sql,
351+
IPROTO_SQL_BIND: args})
352+
353+
self._body = request_body

0 commit comments

Comments
 (0)