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