sqlspec 0.11.0__py3-none-any.whl → 0.11.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of sqlspec might be problematic. Click here for more details.

@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING, Any, Optional, Union, cast, overload
5
5
  from oracledb import AsyncConnection, AsyncCursor, Connection, Cursor
6
6
 
7
7
  from sqlspec.base import AsyncDriverAdapterProtocol, SyncDriverAdapterProtocol
8
+ from sqlspec.filters import StatementFilter
8
9
  from sqlspec.mixins import (
9
10
  AsyncArrowBulkOperationsMixin,
10
11
  ResultConverter,
@@ -15,9 +16,8 @@ from sqlspec.statement import SQLStatement
15
16
  from sqlspec.typing import ArrowTable, StatementParameterType, T
16
17
 
17
18
  if TYPE_CHECKING:
18
- from collections.abc import AsyncGenerator, Generator, Sequence
19
+ from collections.abc import AsyncGenerator, Generator, Mapping, Sequence
19
20
 
20
- from sqlspec.filters import StatementFilter
21
21
  from sqlspec.typing import ModelDTOT
22
22
 
23
23
  __all__ = ("OracleAsyncConnection", "OracleAsyncDriver", "OracleSyncConnection", "OracleSyncDriver")
@@ -37,7 +37,6 @@ class OracleDriverBase:
37
37
  self,
38
38
  sql: str,
39
39
  parameters: "Optional[StatementParameterType]" = None,
40
- /,
41
40
  *filters: "StatementFilter",
42
41
  **kwargs: Any,
43
42
  ) -> "tuple[str, Optional[Union[tuple[Any, ...], dict[str, Any]]]]":
@@ -52,15 +51,22 @@ class OracleDriverBase:
52
51
  Returns:
53
52
  A tuple of (sql, parameters) ready for execution.
54
53
  """
55
- # Special case: Oracle treats empty dicts as None
56
- if isinstance(parameters, dict) and not parameters and not kwargs:
54
+ data_params_for_statement: Optional[Union[Mapping[str, Any], Sequence[Any]]] = None
55
+ combined_filters_list: list[StatementFilter] = list(filters)
56
+
57
+ if parameters is not None:
58
+ if isinstance(parameters, StatementFilter):
59
+ combined_filters_list.insert(0, parameters)
60
+ else:
61
+ data_params_for_statement = parameters
62
+ if data_params_for_statement is not None and not isinstance(data_params_for_statement, (list, tuple, dict)):
63
+ data_params_for_statement = (data_params_for_statement,)
64
+
65
+ if isinstance(data_params_for_statement, dict) and not data_params_for_statement and not kwargs:
57
66
  return sql, None
58
67
 
59
- # Create a SQLStatement with appropriate dialect
60
- statement = SQLStatement(sql, parameters, kwargs=kwargs, dialect=self.dialect)
61
-
62
- # Apply any filters
63
- for filter_obj in filters:
68
+ statement = SQLStatement(sql, data_params_for_statement, kwargs=kwargs, dialect=self.dialect)
69
+ for filter_obj in combined_filters_list:
64
70
  statement = statement.apply_filter(filter_obj)
65
71
 
66
72
  processed_sql, processed_params, _ = statement.process()
@@ -102,7 +108,6 @@ class OracleSyncDriver(
102
108
  self,
103
109
  sql: str,
104
110
  parameters: "Optional[StatementParameterType]" = None,
105
- /,
106
111
  *filters: "StatementFilter",
107
112
  connection: "Optional[OracleSyncConnection]" = None,
108
113
  schema_type: None = None,
@@ -113,7 +118,6 @@ class OracleSyncDriver(
113
118
  self,
114
119
  sql: str,
115
120
  parameters: "Optional[StatementParameterType]" = None,
116
- /,
117
121
  *filters: "StatementFilter",
118
122
  connection: "Optional[OracleSyncConnection]" = None,
119
123
  schema_type: "type[ModelDTOT]",
@@ -123,7 +127,6 @@ class OracleSyncDriver(
123
127
  self,
124
128
  sql: str,
125
129
  parameters: "Optional[StatementParameterType]" = None,
126
- /,
127
130
  *filters: "StatementFilter",
128
131
  connection: "Optional[OracleSyncConnection]" = None,
129
132
  schema_type: "Optional[type[ModelDTOT]]" = None,
@@ -149,7 +152,7 @@ class OracleSyncDriver(
149
152
  results = cursor.fetchall() # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
150
153
  if not results:
151
154
  return []
152
- # Get column names
155
+ # Get column names from description
153
156
  column_names = [col[0] for col in cursor.description or []] # pyright: ignore[reportUnknownMemberType,reportUnknownVariableType]
154
157
 
155
158
  return self.to_schema([dict(zip(column_names, row)) for row in results], schema_type=schema_type)
@@ -159,7 +162,6 @@ class OracleSyncDriver(
159
162
  self,
160
163
  sql: str,
161
164
  parameters: "Optional[StatementParameterType]" = None,
162
- /,
163
165
  *filters: "StatementFilter",
164
166
  connection: "Optional[OracleSyncConnection]" = None,
165
167
  schema_type: None = None,
@@ -170,7 +172,6 @@ class OracleSyncDriver(
170
172
  self,
171
173
  sql: str,
172
174
  parameters: "Optional[StatementParameterType]" = None,
173
- /,
174
175
  *filters: "StatementFilter",
175
176
  connection: "Optional[OracleSyncConnection]" = None,
176
177
  schema_type: "type[ModelDTOT]",
@@ -180,7 +181,6 @@ class OracleSyncDriver(
180
181
  self,
181
182
  sql: str,
182
183
  parameters: "Optional[StatementParameterType]" = None,
183
- /,
184
184
  *filters: "StatementFilter",
185
185
  connection: "Optional[OracleSyncConnection]" = None,
186
186
  schema_type: "Optional[type[ModelDTOT]]" = None,
@@ -217,7 +217,6 @@ class OracleSyncDriver(
217
217
  self,
218
218
  sql: str,
219
219
  parameters: "Optional[StatementParameterType]" = None,
220
- /,
221
220
  *filters: "StatementFilter",
222
221
  connection: "Optional[OracleSyncConnection]" = None,
223
222
  schema_type: None = None,
@@ -228,7 +227,6 @@ class OracleSyncDriver(
228
227
  self,
229
228
  sql: str,
230
229
  parameters: "Optional[StatementParameterType]" = None,
231
- /,
232
230
  *filters: "StatementFilter",
233
231
  connection: "Optional[OracleSyncConnection]" = None,
234
232
  schema_type: "type[ModelDTOT]",
@@ -238,7 +236,6 @@ class OracleSyncDriver(
238
236
  self,
239
237
  sql: str,
240
238
  parameters: "Optional[StatementParameterType]" = None,
241
- /,
242
239
  *filters: "StatementFilter",
243
240
  connection: "Optional[OracleSyncConnection]" = None,
244
241
  schema_type: "Optional[type[ModelDTOT]]" = None,
@@ -276,7 +273,6 @@ class OracleSyncDriver(
276
273
  self,
277
274
  sql: str,
278
275
  parameters: "Optional[StatementParameterType]" = None,
279
- /,
280
276
  *filters: "StatementFilter",
281
277
  connection: "Optional[OracleSyncConnection]" = None,
282
278
  schema_type: None = None,
@@ -287,7 +283,6 @@ class OracleSyncDriver(
287
283
  self,
288
284
  sql: str,
289
285
  parameters: "Optional[StatementParameterType]" = None,
290
- /,
291
286
  *filters: "StatementFilter",
292
287
  connection: "Optional[OracleSyncConnection]" = None,
293
288
  schema_type: "type[T]",
@@ -297,7 +292,6 @@ class OracleSyncDriver(
297
292
  self,
298
293
  sql: str,
299
294
  parameters: "Optional[StatementParameterType]" = None,
300
- /,
301
295
  *filters: "StatementFilter",
302
296
  connection: "Optional[OracleSyncConnection]" = None,
303
297
  schema_type: "Optional[type[T]]" = None,
@@ -333,7 +327,6 @@ class OracleSyncDriver(
333
327
  self,
334
328
  sql: str,
335
329
  parameters: "Optional[StatementParameterType]" = None,
336
- /,
337
330
  *filters: "StatementFilter",
338
331
  connection: "Optional[OracleSyncConnection]" = None,
339
332
  schema_type: None = None,
@@ -344,7 +337,6 @@ class OracleSyncDriver(
344
337
  self,
345
338
  sql: str,
346
339
  parameters: "Optional[StatementParameterType]" = None,
347
- /,
348
340
  *filters: "StatementFilter",
349
341
  connection: "Optional[OracleSyncConnection]" = None,
350
342
  schema_type: "type[T]",
@@ -354,7 +346,6 @@ class OracleSyncDriver(
354
346
  self,
355
347
  sql: str,
356
348
  parameters: "Optional[StatementParameterType]" = None,
357
- /,
358
349
  *filters: "StatementFilter",
359
350
  connection: "Optional[OracleSyncConnection]" = None,
360
351
  schema_type: "Optional[type[T]]" = None,
@@ -390,7 +381,6 @@ class OracleSyncDriver(
390
381
  self,
391
382
  sql: str,
392
383
  parameters: "Optional[StatementParameterType]" = None,
393
- /,
394
384
  *filters: "StatementFilter",
395
385
  connection: "Optional[OracleSyncConnection]" = None,
396
386
  **kwargs: Any,
@@ -419,7 +409,6 @@ class OracleSyncDriver(
419
409
  self,
420
410
  sql: str,
421
411
  parameters: "Optional[StatementParameterType]" = None,
422
- /,
423
412
  *filters: "StatementFilter",
424
413
  connection: "Optional[OracleSyncConnection]" = None,
425
414
  schema_type: None = None,
@@ -430,7 +419,6 @@ class OracleSyncDriver(
430
419
  self,
431
420
  sql: str,
432
421
  parameters: "Optional[StatementParameterType]" = None,
433
- /,
434
422
  *filters: "StatementFilter",
435
423
  connection: "Optional[OracleSyncConnection]" = None,
436
424
  schema_type: "type[ModelDTOT]",
@@ -440,7 +428,6 @@ class OracleSyncDriver(
440
428
  self,
441
429
  sql: str,
442
430
  parameters: "Optional[StatementParameterType]" = None,
443
- /,
444
431
  *filters: "StatementFilter",
445
432
  connection: "Optional[OracleSyncConnection]" = None,
446
433
  schema_type: "Optional[type[ModelDTOT]]" = None,
@@ -473,7 +460,6 @@ class OracleSyncDriver(
473
460
  self,
474
461
  sql: str,
475
462
  parameters: "Optional[StatementParameterType]" = None,
476
- /,
477
463
  connection: "Optional[OracleSyncConnection]" = None,
478
464
  **kwargs: Any,
479
465
  ) -> str:
@@ -482,7 +468,6 @@ class OracleSyncDriver(
482
468
  Args:
483
469
  sql: The SQL script to execute.
484
470
  parameters: The parameters for the script (dict, tuple, list, or None).
485
- *filters: Statement filters to apply.
486
471
  connection: Optional connection override.
487
472
  **kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
488
473
 
@@ -500,8 +485,7 @@ class OracleSyncDriver(
500
485
  self,
501
486
  sql: str,
502
487
  parameters: "Optional[StatementParameterType]" = None,
503
- /,
504
- *,
488
+ *filters: "StatementFilter",
505
489
  connection: "Optional[OracleSyncConnection]" = None,
506
490
  **kwargs: Any,
507
491
  ) -> "ArrowTable": # pyright: ignore[reportUnknownVariableType]
@@ -512,7 +496,7 @@ class OracleSyncDriver(
512
496
  """
513
497
 
514
498
  connection = self._connection(connection)
515
- sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
499
+ sql, parameters = self._process_sql_params(sql, parameters, *filters, **kwargs)
516
500
  results = connection.fetch_df_all(sql, parameters)
517
501
  return cast("ArrowTable", ArrowTable.from_arrays(arrays=results.column_arrays(), names=results.column_names())) # pyright: ignore
518
502
 
@@ -557,7 +541,6 @@ class OracleAsyncDriver(
557
541
  self,
558
542
  sql: str,
559
543
  parameters: "Optional[StatementParameterType]" = None,
560
- /,
561
544
  *filters: "StatementFilter",
562
545
  connection: "Optional[OracleAsyncConnection]" = None,
563
546
  schema_type: None = None,
@@ -568,7 +551,6 @@ class OracleAsyncDriver(
568
551
  self,
569
552
  sql: str,
570
553
  parameters: "Optional[StatementParameterType]" = None,
571
- /,
572
554
  *filters: "StatementFilter",
573
555
  connection: "Optional[OracleAsyncConnection]" = None,
574
556
  schema_type: "type[ModelDTOT]",
@@ -578,7 +560,6 @@ class OracleAsyncDriver(
578
560
  self,
579
561
  sql: str,
580
562
  parameters: "Optional[StatementParameterType]" = None,
581
- /,
582
563
  *filters: "StatementFilter",
583
564
  connection: "Optional[OracleAsyncConnection]" = None,
584
565
  schema_type: "Optional[type[ModelDTOT]]" = None,
@@ -586,6 +567,14 @@ class OracleAsyncDriver(
586
567
  ) -> "Sequence[Union[ModelDTOT, dict[str, Any]]]":
587
568
  """Fetch data from the database.
588
569
 
570
+ Args:
571
+ sql: The SQL query string.
572
+ parameters: The parameters for the query (dict, tuple, list, or None).
573
+ *filters: Statement filters to apply.
574
+ connection: Optional connection override.
575
+ schema_type: Optional schema class for the result.
576
+ **kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
577
+
589
578
  Returns:
590
579
  List of row data as either model instances or dictionaries.
591
580
  """
@@ -597,20 +586,16 @@ class OracleAsyncDriver(
597
586
  results = await cursor.fetchall() # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
598
587
  if not results:
599
588
  return []
600
- # Get column names
589
+ # Get column names from description
601
590
  column_names = [col[0] for col in cursor.description or []] # pyright: ignore[reportUnknownMemberType,reportUnknownVariableType]
602
591
 
603
- if schema_type:
604
- return [cast("ModelDTOT", schema_type(**dict(zip(column_names, row)))) for row in results] # pyright: ignore
605
-
606
- return [dict(zip(column_names, row)) for row in results] # pyright: ignore
592
+ return self.to_schema([dict(zip(column_names, row)) for row in results], schema_type=schema_type)
607
593
 
608
594
  @overload
609
595
  async def select_one(
610
596
  self,
611
597
  sql: str,
612
598
  parameters: "Optional[StatementParameterType]" = None,
613
- /,
614
599
  *filters: "StatementFilter",
615
600
  connection: "Optional[OracleAsyncConnection]" = None,
616
601
  schema_type: None = None,
@@ -621,7 +606,6 @@ class OracleAsyncDriver(
621
606
  self,
622
607
  sql: str,
623
608
  parameters: "Optional[StatementParameterType]" = None,
624
- /,
625
609
  *filters: "StatementFilter",
626
610
  connection: "Optional[OracleAsyncConnection]" = None,
627
611
  schema_type: "type[ModelDTOT]",
@@ -631,7 +615,6 @@ class OracleAsyncDriver(
631
615
  self,
632
616
  sql: str,
633
617
  parameters: "Optional[StatementParameterType]" = None,
634
- /,
635
618
  *filters: "StatementFilter",
636
619
  connection: "Optional[OracleAsyncConnection]" = None,
637
620
  schema_type: "Optional[type[ModelDTOT]]" = None,
@@ -639,6 +622,14 @@ class OracleAsyncDriver(
639
622
  ) -> "Union[ModelDTOT, dict[str, Any]]":
640
623
  """Fetch one row from the database.
641
624
 
625
+ Args:
626
+ sql: The SQL query string.
627
+ parameters: The parameters for the query (dict, tuple, list, or None).
628
+ *filters: Statement filters to apply.
629
+ connection: Optional connection override.
630
+ schema_type: Optional schema class for the result.
631
+ **kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
632
+
642
633
  Returns:
643
634
  The first row of the query results.
644
635
  """
@@ -649,20 +640,15 @@ class OracleAsyncDriver(
649
640
  await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
650
641
  result = await cursor.fetchone() # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
651
642
  result = self.check_not_found(result) # pyright: ignore[reportUnknownArgumentType]
652
- # Get column names
653
643
  column_names = [col[0] for col in cursor.description or []] # pyright: ignore[reportUnknownMemberType,reportUnknownVariableType]
654
644
 
655
- if schema_type is not None:
656
- return cast("ModelDTOT", schema_type(**dict(zip(column_names, result)))) # pyright: ignore[reportUnknownArgumentType]
657
- # Always return dictionaries
658
- return dict(zip(column_names, result)) # pyright: ignore[reportUnknownArgumentType,reportUnknownVariableType]
645
+ return self.to_schema(dict(zip(column_names, result)), schema_type=schema_type)
659
646
 
660
647
  @overload
661
648
  async def select_one_or_none(
662
649
  self,
663
650
  sql: str,
664
651
  parameters: "Optional[StatementParameterType]" = None,
665
- /,
666
652
  *filters: "StatementFilter",
667
653
  connection: "Optional[OracleAsyncConnection]" = None,
668
654
  schema_type: None = None,
@@ -673,7 +659,6 @@ class OracleAsyncDriver(
673
659
  self,
674
660
  sql: str,
675
661
  parameters: "Optional[StatementParameterType]" = None,
676
- /,
677
662
  *filters: "StatementFilter",
678
663
  connection: "Optional[OracleAsyncConnection]" = None,
679
664
  schema_type: "type[ModelDTOT]",
@@ -683,16 +668,23 @@ class OracleAsyncDriver(
683
668
  self,
684
669
  sql: str,
685
670
  parameters: "Optional[StatementParameterType]" = None,
686
- /,
687
671
  *filters: "StatementFilter",
688
672
  connection: "Optional[OracleAsyncConnection]" = None,
689
673
  schema_type: "Optional[type[ModelDTOT]]" = None,
690
674
  **kwargs: Any,
691
675
  ) -> "Optional[Union[ModelDTOT, dict[str, Any]]]":
692
- """Fetch one row from the database.
676
+ """Fetch one row from the database or return None if no rows found.
677
+
678
+ Args:
679
+ sql: The SQL query string.
680
+ parameters: The parameters for the query (dict, tuple, list, or None).
681
+ *filters: Statement filters to apply.
682
+ connection: Optional connection override.
683
+ schema_type: Optional schema class for the result.
684
+ **kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
693
685
 
694
686
  Returns:
695
- The first row of the query results.
687
+ The first row of the query results, or None if no results found.
696
688
  """
697
689
  connection = self._connection(connection)
698
690
  sql, parameters = self._process_sql_params(sql, parameters, *filters, **kwargs)
@@ -700,24 +692,16 @@ class OracleAsyncDriver(
700
692
  async with self._with_cursor(connection) as cursor:
701
693
  await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
702
694
  result = await cursor.fetchone() # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
703
-
704
695
  if result is None:
705
696
  return None
706
-
707
- # Get column names
708
697
  column_names = [col[0] for col in cursor.description or []] # pyright: ignore[reportUnknownMemberType,reportUnknownVariableType]
709
-
710
- if schema_type is not None:
711
- return cast("ModelDTOT", schema_type(**dict(zip(column_names, result)))) # pyright: ignore[reportUnknownArgumentType]
712
- # Always return dictionaries
713
- return dict(zip(column_names, result)) # pyright: ignore[reportUnknownArgumentType,reportUnknownVariableType]
698
+ return self.to_schema(dict(zip(column_names, result)), schema_type=schema_type)
714
699
 
715
700
  @overload
716
701
  async def select_value(
717
702
  self,
718
703
  sql: str,
719
704
  parameters: "Optional[StatementParameterType]" = None,
720
- /,
721
705
  *filters: "StatementFilter",
722
706
  connection: "Optional[OracleAsyncConnection]" = None,
723
707
  schema_type: None = None,
@@ -728,7 +712,6 @@ class OracleAsyncDriver(
728
712
  self,
729
713
  sql: str,
730
714
  parameters: "Optional[StatementParameterType]" = None,
731
- /,
732
715
  *filters: "StatementFilter",
733
716
  connection: "Optional[OracleAsyncConnection]" = None,
734
717
  schema_type: "type[T]",
@@ -738,7 +721,6 @@ class OracleAsyncDriver(
738
721
  self,
739
722
  sql: str,
740
723
  parameters: "Optional[StatementParameterType]" = None,
741
- /,
742
724
  *filters: "StatementFilter",
743
725
  connection: "Optional[OracleAsyncConnection]" = None,
744
726
  schema_type: "Optional[type[T]]" = None,
@@ -763,7 +745,7 @@ class OracleAsyncDriver(
763
745
  async with self._with_cursor(connection) as cursor:
764
746
  await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
765
747
  result = await cursor.fetchone() # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
766
- result = self.check_not_found(result)
748
+ result = self.check_not_found(result) # pyright: ignore[reportUnknownArgumentType]
767
749
 
768
750
  if schema_type is None:
769
751
  return result[0] # pyright: ignore[reportUnknownArgumentType]
@@ -774,7 +756,6 @@ class OracleAsyncDriver(
774
756
  self,
775
757
  sql: str,
776
758
  parameters: "Optional[StatementParameterType]" = None,
777
- /,
778
759
  *filters: "StatementFilter",
779
760
  connection: "Optional[OracleAsyncConnection]" = None,
780
761
  schema_type: None = None,
@@ -785,7 +766,6 @@ class OracleAsyncDriver(
785
766
  self,
786
767
  sql: str,
787
768
  parameters: "Optional[StatementParameterType]" = None,
788
- /,
789
769
  *filters: "StatementFilter",
790
770
  connection: "Optional[OracleAsyncConnection]" = None,
791
771
  schema_type: "type[T]",
@@ -795,7 +775,6 @@ class OracleAsyncDriver(
795
775
  self,
796
776
  sql: str,
797
777
  parameters: "Optional[StatementParameterType]" = None,
798
- /,
799
778
  *filters: "StatementFilter",
800
779
  connection: "Optional[OracleAsyncConnection]" = None,
801
780
  schema_type: "Optional[type[T]]" = None,
@@ -831,12 +810,11 @@ class OracleAsyncDriver(
831
810
  self,
832
811
  sql: str,
833
812
  parameters: "Optional[StatementParameterType]" = None,
834
- /,
835
813
  *filters: "StatementFilter",
836
814
  connection: "Optional[OracleAsyncConnection]" = None,
837
815
  **kwargs: Any,
838
816
  ) -> int:
839
- """Execute an insert, update, or delete statement.
817
+ """Insert, update, or delete data from the database.
840
818
 
841
819
  Args:
842
820
  sql: The SQL statement to execute.
@@ -846,21 +824,20 @@ class OracleAsyncDriver(
846
824
  **kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
847
825
 
848
826
  Returns:
849
- The number of rows affected by the statement.
827
+ Row count affected by the operation.
850
828
  """
851
829
  connection = self._connection(connection)
852
830
  sql, parameters = self._process_sql_params(sql, parameters, *filters, **kwargs)
853
831
 
854
832
  async with self._with_cursor(connection) as cursor:
855
833
  await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
856
- return cursor.rowcount # pyright: ignore[reportUnknownMemberType]
834
+ return cursor.rowcount # pyright: ignore[reportUnknownMemberType,reportUnknownVariableType]
857
835
 
858
836
  @overload
859
837
  async def insert_update_delete_returning(
860
838
  self,
861
839
  sql: str,
862
840
  parameters: "Optional[StatementParameterType]" = None,
863
- /,
864
841
  *filters: "StatementFilter",
865
842
  connection: "Optional[OracleAsyncConnection]" = None,
866
843
  schema_type: None = None,
@@ -871,7 +848,6 @@ class OracleAsyncDriver(
871
848
  self,
872
849
  sql: str,
873
850
  parameters: "Optional[StatementParameterType]" = None,
874
- /,
875
851
  *filters: "StatementFilter",
876
852
  connection: "Optional[OracleAsyncConnection]" = None,
877
853
  schema_type: "type[ModelDTOT]",
@@ -881,7 +857,6 @@ class OracleAsyncDriver(
881
857
  self,
882
858
  sql: str,
883
859
  parameters: "Optional[StatementParameterType]" = None,
884
- /,
885
860
  *filters: "StatementFilter",
886
861
  connection: "Optional[OracleAsyncConnection]" = None,
887
862
  schema_type: "Optional[type[ModelDTOT]]" = None,
@@ -889,8 +864,16 @@ class OracleAsyncDriver(
889
864
  ) -> "Optional[Union[dict[str, Any], ModelDTOT]]":
890
865
  """Insert, update, or delete data from the database and return result.
891
866
 
867
+ Args:
868
+ sql: The SQL statement with RETURNING clause.
869
+ parameters: The parameters for the statement (dict, tuple, list, or None).
870
+ *filters: Statement filters to apply.
871
+ connection: Optional connection override.
872
+ schema_type: Optional schema class for the result.
873
+ **kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
874
+
892
875
  Returns:
893
- The first row of results.
876
+ The returned row data, as either a model instance or dictionary.
894
877
  """
895
878
  connection = self._connection(connection)
896
879
  sql, parameters = self._process_sql_params(sql, parameters, *filters, **kwargs)
@@ -898,7 +881,6 @@ class OracleAsyncDriver(
898
881
  async with self._with_cursor(connection) as cursor:
899
882
  await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
900
883
  result = await cursor.fetchone() # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType]
901
-
902
884
  if result is None:
903
885
  return None
904
886
 
@@ -907,14 +889,12 @@ class OracleAsyncDriver(
907
889
 
908
890
  if schema_type is not None:
909
891
  return cast("ModelDTOT", schema_type(**dict(zip(column_names, result)))) # pyright: ignore[reportUnknownArgumentType]
910
- # Always return dictionaries
911
892
  return dict(zip(column_names, result)) # pyright: ignore[reportUnknownArgumentType,reportUnknownVariableType]
912
893
 
913
894
  async def execute_script(
914
895
  self,
915
896
  sql: str,
916
897
  parameters: "Optional[StatementParameterType]" = None,
917
- /,
918
898
  connection: "Optional[OracleAsyncConnection]" = None,
919
899
  **kwargs: Any,
920
900
  ) -> str:
@@ -936,12 +916,11 @@ class OracleAsyncDriver(
936
916
  await cursor.execute(sql, parameters) # pyright: ignore[reportUnknownMemberType]
937
917
  return str(cursor.rowcount) # pyright: ignore[reportUnknownMemberType]
938
918
 
939
- async def select_arrow( # pyright: ignore[reportUnknownParameterType]
919
+ async def select_arrow(
940
920
  self,
941
921
  sql: str,
942
922
  parameters: "Optional[StatementParameterType]" = None,
943
- /,
944
- *,
923
+ *filters: "StatementFilter",
945
924
  connection: "Optional[OracleAsyncConnection]" = None,
946
925
  **kwargs: Any,
947
926
  ) -> "ArrowTable": # pyright: ignore[reportUnknownVariableType]
@@ -950,6 +929,7 @@ class OracleAsyncDriver(
950
929
  Args:
951
930
  sql: The SQL query string.
952
931
  parameters: Parameters for the query.
932
+ filters: Statement filters to apply.
953
933
  connection: Optional connection override.
954
934
  **kwargs: Additional keyword arguments to merge with parameters if parameters is a dict.
955
935
 
@@ -958,7 +938,7 @@ class OracleAsyncDriver(
958
938
  """
959
939
 
960
940
  connection = self._connection(connection)
961
- sql, parameters = self._process_sql_params(sql, parameters, **kwargs)
941
+ sql, parameters = self._process_sql_params(sql, parameters, *filters, **kwargs)
962
942
  results = await connection.fetch_df_all(sql, parameters)
963
943
  return ArrowTable.from_arrays(arrays=results.column_arrays(), names=results.column_names()) # pyright: ignore
964
944