Skip to content

Commit c74e468

Browse files
committed
make to native converters by default
1 parent e4a2fd8 commit c74e468

File tree

4 files changed

+42
-7
lines changed

4 files changed

+42
-7
lines changed

examples/basic_example_v2/basic_example.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,10 @@ def select_simple(pool, path):
9696
result_sets = pool.execute_with_retries(
9797
"""
9898
PRAGMA TablePathPrefix("{}");
99-
$format = DateTime::Format("%Y-%m-%d");
10099
SELECT
101100
series_id,
102101
title,
103-
$format(DateTime::FromSeconds(CAST(DateTime::ToSeconds(DateTime::IntervalFromDays(CAST(release_date AS Int16))) AS Uint32))) AS release_date
102+
release_date
104103
FROM series
105104
WHERE series_id = 1;
106105
""".format(
@@ -143,10 +142,9 @@ def select_with_parameters(pool, path, series_id, season_id, episode_id):
143142
def callee(session):
144143
query = """
145144
PRAGMA TablePathPrefix("{}");
146-
$format = DateTime::Format("%Y-%m-%d");
147145
SELECT
148146
title,
149-
$format(DateTime::FromSeconds(CAST(DateTime::ToSeconds(DateTime::IntervalFromDays(CAST(air_date AS Int16))) AS Uint32))) AS air_date
147+
air_date
150148
FROM episodes
151149
WHERE series_id = $seriesId AND season_id = $seasonId AND episode_id = $episodeId;
152150
""".format(

ydb/query/base.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,32 @@ def __exit__(self, exc_type, exc_val, exc_tb):
5353

5454

5555
class QueryClientSettings:
56-
pass
56+
def __init__(self):
57+
self._native_datetime_in_result_sets = True
58+
self._native_date_in_result_sets = True
59+
self._native_json_in_result_sets = True
60+
self._native_interval_in_result_sets = True
61+
self._native_timestamp_in_result_sets = True
62+
63+
def with_native_timestamp_in_result_sets(self, enabled: bool) -> "QueryClientSettings":
64+
self._native_timestamp_in_result_sets = enabled
65+
return self
66+
67+
def with_native_interval_in_result_sets(self, enabled: bool) -> "QueryClientSettings":
68+
self._native_interval_in_result_sets = enabled
69+
return self
70+
71+
def with_native_json_in_result_sets(self, enabled: bool) -> "QueryClientSettings":
72+
self._native_json_in_result_sets = enabled
73+
return self
74+
75+
def with_native_date_in_result_sets(self, enabled: bool) -> "QueryClientSettings":
76+
self._native_date_in_result_sets = enabled
77+
return self
78+
79+
def with_native_datetime_in_result_sets(self, enabled: bool) -> "QueryClientSettings":
80+
self._native_datetime_in_result_sets = enabled
81+
return self
5782

5883

5984
class IQuerySessionState(abc.ABC):
@@ -284,6 +309,7 @@ def execute(
284309
exec_mode: Optional[QueryExecMode] = None,
285310
parameters: Optional[dict] = None,
286311
concurrent_result_sets: Optional[bool] = False,
312+
settings: Optional[QueryClientSettings] = None,
287313
) -> Iterator:
288314
"""WARNING: This API is experimental and could be changed.
289315
@@ -300,6 +326,7 @@ def execute(
300326
4) QueryExecMode.PARSE.
301327
:param parameters: dict with parameters and YDB types;
302328
:param concurrent_result_sets: A flag to allow YDB mix parts of different result sets. Default is False;
329+
:param settings: An additional request settings QueryClientSettings;
303330
304331
:return: Iterator with result sets
305332
"""
@@ -367,13 +394,14 @@ def wrap_execute_query_response(
367394
response_pb: _apis.ydb_query.ExecuteQueryResponsePart,
368395
tx: Optional[IQueryTxContext] = None,
369396
commit_tx: Optional[bool] = False,
397+
settings: Optional[QueryClientSettings] = None,
370398
) -> convert.ResultSet:
371399
issues._process_response(response_pb)
372400
if tx and response_pb.tx_meta and not tx.tx_id:
373401
tx._move_to_beginned(response_pb.tx_meta.id)
374402
if tx and commit_tx:
375403
tx._move_to_commited()
376-
return convert.ResultSet.from_message(response_pb.result_set)
404+
return convert.ResultSet.from_message(response_pb.result_set, settings)
377405

378406

379407
def bad_session_handler(func):

ydb/query/session.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,5 +313,9 @@ def execute(
313313

314314
return base.SyncResponseContextIterator(
315315
stream_it,
316-
lambda resp: base.wrap_execute_query_response(rpc_state=None, response_pb=resp),
316+
lambda resp: base.wrap_execute_query_response(
317+
rpc_state=None,
318+
response_pb=resp,
319+
settings=self._settings
320+
),
317321
)

ydb/query/transaction.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ def execute(
372372
syntax: Optional[base.QuerySyntax] = None,
373373
exec_mode: Optional[base.QueryExecMode] = None,
374374
concurrent_result_sets: Optional[bool] = False,
375+
settings: Optional[base.QueryClientSettings] = None,
375376
) -> base.SyncResponseContextIterator:
376377
"""WARNING: This API is experimental and could be changed.
377378
@@ -388,6 +389,7 @@ def execute(
388389
4) QueryExecMode.PARSE.
389390
:param parameters: dict with parameters and YDB types;
390391
:param concurrent_result_sets: A flag to allow YDB mix parts of different result sets. Default is False;
392+
:param settings: An additional request settings QueryClientSettings;
391393
392394
:return: Iterator with result sets
393395
"""
@@ -402,13 +404,16 @@ def execute(
402404
parameters=parameters,
403405
concurrent_result_sets=concurrent_result_sets,
404406
)
407+
408+
settings = settings if settings is not None else self.session._settings
405409
self._prev_stream = base.SyncResponseContextIterator(
406410
stream_it,
407411
lambda resp: base.wrap_execute_query_response(
408412
rpc_state=None,
409413
response_pb=resp,
410414
tx=self,
411415
commit_tx=commit_tx,
416+
settings=settings
412417
),
413418
)
414419
return self._prev_stream

0 commit comments

Comments
 (0)