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