sqlspec 0.25.0__py3-none-any.whl → 0.27.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.
- sqlspec/__init__.py +7 -15
- sqlspec/_serialization.py +256 -24
- sqlspec/_typing.py +71 -52
- sqlspec/adapters/adbc/_types.py +1 -1
- sqlspec/adapters/adbc/adk/__init__.py +5 -0
- sqlspec/adapters/adbc/adk/store.py +870 -0
- sqlspec/adapters/adbc/config.py +69 -12
- sqlspec/adapters/adbc/data_dictionary.py +340 -0
- sqlspec/adapters/adbc/driver.py +266 -58
- sqlspec/adapters/adbc/litestar/__init__.py +5 -0
- sqlspec/adapters/adbc/litestar/store.py +504 -0
- sqlspec/adapters/adbc/type_converter.py +153 -0
- sqlspec/adapters/aiosqlite/_types.py +1 -1
- sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/adk/store.py +527 -0
- sqlspec/adapters/aiosqlite/config.py +88 -15
- sqlspec/adapters/aiosqlite/data_dictionary.py +149 -0
- sqlspec/adapters/aiosqlite/driver.py +143 -40
- sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
- sqlspec/adapters/aiosqlite/litestar/store.py +281 -0
- sqlspec/adapters/aiosqlite/pool.py +7 -7
- sqlspec/adapters/asyncmy/__init__.py +7 -1
- sqlspec/adapters/asyncmy/_types.py +2 -2
- sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
- sqlspec/adapters/asyncmy/adk/store.py +493 -0
- sqlspec/adapters/asyncmy/config.py +68 -23
- sqlspec/adapters/asyncmy/data_dictionary.py +161 -0
- sqlspec/adapters/asyncmy/driver.py +313 -58
- sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
- sqlspec/adapters/asyncmy/litestar/store.py +296 -0
- sqlspec/adapters/asyncpg/__init__.py +2 -1
- sqlspec/adapters/asyncpg/_type_handlers.py +71 -0
- sqlspec/adapters/asyncpg/_types.py +11 -7
- sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
- sqlspec/adapters/asyncpg/adk/store.py +450 -0
- sqlspec/adapters/asyncpg/config.py +59 -35
- sqlspec/adapters/asyncpg/data_dictionary.py +173 -0
- sqlspec/adapters/asyncpg/driver.py +170 -25
- sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
- sqlspec/adapters/asyncpg/litestar/store.py +253 -0
- sqlspec/adapters/bigquery/_types.py +1 -1
- sqlspec/adapters/bigquery/adk/__init__.py +5 -0
- sqlspec/adapters/bigquery/adk/store.py +576 -0
- sqlspec/adapters/bigquery/config.py +27 -10
- sqlspec/adapters/bigquery/data_dictionary.py +149 -0
- sqlspec/adapters/bigquery/driver.py +368 -142
- sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
- sqlspec/adapters/bigquery/litestar/store.py +327 -0
- sqlspec/adapters/bigquery/type_converter.py +125 -0
- sqlspec/adapters/duckdb/_types.py +1 -1
- sqlspec/adapters/duckdb/adk/__init__.py +14 -0
- sqlspec/adapters/duckdb/adk/store.py +553 -0
- sqlspec/adapters/duckdb/config.py +80 -20
- sqlspec/adapters/duckdb/data_dictionary.py +163 -0
- sqlspec/adapters/duckdb/driver.py +167 -45
- sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
- sqlspec/adapters/duckdb/litestar/store.py +332 -0
- sqlspec/adapters/duckdb/pool.py +4 -4
- sqlspec/adapters/duckdb/type_converter.py +133 -0
- sqlspec/adapters/oracledb/_numpy_handlers.py +133 -0
- sqlspec/adapters/oracledb/_types.py +20 -2
- sqlspec/adapters/oracledb/adk/__init__.py +5 -0
- sqlspec/adapters/oracledb/adk/store.py +1745 -0
- sqlspec/adapters/oracledb/config.py +122 -32
- sqlspec/adapters/oracledb/data_dictionary.py +509 -0
- sqlspec/adapters/oracledb/driver.py +353 -91
- sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
- sqlspec/adapters/oracledb/litestar/store.py +767 -0
- sqlspec/adapters/oracledb/migrations.py +348 -73
- sqlspec/adapters/oracledb/type_converter.py +207 -0
- sqlspec/adapters/psqlpy/_type_handlers.py +44 -0
- sqlspec/adapters/psqlpy/_types.py +2 -1
- sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
- sqlspec/adapters/psqlpy/adk/store.py +482 -0
- sqlspec/adapters/psqlpy/config.py +46 -17
- sqlspec/adapters/psqlpy/data_dictionary.py +172 -0
- sqlspec/adapters/psqlpy/driver.py +123 -209
- sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
- sqlspec/adapters/psqlpy/litestar/store.py +272 -0
- sqlspec/adapters/psqlpy/type_converter.py +102 -0
- sqlspec/adapters/psycopg/_type_handlers.py +80 -0
- sqlspec/adapters/psycopg/_types.py +2 -1
- sqlspec/adapters/psycopg/adk/__init__.py +5 -0
- sqlspec/adapters/psycopg/adk/store.py +944 -0
- sqlspec/adapters/psycopg/config.py +69 -35
- sqlspec/adapters/psycopg/data_dictionary.py +331 -0
- sqlspec/adapters/psycopg/driver.py +238 -81
- sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
- sqlspec/adapters/psycopg/litestar/store.py +554 -0
- sqlspec/adapters/sqlite/__init__.py +2 -1
- sqlspec/adapters/sqlite/_type_handlers.py +86 -0
- sqlspec/adapters/sqlite/_types.py +1 -1
- sqlspec/adapters/sqlite/adk/__init__.py +5 -0
- sqlspec/adapters/sqlite/adk/store.py +572 -0
- sqlspec/adapters/sqlite/config.py +87 -15
- sqlspec/adapters/sqlite/data_dictionary.py +149 -0
- sqlspec/adapters/sqlite/driver.py +137 -54
- sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
- sqlspec/adapters/sqlite/litestar/store.py +318 -0
- sqlspec/adapters/sqlite/pool.py +18 -9
- sqlspec/base.py +45 -26
- sqlspec/builder/__init__.py +73 -4
- sqlspec/builder/_base.py +162 -89
- sqlspec/builder/_column.py +62 -29
- sqlspec/builder/_ddl.py +180 -121
- sqlspec/builder/_delete.py +5 -4
- sqlspec/builder/_dml.py +388 -0
- sqlspec/{_sql.py → builder/_factory.py} +53 -94
- sqlspec/builder/_insert.py +32 -131
- sqlspec/builder/_join.py +375 -0
- sqlspec/builder/_merge.py +446 -11
- sqlspec/builder/_parsing_utils.py +111 -17
- sqlspec/builder/_select.py +1457 -24
- sqlspec/builder/_update.py +11 -42
- sqlspec/cli.py +307 -194
- sqlspec/config.py +252 -67
- sqlspec/core/__init__.py +5 -4
- sqlspec/core/cache.py +17 -17
- sqlspec/core/compiler.py +62 -9
- sqlspec/core/filters.py +37 -37
- sqlspec/core/hashing.py +9 -9
- sqlspec/core/parameters.py +83 -48
- sqlspec/core/result.py +102 -46
- sqlspec/core/splitter.py +16 -17
- sqlspec/core/statement.py +36 -30
- sqlspec/core/type_conversion.py +235 -0
- sqlspec/driver/__init__.py +7 -6
- sqlspec/driver/_async.py +188 -151
- sqlspec/driver/_common.py +285 -80
- sqlspec/driver/_sync.py +188 -152
- sqlspec/driver/mixins/_result_tools.py +20 -236
- sqlspec/driver/mixins/_sql_translator.py +4 -4
- sqlspec/exceptions.py +75 -7
- sqlspec/extensions/adk/__init__.py +53 -0
- sqlspec/extensions/adk/_types.py +51 -0
- sqlspec/extensions/adk/converters.py +172 -0
- sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +144 -0
- sqlspec/extensions/adk/migrations/__init__.py +0 -0
- sqlspec/extensions/adk/service.py +181 -0
- sqlspec/extensions/adk/store.py +536 -0
- sqlspec/extensions/aiosql/adapter.py +73 -53
- sqlspec/extensions/litestar/__init__.py +21 -4
- sqlspec/extensions/litestar/cli.py +54 -10
- sqlspec/extensions/litestar/config.py +59 -266
- sqlspec/extensions/litestar/handlers.py +46 -17
- sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
- sqlspec/extensions/litestar/migrations/__init__.py +3 -0
- sqlspec/extensions/litestar/plugin.py +324 -223
- sqlspec/extensions/litestar/providers.py +25 -25
- sqlspec/extensions/litestar/store.py +265 -0
- sqlspec/loader.py +30 -49
- sqlspec/migrations/__init__.py +4 -3
- sqlspec/migrations/base.py +302 -39
- sqlspec/migrations/commands.py +611 -144
- sqlspec/migrations/context.py +142 -0
- sqlspec/migrations/fix.py +199 -0
- sqlspec/migrations/loaders.py +68 -23
- sqlspec/migrations/runner.py +543 -107
- sqlspec/migrations/tracker.py +237 -21
- sqlspec/migrations/utils.py +51 -3
- sqlspec/migrations/validation.py +177 -0
- sqlspec/protocols.py +66 -36
- sqlspec/storage/_utils.py +98 -0
- sqlspec/storage/backends/fsspec.py +134 -106
- sqlspec/storage/backends/local.py +78 -51
- sqlspec/storage/backends/obstore.py +278 -162
- sqlspec/storage/registry.py +75 -39
- sqlspec/typing.py +16 -84
- sqlspec/utils/config_resolver.py +153 -0
- sqlspec/utils/correlation.py +4 -5
- sqlspec/utils/data_transformation.py +3 -2
- sqlspec/utils/deprecation.py +9 -8
- sqlspec/utils/fixtures.py +4 -4
- sqlspec/utils/logging.py +46 -6
- sqlspec/utils/module_loader.py +2 -2
- sqlspec/utils/schema.py +288 -0
- sqlspec/utils/serializers.py +50 -2
- sqlspec/utils/sync_tools.py +21 -17
- sqlspec/utils/text.py +1 -2
- sqlspec/utils/type_guards.py +111 -20
- sqlspec/utils/version.py +433 -0
- {sqlspec-0.25.0.dist-info → sqlspec-0.27.0.dist-info}/METADATA +40 -21
- sqlspec-0.27.0.dist-info/RECORD +207 -0
- sqlspec/builder/mixins/__init__.py +0 -55
- sqlspec/builder/mixins/_cte_and_set_ops.py +0 -254
- sqlspec/builder/mixins/_delete_operations.py +0 -50
- sqlspec/builder/mixins/_insert_operations.py +0 -282
- sqlspec/builder/mixins/_join_operations.py +0 -389
- sqlspec/builder/mixins/_merge_operations.py +0 -592
- sqlspec/builder/mixins/_order_limit_operations.py +0 -152
- sqlspec/builder/mixins/_pivot_operations.py +0 -157
- sqlspec/builder/mixins/_select_operations.py +0 -936
- sqlspec/builder/mixins/_update_operations.py +0 -218
- sqlspec/builder/mixins/_where_clause.py +0 -1304
- sqlspec-0.25.0.dist-info/RECORD +0 -139
- sqlspec-0.25.0.dist-info/licenses/NOTICE +0 -29
- {sqlspec-0.25.0.dist-info → sqlspec-0.27.0.dist-info}/WHEEL +0 -0
- {sqlspec-0.25.0.dist-info → sqlspec-0.27.0.dist-info}/entry_points.txt +0 -0
- {sqlspec-0.25.0.dist-info → sqlspec-0.27.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"""BigQuery-specific data dictionary for metadata queries."""
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
4
|
+
|
|
5
|
+
from sqlspec.driver import SyncDataDictionaryBase, SyncDriverAdapterBase, VersionInfo
|
|
6
|
+
from sqlspec.utils.logging import get_logger
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from sqlspec.adapters.bigquery.driver import BigQueryDriver
|
|
10
|
+
|
|
11
|
+
logger = get_logger("adapters.bigquery.data_dictionary")
|
|
12
|
+
|
|
13
|
+
__all__ = ("BigQuerySyncDataDictionary",)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class BigQuerySyncDataDictionary(SyncDataDictionaryBase):
|
|
17
|
+
"""BigQuery-specific sync data dictionary."""
|
|
18
|
+
|
|
19
|
+
def get_version(self, driver: SyncDriverAdapterBase) -> "VersionInfo | None":
|
|
20
|
+
"""Get BigQuery version information.
|
|
21
|
+
|
|
22
|
+
BigQuery is a cloud service without traditional versioning.
|
|
23
|
+
Returns a fixed version to indicate feature availability.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
driver: BigQuery driver instance
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
Fixed version info indicating current BigQuery capabilities
|
|
30
|
+
"""
|
|
31
|
+
# BigQuery is a cloud service - return a fixed version
|
|
32
|
+
# indicating modern feature support
|
|
33
|
+
logger.debug("BigQuery cloud service - using fixed version")
|
|
34
|
+
return VersionInfo(1, 0, 0)
|
|
35
|
+
|
|
36
|
+
def get_feature_flag(self, driver: SyncDriverAdapterBase, feature: str) -> bool:
|
|
37
|
+
"""Check if BigQuery supports a specific feature.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
driver: BigQuery driver instance
|
|
41
|
+
feature: Feature name to check
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
True if feature is supported, False otherwise
|
|
45
|
+
"""
|
|
46
|
+
# BigQuery feature support based on current capabilities
|
|
47
|
+
feature_checks = {
|
|
48
|
+
"supports_json": True, # Native JSON type
|
|
49
|
+
"supports_arrays": True, # ARRAY types
|
|
50
|
+
"supports_structs": True, # STRUCT types
|
|
51
|
+
"supports_geography": True, # GEOGRAPHY type
|
|
52
|
+
"supports_returning": False, # No RETURNING clause
|
|
53
|
+
"supports_upsert": True, # MERGE statement
|
|
54
|
+
"supports_window_functions": True,
|
|
55
|
+
"supports_cte": True,
|
|
56
|
+
"supports_transactions": True, # Multi-statement transactions
|
|
57
|
+
"supports_prepared_statements": True,
|
|
58
|
+
"supports_schemas": True, # Datasets and projects
|
|
59
|
+
"supports_partitioning": True, # Table partitioning
|
|
60
|
+
"supports_clustering": True, # Table clustering
|
|
61
|
+
"supports_uuid": False, # No native UUID, use STRING
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return feature_checks.get(feature, False)
|
|
65
|
+
|
|
66
|
+
def get_optimal_type(self, driver: SyncDriverAdapterBase, type_category: str) -> str:
|
|
67
|
+
"""Get optimal BigQuery type for a category.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
driver: BigQuery driver instance
|
|
71
|
+
type_category: Type category
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
BigQuery-specific type name
|
|
75
|
+
"""
|
|
76
|
+
type_map = {
|
|
77
|
+
"json": "JSON",
|
|
78
|
+
"uuid": "STRING",
|
|
79
|
+
"boolean": "BOOL",
|
|
80
|
+
"timestamp": "TIMESTAMP",
|
|
81
|
+
"text": "STRING",
|
|
82
|
+
"blob": "BYTES",
|
|
83
|
+
"array": "ARRAY",
|
|
84
|
+
"struct": "STRUCT",
|
|
85
|
+
"geography": "GEOGRAPHY",
|
|
86
|
+
"numeric": "NUMERIC",
|
|
87
|
+
"bignumeric": "BIGNUMERIC",
|
|
88
|
+
}
|
|
89
|
+
return type_map.get(type_category, "STRING")
|
|
90
|
+
|
|
91
|
+
def get_columns(
|
|
92
|
+
self, driver: SyncDriverAdapterBase, table: str, schema: "str | None" = None
|
|
93
|
+
) -> "list[dict[str, Any]]":
|
|
94
|
+
"""Get column information for a table using INFORMATION_SCHEMA.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
driver: BigQuery driver instance
|
|
98
|
+
table: Table name to query columns for
|
|
99
|
+
schema: Schema name (dataset name in BigQuery)
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
List of column metadata dictionaries with keys:
|
|
103
|
+
- column_name: Name of the column
|
|
104
|
+
- data_type: BigQuery data type
|
|
105
|
+
- is_nullable: Whether column allows NULL (YES/NO)
|
|
106
|
+
- column_default: Default value if any
|
|
107
|
+
"""
|
|
108
|
+
bigquery_driver = cast("BigQueryDriver", driver)
|
|
109
|
+
|
|
110
|
+
if schema:
|
|
111
|
+
sql = f"""
|
|
112
|
+
SELECT column_name, data_type, is_nullable, column_default
|
|
113
|
+
FROM `{schema}.INFORMATION_SCHEMA.COLUMNS`
|
|
114
|
+
WHERE table_name = '{table}'
|
|
115
|
+
ORDER BY ordinal_position
|
|
116
|
+
"""
|
|
117
|
+
else:
|
|
118
|
+
sql = f"""
|
|
119
|
+
SELECT column_name, data_type, is_nullable, column_default
|
|
120
|
+
FROM INFORMATION_SCHEMA.COLUMNS
|
|
121
|
+
WHERE table_name = '{table}'
|
|
122
|
+
ORDER BY ordinal_position
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
result = bigquery_driver.execute(sql)
|
|
126
|
+
return result.data or []
|
|
127
|
+
|
|
128
|
+
def list_available_features(self) -> "list[str]":
|
|
129
|
+
"""List available BigQuery feature flags.
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
List of supported feature names
|
|
133
|
+
"""
|
|
134
|
+
return [
|
|
135
|
+
"supports_json",
|
|
136
|
+
"supports_arrays",
|
|
137
|
+
"supports_structs",
|
|
138
|
+
"supports_geography",
|
|
139
|
+
"supports_returning",
|
|
140
|
+
"supports_upsert",
|
|
141
|
+
"supports_window_functions",
|
|
142
|
+
"supports_cte",
|
|
143
|
+
"supports_transactions",
|
|
144
|
+
"supports_prepared_statements",
|
|
145
|
+
"supports_schemas",
|
|
146
|
+
"supports_partitioning",
|
|
147
|
+
"supports_clustering",
|
|
148
|
+
"supports_uuid",
|
|
149
|
+
]
|