1# sql/expression.py
2# Copyright (C) 2005-2021 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
10Prior to version 0.9, this module contained all of "elements", "dml",
11"default_comparator" and "selectable".   The module was broken up
12and most "factory" functions were moved to be grouped with their associated
13class.
14
15"""
16
17__all__ = [
18    "Alias",
19    "AliasedReturnsRows",
20    "any_",
21    "all_",
22    "CacheKey",
23    "ClauseElement",
24    "ColumnCollection",
25    "ColumnElement",
26    "CompoundSelect",
27    "Delete",
28    "FromClause",
29    "Insert",
30    "Join",
31    "Lateral",
32    "LambdaElement",
33    "StatementLambdaElement",
34    "Select",
35    "Selectable",
36    "TableClause",
37    "TableValuedAlias",
38    "Update",
39    "Values",
40    "alias",
41    "and_",
42    "asc",
43    "between",
44    "bindparam",
45    "case",
46    "cast",
47    "column",
48    "custom_op",
49    "cte",
50    "delete",
51    "desc",
52    "distinct",
53    "except_",
54    "except_all",
55    "exists",
56    "extract",
57    "func",
58    "modifier",
59    "collate",
60    "insert",
61    "intersect",
62    "intersect_all",
63    "join",
64    "label",
65    "lateral",
66    "lambda_stmt",
67    "literal",
68    "literal_column",
69    "not_",
70    "null",
71    "nulls_first",
72    "nulls_last",
73    "or_",
74    "outparam",
75    "outerjoin",
76    "over",
77    "select",
78    "table",
79    "text",
80    "tuple_",
81    "type_coerce",
82    "quoted_name",
83    "union",
84    "union_all",
85    "update",
86    "quoted_name",
87    "within_group",
88    "Subquery",
89    "TableSample",
90    "tablesample",
91    "values",
92]
93
94
95from .base import _from_objects
96from .base import _select_iterables
97from .base import ColumnCollection
98from .base import Executable
99from .base import PARSE_AUTOCOMMIT
100from .dml import Delete
101from .dml import Insert
102from .dml import Update
103from .dml import UpdateBase
104from .dml import ValuesBase
105from .elements import _truncated_label
106from .elements import between
107from .elements import BinaryExpression
108from .elements import BindParameter
109from .elements import BooleanClauseList
110from .elements import Case
111from .elements import Cast
112from .elements import ClauseElement
113from .elements import ClauseList
114from .elements import collate
115from .elements import CollectionAggregate
116from .elements import ColumnClause
117from .elements import ColumnElement
118from .elements import Extract
119from .elements import False_
120from .elements import FunctionFilter
121from .elements import Grouping
122from .elements import Label
123from .elements import literal
124from .elements import literal_column
125from .elements import not_
126from .elements import Null
127from .elements import outparam
128from .elements import Over
129from .elements import quoted_name
130from .elements import ReleaseSavepointClause
131from .elements import RollbackToSavepointClause
132from .elements import SavepointClause
133from .elements import TextClause
134from .elements import True_
135from .elements import Tuple
136from .elements import TypeClause
137from .elements import TypeCoerce
138from .elements import UnaryExpression
139from .elements import WithinGroup
140from .functions import func
141from .functions import Function
142from .functions import FunctionElement
143from .functions import modifier
144from .lambdas import lambda_stmt
145from .lambdas import LambdaElement
146from .lambdas import StatementLambdaElement
147from .operators import ColumnOperators
148from .operators import custom_op
149from .operators import Operators
150from .selectable import Alias
151from .selectable import AliasedReturnsRows
152from .selectable import CompoundSelect
153from .selectable import CTE
154from .selectable import Exists
155from .selectable import FromClause
156from .selectable import FromGrouping
157from .selectable import GenerativeSelect
158from .selectable import HasCTE
159from .selectable import HasPrefixes
160from .selectable import HasSuffixes
161from .selectable import Join
162from .selectable import LABEL_STYLE_DEFAULT
163from .selectable import LABEL_STYLE_DISAMBIGUATE_ONLY
164from .selectable import LABEL_STYLE_NONE
165from .selectable import LABEL_STYLE_TABLENAME_PLUS_COL
166from .selectable import Lateral
167from .selectable import ReturnsRows
168from .selectable import ScalarSelect
169from .selectable import Select
170from .selectable import Selectable
171from .selectable import SelectBase
172from .selectable import Subquery
173from .selectable import subquery
174from .selectable import TableClause
175from .selectable import TableSample
176from .selectable import TableValuedAlias
177from .selectable import TextAsFrom
178from .selectable import TextualSelect
179from .selectable import Values
180from .traversals import CacheKey
181from .visitors import Visitable
182from ..util.langhelpers import public_factory
183
184# factory functions - these pull class-bound constructors and classmethods
185# from SQL elements and selectables into public functions.  This allows
186# the functions to be available in the sqlalchemy.sql.* namespace and
187# to be auto-cross-documenting from the function to the class itself.
188
189all_ = public_factory(CollectionAggregate._create_all, ".sql.expression.all_")
190any_ = public_factory(CollectionAggregate._create_any, ".sql.expression.any_")
191and_ = public_factory(BooleanClauseList.and_, ".sql.expression.and_")
192alias = public_factory(Alias._factory, ".sql.expression.alias")
193tablesample = public_factory(
194    TableSample._factory, ".sql.expression.tablesample"
195)
196lateral = public_factory(Lateral._factory, ".sql.expression.lateral")
197or_ = public_factory(BooleanClauseList.or_, ".sql.expression.or_")
198bindparam = public_factory(BindParameter, ".sql.expression.bindparam")
199select = public_factory(Select._create, ".sql.expression.select")
200text = public_factory(TextClause._create_text, ".sql.expression.text")
201table = public_factory(TableClause, ".sql.expression.table")
202column = public_factory(ColumnClause, ".sql.expression.column")
203over = public_factory(Over, ".sql.expression.over")
204within_group = public_factory(WithinGroup, ".sql.expression.within_group")
205label = public_factory(Label, ".sql.expression.label")
206case = public_factory(Case, ".sql.expression.case")
207cast = public_factory(Cast, ".sql.expression.cast")
208cte = public_factory(CTE._factory, ".sql.expression.cte")
209values = public_factory(Values, ".sql.expression.values")
210extract = public_factory(Extract, ".sql.expression.extract")
211tuple_ = public_factory(Tuple, ".sql.expression.tuple_")
212except_ = public_factory(
213    CompoundSelect._create_except, ".sql.expression.except_"
214)
215except_all = public_factory(
216    CompoundSelect._create_except_all, ".sql.expression.except_all"
217)
218intersect = public_factory(
219    CompoundSelect._create_intersect, ".sql.expression.intersect"
220)
221intersect_all = public_factory(
222    CompoundSelect._create_intersect_all, ".sql.expression.intersect_all"
223)
224union = public_factory(CompoundSelect._create_union, ".sql.expression.union")
225union_all = public_factory(
226    CompoundSelect._create_union_all, ".sql.expression.union_all"
227)
228exists = public_factory(Exists, ".sql.expression.exists")
229nulls_first = public_factory(
230    UnaryExpression._create_nulls_first, ".sql.expression.nulls_first"
231)
232nullsfirst = nulls_first  # deprecated 1.4; see #5435
233nulls_last = public_factory(
234    UnaryExpression._create_nulls_last, ".sql.expression.nulls_last"
235)
236nullslast = nulls_last  # deprecated 1.4; see #5435
237asc = public_factory(UnaryExpression._create_asc, ".sql.expression.asc")
238desc = public_factory(UnaryExpression._create_desc, ".sql.expression.desc")
239distinct = public_factory(
240    UnaryExpression._create_distinct, ".sql.expression.distinct"
241)
242type_coerce = public_factory(TypeCoerce, ".sql.expression.type_coerce")
243true = public_factory(True_._instance, ".sql.expression.true")
244false = public_factory(False_._instance, ".sql.expression.false")
245null = public_factory(Null._instance, ".sql.expression.null")
246join = public_factory(Join._create_join, ".sql.expression.join")
247outerjoin = public_factory(Join._create_outerjoin, ".sql.expression.outerjoin")
248insert = public_factory(Insert, ".sql.expression.insert")
249update = public_factory(Update, ".sql.expression.update")
250delete = public_factory(Delete, ".sql.expression.delete")
251funcfilter = public_factory(FunctionFilter, ".sql.expression.funcfilter")
252
253
254# internal functions still being called from tests and the ORM,
255# these might be better off in some other namespace
256
257
258# old names for compatibility
259_Executable = Executable
260_BindParamClause = BindParameter
261_Label = Label
262_SelectBase = SelectBase
263_BinaryExpression = BinaryExpression
264_Cast = Cast
265_Null = Null
266_False = False_
267_True = True_
268_TextClause = TextClause
269_UnaryExpression = UnaryExpression
270_Case = Case
271_Tuple = Tuple
272_Over = Over
273_TypeClause = TypeClause
274_Extract = Extract
275_Exists = Exists
276_Grouping = Grouping
277_FromGrouping = FromGrouping
278_ScalarSelect = ScalarSelect
279