Skip to content

Commit 7900184

Browse files
committed
Add sql execute to connection
1 parent c7ff0dc commit 7900184

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

Diff for: tarantool/connection.py

+22-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,23 @@ 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+
Execute SQL query in database.
794+
795+
:param query: SQL syntax query
796+
:type query: str
797+
798+
:param params: Bind values to use in query
799+
:type params: list, dict
800+
801+
:return: query result data
802+
:rtype: list
803+
'''
804+
if not params:
805+
params = []
806+
request = RequestExecute(self, query, params)
807+
response = self._send_request(request)
808+
return response

Diff for: 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

Diff for: 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,
@@ -342,3 +345,19 @@ def __init__(self, conn, sync):
342345
request_body = msgpack.dumps({IPROTO_CODE: self.request_type,
343346
IPROTO_SYNC: sync})
344347
self._body = request_body
348+
349+
350+
class RequestExecute(Request):
351+
'''
352+
Represents EXECUTE request
353+
'''
354+
request_type = REQUEST_TYPE_EXECUTE
355+
356+
# pylint: disable=W0231
357+
def __init__(self, conn, sql, args):
358+
super(RequestExecute, self).__init__(conn)
359+
360+
request_body = msgpack.dumps({IPROTO_SQL_TEXT: sql,
361+
IPROTO_SQL_BIND: args})
362+
363+
self._body = request_body

0 commit comments

Comments
 (0)