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