SQLAlchemy 2.0.47__cp313-cp313t-win32.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.
- sqlalchemy/__init__.py +283 -0
- sqlalchemy/connectors/__init__.py +18 -0
- sqlalchemy/connectors/aioodbc.py +184 -0
- sqlalchemy/connectors/asyncio.py +429 -0
- sqlalchemy/connectors/pyodbc.py +250 -0
- sqlalchemy/cyextension/__init__.py +6 -0
- sqlalchemy/cyextension/collections.cp313t-win32.pyd +0 -0
- sqlalchemy/cyextension/collections.pyx +409 -0
- sqlalchemy/cyextension/immutabledict.cp313t-win32.pyd +0 -0
- sqlalchemy/cyextension/immutabledict.pxd +8 -0
- sqlalchemy/cyextension/immutabledict.pyx +133 -0
- sqlalchemy/cyextension/processors.cp313t-win32.pyd +0 -0
- sqlalchemy/cyextension/processors.pyx +68 -0
- sqlalchemy/cyextension/resultproxy.cp313t-win32.pyd +0 -0
- sqlalchemy/cyextension/resultproxy.pyx +102 -0
- sqlalchemy/cyextension/util.cp313t-win32.pyd +0 -0
- sqlalchemy/cyextension/util.pyx +90 -0
- sqlalchemy/dialects/__init__.py +62 -0
- sqlalchemy/dialects/_typing.py +30 -0
- sqlalchemy/dialects/mssql/__init__.py +88 -0
- sqlalchemy/dialects/mssql/aioodbc.py +63 -0
- sqlalchemy/dialects/mssql/base.py +4093 -0
- sqlalchemy/dialects/mssql/information_schema.py +285 -0
- sqlalchemy/dialects/mssql/json.py +129 -0
- sqlalchemy/dialects/mssql/provision.py +185 -0
- sqlalchemy/dialects/mssql/pymssql.py +126 -0
- sqlalchemy/dialects/mssql/pyodbc.py +760 -0
- sqlalchemy/dialects/mysql/__init__.py +104 -0
- sqlalchemy/dialects/mysql/aiomysql.py +250 -0
- sqlalchemy/dialects/mysql/asyncmy.py +231 -0
- sqlalchemy/dialects/mysql/base.py +3949 -0
- sqlalchemy/dialects/mysql/cymysql.py +106 -0
- sqlalchemy/dialects/mysql/dml.py +225 -0
- sqlalchemy/dialects/mysql/enumerated.py +282 -0
- sqlalchemy/dialects/mysql/expression.py +146 -0
- sqlalchemy/dialects/mysql/json.py +91 -0
- sqlalchemy/dialects/mysql/mariadb.py +72 -0
- sqlalchemy/dialects/mysql/mariadbconnector.py +322 -0
- sqlalchemy/dialects/mysql/mysqlconnector.py +302 -0
- sqlalchemy/dialects/mysql/mysqldb.py +314 -0
- sqlalchemy/dialects/mysql/provision.py +153 -0
- sqlalchemy/dialects/mysql/pymysql.py +158 -0
- sqlalchemy/dialects/mysql/pyodbc.py +157 -0
- sqlalchemy/dialects/mysql/reflection.py +727 -0
- sqlalchemy/dialects/mysql/reserved_words.py +570 -0
- sqlalchemy/dialects/mysql/types.py +835 -0
- sqlalchemy/dialects/oracle/__init__.py +81 -0
- sqlalchemy/dialects/oracle/base.py +3802 -0
- sqlalchemy/dialects/oracle/cx_oracle.py +1555 -0
- sqlalchemy/dialects/oracle/dictionary.py +507 -0
- sqlalchemy/dialects/oracle/oracledb.py +941 -0
- sqlalchemy/dialects/oracle/provision.py +297 -0
- sqlalchemy/dialects/oracle/types.py +316 -0
- sqlalchemy/dialects/oracle/vector.py +365 -0
- sqlalchemy/dialects/postgresql/__init__.py +167 -0
- sqlalchemy/dialects/postgresql/_psycopg_common.py +189 -0
- sqlalchemy/dialects/postgresql/array.py +519 -0
- sqlalchemy/dialects/postgresql/asyncpg.py +1284 -0
- sqlalchemy/dialects/postgresql/base.py +5378 -0
- sqlalchemy/dialects/postgresql/dml.py +339 -0
- sqlalchemy/dialects/postgresql/ext.py +540 -0
- sqlalchemy/dialects/postgresql/hstore.py +406 -0
- sqlalchemy/dialects/postgresql/json.py +404 -0
- sqlalchemy/dialects/postgresql/named_types.py +524 -0
- sqlalchemy/dialects/postgresql/operators.py +129 -0
- sqlalchemy/dialects/postgresql/pg8000.py +669 -0
- sqlalchemy/dialects/postgresql/pg_catalog.py +326 -0
- sqlalchemy/dialects/postgresql/provision.py +183 -0
- sqlalchemy/dialects/postgresql/psycopg.py +862 -0
- sqlalchemy/dialects/postgresql/psycopg2.py +892 -0
- sqlalchemy/dialects/postgresql/psycopg2cffi.py +61 -0
- sqlalchemy/dialects/postgresql/ranges.py +1031 -0
- sqlalchemy/dialects/postgresql/types.py +313 -0
- sqlalchemy/dialects/sqlite/__init__.py +57 -0
- sqlalchemy/dialects/sqlite/aiosqlite.py +482 -0
- sqlalchemy/dialects/sqlite/base.py +3056 -0
- sqlalchemy/dialects/sqlite/dml.py +263 -0
- sqlalchemy/dialects/sqlite/json.py +92 -0
- sqlalchemy/dialects/sqlite/provision.py +229 -0
- sqlalchemy/dialects/sqlite/pysqlcipher.py +157 -0
- sqlalchemy/dialects/sqlite/pysqlite.py +756 -0
- sqlalchemy/dialects/type_migration_guidelines.txt +145 -0
- sqlalchemy/engine/__init__.py +62 -0
- sqlalchemy/engine/_py_processors.py +136 -0
- sqlalchemy/engine/_py_row.py +128 -0
- sqlalchemy/engine/_py_util.py +74 -0
- sqlalchemy/engine/base.py +3390 -0
- sqlalchemy/engine/characteristics.py +155 -0
- sqlalchemy/engine/create.py +893 -0
- sqlalchemy/engine/cursor.py +2298 -0
- sqlalchemy/engine/default.py +2394 -0
- sqlalchemy/engine/events.py +965 -0
- sqlalchemy/engine/interfaces.py +3471 -0
- sqlalchemy/engine/mock.py +134 -0
- sqlalchemy/engine/processors.py +61 -0
- sqlalchemy/engine/reflection.py +2102 -0
- sqlalchemy/engine/result.py +2399 -0
- sqlalchemy/engine/row.py +400 -0
- sqlalchemy/engine/strategies.py +16 -0
- sqlalchemy/engine/url.py +924 -0
- sqlalchemy/engine/util.py +167 -0
- sqlalchemy/event/__init__.py +26 -0
- sqlalchemy/event/api.py +220 -0
- sqlalchemy/event/attr.py +676 -0
- sqlalchemy/event/base.py +472 -0
- sqlalchemy/event/legacy.py +258 -0
- sqlalchemy/event/registry.py +390 -0
- sqlalchemy/events.py +17 -0
- sqlalchemy/exc.py +832 -0
- sqlalchemy/ext/__init__.py +11 -0
- sqlalchemy/ext/associationproxy.py +2027 -0
- sqlalchemy/ext/asyncio/__init__.py +25 -0
- sqlalchemy/ext/asyncio/base.py +281 -0
- sqlalchemy/ext/asyncio/engine.py +1471 -0
- sqlalchemy/ext/asyncio/exc.py +21 -0
- sqlalchemy/ext/asyncio/result.py +965 -0
- sqlalchemy/ext/asyncio/scoping.py +1599 -0
- sqlalchemy/ext/asyncio/session.py +1947 -0
- sqlalchemy/ext/automap.py +1701 -0
- sqlalchemy/ext/baked.py +570 -0
- sqlalchemy/ext/compiler.py +600 -0
- sqlalchemy/ext/declarative/__init__.py +65 -0
- sqlalchemy/ext/declarative/extensions.py +564 -0
- sqlalchemy/ext/horizontal_shard.py +478 -0
- sqlalchemy/ext/hybrid.py +1535 -0
- sqlalchemy/ext/indexable.py +364 -0
- sqlalchemy/ext/instrumentation.py +450 -0
- sqlalchemy/ext/mutable.py +1085 -0
- sqlalchemy/ext/mypy/__init__.py +6 -0
- sqlalchemy/ext/mypy/apply.py +324 -0
- sqlalchemy/ext/mypy/decl_class.py +515 -0
- sqlalchemy/ext/mypy/infer.py +590 -0
- sqlalchemy/ext/mypy/names.py +335 -0
- sqlalchemy/ext/mypy/plugin.py +303 -0
- sqlalchemy/ext/mypy/util.py +357 -0
- sqlalchemy/ext/orderinglist.py +439 -0
- sqlalchemy/ext/serializer.py +185 -0
- sqlalchemy/future/__init__.py +16 -0
- sqlalchemy/future/engine.py +15 -0
- sqlalchemy/inspection.py +174 -0
- sqlalchemy/log.py +288 -0
- sqlalchemy/orm/__init__.py +171 -0
- sqlalchemy/orm/_orm_constructors.py +2661 -0
- sqlalchemy/orm/_typing.py +179 -0
- sqlalchemy/orm/attributes.py +2845 -0
- sqlalchemy/orm/base.py +971 -0
- sqlalchemy/orm/bulk_persistence.py +2135 -0
- sqlalchemy/orm/clsregistry.py +571 -0
- sqlalchemy/orm/collections.py +1627 -0
- sqlalchemy/orm/context.py +3334 -0
- sqlalchemy/orm/decl_api.py +2004 -0
- sqlalchemy/orm/decl_base.py +2192 -0
- sqlalchemy/orm/dependency.py +1302 -0
- sqlalchemy/orm/descriptor_props.py +1092 -0
- sqlalchemy/orm/dynamic.py +300 -0
- sqlalchemy/orm/evaluator.py +379 -0
- sqlalchemy/orm/events.py +3252 -0
- sqlalchemy/orm/exc.py +237 -0
- sqlalchemy/orm/identity.py +302 -0
- sqlalchemy/orm/instrumentation.py +754 -0
- sqlalchemy/orm/interfaces.py +1496 -0
- sqlalchemy/orm/loading.py +1686 -0
- sqlalchemy/orm/mapped_collection.py +557 -0
- sqlalchemy/orm/mapper.py +4444 -0
- sqlalchemy/orm/path_registry.py +809 -0
- sqlalchemy/orm/persistence.py +1788 -0
- sqlalchemy/orm/properties.py +935 -0
- sqlalchemy/orm/query.py +3459 -0
- sqlalchemy/orm/relationships.py +3508 -0
- sqlalchemy/orm/scoping.py +2148 -0
- sqlalchemy/orm/session.py +5280 -0
- sqlalchemy/orm/state.py +1168 -0
- sqlalchemy/orm/state_changes.py +196 -0
- sqlalchemy/orm/strategies.py +3470 -0
- sqlalchemy/orm/strategy_options.py +2568 -0
- sqlalchemy/orm/sync.py +164 -0
- sqlalchemy/orm/unitofwork.py +796 -0
- sqlalchemy/orm/util.py +2403 -0
- sqlalchemy/orm/writeonly.py +674 -0
- sqlalchemy/pool/__init__.py +44 -0
- sqlalchemy/pool/base.py +1524 -0
- sqlalchemy/pool/events.py +375 -0
- sqlalchemy/pool/impl.py +588 -0
- sqlalchemy/py.typed +0 -0
- sqlalchemy/schema.py +69 -0
- sqlalchemy/sql/__init__.py +145 -0
- sqlalchemy/sql/_dml_constructors.py +132 -0
- sqlalchemy/sql/_elements_constructors.py +1872 -0
- sqlalchemy/sql/_orm_types.py +20 -0
- sqlalchemy/sql/_py_util.py +75 -0
- sqlalchemy/sql/_selectable_constructors.py +763 -0
- sqlalchemy/sql/_typing.py +482 -0
- sqlalchemy/sql/annotation.py +587 -0
- sqlalchemy/sql/base.py +2293 -0
- sqlalchemy/sql/cache_key.py +1057 -0
- sqlalchemy/sql/coercions.py +1404 -0
- sqlalchemy/sql/compiler.py +8081 -0
- sqlalchemy/sql/crud.py +1752 -0
- sqlalchemy/sql/ddl.py +1444 -0
- sqlalchemy/sql/default_comparator.py +551 -0
- sqlalchemy/sql/dml.py +1850 -0
- sqlalchemy/sql/elements.py +5589 -0
- sqlalchemy/sql/events.py +458 -0
- sqlalchemy/sql/expression.py +159 -0
- sqlalchemy/sql/functions.py +2158 -0
- sqlalchemy/sql/lambdas.py +1442 -0
- sqlalchemy/sql/naming.py +209 -0
- sqlalchemy/sql/operators.py +2623 -0
- sqlalchemy/sql/roles.py +323 -0
- sqlalchemy/sql/schema.py +6222 -0
- sqlalchemy/sql/selectable.py +7265 -0
- sqlalchemy/sql/sqltypes.py +3930 -0
- sqlalchemy/sql/traversals.py +1024 -0
- sqlalchemy/sql/type_api.py +2368 -0
- sqlalchemy/sql/util.py +1485 -0
- sqlalchemy/sql/visitors.py +1164 -0
- sqlalchemy/testing/__init__.py +96 -0
- sqlalchemy/testing/assertions.py +994 -0
- sqlalchemy/testing/assertsql.py +520 -0
- sqlalchemy/testing/asyncio.py +135 -0
- sqlalchemy/testing/config.py +434 -0
- sqlalchemy/testing/engines.py +483 -0
- sqlalchemy/testing/entities.py +117 -0
- sqlalchemy/testing/exclusions.py +476 -0
- sqlalchemy/testing/fixtures/__init__.py +28 -0
- sqlalchemy/testing/fixtures/base.py +384 -0
- sqlalchemy/testing/fixtures/mypy.py +332 -0
- sqlalchemy/testing/fixtures/orm.py +227 -0
- sqlalchemy/testing/fixtures/sql.py +482 -0
- sqlalchemy/testing/pickleable.py +155 -0
- sqlalchemy/testing/plugin/__init__.py +6 -0
- sqlalchemy/testing/plugin/bootstrap.py +51 -0
- sqlalchemy/testing/plugin/plugin_base.py +828 -0
- sqlalchemy/testing/plugin/pytestplugin.py +892 -0
- sqlalchemy/testing/profiling.py +329 -0
- sqlalchemy/testing/provision.py +603 -0
- sqlalchemy/testing/requirements.py +1945 -0
- sqlalchemy/testing/schema.py +198 -0
- sqlalchemy/testing/suite/__init__.py +19 -0
- sqlalchemy/testing/suite/test_cte.py +237 -0
- sqlalchemy/testing/suite/test_ddl.py +389 -0
- sqlalchemy/testing/suite/test_deprecations.py +153 -0
- sqlalchemy/testing/suite/test_dialect.py +776 -0
- sqlalchemy/testing/suite/test_insert.py +630 -0
- sqlalchemy/testing/suite/test_reflection.py +3557 -0
- sqlalchemy/testing/suite/test_results.py +504 -0
- sqlalchemy/testing/suite/test_rowcount.py +258 -0
- sqlalchemy/testing/suite/test_select.py +2010 -0
- sqlalchemy/testing/suite/test_sequence.py +317 -0
- sqlalchemy/testing/suite/test_types.py +2147 -0
- sqlalchemy/testing/suite/test_unicode_ddl.py +189 -0
- sqlalchemy/testing/suite/test_update_delete.py +139 -0
- sqlalchemy/testing/util.py +535 -0
- sqlalchemy/testing/warnings.py +52 -0
- sqlalchemy/types.py +74 -0
- sqlalchemy/util/__init__.py +162 -0
- sqlalchemy/util/_collections.py +712 -0
- sqlalchemy/util/_concurrency_py3k.py +288 -0
- sqlalchemy/util/_has_cy.py +40 -0
- sqlalchemy/util/_py_collections.py +541 -0
- sqlalchemy/util/compat.py +421 -0
- sqlalchemy/util/concurrency.py +110 -0
- sqlalchemy/util/deprecations.py +401 -0
- sqlalchemy/util/langhelpers.py +2203 -0
- sqlalchemy/util/preloaded.py +150 -0
- sqlalchemy/util/queue.py +322 -0
- sqlalchemy/util/tool_support.py +201 -0
- sqlalchemy/util/topological.py +120 -0
- sqlalchemy/util/typing.py +734 -0
- sqlalchemy-2.0.47.dist-info/METADATA +243 -0
- sqlalchemy-2.0.47.dist-info/RECORD +274 -0
- sqlalchemy-2.0.47.dist-info/WHEEL +5 -0
- sqlalchemy-2.0.47.dist-info/licenses/LICENSE +19 -0
- sqlalchemy-2.0.47.dist-info/top_level.txt +1 -0
sqlalchemy/sql/events.py
ADDED
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
# sql/events.py
|
|
2
|
+
# Copyright (C) 2005-2026 the SQLAlchemy authors and contributors
|
|
3
|
+
# <see AUTHORS file>
|
|
4
|
+
#
|
|
5
|
+
# This module is part of SQLAlchemy and is released under
|
|
6
|
+
# the MIT License: https://www.opensource.org/licenses/mit-license.php
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Any
|
|
11
|
+
from typing import TYPE_CHECKING
|
|
12
|
+
|
|
13
|
+
from .base import SchemaEventTarget
|
|
14
|
+
from .. import event
|
|
15
|
+
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from .schema import Column
|
|
18
|
+
from .schema import Constraint
|
|
19
|
+
from .schema import SchemaItem
|
|
20
|
+
from .schema import Table
|
|
21
|
+
from ..engine.base import Connection
|
|
22
|
+
from ..engine.interfaces import ReflectedColumn
|
|
23
|
+
from ..engine.reflection import Inspector
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class DDLEvents(event.Events[SchemaEventTarget]):
|
|
27
|
+
"""
|
|
28
|
+
Define event listeners for schema objects,
|
|
29
|
+
that is, :class:`.SchemaItem` and other :class:`.SchemaEventTarget`
|
|
30
|
+
subclasses, including :class:`_schema.MetaData`, :class:`_schema.Table`,
|
|
31
|
+
:class:`_schema.Column`, etc.
|
|
32
|
+
|
|
33
|
+
**Create / Drop Events**
|
|
34
|
+
|
|
35
|
+
Events emitted when CREATE and DROP commands are emitted to the database.
|
|
36
|
+
The event hooks in this category include :meth:`.DDLEvents.before_create`,
|
|
37
|
+
:meth:`.DDLEvents.after_create`, :meth:`.DDLEvents.before_drop`, and
|
|
38
|
+
:meth:`.DDLEvents.after_drop`.
|
|
39
|
+
|
|
40
|
+
These events are emitted when using schema-level methods such as
|
|
41
|
+
:meth:`.MetaData.create_all` and :meth:`.MetaData.drop_all`. Per-object
|
|
42
|
+
create/drop methods such as :meth:`.Table.create`, :meth:`.Table.drop`,
|
|
43
|
+
:meth:`.Index.create` are also included, as well as dialect-specific
|
|
44
|
+
methods such as :meth:`_postgresql.ENUM.create`.
|
|
45
|
+
|
|
46
|
+
.. versionadded:: 2.0 :class:`.DDLEvents` event hooks now take place
|
|
47
|
+
for non-table objects including constraints, indexes, and
|
|
48
|
+
dialect-specific schema types.
|
|
49
|
+
|
|
50
|
+
Event hooks may be attached directly to a :class:`_schema.Table` object or
|
|
51
|
+
to a :class:`_schema.MetaData` collection, as well as to any
|
|
52
|
+
:class:`.SchemaItem` class or object that can be individually created and
|
|
53
|
+
dropped using a distinct SQL command. Such classes include :class:`.Index`,
|
|
54
|
+
:class:`.Sequence`, and dialect-specific classes such as
|
|
55
|
+
:class:`_postgresql.ENUM`.
|
|
56
|
+
|
|
57
|
+
Example using the :meth:`.DDLEvents.after_create` event, where a custom
|
|
58
|
+
event hook will emit an ``ALTER TABLE`` command on the current connection,
|
|
59
|
+
after ``CREATE TABLE`` is emitted::
|
|
60
|
+
|
|
61
|
+
from sqlalchemy import create_engine
|
|
62
|
+
from sqlalchemy import event
|
|
63
|
+
from sqlalchemy import Table, Column, Metadata, Integer
|
|
64
|
+
|
|
65
|
+
m = MetaData()
|
|
66
|
+
some_table = Table("some_table", m, Column("data", Integer))
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@event.listens_for(some_table, "after_create")
|
|
70
|
+
def after_create(target, connection, **kw):
|
|
71
|
+
connection.execute(
|
|
72
|
+
text("ALTER TABLE %s SET name=foo_%s" % (target.name, target.name))
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
some_engine = create_engine("postgresql://scott:tiger@host/test")
|
|
77
|
+
|
|
78
|
+
# will emit "CREATE TABLE some_table" as well as the above
|
|
79
|
+
# "ALTER TABLE" statement afterwards
|
|
80
|
+
m.create_all(some_engine)
|
|
81
|
+
|
|
82
|
+
Constraint objects such as :class:`.ForeignKeyConstraint`,
|
|
83
|
+
:class:`.UniqueConstraint`, :class:`.CheckConstraint` may also be
|
|
84
|
+
subscribed to these events, however they will **not** normally produce
|
|
85
|
+
events as these objects are usually rendered inline within an
|
|
86
|
+
enclosing ``CREATE TABLE`` statement and implicitly dropped from a
|
|
87
|
+
``DROP TABLE`` statement.
|
|
88
|
+
|
|
89
|
+
For the :class:`.Index` construct, the event hook will be emitted
|
|
90
|
+
for ``CREATE INDEX``, however SQLAlchemy does not normally emit
|
|
91
|
+
``DROP INDEX`` when dropping tables as this is again implicit within the
|
|
92
|
+
``DROP TABLE`` statement.
|
|
93
|
+
|
|
94
|
+
.. versionadded:: 2.0 Support for :class:`.SchemaItem` objects
|
|
95
|
+
for create/drop events was expanded from its previous support for
|
|
96
|
+
:class:`.MetaData` and :class:`.Table` to also include
|
|
97
|
+
:class:`.Constraint` and all subclasses, :class:`.Index`,
|
|
98
|
+
:class:`.Sequence` and some type-related constructs such as
|
|
99
|
+
:class:`_postgresql.ENUM`.
|
|
100
|
+
|
|
101
|
+
.. note:: These event hooks are only emitted within the scope of
|
|
102
|
+
SQLAlchemy's create/drop methods; they are not necessarily supported
|
|
103
|
+
by tools such as `alembic <https://alembic.sqlalchemy.org>`_.
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
**Attachment Events**
|
|
107
|
+
|
|
108
|
+
Attachment events are provided to customize
|
|
109
|
+
behavior whenever a child schema element is associated
|
|
110
|
+
with a parent, such as when a :class:`_schema.Column` is associated
|
|
111
|
+
with its :class:`_schema.Table`, when a
|
|
112
|
+
:class:`_schema.ForeignKeyConstraint`
|
|
113
|
+
is associated with a :class:`_schema.Table`, etc. These events include
|
|
114
|
+
:meth:`.DDLEvents.before_parent_attach` and
|
|
115
|
+
:meth:`.DDLEvents.after_parent_attach`.
|
|
116
|
+
|
|
117
|
+
**Reflection Events**
|
|
118
|
+
|
|
119
|
+
The :meth:`.DDLEvents.column_reflect` event is used to intercept
|
|
120
|
+
and modify the in-Python definition of database columns when
|
|
121
|
+
:term:`reflection` of database tables proceeds.
|
|
122
|
+
|
|
123
|
+
**Use with Generic DDL**
|
|
124
|
+
|
|
125
|
+
DDL events integrate closely with the
|
|
126
|
+
:class:`.DDL` class and the :class:`.ExecutableDDLElement` hierarchy
|
|
127
|
+
of DDL clause constructs, which are themselves appropriate
|
|
128
|
+
as listener callables::
|
|
129
|
+
|
|
130
|
+
from sqlalchemy import DDL
|
|
131
|
+
|
|
132
|
+
event.listen(
|
|
133
|
+
some_table,
|
|
134
|
+
"after_create",
|
|
135
|
+
DDL("ALTER TABLE %(table)s SET name=foo_%(table)s"),
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
**Event Propagation to MetaData Copies**
|
|
139
|
+
|
|
140
|
+
For all :class:`.DDLEvent` events, the ``propagate=True`` keyword argument
|
|
141
|
+
will ensure that a given event handler is propagated to copies of the
|
|
142
|
+
object, which are made when using the :meth:`_schema.Table.to_metadata`
|
|
143
|
+
method::
|
|
144
|
+
|
|
145
|
+
from sqlalchemy import DDL
|
|
146
|
+
|
|
147
|
+
metadata = MetaData()
|
|
148
|
+
some_table = Table("some_table", metadata, Column("data", Integer))
|
|
149
|
+
|
|
150
|
+
event.listen(
|
|
151
|
+
some_table,
|
|
152
|
+
"after_create",
|
|
153
|
+
DDL("ALTER TABLE %(table)s SET name=foo_%(table)s"),
|
|
154
|
+
propagate=True,
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
new_metadata = MetaData()
|
|
158
|
+
new_table = some_table.to_metadata(new_metadata)
|
|
159
|
+
|
|
160
|
+
The above :class:`.DDL` object will be associated with the
|
|
161
|
+
:meth:`.DDLEvents.after_create` event for both the ``some_table`` and
|
|
162
|
+
the ``new_table`` :class:`.Table` objects.
|
|
163
|
+
|
|
164
|
+
.. seealso::
|
|
165
|
+
|
|
166
|
+
:ref:`event_toplevel`
|
|
167
|
+
|
|
168
|
+
:class:`.ExecutableDDLElement`
|
|
169
|
+
|
|
170
|
+
:class:`.DDL`
|
|
171
|
+
|
|
172
|
+
:ref:`schema_ddl_sequences`
|
|
173
|
+
|
|
174
|
+
""" # noqa: E501
|
|
175
|
+
|
|
176
|
+
_target_class_doc = "SomeSchemaClassOrObject"
|
|
177
|
+
_dispatch_target = SchemaEventTarget
|
|
178
|
+
|
|
179
|
+
def before_create(
|
|
180
|
+
self, target: SchemaEventTarget, connection: Connection, **kw: Any
|
|
181
|
+
) -> None:
|
|
182
|
+
r"""Called before CREATE statements are emitted.
|
|
183
|
+
|
|
184
|
+
:param target: the :class:`.SchemaObject`, such as a
|
|
185
|
+
:class:`_schema.MetaData` or :class:`_schema.Table`
|
|
186
|
+
but also including all create/drop objects such as
|
|
187
|
+
:class:`.Index`, :class:`.Sequence`, etc.,
|
|
188
|
+
object which is the target of the event.
|
|
189
|
+
|
|
190
|
+
.. versionadded:: 2.0 Support for all :class:`.SchemaItem` objects
|
|
191
|
+
was added.
|
|
192
|
+
|
|
193
|
+
:param connection: the :class:`_engine.Connection` where the
|
|
194
|
+
CREATE statement or statements will be emitted.
|
|
195
|
+
:param \**kw: additional keyword arguments relevant
|
|
196
|
+
to the event. The contents of this dictionary
|
|
197
|
+
may vary across releases, and include the
|
|
198
|
+
list of tables being generated for a metadata-level
|
|
199
|
+
event, the checkfirst flag, and other
|
|
200
|
+
elements used by internal events.
|
|
201
|
+
|
|
202
|
+
:func:`.event.listen` accepts the ``propagate=True``
|
|
203
|
+
modifier for this event; when True, the listener function will
|
|
204
|
+
be established for any copies made of the target object,
|
|
205
|
+
i.e. those copies that are generated when
|
|
206
|
+
:meth:`_schema.Table.to_metadata` is used.
|
|
207
|
+
|
|
208
|
+
:func:`.event.listen` accepts the ``insert=True``
|
|
209
|
+
modifier for this event; when True, the listener function will
|
|
210
|
+
be prepended to the internal list of events upon discovery, and execute
|
|
211
|
+
before registered listener functions that do not pass this argument.
|
|
212
|
+
|
|
213
|
+
"""
|
|
214
|
+
|
|
215
|
+
def after_create(
|
|
216
|
+
self, target: SchemaEventTarget, connection: Connection, **kw: Any
|
|
217
|
+
) -> None:
|
|
218
|
+
r"""Called after CREATE statements are emitted.
|
|
219
|
+
|
|
220
|
+
:param target: the :class:`.SchemaObject`, such as a
|
|
221
|
+
:class:`_schema.MetaData` or :class:`_schema.Table`
|
|
222
|
+
but also including all create/drop objects such as
|
|
223
|
+
:class:`.Index`, :class:`.Sequence`, etc.,
|
|
224
|
+
object which is the target of the event.
|
|
225
|
+
|
|
226
|
+
.. versionadded:: 2.0 Support for all :class:`.SchemaItem` objects
|
|
227
|
+
was added.
|
|
228
|
+
|
|
229
|
+
:param connection: the :class:`_engine.Connection` where the
|
|
230
|
+
CREATE statement or statements have been emitted.
|
|
231
|
+
:param \**kw: additional keyword arguments relevant
|
|
232
|
+
to the event. The contents of this dictionary
|
|
233
|
+
may vary across releases, and include the
|
|
234
|
+
list of tables being generated for a metadata-level
|
|
235
|
+
event, the checkfirst flag, and other
|
|
236
|
+
elements used by internal events.
|
|
237
|
+
|
|
238
|
+
:func:`.event.listen` also accepts the ``propagate=True``
|
|
239
|
+
modifier for this event; when True, the listener function will
|
|
240
|
+
be established for any copies made of the target object,
|
|
241
|
+
i.e. those copies that are generated when
|
|
242
|
+
:meth:`_schema.Table.to_metadata` is used.
|
|
243
|
+
|
|
244
|
+
"""
|
|
245
|
+
|
|
246
|
+
def before_drop(
|
|
247
|
+
self, target: SchemaEventTarget, connection: Connection, **kw: Any
|
|
248
|
+
) -> None:
|
|
249
|
+
r"""Called before DROP statements are emitted.
|
|
250
|
+
|
|
251
|
+
:param target: the :class:`.SchemaObject`, such as a
|
|
252
|
+
:class:`_schema.MetaData` or :class:`_schema.Table`
|
|
253
|
+
but also including all create/drop objects such as
|
|
254
|
+
:class:`.Index`, :class:`.Sequence`, etc.,
|
|
255
|
+
object which is the target of the event.
|
|
256
|
+
|
|
257
|
+
.. versionadded:: 2.0 Support for all :class:`.SchemaItem` objects
|
|
258
|
+
was added.
|
|
259
|
+
|
|
260
|
+
:param connection: the :class:`_engine.Connection` where the
|
|
261
|
+
DROP statement or statements will be emitted.
|
|
262
|
+
:param \**kw: additional keyword arguments relevant
|
|
263
|
+
to the event. The contents of this dictionary
|
|
264
|
+
may vary across releases, and include the
|
|
265
|
+
list of tables being generated for a metadata-level
|
|
266
|
+
event, the checkfirst flag, and other
|
|
267
|
+
elements used by internal events.
|
|
268
|
+
|
|
269
|
+
:func:`.event.listen` also accepts the ``propagate=True``
|
|
270
|
+
modifier for this event; when True, the listener function will
|
|
271
|
+
be established for any copies made of the target object,
|
|
272
|
+
i.e. those copies that are generated when
|
|
273
|
+
:meth:`_schema.Table.to_metadata` is used.
|
|
274
|
+
|
|
275
|
+
"""
|
|
276
|
+
|
|
277
|
+
def after_drop(
|
|
278
|
+
self, target: SchemaEventTarget, connection: Connection, **kw: Any
|
|
279
|
+
) -> None:
|
|
280
|
+
r"""Called after DROP statements are emitted.
|
|
281
|
+
|
|
282
|
+
:param target: the :class:`.SchemaObject`, such as a
|
|
283
|
+
:class:`_schema.MetaData` or :class:`_schema.Table`
|
|
284
|
+
but also including all create/drop objects such as
|
|
285
|
+
:class:`.Index`, :class:`.Sequence`, etc.,
|
|
286
|
+
object which is the target of the event.
|
|
287
|
+
|
|
288
|
+
.. versionadded:: 2.0 Support for all :class:`.SchemaItem` objects
|
|
289
|
+
was added.
|
|
290
|
+
|
|
291
|
+
:param connection: the :class:`_engine.Connection` where the
|
|
292
|
+
DROP statement or statements have been emitted.
|
|
293
|
+
:param \**kw: additional keyword arguments relevant
|
|
294
|
+
to the event. The contents of this dictionary
|
|
295
|
+
may vary across releases, and include the
|
|
296
|
+
list of tables being generated for a metadata-level
|
|
297
|
+
event, the checkfirst flag, and other
|
|
298
|
+
elements used by internal events.
|
|
299
|
+
|
|
300
|
+
:func:`.event.listen` also accepts the ``propagate=True``
|
|
301
|
+
modifier for this event; when True, the listener function will
|
|
302
|
+
be established for any copies made of the target object,
|
|
303
|
+
i.e. those copies that are generated when
|
|
304
|
+
:meth:`_schema.Table.to_metadata` is used.
|
|
305
|
+
|
|
306
|
+
"""
|
|
307
|
+
|
|
308
|
+
def before_parent_attach(
|
|
309
|
+
self, target: SchemaEventTarget, parent: SchemaItem
|
|
310
|
+
) -> None:
|
|
311
|
+
"""Called before a :class:`.SchemaItem` is associated with
|
|
312
|
+
a parent :class:`.SchemaItem`.
|
|
313
|
+
|
|
314
|
+
:param target: the target object
|
|
315
|
+
:param parent: the parent to which the target is being attached.
|
|
316
|
+
|
|
317
|
+
:func:`.event.listen` also accepts the ``propagate=True``
|
|
318
|
+
modifier for this event; when True, the listener function will
|
|
319
|
+
be established for any copies made of the target object,
|
|
320
|
+
i.e. those copies that are generated when
|
|
321
|
+
:meth:`_schema.Table.to_metadata` is used.
|
|
322
|
+
|
|
323
|
+
"""
|
|
324
|
+
|
|
325
|
+
def after_parent_attach(
|
|
326
|
+
self, target: SchemaEventTarget, parent: SchemaItem
|
|
327
|
+
) -> None:
|
|
328
|
+
"""Called after a :class:`.SchemaItem` is associated with
|
|
329
|
+
a parent :class:`.SchemaItem`.
|
|
330
|
+
|
|
331
|
+
:param target: the target object
|
|
332
|
+
:param parent: the parent to which the target is being attached.
|
|
333
|
+
|
|
334
|
+
:func:`.event.listen` also accepts the ``propagate=True``
|
|
335
|
+
modifier for this event; when True, the listener function will
|
|
336
|
+
be established for any copies made of the target object,
|
|
337
|
+
i.e. those copies that are generated when
|
|
338
|
+
:meth:`_schema.Table.to_metadata` is used.
|
|
339
|
+
|
|
340
|
+
"""
|
|
341
|
+
|
|
342
|
+
def _sa_event_column_added_to_pk_constraint(
|
|
343
|
+
self, const: Constraint, col: Column[Any]
|
|
344
|
+
) -> None:
|
|
345
|
+
"""internal event hook used for primary key naming convention
|
|
346
|
+
updates.
|
|
347
|
+
|
|
348
|
+
"""
|
|
349
|
+
|
|
350
|
+
def column_reflect(
|
|
351
|
+
self, inspector: Inspector, table: Table, column_info: ReflectedColumn
|
|
352
|
+
) -> None:
|
|
353
|
+
"""Called for each unit of 'column info' retrieved when
|
|
354
|
+
a :class:`_schema.Table` is being reflected.
|
|
355
|
+
|
|
356
|
+
This event is most easily used by applying it to a specific
|
|
357
|
+
:class:`_schema.MetaData` instance, where it will take effect for
|
|
358
|
+
all :class:`_schema.Table` objects within that
|
|
359
|
+
:class:`_schema.MetaData` that undergo reflection::
|
|
360
|
+
|
|
361
|
+
metadata = MetaData()
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
@event.listens_for(metadata, "column_reflect")
|
|
365
|
+
def receive_column_reflect(inspector, table, column_info):
|
|
366
|
+
# receives for all Table objects that are reflected
|
|
367
|
+
# under this MetaData
|
|
368
|
+
...
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
# will use the above event hook
|
|
372
|
+
my_table = Table("my_table", metadata, autoload_with=some_engine)
|
|
373
|
+
|
|
374
|
+
.. versionadded:: 1.4.0b2 The :meth:`_events.DDLEvents.column_reflect`
|
|
375
|
+
hook may now be applied to a :class:`_schema.MetaData` object as
|
|
376
|
+
well as the :class:`_schema.MetaData` class itself where it will
|
|
377
|
+
take place for all :class:`_schema.Table` objects associated with
|
|
378
|
+
the targeted :class:`_schema.MetaData`.
|
|
379
|
+
|
|
380
|
+
It may also be applied to the :class:`_schema.Table` class across
|
|
381
|
+
the board::
|
|
382
|
+
|
|
383
|
+
from sqlalchemy import Table
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
@event.listens_for(Table, "column_reflect")
|
|
387
|
+
def receive_column_reflect(inspector, table, column_info):
|
|
388
|
+
# receives for all Table objects that are reflected
|
|
389
|
+
...
|
|
390
|
+
|
|
391
|
+
It can also be applied to a specific :class:`_schema.Table` at the
|
|
392
|
+
point that one is being reflected using the
|
|
393
|
+
:paramref:`_schema.Table.listeners` parameter::
|
|
394
|
+
|
|
395
|
+
t1 = Table(
|
|
396
|
+
"my_table",
|
|
397
|
+
autoload_with=some_engine,
|
|
398
|
+
listeners=[("column_reflect", receive_column_reflect)],
|
|
399
|
+
)
|
|
400
|
+
|
|
401
|
+
The dictionary of column information as returned by the
|
|
402
|
+
dialect is passed, and can be modified. The dictionary
|
|
403
|
+
is that returned in each element of the list returned
|
|
404
|
+
by :meth:`.reflection.Inspector.get_columns`:
|
|
405
|
+
|
|
406
|
+
* ``name`` - the column's name, is applied to the
|
|
407
|
+
:paramref:`_schema.Column.name` parameter
|
|
408
|
+
|
|
409
|
+
* ``type`` - the type of this column, which should be an instance
|
|
410
|
+
of :class:`~sqlalchemy.types.TypeEngine`, is applied to the
|
|
411
|
+
:paramref:`_schema.Column.type` parameter
|
|
412
|
+
|
|
413
|
+
* ``nullable`` - boolean flag if the column is NULL or NOT NULL,
|
|
414
|
+
is applied to the :paramref:`_schema.Column.nullable` parameter
|
|
415
|
+
|
|
416
|
+
* ``default`` - the column's server default value. This is
|
|
417
|
+
normally specified as a plain string SQL expression, however the
|
|
418
|
+
event can pass a :class:`.FetchedValue`, :class:`.DefaultClause`,
|
|
419
|
+
or :func:`_expression.text` object as well. Is applied to the
|
|
420
|
+
:paramref:`_schema.Column.server_default` parameter
|
|
421
|
+
|
|
422
|
+
The event is called before any action is taken against
|
|
423
|
+
this dictionary, and the contents can be modified; the following
|
|
424
|
+
additional keys may be added to the dictionary to further modify
|
|
425
|
+
how the :class:`_schema.Column` is constructed:
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
* ``key`` - the string key that will be used to access this
|
|
429
|
+
:class:`_schema.Column` in the ``.c`` collection; will be applied
|
|
430
|
+
to the :paramref:`_schema.Column.key` parameter. Is also used
|
|
431
|
+
for ORM mapping. See the section
|
|
432
|
+
:ref:`mapper_automated_reflection_schemes` for an example.
|
|
433
|
+
|
|
434
|
+
* ``quote`` - force or un-force quoting on the column name;
|
|
435
|
+
is applied to the :paramref:`_schema.Column.quote` parameter.
|
|
436
|
+
|
|
437
|
+
* ``info`` - a dictionary of arbitrary data to follow along with
|
|
438
|
+
the :class:`_schema.Column`, is applied to the
|
|
439
|
+
:paramref:`_schema.Column.info` parameter.
|
|
440
|
+
|
|
441
|
+
:func:`.event.listen` also accepts the ``propagate=True``
|
|
442
|
+
modifier for this event; when True, the listener function will
|
|
443
|
+
be established for any copies made of the target object,
|
|
444
|
+
i.e. those copies that are generated when
|
|
445
|
+
:meth:`_schema.Table.to_metadata` is used.
|
|
446
|
+
|
|
447
|
+
.. seealso::
|
|
448
|
+
|
|
449
|
+
:ref:`mapper_automated_reflection_schemes` -
|
|
450
|
+
in the ORM mapping documentation
|
|
451
|
+
|
|
452
|
+
:ref:`automap_intercepting_columns` -
|
|
453
|
+
in the :ref:`automap_toplevel` documentation
|
|
454
|
+
|
|
455
|
+
:ref:`metadata_reflection_dbagnostic_types` - in
|
|
456
|
+
the :ref:`metadata_reflection_toplevel` documentation
|
|
457
|
+
|
|
458
|
+
"""
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# sql/expression.py
|
|
2
|
+
# Copyright (C) 2005-2026 the SQLAlchemy authors and contributors
|
|
3
|
+
# <see AUTHORS file>
|
|
4
|
+
#
|
|
5
|
+
# This module is part of SQLAlchemy and is released under
|
|
6
|
+
# the MIT License: https://www.opensource.org/licenses/mit-license.php
|
|
7
|
+
|
|
8
|
+
"""Defines the public namespace for SQL expression constructs."""
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from ._dml_constructors import delete as delete
|
|
14
|
+
from ._dml_constructors import insert as insert
|
|
15
|
+
from ._dml_constructors import update as update
|
|
16
|
+
from ._elements_constructors import all_ as all_
|
|
17
|
+
from ._elements_constructors import and_ as and_
|
|
18
|
+
from ._elements_constructors import any_ as any_
|
|
19
|
+
from ._elements_constructors import asc as asc
|
|
20
|
+
from ._elements_constructors import between as between
|
|
21
|
+
from ._elements_constructors import bindparam as bindparam
|
|
22
|
+
from ._elements_constructors import bitwise_not as bitwise_not
|
|
23
|
+
from ._elements_constructors import case as case
|
|
24
|
+
from ._elements_constructors import cast as cast
|
|
25
|
+
from ._elements_constructors import collate as collate
|
|
26
|
+
from ._elements_constructors import column as column
|
|
27
|
+
from ._elements_constructors import desc as desc
|
|
28
|
+
from ._elements_constructors import distinct as distinct
|
|
29
|
+
from ._elements_constructors import extract as extract
|
|
30
|
+
from ._elements_constructors import false as false
|
|
31
|
+
from ._elements_constructors import funcfilter as funcfilter
|
|
32
|
+
from ._elements_constructors import label as label
|
|
33
|
+
from ._elements_constructors import not_ as not_
|
|
34
|
+
from ._elements_constructors import null as null
|
|
35
|
+
from ._elements_constructors import nulls_first as nulls_first
|
|
36
|
+
from ._elements_constructors import nulls_last as nulls_last
|
|
37
|
+
from ._elements_constructors import or_ as or_
|
|
38
|
+
from ._elements_constructors import outparam as outparam
|
|
39
|
+
from ._elements_constructors import over as over
|
|
40
|
+
from ._elements_constructors import text as text
|
|
41
|
+
from ._elements_constructors import true as true
|
|
42
|
+
from ._elements_constructors import try_cast as try_cast
|
|
43
|
+
from ._elements_constructors import tuple_ as tuple_
|
|
44
|
+
from ._elements_constructors import type_coerce as type_coerce
|
|
45
|
+
from ._elements_constructors import within_group as within_group
|
|
46
|
+
from ._selectable_constructors import alias as alias
|
|
47
|
+
from ._selectable_constructors import cte as cte
|
|
48
|
+
from ._selectable_constructors import except_ as except_
|
|
49
|
+
from ._selectable_constructors import except_all as except_all
|
|
50
|
+
from ._selectable_constructors import exists as exists
|
|
51
|
+
from ._selectable_constructors import intersect as intersect
|
|
52
|
+
from ._selectable_constructors import intersect_all as intersect_all
|
|
53
|
+
from ._selectable_constructors import join as join
|
|
54
|
+
from ._selectable_constructors import lateral as lateral
|
|
55
|
+
from ._selectable_constructors import outerjoin as outerjoin
|
|
56
|
+
from ._selectable_constructors import select as select
|
|
57
|
+
from ._selectable_constructors import table as table
|
|
58
|
+
from ._selectable_constructors import tablesample as tablesample
|
|
59
|
+
from ._selectable_constructors import union as union
|
|
60
|
+
from ._selectable_constructors import union_all as union_all
|
|
61
|
+
from ._selectable_constructors import values as values
|
|
62
|
+
from ._typing import ColumnExpressionArgument as ColumnExpressionArgument
|
|
63
|
+
from .base import _from_objects as _from_objects
|
|
64
|
+
from .base import _select_iterables as _select_iterables
|
|
65
|
+
from .base import ColumnCollection as ColumnCollection
|
|
66
|
+
from .base import Executable as Executable
|
|
67
|
+
from .cache_key import CacheKey as CacheKey
|
|
68
|
+
from .dml import Delete as Delete
|
|
69
|
+
from .dml import Insert as Insert
|
|
70
|
+
from .dml import Update as Update
|
|
71
|
+
from .dml import UpdateBase as UpdateBase
|
|
72
|
+
from .dml import ValuesBase as ValuesBase
|
|
73
|
+
from .elements import _truncated_label as _truncated_label
|
|
74
|
+
from .elements import BinaryExpression as BinaryExpression
|
|
75
|
+
from .elements import BindParameter as BindParameter
|
|
76
|
+
from .elements import BooleanClauseList as BooleanClauseList
|
|
77
|
+
from .elements import Case as Case
|
|
78
|
+
from .elements import Cast as Cast
|
|
79
|
+
from .elements import ClauseElement as ClauseElement
|
|
80
|
+
from .elements import ClauseList as ClauseList
|
|
81
|
+
from .elements import CollectionAggregate as CollectionAggregate
|
|
82
|
+
from .elements import ColumnClause as ColumnClause
|
|
83
|
+
from .elements import ColumnElement as ColumnElement
|
|
84
|
+
from .elements import ExpressionClauseList as ExpressionClauseList
|
|
85
|
+
from .elements import Extract as Extract
|
|
86
|
+
from .elements import False_ as False_
|
|
87
|
+
from .elements import FunctionFilter as FunctionFilter
|
|
88
|
+
from .elements import Grouping as Grouping
|
|
89
|
+
from .elements import Label as Label
|
|
90
|
+
from .elements import literal as literal
|
|
91
|
+
from .elements import literal_column as literal_column
|
|
92
|
+
from .elements import Null as Null
|
|
93
|
+
from .elements import Over as Over
|
|
94
|
+
from .elements import quoted_name as quoted_name
|
|
95
|
+
from .elements import ReleaseSavepointClause as ReleaseSavepointClause
|
|
96
|
+
from .elements import RollbackToSavepointClause as RollbackToSavepointClause
|
|
97
|
+
from .elements import SavepointClause as SavepointClause
|
|
98
|
+
from .elements import SQLColumnExpression as SQLColumnExpression
|
|
99
|
+
from .elements import TextClause as TextClause
|
|
100
|
+
from .elements import True_ as True_
|
|
101
|
+
from .elements import TryCast as TryCast
|
|
102
|
+
from .elements import Tuple as Tuple
|
|
103
|
+
from .elements import TypeClause as TypeClause
|
|
104
|
+
from .elements import TypeCoerce as TypeCoerce
|
|
105
|
+
from .elements import UnaryExpression as UnaryExpression
|
|
106
|
+
from .elements import WithinGroup as WithinGroup
|
|
107
|
+
from .functions import func as func
|
|
108
|
+
from .functions import Function as Function
|
|
109
|
+
from .functions import FunctionElement as FunctionElement
|
|
110
|
+
from .functions import modifier as modifier
|
|
111
|
+
from .lambdas import lambda_stmt as lambda_stmt
|
|
112
|
+
from .lambdas import LambdaElement as LambdaElement
|
|
113
|
+
from .lambdas import StatementLambdaElement as StatementLambdaElement
|
|
114
|
+
from .operators import ColumnOperators as ColumnOperators
|
|
115
|
+
from .operators import custom_op as custom_op
|
|
116
|
+
from .operators import Operators as Operators
|
|
117
|
+
from .selectable import Alias as Alias
|
|
118
|
+
from .selectable import AliasedReturnsRows as AliasedReturnsRows
|
|
119
|
+
from .selectable import CompoundSelect as CompoundSelect
|
|
120
|
+
from .selectable import CTE as CTE
|
|
121
|
+
from .selectable import Exists as Exists
|
|
122
|
+
from .selectable import FromClause as FromClause
|
|
123
|
+
from .selectable import FromGrouping as FromGrouping
|
|
124
|
+
from .selectable import GenerativeSelect as GenerativeSelect
|
|
125
|
+
from .selectable import HasCTE as HasCTE
|
|
126
|
+
from .selectable import HasPrefixes as HasPrefixes
|
|
127
|
+
from .selectable import HasSuffixes as HasSuffixes
|
|
128
|
+
from .selectable import Join as Join
|
|
129
|
+
from .selectable import LABEL_STYLE_DEFAULT as LABEL_STYLE_DEFAULT
|
|
130
|
+
from .selectable import (
|
|
131
|
+
LABEL_STYLE_DISAMBIGUATE_ONLY as LABEL_STYLE_DISAMBIGUATE_ONLY,
|
|
132
|
+
)
|
|
133
|
+
from .selectable import LABEL_STYLE_NONE as LABEL_STYLE_NONE
|
|
134
|
+
from .selectable import (
|
|
135
|
+
LABEL_STYLE_TABLENAME_PLUS_COL as LABEL_STYLE_TABLENAME_PLUS_COL,
|
|
136
|
+
)
|
|
137
|
+
from .selectable import Lateral as Lateral
|
|
138
|
+
from .selectable import ReturnsRows as ReturnsRows
|
|
139
|
+
from .selectable import ScalarSelect as ScalarSelect
|
|
140
|
+
from .selectable import ScalarValues as ScalarValues
|
|
141
|
+
from .selectable import Select as Select
|
|
142
|
+
from .selectable import Selectable as Selectable
|
|
143
|
+
from .selectable import SelectBase as SelectBase
|
|
144
|
+
from .selectable import SelectLabelStyle as SelectLabelStyle
|
|
145
|
+
from .selectable import Subquery as Subquery
|
|
146
|
+
from .selectable import TableClause as TableClause
|
|
147
|
+
from .selectable import TableSample as TableSample
|
|
148
|
+
from .selectable import TableValuedAlias as TableValuedAlias
|
|
149
|
+
from .selectable import TextAsFrom as TextAsFrom
|
|
150
|
+
from .selectable import TextualSelect as TextualSelect
|
|
151
|
+
from .selectable import Values as Values
|
|
152
|
+
from .visitors import Visitable as Visitable
|
|
153
|
+
|
|
154
|
+
nullsfirst = nulls_first
|
|
155
|
+
"""Synonym for the :func:`.nulls_first` function."""
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
nullslast = nulls_last
|
|
159
|
+
"""Synonym for the :func:`.nulls_last` function."""
|