dbconform 0.2.6__tar.gz → 0.2.7__tar.gz
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.
- {dbconform-0.2.6/src/dbconform.egg-info → dbconform-0.2.7}/PKG-INFO +1 -1
- {dbconform-0.2.6 → dbconform-0.2.7}/pyproject.toml +2 -2
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/sql_dialect/postgresql.py +26 -1
- {dbconform-0.2.6 → dbconform-0.2.7/src/dbconform.egg-info}/PKG-INFO +1 -1
- {dbconform-0.2.6 → dbconform-0.2.7}/LICENSE +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/README.md +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/setup.cfg +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/__init__.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/adapters/__init__.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/adapters/model_schema.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/adapters/sa_to_neutral.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/cli.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/compare/__init__.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/compare/db_schema.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/compare/diff.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/conform.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/errors.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/internal/__init__.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/internal/objects.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/internal/types.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/plan/__init__.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/plan/builder.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/plan/steps.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/schema/__init__.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/schema/db_schema.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/schema/diff.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/schema/model_schema.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/schema/objects.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/schema/sa_to_neutral.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/sql_dialect/__init__.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/sql_dialect/base.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/sql_dialect/sqlite.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform/sql_dialect/sqlite_rebuild.py +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform.egg-info/SOURCES.txt +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform.egg-info/dependency_links.txt +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform.egg-info/entry_points.txt +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform.egg-info/requires.txt +0 -0
- {dbconform-0.2.6 → dbconform-0.2.7}/src/dbconform.egg-info/top_level.txt +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dbconform"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.7"
|
|
8
8
|
description = "Synchronize database schema to models — document-driven project."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -62,7 +62,7 @@ where = ["src"]
|
|
|
62
62
|
dbconform = "dbconform.cli:main"
|
|
63
63
|
|
|
64
64
|
[tool.commitizen]
|
|
65
|
-
version = "0.2.
|
|
65
|
+
version = "0.2.7"
|
|
66
66
|
version_scheme = "semver"
|
|
67
67
|
commit = true
|
|
68
68
|
tag = true
|
|
@@ -221,6 +221,31 @@ class PostgreSQLDialect(Dialect):
|
|
|
221
221
|
tbl = self.qualified_table(table_name)
|
|
222
222
|
return f"CREATE {uniq}INDEX {self._quote(index.name)} ON {tbl} ({cols})"
|
|
223
223
|
|
|
224
|
+
def _normalize_default_expr(self, default_expr: str | None) -> str | None:
|
|
225
|
+
"""
|
|
226
|
+
Normalize reflected PostgreSQL default expressions for stable comparisons.
|
|
227
|
+
|
|
228
|
+
PostgreSQL reflection often returns typed literal defaults as casts, e.g.
|
|
229
|
+
``'1900-01-01'::date``. Model-side defaults from SQLModel/SQLAlchemy Python
|
|
230
|
+
values are represented as ``'1900-01-01'``. These are semantically equal and
|
|
231
|
+
should not trigger repeated ALTER DEFAULT steps on re-apply.
|
|
232
|
+
"""
|
|
233
|
+
if default_expr is None:
|
|
234
|
+
return None
|
|
235
|
+
expr = default_expr.strip()
|
|
236
|
+
while expr.startswith("(") and expr.endswith(")"):
|
|
237
|
+
expr = expr[1:-1].strip()
|
|
238
|
+
literal_cast = re.match(
|
|
239
|
+
r"^('(?:[^']|'')*')::(?:date|time(?:stamp)?(?:\s+with(?:out)?\s+time\s+zone)?)$",
|
|
240
|
+
expr,
|
|
241
|
+
re.IGNORECASE,
|
|
242
|
+
)
|
|
243
|
+
if literal_cast:
|
|
244
|
+
return literal_cast.group(1)
|
|
245
|
+
if re.match(r"^(true|false)$", expr, re.IGNORECASE):
|
|
246
|
+
return expr.upper()
|
|
247
|
+
return expr
|
|
248
|
+
|
|
224
249
|
def normalize_reflected_table(self, table_def: TableDef) -> TableDef:
|
|
225
250
|
"""
|
|
226
251
|
Normalize reflected table so it compares equal to model-side internal schema.
|
|
@@ -266,7 +291,7 @@ class PostgreSQLDialect(Dialect):
|
|
|
266
291
|
name=col.name,
|
|
267
292
|
data_type_name=neutral_type,
|
|
268
293
|
nullable=col.nullable,
|
|
269
|
-
default=col.default,
|
|
294
|
+
default=self._normalize_default_expr(col.default),
|
|
270
295
|
comment=col.comment,
|
|
271
296
|
autoincrement=False,
|
|
272
297
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|