sqlspec 0.12.2__py3-none-any.whl → 0.13.0__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.

Files changed (113) hide show
  1. sqlspec/_sql.py +21 -180
  2. sqlspec/adapters/adbc/config.py +10 -12
  3. sqlspec/adapters/adbc/driver.py +120 -118
  4. sqlspec/adapters/aiosqlite/config.py +3 -3
  5. sqlspec/adapters/aiosqlite/driver.py +100 -130
  6. sqlspec/adapters/asyncmy/config.py +3 -4
  7. sqlspec/adapters/asyncmy/driver.py +123 -135
  8. sqlspec/adapters/asyncpg/config.py +3 -7
  9. sqlspec/adapters/asyncpg/driver.py +98 -140
  10. sqlspec/adapters/bigquery/config.py +4 -5
  11. sqlspec/adapters/bigquery/driver.py +125 -167
  12. sqlspec/adapters/duckdb/config.py +3 -6
  13. sqlspec/adapters/duckdb/driver.py +114 -111
  14. sqlspec/adapters/oracledb/config.py +6 -5
  15. sqlspec/adapters/oracledb/driver.py +242 -259
  16. sqlspec/adapters/psqlpy/config.py +3 -7
  17. sqlspec/adapters/psqlpy/driver.py +118 -93
  18. sqlspec/adapters/psycopg/config.py +18 -31
  19. sqlspec/adapters/psycopg/driver.py +283 -236
  20. sqlspec/adapters/sqlite/config.py +3 -3
  21. sqlspec/adapters/sqlite/driver.py +103 -97
  22. sqlspec/config.py +0 -4
  23. sqlspec/driver/_async.py +89 -98
  24. sqlspec/driver/_common.py +52 -17
  25. sqlspec/driver/_sync.py +81 -105
  26. sqlspec/driver/connection.py +207 -0
  27. sqlspec/driver/mixins/_csv_writer.py +91 -0
  28. sqlspec/driver/mixins/_pipeline.py +38 -49
  29. sqlspec/driver/mixins/_result_utils.py +27 -9
  30. sqlspec/driver/mixins/_storage.py +67 -181
  31. sqlspec/driver/mixins/_type_coercion.py +3 -4
  32. sqlspec/driver/parameters.py +138 -0
  33. sqlspec/exceptions.py +10 -2
  34. sqlspec/extensions/aiosql/adapter.py +0 -10
  35. sqlspec/extensions/litestar/handlers.py +0 -1
  36. sqlspec/extensions/litestar/plugin.py +0 -3
  37. sqlspec/extensions/litestar/providers.py +0 -14
  38. sqlspec/loader.py +25 -90
  39. sqlspec/protocols.py +542 -0
  40. sqlspec/service/__init__.py +3 -2
  41. sqlspec/service/_util.py +147 -0
  42. sqlspec/service/base.py +1116 -9
  43. sqlspec/statement/builder/__init__.py +42 -32
  44. sqlspec/statement/builder/_ddl_utils.py +0 -10
  45. sqlspec/statement/builder/_parsing_utils.py +10 -4
  46. sqlspec/statement/builder/base.py +67 -22
  47. sqlspec/statement/builder/column.py +283 -0
  48. sqlspec/statement/builder/ddl.py +91 -67
  49. sqlspec/statement/builder/delete.py +23 -7
  50. sqlspec/statement/builder/insert.py +29 -15
  51. sqlspec/statement/builder/merge.py +4 -4
  52. sqlspec/statement/builder/mixins/_aggregate_functions.py +113 -14
  53. sqlspec/statement/builder/mixins/_common_table_expr.py +0 -1
  54. sqlspec/statement/builder/mixins/_delete_from.py +1 -1
  55. sqlspec/statement/builder/mixins/_from.py +10 -8
  56. sqlspec/statement/builder/mixins/_group_by.py +0 -1
  57. sqlspec/statement/builder/mixins/_insert_from_select.py +0 -1
  58. sqlspec/statement/builder/mixins/_insert_values.py +0 -2
  59. sqlspec/statement/builder/mixins/_join.py +20 -13
  60. sqlspec/statement/builder/mixins/_limit_offset.py +3 -3
  61. sqlspec/statement/builder/mixins/_merge_clauses.py +3 -4
  62. sqlspec/statement/builder/mixins/_order_by.py +2 -2
  63. sqlspec/statement/builder/mixins/_pivot.py +4 -7
  64. sqlspec/statement/builder/mixins/_select_columns.py +6 -5
  65. sqlspec/statement/builder/mixins/_unpivot.py +6 -9
  66. sqlspec/statement/builder/mixins/_update_from.py +2 -1
  67. sqlspec/statement/builder/mixins/_update_set.py +11 -8
  68. sqlspec/statement/builder/mixins/_where.py +61 -34
  69. sqlspec/statement/builder/select.py +32 -17
  70. sqlspec/statement/builder/update.py +25 -11
  71. sqlspec/statement/filters.py +39 -14
  72. sqlspec/statement/parameter_manager.py +220 -0
  73. sqlspec/statement/parameters.py +210 -79
  74. sqlspec/statement/pipelines/__init__.py +166 -23
  75. sqlspec/statement/pipelines/analyzers/_analyzer.py +21 -20
  76. sqlspec/statement/pipelines/context.py +35 -39
  77. sqlspec/statement/pipelines/transformers/__init__.py +2 -3
  78. sqlspec/statement/pipelines/transformers/_expression_simplifier.py +19 -187
  79. sqlspec/statement/pipelines/transformers/_literal_parameterizer.py +628 -58
  80. sqlspec/statement/pipelines/transformers/_remove_comments_and_hints.py +76 -0
  81. sqlspec/statement/pipelines/validators/_dml_safety.py +33 -18
  82. sqlspec/statement/pipelines/validators/_parameter_style.py +87 -14
  83. sqlspec/statement/pipelines/validators/_performance.py +38 -23
  84. sqlspec/statement/pipelines/validators/_security.py +39 -62
  85. sqlspec/statement/result.py +37 -129
  86. sqlspec/statement/splitter.py +0 -12
  87. sqlspec/statement/sql.py +863 -391
  88. sqlspec/statement/sql_compiler.py +140 -0
  89. sqlspec/storage/__init__.py +10 -2
  90. sqlspec/storage/backends/fsspec.py +53 -8
  91. sqlspec/storage/backends/obstore.py +15 -19
  92. sqlspec/storage/capabilities.py +101 -0
  93. sqlspec/storage/registry.py +56 -83
  94. sqlspec/typing.py +6 -434
  95. sqlspec/utils/cached_property.py +25 -0
  96. sqlspec/utils/correlation.py +0 -2
  97. sqlspec/utils/logging.py +0 -6
  98. sqlspec/utils/sync_tools.py +0 -4
  99. sqlspec/utils/text.py +0 -5
  100. sqlspec/utils/type_guards.py +892 -0
  101. {sqlspec-0.12.2.dist-info → sqlspec-0.13.0.dist-info}/METADATA +1 -1
  102. sqlspec-0.13.0.dist-info/RECORD +150 -0
  103. sqlspec/statement/builder/protocols.py +0 -20
  104. sqlspec/statement/pipelines/base.py +0 -315
  105. sqlspec/statement/pipelines/result_types.py +0 -41
  106. sqlspec/statement/pipelines/transformers/_remove_comments.py +0 -66
  107. sqlspec/statement/pipelines/transformers/_remove_hints.py +0 -81
  108. sqlspec/statement/pipelines/validators/base.py +0 -67
  109. sqlspec/storage/protocol.py +0 -173
  110. sqlspec-0.12.2.dist-info/RECORD +0 -145
  111. {sqlspec-0.12.2.dist-info → sqlspec-0.13.0.dist-info}/WHEEL +0 -0
  112. {sqlspec-0.12.2.dist-info → sqlspec-0.13.0.dist-info}/licenses/LICENSE +0 -0
  113. {sqlspec-0.12.2.dist-info → sqlspec-0.13.0.dist-info}/licenses/NOTICE +0 -0
@@ -1,81 +0,0 @@
1
- """Removes SQL hints from expressions."""
2
-
3
- from typing import TYPE_CHECKING, Optional
4
-
5
- from sqlglot import exp
6
-
7
- from sqlspec.statement.pipelines.base import ProcessorProtocol
8
-
9
- if TYPE_CHECKING:
10
- from sqlspec.statement.pipelines.context import SQLProcessingContext
11
-
12
- __all__ = ("HintRemover",)
13
-
14
-
15
- class HintRemover(ProcessorProtocol):
16
- """Removes SQL hints from expressions using SQLGlot's AST traversal.
17
-
18
- This transformer removes SQL hints while preserving standard comments:
19
- - Removes Oracle-style hints (/*+ hint */)
20
- - Removes MySQL version comments (/*!50000 */)
21
- - Removes formal hint expressions (exp.Hint nodes)
22
- - Preserves standard comments (-- comment, /* comment */)
23
- - Uses SQLGlot's AST for reliable, context-aware hint detection
24
-
25
- Args:
26
- enabled: Whether hint removal is enabled.
27
- remove_oracle_hints: Whether to remove Oracle-style hints (/*+ hint */).
28
- remove_mysql_version_comments: Whether to remove MySQL /*!50000 */ style comments.
29
- """
30
-
31
- def __init__(
32
- self, enabled: bool = True, remove_oracle_hints: bool = True, remove_mysql_version_comments: bool = True
33
- ) -> None:
34
- self.enabled = enabled
35
- self.remove_oracle_hints = remove_oracle_hints
36
- self.remove_mysql_version_comments = remove_mysql_version_comments
37
-
38
- def process(
39
- self, expression: "Optional[exp.Expression]", context: "SQLProcessingContext"
40
- ) -> "Optional[exp.Expression]":
41
- """Removes SQL hints from the expression using SQLGlot AST traversal."""
42
- if not self.enabled or expression is None or context.current_expression is None:
43
- return expression
44
-
45
- hints_removed_count = 0
46
-
47
- def _remove_hint_node(node: exp.Expression) -> "Optional[exp.Expression]":
48
- nonlocal hints_removed_count
49
- if isinstance(node, exp.Hint):
50
- hints_removed_count += 1
51
- return None
52
-
53
- if hasattr(node, "comments") and node.comments:
54
- original_comment_count = len(node.comments)
55
- comments_to_keep = []
56
- for comment in node.comments:
57
- comment_text = str(comment).strip()
58
- hint_keywords = ["INDEX", "USE_NL", "USE_HASH", "PARALLEL", "FULL", "FIRST_ROWS", "ALL_ROWS"]
59
- is_oracle_hint = any(keyword in comment_text.upper() for keyword in hint_keywords)
60
-
61
- if is_oracle_hint:
62
- if self.remove_oracle_hints:
63
- continue
64
- elif comment_text.startswith("!") and self.remove_mysql_version_comments:
65
- continue
66
-
67
- comments_to_keep.append(comment)
68
-
69
- if len(comments_to_keep) < original_comment_count:
70
- hints_removed_count += original_comment_count - len(comments_to_keep)
71
- node.pop_comments()
72
- if comments_to_keep:
73
- node.add_comments(comments_to_keep)
74
- return node
75
-
76
- transformed_expression = context.current_expression.transform(_remove_hint_node, copy=True)
77
- context.current_expression = transformed_expression or exp.Anonymous(this="")
78
-
79
- context.metadata["hints_removed"] = hints_removed_count
80
-
81
- return context.current_expression
@@ -1,67 +0,0 @@
1
- # Base class for validators
2
- from abc import ABC, abstractmethod
3
- from typing import TYPE_CHECKING, Optional
4
-
5
- from sqlspec.exceptions import RiskLevel
6
- from sqlspec.statement.pipelines.base import ProcessorProtocol
7
- from sqlspec.statement.pipelines.result_types import ValidationError
8
-
9
- if TYPE_CHECKING:
10
- from sqlglot import exp
11
-
12
- from sqlspec.statement.pipelines.context import SQLProcessingContext
13
-
14
- __all__ = ("BaseValidator",)
15
-
16
-
17
- class BaseValidator(ProcessorProtocol, ABC):
18
- """Base class for all validators."""
19
-
20
- def process(
21
- self, expression: "Optional[exp.Expression]", context: "SQLProcessingContext"
22
- ) -> "Optional[exp.Expression]":
23
- """Process the SQL expression through this validator.
24
-
25
- Args:
26
- expression: The SQL expression to validate.
27
- context: The SQL processing context.
28
-
29
- Returns:
30
- The expression unchanged (validators don't transform).
31
- """
32
- if expression is None:
33
- return None
34
- self.validate(expression, context)
35
- return expression
36
-
37
- @abstractmethod
38
- def validate(self, expression: "exp.Expression", context: "SQLProcessingContext") -> None:
39
- """Validate the expression and add any errors to the context.
40
-
41
- Args:
42
- expression: The SQL expression to validate.
43
- context: The SQL processing context.
44
- """
45
- raise NotImplementedError
46
-
47
- def add_error(
48
- self,
49
- context: "SQLProcessingContext",
50
- message: str,
51
- code: str,
52
- risk_level: RiskLevel,
53
- expression: "exp.Expression | None" = None,
54
- ) -> None:
55
- """Helper to add a validation error to the context.
56
-
57
- Args:
58
- context: The SQL processing context.
59
- message: The error message.
60
- code: The error code.
61
- risk_level: The risk level.
62
- expression: The specific expression with the error (optional).
63
- """
64
- error = ValidationError(
65
- message=message, code=code, risk_level=risk_level, processor=self.__class__.__name__, expression=expression
66
- )
67
- context.validation_errors.append(error)
@@ -1,173 +0,0 @@
1
- from typing import TYPE_CHECKING, Any, Protocol, Union, runtime_checkable
2
-
3
- if TYPE_CHECKING:
4
- from collections.abc import AsyncIterator, Iterator
5
- from pathlib import Path
6
-
7
- from sqlspec.typing import ArrowRecordBatch, ArrowTable
8
-
9
- __all__ = ("ObjectStoreProtocol",)
10
-
11
-
12
- @runtime_checkable
13
- class ObjectStoreProtocol(Protocol):
14
- """Unified protocol for object storage operations.
15
-
16
- This protocol defines the interface for all storage backends with built-in
17
- instrumentation support. Backends must implement both sync and async operations
18
- where possible, with async operations suffixed with _async.
19
-
20
- All methods use 'path' terminology for consistency with object store patterns.
21
- """
22
-
23
- def __init__(self, uri: str, **kwargs: Any) -> None:
24
- return
25
-
26
- # Core Operations (sync)
27
- def read_bytes(self, path: "Union[str, Path]", **kwargs: Any) -> bytes:
28
- """Read bytes from an object."""
29
- return b""
30
-
31
- def write_bytes(self, path: "Union[str, Path]", data: bytes, **kwargs: Any) -> None:
32
- """Write bytes to an object."""
33
- return
34
-
35
- def read_text(self, path: "Union[str, Path]", encoding: str = "utf-8", **kwargs: Any) -> str:
36
- """Read text from an object."""
37
- return ""
38
-
39
- def write_text(self, path: "Union[str, Path]", data: str, encoding: str = "utf-8", **kwargs: Any) -> None:
40
- """Write text to an object."""
41
- return
42
-
43
- # Object Operations
44
- def exists(self, path: "Union[str, Path]", **kwargs: Any) -> bool:
45
- """Check if an object exists."""
46
- return False
47
-
48
- def delete(self, path: "Union[str, Path]", **kwargs: Any) -> None:
49
- """Delete an object."""
50
- return
51
-
52
- def copy(self, source: "Union[str, Path]", destination: "Union[str, Path]", **kwargs: Any) -> None:
53
- """Copy an object."""
54
- return
55
-
56
- def move(self, source: "Union[str, Path]", destination: "Union[str, Path]", **kwargs: Any) -> None:
57
- """Move an object."""
58
- return
59
-
60
- # Listing Operations
61
- def list_objects(self, prefix: str = "", recursive: bool = True, **kwargs: Any) -> list[str]:
62
- """List objects with optional prefix."""
63
- return []
64
-
65
- def glob(self, pattern: str, **kwargs: Any) -> list[str]:
66
- """Find objects matching a glob pattern."""
67
- return []
68
-
69
- # Path Operations
70
- def is_object(self, path: "Union[str, Path]") -> bool:
71
- """Check if path points to an object."""
72
- return False
73
-
74
- def is_path(self, path: "Union[str, Path]") -> bool:
75
- """Check if path points to a prefix (directory-like)."""
76
- return False
77
-
78
- def get_metadata(self, path: "Union[str, Path]", **kwargs: Any) -> dict[str, Any]:
79
- """Get object metadata."""
80
- return {}
81
-
82
- # Arrow Operations
83
- def read_arrow(self, path: "Union[str, Path]", **kwargs: Any) -> "ArrowTable":
84
- """Read an Arrow table from storage.
85
-
86
- For obstore backend, this should use native arrow operations when available.
87
- """
88
- msg = "Arrow reading not implemented"
89
- raise NotImplementedError(msg)
90
-
91
- def write_arrow(self, path: "Union[str, Path]", table: "ArrowTable", **kwargs: Any) -> None:
92
- """Write an Arrow table to storage.
93
-
94
- For obstore backend, this should use native arrow operations when available.
95
- """
96
- msg = "Arrow writing not implemented"
97
- raise NotImplementedError(msg)
98
-
99
- def stream_arrow(self, pattern: str, **kwargs: Any) -> "Iterator[ArrowRecordBatch]":
100
- """Stream Arrow record batches from matching objects.
101
-
102
- For obstore backend, this should use native streaming when available.
103
- """
104
- msg = "Arrow streaming not implemented"
105
- raise NotImplementedError(msg)
106
-
107
- # Async versions
108
- async def read_bytes_async(self, path: "Union[str, Path]", **kwargs: Any) -> bytes:
109
- """Async read bytes from an object."""
110
- msg = "Async operations not implemented"
111
- raise NotImplementedError(msg)
112
-
113
- async def write_bytes_async(self, path: "Union[str, Path]", data: bytes, **kwargs: Any) -> None:
114
- """Async write bytes to an object."""
115
- msg = "Async operations not implemented"
116
- raise NotImplementedError(msg)
117
-
118
- async def read_text_async(self, path: "Union[str, Path]", encoding: str = "utf-8", **kwargs: Any) -> str:
119
- """Async read text from an object."""
120
- msg = "Async operations not implemented"
121
- raise NotImplementedError(msg)
122
-
123
- async def write_text_async(
124
- self, path: "Union[str, Path]", data: str, encoding: str = "utf-8", **kwargs: Any
125
- ) -> None:
126
- """Async write text to an object."""
127
- msg = "Async operations not implemented"
128
- raise NotImplementedError(msg)
129
-
130
- async def exists_async(self, path: "Union[str, Path]", **kwargs: Any) -> bool:
131
- """Async check if an object exists."""
132
- msg = "Async operations not implemented"
133
- raise NotImplementedError(msg)
134
-
135
- async def delete_async(self, path: "Union[str, Path]", **kwargs: Any) -> None:
136
- """Async delete an object."""
137
- msg = "Async operations not implemented"
138
- raise NotImplementedError(msg)
139
-
140
- async def list_objects_async(self, prefix: str = "", recursive: bool = True, **kwargs: Any) -> list[str]:
141
- """Async list objects with optional prefix."""
142
- msg = "Async operations not implemented"
143
- raise NotImplementedError(msg)
144
-
145
- async def copy_async(self, source: "Union[str, Path]", destination: "Union[str, Path]", **kwargs: Any) -> None:
146
- """Async copy an object."""
147
- msg = "Async operations not implemented"
148
- raise NotImplementedError(msg)
149
-
150
- async def move_async(self, source: "Union[str, Path]", destination: "Union[str, Path]", **kwargs: Any) -> None:
151
- """Async move an object."""
152
- msg = "Async operations not implemented"
153
- raise NotImplementedError(msg)
154
-
155
- async def get_metadata_async(self, path: "Union[str, Path]", **kwargs: Any) -> dict[str, Any]:
156
- """Async get object metadata."""
157
- msg = "Async operations not implemented"
158
- raise NotImplementedError(msg)
159
-
160
- async def read_arrow_async(self, path: "Union[str, Path]", **kwargs: Any) -> "ArrowTable":
161
- """Async read an Arrow table from storage."""
162
- msg = "Async arrow reading not implemented"
163
- raise NotImplementedError(msg)
164
-
165
- async def write_arrow_async(self, path: "Union[str, Path]", table: "ArrowTable", **kwargs: Any) -> None:
166
- """Async write an Arrow table to storage."""
167
- msg = "Async arrow writing not implemented"
168
- raise NotImplementedError(msg)
169
-
170
- async def stream_arrow_async(self, pattern: str, **kwargs: Any) -> "AsyncIterator[ArrowRecordBatch]":
171
- """Async stream Arrow record batches from matching objects."""
172
- msg = "Async arrow streaming not implemented"
173
- raise NotImplementedError(msg)
@@ -1,145 +0,0 @@
1
- sqlspec/__init__.py,sha256=hyVFQsYsgDWOZ2EPnW1LnATQVxGcYu3liBvSOvk4EQk,705
2
- sqlspec/__metadata__.py,sha256=hNP3wXvtk8fQVPKGjRLpZ9mP-gaPJqzrmgm3UqpDIXQ,460
3
- sqlspec/_serialization.py,sha256=7zox4G9zIps-DCdIEwYs4gwALfEOy1g_sWS4r5kpzO8,2604
4
- sqlspec/_sql.py,sha256=VvSttObOgEDN_qECiOZu07_c3pgC1f9cdOORn-xWc88,42463
5
- sqlspec/_typing.py,sha256=Vn1CTCfedAHZV3pKZP-l_mPw9pTxesCzRKVRypzNY_k,17903
6
- sqlspec/base.py,sha256=a7adbCUzohf1MU-iP0TxazGsk9fsJhJmxuFKNWkgC6o,18355
7
- sqlspec/config.py,sha256=a5VZj3UvK_St2XSchUw7NL3YBDpYp_FlaoVM8OkaI8I,13144
8
- sqlspec/exceptions.py,sha256=Qdfd1k9Q4rTDH15zja2UzCOYAbR7idN3xGutDYGg3eg,13934
9
- sqlspec/loader.py,sha256=UsL95Zb-Y9wKgK3hCjCf0EHNMoAHdyX6IsaY1yr4770,17527
10
- sqlspec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- sqlspec/typing.py,sha256=Wxc-ctN0hJ41U-qDzOaBA_HwTwAaQ7pN1nu0FpCNruA,20792
12
- sqlspec/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- sqlspec/adapters/adbc/__init__.py,sha256=v9bs7501PgEyzR1XIsEpE2Wdrj9DOYkZ4grysw72UXk,218
14
- sqlspec/adapters/adbc/config.py,sha256=-wkuxXj-cqTFeIA7_mnPD37oZCHrnVjkOYKIwTZkD1Y,20159
15
- sqlspec/adapters/adbc/driver.py,sha256=22P16Pz6Bk399TSjoODLK1ZRcXxTHMGmjp_3KuCSUzM,16462
16
- sqlspec/adapters/aiosqlite/__init__.py,sha256=7wPmhXQeu4jRi-LZzPxAPTdgRmgmyqCn9U-4wnCWoLM,258
17
- sqlspec/adapters/aiosqlite/config.py,sha256=K8vPiGSDeSCTFIm4XgCEGbXG8uIAX6JjYHv2890RbTw,7174
18
- sqlspec/adapters/aiosqlite/driver.py,sha256=s90fHWRViPodvJs5jOZ8OJ4AKzyNqDGkLjh8LD-Wa8Q,12512
19
- sqlspec/adapters/asyncmy/__init__.py,sha256=zYpebEt_PrNCifLcqXiCcWVm0Zl-LvWbFDromWwSTw8,270
20
- sqlspec/adapters/asyncmy/config.py,sha256=ZCwg63zsa-SEiHjJjCZYvnu-hl5cdw-o8j3u01_r7W4,10402
21
- sqlspec/adapters/asyncmy/driver.py,sha256=Q3dVCcm24z-Cvd2GcHaZKfP95cb5uk7u1-b8zuMQJpo,9982
22
- sqlspec/adapters/asyncpg/__init__.py,sha256=svnbKlOin8jRL88AdAqflBEU-WEAzp0Thc2y50QsxIo,310
23
- sqlspec/adapters/asyncpg/config.py,sha256=IHovVNGryGsu_ulYBY9TJrXaz_mPpqIgnh4c-juIglA,13033
24
- sqlspec/adapters/asyncpg/driver.py,sha256=U32J4W4RXvW5iQfqBI6_uhVqc4Kyaj2IpUe9BRJS8r4,19105
25
- sqlspec/adapters/bigquery/__init__.py,sha256=fWRH-BoCNX4rYwhU2DK64cXWpfkYpWIExddJAti0bxM,250
26
- sqlspec/adapters/bigquery/config.py,sha256=bTmos8OcJcy7kPmBds-0EPLe5XyREnwOR0YYd5fkZjg,16971
27
- sqlspec/adapters/bigquery/driver.py,sha256=EPZSrWwxIm0xPYBzCTtsRunfe6yzlyvR_4JeOrghCx0,32199
28
- sqlspec/adapters/duckdb/__init__.py,sha256=I1f6szfpKKrq6WhyDoUXD3i3NN4yjsh94_fhP1URI5M,351
29
- sqlspec/adapters/duckdb/config.py,sha256=az9WFJXyw1M0yiNw2tqf7GYM-9tblHj_0BHLYzFytXk,20413
30
- sqlspec/adapters/duckdb/driver.py,sha256=mhfOgDwcEZwQGn597GWDU-o64u3PKZGGhdkq8SVvhCs,17807
31
- sqlspec/adapters/oracledb/__init__.py,sha256=nn3whn0UyBThoXnE1-5_byVuc9PJjvB2P896p7LpNZI,474
32
- sqlspec/adapters/oracledb/config.py,sha256=HQpgGMf0oMSWr2k4q3uPEF4LWR7QPnzZE6lxLDq723U,22737
33
- sqlspec/adapters/oracledb/driver.py,sha256=YQnudVnP1EizI4eN3_llITdJ7TjpbLNxFkYlkSJVaQs,25463
34
- sqlspec/adapters/psqlpy/__init__.py,sha256=dp0-96V4SAbNEvOqlJ8PWEyJMYzZGElVoyneZqJ-fbQ,297
35
- sqlspec/adapters/psqlpy/config.py,sha256=NKlHHDjKr5dF4LQprYA5ivJsNy2UXkvYg8B-kXOvvjE,16342
36
- sqlspec/adapters/psqlpy/driver.py,sha256=xI89mFdkQulcntbH4ALTOOHn5b6_skCgSbjYDUfvyG4,8650
37
- sqlspec/adapters/psycopg/__init__.py,sha256=ukkCUPrJPyAG78v4rOqcK4WZDs26PeB9Ra9qkFrGJ3E,484
38
- sqlspec/adapters/psycopg/config.py,sha256=A3nhtxKe6V_Gtqo2TbvBuJOV4lBy0zJupuIjJsEkKwg,27561
39
- sqlspec/adapters/psycopg/driver.py,sha256=ggniQQV11oSlU7eud1yvdgm9SrNuzNMsH6VOA6ZTXFs,37598
40
- sqlspec/adapters/sqlite/__init__.py,sha256=1lYrJ-DojUAOvXMoZRUJNEVyMmYhO41hMJnDWCEeXlw,234
41
- sqlspec/adapters/sqlite/config.py,sha256=7yHe1eeVGFZvmTdxUPF2XcIiEcgZFUdncuGf_6qG8Xc,6153
42
- sqlspec/adapters/sqlite/driver.py,sha256=WlkkEvd1izDpQ98GVQSVzic14bvBq0d7jPc_LSQeY88,12204
43
- sqlspec/driver/__init__.py,sha256=0udRS5IlJ17HzOCvzapG8c_88yAwTQri1XLD_3fZxZU,671
44
- sqlspec/driver/_async.py,sha256=JYn-8E_IQHBCpAPfZ3g0IpNc_0yCwYu98lKgcHxWdPU,10130
45
- sqlspec/driver/_common.py,sha256=ceAvzvI9zV3xBotEAMCuJeEbCHaeV82UJyfYYNnrspk,14680
46
- sqlspec/driver/_sync.py,sha256=8jyP-TInSM3iLNhyOMNthvoE6vNwPp2wV8oAQhObuqc,10255
47
- sqlspec/driver/mixins/__init__.py,sha256=-FSWLYq644NftRsmjmXMA9Q7_l7tIFAIh1ZyK0yrba8,652
48
- sqlspec/driver/mixins/_pipeline.py,sha256=XCr4PTUvvzvte2Yw1g-hqje5dg3bgrsi46kj8kdy8Hw,20083
49
- sqlspec/driver/mixins/_result_utils.py,sha256=j6BrFCC9E6xbnn-mH0sd2JBlxZFjA30LWKrYZh8gjXM,4882
50
- sqlspec/driver/mixins/_sql_translator.py,sha256=p_PR4KBg9NKNpRpiEqA0hcUIttpdillHpnLUVJEcxuE,1519
51
- sqlspec/driver/mixins/_storage.py,sha256=7ohZtYPmoYbk-HHirJ-F6tMj5u8Cf1pL93w4dwurmCw,44804
52
- sqlspec/driver/mixins/_type_coercion.py,sha256=17HC2Vsd70tRlUawO0CkUeoJUd2jG5R5Yb1A6Jr-1Tc,4716
53
- sqlspec/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- sqlspec/extensions/aiosql/__init__.py,sha256=-9cefc9pYPf9vCgALoB-y1DtmcgRjKe2azfl6RIarAA,414
55
- sqlspec/extensions/aiosql/adapter.py,sha256=EcMzTQ2-EzH-C2G1nJ6dw5O09rUzdAclmgbFb9wkJ8E,16993
56
- sqlspec/extensions/litestar/__init__.py,sha256=aXF2g4-U86pdJHoOA6RCvZgnyHVBbjRhlWqcSuRX2gg,243
57
- sqlspec/extensions/litestar/_utils.py,sha256=o-FuUj1_WkDrLxQxiP6hXDak66XfyRP3QLyEVKrIRjI,1954
58
- sqlspec/extensions/litestar/config.py,sha256=vLXM425tCV3IbJiNO1ZG90ctjBTb9oQCuLsqCaUYmo8,4685
59
- sqlspec/extensions/litestar/handlers.py,sha256=q-peGdWgvEI_s9rWt0SRIQvuhON_ItrjiVxIF2Pwm1U,10546
60
- sqlspec/extensions/litestar/plugin.py,sha256=itsduzXN-YzDm1wVqUcJQLcYGp3ogF9Aw2IU3i46iqk,5596
61
- sqlspec/extensions/litestar/providers.py,sha256=9wAr3c09ObOJmej1hQ3YizrK3YMN3S2xfBh23r-KSzE,21749
62
- sqlspec/service/__init__.py,sha256=EfyTy8X8GXxV0drxaBMJ0aRRqg3ZnwD6iu5oCTAQc1k,79
63
- sqlspec/service/base.py,sha256=vbJFO0EywWUgGr8WHHYxUCP-7sGF1Rxfi7ov51LWg50,521
64
- sqlspec/service/pagination.py,sha256=ndLQwsvswoISWEE_3IG9nmdHt42OZkVMJvr-2HTWsLw,619
65
- sqlspec/statement/__init__.py,sha256=NDvdrpr1EqAZXp4HmhTVaRnWVscahPSHpmSO8DHSoMY,536
66
- sqlspec/statement/filters.py,sha256=SPDupr8mJK1Ua3z2sXvE8dWAkamDAhE2MHn6yEM_6uU,21850
67
- sqlspec/statement/parameters.py,sha256=HjKg6Y-1ImBiigNlodGxsVOMPma1pBoJRISrQu_iqfM,31183
68
- sqlspec/statement/result.py,sha256=rEShBX-NGK3-0K6q1XwB0zQvPEygVVB_-rXodiUMbSo,18307
69
- sqlspec/statement/splitter.py,sha256=Y1eubbNSn3IRhvQhAZVzBB-oDZ5K5uoJYOGti1ds_5E,24850
70
- sqlspec/statement/sql.py,sha256=wx9kgR4vIsRLm_6pnWfelfzT9z3wAGat4kxGdBZV2S0,52773
71
- sqlspec/statement/builder/__init__.py,sha256=7mITd7RG_Sc4RBgQJoAAosLAV9WdF4-E-CzvUA-hT0A,1584
72
- sqlspec/statement/builder/_ddl_utils.py,sha256=or0DpLIUupCIxs3u6kMJQgmfj_P21TxMDHbM0rdSNnY,4745
73
- sqlspec/statement/builder/_parsing_utils.py,sha256=OKOB-V1UhOCUNVoJHDArUl0WKIMVPshCFFrJcjKvs9Y,5613
74
- sqlspec/statement/builder/base.py,sha256=LDgFW6Fu15lt0fhtT-vQkH7CDIkOXd4Ne1dkda6-ri4,12918
75
- sqlspec/statement/builder/ddl.py,sha256=tRdfqNZ3thdgXmGlafs4MC4hZbUngHbQ-k2DW4Q1Xwc,51027
76
- sqlspec/statement/builder/delete.py,sha256=yv78i2vWpRZ0NbQCkJz1JAYekius2MOZ_zmiVaP4fcw,2423
77
- sqlspec/statement/builder/insert.py,sha256=EduHjewraoauM4mH3r4OyrBc31FbCAad93B8vg9WpYc,9922
78
- sqlspec/statement/builder/merge.py,sha256=tNV81MiDUmQJ9KiInP8rEGvxQ50JAD2Itmdbr5921vI,2811
79
- sqlspec/statement/builder/protocols.py,sha256=ihy6uNv6lGdj1UHu-qWn08YhIn_YfjPup0qsBnaB1zU,575
80
- sqlspec/statement/builder/select.py,sha256=13dNa7XXHjGlSeRsjWTrOCZX0uK61mMbiRzk1gTq8is,8436
81
- sqlspec/statement/builder/update.py,sha256=K2DxlZM9e0DoO4T5MbeVNL9BCkhov7z8c6L9zuvjttc,5950
82
- sqlspec/statement/builder/mixins/__init__.py,sha256=B5GhsdySb_-DN3SvBlA2oimmymAJX3Rf4A7Xnz3uNN4,2887
83
- sqlspec/statement/builder/mixins/_aggregate_functions.py,sha256=RU91GKzwKABod-nHxhrT2nCoYFAf-kSE4VHmF23n__Y,6109
84
- sqlspec/statement/builder/mixins/_case_builder.py,sha256=fGdevoEZxmoJjsDV9Wwfom8vu3lmgF9B_o5HXCf25Kg,3047
85
- sqlspec/statement/builder/mixins/_common_table_expr.py,sha256=1e8KKoQjuMGKuutjZ4KFWhsH7mbRMhXsANqLLJ71SzA,3741
86
- sqlspec/statement/builder/mixins/_delete_from.py,sha256=GtuTYfG7N9RPAbyXIGKCoirRTg_gcHyoGI6pAFhUkEY,1026
87
- sqlspec/statement/builder/mixins/_from.py,sha256=YOYG-Bvpis9Wt2RI4byr_eRef35OXS6rBuigGsEOGW0,2618
88
- sqlspec/statement/builder/mixins/_group_by.py,sha256=qefERqljQY58PmJ3Q0nF8NNSO31fa2XDbevIpjiPzJs,4190
89
- sqlspec/statement/builder/mixins/_having.py,sha256=X8-hdwEeJg4RYxyjhaYLvlkpzE0AwIPl6t8SPGz5gi0,1112
90
- sqlspec/statement/builder/mixins/_insert_from_select.py,sha256=XBahvM2VA-qwzx3PLTRaqT21fFaRYwHACOADQ6mZwUE,1851
91
- sqlspec/statement/builder/mixins/_insert_into.py,sha256=7979JCYqKM_NRTHwkrJJY6l9lS2AQ-evZYRU8fs3yw0,1049
92
- sqlspec/statement/builder/mixins/_insert_values.py,sha256=RE2ApSc6OwVqToXTVwy1bhRFomfNOmrnSte8fVjEINg,2923
93
- sqlspec/statement/builder/mixins/_join.py,sha256=g3OxKMEiyNSGZRiBgdPT1Lvcr-h3u_3O0msN59B1Itg,5128
94
- sqlspec/statement/builder/mixins/_limit_offset.py,sha256=nyeajD1cYj0Wvki1GLYJbsfQzfaH5tyMkeGVU9fGWL0,1762
95
- sqlspec/statement/builder/mixins/_merge_clauses.py,sha256=3w22HImSoQvDMMTa9xJAHw4cx0-KrteLumFpQvg2o0I,16868
96
- sqlspec/statement/builder/mixins/_order_by.py,sha256=pcqEQIkpJ-KgLNLIqXFQQgdzGypXw0Umndn-X8TgKis,1729
97
- sqlspec/statement/builder/mixins/_pivot.py,sha256=GyLEFkhRlG_fxeRfzGRTVd5wZVtuA5HkNrvmOi7PF3Q,3442
98
- sqlspec/statement/builder/mixins/_returning.py,sha256=O39j2MEIcqiiUhFFGnyGwIXhLS7KrGigfZ9kPxFjjtI,1349
99
- sqlspec/statement/builder/mixins/_select_columns.py,sha256=6UXpHHDmka8NbrtbR-G-Xd1ux4DUazEonZndAXecWJI,2302
100
- sqlspec/statement/builder/mixins/_set_ops.py,sha256=uWV32ZAi2tojbS9b6Q0ZDIn1Rhbx4cCE42jhbVdm90I,5291
101
- sqlspec/statement/builder/mixins/_unpivot.py,sha256=dXdYk4UdFbDf7yNFRPrX3G5XtOgfw_BzaEI9au3ltKw,3296
102
- sqlspec/statement/builder/mixins/_update_from.py,sha256=r8-_iy5Kdp79eo34oNmNVLSnWsy3WUvwETODnKzBgZY,2461
103
- sqlspec/statement/builder/mixins/_update_set.py,sha256=tSnZ6cLKfta-OKHYAkoInQScMbxp9rxtFj0SBGnpGZ0,4041
104
- sqlspec/statement/builder/mixins/_update_table.py,sha256=FX3KezuHdu7YLQI4i5iniHWk1Lbzph8MzLcOM6iTd70,936
105
- sqlspec/statement/builder/mixins/_where.py,sha256=KZhOykAWrDYaD6p_W-nbVkh3-9ZS9paw77L3JttoeT8,19452
106
- sqlspec/statement/builder/mixins/_window_functions.py,sha256=8ldy06gK6jOlGg31oa1dCrG7IkfCVYvVr_f-lx0YcgU,3745
107
- sqlspec/statement/pipelines/__init__.py,sha256=vmFxkD7vnpyfMbuDsOF67B3DWDeCz183326pg1G0-5k,2206
108
- sqlspec/statement/pipelines/base.py,sha256=ylXSyab6P4v9PY0tDPlcHeCEkdFPECDq0Jjooi3E2ek,13019
109
- sqlspec/statement/pipelines/context.py,sha256=fhEKicpUcHXbyhgBpJnYnYPd4vWpkFoVuLWydsSB2dE,4371
110
- sqlspec/statement/pipelines/result_types.py,sha256=G34HofWjcK0SFMTyqVBFv-t17jkWKP9cCugA4Rds4qk,1046
111
- sqlspec/statement/pipelines/analyzers/__init__.py,sha256=RY7W0AiWG-8qdrTmRSGlEofjrPPJCJUnNK-LRukKt5Q,330
112
- sqlspec/statement/pipelines/analyzers/_analyzer.py,sha256=LbYapN0f8OFEtkw2TSRF_XeOwaOGI_ltgYGSTkgks5c,27639
113
- sqlspec/statement/pipelines/transformers/__init__.py,sha256=wwhAWQQCCoL2WhVZQ7ptt9mn4B_AY8pK9M2SUjj5DtU,550
114
- sqlspec/statement/pipelines/transformers/_expression_simplifier.py,sha256=90u62-WMG0l1_2S_u-93Oo3rVnAjvlTJkPf1IzgaP2E,11630
115
- sqlspec/statement/pipelines/transformers/_literal_parameterizer.py,sha256=lj2-9VsHZnn-UOhPKs72fqF8K_JU8mkSOcHFaZTDcbw,29097
116
- sqlspec/statement/pipelines/transformers/_remove_comments.py,sha256=PW1q7B2D-E_x2V1mTEUw_Uijj9W5-B6OteWE96aH7i8,2781
117
- sqlspec/statement/pipelines/transformers/_remove_hints.py,sha256=D13MDx9vG3n_y5VV6swTNx2z1zHnTAuRwOiKp0VYg2k,3334
118
- sqlspec/statement/pipelines/validators/__init__.py,sha256=cdlwdLhOT2OwTbueIsA7bfRG2b6y-j7dw9pMzl5AP0M,747
119
- sqlspec/statement/pipelines/validators/_dml_safety.py,sha256=FUfF7iWUc0tgmg-OwDgpYA3ZRy3z01PfGadDcaqENTM,10078
120
- sqlspec/statement/pipelines/validators/_parameter_style.py,sha256=I6tTeYBQFeg2uPlQWDyy7sMRidm_tt7ItTzhauhNrWA,13583
121
- sqlspec/statement/pipelines/validators/_performance.py,sha256=sSIknorC-VJghFJAATqfnnNUyUnQ0bN_GpXmmGZkkkA,25800
122
- sqlspec/statement/pipelines/validators/_security.py,sha256=62k5F4RCz1O_bb1rIPjm2BjHyp3YDObq2hjv74zY8Ac,43589
123
- sqlspec/statement/pipelines/validators/base.py,sha256=6xd0FCPOTpS77cn-abT1auubxASs5HPY2fgjhX1WZZQ,2166
124
- sqlspec/storage/__init__.py,sha256=dS1Qt2cTJpIBOKnw3ih3Z7FPFePFPPSazhkEbkV5DxU,516
125
- sqlspec/storage/protocol.py,sha256=8w2KPld6zDtisMfc92z603TAdmFwcLwAG1hiWt-mElY,6900
126
- sqlspec/storage/registry.py,sha256=it3S-jxf-rXcYwgquydiSo0AeXXqnBEhAVQ2Gk11GNU,11724
127
- sqlspec/storage/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
- sqlspec/storage/backends/base.py,sha256=34XYQuz1tQ-q_ZZwOz-Kimgvl088SR3VUYJoA-STslc,6350
129
- sqlspec/storage/backends/fsspec.py,sha256=aVhZqJ942HtNb7jz9UhnG6v0MvcaZn_zFYiscX_xTX0,12966
130
- sqlspec/storage/backends/obstore.py,sha256=OlKbLuKqBhvL_B89iEL5Klm2SlE-CmLY_24xM3OrJuw,21727
131
- sqlspec/utils/__init__.py,sha256=_Ya8IZuc2cZIstXr_xjgnSfxICXHXvu5mfWsi2USDrw,183
132
- sqlspec/utils/correlation.py,sha256=qzqw3CnhasS14hv0uHKh9DehbOX3dEHuB_NNz6Kg6QQ,4457
133
- sqlspec/utils/deprecation.py,sha256=zrmb_eKRlLWVA6dWrjUbN3Vz6D3_-Z_15Ixk4H-sDRk,3850
134
- sqlspec/utils/fixtures.py,sha256=q_Pghpmw2VgJ9P0TfkyjSF5PvdaD5Y2Laha0Bj4IDrA,1838
135
- sqlspec/utils/logging.py,sha256=g8lZXfbr79Ayu0YnnoOcwzGGeg9HUg_JyFpAbbUCd_0,4064
136
- sqlspec/utils/module_loader.py,sha256=9LcmEhy4T0jgkCaDVkxX47PSgJOMeJ8IV67yXEWBp-U,3074
137
- sqlspec/utils/serializers.py,sha256=TKsRryRcYMnb8Z8MGkYGClIxcYvC8CW7MsrPQTJqEcY,154
138
- sqlspec/utils/singleton.py,sha256=KZ7481tlDAxq6gcAlpULVqPLNc9P0XkHOEp7hfWIHcI,1096
139
- sqlspec/utils/sync_tools.py,sha256=9ZL_7wJks896ZsRGVB4mS8DgIwK3tKmZClvLblEx8q4,8954
140
- sqlspec/utils/text.py,sha256=Bit0I0nBgETvfumzguOQFiqrqwplqaoTeEfGdLzgPOk,5083
141
- sqlspec-0.12.2.dist-info/METADATA,sha256=PrWkExRnjjqGz6Eva7HRj2IAaX3VzBmsyuKQWBtX5fU,16663
142
- sqlspec-0.12.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
143
- sqlspec-0.12.2.dist-info/licenses/LICENSE,sha256=MdujfZ6l5HuLz4mElxlu049itenOR3gnhN1_Nd3nVcM,1078
144
- sqlspec-0.12.2.dist-info/licenses/NOTICE,sha256=Lyir8ozXWov7CyYS4huVaOCNrtgL17P-bNV-5daLntQ,1634
145
- sqlspec-0.12.2.dist-info/RECORD,,