From 07328605ab19be21dcd496b7af2791ec9b1d3c25 Mon Sep 17 00:00:00 2001 From: Jason Fine Date: Tue, 16 May 2023 16:32:28 +0300 Subject: [PATCH 1/2] Added support for queries that return scalar results A scalar result is returned as: ``` [ { "status": "Success", "kind": "upsolver_scalar_query_response", "result": { "scalar": { "value": "", "valueType": "" } } } ] ``` This commit transforms this result into a 1x1 grid with a column name of `valueType`. --- upsolver/client/poller.py | 11 ++++++++--- upsolver/dbapi/examples.py | 6 ++++++ upsolver/dbapi/utils.py | 9 +++++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/upsolver/client/poller.py b/upsolver/client/poller.py index 45dbc7c..dd7e57d 100644 --- a/upsolver/client/poller.py +++ b/upsolver/client/poller.py @@ -92,9 +92,14 @@ def extract_json() -> dict: if 'result' in rjson: result = rjson['result'] - grid = result['grid'] # columns, data, ... - column_names = [c['name'] for c in grid['columns']] - data_w_columns: ExecutionResult = [dict(zip(column_names, row)) for row in grid['data']] + if rjson['kind'] == 'upsolver_scalar_query_response': + scalar = result['scalar'] + column_name = [scalar['valueType']] + data_w_columns: ExecutionResult = [dict(zip([column_name], [scalar]))] + else: + grid = result['grid'] # columns, data, ... + column_name = [c['name'] for c in grid['columns']] + data_w_columns: ExecutionResult = [dict(zip(column_name, row)) for row in grid['data']] return data_w_columns, result.get('next') else: diff --git a/upsolver/dbapi/examples.py b/upsolver/dbapi/examples.py index ff757b4..fa20432 100644 --- a/upsolver/dbapi/examples.py +++ b/upsolver/dbapi/examples.py @@ -76,3 +76,9 @@ except BaseException as e: print('Caught error on closed connection') # %% +job_name = '' # Job name here +print('Execute a `SHOW CREATE` statement:') +result1 = cursor.execute(f'show create job {job_name};') +print('create job statement:') +result2 = cursor.fetchone() +print(result2) diff --git a/upsolver/dbapi/utils.py b/upsolver/dbapi/utils.py index 5e06b2d..4ce8f5b 100644 --- a/upsolver/dbapi/utils.py +++ b/upsolver/dbapi/utils.py @@ -83,7 +83,12 @@ def extract_json() -> dict: if 'result' in rjson: result = rjson['result'] - result['grid']['has_next_page'] = result.get('next') is not None - return result['grid'], result.get('next') + if rjson['kind'] == 'upsolver_scalar_query_response': + scalar = result['scalar'] + columns = [{'name': scalar['valueType'], 'columnType': {'clazz': 'StringColumnType'}}] + return {'columns': columns, 'data': [scalar]}, result.get('next') + else: + result['grid']['has_next_page'] = result.get('next') is not None + return result['grid'], result.get('next') else: return rjson, None From 3d4fa9a02f2af575f859fceeeb3fe88898b72118 Mon Sep 17 00:00:00 2001 From: Robert Navado <837482+navado@users.noreply.github.com> Date: Tue, 16 May 2023 19:25:55 +0300 Subject: [PATCH 2/2] v0.1.8 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3d4d922..4390d8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "upsolver-sdk-python" -version = "0.1.7" +version = "0.1.8" description = "Python SDK for Upsolver" authors = ["Upsolver Team "]