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