summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r--lib/sqlalchemy/sql/base.py8
-rw-r--r--lib/sqlalchemy/sql/compiler.py3
-rw-r--r--lib/sqlalchemy/sql/elements.py3
-rw-r--r--lib/sqlalchemy/sql/expression.py1
-rw-r--r--lib/sqlalchemy/sql/naming.py2
-rw-r--r--lib/sqlalchemy/sql/schema.py27
-rw-r--r--lib/sqlalchemy/sql/sqltypes.py2
7 files changed, 30 insertions, 16 deletions
diff --git a/lib/sqlalchemy/sql/base.py b/lib/sqlalchemy/sql/base.py
index c81891169..fc80334e8 100644
--- a/lib/sqlalchemy/sql/base.py
+++ b/lib/sqlalchemy/sql/base.py
@@ -103,6 +103,14 @@ class _NoArg(Enum):
NO_ARG = _NoArg.NO_ARG
+
+class _NoneName(Enum):
+ NONE_NAME = 0
+ """indicate a 'deferred' name that was ultimately the value None."""
+
+
+_NONE_NAME = _NoneName.NONE_NAME
+
_T = TypeVar("_T", bound=Any)
_Fn = TypeVar("_Fn", bound=Callable[..., Any])
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
index 9e4422fbd..50cf9b477 100644
--- a/lib/sqlalchemy/sql/compiler.py
+++ b/lib/sqlalchemy/sql/compiler.py
@@ -67,6 +67,7 @@ from . import util as sql_util
from ._typing import is_column_element
from ._typing import is_dml
from .base import _from_objects
+from .base import _NONE_NAME
from .base import Executable
from .base import NO_ARG
from .elements import ClauseElement
@@ -6440,7 +6441,7 @@ class IdentifierPreparer:
def format_constraint(self, constraint, _alembic_quote=True):
naming = util.preloaded.sql_naming
- if constraint.name is elements._NONE_NAME:
+ if constraint.name is _NONE_NAME:
name = naming._constraint_name_for_table(
constraint, constraint.table
)
diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py
index 6a9bd74ca..eff8c9bc1 100644
--- a/lib/sqlalchemy/sql/elements.py
+++ b/lib/sqlalchemy/sql/elements.py
@@ -5112,9 +5112,6 @@ class conv(_truncated_label):
__slots__ = ()
-_NONE_NAME = util.symbol("NONE_NAME")
-"""indicate a 'deferred' name that was ultimately the value None."""
-
# for backwards compatibility in case
# someone is re-implementing the
# _truncated_identifier() sequence in a custom
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py
index 2498bfb37..a3fed1d56 100644
--- a/lib/sqlalchemy/sql/expression.py
+++ b/lib/sqlalchemy/sql/expression.py
@@ -136,6 +136,7 @@ from .selectable import (
from .selectable import Lateral as Lateral
from .selectable import ReturnsRows as ReturnsRows
from .selectable import ScalarSelect as ScalarSelect
+from .selectable import ScalarValues as ScalarValues
from .selectable import Select as Select
from .selectable import Selectable as Selectable
from .selectable import SelectBase as SelectBase
diff --git a/lib/sqlalchemy/sql/naming.py b/lib/sqlalchemy/sql/naming.py
index eaa5d8dd3..0fe149001 100644
--- a/lib/sqlalchemy/sql/naming.py
+++ b/lib/sqlalchemy/sql/naming.py
@@ -16,7 +16,7 @@ from __future__ import annotations
import re
from . import events # noqa
-from .elements import _NONE_NAME
+from .base import _NONE_NAME
from .elements import conv as conv
from .schema import CheckConstraint
from .schema import Column
diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py
index f1caf79be..2d04b28a8 100644
--- a/lib/sqlalchemy/sql/schema.py
+++ b/lib/sqlalchemy/sql/schema.py
@@ -58,6 +58,7 @@ from . import ddl
from . import roles
from . import type_api
from . import visitors
+from .base import _NoneName
from .base import DedupeColumnCollection
from .base import DialectKWArgs
from .base import Executable
@@ -111,6 +112,8 @@ _TAB = TypeVar("_TAB", bound="Table")
_CreateDropBind = Union["Engine", "Connection", "MockConnection"]
+_ConstraintNameArgument = Optional[Union[str, _NoneName]]
+
class SchemaConst(Enum):
@@ -1927,11 +1930,7 @@ class Column(DialectKWArgs, SchemaItem, ColumnClause[_T]):
self._proxies = _proxies
else:
# otherwise, add DDL-related events
- if isinstance(self.type, SchemaEventTarget):
- self.type._set_parent_with_dispatch(self)
- for impl in self.type._variant_mapping.values():
- if isinstance(impl, SchemaEventTarget):
- impl._set_parent_with_dispatch(self)
+ self._set_type(self.type)
if default is not None:
if not isinstance(default, (ColumnDefault, Sequence)):
@@ -2023,6 +2022,14 @@ class Column(DialectKWArgs, SchemaItem, ColumnClause[_T]):
identity: Optional[Identity]
+ def _set_type(self, type_: TypeEngine[Any]) -> None:
+ self.type = type_
+ if isinstance(self.type, SchemaEventTarget):
+ self.type._set_parent_with_dispatch(self)
+ for impl in self.type._variant_mapping.values():
+ if isinstance(impl, SchemaEventTarget):
+ impl._set_parent_with_dispatch(self)
+
@util.memoized_property
def _gen_static_annotations_cache_key(self) -> bool: # type: ignore
"""special attribute used by cache key gen, if true, we will
@@ -2480,7 +2487,7 @@ class ForeignKey(DialectKWArgs, SchemaItem):
column: _DDLColumnArgument,
_constraint: Optional[ForeignKeyConstraint] = None,
use_alter: bool = False,
- name: Optional[str] = None,
+ name: _ConstraintNameArgument = None,
onupdate: Optional[str] = None,
ondelete: Optional[str] = None,
deferrable: Optional[bool] = None,
@@ -3744,7 +3751,7 @@ class Constraint(DialectKWArgs, HasConditionalDDL, SchemaItem):
def __init__(
self,
- name: Optional[str] = None,
+ name: _ConstraintNameArgument = None,
deferrable: Optional[bool] = None,
initially: Optional[str] = None,
info: Optional[_InfoType] = None,
@@ -3987,7 +3994,7 @@ class ColumnCollectionConstraint(ColumnCollectionMixin, Constraint):
def __init__(
self,
*columns: _DDLColumnArgument,
- name: Optional[str] = None,
+ name: _ConstraintNameArgument = None,
deferrable: Optional[bool] = None,
initially: Optional[str] = None,
info: Optional[_InfoType] = None,
@@ -4123,7 +4130,7 @@ class CheckConstraint(ColumnCollectionConstraint):
def __init__(
self,
sqltext: _TextCoercedExpressionArgument[Any],
- name: Optional[str] = None,
+ name: _ConstraintNameArgument = None,
deferrable: Optional[bool] = None,
initially: Optional[str] = None,
table: Optional[Table] = None,
@@ -4238,7 +4245,7 @@ class ForeignKeyConstraint(ColumnCollectionConstraint):
self,
columns: _typing_Sequence[_DDLColumnArgument],
refcolumns: _typing_Sequence[_DDLColumnArgument],
- name: Optional[str] = None,
+ name: _ConstraintNameArgument = None,
onupdate: Optional[str] = None,
ondelete: Optional[str] = None,
deferrable: Optional[bool] = None,
diff --git a/lib/sqlalchemy/sql/sqltypes.py b/lib/sqlalchemy/sql/sqltypes.py
index 624b7d16e..a0f56d839 100644
--- a/lib/sqlalchemy/sql/sqltypes.py
+++ b/lib/sqlalchemy/sql/sqltypes.py
@@ -37,10 +37,10 @@ from . import elements
from . import operators
from . import roles
from . import type_api
+from .base import _NONE_NAME
from .base import NO_ARG
from .base import SchemaEventTarget
from .cache_key import HasCacheKey
-from .elements import _NONE_NAME
from .elements import quoted_name
from .elements import Slice
from .elements import TypeCoerce as type_coerce # noqa