Skip to content

Commit d13d20e

Browse files
committed
refactor for complexity
1 parent 89b41a1 commit d13d20e

File tree

2 files changed

+76
-46
lines changed

2 files changed

+76
-46
lines changed

src/firebolt/async_db/cursor.py

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -220,41 +220,56 @@ async def _do_execute(
220220
) -> None:
221221
await self._close_rowset_and_reset()
222222
self._row_set = StreamingAsyncRowSet() if streaming else InMemoryAsyncRowSet()
223+
223224
# Import paramstyle from module level
224225
from firebolt.async_db import paramstyle
225226

226227
try:
227228
parameter_style = ParameterStyle(paramstyle)
228229
except ValueError:
229230
raise ProgrammingError(f"Unsupported paramstyle: {paramstyle}")
231+
232+
# Validate bulk_insert parameter early
233+
if bulk_insert and parameter_style != ParameterStyle.FB_NUMERIC:
234+
raise ConfigurationError("bulk_insert is only supported for fb_numeric")
235+
230236
try:
237+
# Handle FB_NUMERIC parameter style
231238
if parameter_style == ParameterStyle.FB_NUMERIC:
232-
if bulk_insert:
233-
raw_query, parameters = self._prepare_bulk_insert(
234-
raw_query, parameters
235-
)
239+
processed_query, processed_params = (
240+
self._prepare_bulk_insert(raw_query, parameters)
241+
if bulk_insert
242+
else (raw_query, parameters)
243+
)
236244
await self._execute_fb_numeric(
237-
raw_query, parameters, timeout, async_execution, streaming
245+
processed_query,
246+
processed_params,
247+
timeout,
248+
async_execution,
249+
streaming,
238250
)
239-
else:
240-
if bulk_insert:
241-
raise ConfigurationError(
242-
"bulk_insert is only supported for fb_numeric"
243-
)
244-
queries: List[Union[SetParameter, str]] = (
245-
[raw_query]
246-
if skip_parsing
247-
else self._formatter.split_format_sql(raw_query, parameters)
251+
self._state = CursorState.DONE
252+
return
253+
254+
# Handle other parameter styles
255+
queries = (
256+
[raw_query]
257+
if skip_parsing
258+
else self._formatter.split_format_sql(raw_query, parameters)
259+
)
260+
261+
# Validate async execution with multi-statement queries early
262+
if len(queries) > 1 and async_execution:
263+
raise FireboltError(
264+
"Server side async does not support multi-statement queries"
248265
)
249-
timeout_controller = TimeoutController(timeout)
250-
if len(queries) > 1 and async_execution:
251-
raise FireboltError(
252-
"Server side async does not support multi-statement queries"
253-
)
254-
for query in queries:
255-
await self._execute_single_query(
256-
query, timeout_controller, async_execution, streaming
257-
)
266+
267+
timeout_controller = TimeoutController(timeout)
268+
for query in queries:
269+
await self._execute_single_query(
270+
query, timeout_controller, async_execution, streaming
271+
)
272+
258273
self._state = CursorState.DONE
259274
except Exception:
260275
self._state = CursorState.ERROR

src/firebolt/db/cursor.py

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -226,41 +226,56 @@ def _do_execute(
226226
) -> None:
227227
self._close_rowset_and_reset()
228228
self._row_set = StreamingRowSet() if streaming else InMemoryRowSet()
229+
229230
# Import paramstyle from module level
230231
from firebolt.db import paramstyle
231232

232233
try:
233234
parameter_style = ParameterStyle(paramstyle)
234235
except ValueError:
235236
raise ProgrammingError(f"Unsupported paramstyle: {paramstyle}")
237+
238+
# Validate bulk_insert parameter early
239+
if bulk_insert and parameter_style != ParameterStyle.FB_NUMERIC:
240+
raise ConfigurationError("bulk_insert is only supported for fb_numeric")
241+
236242
try:
243+
# Handle FB_NUMERIC parameter style
237244
if parameter_style == ParameterStyle.FB_NUMERIC:
238-
if bulk_insert:
239-
raw_query, parameters = self._prepare_bulk_insert(
240-
raw_query, parameters
241-
)
245+
processed_query, processed_params = (
246+
self._prepare_bulk_insert(raw_query, parameters)
247+
if bulk_insert
248+
else (raw_query, parameters)
249+
)
242250
self._execute_fb_numeric(
243-
raw_query, parameters, timeout, async_execution, streaming
251+
processed_query,
252+
processed_params,
253+
timeout,
254+
async_execution,
255+
streaming,
244256
)
245-
else:
246-
if bulk_insert:
247-
raise ConfigurationError(
248-
"bulk_insert is only supported for fb_numeric"
249-
)
250-
queries: List[Union[SetParameter, str]] = (
251-
[raw_query]
252-
if skip_parsing
253-
else self._formatter.split_format_sql(raw_query, parameters)
257+
self._state = CursorState.DONE
258+
return
259+
260+
# Handle other parameter styles
261+
queries = (
262+
[raw_query]
263+
if skip_parsing
264+
else self._formatter.split_format_sql(raw_query, parameters)
265+
)
266+
267+
# Validate async execution with multi-statement queries early
268+
if len(queries) > 1 and async_execution:
269+
raise FireboltError(
270+
"Server side async does not support multi-statement queries"
254271
)
255-
timeout_controller = TimeoutController(timeout)
256-
if len(queries) > 1 and async_execution:
257-
raise FireboltError(
258-
"Server side async does not support multi-statement queries"
259-
)
260-
for query in queries:
261-
self._execute_single_query(
262-
query, timeout_controller, async_execution, streaming
263-
)
272+
273+
timeout_controller = TimeoutController(timeout)
274+
for query in queries:
275+
self._execute_single_query(
276+
query, timeout_controller, async_execution, streaming
277+
)
278+
264279
self._state = CursorState.DONE
265280
except Exception:
266281
self._state = CursorState.ERROR

0 commit comments

Comments
 (0)