Expressions
Every AST node in SQLGlot is represented by a subclass of Expression.
This module contains the implementation of all supported Expression types. Additionally,
it exposes a number of helper functions, which are mainly used to programmatically build
SQL expressions, such as select.
1""" 2## Expressions 3 4Every AST node in SQLGlot is represented by a subclass of `Expression`. 5 6This module contains the implementation of all supported `Expression` types. Additionally, 7it exposes a number of helper functions, which are mainly used to programmatically build 8SQL expressions, such as `sqlglot.expressions.select`. 9 10---- 11""" 12 13from __future__ import annotations 14 15import datetime 16import math 17import numbers 18import re 19import textwrap 20import typing as t 21from collections import deque 22from copy import deepcopy 23from decimal import Decimal 24from enum import auto 25from functools import reduce 26 27from sqlglot.errors import ErrorLevel, ParseError 28from sqlglot.helper import ( 29 AutoName, 30 camel_to_snake_case, 31 ensure_collection, 32 ensure_list, 33 seq_get, 34 subclasses, 35) 36from sqlglot.tokens import Token, TokenError 37 38if t.TYPE_CHECKING: 39 from sqlglot._typing import E, Lit 40 from sqlglot.dialects.dialect import DialectType 41 42 Q = t.TypeVar("Q", bound="Query") 43 S = t.TypeVar("S", bound="SetOperation") 44 45 46class _Expression(type): 47 def __new__(cls, clsname, bases, attrs): 48 klass = super().__new__(cls, clsname, bases, attrs) 49 50 # When an Expression class is created, its key is automatically set to be 51 # the lowercase version of the class' name. 52 klass.key = clsname.lower() 53 54 # This is so that docstrings are not inherited in pdoc 55 klass.__doc__ = klass.__doc__ or "" 56 57 return klass 58 59 60SQLGLOT_META = "sqlglot.meta" 61TABLE_PARTS = ("this", "db", "catalog") 62COLUMN_PARTS = ("this", "table", "db", "catalog") 63 64 65class Expression(metaclass=_Expression): 66 """ 67 The base class for all expressions in a syntax tree. Each Expression encapsulates any necessary 68 context, such as its child expressions, their names (arg keys), and whether a given child expression 69 is optional or not. 70 71 Attributes: 72 key: a unique key for each class in the Expression hierarchy. This is useful for hashing 73 and representing expressions as strings. 74 arg_types: determines the arguments (child nodes) supported by an expression. It maps 75 arg keys to booleans that indicate whether the corresponding args are optional. 76 parent: a reference to the parent expression (or None, in case of root expressions). 77 arg_key: the arg key an expression is associated with, i.e. the name its parent expression 78 uses to refer to it. 79 index: the index of an expression if it is inside of a list argument in its parent. 80 comments: a list of comments that are associated with a given expression. This is used in 81 order to preserve comments when transpiling SQL code. 82 type: the `sqlglot.expressions.DataType` type of an expression. This is inferred by the 83 optimizer, in order to enable some transformations that require type information. 84 meta: a dictionary that can be used to store useful metadata for a given expression. 85 86 Example: 87 >>> class Foo(Expression): 88 ... arg_types = {"this": True, "expression": False} 89 90 The above definition informs us that Foo is an Expression that requires an argument called 91 "this" and may also optionally receive an argument called "expression". 92 93 Args: 94 args: a mapping used for retrieving the arguments of an expression, given their arg keys. 95 """ 96 97 key = "expression" 98 arg_types = {"this": True} 99 __slots__ = ("args", "parent", "arg_key", "index", "comments", "_type", "_meta", "_hash") 100 101 def __init__(self, **args: t.Any): 102 self.args: t.Dict[str, t.Any] = args 103 self.parent: t.Optional[Expression] = None 104 self.arg_key: t.Optional[str] = None 105 self.index: t.Optional[int] = None 106 self.comments: t.Optional[t.List[str]] = None 107 self._type: t.Optional[DataType] = None 108 self._meta: t.Optional[t.Dict[str, t.Any]] = None 109 self._hash: t.Optional[int] = None 110 111 for arg_key, value in self.args.items(): 112 self._set_parent(arg_key, value) 113 114 def __eq__(self, other) -> bool: 115 return type(self) is type(other) and hash(self) == hash(other) 116 117 @property 118 def hashable_args(self) -> t.Any: 119 return frozenset( 120 (k, tuple(_norm_arg(a) for a in v) if type(v) is list else _norm_arg(v)) 121 for k, v in self.args.items() 122 if not (v is None or v is False or (type(v) is list and not v)) 123 ) 124 125 def __hash__(self) -> int: 126 if self._hash is not None: 127 return self._hash 128 129 return hash((self.__class__, self.hashable_args)) 130 131 @property 132 def this(self) -> t.Any: 133 """ 134 Retrieves the argument with key "this". 135 """ 136 return self.args.get("this") 137 138 @property 139 def expression(self) -> t.Any: 140 """ 141 Retrieves the argument with key "expression". 142 """ 143 return self.args.get("expression") 144 145 @property 146 def expressions(self) -> t.List[t.Any]: 147 """ 148 Retrieves the argument with key "expressions". 149 """ 150 return self.args.get("expressions") or [] 151 152 def text(self, key) -> str: 153 """ 154 Returns a textual representation of the argument corresponding to "key". This can only be used 155 for args that are strings or leaf Expression instances, such as identifiers and literals. 156 """ 157 field = self.args.get(key) 158 if isinstance(field, str): 159 return field 160 if isinstance(field, (Identifier, Literal, Var)): 161 return field.this 162 if isinstance(field, (Star, Null)): 163 return field.name 164 return "" 165 166 @property 167 def is_string(self) -> bool: 168 """ 169 Checks whether a Literal expression is a string. 170 """ 171 return isinstance(self, Literal) and self.args["is_string"] 172 173 @property 174 def is_number(self) -> bool: 175 """ 176 Checks whether a Literal expression is a number. 177 """ 178 return (isinstance(self, Literal) and not self.args["is_string"]) or ( 179 isinstance(self, Neg) and self.this.is_number 180 ) 181 182 def to_py(self) -> t.Any: 183 """ 184 Returns a Python object equivalent of the SQL node. 185 """ 186 raise ValueError(f"{self} cannot be converted to a Python object.") 187 188 @property 189 def is_int(self) -> bool: 190 """ 191 Checks whether an expression is an integer. 192 """ 193 return self.is_number and isinstance(self.to_py(), int) 194 195 @property 196 def is_star(self) -> bool: 197 """Checks whether an expression is a star.""" 198 return isinstance(self, Star) or (isinstance(self, Column) and isinstance(self.this, Star)) 199 200 @property 201 def alias(self) -> str: 202 """ 203 Returns the alias of the expression, or an empty string if it's not aliased. 204 """ 205 if isinstance(self.args.get("alias"), TableAlias): 206 return self.args["alias"].name 207 return self.text("alias") 208 209 @property 210 def alias_column_names(self) -> t.List[str]: 211 table_alias = self.args.get("alias") 212 if not table_alias: 213 return [] 214 return [c.name for c in table_alias.args.get("columns") or []] 215 216 @property 217 def name(self) -> str: 218 return self.text("this") 219 220 @property 221 def alias_or_name(self) -> str: 222 return self.alias or self.name 223 224 @property 225 def output_name(self) -> str: 226 """ 227 Name of the output column if this expression is a selection. 228 229 If the Expression has no output name, an empty string is returned. 230 231 Example: 232 >>> from sqlglot import parse_one 233 >>> parse_one("SELECT a").expressions[0].output_name 234 'a' 235 >>> parse_one("SELECT b AS c").expressions[0].output_name 236 'c' 237 >>> parse_one("SELECT 1 + 2").expressions[0].output_name 238 '' 239 """ 240 return "" 241 242 @property 243 def type(self) -> t.Optional[DataType]: 244 return self._type 245 246 @type.setter 247 def type(self, dtype: t.Optional[DataType | DataType.Type | str]) -> None: 248 if dtype and not isinstance(dtype, DataType): 249 dtype = DataType.build(dtype) 250 self._type = dtype # type: ignore 251 252 def is_type(self, *dtypes) -> bool: 253 return self.type is not None and self.type.is_type(*dtypes) 254 255 def is_leaf(self) -> bool: 256 return not any(isinstance(v, (Expression, list)) for v in self.args.values()) 257 258 @property 259 def meta(self) -> t.Dict[str, t.Any]: 260 if self._meta is None: 261 self._meta = {} 262 return self._meta 263 264 def __deepcopy__(self, memo): 265 root = self.__class__() 266 stack = [(self, root)] 267 268 while stack: 269 node, copy = stack.pop() 270 271 if node.comments is not None: 272 copy.comments = deepcopy(node.comments) 273 if node._type is not None: 274 copy._type = deepcopy(node._type) 275 if node._meta is not None: 276 copy._meta = deepcopy(node._meta) 277 if node._hash is not None: 278 copy._hash = node._hash 279 280 for k, vs in node.args.items(): 281 if hasattr(vs, "parent"): 282 stack.append((vs, vs.__class__())) 283 copy.set(k, stack[-1][-1]) 284 elif type(vs) is list: 285 copy.args[k] = [] 286 287 for v in vs: 288 if hasattr(v, "parent"): 289 stack.append((v, v.__class__())) 290 copy.append(k, stack[-1][-1]) 291 else: 292 copy.append(k, v) 293 else: 294 copy.args[k] = vs 295 296 return root 297 298 def copy(self): 299 """ 300 Returns a deep copy of the expression. 301 """ 302 return deepcopy(self) 303 304 def add_comments(self, comments: t.Optional[t.List[str]] = None) -> None: 305 if self.comments is None: 306 self.comments = [] 307 308 if comments: 309 for comment in comments: 310 _, *meta = comment.split(SQLGLOT_META) 311 if meta: 312 for kv in "".join(meta).split(","): 313 k, *v = kv.split("=") 314 value = v[0].strip() if v else True 315 self.meta[k.strip()] = value 316 self.comments.append(comment) 317 318 def pop_comments(self) -> t.List[str]: 319 comments = self.comments or [] 320 self.comments = None 321 return comments 322 323 def append(self, arg_key: str, value: t.Any) -> None: 324 """ 325 Appends value to arg_key if it's a list or sets it as a new list. 326 327 Args: 328 arg_key (str): name of the list expression arg 329 value (Any): value to append to the list 330 """ 331 if type(self.args.get(arg_key)) is not list: 332 self.args[arg_key] = [] 333 self._set_parent(arg_key, value) 334 values = self.args[arg_key] 335 if hasattr(value, "parent"): 336 value.index = len(values) 337 values.append(value) 338 339 def set( 340 self, 341 arg_key: str, 342 value: t.Any, 343 index: t.Optional[int] = None, 344 overwrite: bool = True, 345 ) -> None: 346 """ 347 Sets arg_key to value. 348 349 Args: 350 arg_key: name of the expression arg. 351 value: value to set the arg to. 352 index: if the arg is a list, this specifies what position to add the value in it. 353 overwrite: assuming an index is given, this determines whether to overwrite the 354 list entry instead of only inserting a new value (i.e., like list.insert). 355 """ 356 if index is not None: 357 expressions = self.args.get(arg_key) or [] 358 359 if seq_get(expressions, index) is None: 360 return 361 if value is None: 362 expressions.pop(index) 363 for v in expressions[index:]: 364 v.index = v.index - 1 365 return 366 367 if isinstance(value, list): 368 expressions.pop(index) 369 expressions[index:index] = value 370 elif overwrite: 371 expressions[index] = value 372 else: 373 expressions.insert(index, value) 374 375 value = expressions 376 elif value is None: 377 self.args.pop(arg_key, None) 378 return 379 380 self.args[arg_key] = value 381 self._set_parent(arg_key, value, index) 382 383 def _set_parent(self, arg_key: str, value: t.Any, index: t.Optional[int] = None) -> None: 384 if hasattr(value, "parent"): 385 value.parent = self 386 value.arg_key = arg_key 387 value.index = index 388 elif type(value) is list: 389 for index, v in enumerate(value): 390 if hasattr(v, "parent"): 391 v.parent = self 392 v.arg_key = arg_key 393 v.index = index 394 395 @property 396 def depth(self) -> int: 397 """ 398 Returns the depth of this tree. 399 """ 400 if self.parent: 401 return self.parent.depth + 1 402 return 0 403 404 def iter_expressions(self, reverse: bool = False) -> t.Iterator[Expression]: 405 """Yields the key and expression for all arguments, exploding list args.""" 406 # remove tuple when python 3.7 is deprecated 407 for vs in reversed(tuple(self.args.values())) if reverse else self.args.values(): 408 if type(vs) is list: 409 for v in reversed(vs) if reverse else vs: 410 if hasattr(v, "parent"): 411 yield v 412 else: 413 if hasattr(vs, "parent"): 414 yield vs 415 416 def find(self, *expression_types: t.Type[E], bfs: bool = True) -> t.Optional[E]: 417 """ 418 Returns the first node in this tree which matches at least one of 419 the specified types. 420 421 Args: 422 expression_types: the expression type(s) to match. 423 bfs: whether to search the AST using the BFS algorithm (DFS is used if false). 424 425 Returns: 426 The node which matches the criteria or None if no such node was found. 427 """ 428 return next(self.find_all(*expression_types, bfs=bfs), None) 429 430 def find_all(self, *expression_types: t.Type[E], bfs: bool = True) -> t.Iterator[E]: 431 """ 432 Returns a generator object which visits all nodes in this tree and only 433 yields those that match at least one of the specified expression types. 434 435 Args: 436 expression_types: the expression type(s) to match. 437 bfs: whether to search the AST using the BFS algorithm (DFS is used if false). 438 439 Returns: 440 The generator object. 441 """ 442 for expression in self.walk(bfs=bfs): 443 if isinstance(expression, expression_types): 444 yield expression 445 446 def find_ancestor(self, *expression_types: t.Type[E]) -> t.Optional[E]: 447 """ 448 Returns a nearest parent matching expression_types. 449 450 Args: 451 expression_types: the expression type(s) to match. 452 453 Returns: 454 The parent node. 455 """ 456 ancestor = self.parent 457 while ancestor and not isinstance(ancestor, expression_types): 458 ancestor = ancestor.parent 459 return ancestor # type: ignore 460 461 @property 462 def parent_select(self) -> t.Optional[Select]: 463 """ 464 Returns the parent select statement. 465 """ 466 return self.find_ancestor(Select) 467 468 @property 469 def same_parent(self) -> bool: 470 """Returns if the parent is the same class as itself.""" 471 return type(self.parent) is self.__class__ 472 473 def root(self) -> Expression: 474 """ 475 Returns the root expression of this tree. 476 """ 477 expression = self 478 while expression.parent: 479 expression = expression.parent 480 return expression 481 482 def walk( 483 self, bfs: bool = True, prune: t.Optional[t.Callable[[Expression], bool]] = None 484 ) -> t.Iterator[Expression]: 485 """ 486 Returns a generator object which visits all nodes in this tree. 487 488 Args: 489 bfs: if set to True the BFS traversal order will be applied, 490 otherwise the DFS traversal will be used instead. 491 prune: callable that returns True if the generator should stop traversing 492 this branch of the tree. 493 494 Returns: 495 the generator object. 496 """ 497 if bfs: 498 yield from self.bfs(prune=prune) 499 else: 500 yield from self.dfs(prune=prune) 501 502 def dfs( 503 self, prune: t.Optional[t.Callable[[Expression], bool]] = None 504 ) -> t.Iterator[Expression]: 505 """ 506 Returns a generator object which visits all nodes in this tree in 507 the DFS (Depth-first) order. 508 509 Returns: 510 The generator object. 511 """ 512 stack = [self] 513 514 while stack: 515 node = stack.pop() 516 517 yield node 518 519 if prune and prune(node): 520 continue 521 522 for v in node.iter_expressions(reverse=True): 523 stack.append(v) 524 525 def bfs( 526 self, prune: t.Optional[t.Callable[[Expression], bool]] = None 527 ) -> t.Iterator[Expression]: 528 """ 529 Returns a generator object which visits all nodes in this tree in 530 the BFS (Breadth-first) order. 531 532 Returns: 533 The generator object. 534 """ 535 queue = deque([self]) 536 537 while queue: 538 node = queue.popleft() 539 540 yield node 541 542 if prune and prune(node): 543 continue 544 545 for v in node.iter_expressions(): 546 queue.append(v) 547 548 def unnest(self): 549 """ 550 Returns the first non parenthesis child or self. 551 """ 552 expression = self 553 while type(expression) is Paren: 554 expression = expression.this 555 return expression 556 557 def unalias(self): 558 """ 559 Returns the inner expression if this is an Alias. 560 """ 561 if isinstance(self, Alias): 562 return self.this 563 return self 564 565 def unnest_operands(self): 566 """ 567 Returns unnested operands as a tuple. 568 """ 569 return tuple(arg.unnest() for arg in self.iter_expressions()) 570 571 def flatten(self, unnest=True): 572 """ 573 Returns a generator which yields child nodes whose parents are the same class. 574 575 A AND B AND C -> [A, B, C] 576 """ 577 for node in self.dfs(prune=lambda n: n.parent and type(n) is not self.__class__): 578 if type(node) is not self.__class__: 579 yield node.unnest() if unnest and not isinstance(node, Subquery) else node 580 581 def __str__(self) -> str: 582 return self.sql() 583 584 def __repr__(self) -> str: 585 return _to_s(self) 586 587 def to_s(self) -> str: 588 """ 589 Same as __repr__, but includes additional information which can be useful 590 for debugging, like empty or missing args and the AST nodes' object IDs. 591 """ 592 return _to_s(self, verbose=True) 593 594 def sql(self, dialect: DialectType = None, **opts) -> str: 595 """ 596 Returns SQL string representation of this tree. 597 598 Args: 599 dialect: the dialect of the output SQL string (eg. "spark", "hive", "presto", "mysql"). 600 opts: other `sqlglot.generator.Generator` options. 601 602 Returns: 603 The SQL string. 604 """ 605 from sqlglot.dialects import Dialect 606 607 return Dialect.get_or_raise(dialect).generate(self, **opts) 608 609 def transform(self, fun: t.Callable, *args: t.Any, copy: bool = True, **kwargs) -> Expression: 610 """ 611 Visits all tree nodes (excluding already transformed ones) 612 and applies the given transformation function to each node. 613 614 Args: 615 fun: a function which takes a node as an argument and returns a 616 new transformed node or the same node without modifications. If the function 617 returns None, then the corresponding node will be removed from the syntax tree. 618 copy: if set to True a new tree instance is constructed, otherwise the tree is 619 modified in place. 620 621 Returns: 622 The transformed tree. 623 """ 624 root = None 625 new_node = None 626 627 for node in (self.copy() if copy else self).dfs(prune=lambda n: n is not new_node): 628 parent, arg_key, index = node.parent, node.arg_key, node.index 629 new_node = fun(node, *args, **kwargs) 630 631 if not root: 632 root = new_node 633 elif new_node is not node: 634 parent.set(arg_key, new_node, index) 635 636 assert root 637 return root.assert_is(Expression) 638 639 @t.overload 640 def replace(self, expression: E) -> E: ... 641 642 @t.overload 643 def replace(self, expression: None) -> None: ... 644 645 def replace(self, expression): 646 """ 647 Swap out this expression with a new expression. 648 649 For example:: 650 651 >>> tree = Select().select("x").from_("tbl") 652 >>> tree.find(Column).replace(column("y")) 653 Column( 654 this=Identifier(this=y, quoted=False)) 655 >>> tree.sql() 656 'SELECT y FROM tbl' 657 658 Args: 659 expression: new node 660 661 Returns: 662 The new expression or expressions. 663 """ 664 parent = self.parent 665 666 if not parent or parent is expression: 667 return expression 668 669 key = self.arg_key 670 value = parent.args.get(key) 671 672 if type(expression) is list and isinstance(value, Expression): 673 # We are trying to replace an Expression with a list, so it's assumed that 674 # the intention was to really replace the parent of this expression. 675 value.parent.replace(expression) 676 else: 677 parent.set(key, expression, self.index) 678 679 if expression is not self: 680 self.parent = None 681 self.arg_key = None 682 self.index = None 683 684 return expression 685 686 def pop(self: E) -> E: 687 """ 688 Remove this expression from its AST. 689 690 Returns: 691 The popped expression. 692 """ 693 self.replace(None) 694 return self 695 696 def assert_is(self, type_: t.Type[E]) -> E: 697 """ 698 Assert that this `Expression` is an instance of `type_`. 699 700 If it is NOT an instance of `type_`, this raises an assertion error. 701 Otherwise, this returns this expression. 702 703 Examples: 704 This is useful for type security in chained expressions: 705 706 >>> import sqlglot 707 >>> sqlglot.parse_one("SELECT x from y").assert_is(Select).select("z").sql() 708 'SELECT x, z FROM y' 709 """ 710 if not isinstance(self, type_): 711 raise AssertionError(f"{self} is not {type_}.") 712 return self 713 714 def error_messages(self, args: t.Optional[t.Sequence] = None) -> t.List[str]: 715 """ 716 Checks if this expression is valid (e.g. all mandatory args are set). 717 718 Args: 719 args: a sequence of values that were used to instantiate a Func expression. This is used 720 to check that the provided arguments don't exceed the function argument limit. 721 722 Returns: 723 A list of error messages for all possible errors that were found. 724 """ 725 errors: t.List[str] = [] 726 727 for k in self.args: 728 if k not in self.arg_types: 729 errors.append(f"Unexpected keyword: '{k}' for {self.__class__}") 730 for k, mandatory in self.arg_types.items(): 731 v = self.args.get(k) 732 if mandatory and (v is None or (isinstance(v, list) and not v)): 733 errors.append(f"Required keyword: '{k}' missing for {self.__class__}") 734 735 if ( 736 args 737 and isinstance(self, Func) 738 and len(args) > len(self.arg_types) 739 and not self.is_var_len_args 740 ): 741 errors.append( 742 f"The number of provided arguments ({len(args)}) is greater than " 743 f"the maximum number of supported arguments ({len(self.arg_types)})" 744 ) 745 746 return errors 747 748 def dump(self): 749 """ 750 Dump this Expression to a JSON-serializable dict. 751 """ 752 from sqlglot.serde import dump 753 754 return dump(self) 755 756 @classmethod 757 def load(cls, obj): 758 """ 759 Load a dict (as returned by `Expression.dump`) into an Expression instance. 760 """ 761 from sqlglot.serde import load 762 763 return load(obj) 764 765 def and_( 766 self, 767 *expressions: t.Optional[ExpOrStr], 768 dialect: DialectType = None, 769 copy: bool = True, 770 **opts, 771 ) -> Condition: 772 """ 773 AND this condition with one or multiple expressions. 774 775 Example: 776 >>> condition("x=1").and_("y=1").sql() 777 'x = 1 AND y = 1' 778 779 Args: 780 *expressions: the SQL code strings to parse. 781 If an `Expression` instance is passed, it will be used as-is. 782 dialect: the dialect used to parse the input expression. 783 copy: whether to copy the involved expressions (only applies to Expressions). 784 opts: other options to use to parse the input expressions. 785 786 Returns: 787 The new And condition. 788 """ 789 return and_(self, *expressions, dialect=dialect, copy=copy, **opts) 790 791 def or_( 792 self, 793 *expressions: t.Optional[ExpOrStr], 794 dialect: DialectType = None, 795 copy: bool = True, 796 **opts, 797 ) -> Condition: 798 """ 799 OR this condition with one or multiple expressions. 800 801 Example: 802 >>> condition("x=1").or_("y=1").sql() 803 'x = 1 OR y = 1' 804 805 Args: 806 *expressions: the SQL code strings to parse. 807 If an `Expression` instance is passed, it will be used as-is. 808 dialect: the dialect used to parse the input expression. 809 copy: whether to copy the involved expressions (only applies to Expressions). 810 opts: other options to use to parse the input expressions. 811 812 Returns: 813 The new Or condition. 814 """ 815 return or_(self, *expressions, dialect=dialect, copy=copy, **opts) 816 817 def not_(self, copy: bool = True): 818 """ 819 Wrap this condition with NOT. 820 821 Example: 822 >>> condition("x=1").not_().sql() 823 'NOT x = 1' 824 825 Args: 826 copy: whether to copy this object. 827 828 Returns: 829 The new Not instance. 830 """ 831 return not_(self, copy=copy) 832 833 def as_( 834 self, 835 alias: str | Identifier, 836 quoted: t.Optional[bool] = None, 837 dialect: DialectType = None, 838 copy: bool = True, 839 **opts, 840 ) -> Alias: 841 return alias_(self, alias, quoted=quoted, dialect=dialect, copy=copy, **opts) 842 843 def _binop(self, klass: t.Type[E], other: t.Any, reverse: bool = False) -> E: 844 this = self.copy() 845 other = convert(other, copy=True) 846 if not isinstance(this, klass) and not isinstance(other, klass): 847 this = _wrap(this, Binary) 848 other = _wrap(other, Binary) 849 if reverse: 850 return klass(this=other, expression=this) 851 return klass(this=this, expression=other) 852 853 def __getitem__(self, other: ExpOrStr | t.Tuple[ExpOrStr]) -> Bracket: 854 return Bracket( 855 this=self.copy(), expressions=[convert(e, copy=True) for e in ensure_list(other)] 856 ) 857 858 def __iter__(self) -> t.Iterator: 859 if "expressions" in self.arg_types: 860 return iter(self.args.get("expressions") or []) 861 # We define this because __getitem__ converts Expression into an iterable, which is 862 # problematic because one can hit infinite loops if they do "for x in some_expr: ..." 863 # See: https://peps.python.org/pep-0234/ 864 raise TypeError(f"'{self.__class__.__name__}' object is not iterable") 865 866 def isin( 867 self, 868 *expressions: t.Any, 869 query: t.Optional[ExpOrStr] = None, 870 unnest: t.Optional[ExpOrStr] | t.Collection[ExpOrStr] = None, 871 copy: bool = True, 872 **opts, 873 ) -> In: 874 subquery = maybe_parse(query, copy=copy, **opts) if query else None 875 if subquery and not isinstance(subquery, Subquery): 876 subquery = subquery.subquery(copy=False) 877 878 return In( 879 this=maybe_copy(self, copy), 880 expressions=[convert(e, copy=copy) for e in expressions], 881 query=subquery, 882 unnest=( 883 Unnest( 884 expressions=[ 885 maybe_parse(t.cast(ExpOrStr, e), copy=copy, **opts) 886 for e in ensure_list(unnest) 887 ] 888 ) 889 if unnest 890 else None 891 ), 892 ) 893 894 def between(self, low: t.Any, high: t.Any, copy: bool = True, **opts) -> Between: 895 return Between( 896 this=maybe_copy(self, copy), 897 low=convert(low, copy=copy, **opts), 898 high=convert(high, copy=copy, **opts), 899 ) 900 901 def is_(self, other: ExpOrStr) -> Is: 902 return self._binop(Is, other) 903 904 def like(self, other: ExpOrStr) -> Like: 905 return self._binop(Like, other) 906 907 def ilike(self, other: ExpOrStr) -> ILike: 908 return self._binop(ILike, other) 909 910 def eq(self, other: t.Any) -> EQ: 911 return self._binop(EQ, other) 912 913 def neq(self, other: t.Any) -> NEQ: 914 return self._binop(NEQ, other) 915 916 def rlike(self, other: ExpOrStr) -> RegexpLike: 917 return self._binop(RegexpLike, other) 918 919 def div(self, other: ExpOrStr, typed: bool = False, safe: bool = False) -> Div: 920 div = self._binop(Div, other) 921 div.args["typed"] = typed 922 div.args["safe"] = safe 923 return div 924 925 def asc(self, nulls_first: bool = True) -> Ordered: 926 return Ordered(this=self.copy(), nulls_first=nulls_first) 927 928 def desc(self, nulls_first: bool = False) -> Ordered: 929 return Ordered(this=self.copy(), desc=True, nulls_first=nulls_first) 930 931 def __lt__(self, other: t.Any) -> LT: 932 return self._binop(LT, other) 933 934 def __le__(self, other: t.Any) -> LTE: 935 return self._binop(LTE, other) 936 937 def __gt__(self, other: t.Any) -> GT: 938 return self._binop(GT, other) 939 940 def __ge__(self, other: t.Any) -> GTE: 941 return self._binop(GTE, other) 942 943 def __add__(self, other: t.Any) -> Add: 944 return self._binop(Add, other) 945 946 def __radd__(self, other: t.Any) -> Add: 947 return self._binop(Add, other, reverse=True) 948 949 def __sub__(self, other: t.Any) -> Sub: 950 return self._binop(Sub, other) 951 952 def __rsub__(self, other: t.Any) -> Sub: 953 return self._binop(Sub, other, reverse=True) 954 955 def __mul__(self, other: t.Any) -> Mul: 956 return self._binop(Mul, other) 957 958 def __rmul__(self, other: t.Any) -> Mul: 959 return self._binop(Mul, other, reverse=True) 960 961 def __truediv__(self, other: t.Any) -> Div: 962 return self._binop(Div, other) 963 964 def __rtruediv__(self, other: t.Any) -> Div: 965 return self._binop(Div, other, reverse=True) 966 967 def __floordiv__(self, other: t.Any) -> IntDiv: 968 return self._binop(IntDiv, other) 969 970 def __rfloordiv__(self, other: t.Any) -> IntDiv: 971 return self._binop(IntDiv, other, reverse=True) 972 973 def __mod__(self, other: t.Any) -> Mod: 974 return self._binop(Mod, other) 975 976 def __rmod__(self, other: t.Any) -> Mod: 977 return self._binop(Mod, other, reverse=True) 978 979 def __pow__(self, other: t.Any) -> Pow: 980 return self._binop(Pow, other) 981 982 def __rpow__(self, other: t.Any) -> Pow: 983 return self._binop(Pow, other, reverse=True) 984 985 def __and__(self, other: t.Any) -> And: 986 return self._binop(And, other) 987 988 def __rand__(self, other: t.Any) -> And: 989 return self._binop(And, other, reverse=True) 990 991 def __or__(self, other: t.Any) -> Or: 992 return self._binop(Or, other) 993 994 def __ror__(self, other: t.Any) -> Or: 995 return self._binop(Or, other, reverse=True) 996 997 def __neg__(self) -> Neg: 998 return Neg(this=_wrap(self.copy(), Binary)) 999 1000 def __invert__(self) -> Not: 1001 return not_(self.copy()) 1002 1003 1004IntoType = t.Union[ 1005 str, 1006 t.Type[Expression], 1007 t.Collection[t.Union[str, t.Type[Expression]]], 1008] 1009ExpOrStr = t.Union[str, Expression] 1010 1011 1012class Condition(Expression): 1013 """Logical conditions like x AND y, or simply x""" 1014 1015 1016class Predicate(Condition): 1017 """Relationships like x = y, x > 1, x >= y.""" 1018 1019 1020class DerivedTable(Expression): 1021 @property 1022 def selects(self) -> t.List[Expression]: 1023 return self.this.selects if isinstance(self.this, Query) else [] 1024 1025 @property 1026 def named_selects(self) -> t.List[str]: 1027 return [select.output_name for select in self.selects] 1028 1029 1030class Query(Expression): 1031 def subquery(self, alias: t.Optional[ExpOrStr] = None, copy: bool = True) -> Subquery: 1032 """ 1033 Returns a `Subquery` that wraps around this query. 1034 1035 Example: 1036 >>> subquery = Select().select("x").from_("tbl").subquery() 1037 >>> Select().select("x").from_(subquery).sql() 1038 'SELECT x FROM (SELECT x FROM tbl)' 1039 1040 Args: 1041 alias: an optional alias for the subquery. 1042 copy: if `False`, modify this expression instance in-place. 1043 """ 1044 instance = maybe_copy(self, copy) 1045 if not isinstance(alias, Expression): 1046 alias = TableAlias(this=to_identifier(alias)) if alias else None 1047 1048 return Subquery(this=instance, alias=alias) 1049 1050 def limit( 1051 self: Q, expression: ExpOrStr | int, dialect: DialectType = None, copy: bool = True, **opts 1052 ) -> Q: 1053 """ 1054 Adds a LIMIT clause to this query. 1055 1056 Example: 1057 >>> select("1").union(select("1")).limit(1).sql() 1058 'SELECT 1 UNION SELECT 1 LIMIT 1' 1059 1060 Args: 1061 expression: the SQL code string to parse. 1062 This can also be an integer. 1063 If a `Limit` instance is passed, it will be used as-is. 1064 If another `Expression` instance is passed, it will be wrapped in a `Limit`. 1065 dialect: the dialect used to parse the input expression. 1066 copy: if `False`, modify this expression instance in-place. 1067 opts: other options to use to parse the input expressions. 1068 1069 Returns: 1070 A limited Select expression. 1071 """ 1072 return _apply_builder( 1073 expression=expression, 1074 instance=self, 1075 arg="limit", 1076 into=Limit, 1077 prefix="LIMIT", 1078 dialect=dialect, 1079 copy=copy, 1080 into_arg="expression", 1081 **opts, 1082 ) 1083 1084 def offset( 1085 self: Q, expression: ExpOrStr | int, dialect: DialectType = None, copy: bool = True, **opts 1086 ) -> Q: 1087 """ 1088 Set the OFFSET expression. 1089 1090 Example: 1091 >>> Select().from_("tbl").select("x").offset(10).sql() 1092 'SELECT x FROM tbl OFFSET 10' 1093 1094 Args: 1095 expression: the SQL code string to parse. 1096 This can also be an integer. 1097 If a `Offset` instance is passed, this is used as-is. 1098 If another `Expression` instance is passed, it will be wrapped in a `Offset`. 1099 dialect: the dialect used to parse the input expression. 1100 copy: if `False`, modify this expression instance in-place. 1101 opts: other options to use to parse the input expressions. 1102 1103 Returns: 1104 The modified Select expression. 1105 """ 1106 return _apply_builder( 1107 expression=expression, 1108 instance=self, 1109 arg="offset", 1110 into=Offset, 1111 prefix="OFFSET", 1112 dialect=dialect, 1113 copy=copy, 1114 into_arg="expression", 1115 **opts, 1116 ) 1117 1118 def order_by( 1119 self: Q, 1120 *expressions: t.Optional[ExpOrStr], 1121 append: bool = True, 1122 dialect: DialectType = None, 1123 copy: bool = True, 1124 **opts, 1125 ) -> Q: 1126 """ 1127 Set the ORDER BY expression. 1128 1129 Example: 1130 >>> Select().from_("tbl").select("x").order_by("x DESC").sql() 1131 'SELECT x FROM tbl ORDER BY x DESC' 1132 1133 Args: 1134 *expressions: the SQL code strings to parse. 1135 If a `Group` instance is passed, this is used as-is. 1136 If another `Expression` instance is passed, it will be wrapped in a `Order`. 1137 append: if `True`, add to any existing expressions. 1138 Otherwise, this flattens all the `Order` expression into a single expression. 1139 dialect: the dialect used to parse the input expression. 1140 copy: if `False`, modify this expression instance in-place. 1141 opts: other options to use to parse the input expressions. 1142 1143 Returns: 1144 The modified Select expression. 1145 """ 1146 return _apply_child_list_builder( 1147 *expressions, 1148 instance=self, 1149 arg="order", 1150 append=append, 1151 copy=copy, 1152 prefix="ORDER BY", 1153 into=Order, 1154 dialect=dialect, 1155 **opts, 1156 ) 1157 1158 @property 1159 def ctes(self) -> t.List[CTE]: 1160 """Returns a list of all the CTEs attached to this query.""" 1161 with_ = self.args.get("with") 1162 return with_.expressions if with_ else [] 1163 1164 @property 1165 def selects(self) -> t.List[Expression]: 1166 """Returns the query's projections.""" 1167 raise NotImplementedError("Query objects must implement `selects`") 1168 1169 @property 1170 def named_selects(self) -> t.List[str]: 1171 """Returns the output names of the query's projections.""" 1172 raise NotImplementedError("Query objects must implement `named_selects`") 1173 1174 def select( 1175 self: Q, 1176 *expressions: t.Optional[ExpOrStr], 1177 append: bool = True, 1178 dialect: DialectType = None, 1179 copy: bool = True, 1180 **opts, 1181 ) -> Q: 1182 """ 1183 Append to or set the SELECT expressions. 1184 1185 Example: 1186 >>> Select().select("x", "y").sql() 1187 'SELECT x, y' 1188 1189 Args: 1190 *expressions: the SQL code strings to parse. 1191 If an `Expression` instance is passed, it will be used as-is. 1192 append: if `True`, add to any existing expressions. 1193 Otherwise, this resets the expressions. 1194 dialect: the dialect used to parse the input expressions. 1195 copy: if `False`, modify this expression instance in-place. 1196 opts: other options to use to parse the input expressions. 1197 1198 Returns: 1199 The modified Query expression. 1200 """ 1201 raise NotImplementedError("Query objects must implement `select`") 1202 1203 def with_( 1204 self: Q, 1205 alias: ExpOrStr, 1206 as_: ExpOrStr, 1207 recursive: t.Optional[bool] = None, 1208 materialized: t.Optional[bool] = None, 1209 append: bool = True, 1210 dialect: DialectType = None, 1211 copy: bool = True, 1212 **opts, 1213 ) -> Q: 1214 """ 1215 Append to or set the common table expressions. 1216 1217 Example: 1218 >>> Select().with_("tbl2", as_="SELECT * FROM tbl").select("x").from_("tbl2").sql() 1219 'WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2' 1220 1221 Args: 1222 alias: the SQL code string to parse as the table name. 1223 If an `Expression` instance is passed, this is used as-is. 1224 as_: the SQL code string to parse as the table expression. 1225 If an `Expression` instance is passed, it will be used as-is. 1226 recursive: set the RECURSIVE part of the expression. Defaults to `False`. 1227 materialized: set the MATERIALIZED part of the expression. 1228 append: if `True`, add to any existing expressions. 1229 Otherwise, this resets the expressions. 1230 dialect: the dialect used to parse the input expression. 1231 copy: if `False`, modify this expression instance in-place. 1232 opts: other options to use to parse the input expressions. 1233 1234 Returns: 1235 The modified expression. 1236 """ 1237 return _apply_cte_builder( 1238 self, 1239 alias, 1240 as_, 1241 recursive=recursive, 1242 materialized=materialized, 1243 append=append, 1244 dialect=dialect, 1245 copy=copy, 1246 **opts, 1247 ) 1248 1249 def union( 1250 self, expression: ExpOrStr, distinct: bool = True, dialect: DialectType = None, **opts 1251 ) -> Union: 1252 """ 1253 Builds a UNION expression. 1254 1255 Example: 1256 >>> import sqlglot 1257 >>> sqlglot.parse_one("SELECT * FROM foo").union("SELECT * FROM bla").sql() 1258 'SELECT * FROM foo UNION SELECT * FROM bla' 1259 1260 Args: 1261 expression: the SQL code string. 1262 If an `Expression` instance is passed, it will be used as-is. 1263 distinct: set the DISTINCT flag if and only if this is true. 1264 dialect: the dialect used to parse the input expression. 1265 opts: other options to use to parse the input expressions. 1266 1267 Returns: 1268 The new Union expression. 1269 """ 1270 return union(left=self, right=expression, distinct=distinct, dialect=dialect, **opts) 1271 1272 def intersect( 1273 self, expression: ExpOrStr, distinct: bool = True, dialect: DialectType = None, **opts 1274 ) -> Intersect: 1275 """ 1276 Builds an INTERSECT expression. 1277 1278 Example: 1279 >>> import sqlglot 1280 >>> sqlglot.parse_one("SELECT * FROM foo").intersect("SELECT * FROM bla").sql() 1281 'SELECT * FROM foo INTERSECT SELECT * FROM bla' 1282 1283 Args: 1284 expression: the SQL code string. 1285 If an `Expression` instance is passed, it will be used as-is. 1286 distinct: set the DISTINCT flag if and only if this is true. 1287 dialect: the dialect used to parse the input expression. 1288 opts: other options to use to parse the input expressions. 1289 1290 Returns: 1291 The new Intersect expression. 1292 """ 1293 return intersect(left=self, right=expression, distinct=distinct, dialect=dialect, **opts) 1294 1295 def except_( 1296 self, expression: ExpOrStr, distinct: bool = True, dialect: DialectType = None, **opts 1297 ) -> Except: 1298 """ 1299 Builds an EXCEPT expression. 1300 1301 Example: 1302 >>> import sqlglot 1303 >>> sqlglot.parse_one("SELECT * FROM foo").except_("SELECT * FROM bla").sql() 1304 'SELECT * FROM foo EXCEPT SELECT * FROM bla' 1305 1306 Args: 1307 expression: the SQL code string. 1308 If an `Expression` instance is passed, it will be used as-is. 1309 distinct: set the DISTINCT flag if and only if this is true. 1310 dialect: the dialect used to parse the input expression. 1311 opts: other options to use to parse the input expressions. 1312 1313 Returns: 1314 The new Except expression. 1315 """ 1316 return except_(left=self, right=expression, distinct=distinct, dialect=dialect, **opts) 1317 1318 1319class UDTF(DerivedTable): 1320 @property 1321 def selects(self) -> t.List[Expression]: 1322 alias = self.args.get("alias") 1323 return alias.columns if alias else [] 1324 1325 1326class Cache(Expression): 1327 arg_types = { 1328 "this": True, 1329 "lazy": False, 1330 "options": False, 1331 "expression": False, 1332 } 1333 1334 1335class Uncache(Expression): 1336 arg_types = {"this": True, "exists": False} 1337 1338 1339class Refresh(Expression): 1340 pass 1341 1342 1343class DDL(Expression): 1344 @property 1345 def ctes(self) -> t.List[CTE]: 1346 """Returns a list of all the CTEs attached to this statement.""" 1347 with_ = self.args.get("with") 1348 return with_.expressions if with_ else [] 1349 1350 @property 1351 def selects(self) -> t.List[Expression]: 1352 """If this statement contains a query (e.g. a CTAS), this returns the query's projections.""" 1353 return self.expression.selects if isinstance(self.expression, Query) else [] 1354 1355 @property 1356 def named_selects(self) -> t.List[str]: 1357 """ 1358 If this statement contains a query (e.g. a CTAS), this returns the output 1359 names of the query's projections. 1360 """ 1361 return self.expression.named_selects if isinstance(self.expression, Query) else [] 1362 1363 1364class DML(Expression): 1365 def returning( 1366 self, 1367 expression: ExpOrStr, 1368 dialect: DialectType = None, 1369 copy: bool = True, 1370 **opts, 1371 ) -> DML: 1372 """ 1373 Set the RETURNING expression. Not supported by all dialects. 1374 1375 Example: 1376 >>> delete("tbl").returning("*", dialect="postgres").sql() 1377 'DELETE FROM tbl RETURNING *' 1378 1379 Args: 1380 expression: the SQL code strings to parse. 1381 If an `Expression` instance is passed, it will be used as-is. 1382 dialect: the dialect used to parse the input expressions. 1383 copy: if `False`, modify this expression instance in-place. 1384 opts: other options to use to parse the input expressions. 1385 1386 Returns: 1387 Delete: the modified expression. 1388 """ 1389 return _apply_builder( 1390 expression=expression, 1391 instance=self, 1392 arg="returning", 1393 prefix="RETURNING", 1394 dialect=dialect, 1395 copy=copy, 1396 into=Returning, 1397 **opts, 1398 ) 1399 1400 1401class Create(DDL): 1402 arg_types = { 1403 "with": False, 1404 "this": True, 1405 "kind": True, 1406 "expression": False, 1407 "exists": False, 1408 "properties": False, 1409 "replace": False, 1410 "refresh": False, 1411 "unique": False, 1412 "indexes": False, 1413 "no_schema_binding": False, 1414 "begin": False, 1415 "end": False, 1416 "clone": False, 1417 "concurrently": False, 1418 "clustered": False, 1419 } 1420 1421 @property 1422 def kind(self) -> t.Optional[str]: 1423 kind = self.args.get("kind") 1424 return kind and kind.upper() 1425 1426 1427class SequenceProperties(Expression): 1428 arg_types = { 1429 "increment": False, 1430 "minvalue": False, 1431 "maxvalue": False, 1432 "cache": False, 1433 "start": False, 1434 "owned": False, 1435 "options": False, 1436 } 1437 1438 1439class TruncateTable(Expression): 1440 arg_types = { 1441 "expressions": True, 1442 "is_database": False, 1443 "exists": False, 1444 "only": False, 1445 "cluster": False, 1446 "identity": False, 1447 "option": False, 1448 "partition": False, 1449 } 1450 1451 1452# https://docs.snowflake.com/en/sql-reference/sql/create-clone 1453# https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#create_table_clone_statement 1454# https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#create_table_copy 1455class Clone(Expression): 1456 arg_types = {"this": True, "shallow": False, "copy": False} 1457 1458 1459class Describe(Expression): 1460 arg_types = { 1461 "this": True, 1462 "style": False, 1463 "kind": False, 1464 "expressions": False, 1465 "partition": False, 1466 } 1467 1468 1469# https://duckdb.org/docs/guides/meta/summarize.html 1470class Summarize(Expression): 1471 arg_types = {"this": True, "table": False} 1472 1473 1474class Kill(Expression): 1475 arg_types = {"this": True, "kind": False} 1476 1477 1478class Pragma(Expression): 1479 pass 1480 1481 1482class Declare(Expression): 1483 arg_types = {"expressions": True} 1484 1485 1486class DeclareItem(Expression): 1487 arg_types = {"this": True, "kind": True, "default": False} 1488 1489 1490class Set(Expression): 1491 arg_types = {"expressions": False, "unset": False, "tag": False} 1492 1493 1494class Heredoc(Expression): 1495 arg_types = {"this": True, "tag": False} 1496 1497 1498class SetItem(Expression): 1499 arg_types = { 1500 "this": False, 1501 "expressions": False, 1502 "kind": False, 1503 "collate": False, # MySQL SET NAMES statement 1504 "global": False, 1505 } 1506 1507 1508class Show(Expression): 1509 arg_types = { 1510 "this": True, 1511 "history": False, 1512 "terse": False, 1513 "target": False, 1514 "offset": False, 1515 "starts_with": False, 1516 "limit": False, 1517 "from": False, 1518 "like": False, 1519 "where": False, 1520 "db": False, 1521 "scope": False, 1522 "scope_kind": False, 1523 "full": False, 1524 "mutex": False, 1525 "query": False, 1526 "channel": False, 1527 "global": False, 1528 "log": False, 1529 "position": False, 1530 "types": False, 1531 } 1532 1533 1534class UserDefinedFunction(Expression): 1535 arg_types = {"this": True, "expressions": False, "wrapped": False} 1536 1537 1538class CharacterSet(Expression): 1539 arg_types = {"this": True, "default": False} 1540 1541 1542class With(Expression): 1543 arg_types = {"expressions": True, "recursive": False} 1544 1545 @property 1546 def recursive(self) -> bool: 1547 return bool(self.args.get("recursive")) 1548 1549 1550class WithinGroup(Expression): 1551 arg_types = {"this": True, "expression": False} 1552 1553 1554# clickhouse supports scalar ctes 1555# https://clickhouse.com/docs/en/sql-reference/statements/select/with 1556class CTE(DerivedTable): 1557 arg_types = { 1558 "this": True, 1559 "alias": True, 1560 "scalar": False, 1561 "materialized": False, 1562 } 1563 1564 1565class ProjectionDef(Expression): 1566 arg_types = {"this": True, "expression": True} 1567 1568 1569class TableAlias(Expression): 1570 arg_types = {"this": False, "columns": False} 1571 1572 @property 1573 def columns(self): 1574 return self.args.get("columns") or [] 1575 1576 1577class BitString(Condition): 1578 pass 1579 1580 1581class HexString(Condition): 1582 pass 1583 1584 1585class ByteString(Condition): 1586 pass 1587 1588 1589class RawString(Condition): 1590 pass 1591 1592 1593class UnicodeString(Condition): 1594 arg_types = {"this": True, "escape": False} 1595 1596 1597class Column(Condition): 1598 arg_types = {"this": True, "table": False, "db": False, "catalog": False, "join_mark": False} 1599 1600 @property 1601 def table(self) -> str: 1602 return self.text("table") 1603 1604 @property 1605 def db(self) -> str: 1606 return self.text("db") 1607 1608 @property 1609 def catalog(self) -> str: 1610 return self.text("catalog") 1611 1612 @property 1613 def output_name(self) -> str: 1614 return self.name 1615 1616 @property 1617 def parts(self) -> t.List[Identifier]: 1618 """Return the parts of a column in order catalog, db, table, name.""" 1619 return [ 1620 t.cast(Identifier, self.args[part]) 1621 for part in ("catalog", "db", "table", "this") 1622 if self.args.get(part) 1623 ] 1624 1625 def to_dot(self) -> Dot | Identifier: 1626 """Converts the column into a dot expression.""" 1627 parts = self.parts 1628 parent = self.parent 1629 1630 while parent: 1631 if isinstance(parent, Dot): 1632 parts.append(parent.expression) 1633 parent = parent.parent 1634 1635 return Dot.build(deepcopy(parts)) if len(parts) > 1 else parts[0] 1636 1637 1638class ColumnPosition(Expression): 1639 arg_types = {"this": False, "position": True} 1640 1641 1642class ColumnDef(Expression): 1643 arg_types = { 1644 "this": True, 1645 "kind": False, 1646 "constraints": False, 1647 "exists": False, 1648 "position": False, 1649 } 1650 1651 @property 1652 def constraints(self) -> t.List[ColumnConstraint]: 1653 return self.args.get("constraints") or [] 1654 1655 @property 1656 def kind(self) -> t.Optional[DataType]: 1657 return self.args.get("kind") 1658 1659 1660class AlterColumn(Expression): 1661 arg_types = { 1662 "this": True, 1663 "dtype": False, 1664 "collate": False, 1665 "using": False, 1666 "default": False, 1667 "drop": False, 1668 "comment": False, 1669 "allow_null": False, 1670 } 1671 1672 1673# https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html 1674class AlterDistStyle(Expression): 1675 pass 1676 1677 1678class AlterSortKey(Expression): 1679 arg_types = {"this": False, "expressions": False, "compound": False} 1680 1681 1682class AlterSet(Expression): 1683 arg_types = { 1684 "expressions": False, 1685 "option": False, 1686 "tablespace": False, 1687 "access_method": False, 1688 "file_format": False, 1689 "copy_options": False, 1690 "tag": False, 1691 "location": False, 1692 "serde": False, 1693 } 1694 1695 1696class RenameColumn(Expression): 1697 arg_types = {"this": True, "to": True, "exists": False} 1698 1699 1700class RenameTable(Expression): 1701 pass 1702 1703 1704class SwapTable(Expression): 1705 pass 1706 1707 1708class Comment(Expression): 1709 arg_types = { 1710 "this": True, 1711 "kind": True, 1712 "expression": True, 1713 "exists": False, 1714 "materialized": False, 1715 } 1716 1717 1718class Comprehension(Expression): 1719 arg_types = {"this": True, "expression": True, "iterator": True, "condition": False} 1720 1721 1722# https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#mergetree-table-ttl 1723class MergeTreeTTLAction(Expression): 1724 arg_types = { 1725 "this": True, 1726 "delete": False, 1727 "recompress": False, 1728 "to_disk": False, 1729 "to_volume": False, 1730 } 1731 1732 1733# https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#mergetree-table-ttl 1734class MergeTreeTTL(Expression): 1735 arg_types = { 1736 "expressions": True, 1737 "where": False, 1738 "group": False, 1739 "aggregates": False, 1740 } 1741 1742 1743# https://dev.mysql.com/doc/refman/8.0/en/create-table.html 1744class IndexConstraintOption(Expression): 1745 arg_types = { 1746 "key_block_size": False, 1747 "using": False, 1748 "parser": False, 1749 "comment": False, 1750 "visible": False, 1751 "engine_attr": False, 1752 "secondary_engine_attr": False, 1753 } 1754 1755 1756class ColumnConstraint(Expression): 1757 arg_types = {"this": False, "kind": True} 1758 1759 @property 1760 def kind(self) -> ColumnConstraintKind: 1761 return self.args["kind"] 1762 1763 1764class ColumnConstraintKind(Expression): 1765 pass 1766 1767 1768class AutoIncrementColumnConstraint(ColumnConstraintKind): 1769 pass 1770 1771 1772class PeriodForSystemTimeConstraint(ColumnConstraintKind): 1773 arg_types = {"this": True, "expression": True} 1774 1775 1776class CaseSpecificColumnConstraint(ColumnConstraintKind): 1777 arg_types = {"not_": True} 1778 1779 1780class CharacterSetColumnConstraint(ColumnConstraintKind): 1781 arg_types = {"this": True} 1782 1783 1784class CheckColumnConstraint(ColumnConstraintKind): 1785 arg_types = {"this": True, "enforced": False} 1786 1787 1788class ClusteredColumnConstraint(ColumnConstraintKind): 1789 pass 1790 1791 1792class CollateColumnConstraint(ColumnConstraintKind): 1793 pass 1794 1795 1796class CommentColumnConstraint(ColumnConstraintKind): 1797 pass 1798 1799 1800class CompressColumnConstraint(ColumnConstraintKind): 1801 arg_types = {"this": False} 1802 1803 1804class DateFormatColumnConstraint(ColumnConstraintKind): 1805 arg_types = {"this": True} 1806 1807 1808class DefaultColumnConstraint(ColumnConstraintKind): 1809 pass 1810 1811 1812class EncodeColumnConstraint(ColumnConstraintKind): 1813 pass 1814 1815 1816# https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-EXCLUDE 1817class ExcludeColumnConstraint(ColumnConstraintKind): 1818 pass 1819 1820 1821class EphemeralColumnConstraint(ColumnConstraintKind): 1822 arg_types = {"this": False} 1823 1824 1825class WithOperator(Expression): 1826 arg_types = {"this": True, "op": True} 1827 1828 1829class GeneratedAsIdentityColumnConstraint(ColumnConstraintKind): 1830 # this: True -> ALWAYS, this: False -> BY DEFAULT 1831 arg_types = { 1832 "this": False, 1833 "expression": False, 1834 "on_null": False, 1835 "start": False, 1836 "increment": False, 1837 "minvalue": False, 1838 "maxvalue": False, 1839 "cycle": False, 1840 } 1841 1842 1843class GeneratedAsRowColumnConstraint(ColumnConstraintKind): 1844 arg_types = {"start": False, "hidden": False} 1845 1846 1847# https://dev.mysql.com/doc/refman/8.0/en/create-table.html 1848# https://github.com/ClickHouse/ClickHouse/blob/master/src/Parsers/ParserCreateQuery.h#L646 1849class IndexColumnConstraint(ColumnConstraintKind): 1850 arg_types = { 1851 "this": False, 1852 "expressions": False, 1853 "kind": False, 1854 "index_type": False, 1855 "options": False, 1856 "expression": False, # Clickhouse 1857 "granularity": False, 1858 } 1859 1860 1861class InlineLengthColumnConstraint(ColumnConstraintKind): 1862 pass 1863 1864 1865class NonClusteredColumnConstraint(ColumnConstraintKind): 1866 pass 1867 1868 1869class NotForReplicationColumnConstraint(ColumnConstraintKind): 1870 arg_types = {} 1871 1872 1873# https://docs.snowflake.com/en/sql-reference/sql/create-table 1874class MaskingPolicyColumnConstraint(ColumnConstraintKind): 1875 arg_types = {"this": True, "expressions": False} 1876 1877 1878class NotNullColumnConstraint(ColumnConstraintKind): 1879 arg_types = {"allow_null": False} 1880 1881 1882# https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html 1883class OnUpdateColumnConstraint(ColumnConstraintKind): 1884 pass 1885 1886 1887# https://docs.snowflake.com/en/sql-reference/sql/create-table 1888class TagColumnConstraint(ColumnConstraintKind): 1889 arg_types = {"expressions": True} 1890 1891 1892# https://docs.snowflake.com/en/sql-reference/sql/create-external-table#optional-parameters 1893class TransformColumnConstraint(ColumnConstraintKind): 1894 pass 1895 1896 1897class PrimaryKeyColumnConstraint(ColumnConstraintKind): 1898 arg_types = {"desc": False} 1899 1900 1901class TitleColumnConstraint(ColumnConstraintKind): 1902 pass 1903 1904 1905class UniqueColumnConstraint(ColumnConstraintKind): 1906 arg_types = {"this": False, "index_type": False, "on_conflict": False, "nulls": False} 1907 1908 1909class UppercaseColumnConstraint(ColumnConstraintKind): 1910 arg_types: t.Dict[str, t.Any] = {} 1911 1912 1913class PathColumnConstraint(ColumnConstraintKind): 1914 pass 1915 1916 1917# https://docs.snowflake.com/en/sql-reference/sql/create-table 1918class ProjectionPolicyColumnConstraint(ColumnConstraintKind): 1919 pass 1920 1921 1922# computed column expression 1923# https://learn.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql?view=sql-server-ver16 1924class ComputedColumnConstraint(ColumnConstraintKind): 1925 arg_types = {"this": True, "persisted": False, "not_null": False} 1926 1927 1928class Constraint(Expression): 1929 arg_types = {"this": True, "expressions": True} 1930 1931 1932class Delete(DML): 1933 arg_types = { 1934 "with": False, 1935 "this": False, 1936 "using": False, 1937 "where": False, 1938 "returning": False, 1939 "limit": False, 1940 "tables": False, # Multiple-Table Syntax (MySQL) 1941 } 1942 1943 def delete( 1944 self, 1945 table: ExpOrStr, 1946 dialect: DialectType = None, 1947 copy: bool = True, 1948 **opts, 1949 ) -> Delete: 1950 """ 1951 Create a DELETE expression or replace the table on an existing DELETE expression. 1952 1953 Example: 1954 >>> delete("tbl").sql() 1955 'DELETE FROM tbl' 1956 1957 Args: 1958 table: the table from which to delete. 1959 dialect: the dialect used to parse the input expression. 1960 copy: if `False`, modify this expression instance in-place. 1961 opts: other options to use to parse the input expressions. 1962 1963 Returns: 1964 Delete: the modified expression. 1965 """ 1966 return _apply_builder( 1967 expression=table, 1968 instance=self, 1969 arg="this", 1970 dialect=dialect, 1971 into=Table, 1972 copy=copy, 1973 **opts, 1974 ) 1975 1976 def where( 1977 self, 1978 *expressions: t.Optional[ExpOrStr], 1979 append: bool = True, 1980 dialect: DialectType = None, 1981 copy: bool = True, 1982 **opts, 1983 ) -> Delete: 1984 """ 1985 Append to or set the WHERE expressions. 1986 1987 Example: 1988 >>> delete("tbl").where("x = 'a' OR x < 'b'").sql() 1989 "DELETE FROM tbl WHERE x = 'a' OR x < 'b'" 1990 1991 Args: 1992 *expressions: the SQL code strings to parse. 1993 If an `Expression` instance is passed, it will be used as-is. 1994 Multiple expressions are combined with an AND operator. 1995 append: if `True`, AND the new expressions to any existing expression. 1996 Otherwise, this resets the expression. 1997 dialect: the dialect used to parse the input expressions. 1998 copy: if `False`, modify this expression instance in-place. 1999 opts: other options to use to parse the input expressions. 2000 2001 Returns: 2002 Delete: the modified expression. 2003 """ 2004 return _apply_conjunction_builder( 2005 *expressions, 2006 instance=self, 2007 arg="where", 2008 append=append, 2009 into=Where, 2010 dialect=dialect, 2011 copy=copy, 2012 **opts, 2013 ) 2014 2015 2016class Drop(Expression): 2017 arg_types = { 2018 "this": False, 2019 "kind": False, 2020 "expressions": False, 2021 "exists": False, 2022 "temporary": False, 2023 "materialized": False, 2024 "cascade": False, 2025 "constraints": False, 2026 "purge": False, 2027 "cluster": False, 2028 "concurrently": False, 2029 } 2030 2031 @property 2032 def kind(self) -> t.Optional[str]: 2033 kind = self.args.get("kind") 2034 return kind and kind.upper() 2035 2036 2037class Filter(Expression): 2038 arg_types = {"this": True, "expression": True} 2039 2040 2041class Check(Expression): 2042 pass 2043 2044 2045class Changes(Expression): 2046 arg_types = {"information": True, "at_before": False, "end": False} 2047 2048 2049# https://docs.snowflake.com/en/sql-reference/constructs/connect-by 2050class Connect(Expression): 2051 arg_types = {"start": False, "connect": True, "nocycle": False} 2052 2053 2054class CopyParameter(Expression): 2055 arg_types = {"this": True, "expression": False, "expressions": False} 2056 2057 2058class Copy(DML): 2059 arg_types = { 2060 "this": True, 2061 "kind": True, 2062 "files": True, 2063 "credentials": False, 2064 "format": False, 2065 "params": False, 2066 } 2067 2068 2069class Credentials(Expression): 2070 arg_types = { 2071 "credentials": False, 2072 "encryption": False, 2073 "storage": False, 2074 "iam_role": False, 2075 "region": False, 2076 } 2077 2078 2079class Prior(Expression): 2080 pass 2081 2082 2083class Directory(Expression): 2084 # https://spark.apache.org/docs/3.0.0-preview/sql-ref-syntax-dml-insert-overwrite-directory-hive.html 2085 arg_types = {"this": True, "local": False, "row_format": False} 2086 2087 2088class ForeignKey(Expression): 2089 arg_types = { 2090 "expressions": True, 2091 "reference": False, 2092 "delete": False, 2093 "update": False, 2094 } 2095 2096 2097class ColumnPrefix(Expression): 2098 arg_types = {"this": True, "expression": True} 2099 2100 2101class PrimaryKey(Expression): 2102 arg_types = {"expressions": True, "options": False} 2103 2104 2105# https://www.postgresql.org/docs/9.1/sql-selectinto.html 2106# https://docs.aws.amazon.com/redshift/latest/dg/r_SELECT_INTO.html#r_SELECT_INTO-examples 2107class Into(Expression): 2108 arg_types = {"this": True, "temporary": False, "unlogged": False} 2109 2110 2111class From(Expression): 2112 @property 2113 def name(self) -> str: 2114 return self.this.name 2115 2116 @property 2117 def alias_or_name(self) -> str: 2118 return self.this.alias_or_name 2119 2120 2121class Having(Expression): 2122 pass 2123 2124 2125class Hint(Expression): 2126 arg_types = {"expressions": True} 2127 2128 2129class JoinHint(Expression): 2130 arg_types = {"this": True, "expressions": True} 2131 2132 2133class Identifier(Expression): 2134 arg_types = {"this": True, "quoted": False, "global": False, "temporary": False} 2135 2136 @property 2137 def quoted(self) -> bool: 2138 return bool(self.args.get("quoted")) 2139 2140 @property 2141 def hashable_args(self) -> t.Any: 2142 return (self.this, self.quoted) 2143 2144 @property 2145 def output_name(self) -> str: 2146 return self.name 2147 2148 2149# https://www.postgresql.org/docs/current/indexes-opclass.html 2150class Opclass(Expression): 2151 arg_types = {"this": True, "expression": True} 2152 2153 2154class Index(Expression): 2155 arg_types = { 2156 "this": False, 2157 "table": False, 2158 "unique": False, 2159 "primary": False, 2160 "amp": False, # teradata 2161 "params": False, 2162 } 2163 2164 2165class IndexParameters(Expression): 2166 arg_types = { 2167 "using": False, 2168 "include": False, 2169 "columns": False, 2170 "with_storage": False, 2171 "partition_by": False, 2172 "tablespace": False, 2173 "where": False, 2174 "on": False, 2175 } 2176 2177 2178class Insert(DDL, DML): 2179 arg_types = { 2180 "hint": False, 2181 "with": False, 2182 "is_function": False, 2183 "this": False, 2184 "expression": False, 2185 "conflict": False, 2186 "returning": False, 2187 "overwrite": False, 2188 "exists": False, 2189 "alternative": False, 2190 "where": False, 2191 "ignore": False, 2192 "by_name": False, 2193 "stored": False, 2194 "partition": False, 2195 "settings": False, 2196 "source": False, 2197 } 2198 2199 def with_( 2200 self, 2201 alias: ExpOrStr, 2202 as_: ExpOrStr, 2203 recursive: t.Optional[bool] = None, 2204 materialized: t.Optional[bool] = None, 2205 append: bool = True, 2206 dialect: DialectType = None, 2207 copy: bool = True, 2208 **opts, 2209 ) -> Insert: 2210 """ 2211 Append to or set the common table expressions. 2212 2213 Example: 2214 >>> insert("SELECT x FROM cte", "t").with_("cte", as_="SELECT * FROM tbl").sql() 2215 'WITH cte AS (SELECT * FROM tbl) INSERT INTO t SELECT x FROM cte' 2216 2217 Args: 2218 alias: the SQL code string to parse as the table name. 2219 If an `Expression` instance is passed, this is used as-is. 2220 as_: the SQL code string to parse as the table expression. 2221 If an `Expression` instance is passed, it will be used as-is. 2222 recursive: set the RECURSIVE part of the expression. Defaults to `False`. 2223 materialized: set the MATERIALIZED part of the expression. 2224 append: if `True`, add to any existing expressions. 2225 Otherwise, this resets the expressions. 2226 dialect: the dialect used to parse the input expression. 2227 copy: if `False`, modify this expression instance in-place. 2228 opts: other options to use to parse the input expressions. 2229 2230 Returns: 2231 The modified expression. 2232 """ 2233 return _apply_cte_builder( 2234 self, 2235 alias, 2236 as_, 2237 recursive=recursive, 2238 materialized=materialized, 2239 append=append, 2240 dialect=dialect, 2241 copy=copy, 2242 **opts, 2243 ) 2244 2245 2246class ConditionalInsert(Expression): 2247 arg_types = {"this": True, "expression": False, "else_": False} 2248 2249 2250class MultitableInserts(Expression): 2251 arg_types = {"expressions": True, "kind": True, "source": True} 2252 2253 2254class OnConflict(Expression): 2255 arg_types = { 2256 "duplicate": False, 2257 "expressions": False, 2258 "action": False, 2259 "conflict_keys": False, 2260 "constraint": False, 2261 } 2262 2263 2264class OnCondition(Expression): 2265 arg_types = {"error": False, "empty": False, "null": False} 2266 2267 2268class Returning(Expression): 2269 arg_types = {"expressions": True, "into": False} 2270 2271 2272# https://dev.mysql.com/doc/refman/8.0/en/charset-introducer.html 2273class Introducer(Expression): 2274 arg_types = {"this": True, "expression": True} 2275 2276 2277# national char, like n'utf8' 2278class National(Expression): 2279 pass 2280 2281 2282class LoadData(Expression): 2283 arg_types = { 2284 "this": True, 2285 "local": False, 2286 "overwrite": False, 2287 "inpath": True, 2288 "partition": False, 2289 "input_format": False, 2290 "serde": False, 2291 } 2292 2293 2294class Partition(Expression): 2295 arg_types = {"expressions": True} 2296 2297 2298class PartitionRange(Expression): 2299 arg_types = {"this": True, "expression": True} 2300 2301 2302# https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#how-to-set-partition-expression 2303class PartitionId(Expression): 2304 pass 2305 2306 2307class Fetch(Expression): 2308 arg_types = { 2309 "direction": False, 2310 "count": False, 2311 "percent": False, 2312 "with_ties": False, 2313 } 2314 2315 2316class Group(Expression): 2317 arg_types = { 2318 "expressions": False, 2319 "grouping_sets": False, 2320 "cube": False, 2321 "rollup": False, 2322 "totals": False, 2323 "all": False, 2324 } 2325 2326 2327class Cube(Expression): 2328 arg_types = {"expressions": False} 2329 2330 2331class Rollup(Expression): 2332 arg_types = {"expressions": False} 2333 2334 2335class GroupingSets(Expression): 2336 arg_types = {"expressions": True} 2337 2338 2339class Lambda(Expression): 2340 arg_types = {"this": True, "expressions": True} 2341 2342 2343class Limit(Expression): 2344 arg_types = {"this": False, "expression": True, "offset": False, "expressions": False} 2345 2346 2347class Literal(Condition): 2348 arg_types = {"this": True, "is_string": True} 2349 2350 @property 2351 def hashable_args(self) -> t.Any: 2352 return (self.this, self.args.get("is_string")) 2353 2354 @classmethod 2355 def number(cls, number) -> Literal: 2356 return cls(this=str(number), is_string=False) 2357 2358 @classmethod 2359 def string(cls, string) -> Literal: 2360 return cls(this=str(string), is_string=True) 2361 2362 @property 2363 def output_name(self) -> str: 2364 return self.name 2365 2366 def to_py(self) -> int | str | Decimal: 2367 if self.is_number: 2368 try: 2369 return int(self.this) 2370 except ValueError: 2371 return Decimal(self.this) 2372 return self.this 2373 2374 2375class Join(Expression): 2376 arg_types = { 2377 "this": True, 2378 "on": False, 2379 "side": False, 2380 "kind": False, 2381 "using": False, 2382 "method": False, 2383 "global": False, 2384 "hint": False, 2385 "match_condition": False, # Snowflake 2386 } 2387 2388 @property 2389 def method(self) -> str: 2390 return self.text("method").upper() 2391 2392 @property 2393 def kind(self) -> str: 2394 return self.text("kind").upper() 2395 2396 @property 2397 def side(self) -> str: 2398 return self.text("side").upper() 2399 2400 @property 2401 def hint(self) -> str: 2402 return self.text("hint").upper() 2403 2404 @property 2405 def alias_or_name(self) -> str: 2406 return self.this.alias_or_name 2407 2408 def on( 2409 self, 2410 *expressions: t.Optional[ExpOrStr], 2411 append: bool = True, 2412 dialect: DialectType = None, 2413 copy: bool = True, 2414 **opts, 2415 ) -> Join: 2416 """ 2417 Append to or set the ON expressions. 2418 2419 Example: 2420 >>> import sqlglot 2421 >>> sqlglot.parse_one("JOIN x", into=Join).on("y = 1").sql() 2422 'JOIN x ON y = 1' 2423 2424 Args: 2425 *expressions: the SQL code strings to parse. 2426 If an `Expression` instance is passed, it will be used as-is. 2427 Multiple expressions are combined with an AND operator. 2428 append: if `True`, AND the new expressions to any existing expression. 2429 Otherwise, this resets the expression. 2430 dialect: the dialect used to parse the input expressions. 2431 copy: if `False`, modify this expression instance in-place. 2432 opts: other options to use to parse the input expressions. 2433 2434 Returns: 2435 The modified Join expression. 2436 """ 2437 join = _apply_conjunction_builder( 2438 *expressions, 2439 instance=self, 2440 arg="on", 2441 append=append, 2442 dialect=dialect, 2443 copy=copy, 2444 **opts, 2445 ) 2446 2447 if join.kind == "CROSS": 2448 join.set("kind", None) 2449 2450 return join 2451 2452 def using( 2453 self, 2454 *expressions: t.Optional[ExpOrStr], 2455 append: bool = True, 2456 dialect: DialectType = None, 2457 copy: bool = True, 2458 **opts, 2459 ) -> Join: 2460 """ 2461 Append to or set the USING expressions. 2462 2463 Example: 2464 >>> import sqlglot 2465 >>> sqlglot.parse_one("JOIN x", into=Join).using("foo", "bla").sql() 2466 'JOIN x USING (foo, bla)' 2467 2468 Args: 2469 *expressions: the SQL code strings to parse. 2470 If an `Expression` instance is passed, it will be used as-is. 2471 append: if `True`, concatenate the new expressions to the existing "using" list. 2472 Otherwise, this resets the expression. 2473 dialect: the dialect used to parse the input expressions. 2474 copy: if `False`, modify this expression instance in-place. 2475 opts: other options to use to parse the input expressions. 2476 2477 Returns: 2478 The modified Join expression. 2479 """ 2480 join = _apply_list_builder( 2481 *expressions, 2482 instance=self, 2483 arg="using", 2484 append=append, 2485 dialect=dialect, 2486 copy=copy, 2487 **opts, 2488 ) 2489 2490 if join.kind == "CROSS": 2491 join.set("kind", None) 2492 2493 return join 2494 2495 2496class Lateral(UDTF): 2497 arg_types = { 2498 "this": True, 2499 "view": False, 2500 "outer": False, 2501 "alias": False, 2502 "cross_apply": False, # True -> CROSS APPLY, False -> OUTER APPLY 2503 } 2504 2505 2506class MatchRecognizeMeasure(Expression): 2507 arg_types = { 2508 "this": True, 2509 "window_frame": False, 2510 } 2511 2512 2513class MatchRecognize(Expression): 2514 arg_types = { 2515 "partition_by": False, 2516 "order": False, 2517 "measures": False, 2518 "rows": False, 2519 "after": False, 2520 "pattern": False, 2521 "define": False, 2522 "alias": False, 2523 } 2524 2525 2526# Clickhouse FROM FINAL modifier 2527# https://clickhouse.com/docs/en/sql-reference/statements/select/from/#final-modifier 2528class Final(Expression): 2529 pass 2530 2531 2532class Offset(Expression): 2533 arg_types = {"this": False, "expression": True, "expressions": False} 2534 2535 2536class Order(Expression): 2537 arg_types = {"this": False, "expressions": True, "siblings": False} 2538 2539 2540# https://clickhouse.com/docs/en/sql-reference/statements/select/order-by#order-by-expr-with-fill-modifier 2541class WithFill(Expression): 2542 arg_types = { 2543 "from": False, 2544 "to": False, 2545 "step": False, 2546 "interpolate": False, 2547 } 2548 2549 2550# hive specific sorts 2551# https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy 2552class Cluster(Order): 2553 pass 2554 2555 2556class Distribute(Order): 2557 pass 2558 2559 2560class Sort(Order): 2561 pass 2562 2563 2564class Ordered(Expression): 2565 arg_types = {"this": True, "desc": False, "nulls_first": True, "with_fill": False} 2566 2567 2568class Property(Expression): 2569 arg_types = {"this": True, "value": True} 2570 2571 2572class AllowedValuesProperty(Expression): 2573 arg_types = {"expressions": True} 2574 2575 2576class AlgorithmProperty(Property): 2577 arg_types = {"this": True} 2578 2579 2580class AutoIncrementProperty(Property): 2581 arg_types = {"this": True} 2582 2583 2584# https://docs.aws.amazon.com/prescriptive-guidance/latest/materialized-views-redshift/refreshing-materialized-views.html 2585class AutoRefreshProperty(Property): 2586 arg_types = {"this": True} 2587 2588 2589class BackupProperty(Property): 2590 arg_types = {"this": True} 2591 2592 2593class BlockCompressionProperty(Property): 2594 arg_types = { 2595 "autotemp": False, 2596 "always": False, 2597 "default": False, 2598 "manual": False, 2599 "never": False, 2600 } 2601 2602 2603class CharacterSetProperty(Property): 2604 arg_types = {"this": True, "default": True} 2605 2606 2607class ChecksumProperty(Property): 2608 arg_types = {"on": False, "default": False} 2609 2610 2611class CollateProperty(Property): 2612 arg_types = {"this": True, "default": False} 2613 2614 2615class CopyGrantsProperty(Property): 2616 arg_types = {} 2617 2618 2619class DataBlocksizeProperty(Property): 2620 arg_types = { 2621 "size": False, 2622 "units": False, 2623 "minimum": False, 2624 "maximum": False, 2625 "default": False, 2626 } 2627 2628 2629class DataDeletionProperty(Property): 2630 arg_types = {"on": True, "filter_col": False, "retention_period": False} 2631 2632 2633class DefinerProperty(Property): 2634 arg_types = {"this": True} 2635 2636 2637class DistKeyProperty(Property): 2638 arg_types = {"this": True} 2639 2640 2641# https://docs.starrocks.io/docs/sql-reference/sql-statements/data-definition/CREATE_TABLE/#distribution_desc 2642# https://doris.apache.org/docs/sql-manual/sql-statements/Data-Definition-Statements/Create/CREATE-TABLE?_highlight=create&_highlight=table#distribution_desc 2643class DistributedByProperty(Property): 2644 arg_types = {"expressions": False, "kind": True, "buckets": False, "order": False} 2645 2646 2647class DistStyleProperty(Property): 2648 arg_types = {"this": True} 2649 2650 2651class DuplicateKeyProperty(Property): 2652 arg_types = {"expressions": True} 2653 2654 2655class EngineProperty(Property): 2656 arg_types = {"this": True} 2657 2658 2659class HeapProperty(Property): 2660 arg_types = {} 2661 2662 2663class ToTableProperty(Property): 2664 arg_types = {"this": True} 2665 2666 2667class ExecuteAsProperty(Property): 2668 arg_types = {"this": True} 2669 2670 2671class ExternalProperty(Property): 2672 arg_types = {"this": False} 2673 2674 2675class FallbackProperty(Property): 2676 arg_types = {"no": True, "protection": False} 2677 2678 2679class FileFormatProperty(Property): 2680 arg_types = {"this": True} 2681 2682 2683class FreespaceProperty(Property): 2684 arg_types = {"this": True, "percent": False} 2685 2686 2687class GlobalProperty(Property): 2688 arg_types = {} 2689 2690 2691class IcebergProperty(Property): 2692 arg_types = {} 2693 2694 2695class InheritsProperty(Property): 2696 arg_types = {"expressions": True} 2697 2698 2699class InputModelProperty(Property): 2700 arg_types = {"this": True} 2701 2702 2703class OutputModelProperty(Property): 2704 arg_types = {"this": True} 2705 2706 2707class IsolatedLoadingProperty(Property): 2708 arg_types = {"no": False, "concurrent": False, "target": False} 2709 2710 2711class JournalProperty(Property): 2712 arg_types = { 2713 "no": False, 2714 "dual": False, 2715 "before": False, 2716 "local": False, 2717 "after": False, 2718 } 2719 2720 2721class LanguageProperty(Property): 2722 arg_types = {"this": True} 2723 2724 2725# spark ddl 2726class ClusteredByProperty(Property): 2727 arg_types = {"expressions": True, "sorted_by": False, "buckets": True} 2728 2729 2730class DictProperty(Property): 2731 arg_types = {"this": True, "kind": True, "settings": False} 2732 2733 2734class DictSubProperty(Property): 2735 pass 2736 2737 2738class DictRange(Property): 2739 arg_types = {"this": True, "min": True, "max": True} 2740 2741 2742class DynamicProperty(Property): 2743 arg_types = {} 2744 2745 2746# Clickhouse CREATE ... ON CLUSTER modifier 2747# https://clickhouse.com/docs/en/sql-reference/distributed-ddl 2748class OnCluster(Property): 2749 arg_types = {"this": True} 2750 2751 2752# Clickhouse EMPTY table "property" 2753class EmptyProperty(Property): 2754 arg_types = {} 2755 2756 2757class LikeProperty(Property): 2758 arg_types = {"this": True, "expressions": False} 2759 2760 2761class LocationProperty(Property): 2762 arg_types = {"this": True} 2763 2764 2765class LockProperty(Property): 2766 arg_types = {"this": True} 2767 2768 2769class LockingProperty(Property): 2770 arg_types = { 2771 "this": False, 2772 "kind": True, 2773 "for_or_in": False, 2774 "lock_type": True, 2775 "override": False, 2776 } 2777 2778 2779class LogProperty(Property): 2780 arg_types = {"no": True} 2781 2782 2783class MaterializedProperty(Property): 2784 arg_types = {"this": False} 2785 2786 2787class MergeBlockRatioProperty(Property): 2788 arg_types = {"this": False, "no": False, "default": False, "percent": False} 2789 2790 2791class NoPrimaryIndexProperty(Property): 2792 arg_types = {} 2793 2794 2795class OnProperty(Property): 2796 arg_types = {"this": True} 2797 2798 2799class OnCommitProperty(Property): 2800 arg_types = {"delete": False} 2801 2802 2803class PartitionedByProperty(Property): 2804 arg_types = {"this": True} 2805 2806 2807# https://www.postgresql.org/docs/current/sql-createtable.html 2808class PartitionBoundSpec(Expression): 2809 # this -> IN / MODULUS, expression -> REMAINDER, from_expressions -> FROM (...), to_expressions -> TO (...) 2810 arg_types = { 2811 "this": False, 2812 "expression": False, 2813 "from_expressions": False, 2814 "to_expressions": False, 2815 } 2816 2817 2818class PartitionedOfProperty(Property): 2819 # this -> parent_table (schema), expression -> FOR VALUES ... / DEFAULT 2820 arg_types = {"this": True, "expression": True} 2821 2822 2823class StreamingTableProperty(Property): 2824 arg_types = {} 2825 2826 2827class RemoteWithConnectionModelProperty(Property): 2828 arg_types = {"this": True} 2829 2830 2831class ReturnsProperty(Property): 2832 arg_types = {"this": False, "is_table": False, "table": False, "null": False} 2833 2834 2835class StrictProperty(Property): 2836 arg_types = {} 2837 2838 2839class RowFormatProperty(Property): 2840 arg_types = {"this": True} 2841 2842 2843class RowFormatDelimitedProperty(Property): 2844 # https://cwiki.apache.org/confluence/display/hive/languagemanual+dml 2845 arg_types = { 2846 "fields": False, 2847 "escaped": False, 2848 "collection_items": False, 2849 "map_keys": False, 2850 "lines": False, 2851 "null": False, 2852 "serde": False, 2853 } 2854 2855 2856class RowFormatSerdeProperty(Property): 2857 arg_types = {"this": True, "serde_properties": False} 2858 2859 2860# https://spark.apache.org/docs/3.1.2/sql-ref-syntax-qry-select-transform.html 2861class QueryTransform(Expression): 2862 arg_types = { 2863 "expressions": True, 2864 "command_script": True, 2865 "schema": False, 2866 "row_format_before": False, 2867 "record_writer": False, 2868 "row_format_after": False, 2869 "record_reader": False, 2870 } 2871 2872 2873class SampleProperty(Property): 2874 arg_types = {"this": True} 2875 2876 2877# https://prestodb.io/docs/current/sql/create-view.html#synopsis 2878class SecurityProperty(Property): 2879 arg_types = {"this": True} 2880 2881 2882class SchemaCommentProperty(Property): 2883 arg_types = {"this": True} 2884 2885 2886class SerdeProperties(Property): 2887 arg_types = {"expressions": True, "with": False} 2888 2889 2890class SetProperty(Property): 2891 arg_types = {"multi": True} 2892 2893 2894class SharingProperty(Property): 2895 arg_types = {"this": False} 2896 2897 2898class SetConfigProperty(Property): 2899 arg_types = {"this": True} 2900 2901 2902class SettingsProperty(Property): 2903 arg_types = {"expressions": True} 2904 2905 2906class SortKeyProperty(Property): 2907 arg_types = {"this": True, "compound": False} 2908 2909 2910class SqlReadWriteProperty(Property): 2911 arg_types = {"this": True} 2912 2913 2914class SqlSecurityProperty(Property): 2915 arg_types = {"definer": True} 2916 2917 2918class StabilityProperty(Property): 2919 arg_types = {"this": True} 2920 2921 2922class TemporaryProperty(Property): 2923 arg_types = {"this": False} 2924 2925 2926class SecureProperty(Property): 2927 arg_types = {} 2928 2929 2930class TransformModelProperty(Property): 2931 arg_types = {"expressions": True} 2932 2933 2934class TransientProperty(Property): 2935 arg_types = {"this": False} 2936 2937 2938class UnloggedProperty(Property): 2939 arg_types = {} 2940 2941 2942# https://learn.microsoft.com/en-us/sql/t-sql/statements/create-view-transact-sql?view=sql-server-ver16 2943class ViewAttributeProperty(Property): 2944 arg_types = {"this": True} 2945 2946 2947class VolatileProperty(Property): 2948 arg_types = {"this": False} 2949 2950 2951class WithDataProperty(Property): 2952 arg_types = {"no": True, "statistics": False} 2953 2954 2955class WithJournalTableProperty(Property): 2956 arg_types = {"this": True} 2957 2958 2959class WithSchemaBindingProperty(Property): 2960 arg_types = {"this": True} 2961 2962 2963class WithSystemVersioningProperty(Property): 2964 arg_types = { 2965 "on": False, 2966 "this": False, 2967 "data_consistency": False, 2968 "retention_period": False, 2969 "with": True, 2970 } 2971 2972 2973class Properties(Expression): 2974 arg_types = {"expressions": True} 2975 2976 NAME_TO_PROPERTY = { 2977 "ALGORITHM": AlgorithmProperty, 2978 "AUTO_INCREMENT": AutoIncrementProperty, 2979 "CHARACTER SET": CharacterSetProperty, 2980 "CLUSTERED_BY": ClusteredByProperty, 2981 "COLLATE": CollateProperty, 2982 "COMMENT": SchemaCommentProperty, 2983 "DEFINER": DefinerProperty, 2984 "DISTKEY": DistKeyProperty, 2985 "DISTRIBUTED_BY": DistributedByProperty, 2986 "DISTSTYLE": DistStyleProperty, 2987 "ENGINE": EngineProperty, 2988 "EXECUTE AS": ExecuteAsProperty, 2989 "FORMAT": FileFormatProperty, 2990 "LANGUAGE": LanguageProperty, 2991 "LOCATION": LocationProperty, 2992 "LOCK": LockProperty, 2993 "PARTITIONED_BY": PartitionedByProperty, 2994 "RETURNS": ReturnsProperty, 2995 "ROW_FORMAT": RowFormatProperty, 2996 "SORTKEY": SortKeyProperty, 2997 } 2998 2999 PROPERTY_TO_NAME = {v: k for k, v in NAME_TO_PROPERTY.items()} 3000 3001 # CREATE property locations 3002 # Form: schema specified 3003 # create [POST_CREATE] 3004 # table a [POST_NAME] 3005 # (b int) [POST_SCHEMA] 3006 # with ([POST_WITH]) 3007 # index (b) [POST_INDEX] 3008 # 3009 # Form: alias selection 3010 # create [POST_CREATE] 3011 # table a [POST_NAME] 3012 # as [POST_ALIAS] (select * from b) [POST_EXPRESSION] 3013 # index (c) [POST_INDEX] 3014 class Location(AutoName): 3015 POST_CREATE = auto() 3016 POST_NAME = auto() 3017 POST_SCHEMA = auto() 3018 POST_WITH = auto() 3019 POST_ALIAS = auto() 3020 POST_EXPRESSION = auto() 3021 POST_INDEX = auto() 3022 UNSUPPORTED = auto() 3023 3024 @classmethod 3025 def from_dict(cls, properties_dict: t.Dict) -> Properties: 3026 expressions = [] 3027 for key, value in properties_dict.items(): 3028 property_cls = cls.NAME_TO_PROPERTY.get(key.upper()) 3029 if property_cls: 3030 expressions.append(property_cls(this=convert(value))) 3031 else: 3032 expressions.append(Property(this=Literal.string(key), value=convert(value))) 3033 3034 return cls(expressions=expressions) 3035 3036 3037class Qualify(Expression): 3038 pass 3039 3040 3041class InputOutputFormat(Expression): 3042 arg_types = {"input_format": False, "output_format": False} 3043 3044 3045# https://www.ibm.com/docs/en/ias?topic=procedures-return-statement-in-sql 3046class Return(Expression): 3047 pass 3048 3049 3050class Reference(Expression): 3051 arg_types = {"this": True, "expressions": False, "options": False} 3052 3053 3054class Tuple(Expression): 3055 arg_types = {"expressions": False} 3056 3057 def isin( 3058 self, 3059 *expressions: t.Any, 3060 query: t.Optional[ExpOrStr] = None, 3061 unnest: t.Optional[ExpOrStr] | t.Collection[ExpOrStr] = None, 3062 copy: bool = True, 3063 **opts, 3064 ) -> In: 3065 return In( 3066 this=maybe_copy(self, copy), 3067 expressions=[convert(e, copy=copy) for e in expressions], 3068 query=maybe_parse(query, copy=copy, **opts) if query else None, 3069 unnest=( 3070 Unnest( 3071 expressions=[ 3072 maybe_parse(t.cast(ExpOrStr, e), copy=copy, **opts) 3073 for e in ensure_list(unnest) 3074 ] 3075 ) 3076 if unnest 3077 else None 3078 ), 3079 ) 3080 3081 3082QUERY_MODIFIERS = { 3083 "match": False, 3084 "laterals": False, 3085 "joins": False, 3086 "connect": False, 3087 "pivots": False, 3088 "prewhere": False, 3089 "where": False, 3090 "group": False, 3091 "having": False, 3092 "qualify": False, 3093 "windows": False, 3094 "distribute": False, 3095 "sort": False, 3096 "cluster": False, 3097 "order": False, 3098 "limit": False, 3099 "offset": False, 3100 "locks": False, 3101 "sample": False, 3102 "settings": False, 3103 "format": False, 3104 "options": False, 3105} 3106 3107 3108# https://learn.microsoft.com/en-us/sql/t-sql/queries/option-clause-transact-sql?view=sql-server-ver16 3109# https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-query?view=sql-server-ver16 3110class QueryOption(Expression): 3111 arg_types = {"this": True, "expression": False} 3112 3113 3114# https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16 3115class WithTableHint(Expression): 3116 arg_types = {"expressions": True} 3117 3118 3119# https://dev.mysql.com/doc/refman/8.0/en/index-hints.html 3120class IndexTableHint(Expression): 3121 arg_types = {"this": True, "expressions": False, "target": False} 3122 3123 3124# https://docs.snowflake.com/en/sql-reference/constructs/at-before 3125class HistoricalData(Expression): 3126 arg_types = {"this": True, "kind": True, "expression": True} 3127 3128 3129class Table(Expression): 3130 arg_types = { 3131 "this": False, 3132 "alias": False, 3133 "db": False, 3134 "catalog": False, 3135 "laterals": False, 3136 "joins": False, 3137 "pivots": False, 3138 "hints": False, 3139 "system_time": False, 3140 "version": False, 3141 "format": False, 3142 "pattern": False, 3143 "ordinality": False, 3144 "when": False, 3145 "only": False, 3146 "partition": False, 3147 "changes": False, 3148 "rows_from": False, 3149 "sample": False, 3150 } 3151 3152 @property 3153 def name(self) -> str: 3154 if isinstance(self.this, Func): 3155 return "" 3156 return self.this.name 3157 3158 @property 3159 def db(self) -> str: 3160 return self.text("db") 3161 3162 @property 3163 def catalog(self) -> str: 3164 return self.text("catalog") 3165 3166 @property 3167 def selects(self) -> t.List[Expression]: 3168 return [] 3169 3170 @property 3171 def named_selects(self) -> t.List[str]: 3172 return [] 3173 3174 @property 3175 def parts(self) -> t.List[Expression]: 3176 """Return the parts of a table in order catalog, db, table.""" 3177 parts: t.List[Expression] = [] 3178 3179 for arg in ("catalog", "db", "this"): 3180 part = self.args.get(arg) 3181 3182 if isinstance(part, Dot): 3183 parts.extend(part.flatten()) 3184 elif isinstance(part, Expression): 3185 parts.append(part) 3186 3187 return parts 3188 3189 def to_column(self, copy: bool = True) -> Alias | Column | Dot: 3190 parts = self.parts 3191 col = column(*reversed(parts[0:4]), fields=parts[4:], copy=copy) # type: ignore 3192 alias = self.args.get("alias") 3193 if alias: 3194 col = alias_(col, alias.this, copy=copy) 3195 return col 3196 3197 3198class SetOperation(Query): 3199 arg_types = { 3200 "with": False, 3201 "this": True, 3202 "expression": True, 3203 "distinct": False, 3204 "by_name": False, 3205 **QUERY_MODIFIERS, 3206 } 3207 3208 def select( 3209 self: S, 3210 *expressions: t.Optional[ExpOrStr], 3211 append: bool = True, 3212 dialect: DialectType = None, 3213 copy: bool = True, 3214 **opts, 3215 ) -> S: 3216 this = maybe_copy(self, copy) 3217 this.this.unnest().select(*expressions, append=append, dialect=dialect, copy=False, **opts) 3218 this.expression.unnest().select( 3219 *expressions, append=append, dialect=dialect, copy=False, **opts 3220 ) 3221 return this 3222 3223 @property 3224 def named_selects(self) -> t.List[str]: 3225 return self.this.unnest().named_selects 3226 3227 @property 3228 def is_star(self) -> bool: 3229 return self.this.is_star or self.expression.is_star 3230 3231 @property 3232 def selects(self) -> t.List[Expression]: 3233 return self.this.unnest().selects 3234 3235 @property 3236 def left(self) -> Query: 3237 return self.this 3238 3239 @property 3240 def right(self) -> Query: 3241 return self.expression 3242 3243 3244class Union(SetOperation): 3245 pass 3246 3247 3248class Except(SetOperation): 3249 pass 3250 3251 3252class Intersect(SetOperation): 3253 pass 3254 3255 3256class Update(Expression): 3257 arg_types = { 3258 "with": False, 3259 "this": False, 3260 "expressions": True, 3261 "from": False, 3262 "where": False, 3263 "returning": False, 3264 "order": False, 3265 "limit": False, 3266 } 3267 3268 3269class Values(UDTF): 3270 arg_types = {"expressions": True, "alias": False} 3271 3272 3273class Var(Expression): 3274 pass 3275 3276 3277class Version(Expression): 3278 """ 3279 Time travel, iceberg, bigquery etc 3280 https://trino.io/docs/current/connector/iceberg.html?highlight=snapshot#using-snapshots 3281 https://www.databricks.com/blog/2019/02/04/introducing-delta-time-travel-for-large-scale-data-lakes.html 3282 https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#for_system_time_as_of 3283 https://learn.microsoft.com/en-us/sql/relational-databases/tables/querying-data-in-a-system-versioned-temporal-table?view=sql-server-ver16 3284 this is either TIMESTAMP or VERSION 3285 kind is ("AS OF", "BETWEEN") 3286 """ 3287 3288 arg_types = {"this": True, "kind": True, "expression": False} 3289 3290 3291class Schema(Expression): 3292 arg_types = {"this": False, "expressions": False} 3293 3294 3295# https://dev.mysql.com/doc/refman/8.0/en/select.html 3296# https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/SELECT.html 3297class Lock(Expression): 3298 arg_types = {"update": True, "expressions": False, "wait": False} 3299 3300 3301class Select(Query): 3302 arg_types = { 3303 "with": False, 3304 "kind": False, 3305 "expressions": False, 3306 "hint": False, 3307 "distinct": False, 3308 "into": False, 3309 "from": False, 3310 **QUERY_MODIFIERS, 3311 } 3312 3313 def from_( 3314 self, expression: ExpOrStr, dialect: DialectType = None, copy: bool = True, **opts 3315 ) -> Select: 3316 """ 3317 Set the FROM expression. 3318 3319 Example: 3320 >>> Select().from_("tbl").select("x").sql() 3321 'SELECT x FROM tbl' 3322 3323 Args: 3324 expression : the SQL code strings to parse. 3325 If a `From` instance is passed, this is used as-is. 3326 If another `Expression` instance is passed, it will be wrapped in a `From`. 3327 dialect: the dialect used to parse the input expression. 3328 copy: if `False`, modify this expression instance in-place. 3329 opts: other options to use to parse the input expressions. 3330 3331 Returns: 3332 The modified Select expression. 3333 """ 3334 return _apply_builder( 3335 expression=expression, 3336 instance=self, 3337 arg="from", 3338 into=From, 3339 prefix="FROM", 3340 dialect=dialect, 3341 copy=copy, 3342 **opts, 3343 ) 3344 3345 def group_by( 3346 self, 3347 *expressions: t.Optional[ExpOrStr], 3348 append: bool = True, 3349 dialect: DialectType = None, 3350 copy: bool = True, 3351 **opts, 3352 ) -> Select: 3353 """ 3354 Set the GROUP BY expression. 3355 3356 Example: 3357 >>> Select().from_("tbl").select("x", "COUNT(1)").group_by("x").sql() 3358 'SELECT x, COUNT(1) FROM tbl GROUP BY x' 3359 3360 Args: 3361 *expressions: the SQL code strings to parse. 3362 If a `Group` instance is passed, this is used as-is. 3363 If another `Expression` instance is passed, it will be wrapped in a `Group`. 3364 If nothing is passed in then a group by is not applied to the expression 3365 append: if `True`, add to any existing expressions. 3366 Otherwise, this flattens all the `Group` expression into a single expression. 3367 dialect: the dialect used to parse the input expression. 3368 copy: if `False`, modify this expression instance in-place. 3369 opts: other options to use to parse the input expressions. 3370 3371 Returns: 3372 The modified Select expression. 3373 """ 3374 if not expressions: 3375 return self if not copy else self.copy() 3376 3377 return _apply_child_list_builder( 3378 *expressions, 3379 instance=self, 3380 arg="group", 3381 append=append, 3382 copy=copy, 3383 prefix="GROUP BY", 3384 into=Group, 3385 dialect=dialect, 3386 **opts, 3387 ) 3388 3389 def sort_by( 3390 self, 3391 *expressions: t.Optional[ExpOrStr], 3392 append: bool = True, 3393 dialect: DialectType = None, 3394 copy: bool = True, 3395 **opts, 3396 ) -> Select: 3397 """ 3398 Set the SORT BY expression. 3399 3400 Example: 3401 >>> Select().from_("tbl").select("x").sort_by("x DESC").sql(dialect="hive") 3402 'SELECT x FROM tbl SORT BY x DESC' 3403 3404 Args: 3405 *expressions: the SQL code strings to parse. 3406 If a `Group` instance is passed, this is used as-is. 3407 If another `Expression` instance is passed, it will be wrapped in a `SORT`. 3408 append: if `True`, add to any existing expressions. 3409 Otherwise, this flattens all the `Order` expression into a single expression. 3410 dialect: the dialect used to parse the input expression. 3411 copy: if `False`, modify this expression instance in-place. 3412 opts: other options to use to parse the input expressions. 3413 3414 Returns: 3415 The modified Select expression. 3416 """ 3417 return _apply_child_list_builder( 3418 *expressions, 3419 instance=self, 3420 arg="sort", 3421 append=append, 3422 copy=copy, 3423 prefix="SORT BY", 3424 into=Sort, 3425 dialect=dialect, 3426 **opts, 3427 ) 3428 3429 def cluster_by( 3430 self, 3431 *expressions: t.Optional[ExpOrStr], 3432 append: bool = True, 3433 dialect: DialectType = None, 3434 copy: bool = True, 3435 **opts, 3436 ) -> Select: 3437 """ 3438 Set the CLUSTER BY expression. 3439 3440 Example: 3441 >>> Select().from_("tbl").select("x").cluster_by("x DESC").sql(dialect="hive") 3442 'SELECT x FROM tbl CLUSTER BY x DESC' 3443 3444 Args: 3445 *expressions: the SQL code strings to parse. 3446 If a `Group` instance is passed, this is used as-is. 3447 If another `Expression` instance is passed, it will be wrapped in a `Cluster`. 3448 append: if `True`, add to any existing expressions. 3449 Otherwise, this flattens all the `Order` expression into a single expression. 3450 dialect: the dialect used to parse the input expression. 3451 copy: if `False`, modify this expression instance in-place. 3452 opts: other options to use to parse the input expressions. 3453 3454 Returns: 3455 The modified Select expression. 3456 """ 3457 return _apply_child_list_builder( 3458 *expressions, 3459 instance=self, 3460 arg="cluster", 3461 append=append, 3462 copy=copy, 3463 prefix="CLUSTER BY", 3464 into=Cluster, 3465 dialect=dialect, 3466 **opts, 3467 ) 3468 3469 def select( 3470 self, 3471 *expressions: t.Optional[ExpOrStr], 3472 append: bool = True, 3473 dialect: DialectType = None, 3474 copy: bool = True, 3475 **opts, 3476 ) -> Select: 3477 return _apply_list_builder( 3478 *expressions, 3479 instance=self, 3480 arg="expressions", 3481 append=append, 3482 dialect=dialect, 3483 into=Expression, 3484 copy=copy, 3485 **opts, 3486 ) 3487 3488 def lateral( 3489 self, 3490 *expressions: t.Optional[ExpOrStr], 3491 append: bool = True, 3492 dialect: DialectType = None, 3493 copy: bool = True, 3494 **opts, 3495 ) -> Select: 3496 """ 3497 Append to or set the LATERAL expressions. 3498 3499 Example: 3500 >>> Select().select("x").lateral("OUTER explode(y) tbl2 AS z").from_("tbl").sql() 3501 'SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z' 3502 3503 Args: 3504 *expressions: the SQL code strings to parse. 3505 If an `Expression` instance is passed, it will be used as-is. 3506 append: if `True`, add to any existing expressions. 3507 Otherwise, this resets the expressions. 3508 dialect: the dialect used to parse the input expressions. 3509 copy: if `False`, modify this expression instance in-place. 3510 opts: other options to use to parse the input expressions. 3511 3512 Returns: 3513 The modified Select expression. 3514 """ 3515 return _apply_list_builder( 3516 *expressions, 3517 instance=self, 3518 arg="laterals", 3519 append=append, 3520 into=Lateral, 3521 prefix="LATERAL VIEW", 3522 dialect=dialect, 3523 copy=copy, 3524 **opts, 3525 ) 3526 3527 def join( 3528 self, 3529 expression: ExpOrStr, 3530 on: t.Optional[ExpOrStr] = None, 3531 using: t.Optional[ExpOrStr | t.Collection[ExpOrStr]] = None, 3532 append: bool = True, 3533 join_type: t.Optional[str] = None, 3534 join_alias: t.Optional[Identifier | str] = None, 3535 dialect: DialectType = None, 3536 copy: bool = True, 3537 **opts, 3538 ) -> Select: 3539 """ 3540 Append to or set the JOIN expressions. 3541 3542 Example: 3543 >>> Select().select("*").from_("tbl").join("tbl2", on="tbl1.y = tbl2.y").sql() 3544 'SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y' 3545 3546 >>> Select().select("1").from_("a").join("b", using=["x", "y", "z"]).sql() 3547 'SELECT 1 FROM a JOIN b USING (x, y, z)' 3548 3549 Use `join_type` to change the type of join: 3550 3551 >>> Select().select("*").from_("tbl").join("tbl2", on="tbl1.y = tbl2.y", join_type="left outer").sql() 3552 'SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y' 3553 3554 Args: 3555 expression: the SQL code string to parse. 3556 If an `Expression` instance is passed, it will be used as-is. 3557 on: optionally specify the join "on" criteria as a SQL string. 3558 If an `Expression` instance is passed, it will be used as-is. 3559 using: optionally specify the join "using" criteria as a SQL string. 3560 If an `Expression` instance is passed, it will be used as-is. 3561 append: if `True`, add to any existing expressions. 3562 Otherwise, this resets the expressions. 3563 join_type: if set, alter the parsed join type. 3564 join_alias: an optional alias for the joined source. 3565 dialect: the dialect used to parse the input expressions. 3566 copy: if `False`, modify this expression instance in-place. 3567 opts: other options to use to parse the input expressions. 3568 3569 Returns: 3570 Select: the modified expression. 3571 """ 3572 parse_args: t.Dict[str, t.Any] = {"dialect": dialect, **opts} 3573 3574 try: 3575 expression = maybe_parse(expression, into=Join, prefix="JOIN", **parse_args) 3576 except ParseError: 3577 expression = maybe_parse(expression, into=(Join, Expression), **parse_args) 3578 3579 join = expression if isinstance(expression, Join) else Join(this=expression) 3580 3581 if isinstance(join.this, Select): 3582 join.this.replace(join.this.subquery()) 3583 3584 if join_type: 3585 method: t.Optional[Token] 3586 side: t.Optional[Token] 3587 kind: t.Optional[Token] 3588 3589 method, side, kind = maybe_parse(join_type, into="JOIN_TYPE", **parse_args) # type: ignore 3590 3591 if method: 3592 join.set("method", method.text) 3593 if side: 3594 join.set("side", side.text) 3595 if kind: 3596 join.set("kind", kind.text) 3597 3598 if on: 3599 on = and_(*ensure_list(on), dialect=dialect, copy=copy, **opts) 3600 join.set("on", on) 3601 3602 if using: 3603 join = _apply_list_builder( 3604 *ensure_list(using), 3605 instance=join, 3606 arg="using", 3607 append=append, 3608 copy=copy, 3609 into=Identifier, 3610 **opts, 3611 ) 3612 3613 if join_alias: 3614 join.set("this", alias_(join.this, join_alias, table=True)) 3615 3616 return _apply_list_builder( 3617 join, 3618 instance=self, 3619 arg="joins", 3620 append=append, 3621 copy=copy, 3622 **opts, 3623 ) 3624 3625 def where( 3626 self, 3627 *expressions: t.Optional[ExpOrStr], 3628 append: bool = True, 3629 dialect: DialectType = None, 3630 copy: bool = True, 3631 **opts, 3632 ) -> Select: 3633 """ 3634 Append to or set the WHERE expressions. 3635 3636 Example: 3637 >>> Select().select("x").from_("tbl").where("x = 'a' OR x < 'b'").sql() 3638 "SELECT x FROM tbl WHERE x = 'a' OR x < 'b'" 3639 3640 Args: 3641 *expressions: the SQL code strings to parse. 3642 If an `Expression` instance is passed, it will be used as-is. 3643 Multiple expressions are combined with an AND operator. 3644 append: if `True`, AND the new expressions to any existing expression. 3645 Otherwise, this resets the expression. 3646 dialect: the dialect used to parse the input expressions. 3647 copy: if `False`, modify this expression instance in-place. 3648 opts: other options to use to parse the input expressions. 3649 3650 Returns: 3651 Select: the modified expression. 3652 """ 3653 return _apply_conjunction_builder( 3654 *expressions, 3655 instance=self, 3656 arg="where", 3657 append=append, 3658 into=Where, 3659 dialect=dialect, 3660 copy=copy, 3661 **opts, 3662 ) 3663 3664 def having( 3665 self, 3666 *expressions: t.Optional[ExpOrStr], 3667 append: bool = True, 3668 dialect: DialectType = None, 3669 copy: bool = True, 3670 **opts, 3671 ) -> Select: 3672 """ 3673 Append to or set the HAVING expressions. 3674 3675 Example: 3676 >>> Select().select("x", "COUNT(y)").from_("tbl").group_by("x").having("COUNT(y) > 3").sql() 3677 'SELECT x, COUNT(y) FROM tbl GROUP BY x HAVING COUNT(y) > 3' 3678 3679 Args: 3680 *expressions: the SQL code strings to parse. 3681 If an `Expression` instance is passed, it will be used as-is. 3682 Multiple expressions are combined with an AND operator. 3683 append: if `True`, AND the new expressions to any existing expression. 3684 Otherwise, this resets the expression. 3685 dialect: the dialect used to parse the input expressions. 3686 copy: if `False`, modify this expression instance in-place. 3687 opts: other options to use to parse the input expressions. 3688 3689 Returns: 3690 The modified Select expression. 3691 """ 3692 return _apply_conjunction_builder( 3693 *expressions, 3694 instance=self, 3695 arg="having", 3696 append=append, 3697 into=Having, 3698 dialect=dialect, 3699 copy=copy, 3700 **opts, 3701 ) 3702 3703 def window( 3704 self, 3705 *expressions: t.Optional[ExpOrStr], 3706 append: bool = True, 3707 dialect: DialectType = None, 3708 copy: bool = True, 3709 **opts, 3710 ) -> Select: 3711 return _apply_list_builder( 3712 *expressions, 3713 instance=self, 3714 arg="windows", 3715 append=append, 3716 into=Window, 3717 dialect=dialect, 3718 copy=copy, 3719 **opts, 3720 ) 3721 3722 def qualify( 3723 self, 3724 *expressions: t.Optional[ExpOrStr], 3725 append: bool = True, 3726 dialect: DialectType = None, 3727 copy: bool = True, 3728 **opts, 3729 ) -> Select: 3730 return _apply_conjunction_builder( 3731 *expressions, 3732 instance=self, 3733 arg="qualify", 3734 append=append, 3735 into=Qualify, 3736 dialect=dialect, 3737 copy=copy, 3738 **opts, 3739 ) 3740 3741 def distinct( 3742 self, *ons: t.Optional[ExpOrStr], distinct: bool = True, copy: bool = True 3743 ) -> Select: 3744 """ 3745 Set the OFFSET expression. 3746 3747 Example: 3748 >>> Select().from_("tbl").select("x").distinct().sql() 3749 'SELECT DISTINCT x FROM tbl' 3750 3751 Args: 3752 ons: the expressions to distinct on 3753 distinct: whether the Select should be distinct 3754 copy: if `False`, modify this expression instance in-place. 3755 3756 Returns: 3757 Select: the modified expression. 3758 """ 3759 instance = maybe_copy(self, copy) 3760 on = Tuple(expressions=[maybe_parse(on, copy=copy) for on in ons if on]) if ons else None 3761 instance.set("distinct", Distinct(on=on) if distinct else None) 3762 return instance 3763 3764 def ctas( 3765 self, 3766 table: ExpOrStr, 3767 properties: t.Optional[t.Dict] = None, 3768 dialect: DialectType = None, 3769 copy: bool = True, 3770 **opts, 3771 ) -> Create: 3772 """ 3773 Convert this expression to a CREATE TABLE AS statement. 3774 3775 Example: 3776 >>> Select().select("*").from_("tbl").ctas("x").sql() 3777 'CREATE TABLE x AS SELECT * FROM tbl' 3778 3779 Args: 3780 table: the SQL code string to parse as the table name. 3781 If another `Expression` instance is passed, it will be used as-is. 3782 properties: an optional mapping of table properties 3783 dialect: the dialect used to parse the input table. 3784 copy: if `False`, modify this expression instance in-place. 3785 opts: other options to use to parse the input table. 3786 3787 Returns: 3788 The new Create expression. 3789 """ 3790 instance = maybe_copy(self, copy) 3791 table_expression = maybe_parse(table, into=Table, dialect=dialect, **opts) 3792 3793 properties_expression = None 3794 if properties: 3795 properties_expression = Properties.from_dict(properties) 3796 3797 return Create( 3798 this=table_expression, 3799 kind="TABLE", 3800 expression=instance, 3801 properties=properties_expression, 3802 ) 3803 3804 def lock(self, update: bool = True, copy: bool = True) -> Select: 3805 """ 3806 Set the locking read mode for this expression. 3807 3808 Examples: 3809 >>> Select().select("x").from_("tbl").where("x = 'a'").lock().sql("mysql") 3810 "SELECT x FROM tbl WHERE x = 'a' FOR UPDATE" 3811 3812 >>> Select().select("x").from_("tbl").where("x = 'a'").lock(update=False).sql("mysql") 3813 "SELECT x FROM tbl WHERE x = 'a' FOR SHARE" 3814 3815 Args: 3816 update: if `True`, the locking type will be `FOR UPDATE`, else it will be `FOR SHARE`. 3817 copy: if `False`, modify this expression instance in-place. 3818 3819 Returns: 3820 The modified expression. 3821 """ 3822 inst = maybe_copy(self, copy) 3823 inst.set("locks", [Lock(update=update)]) 3824 3825 return inst 3826 3827 def hint(self, *hints: ExpOrStr, dialect: DialectType = None, copy: bool = True) -> Select: 3828 """ 3829 Set hints for this expression. 3830 3831 Examples: 3832 >>> Select().select("x").from_("tbl").hint("BROADCAST(y)").sql(dialect="spark") 3833 'SELECT /*+ BROADCAST(y) */ x FROM tbl' 3834 3835 Args: 3836 hints: The SQL code strings to parse as the hints. 3837 If an `Expression` instance is passed, it will be used as-is. 3838 dialect: The dialect used to parse the hints. 3839 copy: If `False`, modify this expression instance in-place. 3840 3841 Returns: 3842 The modified expression. 3843 """ 3844 inst = maybe_copy(self, copy) 3845 inst.set( 3846 "hint", Hint(expressions=[maybe_parse(h, copy=copy, dialect=dialect) for h in hints]) 3847 ) 3848 3849 return inst 3850 3851 @property 3852 def named_selects(self) -> t.List[str]: 3853 return [e.output_name for e in self.expressions if e.alias_or_name] 3854 3855 @property 3856 def is_star(self) -> bool: 3857 return any(expression.is_star for expression in self.expressions) 3858 3859 @property 3860 def selects(self) -> t.List[Expression]: 3861 return self.expressions 3862 3863 3864UNWRAPPED_QUERIES = (Select, SetOperation) 3865 3866 3867class Subquery(DerivedTable, Query): 3868 arg_types = { 3869 "this": True, 3870 "alias": False, 3871 "with": False, 3872 **QUERY_MODIFIERS, 3873 } 3874 3875 def unnest(self): 3876 """Returns the first non subquery.""" 3877 expression = self 3878 while isinstance(expression, Subquery): 3879 expression = expression.this 3880 return expression 3881 3882 def unwrap(self) -> Subquery: 3883 expression = self 3884 while expression.same_parent and expression.is_wrapper: 3885 expression = t.cast(Subquery, expression.parent) 3886 return expression 3887 3888 def select( 3889 self, 3890 *expressions: t.Optional[ExpOrStr], 3891 append: bool = True, 3892 dialect: DialectType = None, 3893 copy: bool = True, 3894 **opts, 3895 ) -> Subquery: 3896 this = maybe_copy(self, copy) 3897 this.unnest().select(*expressions, append=append, dialect=dialect, copy=False, **opts) 3898 return this 3899 3900 @property 3901 def is_wrapper(self) -> bool: 3902 """ 3903 Whether this Subquery acts as a simple wrapper around another expression. 3904 3905 SELECT * FROM (((SELECT * FROM t))) 3906 ^ 3907 This corresponds to a "wrapper" Subquery node 3908 """ 3909 return all(v is None for k, v in self.args.items() if k != "this") 3910 3911 @property 3912 def is_star(self) -> bool: 3913 return self.this.is_star 3914 3915 @property 3916 def output_name(self) -> str: 3917 return self.alias 3918 3919 3920class TableSample(Expression): 3921 arg_types = { 3922 "expressions": False, 3923 "method": False, 3924 "bucket_numerator": False, 3925 "bucket_denominator": False, 3926 "bucket_field": False, 3927 "percent": False, 3928 "rows": False, 3929 "size": False, 3930 "seed": False, 3931 } 3932 3933 3934class Tag(Expression): 3935 """Tags are used for generating arbitrary sql like SELECT <span>x</span>.""" 3936 3937 arg_types = { 3938 "this": False, 3939 "prefix": False, 3940 "postfix": False, 3941 } 3942 3943 3944# Represents both the standard SQL PIVOT operator and DuckDB's "simplified" PIVOT syntax 3945# https://duckdb.org/docs/sql/statements/pivot 3946class Pivot(Expression): 3947 arg_types = { 3948 "this": False, 3949 "alias": False, 3950 "expressions": False, 3951 "field": False, 3952 "unpivot": False, 3953 "using": False, 3954 "group": False, 3955 "columns": False, 3956 "include_nulls": False, 3957 "default_on_null": False, 3958 } 3959 3960 @property 3961 def unpivot(self) -> bool: 3962 return bool(self.args.get("unpivot")) 3963 3964 3965class Window(Condition): 3966 arg_types = { 3967 "this": True, 3968 "partition_by": False, 3969 "order": False, 3970 "spec": False, 3971 "alias": False, 3972 "over": False, 3973 "first": False, 3974 } 3975 3976 3977class WindowSpec(Expression): 3978 arg_types = { 3979 "kind": False, 3980 "start": False, 3981 "start_side": False, 3982 "end": False, 3983 "end_side": False, 3984 } 3985 3986 3987class PreWhere(Expression): 3988 pass 3989 3990 3991class Where(Expression): 3992 pass 3993 3994 3995class Star(Expression): 3996 arg_types = {"except": False, "replace": False, "rename": False} 3997 3998 @property 3999 def name(self) -> str: 4000 return "*" 4001 4002 @property 4003 def output_name(self) -> str: 4004 return self.name 4005 4006 4007class Parameter(Condition): 4008 arg_types = {"this": True, "expression": False} 4009 4010 4011class SessionParameter(Condition): 4012 arg_types = {"this": True, "kind": False} 4013 4014 4015class Placeholder(Condition): 4016 arg_types = {"this": False, "kind": False} 4017 4018 @property 4019 def name(self) -> str: 4020 return self.this or "?" 4021 4022 4023class Null(Condition): 4024 arg_types: t.Dict[str, t.Any] = {} 4025 4026 @property 4027 def name(self) -> str: 4028 return "NULL" 4029 4030 def to_py(self) -> Lit[None]: 4031 return None 4032 4033 4034class Boolean(Condition): 4035 def to_py(self) -> bool: 4036 return self.this 4037 4038 4039class DataTypeParam(Expression): 4040 arg_types = {"this": True, "expression": False} 4041 4042 @property 4043 def name(self) -> str: 4044 return self.this.name 4045 4046 4047# The `nullable` arg is helpful when transpiling types from other dialects to ClickHouse, which 4048# assumes non-nullable types by default. Values `None` and `True` mean the type is nullable. 4049class DataType(Expression): 4050 arg_types = { 4051 "this": True, 4052 "expressions": False, 4053 "nested": False, 4054 "values": False, 4055 "prefix": False, 4056 "kind": False, 4057 "nullable": False, 4058 } 4059 4060 class Type(AutoName): 4061 ARRAY = auto() 4062 AGGREGATEFUNCTION = auto() 4063 SIMPLEAGGREGATEFUNCTION = auto() 4064 BIGDECIMAL = auto() 4065 BIGINT = auto() 4066 BIGSERIAL = auto() 4067 BINARY = auto() 4068 BIT = auto() 4069 BOOLEAN = auto() 4070 BPCHAR = auto() 4071 CHAR = auto() 4072 DATE = auto() 4073 DATE32 = auto() 4074 DATEMULTIRANGE = auto() 4075 DATERANGE = auto() 4076 DATETIME = auto() 4077 DATETIME64 = auto() 4078 DECIMAL = auto() 4079 DECIMAL32 = auto() 4080 DECIMAL64 = auto() 4081 DECIMAL128 = auto() 4082 DOUBLE = auto() 4083 ENUM = auto() 4084 ENUM8 = auto() 4085 ENUM16 = auto() 4086 FIXEDSTRING = auto() 4087 FLOAT = auto() 4088 GEOGRAPHY = auto() 4089 GEOMETRY = auto() 4090 HLLSKETCH = auto() 4091 HSTORE = auto() 4092 IMAGE = auto() 4093 INET = auto() 4094 INT = auto() 4095 INT128 = auto() 4096 INT256 = auto() 4097 INT4MULTIRANGE = auto() 4098 INT4RANGE = auto() 4099 INT8MULTIRANGE = auto() 4100 INT8RANGE = auto() 4101 INTERVAL = auto() 4102 IPADDRESS = auto() 4103 IPPREFIX = auto() 4104 IPV4 = auto() 4105 IPV6 = auto() 4106 JSON = auto() 4107 JSONB = auto() 4108 LIST = auto() 4109 LONGBLOB = auto() 4110 LONGTEXT = auto() 4111 LOWCARDINALITY = auto() 4112 MAP = auto() 4113 MEDIUMBLOB = auto() 4114 MEDIUMINT = auto() 4115 MEDIUMTEXT = auto() 4116 MONEY = auto() 4117 NAME = auto() 4118 NCHAR = auto() 4119 NESTED = auto() 4120 NULL = auto() 4121 NULLABLE = auto() 4122 NUMMULTIRANGE = auto() 4123 NUMRANGE = auto() 4124 NVARCHAR = auto() 4125 OBJECT = auto() 4126 ROWVERSION = auto() 4127 SERIAL = auto() 4128 SET = auto() 4129 SMALLINT = auto() 4130 SMALLMONEY = auto() 4131 SMALLSERIAL = auto() 4132 STRUCT = auto() 4133 SUPER = auto() 4134 TEXT = auto() 4135 TINYBLOB = auto() 4136 TINYTEXT = auto() 4137 TIME = auto() 4138 TIMETZ = auto() 4139 TIMESTAMP = auto() 4140 TIMESTAMPNTZ = auto() 4141 TIMESTAMPLTZ = auto() 4142 TIMESTAMPTZ = auto() 4143 TIMESTAMP_S = auto() 4144 TIMESTAMP_MS = auto() 4145 TIMESTAMP_NS = auto() 4146 TINYINT = auto() 4147 TSMULTIRANGE = auto() 4148 TSRANGE = auto() 4149 TSTZMULTIRANGE = auto() 4150 TSTZRANGE = auto() 4151 UBIGINT = auto() 4152 UINT = auto() 4153 UINT128 = auto() 4154 UINT256 = auto() 4155 UMEDIUMINT = auto() 4156 UDECIMAL = auto() 4157 UNIQUEIDENTIFIER = auto() 4158 UNKNOWN = auto() # Sentinel value, useful for type annotation 4159 USERDEFINED = "USER-DEFINED" 4160 USMALLINT = auto() 4161 UTINYINT = auto() 4162 UUID = auto() 4163 VARBINARY = auto() 4164 VARCHAR = auto() 4165 VARIANT = auto() 4166 VECTOR = auto() 4167 XML = auto() 4168 YEAR = auto() 4169 TDIGEST = auto() 4170 4171 STRUCT_TYPES = { 4172 Type.NESTED, 4173 Type.OBJECT, 4174 Type.STRUCT, 4175 } 4176 4177 NESTED_TYPES = { 4178 *STRUCT_TYPES, 4179 Type.ARRAY, 4180 Type.MAP, 4181 } 4182 4183 TEXT_TYPES = { 4184 Type.CHAR, 4185 Type.NCHAR, 4186 Type.NVARCHAR, 4187 Type.TEXT, 4188 Type.VARCHAR, 4189 Type.NAME, 4190 } 4191 4192 SIGNED_INTEGER_TYPES = { 4193 Type.BIGINT, 4194 Type.INT, 4195 Type.INT128, 4196 Type.INT256, 4197 Type.MEDIUMINT, 4198 Type.SMALLINT, 4199 Type.TINYINT, 4200 } 4201 4202 UNSIGNED_INTEGER_TYPES = { 4203 Type.UBIGINT, 4204 Type.UINT, 4205 Type.UINT128, 4206 Type.UINT256, 4207 Type.UMEDIUMINT, 4208 Type.USMALLINT, 4209 Type.UTINYINT, 4210 } 4211 4212 INTEGER_TYPES = { 4213 *SIGNED_INTEGER_TYPES, 4214 *UNSIGNED_INTEGER_TYPES, 4215 Type.BIT, 4216 } 4217 4218 FLOAT_TYPES = { 4219 Type.DOUBLE, 4220 Type.FLOAT, 4221 } 4222 4223 REAL_TYPES = { 4224 *FLOAT_TYPES, 4225 Type.BIGDECIMAL, 4226 Type.DECIMAL, 4227 Type.DECIMAL32, 4228 Type.DECIMAL64, 4229 Type.DECIMAL128, 4230 Type.MONEY, 4231 Type.SMALLMONEY, 4232 Type.UDECIMAL, 4233 } 4234 4235 NUMERIC_TYPES = { 4236 *INTEGER_TYPES, 4237 *REAL_TYPES, 4238 } 4239 4240 TEMPORAL_TYPES = { 4241 Type.DATE, 4242 Type.DATE32, 4243 Type.DATETIME, 4244 Type.DATETIME64, 4245 Type.TIME, 4246 Type.TIMESTAMP, 4247 Type.TIMESTAMPNTZ, 4248 Type.TIMESTAMPLTZ, 4249 Type.TIMESTAMPTZ, 4250 Type.TIMESTAMP_MS, 4251 Type.TIMESTAMP_NS, 4252 Type.TIMESTAMP_S, 4253 Type.TIMETZ, 4254 } 4255 4256 @classmethod 4257 def build( 4258 cls, 4259 dtype: DATA_TYPE, 4260 dialect: DialectType = None, 4261 udt: bool = False, 4262 copy: bool = True, 4263 **kwargs, 4264 ) -> DataType: 4265 """ 4266 Constructs a DataType object. 4267 4268 Args: 4269 dtype: the data type of interest. 4270 dialect: the dialect to use for parsing `dtype`, in case it's a string. 4271 udt: when set to True, `dtype` will be used as-is if it can't be parsed into a 4272 DataType, thus creating a user-defined type. 4273 copy: whether to copy the data type. 4274 kwargs: additional arguments to pass in the constructor of DataType. 4275 4276 Returns: 4277 The constructed DataType object. 4278 """ 4279 from sqlglot import parse_one 4280 4281 if isinstance(dtype, str): 4282 if dtype.upper() == "UNKNOWN": 4283 return DataType(this=DataType.Type.UNKNOWN, **kwargs) 4284 4285 try: 4286 data_type_exp = parse_one( 4287 dtype, read=dialect, into=DataType, error_level=ErrorLevel.IGNORE 4288 ) 4289 except ParseError: 4290 if udt: 4291 return DataType(this=DataType.Type.USERDEFINED, kind=dtype, **kwargs) 4292 raise 4293 elif isinstance(dtype, DataType.Type): 4294 data_type_exp = DataType(this=dtype) 4295 elif isinstance(dtype, DataType): 4296 return maybe_copy(dtype, copy) 4297 else: 4298 raise ValueError(f"Invalid data type: {type(dtype)}. Expected str or DataType.Type") 4299 4300 return DataType(**{**data_type_exp.args, **kwargs}) 4301 4302 def is_type(self, *dtypes: DATA_TYPE, check_nullable: bool = False) -> bool: 4303 """ 4304 Checks whether this DataType matches one of the provided data types. Nested types or precision 4305 will be compared using "structural equivalence" semantics, so e.g. array<int> != array<float>. 4306 4307 Args: 4308 dtypes: the data types to compare this DataType to. 4309 check_nullable: whether to take the NULLABLE type constructor into account for the comparison. 4310 If false, it means that NULLABLE<INT> is equivalent to INT. 4311 4312 Returns: 4313 True, if and only if there is a type in `dtypes` which is equal to this DataType. 4314 """ 4315 if ( 4316 not check_nullable 4317 and self.this == DataType.Type.NULLABLE 4318 and len(self.expressions) == 1 4319 ): 4320 this_type = self.expressions[0] 4321 else: 4322 this_type = self 4323 4324 for dtype in dtypes: 4325 other_type = DataType.build(dtype, copy=False, udt=True) 4326 if ( 4327 not check_nullable 4328 and other_type.this == DataType.Type.NULLABLE 4329 and len(other_type.expressions) == 1 4330 ): 4331 other_type = other_type.expressions[0] 4332 4333 if ( 4334 other_type.expressions 4335 or this_type.this == DataType.Type.USERDEFINED 4336 or other_type.this == DataType.Type.USERDEFINED 4337 ): 4338 matches = this_type == other_type 4339 else: 4340 matches = this_type.this == other_type.this 4341 4342 if matches: 4343 return True 4344 return False 4345 4346 4347DATA_TYPE = t.Union[str, DataType, DataType.Type] 4348 4349 4350# https://www.postgresql.org/docs/15/datatype-pseudo.html 4351class PseudoType(DataType): 4352 arg_types = {"this": True} 4353 4354 4355# https://www.postgresql.org/docs/15/datatype-oid.html 4356class ObjectIdentifier(DataType): 4357 arg_types = {"this": True} 4358 4359 4360# WHERE x <OP> EXISTS|ALL|ANY|SOME(SELECT ...) 4361class SubqueryPredicate(Predicate): 4362 pass 4363 4364 4365class All(SubqueryPredicate): 4366 pass 4367 4368 4369class Any(SubqueryPredicate): 4370 pass 4371 4372 4373class Exists(SubqueryPredicate): 4374 pass 4375 4376 4377# Commands to interact with the databases or engines. For most of the command 4378# expressions we parse whatever comes after the command's name as a string. 4379class Command(Expression): 4380 arg_types = {"this": True, "expression": False} 4381 4382 4383class Transaction(Expression): 4384 arg_types = {"this": False, "modes": False, "mark": False} 4385 4386 4387class Commit(Expression): 4388 arg_types = {"chain": False, "this": False, "durability": False} 4389 4390 4391class Rollback(Expression): 4392 arg_types = {"savepoint": False, "this": False} 4393 4394 4395class Alter(Expression): 4396 arg_types = { 4397 "this": True, 4398 "kind": True, 4399 "actions": True, 4400 "exists": False, 4401 "only": False, 4402 "options": False, 4403 "cluster": False, 4404 "not_valid": False, 4405 } 4406 4407 4408class AddConstraint(Expression): 4409 arg_types = {"expressions": True} 4410 4411 4412class DropPartition(Expression): 4413 arg_types = {"expressions": True, "exists": False} 4414 4415 4416# https://clickhouse.com/docs/en/sql-reference/statements/alter/partition#replace-partition 4417class ReplacePartition(Expression): 4418 arg_types = {"expression": True, "source": True} 4419 4420 4421# Binary expressions like (ADD a b) 4422class Binary(Condition): 4423 arg_types = {"this": True, "expression": True} 4424 4425 @property 4426 def left(self) -> Expression: 4427 return self.this 4428 4429 @property 4430 def right(self) -> Expression: 4431 return self.expression 4432 4433 4434class Add(Binary): 4435 pass 4436 4437 4438class Connector(Binary): 4439 pass 4440 4441 4442class And(Connector): 4443 pass 4444 4445 4446class Or(Connector): 4447 pass 4448 4449 4450class BitwiseAnd(Binary): 4451 pass 4452 4453 4454class BitwiseLeftShift(Binary): 4455 pass 4456 4457 4458class BitwiseOr(Binary): 4459 pass 4460 4461 4462class BitwiseRightShift(Binary): 4463 pass 4464 4465 4466class BitwiseXor(Binary): 4467 pass 4468 4469 4470class Div(Binary): 4471 arg_types = {"this": True, "expression": True, "typed": False, "safe": False} 4472 4473 4474class Overlaps(Binary): 4475 pass 4476 4477 4478class Dot(Binary): 4479 @property 4480 def is_star(self) -> bool: 4481 return self.expression.is_star 4482 4483 @property 4484 def name(self) -> str: 4485 return self.expression.name 4486 4487 @property 4488 def output_name(self) -> str: 4489 return self.name 4490 4491 @classmethod 4492 def build(self, expressions: t.Sequence[Expression]) -> Dot: 4493 """Build a Dot object with a sequence of expressions.""" 4494 if len(expressions) < 2: 4495 raise ValueError("Dot requires >= 2 expressions.") 4496 4497 return t.cast(Dot, reduce(lambda x, y: Dot(this=x, expression=y), expressions)) 4498 4499 @property 4500 def parts(self) -> t.List[Expression]: 4501 """Return the parts of a table / column in order catalog, db, table.""" 4502 this, *parts = self.flatten() 4503 4504 parts.reverse() 4505 4506 for arg in COLUMN_PARTS: 4507 part = this.args.get(arg) 4508 4509 if isinstance(part, Expression): 4510 parts.append(part) 4511 4512 parts.reverse() 4513 return parts 4514 4515 4516class DPipe(Binary): 4517 arg_types = {"this": True, "expression": True, "safe": False} 4518 4519 4520class EQ(Binary, Predicate): 4521 pass 4522 4523 4524class NullSafeEQ(Binary, Predicate): 4525 pass 4526 4527 4528class NullSafeNEQ(Binary, Predicate): 4529 pass 4530 4531 4532# Represents e.g. := in DuckDB which is mostly used for setting parameters 4533class PropertyEQ(Binary): 4534 pass 4535 4536 4537class Distance(Binary): 4538 pass 4539 4540 4541class Escape(Binary): 4542 pass 4543 4544 4545class Glob(Binary, Predicate): 4546 pass 4547 4548 4549class GT(Binary, Predicate): 4550 pass 4551 4552 4553class GTE(Binary, Predicate): 4554 pass 4555 4556 4557class ILike(Binary, Predicate): 4558 pass 4559 4560 4561class ILikeAny(Binary, Predicate): 4562 pass 4563 4564 4565class IntDiv(Binary): 4566 pass 4567 4568 4569class Is(Binary, Predicate): 4570 pass 4571 4572 4573class Kwarg(Binary): 4574 """Kwarg in special functions like func(kwarg => y).""" 4575 4576 4577class Like(Binary, Predicate): 4578 pass 4579 4580 4581class LikeAny(Binary, Predicate): 4582 pass 4583 4584 4585class LT(Binary, Predicate): 4586 pass 4587 4588 4589class LTE(Binary, Predicate): 4590 pass 4591 4592 4593class Mod(Binary): 4594 pass 4595 4596 4597class Mul(Binary): 4598 pass 4599 4600 4601class NEQ(Binary, Predicate): 4602 pass 4603 4604 4605# https://www.postgresql.org/docs/current/ddl-schemas.html#DDL-SCHEMAS-PATH 4606class Operator(Binary): 4607 arg_types = {"this": True, "operator": True, "expression": True} 4608 4609 4610class SimilarTo(Binary, Predicate): 4611 pass 4612 4613 4614class Slice(Binary): 4615 arg_types = {"this": False, "expression": False} 4616 4617 4618class Sub(Binary): 4619 pass 4620 4621 4622# Unary Expressions 4623# (NOT a) 4624class Unary(Condition): 4625 pass 4626 4627 4628class BitwiseNot(Unary): 4629 pass 4630 4631 4632class Not(Unary): 4633 pass 4634 4635 4636class Paren(Unary): 4637 @property 4638 def output_name(self) -> str: 4639 return self.this.name 4640 4641 4642class Neg(Unary): 4643 def to_py(self) -> int | Decimal: 4644 if self.is_number: 4645 return self.this.to_py() * -1 4646 return super().to_py() 4647 4648 4649class Alias(Expression): 4650 arg_types = {"this": True, "alias": False} 4651 4652 @property 4653 def output_name(self) -> str: 4654 return self.alias 4655 4656 4657# BigQuery requires the UNPIVOT column list aliases to be either strings or ints, but 4658# other dialects require identifiers. This enables us to transpile between them easily. 4659class PivotAlias(Alias): 4660 pass 4661 4662 4663# Represents Snowflake's ANY [ ORDER BY ... ] syntax 4664# https://docs.snowflake.com/en/sql-reference/constructs/pivot 4665class PivotAny(Expression): 4666 arg_types = {"this": False} 4667 4668 4669class Aliases(Expression): 4670 arg_types = {"this": True, "expressions": True} 4671 4672 @property 4673 def aliases(self): 4674 return self.expressions 4675 4676 4677# https://docs.aws.amazon.com/redshift/latest/dg/query-super.html 4678class AtIndex(Expression): 4679 arg_types = {"this": True, "expression": True} 4680 4681 4682class AtTimeZone(Expression): 4683 arg_types = {"this": True, "zone": True} 4684 4685 4686class FromTimeZone(Expression): 4687 arg_types = {"this": True, "zone": True} 4688 4689 4690class Between(Predicate): 4691 arg_types = {"this": True, "low": True, "high": True} 4692 4693 4694class Bracket(Condition): 4695 # https://cloud.google.com/bigquery/docs/reference/standard-sql/operators#array_subscript_operator 4696 arg_types = { 4697 "this": True, 4698 "expressions": True, 4699 "offset": False, 4700 "safe": False, 4701 "returns_list_for_maps": False, 4702 } 4703 4704 @property 4705 def output_name(self) -> str: 4706 if len(self.expressions) == 1: 4707 return self.expressions[0].output_name 4708 4709 return super().output_name 4710 4711 4712class Distinct(Expression): 4713 arg_types = {"expressions": False, "on": False} 4714 4715 4716class In(Predicate): 4717 arg_types = { 4718 "this": True, 4719 "expressions": False, 4720 "query": False, 4721 "unnest": False, 4722 "field": False, 4723 "is_global": False, 4724 } 4725 4726 4727# https://cloud.google.com/bigquery/docs/reference/standard-sql/procedural-language#for-in 4728class ForIn(Expression): 4729 arg_types = {"this": True, "expression": True} 4730 4731 4732class TimeUnit(Expression): 4733 """Automatically converts unit arg into a var.""" 4734 4735 arg_types = {"unit": False} 4736 4737 UNABBREVIATED_UNIT_NAME = { 4738 "D": "DAY", 4739 "H": "HOUR", 4740 "M": "MINUTE", 4741 "MS": "MILLISECOND", 4742 "NS": "NANOSECOND", 4743 "Q": "QUARTER", 4744 "S": "SECOND", 4745 "US": "MICROSECOND", 4746 "W": "WEEK", 4747 "Y": "YEAR", 4748 } 4749 4750 VAR_LIKE = (Column, Literal, Var) 4751 4752 def __init__(self, **args): 4753 unit = args.get("unit") 4754 if isinstance(unit, self.VAR_LIKE): 4755 args["unit"] = Var( 4756 this=(self.UNABBREVIATED_UNIT_NAME.get(unit.name) or unit.name).upper() 4757 ) 4758 elif isinstance(unit, Week): 4759 unit.set("this", Var(this=unit.this.name.upper())) 4760 4761 super().__init__(**args) 4762 4763 @property 4764 def unit(self) -> t.Optional[Var | IntervalSpan]: 4765 return self.args.get("unit") 4766 4767 4768class IntervalOp(TimeUnit): 4769 arg_types = {"unit": True, "expression": True} 4770 4771 def interval(self): 4772 return Interval( 4773 this=self.expression.copy(), 4774 unit=self.unit.copy(), 4775 ) 4776 4777 4778# https://www.oracletutorial.com/oracle-basics/oracle-interval/ 4779# https://trino.io/docs/current/language/types.html#interval-day-to-second 4780# https://docs.databricks.com/en/sql/language-manual/data-types/interval-type.html 4781class IntervalSpan(DataType): 4782 arg_types = {"this": True, "expression": True} 4783 4784 4785class Interval(TimeUnit): 4786 arg_types = {"this": False, "unit": False} 4787 4788 4789class IgnoreNulls(Expression): 4790 pass 4791 4792 4793class RespectNulls(Expression): 4794 pass 4795 4796 4797# https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate-function-calls#max_min_clause 4798class HavingMax(Expression): 4799 arg_types = {"this": True, "expression": True, "max": True} 4800 4801 4802# Functions 4803class Func(Condition): 4804 """ 4805 The base class for all function expressions. 4806 4807 Attributes: 4808 is_var_len_args (bool): if set to True the last argument defined in arg_types will be 4809 treated as a variable length argument and the argument's value will be stored as a list. 4810 _sql_names (list): the SQL name (1st item in the list) and aliases (subsequent items) for this 4811 function expression. These values are used to map this node to a name during parsing as 4812 well as to provide the function's name during SQL string generation. By default the SQL 4813 name is set to the expression's class name transformed to snake case. 4814 """ 4815 4816 is_var_len_args = False 4817 4818 @classmethod 4819 def from_arg_list(cls, args): 4820 if cls.is_var_len_args: 4821 all_arg_keys = list(cls.arg_types) 4822 # If this function supports variable length argument treat the last argument as such. 4823 non_var_len_arg_keys = all_arg_keys[:-1] if cls.is_var_len_args else all_arg_keys 4824 num_non_var = len(non_var_len_arg_keys) 4825 4826 args_dict = {arg_key: arg for arg, arg_key in zip(args, non_var_len_arg_keys)} 4827 args_dict[all_arg_keys[-1]] = args[num_non_var:] 4828 else: 4829 args_dict = {arg_key: arg for arg, arg_key in zip(args, cls.arg_types)} 4830 4831 return cls(**args_dict) 4832 4833 @classmethod 4834 def sql_names(cls): 4835 if cls is Func: 4836 raise NotImplementedError( 4837 "SQL name is only supported by concrete function implementations" 4838 ) 4839 if "_sql_names" not in cls.__dict__: 4840 cls._sql_names = [camel_to_snake_case(cls.__name__)] 4841 return cls._sql_names 4842 4843 @classmethod 4844 def sql_name(cls): 4845 return cls.sql_names()[0] 4846 4847 @classmethod 4848 def default_parser_mappings(cls): 4849 return {name: cls.from_arg_list for name in cls.sql_names()} 4850 4851 4852class AggFunc(Func): 4853 pass 4854 4855 4856class ParameterizedAgg(AggFunc): 4857 arg_types = {"this": True, "expressions": True, "params": True} 4858 4859 4860class Abs(Func): 4861 pass 4862 4863 4864class ArgMax(AggFunc): 4865 arg_types = {"this": True, "expression": True, "count": False} 4866 _sql_names = ["ARG_MAX", "ARGMAX", "MAX_BY"] 4867 4868 4869class ArgMin(AggFunc): 4870 arg_types = {"this": True, "expression": True, "count": False} 4871 _sql_names = ["ARG_MIN", "ARGMIN", "MIN_BY"] 4872 4873 4874class ApproxTopK(AggFunc): 4875 arg_types = {"this": True, "expression": False, "counters": False} 4876 4877 4878class Flatten(Func): 4879 pass 4880 4881 4882# https://spark.apache.org/docs/latest/api/sql/index.html#transform 4883class Transform(Func): 4884 arg_types = {"this": True, "expression": True} 4885 4886 4887class Anonymous(Func): 4888 arg_types = {"this": True, "expressions": False} 4889 is_var_len_args = True 4890 4891 @property 4892 def name(self) -> str: 4893 return self.this if isinstance(self.this, str) else self.this.name 4894 4895 4896class AnonymousAggFunc(AggFunc): 4897 arg_types = {"this": True, "expressions": False} 4898 is_var_len_args = True 4899 4900 4901# https://clickhouse.com/docs/en/sql-reference/aggregate-functions/combinators 4902class CombinedAggFunc(AnonymousAggFunc): 4903 arg_types = {"this": True, "expressions": False, "parts": True} 4904 4905 4906class CombinedParameterizedAgg(ParameterizedAgg): 4907 arg_types = {"this": True, "expressions": True, "params": True, "parts": True} 4908 4909 4910# https://docs.snowflake.com/en/sql-reference/functions/hll 4911# https://docs.aws.amazon.com/redshift/latest/dg/r_HLL_function.html 4912class Hll(AggFunc): 4913 arg_types = {"this": True, "expressions": False} 4914 is_var_len_args = True 4915 4916 4917class ApproxDistinct(AggFunc): 4918 arg_types = {"this": True, "accuracy": False} 4919 _sql_names = ["APPROX_DISTINCT", "APPROX_COUNT_DISTINCT"] 4920 4921 4922class Array(Func): 4923 arg_types = {"expressions": False, "bracket_notation": False} 4924 is_var_len_args = True 4925 4926 4927# https://docs.snowflake.com/en/sql-reference/functions/to_array 4928class ToArray(Func): 4929 pass 4930 4931 4932# https://materialize.com/docs/sql/types/list/ 4933class List(Func): 4934 arg_types = {"expressions": False} 4935 is_var_len_args = True 4936 4937 4938# String pad, kind True -> LPAD, False -> RPAD 4939class Pad(Func): 4940 arg_types = {"this": True, "expression": True, "fill_pattern": False, "is_left": True} 4941 4942 4943# https://docs.snowflake.com/en/sql-reference/functions/to_char 4944# https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/TO_CHAR-number.html 4945class ToChar(Func): 4946 arg_types = {"this": True, "format": False, "nlsparam": False} 4947 4948 4949# https://docs.snowflake.com/en/sql-reference/functions/to_decimal 4950# https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/TO_NUMBER.html 4951class ToNumber(Func): 4952 arg_types = { 4953 "this": True, 4954 "format": False, 4955 "nlsparam": False, 4956 "precision": False, 4957 "scale": False, 4958 } 4959 4960 4961# https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver16#syntax 4962class Convert(Func): 4963 arg_types = {"this": True, "expression": True, "style": False} 4964 4965 4966class ConvertTimezone(Func): 4967 arg_types = {"source_tz": False, "target_tz": True, "timestamp": True} 4968 4969 4970class GenerateSeries(Func): 4971 arg_types = {"start": True, "end": True, "step": False, "is_end_exclusive": False} 4972 4973 4974# Postgres' GENERATE_SERIES function returns a row set, i.e. it implicitly explodes when it's 4975# used in a projection, so this expression is a helper that facilitates transpilation to other 4976# dialects. For example, we'd generate UNNEST(GENERATE_SERIES(...)) in DuckDB 4977class ExplodingGenerateSeries(GenerateSeries): 4978 pass 4979 4980 4981class ArrayAgg(AggFunc): 4982 arg_types = {"this": True, "nulls_excluded": False} 4983 4984 4985class ArrayUniqueAgg(AggFunc): 4986 pass 4987 4988 4989class ArrayAll(Func): 4990 arg_types = {"this": True, "expression": True} 4991 4992 4993# Represents Python's `any(f(x) for x in array)`, where `array` is `this` and `f` is `expression` 4994class ArrayAny(Func): 4995 arg_types = {"this": True, "expression": True} 4996 4997 4998class ArrayConcat(Func): 4999 _sql_names = ["ARRAY_CONCAT", "ARRAY_CAT"] 5000 arg_types = {"this": True, "expressions": False} 5001 is_var_len_args = True 5002 5003 5004class ArrayConstructCompact(Func): 5005 arg_types = {"expressions": True} 5006 is_var_len_args = True 5007 5008 5009class ArrayContains(Binary, Func): 5010 _sql_names = ["ARRAY_CONTAINS", "ARRAY_HAS"] 5011 5012 5013class ArrayContainsAll(Binary, Func): 5014 _sql_names = ["ARRAY_CONTAINS_ALL", "ARRAY_HAS_ALL"] 5015 5016 5017class ArrayFilter(Func): 5018 arg_types = {"this": True, "expression": True} 5019 _sql_names = ["FILTER", "ARRAY_FILTER"] 5020 5021 5022class ArrayToString(Func): 5023 arg_types = {"this": True, "expression": True, "null": False} 5024 _sql_names = ["ARRAY_TO_STRING", "ARRAY_JOIN"] 5025 5026 5027class StringToArray(Func): 5028 arg_types = {"this": True, "expression": True, "null": False} 5029 _sql_names = ["STRING_TO_ARRAY", "SPLIT_BY_STRING"] 5030 5031 5032class ArrayOverlaps(Binary, Func): 5033 pass 5034 5035 5036class ArraySize(Func): 5037 arg_types = {"this": True, "expression": False} 5038 _sql_names = ["ARRAY_SIZE", "ARRAY_LENGTH"] 5039 5040 5041class ArraySort(Func): 5042 arg_types = {"this": True, "expression": False} 5043 5044 5045class ArraySum(Func): 5046 arg_types = {"this": True, "expression": False} 5047 5048 5049class ArrayUnionAgg(AggFunc): 5050 pass 5051 5052 5053class Avg(AggFunc): 5054 pass 5055 5056 5057class AnyValue(AggFunc): 5058 pass 5059 5060 5061class Lag(AggFunc): 5062 arg_types = {"this": True, "offset": False, "default": False} 5063 5064 5065class Lead(AggFunc): 5066 arg_types = {"this": True, "offset": False, "default": False} 5067 5068 5069# some dialects have a distinction between first and first_value, usually first is an aggregate func 5070# and first_value is a window func 5071class First(AggFunc): 5072 pass 5073 5074 5075class Last(AggFunc): 5076 pass 5077 5078 5079class FirstValue(AggFunc): 5080 pass 5081 5082 5083class LastValue(AggFunc): 5084 pass 5085 5086 5087class NthValue(AggFunc): 5088 arg_types = {"this": True, "offset": True} 5089 5090 5091class Case(Func): 5092 arg_types = {"this": False, "ifs": True, "default": False} 5093 5094 def when(self, condition: ExpOrStr, then: ExpOrStr, copy: bool = True, **opts) -> Case: 5095 instance = maybe_copy(self, copy) 5096 instance.append( 5097 "ifs", 5098 If( 5099 this=maybe_parse(condition, copy=copy, **opts), 5100 true=maybe_parse(then, copy=copy, **opts), 5101 ), 5102 ) 5103 return instance 5104 5105 def else_(self, condition: ExpOrStr, copy: bool = True, **opts) -> Case: 5106 instance = maybe_copy(self, copy) 5107 instance.set("default", maybe_parse(condition, copy=copy, **opts)) 5108 return instance 5109 5110 5111class Cast(Func): 5112 arg_types = { 5113 "this": True, 5114 "to": True, 5115 "format": False, 5116 "safe": False, 5117 "action": False, 5118 } 5119 5120 @property 5121 def name(self) -> str: 5122 return self.this.name 5123 5124 @property 5125 def to(self) -> DataType: 5126 return self.args["to"] 5127 5128 @property 5129 def output_name(self) -> str: 5130 return self.name 5131 5132 def is_type(self, *dtypes: DATA_TYPE) -> bool: 5133 """ 5134 Checks whether this Cast's DataType matches one of the provided data types. Nested types 5135 like arrays or structs will be compared using "structural equivalence" semantics, so e.g. 5136 array<int> != array<float>. 5137 5138 Args: 5139 dtypes: the data types to compare this Cast's DataType to. 5140 5141 Returns: 5142 True, if and only if there is a type in `dtypes` which is equal to this Cast's DataType. 5143 """ 5144 return self.to.is_type(*dtypes) 5145 5146 5147class TryCast(Cast): 5148 pass 5149 5150 5151class Try(Func): 5152 pass 5153 5154 5155class CastToStrType(Func): 5156 arg_types = {"this": True, "to": True} 5157 5158 5159class Collate(Binary, Func): 5160 pass 5161 5162 5163class Ceil(Func): 5164 arg_types = {"this": True, "decimals": False} 5165 _sql_names = ["CEIL", "CEILING"] 5166 5167 5168class Coalesce(Func): 5169 arg_types = {"this": True, "expressions": False, "is_nvl": False} 5170 is_var_len_args = True 5171 _sql_names = ["COALESCE", "IFNULL", "NVL"] 5172 5173 5174class Chr(Func): 5175 arg_types = {"this": True, "charset": False, "expressions": False} 5176 is_var_len_args = True 5177 _sql_names = ["CHR", "CHAR"] 5178 5179 5180class Concat(Func): 5181 arg_types = {"expressions": True, "safe": False, "coalesce": False} 5182 is_var_len_args = True 5183 5184 5185class ConcatWs(Concat): 5186 _sql_names = ["CONCAT_WS"] 5187 5188 5189# https://docs.oracle.com/cd/B13789_01/server.101/b10759/operators004.htm#i1035022 5190class ConnectByRoot(Func): 5191 pass 5192 5193 5194class Count(AggFunc): 5195 arg_types = {"this": False, "expressions": False, "big_int": False} 5196 is_var_len_args = True 5197 5198 5199class CountIf(AggFunc): 5200 _sql_names = ["COUNT_IF", "COUNTIF"] 5201 5202 5203# cube root 5204class Cbrt(Func): 5205 pass 5206 5207 5208class CurrentDate(Func): 5209 arg_types = {"this": False} 5210 5211 5212class CurrentDatetime(Func): 5213 arg_types = {"this": False} 5214 5215 5216class CurrentTime(Func): 5217 arg_types = {"this": False} 5218 5219 5220class CurrentTimestamp(Func): 5221 arg_types = {"this": False, "sysdate": False} 5222 5223 5224class CurrentUser(Func): 5225 arg_types = {"this": False} 5226 5227 5228class DateAdd(Func, IntervalOp): 5229 arg_types = {"this": True, "expression": True, "unit": False} 5230 5231 5232class DateSub(Func, IntervalOp): 5233 arg_types = {"this": True, "expression": True, "unit": False} 5234 5235 5236class DateDiff(Func, TimeUnit): 5237 _sql_names = ["DATEDIFF", "DATE_DIFF"] 5238 arg_types = {"this": True, "expression": True, "unit": False} 5239 5240 5241class DateTrunc(Func): 5242 arg_types = {"unit": True, "this": True, "zone": False} 5243 5244 def __init__(self, **args): 5245 unit = args.get("unit") 5246 if isinstance(unit, TimeUnit.VAR_LIKE): 5247 args["unit"] = Literal.string( 5248 (TimeUnit.UNABBREVIATED_UNIT_NAME.get(unit.name) or unit.name).upper() 5249 ) 5250 elif isinstance(unit, Week): 5251 unit.set("this", Literal.string(unit.this.name.upper())) 5252 5253 super().__init__(**args) 5254 5255 @property 5256 def unit(self) -> Expression: 5257 return self.args["unit"] 5258 5259 5260# https://cloud.google.com/bigquery/docs/reference/standard-sql/datetime_functions#datetime 5261# expression can either be time_expr or time_zone 5262class Datetime(Func): 5263 arg_types = {"this": True, "expression": False} 5264 5265 5266class DatetimeAdd(Func, IntervalOp): 5267 arg_types = {"this": True, "expression": True, "unit": False} 5268 5269 5270class DatetimeSub(Func, IntervalOp): 5271 arg_types = {"this": True, "expression": True, "unit": False} 5272 5273 5274class DatetimeDiff(Func, TimeUnit): 5275 arg_types = {"this": True, "expression": True, "unit": False} 5276 5277 5278class DatetimeTrunc(Func, TimeUnit): 5279 arg_types = {"this": True, "unit": True, "zone": False} 5280 5281 5282class DayOfWeek(Func): 5283 _sql_names = ["DAY_OF_WEEK", "DAYOFWEEK"] 5284 5285 5286# https://duckdb.org/docs/sql/functions/datepart.html#part-specifiers-only-usable-as-date-part-specifiers 5287# ISO day of week function in duckdb is ISODOW 5288class DayOfWeekIso(Func): 5289 _sql_names = ["DAYOFWEEK_ISO", "ISODOW"] 5290 5291 5292class DayOfMonth(Func): 5293 _sql_names = ["DAY_OF_MONTH", "DAYOFMONTH"] 5294 5295 5296class DayOfYear(Func): 5297 _sql_names = ["DAY_OF_YEAR", "DAYOFYEAR"] 5298 5299 5300class ToDays(Func): 5301 pass 5302 5303 5304class WeekOfYear(Func): 5305 _sql_names = ["WEEK_OF_YEAR", "WEEKOFYEAR"] 5306 5307 5308class MonthsBetween(Func): 5309 arg_types = {"this": True, "expression": True, "roundoff": False} 5310 5311 5312class LastDay(Func, TimeUnit): 5313 _sql_names = ["LAST_DAY", "LAST_DAY_OF_MONTH"] 5314 arg_types = {"this": True, "unit": False} 5315 5316 5317class Extract(Func): 5318 arg_types = {"this": True, "expression": True} 5319 5320 5321class Timestamp(Func): 5322 arg_types = {"this": False, "zone": False, "with_tz": False} 5323 5324 5325class TimestampAdd(Func, TimeUnit): 5326 arg_types = {"this": True, "expression": True, "unit": False} 5327 5328 5329class TimestampSub(Func, TimeUnit): 5330 arg_types = {"this": True, "expression": True, "unit": False} 5331 5332 5333class TimestampDiff(Func, TimeUnit): 5334 _sql_names = ["TIMESTAMPDIFF", "TIMESTAMP_DIFF"] 5335 arg_types = {"this": True, "expression": True, "unit": False} 5336 5337 5338class TimestampTrunc(Func, TimeUnit): 5339 arg_types = {"this": True, "unit": True, "zone": False} 5340 5341 5342class TimeAdd(Func, TimeUnit): 5343 arg_types = {"this": True, "expression": True, "unit": False} 5344 5345 5346class TimeSub(Func, TimeUnit): 5347 arg_types = {"this": True, "expression": True, "unit": False} 5348 5349 5350class TimeDiff(Func, TimeUnit): 5351 arg_types = {"this": True, "expression": True, "unit": False} 5352 5353 5354class TimeTrunc(Func, TimeUnit): 5355 arg_types = {"this": True, "unit": True, "zone": False} 5356 5357 5358class DateFromParts(Func): 5359 _sql_names = ["DATE_FROM_PARTS", "DATEFROMPARTS"] 5360 arg_types = {"year": True, "month": True, "day": True} 5361 5362 5363class TimeFromParts(Func): 5364 _sql_names = ["TIME_FROM_PARTS", "TIMEFROMPARTS"] 5365 arg_types = { 5366 "hour": True, 5367 "min": True, 5368 "sec": True, 5369 "nano": False, 5370 "fractions": False, 5371 "precision": False, 5372 } 5373 5374 5375class DateStrToDate(Func): 5376 pass 5377 5378 5379class DateToDateStr(Func): 5380 pass 5381 5382 5383class DateToDi(Func): 5384 pass 5385 5386 5387# https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#date 5388class Date(Func): 5389 arg_types = {"this": False, "zone": False, "expressions": False} 5390 is_var_len_args = True 5391 5392 5393class Day(Func): 5394 pass 5395 5396 5397class Decode(Func): 5398 arg_types = {"this": True, "charset": True, "replace": False} 5399 5400 5401class DiToDate(Func): 5402 pass 5403 5404 5405class Encode(Func): 5406 arg_types = {"this": True, "charset": True} 5407 5408 5409class Exp(Func): 5410 pass 5411 5412 5413# https://docs.snowflake.com/en/sql-reference/functions/flatten 5414class Explode(Func): 5415 arg_types = {"this": True, "expressions": False} 5416 is_var_len_args = True 5417 5418 5419# https://spark.apache.org/docs/latest/api/sql/#inline 5420class Inline(Func): 5421 pass 5422 5423 5424class ExplodeOuter(Explode): 5425 pass 5426 5427 5428class Posexplode(Explode): 5429 pass 5430 5431 5432class PosexplodeOuter(Posexplode, ExplodeOuter): 5433 pass 5434 5435 5436class Unnest(Func, UDTF): 5437 arg_types = { 5438 "expressions": True, 5439 "alias": False, 5440 "offset": False, 5441 "explode_array": False, 5442 } 5443 5444 @property 5445 def selects(self) -> t.List[Expression]: 5446 columns = super().selects 5447 offset = self.args.get("offset") 5448 if offset: 5449 columns = columns + [to_identifier("offset") if offset is True else offset] 5450 return columns 5451 5452 5453class Floor(Func): 5454 arg_types = {"this": True, "decimals": False} 5455 5456 5457class FromBase64(Func): 5458 pass 5459 5460 5461class ToBase64(Func): 5462 pass 5463 5464 5465# https://trino.io/docs/current/functions/datetime.html#from_iso8601_timestamp 5466class FromISO8601Timestamp(Func): 5467 _sql_names = ["FROM_ISO8601_TIMESTAMP"] 5468 5469 5470class GapFill(Func): 5471 arg_types = { 5472 "this": True, 5473 "ts_column": True, 5474 "bucket_width": True, 5475 "partitioning_columns": False, 5476 "value_columns": False, 5477 "origin": False, 5478 "ignore_nulls": False, 5479 } 5480 5481 5482# https://cloud.google.com/bigquery/docs/reference/standard-sql/array_functions#generate_date_array 5483class GenerateDateArray(Func): 5484 arg_types = {"start": True, "end": True, "step": False} 5485 5486 5487# https://cloud.google.com/bigquery/docs/reference/standard-sql/array_functions#generate_timestamp_array 5488class GenerateTimestampArray(Func): 5489 arg_types = {"start": True, "end": True, "step": True} 5490 5491 5492class Greatest(Func): 5493 arg_types = {"this": True, "expressions": False} 5494 is_var_len_args = True 5495 5496 5497class GroupConcat(AggFunc): 5498 arg_types = {"this": True, "separator": False} 5499 5500 5501class Hex(Func): 5502 pass 5503 5504 5505class LowerHex(Hex): 5506 pass 5507 5508 5509class Xor(Connector, Func): 5510 arg_types = {"this": False, "expression": False, "expressions": False} 5511 5512 5513class If(Func): 5514 arg_types = {"this": True, "true": True, "false": False} 5515 _sql_names = ["IF", "IIF"] 5516 5517 5518class Nullif(Func): 5519 arg_types = {"this": True, "expression": True} 5520 5521 5522class Initcap(Func): 5523 arg_types = {"this": True, "expression": False} 5524 5525 5526class IsNan(Func): 5527 _sql_names = ["IS_NAN", "ISNAN"] 5528 5529 5530class IsInf(Func): 5531 _sql_names = ["IS_INF", "ISINF"] 5532 5533 5534# https://www.postgresql.org/docs/current/functions-json.html 5535class JSON(Expression): 5536 arg_types = {"this": False, "with": False, "unique": False} 5537 5538 5539class JSONPath(Expression): 5540 arg_types = {"expressions": True} 5541 5542 @property 5543 def output_name(self) -> str: 5544 last_segment = self.expressions[-1].this 5545 return last_segment if isinstance(last_segment, str) else "" 5546 5547 5548class JSONPathPart(Expression): 5549 arg_types = {} 5550 5551 5552class JSONPathFilter(JSONPathPart): 5553 arg_types = {"this": True} 5554 5555 5556class JSONPathKey(JSONPathPart): 5557 arg_types = {"this": True} 5558 5559 5560class JSONPathRecursive(JSONPathPart): 5561 arg_types = {"this": False} 5562 5563 5564class JSONPathRoot(JSONPathPart): 5565 pass 5566 5567 5568class JSONPathScript(JSONPathPart): 5569 arg_types = {"this": True} 5570 5571 5572class JSONPathSlice(JSONPathPart): 5573 arg_types = {"start": False, "end": False, "step": False} 5574 5575 5576class JSONPathSelector(JSONPathPart): 5577 arg_types = {"this": True} 5578 5579 5580class JSONPathSubscript(JSONPathPart): 5581 arg_types = {"this": True} 5582 5583 5584class JSONPathUnion(JSONPathPart): 5585 arg_types = {"expressions": True} 5586 5587 5588class JSONPathWildcard(JSONPathPart): 5589 pass 5590 5591 5592class FormatJson(Expression): 5593 pass 5594 5595 5596class JSONKeyValue(Expression): 5597 arg_types = {"this": True, "expression": True} 5598 5599 5600class JSONObject(Func): 5601 arg_types = { 5602 "expressions": False, 5603 "null_handling": False, 5604 "unique_keys": False, 5605 "return_type": False, 5606 "encoding": False, 5607 } 5608 5609 5610class JSONObjectAgg(AggFunc): 5611 arg_types = { 5612 "expressions": False, 5613 "null_handling": False, 5614 "unique_keys": False, 5615 "return_type": False, 5616 "encoding": False, 5617 } 5618 5619 5620# https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/JSON_ARRAY.html 5621class JSONArray(Func): 5622 arg_types = { 5623 "expressions": True, 5624 "null_handling": False, 5625 "return_type": False, 5626 "strict": False, 5627 } 5628 5629 5630# https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/JSON_ARRAYAGG.html 5631class JSONArrayAgg(Func): 5632 arg_types = { 5633 "this": True, 5634 "order": False, 5635 "null_handling": False, 5636 "return_type": False, 5637 "strict": False, 5638 } 5639 5640 5641class JSONExists(Func): 5642 arg_types = {"this": True, "path": True, "passing": False, "on_condition": False} 5643 5644 5645# https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/JSON_TABLE.html 5646# Note: parsing of JSON column definitions is currently incomplete. 5647class JSONColumnDef(Expression): 5648 arg_types = {"this": False, "kind": False, "path": False, "nested_schema": False} 5649 5650 5651class JSONSchema(Expression): 5652 arg_types = {"expressions": True} 5653 5654 5655# https://dev.mysql.com/doc/refman/8.4/en/json-search-functions.html#function_json-value 5656class JSONValue(Expression): 5657 arg_types = { 5658 "this": True, 5659 "path": True, 5660 "returning": False, 5661 "on_condition": False, 5662 } 5663 5664 5665# # https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/JSON_TABLE.html 5666class JSONTable(Func): 5667 arg_types = { 5668 "this": True, 5669 "schema": True, 5670 "path": False, 5671 "error_handling": False, 5672 "empty_handling": False, 5673 } 5674 5675 5676# https://docs.snowflake.com/en/sql-reference/functions/object_insert 5677class ObjectInsert(Func): 5678 arg_types = { 5679 "this": True, 5680 "key": True, 5681 "value": True, 5682 "update_flag": False, 5683 } 5684 5685 5686class OpenJSONColumnDef(Expression): 5687 arg_types = {"this": True, "kind": True, "path": False, "as_json": False} 5688 5689 5690class OpenJSON(Func): 5691 arg_types = {"this": True, "path": False, "expressions": False} 5692 5693 5694class JSONBContains(Binary, Func): 5695 _sql_names = ["JSONB_CONTAINS"] 5696 5697 5698class JSONExtract(Binary, Func): 5699 arg_types = { 5700 "this": True, 5701 "expression": True, 5702 "only_json_types": False, 5703 "expressions": False, 5704 "variant_extract": False, 5705 } 5706 _sql_names = ["JSON_EXTRACT"] 5707 is_var_len_args = True 5708 5709 @property 5710 def output_name(self) -> str: 5711 return self.expression.output_name if not self.expressions else "" 5712 5713 5714class JSONExtractScalar(Binary, Func): 5715 arg_types = {"this": True, "expression": True, "only_json_types": False, "expressions": False} 5716 _sql_names = ["JSON_EXTRACT_SCALAR"] 5717 is_var_len_args = True 5718 5719 @property 5720 def output_name(self) -> str: 5721 return self.expression.output_name 5722 5723 5724class JSONBExtract(Binary, Func): 5725 _sql_names = ["JSONB_EXTRACT"] 5726 5727 5728class JSONBExtractScalar(Binary, Func): 5729 _sql_names = ["JSONB_EXTRACT_SCALAR"] 5730 5731 5732class JSONFormat(Func): 5733 arg_types = {"this": False, "options": False} 5734 _sql_names = ["JSON_FORMAT"] 5735 5736 5737# https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_member-of 5738class JSONArrayContains(Binary, Predicate, Func): 5739 _sql_names = ["JSON_ARRAY_CONTAINS"] 5740 5741 5742class ParseJSON(Func): 5743 # BigQuery, Snowflake have PARSE_JSON, Presto has JSON_PARSE 5744 # Snowflake also has TRY_PARSE_JSON, which is represented using `safe` 5745 _sql_names = ["PARSE_JSON", "JSON_PARSE"] 5746 arg_types = {"this": True, "expression": False, "safe": False} 5747 5748 5749class Least(Func): 5750 arg_types = {"this": True, "expressions": False} 5751 is_var_len_args = True 5752 5753 5754class Left(Func): 5755 arg_types = {"this": True, "expression": True} 5756 5757 5758class Right(Func): 5759 arg_types = {"this": True, "expression": True} 5760 5761 5762class Length(Func): 5763 arg_types = {"this": True, "binary": False} 5764 _sql_names = ["LENGTH", "LEN"] 5765 5766 5767class Levenshtein(Func): 5768 arg_types = { 5769 "this": True, 5770 "expression": False, 5771 "ins_cost": False, 5772 "del_cost": False, 5773 "sub_cost": False, 5774 } 5775 5776 5777class Ln(Func): 5778 pass 5779 5780 5781class Log(Func): 5782 arg_types = {"this": True, "expression": False} 5783 5784 5785class LogicalOr(AggFunc): 5786 _sql_names = ["LOGICAL_OR", "BOOL_OR", "BOOLOR_AGG"] 5787 5788 5789class LogicalAnd(AggFunc): 5790 _sql_names = ["LOGICAL_AND", "BOOL_AND", "BOOLAND_AGG"] 5791 5792 5793class Lower(Func): 5794 _sql_names = ["LOWER", "LCASE"] 5795 5796 5797class Map(Func): 5798 arg_types = {"keys": False, "values": False} 5799 5800 @property 5801 def keys(self) -> t.List[Expression]: 5802 keys = self.args.get("keys") 5803 return keys.expressions if keys else [] 5804 5805 @property 5806 def values(self) -> t.List[Expression]: 5807 values = self.args.get("values") 5808 return values.expressions if values else [] 5809 5810 5811# Represents the MAP {...} syntax in DuckDB - basically convert a struct to a MAP 5812class ToMap(Func): 5813 pass 5814 5815 5816class MapFromEntries(Func): 5817 pass 5818 5819 5820# https://learn.microsoft.com/en-us/sql/t-sql/language-elements/scope-resolution-operator-transact-sql?view=sql-server-ver16 5821class ScopeResolution(Expression): 5822 arg_types = {"this": False, "expression": True} 5823 5824 5825class Stream(Expression): 5826 pass 5827 5828 5829class StarMap(Func): 5830 pass 5831 5832 5833class VarMap(Func): 5834 arg_types = {"keys": True, "values": True} 5835 is_var_len_args = True 5836 5837 @property 5838 def keys(self) -> t.List[Expression]: 5839 return self.args["keys"].expressions 5840 5841 @property 5842 def values(self) -> t.List[Expression]: 5843 return self.args["values"].expressions 5844 5845 5846# https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html 5847class MatchAgainst(Func): 5848 arg_types = {"this": True, "expressions": True, "modifier": False} 5849 5850 5851class Max(AggFunc): 5852 arg_types = {"this": True, "expressions": False} 5853 is_var_len_args = True 5854 5855 5856class MD5(Func): 5857 _sql_names = ["MD5"] 5858 5859 5860# Represents the variant of the MD5 function that returns a binary value 5861class MD5Digest(Func): 5862 _sql_names = ["MD5_DIGEST"] 5863 5864 5865class Min(AggFunc): 5866 arg_types = {"this": True, "expressions": False} 5867 is_var_len_args = True 5868 5869 5870class Month(Func): 5871 pass 5872 5873 5874class AddMonths(Func): 5875 arg_types = {"this": True, "expression": True} 5876 5877 5878class Nvl2(Func): 5879 arg_types = {"this": True, "true": True, "false": False} 5880 5881 5882class Normalize(Func): 5883 arg_types = {"this": True, "form": False} 5884 5885 5886# https://cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-predict#mlpredict_function 5887class Predict(Func): 5888 arg_types = {"this": True, "expression": True, "params_struct": False} 5889 5890 5891class Pow(Binary, Func): 5892 _sql_names = ["POWER", "POW"] 5893 5894 5895class PercentileCont(AggFunc): 5896 arg_types = {"this": True, "expression": False} 5897 5898 5899class PercentileDisc(AggFunc): 5900 arg_types = {"this": True, "expression": False} 5901 5902 5903class Quantile(AggFunc): 5904 arg_types = {"this": True, "quantile": True} 5905 5906 5907class ApproxQuantile(Quantile): 5908 arg_types = {"this": True, "quantile": True, "accuracy": False, "weight": False} 5909 5910 5911class Quarter(Func): 5912 pass 5913 5914 5915# https://docs.teradata.com/r/Enterprise_IntelliFlex_VMware/SQL-Functions-Expressions-and-Predicates/Arithmetic-Trigonometric-Hyperbolic-Operators/Functions/RANDOM/RANDOM-Function-Syntax 5916# teradata lower and upper bounds 5917class Rand(Func): 5918 _sql_names = ["RAND", "RANDOM"] 5919 arg_types = {"this": False, "lower": False, "upper": False} 5920 5921 5922class Randn(Func): 5923 arg_types = {"this": False} 5924 5925 5926class RangeN(Func): 5927 arg_types = {"this": True, "expressions": True, "each": False} 5928 5929 5930class ReadCSV(Func): 5931 _sql_names = ["READ_CSV"] 5932 is_var_len_args = True 5933 arg_types = {"this": True, "expressions": False} 5934 5935 5936class Reduce(Func): 5937 arg_types = {"this": True, "initial": True, "merge": True, "finish": False} 5938 5939 5940class RegexpExtract(Func): 5941 arg_types = { 5942 "this": True, 5943 "expression": True, 5944 "position": False, 5945 "occurrence": False, 5946 "parameters": False, 5947 "group": False, 5948 } 5949 5950 5951class RegexpReplace(Func): 5952 arg_types = { 5953 "this": True, 5954 "expression": True, 5955 "replacement": False, 5956 "position": False, 5957 "occurrence": False, 5958 "modifiers": False, 5959 } 5960 5961 5962class RegexpLike(Binary, Func): 5963 arg_types = {"this": True, "expression": True, "flag": False} 5964 5965 5966class RegexpILike(Binary, Func): 5967 arg_types = {"this": True, "expression": True, "flag": False} 5968 5969 5970# https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.functions.split.html 5971# limit is the number of times a pattern is applied 5972class RegexpSplit(Func): 5973 arg_types = {"this": True, "expression": True, "limit": False} 5974 5975 5976class Repeat(Func): 5977 arg_types = {"this": True, "times": True} 5978 5979 5980# https://learn.microsoft.com/en-us/sql/t-sql/functions/round-transact-sql?view=sql-server-ver16 5981# tsql third argument function == trunctaion if not 0 5982class Round(Func): 5983 arg_types = {"this": True, "decimals": False, "truncate": False} 5984 5985 5986class RowNumber(Func): 5987 arg_types: t.Dict[str, t.Any] = {} 5988 5989 5990class SafeDivide(Func): 5991 arg_types = {"this": True, "expression": True} 5992 5993 5994class SHA(Func): 5995 _sql_names = ["SHA", "SHA1"] 5996 5997 5998class SHA2(Func): 5999 _sql_names = ["SHA2"] 6000 arg_types = {"this": True, "length": False} 6001 6002 6003class Sign(Func): 6004 _sql_names = ["SIGN", "SIGNUM"] 6005 6006 6007class SortArray(Func): 6008 arg_types = {"this": True, "asc": False} 6009 6010 6011class Split(Func): 6012 arg_types = {"this": True, "expression": True, "limit": False} 6013 6014 6015# Start may be omitted in the case of postgres 6016# https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6 6017class Substring(Func): 6018 arg_types = {"this": True, "start": False, "length": False} 6019 6020 6021class StandardHash(Func): 6022 arg_types = {"this": True, "expression": False} 6023 6024 6025class StartsWith(Func): 6026 _sql_names = ["STARTS_WITH", "STARTSWITH"] 6027 arg_types = {"this": True, "expression": True} 6028 6029 6030class StrPosition(Func): 6031 arg_types = { 6032 "this": True, 6033 "substr": True, 6034 "position": False, 6035 "instance": False, 6036 } 6037 6038 6039class StrToDate(Func): 6040 arg_types = {"this": True, "format": False, "safe": False} 6041 6042 6043class StrToTime(Func): 6044 arg_types = {"this": True, "format": True, "zone": False, "safe": False} 6045 6046 6047# Spark allows unix_timestamp() 6048# https://spark.apache.org/docs/3.1.3/api/python/reference/api/pyspark.sql.functions.unix_timestamp.html 6049class StrToUnix(Func): 6050 arg_types = {"this": False, "format": False} 6051 6052 6053# https://prestodb.io/docs/current/functions/string.html 6054# https://spark.apache.org/docs/latest/api/sql/index.html#str_to_map 6055class StrToMap(Func): 6056 arg_types = { 6057 "this": True, 6058 "pair_delim": False, 6059 "key_value_delim": False, 6060 "duplicate_resolution_callback": False, 6061 } 6062 6063 6064class NumberToStr(Func): 6065 arg_types = {"this": True, "format": True, "culture": False} 6066 6067 6068class FromBase(Func): 6069 arg_types = {"this": True, "expression": True} 6070 6071 6072class Struct(Func): 6073 arg_types = {"expressions": False} 6074 is_var_len_args = True 6075 6076 6077class StructExtract(Func): 6078 arg_types = {"this": True, "expression": True} 6079 6080 6081# https://learn.microsoft.com/en-us/sql/t-sql/functions/stuff-transact-sql?view=sql-server-ver16 6082# https://docs.snowflake.com/en/sql-reference/functions/insert 6083class Stuff(Func): 6084 _sql_names = ["STUFF", "INSERT"] 6085 arg_types = {"this": True, "start": True, "length": True, "expression": True} 6086 6087 6088class Sum(AggFunc): 6089 pass 6090 6091 6092class Sqrt(Func): 6093 pass 6094 6095 6096class Stddev(AggFunc): 6097 _sql_names = ["STDDEV", "STDEV"] 6098 6099 6100class StddevPop(AggFunc): 6101 pass 6102 6103 6104class StddevSamp(AggFunc): 6105 pass 6106 6107 6108# https://cloud.google.com/bigquery/docs/reference/standard-sql/time_functions#time 6109class Time(Func): 6110 arg_types = {"this": False, "zone": False} 6111 6112 6113class TimeToStr(Func): 6114 arg_types = {"this": True, "format": True, "culture": False, "zone": False} 6115 6116 6117class TimeToTimeStr(Func): 6118 pass 6119 6120 6121class TimeToUnix(Func): 6122 pass 6123 6124 6125class TimeStrToDate(Func): 6126 pass 6127 6128 6129class TimeStrToTime(Func): 6130 arg_types = {"this": True, "zone": False} 6131 6132 6133class TimeStrToUnix(Func): 6134 pass 6135 6136 6137class Trim(Func): 6138 arg_types = { 6139 "this": True, 6140 "expression": False, 6141 "position": False, 6142 "collation": False, 6143 } 6144 6145 6146class TsOrDsAdd(Func, TimeUnit): 6147 # return_type is used to correctly cast the arguments of this expression when transpiling it 6148 arg_types = {"this": True, "expression": True, "unit": False, "return_type": False} 6149 6150 @property 6151 def return_type(self) -> DataType: 6152 return DataType.build(self.args.get("return_type") or DataType.Type.DATE) 6153 6154 6155class TsOrDsDiff(Func, TimeUnit): 6156 arg_types = {"this": True, "expression": True, "unit": False} 6157 6158 6159class TsOrDsToDateStr(Func): 6160 pass 6161 6162 6163class TsOrDsToDate(Func): 6164 arg_types = {"this": True, "format": False, "safe": False} 6165 6166 6167class TsOrDsToTime(Func): 6168 pass 6169 6170 6171class TsOrDsToTimestamp(Func): 6172 pass 6173 6174 6175class TsOrDiToDi(Func): 6176 pass 6177 6178 6179class Unhex(Func): 6180 pass 6181 6182 6183# https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions#unix_date 6184class UnixDate(Func): 6185 pass 6186 6187 6188class UnixToStr(Func): 6189 arg_types = {"this": True, "format": False} 6190 6191 6192# https://prestodb.io/docs/current/functions/datetime.html 6193# presto has weird zone/hours/minutes 6194class UnixToTime(Func): 6195 arg_types = { 6196 "this": True, 6197 "scale": False, 6198 "zone": False, 6199 "hours": False, 6200 "minutes": False, 6201 "format": False, 6202 } 6203 6204 SECONDS = Literal.number(0) 6205 DECIS = Literal.number(1) 6206 CENTIS = Literal.number(2) 6207 MILLIS = Literal.number(3) 6208 DECIMILLIS = Literal.number(4) 6209 CENTIMILLIS = Literal.number(5) 6210 MICROS = Literal.number(6) 6211 DECIMICROS = Literal.number(7) 6212 CENTIMICROS = Literal.number(8) 6213 NANOS = Literal.number(9) 6214 6215 6216class UnixToTimeStr(Func): 6217 pass 6218 6219 6220class TimestampFromParts(Func): 6221 _sql_names = ["TIMESTAMP_FROM_PARTS", "TIMESTAMPFROMPARTS"] 6222 arg_types = { 6223 "year": True, 6224 "month": True, 6225 "day": True, 6226 "hour": True, 6227 "min": True, 6228 "sec": True, 6229 "nano": False, 6230 "zone": False, 6231 "milli": False, 6232 } 6233 6234 6235class Upper(Func): 6236 _sql_names = ["UPPER", "UCASE"] 6237 6238 6239class Corr(Binary, AggFunc): 6240 pass 6241 6242 6243class Variance(AggFunc): 6244 _sql_names = ["VARIANCE", "VARIANCE_SAMP", "VAR_SAMP"] 6245 6246 6247class VariancePop(AggFunc): 6248 _sql_names = ["VARIANCE_POP", "VAR_POP"] 6249 6250 6251class CovarSamp(Binary, AggFunc): 6252 pass 6253 6254 6255class CovarPop(Binary, AggFunc): 6256 pass 6257 6258 6259class Week(Func): 6260 arg_types = {"this": True, "mode": False} 6261 6262 6263class XMLTable(Func): 6264 arg_types = {"this": True, "passing": False, "columns": False, "by_ref": False} 6265 6266 6267class Year(Func): 6268 pass 6269 6270 6271class Use(Expression): 6272 arg_types = {"this": True, "kind": False} 6273 6274 6275class Merge(Expression): 6276 arg_types = { 6277 "this": True, 6278 "using": True, 6279 "on": True, 6280 "expressions": True, 6281 "with": False, 6282 } 6283 6284 6285class When(Func): 6286 arg_types = {"matched": True, "source": False, "condition": False, "then": True} 6287 6288 6289# https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqljnextvaluefor.html 6290# https://learn.microsoft.com/en-us/sql/t-sql/functions/next-value-for-transact-sql?view=sql-server-ver16 6291class NextValueFor(Func): 6292 arg_types = {"this": True, "order": False} 6293 6294 6295# Refers to a trailing semi-colon. This is only used to preserve trailing comments 6296# select 1; -- my comment 6297class Semicolon(Expression): 6298 arg_types = {} 6299 6300 6301def _norm_arg(arg): 6302 return arg.lower() if type(arg) is str else arg 6303 6304 6305ALL_FUNCTIONS = subclasses(__name__, Func, (AggFunc, Anonymous, Func)) 6306FUNCTION_BY_NAME = {name: func for func in ALL_FUNCTIONS for name in func.sql_names()} 6307 6308JSON_PATH_PARTS = subclasses(__name__, JSONPathPart, (JSONPathPart,)) 6309 6310PERCENTILES = (PercentileCont, PercentileDisc) 6311 6312 6313# Helpers 6314@t.overload 6315def maybe_parse( 6316 sql_or_expression: ExpOrStr, 6317 *, 6318 into: t.Type[E], 6319 dialect: DialectType = None, 6320 prefix: t.Optional[str] = None, 6321 copy: bool = False, 6322 **opts, 6323) -> E: ... 6324 6325 6326@t.overload 6327def maybe_parse( 6328 sql_or_expression: str | E, 6329 *, 6330 into: t.Optional[IntoType] = None, 6331 dialect: DialectType = None, 6332 prefix: t.Optional[str] = None, 6333 copy: bool = False, 6334 **opts, 6335) -> E: ... 6336 6337 6338def maybe_parse( 6339 sql_or_expression: ExpOrStr, 6340 *, 6341 into: t.Optional[IntoType] = None, 6342 dialect: DialectType = None, 6343 prefix: t.Optional[str] = None, 6344 copy: bool = False, 6345 **opts, 6346) -> Expression: 6347 """Gracefully handle a possible string or expression. 6348 6349 Example: 6350 >>> maybe_parse("1") 6351 Literal(this=1, is_string=False) 6352 >>> maybe_parse(to_identifier("x")) 6353 Identifier(this=x, quoted=False) 6354 6355 Args: 6356 sql_or_expression: the SQL code string or an expression 6357 into: the SQLGlot Expression to parse into 6358 dialect: the dialect used to parse the input expressions (in the case that an 6359 input expression is a SQL string). 6360 prefix: a string to prefix the sql with before it gets parsed 6361 (automatically includes a space) 6362 copy: whether to copy the expression. 6363 **opts: other options to use to parse the input expressions (again, in the case 6364 that an input expression is a SQL string). 6365 6366 Returns: 6367 Expression: the parsed or given expression. 6368 """ 6369 if isinstance(sql_or_expression, Expression): 6370 if copy: 6371 return sql_or_expression.copy() 6372 return sql_or_expression 6373 6374 if sql_or_expression is None: 6375 raise ParseError("SQL cannot be None") 6376 6377 import sqlglot 6378 6379 sql = str(sql_or_expression) 6380 if prefix: 6381 sql = f"{prefix} {sql}" 6382 6383 return sqlglot.parse_one(sql, read=dialect, into=into, **opts) 6384 6385 6386@t.overload 6387def maybe_copy(instance: None, copy: bool = True) -> None: ... 6388 6389 6390@t.overload 6391def maybe_copy(instance: E, copy: bool = True) -> E: ... 6392 6393 6394def maybe_copy(instance, copy=True): 6395 return instance.copy() if copy and instance else instance 6396 6397 6398def _to_s(node: t.Any, verbose: bool = False, level: int = 0) -> str: 6399 """Generate a textual representation of an Expression tree""" 6400 indent = "\n" + (" " * (level + 1)) 6401 delim = f",{indent}" 6402 6403 if isinstance(node, Expression): 6404 args = {k: v for k, v in node.args.items() if (v is not None and v != []) or verbose} 6405 6406 if (node.type or verbose) and not isinstance(node, DataType): 6407 args["_type"] = node.type 6408 if node.comments or verbose: 6409 args["_comments"] = node.comments 6410 6411 if verbose: 6412 args["_id"] = id(node) 6413 6414 # Inline leaves for a more compact representation 6415 if node.is_leaf(): 6416 indent = "" 6417 delim = ", " 6418 6419 items = delim.join([f"{k}={_to_s(v, verbose, level + 1)}" for k, v in args.items()]) 6420 return f"{node.__class__.__name__}({indent}{items})" 6421 6422 if isinstance(node, list): 6423 items = delim.join(_to_s(i, verbose, level + 1) for i in node) 6424 items = f"{indent}{items}" if items else "" 6425 return f"[{items}]" 6426 6427 # Indent multiline strings to match the current level 6428 return indent.join(textwrap.dedent(str(node).strip("\n")).splitlines()) 6429 6430 6431def _is_wrong_expression(expression, into): 6432 return isinstance(expression, Expression) and not isinstance(expression, into) 6433 6434 6435def _apply_builder( 6436 expression, 6437 instance, 6438 arg, 6439 copy=True, 6440 prefix=None, 6441 into=None, 6442 dialect=None, 6443 into_arg="this", 6444 **opts, 6445): 6446 if _is_wrong_expression(expression, into): 6447 expression = into(**{into_arg: expression}) 6448 instance = maybe_copy(instance, copy) 6449 expression = maybe_parse( 6450 sql_or_expression=expression, 6451 prefix=prefix, 6452 into=into, 6453 dialect=dialect, 6454 **opts, 6455 ) 6456 instance.set(arg, expression) 6457 return instance 6458 6459 6460def _apply_child_list_builder( 6461 *expressions, 6462 instance, 6463 arg, 6464 append=True, 6465 copy=True, 6466 prefix=None, 6467 into=None, 6468 dialect=None, 6469 properties=None, 6470 **opts, 6471): 6472 instance = maybe_copy(instance, copy) 6473 parsed = [] 6474 properties = {} if properties is None else properties 6475 6476 for expression in expressions: 6477 if expression is not None: 6478 if _is_wrong_expression(expression, into): 6479 expression = into(expressions=[expression]) 6480 6481 expression = maybe_parse( 6482 expression, 6483 into=into, 6484 dialect=dialect, 6485 prefix=prefix, 6486 **opts, 6487 ) 6488 for k, v in expression.args.items(): 6489 if k == "expressions": 6490 parsed.extend(v) 6491 else: 6492 properties[k] = v 6493 6494 existing = instance.args.get(arg) 6495 if append and existing: 6496 parsed = existing.expressions + parsed 6497 6498 child = into(expressions=parsed) 6499 for k, v in properties.items(): 6500 child.set(k, v) 6501 instance.set(arg, child) 6502 6503 return instance 6504 6505 6506def _apply_list_builder( 6507 *expressions, 6508 instance, 6509 arg, 6510 append=True, 6511 copy=True, 6512 prefix=None, 6513 into=None, 6514 dialect=None, 6515 **opts, 6516): 6517 inst = maybe_copy(instance, copy) 6518 6519 expressions = [ 6520 maybe_parse( 6521 sql_or_expression=expression, 6522 into=into, 6523 prefix=prefix, 6524 dialect=dialect, 6525 **opts, 6526 ) 6527 for expression in expressions 6528 if expression is not None 6529 ] 6530 6531 existing_expressions = inst.args.get(arg) 6532 if append and existing_expressions: 6533 expressions = existing_expressions + expressions 6534 6535 inst.set(arg, expressions) 6536 return inst 6537 6538 6539def _apply_conjunction_builder( 6540 *expressions, 6541 instance, 6542 arg, 6543 into=None, 6544 append=True, 6545 copy=True, 6546 dialect=None, 6547 **opts, 6548): 6549 expressions = [exp for exp in expressions if exp is not None and exp != ""] 6550 if not expressions: 6551 return instance 6552 6553 inst = maybe_copy(instance, copy) 6554 6555 existing = inst.args.get(arg) 6556 if append and existing is not None: 6557 expressions = [existing.this if into else existing] + list(expressions) 6558 6559 node = and_(*expressions, dialect=dialect, copy=copy, **opts) 6560 6561 inst.set(arg, into(this=node) if into else node) 6562 return inst 6563 6564 6565def _apply_cte_builder( 6566 instance: E, 6567 alias: ExpOrStr, 6568 as_: ExpOrStr, 6569 recursive: t.Optional[bool] = None, 6570 materialized: t.Optional[bool] = None, 6571 append: bool = True, 6572 dialect: DialectType = None, 6573 copy: bool = True, 6574 **opts, 6575) -> E: 6576 alias_expression = maybe_parse(alias, dialect=dialect, into=TableAlias, **opts) 6577 as_expression = maybe_parse(as_, dialect=dialect, **opts) 6578 cte = CTE(this=as_expression, alias=alias_expression, materialized=materialized) 6579 return _apply_child_list_builder( 6580 cte, 6581 instance=instance, 6582 arg="with", 6583 append=append, 6584 copy=copy, 6585 into=With, 6586 properties={"recursive": recursive or False}, 6587 ) 6588 6589 6590def _combine( 6591 expressions: t.Sequence[t.Optional[ExpOrStr]], 6592 operator: t.Type[Connector], 6593 dialect: DialectType = None, 6594 copy: bool = True, 6595 **opts, 6596) -> Expression: 6597 conditions = [ 6598 condition(expression, dialect=dialect, copy=copy, **opts) 6599 for expression in expressions 6600 if expression is not None 6601 ] 6602 6603 this, *rest = conditions 6604 if rest: 6605 this = _wrap(this, Connector) 6606 for expression in rest: 6607 this = operator(this=this, expression=_wrap(expression, Connector)) 6608 6609 return this 6610 6611 6612def _wrap(expression: E, kind: t.Type[Expression]) -> E | Paren: 6613 return Paren(this=expression) if isinstance(expression, kind) else expression 6614 6615 6616def union( 6617 left: ExpOrStr, 6618 right: ExpOrStr, 6619 distinct: bool = True, 6620 dialect: DialectType = None, 6621 copy: bool = True, 6622 **opts, 6623) -> Union: 6624 """ 6625 Initializes a syntax tree from one UNION expression. 6626 6627 Example: 6628 >>> union("SELECT * FROM foo", "SELECT * FROM bla").sql() 6629 'SELECT * FROM foo UNION SELECT * FROM bla' 6630 6631 Args: 6632 left: the SQL code string corresponding to the left-hand side. 6633 If an `Expression` instance is passed, it will be used as-is. 6634 right: the SQL code string corresponding to the right-hand side. 6635 If an `Expression` instance is passed, it will be used as-is. 6636 distinct: set the DISTINCT flag if and only if this is true. 6637 dialect: the dialect used to parse the input expression. 6638 copy: whether to copy the expression. 6639 opts: other options to use to parse the input expressions. 6640 6641 Returns: 6642 The new Union instance. 6643 """ 6644 left = maybe_parse(sql_or_expression=left, dialect=dialect, copy=copy, **opts) 6645 right = maybe_parse(sql_or_expression=right, dialect=dialect, copy=copy, **opts) 6646 6647 return Union(this=left, expression=right, distinct=distinct) 6648 6649 6650def intersect( 6651 left: ExpOrStr, 6652 right: ExpOrStr, 6653 distinct: bool = True, 6654 dialect: DialectType = None, 6655 copy: bool = True, 6656 **opts, 6657) -> Intersect: 6658 """ 6659 Initializes a syntax tree from one INTERSECT expression. 6660 6661 Example: 6662 >>> intersect("SELECT * FROM foo", "SELECT * FROM bla").sql() 6663 'SELECT * FROM foo INTERSECT SELECT * FROM bla' 6664 6665 Args: 6666 left: the SQL code string corresponding to the left-hand side. 6667 If an `Expression` instance is passed, it will be used as-is. 6668 right: the SQL code string corresponding to the right-hand side. 6669 If an `Expression` instance is passed, it will be used as-is. 6670 distinct: set the DISTINCT flag if and only if this is true. 6671 dialect: the dialect used to parse the input expression. 6672 copy: whether to copy the expression. 6673 opts: other options to use to parse the input expressions. 6674 6675 Returns: 6676 The new Intersect instance. 6677 """ 6678 left = maybe_parse(sql_or_expression=left, dialect=dialect, copy=copy, **opts) 6679 right = maybe_parse(sql_or_expression=right, dialect=dialect, copy=copy, **opts) 6680 6681 return Intersect(this=left, expression=right, distinct=distinct) 6682 6683 6684def except_( 6685 left: ExpOrStr, 6686 right: ExpOrStr, 6687 distinct: bool = True, 6688 dialect: DialectType = None, 6689 copy: bool = True, 6690 **opts, 6691) -> Except: 6692 """ 6693 Initializes a syntax tree from one EXCEPT expression. 6694 6695 Example: 6696 >>> except_("SELECT * FROM foo", "SELECT * FROM bla").sql() 6697 'SELECT * FROM foo EXCEPT SELECT * FROM bla' 6698 6699 Args: 6700 left: the SQL code string corresponding to the left-hand side. 6701 If an `Expression` instance is passed, it will be used as-is. 6702 right: the SQL code string corresponding to the right-hand side. 6703 If an `Expression` instance is passed, it will be used as-is. 6704 distinct: set the DISTINCT flag if and only if this is true. 6705 dialect: the dialect used to parse the input expression. 6706 copy: whether to copy the expression. 6707 opts: other options to use to parse the input expressions. 6708 6709 Returns: 6710 The new Except instance. 6711 """ 6712 left = maybe_parse(sql_or_expression=left, dialect=dialect, copy=copy, **opts) 6713 right = maybe_parse(sql_or_expression=right, dialect=dialect, copy=copy, **opts) 6714 6715 return Except(this=left, expression=right, distinct=distinct) 6716 6717 6718def select(*expressions: ExpOrStr, dialect: DialectType = None, **opts) -> Select: 6719 """ 6720 Initializes a syntax tree from one or multiple SELECT expressions. 6721 6722 Example: 6723 >>> select("col1", "col2").from_("tbl").sql() 6724 'SELECT col1, col2 FROM tbl' 6725 6726 Args: 6727 *expressions: the SQL code string to parse as the expressions of a 6728 SELECT statement. If an Expression instance is passed, this is used as-is. 6729 dialect: the dialect used to parse the input expressions (in the case that an 6730 input expression is a SQL string). 6731 **opts: other options to use to parse the input expressions (again, in the case 6732 that an input expression is a SQL string). 6733 6734 Returns: 6735 Select: the syntax tree for the SELECT statement. 6736 """ 6737 return Select().select(*expressions, dialect=dialect, **opts) 6738 6739 6740def from_(expression: ExpOrStr, dialect: DialectType = None, **opts) -> Select: 6741 """ 6742 Initializes a syntax tree from a FROM expression. 6743 6744 Example: 6745 >>> from_("tbl").select("col1", "col2").sql() 6746 'SELECT col1, col2 FROM tbl' 6747 6748 Args: 6749 *expression: the SQL code string to parse as the FROM expressions of a 6750 SELECT statement. If an Expression instance is passed, this is used as-is. 6751 dialect: the dialect used to parse the input expression (in the case that the 6752 input expression is a SQL string). 6753 **opts: other options to use to parse the input expressions (again, in the case 6754 that the input expression is a SQL string). 6755 6756 Returns: 6757 Select: the syntax tree for the SELECT statement. 6758 """ 6759 return Select().from_(expression, dialect=dialect, **opts) 6760 6761 6762def update( 6763 table: str | Table, 6764 properties: dict, 6765 where: t.Optional[ExpOrStr] = None, 6766 from_: t.Optional[ExpOrStr] = None, 6767 dialect: DialectType = None, 6768 **opts, 6769) -> Update: 6770 """ 6771 Creates an update statement. 6772 6773 Example: 6774 >>> update("my_table", {"x": 1, "y": "2", "z": None}, from_="baz", where="id > 1").sql() 6775 "UPDATE my_table SET x = 1, y = '2', z = NULL FROM baz WHERE id > 1" 6776 6777 Args: 6778 *properties: dictionary of properties to set which are 6779 auto converted to sql objects eg None -> NULL 6780 where: sql conditional parsed into a WHERE statement 6781 from_: sql statement parsed into a FROM statement 6782 dialect: the dialect used to parse the input expressions. 6783 **opts: other options to use to parse the input expressions. 6784 6785 Returns: 6786 Update: the syntax tree for the UPDATE statement. 6787 """ 6788 update_expr = Update(this=maybe_parse(table, into=Table, dialect=dialect)) 6789 update_expr.set( 6790 "expressions", 6791 [ 6792 EQ(this=maybe_parse(k, dialect=dialect, **opts), expression=convert(v)) 6793 for k, v in properties.items() 6794 ], 6795 ) 6796 if from_: 6797 update_expr.set( 6798 "from", 6799 maybe_parse(from_, into=From, dialect=dialect, prefix="FROM", **opts), 6800 ) 6801 if isinstance(where, Condition): 6802 where = Where(this=where) 6803 if where: 6804 update_expr.set( 6805 "where", 6806 maybe_parse(where, into=Where, dialect=dialect, prefix="WHERE", **opts), 6807 ) 6808 return update_expr 6809 6810 6811def delete( 6812 table: ExpOrStr, 6813 where: t.Optional[ExpOrStr] = None, 6814 returning: t.Optional[ExpOrStr] = None, 6815 dialect: DialectType = None, 6816 **opts, 6817) -> Delete: 6818 """ 6819 Builds a delete statement. 6820 6821 Example: 6822 >>> delete("my_table", where="id > 1").sql() 6823 'DELETE FROM my_table WHERE id > 1' 6824 6825 Args: 6826 where: sql conditional parsed into a WHERE statement 6827 returning: sql conditional parsed into a RETURNING statement 6828 dialect: the dialect used to parse the input expressions. 6829 **opts: other options to use to parse the input expressions. 6830 6831 Returns: 6832 Delete: the syntax tree for the DELETE statement. 6833 """ 6834 delete_expr = Delete().delete(table, dialect=dialect, copy=False, **opts) 6835 if where: 6836 delete_expr = delete_expr.where(where, dialect=dialect, copy=False, **opts) 6837 if returning: 6838 delete_expr = t.cast( 6839 Delete, delete_expr.returning(returning, dialect=dialect, copy=False, **opts) 6840 ) 6841 return delete_expr 6842 6843 6844def insert( 6845 expression: ExpOrStr, 6846 into: ExpOrStr, 6847 columns: t.Optional[t.Sequence[str | Identifier]] = None, 6848 overwrite: t.Optional[bool] = None, 6849 returning: t.Optional[ExpOrStr] = None, 6850 dialect: DialectType = None, 6851 copy: bool = True, 6852 **opts, 6853) -> Insert: 6854 """ 6855 Builds an INSERT statement. 6856 6857 Example: 6858 >>> insert("VALUES (1, 2, 3)", "tbl").sql() 6859 'INSERT INTO tbl VALUES (1, 2, 3)' 6860 6861 Args: 6862 expression: the sql string or expression of the INSERT statement 6863 into: the tbl to insert data to. 6864 columns: optionally the table's column names. 6865 overwrite: whether to INSERT OVERWRITE or not. 6866 returning: sql conditional parsed into a RETURNING statement 6867 dialect: the dialect used to parse the input expressions. 6868 copy: whether to copy the expression. 6869 **opts: other options to use to parse the input expressions. 6870 6871 Returns: 6872 Insert: the syntax tree for the INSERT statement. 6873 """ 6874 expr = maybe_parse(expression, dialect=dialect, copy=copy, **opts) 6875 this: Table | Schema = maybe_parse(into, into=Table, dialect=dialect, copy=copy, **opts) 6876 6877 if columns: 6878 this = Schema(this=this, expressions=[to_identifier(c, copy=copy) for c in columns]) 6879 6880 insert = Insert(this=this, expression=expr, overwrite=overwrite) 6881 6882 if returning: 6883 insert = t.cast(Insert, insert.returning(returning, dialect=dialect, copy=False, **opts)) 6884 6885 return insert 6886 6887 6888def condition( 6889 expression: ExpOrStr, dialect: DialectType = None, copy: bool = True, **opts 6890) -> Condition: 6891 """ 6892 Initialize a logical condition expression. 6893 6894 Example: 6895 >>> condition("x=1").sql() 6896 'x = 1' 6897 6898 This is helpful for composing larger logical syntax trees: 6899 >>> where = condition("x=1") 6900 >>> where = where.and_("y=1") 6901 >>> Select().from_("tbl").select("*").where(where).sql() 6902 'SELECT * FROM tbl WHERE x = 1 AND y = 1' 6903 6904 Args: 6905 *expression: the SQL code string to parse. 6906 If an Expression instance is passed, this is used as-is. 6907 dialect: the dialect used to parse the input expression (in the case that the 6908 input expression is a SQL string). 6909 copy: Whether to copy `expression` (only applies to expressions). 6910 **opts: other options to use to parse the input expressions (again, in the case 6911 that the input expression is a SQL string). 6912 6913 Returns: 6914 The new Condition instance 6915 """ 6916 return maybe_parse( 6917 expression, 6918 into=Condition, 6919 dialect=dialect, 6920 copy=copy, 6921 **opts, 6922 ) 6923 6924 6925def and_( 6926 *expressions: t.Optional[ExpOrStr], dialect: DialectType = None, copy: bool = True, **opts 6927) -> Condition: 6928 """ 6929 Combine multiple conditions with an AND logical operator. 6930 6931 Example: 6932 >>> and_("x=1", and_("y=1", "z=1")).sql() 6933 'x = 1 AND (y = 1 AND z = 1)' 6934 6935 Args: 6936 *expressions: the SQL code strings to parse. 6937 If an Expression instance is passed, this is used as-is. 6938 dialect: the dialect used to parse the input expression. 6939 copy: whether to copy `expressions` (only applies to Expressions). 6940 **opts: other options to use to parse the input expressions. 6941 6942 Returns: 6943 The new condition 6944 """ 6945 return t.cast(Condition, _combine(expressions, And, dialect, copy=copy, **opts)) 6946 6947 6948def or_( 6949 *expressions: t.Optional[ExpOrStr], dialect: DialectType = None, copy: bool = True, **opts 6950) -> Condition: 6951 """ 6952 Combine multiple conditions with an OR logical operator. 6953 6954 Example: 6955 >>> or_("x=1", or_("y=1", "z=1")).sql() 6956 'x = 1 OR (y = 1 OR z = 1)' 6957 6958 Args: 6959 *expressions: the SQL code strings to parse. 6960 If an Expression instance is passed, this is used as-is. 6961 dialect: the dialect used to parse the input expression. 6962 copy: whether to copy `expressions` (only applies to Expressions). 6963 **opts: other options to use to parse the input expressions. 6964 6965 Returns: 6966 The new condition 6967 """ 6968 return t.cast(Condition, _combine(expressions, Or, dialect, copy=copy, **opts)) 6969 6970 6971def xor( 6972 *expressions: t.Optional[ExpOrStr], dialect: DialectType = None, copy: bool = True, **opts 6973) -> Condition: 6974 """ 6975 Combine multiple conditions with an XOR logical operator. 6976 6977 Example: 6978 >>> xor("x=1", xor("y=1", "z=1")).sql() 6979 'x = 1 XOR (y = 1 XOR z = 1)' 6980 6981 Args: 6982 *expressions: the SQL code strings to parse. 6983 If an Expression instance is passed, this is used as-is. 6984 dialect: the dialect used to parse the input expression. 6985 copy: whether to copy `expressions` (only applies to Expressions). 6986 **opts: other options to use to parse the input expressions. 6987 6988 Returns: 6989 The new condition 6990 """ 6991 return t.cast(Condition, _combine(expressions, Xor, dialect, copy=copy, **opts)) 6992 6993 6994def not_(expression: ExpOrStr, dialect: DialectType = None, copy: bool = True, **opts) -> Not: 6995 """ 6996 Wrap a condition with a NOT operator. 6997 6998 Example: 6999 >>> not_("this_suit='black'").sql() 7000 "NOT this_suit = 'black'" 7001 7002 Args: 7003 expression: the SQL code string to parse. 7004 If an Expression instance is passed, this is used as-is. 7005 dialect: the dialect used to parse the input expression. 7006 copy: whether to copy the expression or not. 7007 **opts: other options to use to parse the input expressions. 7008 7009 Returns: 7010 The new condition. 7011 """ 7012 this = condition( 7013 expression, 7014 dialect=dialect, 7015 copy=copy, 7016 **opts, 7017 ) 7018 return Not(this=_wrap(this, Connector)) 7019 7020 7021def paren(expression: ExpOrStr, copy: bool = True) -> Paren: 7022 """ 7023 Wrap an expression in parentheses. 7024 7025 Example: 7026 >>> paren("5 + 3").sql() 7027 '(5 + 3)' 7028 7029 Args: 7030 expression: the SQL code string to parse. 7031 If an Expression instance is passed, this is used as-is. 7032 copy: whether to copy the expression or not. 7033 7034 Returns: 7035 The wrapped expression. 7036 """ 7037 return Paren(this=maybe_parse(expression, copy=copy)) 7038 7039 7040SAFE_IDENTIFIER_RE: t.Pattern[str] = re.compile(r"^[_a-zA-Z][\w]*$") 7041 7042 7043@t.overload 7044def to_identifier(name: None, quoted: t.Optional[bool] = None, copy: bool = True) -> None: ... 7045 7046 7047@t.overload 7048def to_identifier( 7049 name: str | Identifier, quoted: t.Optional[bool] = None, copy: bool = True 7050) -> Identifier: ... 7051 7052 7053def to_identifier(name, quoted=None, copy=True): 7054 """Builds an identifier. 7055 7056 Args: 7057 name: The name to turn into an identifier. 7058 quoted: Whether to force quote the identifier. 7059 copy: Whether to copy name if it's an Identifier. 7060 7061 Returns: 7062 The identifier ast node. 7063 """ 7064 7065 if name is None: 7066 return None 7067 7068 if isinstance(name, Identifier): 7069 identifier = maybe_copy(name, copy) 7070 elif isinstance(name, str): 7071 identifier = Identifier( 7072 this=name, 7073 quoted=not SAFE_IDENTIFIER_RE.match(name) if quoted is None else quoted, 7074 ) 7075 else: 7076 raise ValueError(f"Name needs to be a string or an Identifier, got: {name.__class__}") 7077 return identifier 7078 7079 7080def parse_identifier(name: str | Identifier, dialect: DialectType = None) -> Identifier: 7081 """ 7082 Parses a given string into an identifier. 7083 7084 Args: 7085 name: The name to parse into an identifier. 7086 dialect: The dialect to parse against. 7087 7088 Returns: 7089 The identifier ast node. 7090 """ 7091 try: 7092 expression = maybe_parse(name, dialect=dialect, into=Identifier) 7093 except (ParseError, TokenError): 7094 expression = to_identifier(name) 7095 7096 return expression 7097 7098 7099INTERVAL_STRING_RE = re.compile(r"\s*([0-9]+)\s*([a-zA-Z]+)\s*") 7100 7101 7102def to_interval(interval: str | Literal) -> Interval: 7103 """Builds an interval expression from a string like '1 day' or '5 months'.""" 7104 if isinstance(interval, Literal): 7105 if not interval.is_string: 7106 raise ValueError("Invalid interval string.") 7107 7108 interval = interval.this 7109 7110 interval_parts = INTERVAL_STRING_RE.match(interval) # type: ignore 7111 7112 if not interval_parts: 7113 raise ValueError("Invalid interval string.") 7114 7115 return Interval( 7116 this=Literal.string(interval_parts.group(1)), 7117 unit=Var(this=interval_parts.group(2).upper()), 7118 ) 7119 7120 7121def to_table( 7122 sql_path: str | Table, dialect: DialectType = None, copy: bool = True, **kwargs 7123) -> Table: 7124 """ 7125 Create a table expression from a `[catalog].[schema].[table]` sql path. Catalog and schema are optional. 7126 If a table is passed in then that table is returned. 7127 7128 Args: 7129 sql_path: a `[catalog].[schema].[table]` string. 7130 dialect: the source dialect according to which the table name will be parsed. 7131 copy: Whether to copy a table if it is passed in. 7132 kwargs: the kwargs to instantiate the resulting `Table` expression with. 7133 7134 Returns: 7135 A table expression. 7136 """ 7137 if isinstance(sql_path, Table): 7138 return maybe_copy(sql_path, copy=copy) 7139 7140 table = maybe_parse(sql_path, into=Table, dialect=dialect) 7141 7142 for k, v in kwargs.items(): 7143 table.set(k, v) 7144 7145 return table 7146 7147 7148def to_column( 7149 sql_path: str | Column, 7150 quoted: t.Optional[bool] = None, 7151 dialect: DialectType = None, 7152 copy: bool = True, 7153 **kwargs, 7154) -> Column: 7155 """ 7156 Create a column from a `[table].[column]` sql path. Table is optional. 7157 If a column is passed in then that column is returned. 7158 7159 Args: 7160 sql_path: a `[table].[column]` string. 7161 quoted: Whether or not to force quote identifiers. 7162 dialect: the source dialect according to which the column name will be parsed. 7163 copy: Whether to copy a column if it is passed in. 7164 kwargs: the kwargs to instantiate the resulting `Column` expression with. 7165 7166 Returns: 7167 A column expression. 7168 """ 7169 if isinstance(sql_path, Column): 7170 return maybe_copy(sql_path, copy=copy) 7171 7172 try: 7173 col = maybe_parse(sql_path, into=Column, dialect=dialect) 7174 except ParseError: 7175 return column(*reversed(sql_path.split(".")), quoted=quoted, **kwargs) 7176 7177 for k, v in kwargs.items(): 7178 col.set(k, v) 7179 7180 if quoted: 7181 for i in col.find_all(Identifier): 7182 i.set("quoted", True) 7183 7184 return col 7185 7186 7187def alias_( 7188 expression: ExpOrStr, 7189 alias: t.Optional[str | Identifier], 7190 table: bool | t.Sequence[str | Identifier] = False, 7191 quoted: t.Optional[bool] = None, 7192 dialect: DialectType = None, 7193 copy: bool = True, 7194 **opts, 7195): 7196 """Create an Alias expression. 7197 7198 Example: 7199 >>> alias_('foo', 'bar').sql() 7200 'foo AS bar' 7201 7202 >>> alias_('(select 1, 2)', 'bar', table=['a', 'b']).sql() 7203 '(SELECT 1, 2) AS bar(a, b)' 7204 7205 Args: 7206 expression: the SQL code strings to parse. 7207 If an Expression instance is passed, this is used as-is. 7208 alias: the alias name to use. If the name has 7209 special characters it is quoted. 7210 table: Whether to create a table alias, can also be a list of columns. 7211 quoted: whether to quote the alias 7212 dialect: the dialect used to parse the input expression. 7213 copy: Whether to copy the expression. 7214 **opts: other options to use to parse the input expressions. 7215 7216 Returns: 7217 Alias: the aliased expression 7218 """ 7219 exp = maybe_parse(expression, dialect=dialect, copy=copy, **opts) 7220 alias = to_identifier(alias, quoted=quoted) 7221 7222 if table: 7223 table_alias = TableAlias(this=alias) 7224 exp.set("alias", table_alias) 7225 7226 if not isinstance(table, bool): 7227 for column in table: 7228 table_alias.append("columns", to_identifier(column, quoted=quoted)) 7229 7230 return exp 7231 7232 # We don't set the "alias" arg for Window expressions, because that would add an IDENTIFIER node in 7233 # the AST, representing a "named_window" [1] construct (eg. bigquery). What we want is an ALIAS node 7234 # for the complete Window expression. 7235 # 7236 # [1]: https://cloud.google.com/bigquery/docs/reference/standard-sql/window-function-calls 7237 7238 if "alias" in exp.arg_types and not isinstance(exp, Window): 7239 exp.set("alias", alias) 7240 return exp 7241 return Alias(this=exp, alias=alias) 7242 7243 7244def subquery( 7245 expression: ExpOrStr, 7246 alias: t.Optional[Identifier | str] = None, 7247 dialect: DialectType = None, 7248 **opts, 7249) -> Select: 7250 """ 7251 Build a subquery expression that's selected from. 7252 7253 Example: 7254 >>> subquery('select x from tbl', 'bar').select('x').sql() 7255 'SELECT x FROM (SELECT x FROM tbl) AS bar' 7256 7257 Args: 7258 expression: the SQL code strings to parse. 7259 If an Expression instance is passed, this is used as-is. 7260 alias: the alias name to use. 7261 dialect: the dialect used to parse the input expression. 7262 **opts: other options to use to parse the input expressions. 7263 7264 Returns: 7265 A new Select instance with the subquery expression included. 7266 """ 7267 7268 expression = maybe_parse(expression, dialect=dialect, **opts).subquery(alias, **opts) 7269 return Select().from_(expression, dialect=dialect, **opts) 7270 7271 7272@t.overload 7273def column( 7274 col: str | Identifier, 7275 table: t.Optional[str | Identifier] = None, 7276 db: t.Optional[str | Identifier] = None, 7277 catalog: t.Optional[str | Identifier] = None, 7278 *, 7279 fields: t.Collection[t.Union[str, Identifier]], 7280 quoted: t.Optional[bool] = None, 7281 copy: bool = True, 7282) -> Dot: 7283 pass 7284 7285 7286@t.overload 7287def column( 7288 col: str | Identifier, 7289 table: t.Optional[str | Identifier] = None, 7290 db: t.Optional[str | Identifier] = None, 7291 catalog: t.Optional[str | Identifier] = None, 7292 *, 7293 fields: Lit[None] = None, 7294 quoted: t.Optional[bool] = None, 7295 copy: bool = True, 7296) -> Column: 7297 pass 7298 7299 7300def column( 7301 col, 7302 table=None, 7303 db=None, 7304 catalog=None, 7305 *, 7306 fields=None, 7307 quoted=None, 7308 copy=True, 7309): 7310 """ 7311 Build a Column. 7312 7313 Args: 7314 col: Column name. 7315 table: Table name. 7316 db: Database name. 7317 catalog: Catalog name. 7318 fields: Additional fields using dots. 7319 quoted: Whether to force quotes on the column's identifiers. 7320 copy: Whether to copy identifiers if passed in. 7321 7322 Returns: 7323 The new Column instance. 7324 """ 7325 this = Column( 7326 this=to_identifier(col, quoted=quoted, copy=copy), 7327 table=to_identifier(table, quoted=quoted, copy=copy), 7328 db=to_identifier(db, quoted=quoted, copy=copy), 7329 catalog=to_identifier(catalog, quoted=quoted, copy=copy), 7330 ) 7331 7332 if fields: 7333 this = Dot.build( 7334 (this, *(to_identifier(field, quoted=quoted, copy=copy) for field in fields)) 7335 ) 7336 return this 7337 7338 7339def cast( 7340 expression: ExpOrStr, to: DATA_TYPE, copy: bool = True, dialect: DialectType = None, **opts 7341) -> Cast: 7342 """Cast an expression to a data type. 7343 7344 Example: 7345 >>> cast('x + 1', 'int').sql() 7346 'CAST(x + 1 AS INT)' 7347 7348 Args: 7349 expression: The expression to cast. 7350 to: The datatype to cast to. 7351 copy: Whether to copy the supplied expressions. 7352 dialect: The target dialect. This is used to prevent a re-cast in the following scenario: 7353 - The expression to be cast is already a exp.Cast expression 7354 - The existing cast is to a type that is logically equivalent to new type 7355 7356 For example, if :expression='CAST(x as DATETIME)' and :to=Type.TIMESTAMP, 7357 but in the target dialect DATETIME is mapped to TIMESTAMP, then we will NOT return `CAST(x (as DATETIME) as TIMESTAMP)` 7358 and instead just return the original expression `CAST(x as DATETIME)`. 7359 7360 This is to prevent it being output as a double cast `CAST(x (as TIMESTAMP) as TIMESTAMP)` once the DATETIME -> TIMESTAMP 7361 mapping is applied in the target dialect generator. 7362 7363 Returns: 7364 The new Cast instance. 7365 """ 7366 expr = maybe_parse(expression, copy=copy, dialect=dialect, **opts) 7367 data_type = DataType.build(to, copy=copy, dialect=dialect, **opts) 7368 7369 # dont re-cast if the expression is already a cast to the correct type 7370 if isinstance(expr, Cast): 7371 from sqlglot.dialects.dialect import Dialect 7372 7373 target_dialect = Dialect.get_or_raise(dialect) 7374 type_mapping = target_dialect.generator_class.TYPE_MAPPING 7375 7376 existing_cast_type: DataType.Type = expr.to.this 7377 new_cast_type: DataType.Type = data_type.this 7378 types_are_equivalent = type_mapping.get( 7379 existing_cast_type, existing_cast_type 7380 ) == type_mapping.get(new_cast_type, new_cast_type) 7381 if expr.is_type(data_type) or types_are_equivalent: 7382 return expr 7383 7384 expr = Cast(this=expr, to=data_type) 7385 expr.type = data_type 7386 7387 return expr 7388 7389 7390def table_( 7391 table: Identifier | str, 7392 db: t.Optional[Identifier | str] = None, 7393 catalog: t.Optional[Identifier | str] = None, 7394 quoted: t.Optional[bool] = None, 7395 alias: t.Optional[Identifier | str] = None, 7396) -> Table: 7397 """Build a Table. 7398 7399 Args: 7400 table: Table name. 7401 db: Database name. 7402 catalog: Catalog name. 7403 quote: Whether to force quotes on the table's identifiers. 7404 alias: Table's alias. 7405 7406 Returns: 7407 The new Table instance. 7408 """ 7409 return Table( 7410 this=to_identifier(table, quoted=quoted) if table else None, 7411 db=to_identifier(db, quoted=quoted) if db else None, 7412 catalog=to_identifier(catalog, quoted=quoted) if catalog else None, 7413 alias=TableAlias(this=to_identifier(alias)) if alias else None, 7414 ) 7415 7416 7417def values( 7418 values: t.Iterable[t.Tuple[t.Any, ...]], 7419 alias: t.Optional[str] = None, 7420 columns: t.Optional[t.Iterable[str] | t.Dict[str, DataType]] = None, 7421) -> Values: 7422 """Build VALUES statement. 7423 7424 Example: 7425 >>> values([(1, '2')]).sql() 7426 "VALUES (1, '2')" 7427 7428 Args: 7429 values: values statements that will be converted to SQL 7430 alias: optional alias 7431 columns: Optional list of ordered column names or ordered dictionary of column names to types. 7432 If either are provided then an alias is also required. 7433 7434 Returns: 7435 Values: the Values expression object 7436 """ 7437 if columns and not alias: 7438 raise ValueError("Alias is required when providing columns") 7439 7440 return Values( 7441 expressions=[convert(tup) for tup in values], 7442 alias=( 7443 TableAlias(this=to_identifier(alias), columns=[to_identifier(x) for x in columns]) 7444 if columns 7445 else (TableAlias(this=to_identifier(alias)) if alias else None) 7446 ), 7447 ) 7448 7449 7450def var(name: t.Optional[ExpOrStr]) -> Var: 7451 """Build a SQL variable. 7452 7453 Example: 7454 >>> repr(var('x')) 7455 'Var(this=x)' 7456 7457 >>> repr(var(column('x', table='y'))) 7458 'Var(this=x)' 7459 7460 Args: 7461 name: The name of the var or an expression who's name will become the var. 7462 7463 Returns: 7464 The new variable node. 7465 """ 7466 if not name: 7467 raise ValueError("Cannot convert empty name into var.") 7468 7469 if isinstance(name, Expression): 7470 name = name.name 7471 return Var(this=name) 7472 7473 7474def rename_table( 7475 old_name: str | Table, 7476 new_name: str | Table, 7477 dialect: DialectType = None, 7478) -> Alter: 7479 """Build ALTER TABLE... RENAME... expression 7480 7481 Args: 7482 old_name: The old name of the table 7483 new_name: The new name of the table 7484 dialect: The dialect to parse the table. 7485 7486 Returns: 7487 Alter table expression 7488 """ 7489 old_table = to_table(old_name, dialect=dialect) 7490 new_table = to_table(new_name, dialect=dialect) 7491 return Alter( 7492 this=old_table, 7493 kind="TABLE", 7494 actions=[ 7495 RenameTable(this=new_table), 7496 ], 7497 ) 7498 7499 7500def rename_column( 7501 table_name: str | Table, 7502 old_column_name: str | Column, 7503 new_column_name: str | Column, 7504 exists: t.Optional[bool] = None, 7505 dialect: DialectType = None, 7506) -> Alter: 7507 """Build ALTER TABLE... RENAME COLUMN... expression 7508 7509 Args: 7510 table_name: Name of the table 7511 old_column: The old name of the column 7512 new_column: The new name of the column 7513 exists: Whether to add the `IF EXISTS` clause 7514 dialect: The dialect to parse the table/column. 7515 7516 Returns: 7517 Alter table expression 7518 """ 7519 table = to_table(table_name, dialect=dialect) 7520 old_column = to_column(old_column_name, dialect=dialect) 7521 new_column = to_column(new_column_name, dialect=dialect) 7522 return Alter( 7523 this=table, 7524 kind="TABLE", 7525 actions=[ 7526 RenameColumn(this=old_column, to=new_column, exists=exists), 7527 ], 7528 ) 7529 7530 7531def convert(value: t.Any, copy: bool = False) -> Expression: 7532 """Convert a python value into an expression object. 7533 7534 Raises an error if a conversion is not possible. 7535 7536 Args: 7537 value: A python object. 7538 copy: Whether to copy `value` (only applies to Expressions and collections). 7539 7540 Returns: 7541 The equivalent expression object. 7542 """ 7543 if isinstance(value, Expression): 7544 return maybe_copy(value, copy) 7545 if isinstance(value, str): 7546 return Literal.string(value) 7547 if isinstance(value, bool): 7548 return Boolean(this=value) 7549 if value is None or (isinstance(value, float) and math.isnan(value)): 7550 return null() 7551 if isinstance(value, numbers.Number): 7552 return Literal.number(value) 7553 if isinstance(value, bytes): 7554 return HexString(this=value.hex()) 7555 if isinstance(value, datetime.datetime): 7556 datetime_literal = Literal.string(value.isoformat(sep=" ")) 7557 7558 tz = None 7559 if value.tzinfo: 7560 # this works for zoneinfo.ZoneInfo, pytz.timezone and datetime.datetime.utc to return IANA timezone names like "America/Los_Angeles" 7561 # instead of abbreviations like "PDT". This is for consistency with other timezone handling functions in SQLGlot 7562 tz = Literal.string(str(value.tzinfo)) 7563 7564 return TimeStrToTime(this=datetime_literal, zone=tz) 7565 if isinstance(value, datetime.date): 7566 date_literal = Literal.string(value.strftime("%Y-%m-%d")) 7567 return DateStrToDate(this=date_literal) 7568 if isinstance(value, tuple): 7569 if hasattr(value, "_fields"): 7570 return Struct( 7571 expressions=[ 7572 PropertyEQ( 7573 this=to_identifier(k), expression=convert(getattr(value, k), copy=copy) 7574 ) 7575 for k in value._fields 7576 ] 7577 ) 7578 return Tuple(expressions=[convert(v, copy=copy) for v in value]) 7579 if isinstance(value, list): 7580 return Array(expressions=[convert(v, copy=copy) for v in value]) 7581 if isinstance(value, dict): 7582 return Map( 7583 keys=Array(expressions=[convert(k, copy=copy) for k in value]), 7584 values=Array(expressions=[convert(v, copy=copy) for v in value.values()]), 7585 ) 7586 if hasattr(value, "__dict__"): 7587 return Struct( 7588 expressions=[ 7589 PropertyEQ(this=to_identifier(k), expression=convert(v, copy=copy)) 7590 for k, v in value.__dict__.items() 7591 ] 7592 ) 7593 raise ValueError(f"Cannot convert {value}") 7594 7595 7596def replace_children(expression: Expression, fun: t.Callable, *args, **kwargs) -> None: 7597 """ 7598 Replace children of an expression with the result of a lambda fun(child) -> exp. 7599 """ 7600 for k, v in tuple(expression.args.items()): 7601 is_list_arg = type(v) is list 7602 7603 child_nodes = v if is_list_arg else [v] 7604 new_child_nodes = [] 7605 7606 for cn in child_nodes: 7607 if isinstance(cn, Expression): 7608 for child_node in ensure_collection(fun(cn, *args, **kwargs)): 7609 new_child_nodes.append(child_node) 7610 else: 7611 new_child_nodes.append(cn) 7612 7613 expression.set(k, new_child_nodes if is_list_arg else seq_get(new_child_nodes, 0)) 7614 7615 7616def replace_tree( 7617 expression: Expression, 7618 fun: t.Callable, 7619 prune: t.Optional[t.Callable[[Expression], bool]] = None, 7620) -> Expression: 7621 """ 7622 Replace an entire tree with the result of function calls on each node. 7623 7624 This will be traversed in reverse dfs, so leaves first. 7625 If new nodes are created as a result of function calls, they will also be traversed. 7626 """ 7627 stack = list(expression.dfs(prune=prune)) 7628 7629 while stack: 7630 node = stack.pop() 7631 new_node = fun(node) 7632 7633 if new_node is not node: 7634 node.replace(new_node) 7635 7636 if isinstance(new_node, Expression): 7637 stack.append(new_node) 7638 7639 return new_node 7640 7641 7642def column_table_names(expression: Expression, exclude: str = "") -> t.Set[str]: 7643 """ 7644 Return all table names referenced through columns in an expression. 7645 7646 Example: 7647 >>> import sqlglot 7648 >>> sorted(column_table_names(sqlglot.parse_one("a.b AND c.d AND c.e"))) 7649 ['a', 'c'] 7650 7651 Args: 7652 expression: expression to find table names. 7653 exclude: a table name to exclude 7654 7655 Returns: 7656 A list of unique names. 7657 """ 7658 return { 7659 table 7660 for table in (column.table for column in expression.find_all(Column)) 7661 if table and table != exclude 7662 } 7663 7664 7665def table_name(table: Table | str, dialect: DialectType = None, identify: bool = False) -> str: 7666 """Get the full name of a table as a string. 7667 7668 Args: 7669 table: Table expression node or string. 7670 dialect: The dialect to generate the table name for. 7671 identify: Determines when an identifier should be quoted. Possible values are: 7672 False (default): Never quote, except in cases where it's mandatory by the dialect. 7673 True: Always quote. 7674 7675 Examples: 7676 >>> from sqlglot import exp, parse_one 7677 >>> table_name(parse_one("select * from a.b.c").find(exp.Table)) 7678 'a.b.c' 7679 7680 Returns: 7681 The table name. 7682 """ 7683 7684 table = maybe_parse(table, into=Table, dialect=dialect) 7685 7686 if not table: 7687 raise ValueError(f"Cannot parse {table}") 7688 7689 return ".".join( 7690 ( 7691 part.sql(dialect=dialect, identify=True, copy=False) 7692 if identify or not SAFE_IDENTIFIER_RE.match(part.name) 7693 else part.name 7694 ) 7695 for part in table.parts 7696 ) 7697 7698 7699def normalize_table_name(table: str | Table, dialect: DialectType = None, copy: bool = True) -> str: 7700 """Returns a case normalized table name without quotes. 7701 7702 Args: 7703 table: the table to normalize 7704 dialect: the dialect to use for normalization rules 7705 copy: whether to copy the expression. 7706 7707 Examples: 7708 >>> normalize_table_name("`A-B`.c", dialect="bigquery") 7709 'A-B.c' 7710 """ 7711 from sqlglot.optimizer.normalize_identifiers import normalize_identifiers 7712 7713 return ".".join( 7714 p.name 7715 for p in normalize_identifiers( 7716 to_table(table, dialect=dialect, copy=copy), dialect=dialect 7717 ).parts 7718 ) 7719 7720 7721def replace_tables( 7722 expression: E, mapping: t.Dict[str, str], dialect: DialectType = None, copy: bool = True 7723) -> E: 7724 """Replace all tables in expression according to the mapping. 7725 7726 Args: 7727 expression: expression node to be transformed and replaced. 7728 mapping: mapping of table names. 7729 dialect: the dialect of the mapping table 7730 copy: whether to copy the expression. 7731 7732 Examples: 7733 >>> from sqlglot import exp, parse_one 7734 >>> replace_tables(parse_one("select * from a.b"), {"a.b": "c"}).sql() 7735 'SELECT * FROM c /* a.b */' 7736 7737 Returns: 7738 The mapped expression. 7739 """ 7740 7741 mapping = {normalize_table_name(k, dialect=dialect): v for k, v in mapping.items()} 7742 7743 def _replace_tables(node: Expression) -> Expression: 7744 if isinstance(node, Table): 7745 original = normalize_table_name(node, dialect=dialect) 7746 new_name = mapping.get(original) 7747 7748 if new_name: 7749 table = to_table( 7750 new_name, 7751 **{k: v for k, v in node.args.items() if k not in TABLE_PARTS}, 7752 dialect=dialect, 7753 ) 7754 table.add_comments([original]) 7755 return table 7756 return node 7757 7758 return expression.transform(_replace_tables, copy=copy) # type: ignore 7759 7760 7761def replace_placeholders(expression: Expression, *args, **kwargs) -> Expression: 7762 """Replace placeholders in an expression. 7763 7764 Args: 7765 expression: expression node to be transformed and replaced. 7766 args: positional names that will substitute unnamed placeholders in the given order. 7767 kwargs: keyword arguments that will substitute named placeholders. 7768 7769 Examples: 7770 >>> from sqlglot import exp, parse_one 7771 >>> replace_placeholders( 7772 ... parse_one("select * from :tbl where ? = ?"), 7773 ... exp.to_identifier("str_col"), "b", tbl=exp.to_identifier("foo") 7774 ... ).sql() 7775 "SELECT * FROM foo WHERE str_col = 'b'" 7776 7777 Returns: 7778 The mapped expression. 7779 """ 7780 7781 def _replace_placeholders(node: Expression, args, **kwargs) -> Expression: 7782 if isinstance(node, Placeholder): 7783 if node.this: 7784 new_name = kwargs.get(node.this) 7785 if new_name is not None: 7786 return convert(new_name) 7787 else: 7788 try: 7789 return convert(next(args)) 7790 except StopIteration: 7791 pass 7792 return node 7793 7794 return expression.transform(_replace_placeholders, iter(args), **kwargs) 7795 7796 7797def expand( 7798 expression: Expression, 7799 sources: t.Dict[str, Query], 7800 dialect: DialectType = None, 7801 copy: bool = True, 7802) -> Expression: 7803 """Transforms an expression by expanding all referenced sources into subqueries. 7804 7805 Examples: 7806 >>> from sqlglot import parse_one 7807 >>> expand(parse_one("select * from x AS z"), {"x": parse_one("select * from y")}).sql() 7808 'SELECT * FROM (SELECT * FROM y) AS z /* source: x */' 7809 7810 >>> expand(parse_one("select * from x AS z"), {"x": parse_one("select * from y"), "y": parse_one("select * from z")}).sql() 7811 'SELECT * FROM (SELECT * FROM (SELECT * FROM z) AS y /* source: y */) AS z /* source: x */' 7812 7813 Args: 7814 expression: The expression to expand. 7815 sources: A dictionary of name to Queries. 7816 dialect: The dialect of the sources dict. 7817 copy: Whether to copy the expression during transformation. Defaults to True. 7818 7819 Returns: 7820 The transformed expression. 7821 """ 7822 sources = {normalize_table_name(k, dialect=dialect): v for k, v in sources.items()} 7823 7824 def _expand(node: Expression): 7825 if isinstance(node, Table): 7826 name = normalize_table_name(node, dialect=dialect) 7827 source = sources.get(name) 7828 if source: 7829 subquery = source.subquery(node.alias or name) 7830 subquery.comments = [f"source: {name}"] 7831 return subquery.transform(_expand, copy=False) 7832 return node 7833 7834 return expression.transform(_expand, copy=copy) 7835 7836 7837def func(name: str, *args, copy: bool = True, dialect: DialectType = None, **kwargs) -> Func: 7838 """ 7839 Returns a Func expression. 7840 7841 Examples: 7842 >>> func("abs", 5).sql() 7843 'ABS(5)' 7844 7845 >>> func("cast", this=5, to=DataType.build("DOUBLE")).sql() 7846 'CAST(5 AS DOUBLE)' 7847 7848 Args: 7849 name: the name of the function to build. 7850 args: the args used to instantiate the function of interest. 7851 copy: whether to copy the argument expressions. 7852 dialect: the source dialect. 7853 kwargs: the kwargs used to instantiate the function of interest. 7854 7855 Note: 7856 The arguments `args` and `kwargs` are mutually exclusive. 7857 7858 Returns: 7859 An instance of the function of interest, or an anonymous function, if `name` doesn't 7860 correspond to an existing `sqlglot.expressions.Func` class. 7861 """ 7862 if args and kwargs: 7863 raise ValueError("Can't use both args and kwargs to instantiate a function.") 7864 7865 from sqlglot.dialects.dialect import Dialect 7866 7867 dialect = Dialect.get_or_raise(dialect) 7868 7869 converted: t.List[Expression] = [maybe_parse(arg, dialect=dialect, copy=copy) for arg in args] 7870 kwargs = {key: maybe_parse(value, dialect=dialect, copy=copy) for key, value in kwargs.items()} 7871 7872 constructor = dialect.parser_class.FUNCTIONS.get(name.upper()) 7873 if constructor: 7874 if converted: 7875 if "dialect" in constructor.__code__.co_varnames: 7876 function = constructor(converted, dialect=dialect) 7877 else: 7878 function = constructor(converted) 7879 elif constructor.__name__ == "from_arg_list": 7880 function = constructor.__self__(**kwargs) # type: ignore 7881 else: 7882 constructor = FUNCTION_BY_NAME.get(name.upper()) 7883 if constructor: 7884 function = constructor(**kwargs) 7885 else: 7886 raise ValueError( 7887 f"Unable to convert '{name}' into a Func. Either manually construct " 7888 "the Func expression of interest or parse the function call." 7889 ) 7890 else: 7891 kwargs = kwargs or {"expressions": converted} 7892 function = Anonymous(this=name, **kwargs) 7893 7894 for error_message in function.error_messages(converted): 7895 raise ValueError(error_message) 7896 7897 return function 7898 7899 7900def case( 7901 expression: t.Optional[ExpOrStr] = None, 7902 **opts, 7903) -> Case: 7904 """ 7905 Initialize a CASE statement. 7906 7907 Example: 7908 case().when("a = 1", "foo").else_("bar") 7909 7910 Args: 7911 expression: Optionally, the input expression (not all dialects support this) 7912 **opts: Extra keyword arguments for parsing `expression` 7913 """ 7914 if expression is not None: 7915 this = maybe_parse(expression, **opts) 7916 else: 7917 this = None 7918 return Case(this=this, ifs=[]) 7919 7920 7921def array( 7922 *expressions: ExpOrStr, copy: bool = True, dialect: DialectType = None, **kwargs 7923) -> Array: 7924 """ 7925 Returns an array. 7926 7927 Examples: 7928 >>> array(1, 'x').sql() 7929 'ARRAY(1, x)' 7930 7931 Args: 7932 expressions: the expressions to add to the array. 7933 copy: whether to copy the argument expressions. 7934 dialect: the source dialect. 7935 kwargs: the kwargs used to instantiate the function of interest. 7936 7937 Returns: 7938 An array expression. 7939 """ 7940 return Array( 7941 expressions=[ 7942 maybe_parse(expression, copy=copy, dialect=dialect, **kwargs) 7943 for expression in expressions 7944 ] 7945 ) 7946 7947 7948def tuple_( 7949 *expressions: ExpOrStr, copy: bool = True, dialect: DialectType = None, **kwargs 7950) -> Tuple: 7951 """ 7952 Returns an tuple. 7953 7954 Examples: 7955 >>> tuple_(1, 'x').sql() 7956 '(1, x)' 7957 7958 Args: 7959 expressions: the expressions to add to the tuple. 7960 copy: whether to copy the argument expressions. 7961 dialect: the source dialect. 7962 kwargs: the kwargs used to instantiate the function of interest. 7963 7964 Returns: 7965 A tuple expression. 7966 """ 7967 return Tuple( 7968 expressions=[ 7969 maybe_parse(expression, copy=copy, dialect=dialect, **kwargs) 7970 for expression in expressions 7971 ] 7972 ) 7973 7974 7975def true() -> Boolean: 7976 """ 7977 Returns a true Boolean expression. 7978 """ 7979 return Boolean(this=True) 7980 7981 7982def false() -> Boolean: 7983 """ 7984 Returns a false Boolean expression. 7985 """ 7986 return Boolean(this=False) 7987 7988 7989def null() -> Null: 7990 """ 7991 Returns a Null expression. 7992 """ 7993 return Null() 7994 7995 7996NONNULL_CONSTANTS = ( 7997 Literal, 7998 Boolean, 7999) 8000 8001CONSTANTS = ( 8002 Literal, 8003 Boolean, 8004 Null, 8005)
66class Expression(metaclass=_Expression): 67 """ 68 The base class for all expressions in a syntax tree. Each Expression encapsulates any necessary 69 context, such as its child expressions, their names (arg keys), and whether a given child expression 70 is optional or not. 71 72 Attributes: 73 key: a unique key for each class in the Expression hierarchy. This is useful for hashing 74 and representing expressions as strings. 75 arg_types: determines the arguments (child nodes) supported by an expression. It maps 76 arg keys to booleans that indicate whether the corresponding args are optional. 77 parent: a reference to the parent expression (or None, in case of root expressions). 78 arg_key: the arg key an expression is associated with, i.e. the name its parent expression 79 uses to refer to it. 80 index: the index of an expression if it is inside of a list argument in its parent. 81 comments: a list of comments that are associated with a given expression. This is used in 82 order to preserve comments when transpiling SQL code. 83 type: the `sqlglot.expressions.DataType` type of an expression. This is inferred by the 84 optimizer, in order to enable some transformations that require type information. 85 meta: a dictionary that can be used to store useful metadata for a given expression. 86 87 Example: 88 >>> class Foo(Expression): 89 ... arg_types = {"this": True, "expression": False} 90 91 The above definition informs us that Foo is an Expression that requires an argument called 92 "this" and may also optionally receive an argument called "expression". 93 94 Args: 95 args: a mapping used for retrieving the arguments of an expression, given their arg keys. 96 """ 97 98 key = "expression" 99 arg_types = {"this": True} 100 __slots__ = ("args", "parent", "arg_key", "index", "comments", "_type", "_meta", "_hash") 101 102 def __init__(self, **args: t.Any): 103 self.args: t.Dict[str, t.Any] = args 104 self.parent: t.Optional[Expression] = None 105 self.arg_key: t.Optional[str] = None 106 self.index: t.Optional[int] = None 107 self.comments: t.Optional[t.List[str]] = None 108 self._type: t.Optional[DataType] = None 109 self._meta: t.Optional[t.Dict[str, t.Any]] = None 110 self._hash: t.Optional[int] = None 111 112 for arg_key, value in self.args.items(): 113 self._set_parent(arg_key, value) 114 115 def __eq__(self, other) -> bool: 116 return type(self) is type(other) and hash(self) == hash(other) 117 118 @property 119 def hashable_args(self) -> t.Any: 120 return frozenset( 121 (k, tuple(_norm_arg(a) for a in v) if type(v) is list else _norm_arg(v)) 122 for k, v in self.args.items() 123 if not (v is None or v is False or (type(v) is list and not v)) 124 ) 125 126 def __hash__(self) -> int: 127 if self._hash is not None: 128 return self._hash 129 130 return hash((self.__class__, self.hashable_args)) 131 132 @property 133 def this(self) -> t.Any: 134 """ 135 Retrieves the argument with key "this". 136 """ 137 return self.args.get("this") 138 139 @property 140 def expression(self) -> t.Any: 141 """ 142 Retrieves the argument with key "expression". 143 """ 144 return self.args.get("expression") 145 146 @property 147 def expressions(self) -> t.List[t.Any]: 148 """ 149 Retrieves the argument with key "expressions". 150 """ 151 return self.args.get("expressions") or [] 152 153 def text(self, key) -> str: 154 """ 155 Returns a textual representation of the argument corresponding to "key". This can only be used 156 for args that are strings or leaf Expression instances, such as identifiers and literals. 157 """ 158 field = self.args.get(key) 159 if isinstance(field, str): 160 return field 161 if isinstance(field, (Identifier, Literal, Var)): 162 return field.this 163 if isinstance(field, (Star, Null)): 164 return field.name 165 return "" 166 167 @property 168 def is_string(self) -> bool: 169 """ 170 Checks whether a Literal expression is a string. 171 """ 172 return isinstance(self, Literal) and self.args["is_string"] 173 174 @property 175 def is_number(self) -> bool: 176 """ 177 Checks whether a Literal expression is a number. 178 """ 179 return (isinstance(self, Literal) and not self.args["is_string"]) or ( 180 isinstance(self, Neg) and self.this.is_number 181 ) 182 183 def to_py(self) -> t.Any: 184 """ 185 Returns a Python object equivalent of the SQL node. 186 """ 187 raise ValueError(f"{self} cannot be converted to a Python object.") 188 189 @property 190 def is_int(self) -> bool: 191 """ 192 Checks whether an expression is an integer. 193 """ 194 return self.is_number and isinstance(self.to_py(), int) 195 196 @property 197 def is_star(self) -> bool: 198 """Checks whether an expression is a star.""" 199 return isinstance(self, Star) or (isinstance(self, Column) and isinstance(self.this, Star)) 200 201 @property 202 def alias(self) -> str: 203 """ 204 Returns the alias of the expression, or an empty string if it's not aliased. 205 """ 206 if isinstance(self.args.get("alias"), TableAlias): 207 return self.args["alias"].name 208 return self.text("alias") 209 210 @property 211 def alias_column_names(self) -> t.List[str]: 212 table_alias = self.args.get("alias") 213 if not table_alias: 214 return [] 215 return [c.name for c in table_alias.args.get("columns") or []] 216 217 @property 218 def name(self) -> str: 219 return self.text("this") 220 221 @property 222 def alias_or_name(self) -> str: 223 return self.alias or self.name 224 225 @property 226 def output_name(self) -> str: 227 """ 228 Name of the output column if this expression is a selection. 229 230 If the Expression has no output name, an empty string is returned. 231 232 Example: 233 >>> from sqlglot import parse_one 234 >>> parse_one("SELECT a").expressions[0].output_name 235 'a' 236 >>> parse_one("SELECT b AS c").expressions[0].output_name 237 'c' 238 >>> parse_one("SELECT 1 + 2").expressions[0].output_name 239 '' 240 """ 241 return "" 242 243 @property 244 def type(self) -> t.Optional[DataType]: 245 return self._type 246 247 @type.setter 248 def type(self, dtype: t.Optional[DataType | DataType.Type | str]) -> None: 249 if dtype and not isinstance(dtype, DataType): 250 dtype = DataType.build(dtype) 251 self._type = dtype # type: ignore 252 253 def is_type(self, *dtypes) -> bool: 254 return self.type is not None and self.type.is_type(*dtypes) 255 256 def is_leaf(self) -> bool: 257 return not any(isinstance(v, (Expression, list)) for v in self.args.values()) 258 259 @property 260 def meta(self) -> t.Dict[str, t.Any]: 261 if self._meta is None: 262 self._meta = {} 263 return self._meta 264 265 def __deepcopy__(self, memo): 266 root = self.__class__() 267 stack = [(self, root)] 268 269 while stack: 270 node, copy = stack.pop() 271 272 if node.comments is not None: 273 copy.comments = deepcopy(node.comments) 274 if node._type is not None: 275 copy._type = deepcopy(node._type) 276 if node._meta is not None: 277 copy._meta = deepcopy(node._meta) 278 if node._hash is not None: 279 copy._hash = node._hash 280 281 for k, vs in node.args.items(): 282 if hasattr(vs, "parent"): 283 stack.append((vs, vs.__class__())) 284 copy.set(k, stack[-1][-1]) 285 elif type(vs) is list: 286 copy.args[k] = [] 287 288 for v in vs: 289 if hasattr(v, "parent"): 290 stack.append((v, v.__class__())) 291 copy.append(k, stack[-1][-1]) 292 else: 293 copy.append(k, v) 294 else: 295 copy.args[k] = vs 296 297 return root 298 299 def copy(self): 300 """ 301 Returns a deep copy of the expression. 302 """ 303 return deepcopy(self) 304 305 def add_comments(self, comments: t.Optional[t.List[str]] = None) -> None: 306 if self.comments is None: 307 self.comments = [] 308 309 if comments: 310 for comment in comments: 311 _, *meta = comment.split(SQLGLOT_META) 312 if meta: 313 for kv in "".join(meta).split(","): 314 k, *v = kv.split("=") 315 value = v[0].strip() if v else True 316 self.meta[k.strip()] = value 317 self.comments.append(comment) 318 319 def pop_comments(self) -> t.List[str]: 320 comments = self.comments or [] 321 self.comments = None 322 return comments 323 324 def append(self, arg_key: str, value: t.Any) -> None: 325 """ 326 Appends value to arg_key if it's a list or sets it as a new list. 327 328 Args: 329 arg_key (str): name of the list expression arg 330 value (Any): value to append to the list 331 """ 332 if type(self.args.get(arg_key)) is not list: 333 self.args[arg_key] = [] 334 self._set_parent(arg_key, value) 335 values = self.args[arg_key] 336 if hasattr(value, "parent"): 337 value.index = len(values) 338 values.append(value) 339 340 def set( 341 self, 342 arg_key: str, 343 value: t.Any, 344 index: t.Optional[int] = None, 345 overwrite: bool = True, 346 ) -> None: 347 """ 348 Sets arg_key to value. 349 350 Args: 351 arg_key: name of the expression arg. 352 value: value to set the arg to. 353 index: if the arg is a list, this specifies what position to add the value in it. 354 overwrite: assuming an index is given, this determines whether to overwrite the 355 list entry instead of only inserting a new value (i.e., like list.insert). 356 """ 357 if index is not None: 358 expressions = self.args.get(arg_key) or [] 359 360 if seq_get(expressions, index) is None: 361 return 362 if value is None: 363 expressions.pop(index) 364 for v in expressions[index:]: 365 v.index = v.index - 1 366 return 367 368 if isinstance(value, list): 369 expressions.pop(index) 370 expressions[index:index] = value 371 elif overwrite: 372 expressions[index] = value 373 else: 374 expressions.insert(index, value) 375 376 value = expressions 377 elif value is None: 378 self.args.pop(arg_key, None) 379 return 380 381 self.args[arg_key] = value 382 self._set_parent(arg_key, value, index) 383 384 def _set_parent(self, arg_key: str, value: t.Any, index: t.Optional[int] = None) -> None: 385 if hasattr(value, "parent"): 386 value.parent = self 387 value.arg_key = arg_key 388 value.index = index 389 elif type(value) is list: 390 for index, v in enumerate(value): 391 if hasattr(v, "parent"): 392 v.parent = self 393 v.arg_key = arg_key 394 v.index = index 395 396 @property 397 def depth(self) -> int: 398 """ 399 Returns the depth of this tree. 400 """ 401 if self.parent: 402 return self.parent.depth + 1 403 return 0 404 405 def iter_expressions(self, reverse: bool = False) -> t.Iterator[Expression]: 406 """Yields the key and expression for all arguments, exploding list args.""" 407 # remove tuple when python 3.7 is deprecated 408 for vs in reversed(tuple(self.args.values())) if reverse else self.args.values(): 409 if type(vs) is list: 410 for v in reversed(vs) if reverse else vs: 411 if hasattr(v, "parent"): 412 yield v 413 else: 414 if hasattr(vs, "parent"): 415 yield vs 416 417 def find(self, *expression_types: t.Type[E], bfs: bool = True) -> t.Optional[E]: 418 """ 419 Returns the first node in this tree which matches at least one of 420 the specified types. 421 422 Args: 423 expression_types: the expression type(s) to match. 424 bfs: whether to search the AST using the BFS algorithm (DFS is used if false). 425 426 Returns: 427 The node which matches the criteria or None if no such node was found. 428 """ 429 return next(self.find_all(*expression_types, bfs=bfs), None) 430 431 def find_all(self, *expression_types: t.Type[E], bfs: bool = True) -> t.Iterator[E]: 432 """ 433 Returns a generator object which visits all nodes in this tree and only 434 yields those that match at least one of the specified expression types. 435 436 Args: 437 expression_types: the expression type(s) to match. 438 bfs: whether to search the AST using the BFS algorithm (DFS is used if false). 439 440 Returns: 441 The generator object. 442 """ 443 for expression in self.walk(bfs=bfs): 444 if isinstance(expression, expression_types): 445 yield expression 446 447 def find_ancestor(self, *expression_types: t.Type[E]) -> t.Optional[E]: 448 """ 449 Returns a nearest parent matching expression_types. 450 451 Args: 452 expression_types: the expression type(s) to match. 453 454 Returns: 455 The parent node. 456 """ 457 ancestor = self.parent 458 while ancestor and not isinstance(ancestor, expression_types): 459 ancestor = ancestor.parent 460 return ancestor # type: ignore 461 462 @property 463 def parent_select(self) -> t.Optional[Select]: 464 """ 465 Returns the parent select statement. 466 """ 467 return self.find_ancestor(Select) 468 469 @property 470 def same_parent(self) -> bool: 471 """Returns if the parent is the same class as itself.""" 472 return type(self.parent) is self.__class__ 473 474 def root(self) -> Expression: 475 """ 476 Returns the root expression of this tree. 477 """ 478 expression = self 479 while expression.parent: 480 expression = expression.parent 481 return expression 482 483 def walk( 484 self, bfs: bool = True, prune: t.Optional[t.Callable[[Expression], bool]] = None 485 ) -> t.Iterator[Expression]: 486 """ 487 Returns a generator object which visits all nodes in this tree. 488 489 Args: 490 bfs: if set to True the BFS traversal order will be applied, 491 otherwise the DFS traversal will be used instead. 492 prune: callable that returns True if the generator should stop traversing 493 this branch of the tree. 494 495 Returns: 496 the generator object. 497 """ 498 if bfs: 499 yield from self.bfs(prune=prune) 500 else: 501 yield from self.dfs(prune=prune) 502 503 def dfs( 504 self, prune: t.Optional[t.Callable[[Expression], bool]] = None 505 ) -> t.Iterator[Expression]: 506 """ 507 Returns a generator object which visits all nodes in this tree in 508 the DFS (Depth-first) order. 509 510 Returns: 511 The generator object. 512 """ 513 stack = [self] 514 515 while stack: 516 node = stack.pop() 517 518 yield node 519 520 if prune and prune(node): 521 continue 522 523 for v in node.iter_expressions(reverse=True): 524 stack.append(v) 525 526 def bfs( 527 self, prune: t.Optional[t.Callable[[Expression], bool]] = None 528 ) -> t.Iterator[Expression]: 529 """ 530 Returns a generator object which visits all nodes in this tree in 531 the BFS (Breadth-first) order. 532 533 Returns: 534 The generator object. 535 """ 536 queue = deque([self]) 537 538 while queue: 539 node = queue.popleft() 540 541 yield node 542 543 if prune and prune(node): 544 continue 545 546 for v in node.iter_expressions(): 547 queue.append(v) 548 549 def unnest(self): 550 """ 551 Returns the first non parenthesis child or self. 552 """ 553 expression = self 554 while type(expression) is Paren: 555 expression = expression.this 556 return expression 557 558 def unalias(self): 559 """ 560 Returns the inner expression if this is an Alias. 561 """ 562 if isinstance(self, Alias): 563 return self.this 564 return self 565 566 def unnest_operands(self): 567 """ 568 Returns unnested operands as a tuple. 569 """ 570 return tuple(arg.unnest() for arg in self.iter_expressions()) 571 572 def flatten(self, unnest=True): 573 """ 574 Returns a generator which yields child nodes whose parents are the same class. 575 576 A AND B AND C -> [A, B, C] 577 """ 578 for node in self.dfs(prune=lambda n: n.parent and type(n) is not self.__class__): 579 if type(node) is not self.__class__: 580 yield node.unnest() if unnest and not isinstance(node, Subquery) else node 581 582 def __str__(self) -> str: 583 return self.sql() 584 585 def __repr__(self) -> str: 586 return _to_s(self) 587 588 def to_s(self) -> str: 589 """ 590 Same as __repr__, but includes additional information which can be useful 591 for debugging, like empty or missing args and the AST nodes' object IDs. 592 """ 593 return _to_s(self, verbose=True) 594 595 def sql(self, dialect: DialectType = None, **opts) -> str: 596 """ 597 Returns SQL string representation of this tree. 598 599 Args: 600 dialect: the dialect of the output SQL string (eg. "spark", "hive", "presto", "mysql"). 601 opts: other `sqlglot.generator.Generator` options. 602 603 Returns: 604 The SQL string. 605 """ 606 from sqlglot.dialects import Dialect 607 608 return Dialect.get_or_raise(dialect).generate(self, **opts) 609 610 def transform(self, fun: t.Callable, *args: t.Any, copy: bool = True, **kwargs) -> Expression: 611 """ 612 Visits all tree nodes (excluding already transformed ones) 613 and applies the given transformation function to each node. 614 615 Args: 616 fun: a function which takes a node as an argument and returns a 617 new transformed node or the same node without modifications. If the function 618 returns None, then the corresponding node will be removed from the syntax tree. 619 copy: if set to True a new tree instance is constructed, otherwise the tree is 620 modified in place. 621 622 Returns: 623 The transformed tree. 624 """ 625 root = None 626 new_node = None 627 628 for node in (self.copy() if copy else self).dfs(prune=lambda n: n is not new_node): 629 parent, arg_key, index = node.parent, node.arg_key, node.index 630 new_node = fun(node, *args, **kwargs) 631 632 if not root: 633 root = new_node 634 elif new_node is not node: 635 parent.set(arg_key, new_node, index) 636 637 assert root 638 return root.assert_is(Expression) 639 640 @t.overload 641 def replace(self, expression: E) -> E: ... 642 643 @t.overload 644 def replace(self, expression: None) -> None: ... 645 646 def replace(self, expression): 647 """ 648 Swap out this expression with a new expression. 649 650 For example:: 651 652 >>> tree = Select().select("x").from_("tbl") 653 >>> tree.find(Column).replace(column("y")) 654 Column( 655 this=Identifier(this=y, quoted=False)) 656 >>> tree.sql() 657 'SELECT y FROM tbl' 658 659 Args: 660 expression: new node 661 662 Returns: 663 The new expression or expressions. 664 """ 665 parent = self.parent 666 667 if not parent or parent is expression: 668 return expression 669 670 key = self.arg_key 671 value = parent.args.get(key) 672 673 if type(expression) is list and isinstance(value, Expression): 674 # We are trying to replace an Expression with a list, so it's assumed that 675 # the intention was to really replace the parent of this expression. 676 value.parent.replace(expression) 677 else: 678 parent.set(key, expression, self.index) 679 680 if expression is not self: 681 self.parent = None 682 self.arg_key = None 683 self.index = None 684 685 return expression 686 687 def pop(self: E) -> E: 688 """ 689 Remove this expression from its AST. 690 691 Returns: 692 The popped expression. 693 """ 694 self.replace(None) 695 return self 696 697 def assert_is(self, type_: t.Type[E]) -> E: 698 """ 699 Assert that this `Expression` is an instance of `type_`. 700 701 If it is NOT an instance of `type_`, this raises an assertion error. 702 Otherwise, this returns this expression. 703 704 Examples: 705 This is useful for type security in chained expressions: 706 707 >>> import sqlglot 708 >>> sqlglot.parse_one("SELECT x from y").assert_is(Select).select("z").sql() 709 'SELECT x, z FROM y' 710 """ 711 if not isinstance(self, type_): 712 raise AssertionError(f"{self} is not {type_}.") 713 return self 714 715 def error_messages(self, args: t.Optional[t.Sequence] = None) -> t.List[str]: 716 """ 717 Checks if this expression is valid (e.g. all mandatory args are set). 718 719 Args: 720 args: a sequence of values that were used to instantiate a Func expression. This is used 721 to check that the provided arguments don't exceed the function argument limit. 722 723 Returns: 724 A list of error messages for all possible errors that were found. 725 """ 726 errors: t.List[str] = [] 727 728 for k in self.args: 729 if k not in self.arg_types: 730 errors.append(f"Unexpected keyword: '{k}' for {self.__class__}") 731 for k, mandatory in self.arg_types.items(): 732 v = self.args.get(k) 733 if mandatory and (v is None or (isinstance(v, list) and not v)): 734 errors.append(f"Required keyword: '{k}' missing for {self.__class__}") 735 736 if ( 737 args 738 and isinstance(self, Func) 739 and len(args) > len(self.arg_types) 740 and not self.is_var_len_args 741 ): 742 errors.append( 743 f"The number of provided arguments ({len(args)}) is greater than " 744 f"the maximum number of supported arguments ({len(self.arg_types)})" 745 ) 746 747 return errors 748 749 def dump(self): 750 """ 751 Dump this Expression to a JSON-serializable dict. 752 """ 753 from sqlglot.serde import dump 754 755 return dump(self) 756 757 @classmethod 758 def load(cls, obj): 759 """ 760 Load a dict (as returned by `Expression.dump`) into an Expression instance. 761 """ 762 from sqlglot.serde import load 763 764 return load(obj) 765 766 def and_( 767 self, 768 *expressions: t.Optional[ExpOrStr], 769 dialect: DialectType = None, 770 copy: bool = True, 771 **opts, 772 ) -> Condition: 773 """ 774 AND this condition with one or multiple expressions. 775 776 Example: 777 >>> condition("x=1").and_("y=1").sql() 778 'x = 1 AND y = 1' 779 780 Args: 781 *expressions: the SQL code strings to parse. 782 If an `Expression` instance is passed, it will be used as-is. 783 dialect: the dialect used to parse the input expression. 784 copy: whether to copy the involved expressions (only applies to Expressions). 785 opts: other options to use to parse the input expressions. 786 787 Returns: 788 The new And condition. 789 """ 790 return and_(self, *expressions, dialect=dialect, copy=copy, **opts) 791 792 def or_( 793 self, 794 *expressions: t.Optional[ExpOrStr], 795 dialect: DialectType = None, 796 copy: bool = True, 797 **opts, 798 ) -> Condition: 799 """ 800 OR this condition with one or multiple expressions. 801 802 Example: 803 >>> condition("x=1").or_("y=1").sql() 804 'x = 1 OR y = 1' 805 806 Args: 807 *expressions: the SQL code strings to parse. 808 If an `Expression` instance is passed, it will be used as-is. 809 dialect: the dialect used to parse the input expression. 810 copy: whether to copy the involved expressions (only applies to Expressions). 811 opts: other options to use to parse the input expressions. 812 813 Returns: 814 The new Or condition. 815 """ 816 return or_(self, *expressions, dialect=dialect, copy=copy, **opts) 817 818 def not_(self, copy: bool = True): 819 """ 820 Wrap this condition with NOT. 821 822 Example: 823 >>> condition("x=1").not_().sql() 824 'NOT x = 1' 825 826 Args: 827 copy: whether to copy this object. 828 829 Returns: 830 The new Not instance. 831 """ 832 return not_(self, copy=copy) 833 834 def as_( 835 self, 836 alias: str | Identifier, 837 quoted: t.Optional[bool] = None, 838 dialect: DialectType = None, 839 copy: bool = True, 840 **opts, 841 ) -> Alias: 842 return alias_(self, alias, quoted=quoted, dialect=dialect, copy=copy, **opts) 843 844 def _binop(self, klass: t.Type[E], other: t.Any, reverse: bool = False) -> E: 845 this = self.copy() 846 other = convert(other, copy=True) 847 if not isinstance(this, klass) and not isinstance(other, klass): 848 this = _wrap(this, Binary) 849 other = _wrap(other, Binary) 850 if reverse: 851 return klass(this=other, expression=this) 852 return klass(this=this, expression=other) 853 854 def __getitem__(self, other: ExpOrStr | t.Tuple[ExpOrStr]) -> Bracket: 855 return Bracket( 856 this=self.copy(), expressions=[convert(e, copy=True) for e in ensure_list(other)] 857 ) 858 859 def __iter__(self) -> t.Iterator: 860 if "expressions" in self.arg_types: 861 return iter(self.args.get("expressions") or []) 862 # We define this because __getitem__ converts Expression into an iterable, which is 863 # problematic because one can hit infinite loops if they do "for x in some_expr: ..." 864 # See: https://peps.python.org/pep-0234/ 865 raise TypeError(f"'{self.__class__.__name__}' object is not iterable") 866 867 def isin( 868 self, 869 *expressions: t.Any, 870 query: t.Optional[ExpOrStr] = None, 871 unnest: t.Optional[ExpOrStr] | t.Collection[ExpOrStr] = None, 872 copy: bool = True, 873 **opts, 874 ) -> In: 875 subquery = maybe_parse(query, copy=copy, **opts) if query else None 876 if subquery and not isinstance(subquery, Subquery): 877 subquery = subquery.subquery(copy=False) 878 879 return In( 880 this=maybe_copy(self, copy), 881 expressions=[convert(e, copy=copy) for e in expressions], 882 query=subquery, 883 unnest=( 884 Unnest( 885 expressions=[ 886 maybe_parse(t.cast(ExpOrStr, e), copy=copy, **opts) 887 for e in ensure_list(unnest) 888 ] 889 ) 890 if unnest 891 else None 892 ), 893 ) 894 895 def between(self, low: t.Any, high: t.Any, copy: bool = True, **opts) -> Between: 896 return Between( 897 this=maybe_copy(self, copy), 898 low=convert(low, copy=copy, **opts), 899 high=convert(high, copy=copy, **opts), 900 ) 901 902 def is_(self, other: ExpOrStr) -> Is: 903 return self._binop(Is, other) 904 905 def like(self, other: ExpOrStr) -> Like: 906 return self._binop(Like, other) 907 908 def ilike(self, other: ExpOrStr) -> ILike: 909 return self._binop(ILike, other) 910 911 def eq(self, other: t.Any) -> EQ: 912 return self._binop(EQ, other) 913 914 def neq(self, other: t.Any) -> NEQ: 915 return self._binop(NEQ, other) 916 917 def rlike(self, other: ExpOrStr) -> RegexpLike: 918 return self._binop(RegexpLike, other) 919 920 def div(self, other: ExpOrStr, typed: bool = False, safe: bool = False) -> Div: 921 div = self._binop(Div, other) 922 div.args["typed"] = typed 923 div.args["safe"] = safe 924 return div 925 926 def asc(self, nulls_first: bool = True) -> Ordered: 927 return Ordered(this=self.copy(), nulls_first=nulls_first) 928 929 def desc(self, nulls_first: bool = False) -> Ordered: 930 return Ordered(this=self.copy(), desc=True, nulls_first=nulls_first) 931 932 def __lt__(self, other: t.Any) -> LT: 933 return self._binop(LT, other) 934 935 def __le__(self, other: t.Any) -> LTE: 936 return self._binop(LTE, other) 937 938 def __gt__(self, other: t.Any) -> GT: 939 return self._binop(GT, other) 940 941 def __ge__(self, other: t.Any) -> GTE: 942 return self._binop(GTE, other) 943 944 def __add__(self, other: t.Any) -> Add: 945 return self._binop(Add, other) 946 947 def __radd__(self, other: t.Any) -> Add: 948 return self._binop(Add, other, reverse=True) 949 950 def __sub__(self, other: t.Any) -> Sub: 951 return self._binop(Sub, other) 952 953 def __rsub__(self, other: t.Any) -> Sub: 954 return self._binop(Sub, other, reverse=True) 955 956 def __mul__(self, other: t.Any) -> Mul: 957 return self._binop(Mul, other) 958 959 def __rmul__(self, other: t.Any) -> Mul: 960 return self._binop(Mul, other, reverse=True) 961 962 def __truediv__(self, other: t.Any) -> Div: 963 return self._binop(Div, other) 964 965 def __rtruediv__(self, other: t.Any) -> Div: 966 return self._binop(Div, other, reverse=True) 967 968 def __floordiv__(self, other: t.Any) -> IntDiv: 969 return self._binop(IntDiv, other) 970 971 def __rfloordiv__(self, other: t.Any) -> IntDiv: 972 return self._binop(IntDiv, other, reverse=True) 973 974 def __mod__(self, other: t.Any) -> Mod: 975 return self._binop(Mod, other) 976 977 def __rmod__(self, other: t.Any) -> Mod: 978 return self._binop(Mod, other, reverse=True) 979 980 def __pow__(self, other: t.Any) -> Pow: 981 return self._binop(Pow, other) 982 983 def __rpow__(self, other: t.Any) -> Pow: 984 return self._binop(Pow, other, reverse=True) 985 986 def __and__(self, other: t.Any) -> And: 987 return self._binop(And, other) 988 989 def __rand__(self, other: t.Any) -> And: 990 return self._binop(And, other, reverse=True) 991 992 def __or__(self, other: t.Any) -> Or: 993 return self._binop(Or, other) 994 995 def __ror__(self, other: t.Any) -> Or: 996 return self._binop(Or, other, reverse=True) 997 998 def __neg__(self) -> Neg: 999 return Neg(this=_wrap(self.copy(), Binary)) 1000 1001 def __invert__(self) -> Not: 1002 return not_(self.copy())
The base class for all expressions in a syntax tree. Each Expression encapsulates any necessary context, such as its child expressions, their names (arg keys), and whether a given child expression is optional or not.
Attributes:
- key: a unique key for each class in the Expression hierarchy. This is useful for hashing and representing expressions as strings.
- arg_types: determines the arguments (child nodes) supported by an expression. It maps arg keys to booleans that indicate whether the corresponding args are optional.
- parent: a reference to the parent expression (or None, in case of root expressions).
- arg_key: the arg key an expression is associated with, i.e. the name its parent expression uses to refer to it.
- index: the index of an expression if it is inside of a list argument in its parent.
- comments: a list of comments that are associated with a given expression. This is used in order to preserve comments when transpiling SQL code.
- type: the
DataTypetype of an expression. This is inferred by the optimizer, in order to enable some transformations that require type information. - meta: a dictionary that can be used to store useful metadata for a given expression.
Example:
>>> class Foo(Expression): ... arg_types = {"this": True, "expression": False}The above definition informs us that Foo is an Expression that requires an argument called "this" and may also optionally receive an argument called "expression".
Arguments:
- args: a mapping used for retrieving the arguments of an expression, given their arg keys.
102 def __init__(self, **args: t.Any): 103 self.args: t.Dict[str, t.Any] = args 104 self.parent: t.Optional[Expression] = None 105 self.arg_key: t.Optional[str] = None 106 self.index: t.Optional[int] = None 107 self.comments: t.Optional[t.List[str]] = None 108 self._type: t.Optional[DataType] = None 109 self._meta: t.Optional[t.Dict[str, t.Any]] = None 110 self._hash: t.Optional[int] = None 111 112 for arg_key, value in self.args.items(): 113 self._set_parent(arg_key, value)
132 @property 133 def this(self) -> t.Any: 134 """ 135 Retrieves the argument with key "this". 136 """ 137 return self.args.get("this")
Retrieves the argument with key "this".
139 @property 140 def expression(self) -> t.Any: 141 """ 142 Retrieves the argument with key "expression". 143 """ 144 return self.args.get("expression")
Retrieves the argument with key "expression".
146 @property 147 def expressions(self) -> t.List[t.Any]: 148 """ 149 Retrieves the argument with key "expressions". 150 """ 151 return self.args.get("expressions") or []
Retrieves the argument with key "expressions".
153 def text(self, key) -> str: 154 """ 155 Returns a textual representation of the argument corresponding to "key". This can only be used 156 for args that are strings or leaf Expression instances, such as identifiers and literals. 157 """ 158 field = self.args.get(key) 159 if isinstance(field, str): 160 return field 161 if isinstance(field, (Identifier, Literal, Var)): 162 return field.this 163 if isinstance(field, (Star, Null)): 164 return field.name 165 return ""
Returns a textual representation of the argument corresponding to "key". This can only be used for args that are strings or leaf Expression instances, such as identifiers and literals.
167 @property 168 def is_string(self) -> bool: 169 """ 170 Checks whether a Literal expression is a string. 171 """ 172 return isinstance(self, Literal) and self.args["is_string"]
Checks whether a Literal expression is a string.
174 @property 175 def is_number(self) -> bool: 176 """ 177 Checks whether a Literal expression is a number. 178 """ 179 return (isinstance(self, Literal) and not self.args["is_string"]) or ( 180 isinstance(self, Neg) and self.this.is_number 181 )
Checks whether a Literal expression is a number.
183 def to_py(self) -> t.Any: 184 """ 185 Returns a Python object equivalent of the SQL node. 186 """ 187 raise ValueError(f"{self} cannot be converted to a Python object.")
Returns a Python object equivalent of the SQL node.
189 @property 190 def is_int(self) -> bool: 191 """ 192 Checks whether an expression is an integer. 193 """ 194 return self.is_number and isinstance(self.to_py(), int)
Checks whether an expression is an integer.
196 @property 197 def is_star(self) -> bool: 198 """Checks whether an expression is a star.""" 199 return isinstance(self, Star) or (isinstance(self, Column) and isinstance(self.this, Star))
Checks whether an expression is a star.
201 @property 202 def alias(self) -> str: 203 """ 204 Returns the alias of the expression, or an empty string if it's not aliased. 205 """ 206 if isinstance(self.args.get("alias"), TableAlias): 207 return self.args["alias"].name 208 return self.text("alias")
Returns the alias of the expression, or an empty string if it's not aliased.
225 @property 226 def output_name(self) -> str: 227 """ 228 Name of the output column if this expression is a selection. 229 230 If the Expression has no output name, an empty string is returned. 231 232 Example: 233 >>> from sqlglot import parse_one 234 >>> parse_one("SELECT a").expressions[0].output_name 235 'a' 236 >>> parse_one("SELECT b AS c").expressions[0].output_name 237 'c' 238 >>> parse_one("SELECT 1 + 2").expressions[0].output_name 239 '' 240 """ 241 return ""
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
299 def copy(self): 300 """ 301 Returns a deep copy of the expression. 302 """ 303 return deepcopy(self)
Returns a deep copy of the expression.
305 def add_comments(self, comments: t.Optional[t.List[str]] = None) -> None: 306 if self.comments is None: 307 self.comments = [] 308 309 if comments: 310 for comment in comments: 311 _, *meta = comment.split(SQLGLOT_META) 312 if meta: 313 for kv in "".join(meta).split(","): 314 k, *v = kv.split("=") 315 value = v[0].strip() if v else True 316 self.meta[k.strip()] = value 317 self.comments.append(comment)
324 def append(self, arg_key: str, value: t.Any) -> None: 325 """ 326 Appends value to arg_key if it's a list or sets it as a new list. 327 328 Args: 329 arg_key (str): name of the list expression arg 330 value (Any): value to append to the list 331 """ 332 if type(self.args.get(arg_key)) is not list: 333 self.args[arg_key] = [] 334 self._set_parent(arg_key, value) 335 values = self.args[arg_key] 336 if hasattr(value, "parent"): 337 value.index = len(values) 338 values.append(value)
Appends value to arg_key if it's a list or sets it as a new list.
Arguments:
- arg_key (str): name of the list expression arg
- value (Any): value to append to the list
340 def set( 341 self, 342 arg_key: str, 343 value: t.Any, 344 index: t.Optional[int] = None, 345 overwrite: bool = True, 346 ) -> None: 347 """ 348 Sets arg_key to value. 349 350 Args: 351 arg_key: name of the expression arg. 352 value: value to set the arg to. 353 index: if the arg is a list, this specifies what position to add the value in it. 354 overwrite: assuming an index is given, this determines whether to overwrite the 355 list entry instead of only inserting a new value (i.e., like list.insert). 356 """ 357 if index is not None: 358 expressions = self.args.get(arg_key) or [] 359 360 if seq_get(expressions, index) is None: 361 return 362 if value is None: 363 expressions.pop(index) 364 for v in expressions[index:]: 365 v.index = v.index - 1 366 return 367 368 if isinstance(value, list): 369 expressions.pop(index) 370 expressions[index:index] = value 371 elif overwrite: 372 expressions[index] = value 373 else: 374 expressions.insert(index, value) 375 376 value = expressions 377 elif value is None: 378 self.args.pop(arg_key, None) 379 return 380 381 self.args[arg_key] = value 382 self._set_parent(arg_key, value, index)
Sets arg_key to value.
Arguments:
- arg_key: name of the expression arg.
- value: value to set the arg to.
- index: if the arg is a list, this specifies what position to add the value in it.
- overwrite: assuming an index is given, this determines whether to overwrite the list entry instead of only inserting a new value (i.e., like list.insert).
396 @property 397 def depth(self) -> int: 398 """ 399 Returns the depth of this tree. 400 """ 401 if self.parent: 402 return self.parent.depth + 1 403 return 0
Returns the depth of this tree.
405 def iter_expressions(self, reverse: bool = False) -> t.Iterator[Expression]: 406 """Yields the key and expression for all arguments, exploding list args.""" 407 # remove tuple when python 3.7 is deprecated 408 for vs in reversed(tuple(self.args.values())) if reverse else self.args.values(): 409 if type(vs) is list: 410 for v in reversed(vs) if reverse else vs: 411 if hasattr(v, "parent"): 412 yield v 413 else: 414 if hasattr(vs, "parent"): 415 yield vs
Yields the key and expression for all arguments, exploding list args.
417 def find(self, *expression_types: t.Type[E], bfs: bool = True) -> t.Optional[E]: 418 """ 419 Returns the first node in this tree which matches at least one of 420 the specified types. 421 422 Args: 423 expression_types: the expression type(s) to match. 424 bfs: whether to search the AST using the BFS algorithm (DFS is used if false). 425 426 Returns: 427 The node which matches the criteria or None if no such node was found. 428 """ 429 return next(self.find_all(*expression_types, bfs=bfs), None)
Returns the first node in this tree which matches at least one of the specified types.
Arguments:
- expression_types: the expression type(s) to match.
- bfs: whether to search the AST using the BFS algorithm (DFS is used if false).
Returns:
The node which matches the criteria or None if no such node was found.
431 def find_all(self, *expression_types: t.Type[E], bfs: bool = True) -> t.Iterator[E]: 432 """ 433 Returns a generator object which visits all nodes in this tree and only 434 yields those that match at least one of the specified expression types. 435 436 Args: 437 expression_types: the expression type(s) to match. 438 bfs: whether to search the AST using the BFS algorithm (DFS is used if false). 439 440 Returns: 441 The generator object. 442 """ 443 for expression in self.walk(bfs=bfs): 444 if isinstance(expression, expression_types): 445 yield expression
Returns a generator object which visits all nodes in this tree and only yields those that match at least one of the specified expression types.
Arguments:
- expression_types: the expression type(s) to match.
- bfs: whether to search the AST using the BFS algorithm (DFS is used if false).
Returns:
The generator object.
447 def find_ancestor(self, *expression_types: t.Type[E]) -> t.Optional[E]: 448 """ 449 Returns a nearest parent matching expression_types. 450 451 Args: 452 expression_types: the expression type(s) to match. 453 454 Returns: 455 The parent node. 456 """ 457 ancestor = self.parent 458 while ancestor and not isinstance(ancestor, expression_types): 459 ancestor = ancestor.parent 460 return ancestor # type: ignore
Returns a nearest parent matching expression_types.
Arguments:
- expression_types: the expression type(s) to match.
Returns:
The parent node.
462 @property 463 def parent_select(self) -> t.Optional[Select]: 464 """ 465 Returns the parent select statement. 466 """ 467 return self.find_ancestor(Select)
Returns the parent select statement.
469 @property 470 def same_parent(self) -> bool: 471 """Returns if the parent is the same class as itself.""" 472 return type(self.parent) is self.__class__
Returns if the parent is the same class as itself.
474 def root(self) -> Expression: 475 """ 476 Returns the root expression of this tree. 477 """ 478 expression = self 479 while expression.parent: 480 expression = expression.parent 481 return expression
Returns the root expression of this tree.
483 def walk( 484 self, bfs: bool = True, prune: t.Optional[t.Callable[[Expression], bool]] = None 485 ) -> t.Iterator[Expression]: 486 """ 487 Returns a generator object which visits all nodes in this tree. 488 489 Args: 490 bfs: if set to True the BFS traversal order will be applied, 491 otherwise the DFS traversal will be used instead. 492 prune: callable that returns True if the generator should stop traversing 493 this branch of the tree. 494 495 Returns: 496 the generator object. 497 """ 498 if bfs: 499 yield from self.bfs(prune=prune) 500 else: 501 yield from self.dfs(prune=prune)
Returns a generator object which visits all nodes in this tree.
Arguments:
- bfs: if set to True the BFS traversal order will be applied, otherwise the DFS traversal will be used instead.
- prune: callable that returns True if the generator should stop traversing this branch of the tree.
Returns:
the generator object.
503 def dfs( 504 self, prune: t.Optional[t.Callable[[Expression], bool]] = None 505 ) -> t.Iterator[Expression]: 506 """ 507 Returns a generator object which visits all nodes in this tree in 508 the DFS (Depth-first) order. 509 510 Returns: 511 The generator object. 512 """ 513 stack = [self] 514 515 while stack: 516 node = stack.pop() 517 518 yield node 519 520 if prune and prune(node): 521 continue 522 523 for v in node.iter_expressions(reverse=True): 524 stack.append(v)
Returns a generator object which visits all nodes in this tree in the DFS (Depth-first) order.
Returns:
The generator object.
526 def bfs( 527 self, prune: t.Optional[t.Callable[[Expression], bool]] = None 528 ) -> t.Iterator[Expression]: 529 """ 530 Returns a generator object which visits all nodes in this tree in 531 the BFS (Breadth-first) order. 532 533 Returns: 534 The generator object. 535 """ 536 queue = deque([self]) 537 538 while queue: 539 node = queue.popleft() 540 541 yield node 542 543 if prune and prune(node): 544 continue 545 546 for v in node.iter_expressions(): 547 queue.append(v)
Returns a generator object which visits all nodes in this tree in the BFS (Breadth-first) order.
Returns:
The generator object.
549 def unnest(self): 550 """ 551 Returns the first non parenthesis child or self. 552 """ 553 expression = self 554 while type(expression) is Paren: 555 expression = expression.this 556 return expression
Returns the first non parenthesis child or self.
558 def unalias(self): 559 """ 560 Returns the inner expression if this is an Alias. 561 """ 562 if isinstance(self, Alias): 563 return self.this 564 return self
Returns the inner expression if this is an Alias.
566 def unnest_operands(self): 567 """ 568 Returns unnested operands as a tuple. 569 """ 570 return tuple(arg.unnest() for arg in self.iter_expressions())
Returns unnested operands as a tuple.
572 def flatten(self, unnest=True): 573 """ 574 Returns a generator which yields child nodes whose parents are the same class. 575 576 A AND B AND C -> [A, B, C] 577 """ 578 for node in self.dfs(prune=lambda n: n.parent and type(n) is not self.__class__): 579 if type(node) is not self.__class__: 580 yield node.unnest() if unnest and not isinstance(node, Subquery) else node
Returns a generator which yields child nodes whose parents are the same class.
A AND B AND C -> [A, B, C]
588 def to_s(self) -> str: 589 """ 590 Same as __repr__, but includes additional information which can be useful 591 for debugging, like empty or missing args and the AST nodes' object IDs. 592 """ 593 return _to_s(self, verbose=True)
Same as __repr__, but includes additional information which can be useful for debugging, like empty or missing args and the AST nodes' object IDs.
595 def sql(self, dialect: DialectType = None, **opts) -> str: 596 """ 597 Returns SQL string representation of this tree. 598 599 Args: 600 dialect: the dialect of the output SQL string (eg. "spark", "hive", "presto", "mysql"). 601 opts: other `sqlglot.generator.Generator` options. 602 603 Returns: 604 The SQL string. 605 """ 606 from sqlglot.dialects import Dialect 607 608 return Dialect.get_or_raise(dialect).generate(self, **opts)
Returns SQL string representation of this tree.
Arguments:
- dialect: the dialect of the output SQL string (eg. "spark", "hive", "presto", "mysql").
- opts: other
sqlglot.generator.Generatoroptions.
Returns:
The SQL string.
610 def transform(self, fun: t.Callable, *args: t.Any, copy: bool = True, **kwargs) -> Expression: 611 """ 612 Visits all tree nodes (excluding already transformed ones) 613 and applies the given transformation function to each node. 614 615 Args: 616 fun: a function which takes a node as an argument and returns a 617 new transformed node or the same node without modifications. If the function 618 returns None, then the corresponding node will be removed from the syntax tree. 619 copy: if set to True a new tree instance is constructed, otherwise the tree is 620 modified in place. 621 622 Returns: 623 The transformed tree. 624 """ 625 root = None 626 new_node = None 627 628 for node in (self.copy() if copy else self).dfs(prune=lambda n: n is not new_node): 629 parent, arg_key, index = node.parent, node.arg_key, node.index 630 new_node = fun(node, *args, **kwargs) 631 632 if not root: 633 root = new_node 634 elif new_node is not node: 635 parent.set(arg_key, new_node, index) 636 637 assert root 638 return root.assert_is(Expression)
Visits all tree nodes (excluding already transformed ones) and applies the given transformation function to each node.
Arguments:
- fun: a function which takes a node as an argument and returns a new transformed node or the same node without modifications. If the function returns None, then the corresponding node will be removed from the syntax tree.
- copy: if set to True a new tree instance is constructed, otherwise the tree is modified in place.
Returns:
The transformed tree.
646 def replace(self, expression): 647 """ 648 Swap out this expression with a new expression. 649 650 For example:: 651 652 >>> tree = Select().select("x").from_("tbl") 653 >>> tree.find(Column).replace(column("y")) 654 Column( 655 this=Identifier(this=y, quoted=False)) 656 >>> tree.sql() 657 'SELECT y FROM tbl' 658 659 Args: 660 expression: new node 661 662 Returns: 663 The new expression or expressions. 664 """ 665 parent = self.parent 666 667 if not parent or parent is expression: 668 return expression 669 670 key = self.arg_key 671 value = parent.args.get(key) 672 673 if type(expression) is list and isinstance(value, Expression): 674 # We are trying to replace an Expression with a list, so it's assumed that 675 # the intention was to really replace the parent of this expression. 676 value.parent.replace(expression) 677 else: 678 parent.set(key, expression, self.index) 679 680 if expression is not self: 681 self.parent = None 682 self.arg_key = None 683 self.index = None 684 685 return expression
Swap out this expression with a new expression.
For example::
>>> tree = Select()select("x")from_("tbl")
>>> tree.find(Column).replace(column("y"))
Column(
this=Identifier(this=y, quoted=False))
>>> tree.sql()
'SELECT y FROM tbl'
Arguments:
- expression: new node
Returns:
The new expression or expressions.
687 def pop(self: E) -> E: 688 """ 689 Remove this expression from its AST. 690 691 Returns: 692 The popped expression. 693 """ 694 self.replace(None) 695 return self
Remove this expression from its AST.
Returns:
The popped expression.
697 def assert_is(self, type_: t.Type[E]) -> E: 698 """ 699 Assert that this `Expression` is an instance of `type_`. 700 701 If it is NOT an instance of `type_`, this raises an assertion error. 702 Otherwise, this returns this expression. 703 704 Examples: 705 This is useful for type security in chained expressions: 706 707 >>> import sqlglot 708 >>> sqlglot.parse_one("SELECT x from y").assert_is(Select).select("z").sql() 709 'SELECT x, z FROM y' 710 """ 711 if not isinstance(self, type_): 712 raise AssertionError(f"{self} is not {type_}.") 713 return self
Assert that this Expression is an instance of type_.
If it is NOT an instance of type_, this raises an assertion error.
Otherwise, this returns this expression.
Examples:
This is useful for type security in chained expressions:
>>> import sqlglot >>> sqlglot.parse_one("SELECT x from y").assert_is(Select)select("z").sql() 'SELECT x, z FROM y'
715 def error_messages(self, args: t.Optional[t.Sequence] = None) -> t.List[str]: 716 """ 717 Checks if this expression is valid (e.g. all mandatory args are set). 718 719 Args: 720 args: a sequence of values that were used to instantiate a Func expression. This is used 721 to check that the provided arguments don't exceed the function argument limit. 722 723 Returns: 724 A list of error messages for all possible errors that were found. 725 """ 726 errors: t.List[str] = [] 727 728 for k in self.args: 729 if k not in self.arg_types: 730 errors.append(f"Unexpected keyword: '{k}' for {self.__class__}") 731 for k, mandatory in self.arg_types.items(): 732 v = self.args.get(k) 733 if mandatory and (v is None or (isinstance(v, list) and not v)): 734 errors.append(f"Required keyword: '{k}' missing for {self.__class__}") 735 736 if ( 737 args 738 and isinstance(self, Func) 739 and len(args) > len(self.arg_types) 740 and not self.is_var_len_args 741 ): 742 errors.append( 743 f"The number of provided arguments ({len(args)}) is greater than " 744 f"the maximum number of supported arguments ({len(self.arg_types)})" 745 ) 746 747 return errors
Checks if this expression is valid (e.g. all mandatory args are set).
Arguments:
- args: a sequence of values that were used to instantiate a Func expression. This is used to check that the provided arguments don't exceed the function argument limit.
Returns:
A list of error messages for all possible errors that were found.
749 def dump(self): 750 """ 751 Dump this Expression to a JSON-serializable dict. 752 """ 753 from sqlglot.serde import dump 754 755 return dump(self)
Dump this Expression to a JSON-serializable dict.
757 @classmethod 758 def load(cls, obj): 759 """ 760 Load a dict (as returned by `Expression.dump`) into an Expression instance. 761 """ 762 from sqlglot.serde import load 763 764 return load(obj)
Load a dict (as returned by Expression.dump) into an Expression instance.
766 def and_( 767 self, 768 *expressions: t.Optional[ExpOrStr], 769 dialect: DialectType = None, 770 copy: bool = True, 771 **opts, 772 ) -> Condition: 773 """ 774 AND this condition with one or multiple expressions. 775 776 Example: 777 >>> condition("x=1").and_("y=1").sql() 778 'x = 1 AND y = 1' 779 780 Args: 781 *expressions: the SQL code strings to parse. 782 If an `Expression` instance is passed, it will be used as-is. 783 dialect: the dialect used to parse the input expression. 784 copy: whether to copy the involved expressions (only applies to Expressions). 785 opts: other options to use to parse the input expressions. 786 787 Returns: 788 The new And condition. 789 """ 790 return and_(self, *expressions, dialect=dialect, copy=copy, **opts)
AND this condition with one or multiple expressions.
Example:
>>> condition("x=1")and_("y=1").sql() 'x = 1 AND y = 1'
Arguments:
- *expressions: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. - dialect: the dialect used to parse the input expression.
- copy: whether to copy the involved expressions (only applies to Expressions).
- opts: other options to use to parse the input expressions.
Returns:
The new And condition.
792 def or_( 793 self, 794 *expressions: t.Optional[ExpOrStr], 795 dialect: DialectType = None, 796 copy: bool = True, 797 **opts, 798 ) -> Condition: 799 """ 800 OR this condition with one or multiple expressions. 801 802 Example: 803 >>> condition("x=1").or_("y=1").sql() 804 'x = 1 OR y = 1' 805 806 Args: 807 *expressions: the SQL code strings to parse. 808 If an `Expression` instance is passed, it will be used as-is. 809 dialect: the dialect used to parse the input expression. 810 copy: whether to copy the involved expressions (only applies to Expressions). 811 opts: other options to use to parse the input expressions. 812 813 Returns: 814 The new Or condition. 815 """ 816 return or_(self, *expressions, dialect=dialect, copy=copy, **opts)
OR this condition with one or multiple expressions.
Example:
>>> condition("x=1")or_("y=1").sql() 'x = 1 OR y = 1'
Arguments:
- *expressions: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. - dialect: the dialect used to parse the input expression.
- copy: whether to copy the involved expressions (only applies to Expressions).
- opts: other options to use to parse the input expressions.
Returns:
The new Or condition.
818 def not_(self, copy: bool = True): 819 """ 820 Wrap this condition with NOT. 821 822 Example: 823 >>> condition("x=1").not_().sql() 824 'NOT x = 1' 825 826 Args: 827 copy: whether to copy this object. 828 829 Returns: 830 The new Not instance. 831 """ 832 return not_(self, copy=copy)
Wrap this condition with NOT.
Example:
>>> condition("x=1")not_().sql() 'NOT x = 1'
Arguments:
- copy: whether to copy this object.
Returns:
The new Not instance.
867 def isin( 868 self, 869 *expressions: t.Any, 870 query: t.Optional[ExpOrStr] = None, 871 unnest: t.Optional[ExpOrStr] | t.Collection[ExpOrStr] = None, 872 copy: bool = True, 873 **opts, 874 ) -> In: 875 subquery = maybe_parse(query, copy=copy, **opts) if query else None 876 if subquery and not isinstance(subquery, Subquery): 877 subquery = subquery.subquery(copy=False) 878 879 return In( 880 this=maybe_copy(self, copy), 881 expressions=[convert(e, copy=copy) for e in expressions], 882 query=subquery, 883 unnest=( 884 Unnest( 885 expressions=[ 886 maybe_parse(t.cast(ExpOrStr, e), copy=copy, **opts) 887 for e in ensure_list(unnest) 888 ] 889 ) 890 if unnest 891 else None 892 ), 893 )
Logical conditions like x AND y, or simply x
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Relationships like x = y, x > 1, x >= y.
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1021class DerivedTable(Expression): 1022 @property 1023 def selects(self) -> t.List[Expression]: 1024 return self.this.selects if isinstance(self.this, Query) else [] 1025 1026 @property 1027 def named_selects(self) -> t.List[str]: 1028 return [select.output_name for select in self.selects]
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1031class Query(Expression): 1032 def subquery(self, alias: t.Optional[ExpOrStr] = None, copy: bool = True) -> Subquery: 1033 """ 1034 Returns a `Subquery` that wraps around this query. 1035 1036 Example: 1037 >>> subquery = Select().select("x").from_("tbl").subquery() 1038 >>> Select().select("x").from_(subquery).sql() 1039 'SELECT x FROM (SELECT x FROM tbl)' 1040 1041 Args: 1042 alias: an optional alias for the subquery. 1043 copy: if `False`, modify this expression instance in-place. 1044 """ 1045 instance = maybe_copy(self, copy) 1046 if not isinstance(alias, Expression): 1047 alias = TableAlias(this=to_identifier(alias)) if alias else None 1048 1049 return Subquery(this=instance, alias=alias) 1050 1051 def limit( 1052 self: Q, expression: ExpOrStr | int, dialect: DialectType = None, copy: bool = True, **opts 1053 ) -> Q: 1054 """ 1055 Adds a LIMIT clause to this query. 1056 1057 Example: 1058 >>> select("1").union(select("1")).limit(1).sql() 1059 'SELECT 1 UNION SELECT 1 LIMIT 1' 1060 1061 Args: 1062 expression: the SQL code string to parse. 1063 This can also be an integer. 1064 If a `Limit` instance is passed, it will be used as-is. 1065 If another `Expression` instance is passed, it will be wrapped in a `Limit`. 1066 dialect: the dialect used to parse the input expression. 1067 copy: if `False`, modify this expression instance in-place. 1068 opts: other options to use to parse the input expressions. 1069 1070 Returns: 1071 A limited Select expression. 1072 """ 1073 return _apply_builder( 1074 expression=expression, 1075 instance=self, 1076 arg="limit", 1077 into=Limit, 1078 prefix="LIMIT", 1079 dialect=dialect, 1080 copy=copy, 1081 into_arg="expression", 1082 **opts, 1083 ) 1084 1085 def offset( 1086 self: Q, expression: ExpOrStr | int, dialect: DialectType = None, copy: bool = True, **opts 1087 ) -> Q: 1088 """ 1089 Set the OFFSET expression. 1090 1091 Example: 1092 >>> Select().from_("tbl").select("x").offset(10).sql() 1093 'SELECT x FROM tbl OFFSET 10' 1094 1095 Args: 1096 expression: the SQL code string to parse. 1097 This can also be an integer. 1098 If a `Offset` instance is passed, this is used as-is. 1099 If another `Expression` instance is passed, it will be wrapped in a `Offset`. 1100 dialect: the dialect used to parse the input expression. 1101 copy: if `False`, modify this expression instance in-place. 1102 opts: other options to use to parse the input expressions. 1103 1104 Returns: 1105 The modified Select expression. 1106 """ 1107 return _apply_builder( 1108 expression=expression, 1109 instance=self, 1110 arg="offset", 1111 into=Offset, 1112 prefix="OFFSET", 1113 dialect=dialect, 1114 copy=copy, 1115 into_arg="expression", 1116 **opts, 1117 ) 1118 1119 def order_by( 1120 self: Q, 1121 *expressions: t.Optional[ExpOrStr], 1122 append: bool = True, 1123 dialect: DialectType = None, 1124 copy: bool = True, 1125 **opts, 1126 ) -> Q: 1127 """ 1128 Set the ORDER BY expression. 1129 1130 Example: 1131 >>> Select().from_("tbl").select("x").order_by("x DESC").sql() 1132 'SELECT x FROM tbl ORDER BY x DESC' 1133 1134 Args: 1135 *expressions: the SQL code strings to parse. 1136 If a `Group` instance is passed, this is used as-is. 1137 If another `Expression` instance is passed, it will be wrapped in a `Order`. 1138 append: if `True`, add to any existing expressions. 1139 Otherwise, this flattens all the `Order` expression into a single expression. 1140 dialect: the dialect used to parse the input expression. 1141 copy: if `False`, modify this expression instance in-place. 1142 opts: other options to use to parse the input expressions. 1143 1144 Returns: 1145 The modified Select expression. 1146 """ 1147 return _apply_child_list_builder( 1148 *expressions, 1149 instance=self, 1150 arg="order", 1151 append=append, 1152 copy=copy, 1153 prefix="ORDER BY", 1154 into=Order, 1155 dialect=dialect, 1156 **opts, 1157 ) 1158 1159 @property 1160 def ctes(self) -> t.List[CTE]: 1161 """Returns a list of all the CTEs attached to this query.""" 1162 with_ = self.args.get("with") 1163 return with_.expressions if with_ else [] 1164 1165 @property 1166 def selects(self) -> t.List[Expression]: 1167 """Returns the query's projections.""" 1168 raise NotImplementedError("Query objects must implement `selects`") 1169 1170 @property 1171 def named_selects(self) -> t.List[str]: 1172 """Returns the output names of the query's projections.""" 1173 raise NotImplementedError("Query objects must implement `named_selects`") 1174 1175 def select( 1176 self: Q, 1177 *expressions: t.Optional[ExpOrStr], 1178 append: bool = True, 1179 dialect: DialectType = None, 1180 copy: bool = True, 1181 **opts, 1182 ) -> Q: 1183 """ 1184 Append to or set the SELECT expressions. 1185 1186 Example: 1187 >>> Select().select("x", "y").sql() 1188 'SELECT x, y' 1189 1190 Args: 1191 *expressions: the SQL code strings to parse. 1192 If an `Expression` instance is passed, it will be used as-is. 1193 append: if `True`, add to any existing expressions. 1194 Otherwise, this resets the expressions. 1195 dialect: the dialect used to parse the input expressions. 1196 copy: if `False`, modify this expression instance in-place. 1197 opts: other options to use to parse the input expressions. 1198 1199 Returns: 1200 The modified Query expression. 1201 """ 1202 raise NotImplementedError("Query objects must implement `select`") 1203 1204 def with_( 1205 self: Q, 1206 alias: ExpOrStr, 1207 as_: ExpOrStr, 1208 recursive: t.Optional[bool] = None, 1209 materialized: t.Optional[bool] = None, 1210 append: bool = True, 1211 dialect: DialectType = None, 1212 copy: bool = True, 1213 **opts, 1214 ) -> Q: 1215 """ 1216 Append to or set the common table expressions. 1217 1218 Example: 1219 >>> Select().with_("tbl2", as_="SELECT * FROM tbl").select("x").from_("tbl2").sql() 1220 'WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2' 1221 1222 Args: 1223 alias: the SQL code string to parse as the table name. 1224 If an `Expression` instance is passed, this is used as-is. 1225 as_: the SQL code string to parse as the table expression. 1226 If an `Expression` instance is passed, it will be used as-is. 1227 recursive: set the RECURSIVE part of the expression. Defaults to `False`. 1228 materialized: set the MATERIALIZED part of the expression. 1229 append: if `True`, add to any existing expressions. 1230 Otherwise, this resets the expressions. 1231 dialect: the dialect used to parse the input expression. 1232 copy: if `False`, modify this expression instance in-place. 1233 opts: other options to use to parse the input expressions. 1234 1235 Returns: 1236 The modified expression. 1237 """ 1238 return _apply_cte_builder( 1239 self, 1240 alias, 1241 as_, 1242 recursive=recursive, 1243 materialized=materialized, 1244 append=append, 1245 dialect=dialect, 1246 copy=copy, 1247 **opts, 1248 ) 1249 1250 def union( 1251 self, expression: ExpOrStr, distinct: bool = True, dialect: DialectType = None, **opts 1252 ) -> Union: 1253 """ 1254 Builds a UNION expression. 1255 1256 Example: 1257 >>> import sqlglot 1258 >>> sqlglot.parse_one("SELECT * FROM foo").union("SELECT * FROM bla").sql() 1259 'SELECT * FROM foo UNION SELECT * FROM bla' 1260 1261 Args: 1262 expression: the SQL code string. 1263 If an `Expression` instance is passed, it will be used as-is. 1264 distinct: set the DISTINCT flag if and only if this is true. 1265 dialect: the dialect used to parse the input expression. 1266 opts: other options to use to parse the input expressions. 1267 1268 Returns: 1269 The new Union expression. 1270 """ 1271 return union(left=self, right=expression, distinct=distinct, dialect=dialect, **opts) 1272 1273 def intersect( 1274 self, expression: ExpOrStr, distinct: bool = True, dialect: DialectType = None, **opts 1275 ) -> Intersect: 1276 """ 1277 Builds an INTERSECT expression. 1278 1279 Example: 1280 >>> import sqlglot 1281 >>> sqlglot.parse_one("SELECT * FROM foo").intersect("SELECT * FROM bla").sql() 1282 'SELECT * FROM foo INTERSECT SELECT * FROM bla' 1283 1284 Args: 1285 expression: the SQL code string. 1286 If an `Expression` instance is passed, it will be used as-is. 1287 distinct: set the DISTINCT flag if and only if this is true. 1288 dialect: the dialect used to parse the input expression. 1289 opts: other options to use to parse the input expressions. 1290 1291 Returns: 1292 The new Intersect expression. 1293 """ 1294 return intersect(left=self, right=expression, distinct=distinct, dialect=dialect, **opts) 1295 1296 def except_( 1297 self, expression: ExpOrStr, distinct: bool = True, dialect: DialectType = None, **opts 1298 ) -> Except: 1299 """ 1300 Builds an EXCEPT expression. 1301 1302 Example: 1303 >>> import sqlglot 1304 >>> sqlglot.parse_one("SELECT * FROM foo").except_("SELECT * FROM bla").sql() 1305 'SELECT * FROM foo EXCEPT SELECT * FROM bla' 1306 1307 Args: 1308 expression: the SQL code string. 1309 If an `Expression` instance is passed, it will be used as-is. 1310 distinct: set the DISTINCT flag if and only if this is true. 1311 dialect: the dialect used to parse the input expression. 1312 opts: other options to use to parse the input expressions. 1313 1314 Returns: 1315 The new Except expression. 1316 """ 1317 return except_(left=self, right=expression, distinct=distinct, dialect=dialect, **opts)
1032 def subquery(self, alias: t.Optional[ExpOrStr] = None, copy: bool = True) -> Subquery: 1033 """ 1034 Returns a `Subquery` that wraps around this query. 1035 1036 Example: 1037 >>> subquery = Select().select("x").from_("tbl").subquery() 1038 >>> Select().select("x").from_(subquery).sql() 1039 'SELECT x FROM (SELECT x FROM tbl)' 1040 1041 Args: 1042 alias: an optional alias for the subquery. 1043 copy: if `False`, modify this expression instance in-place. 1044 """ 1045 instance = maybe_copy(self, copy) 1046 if not isinstance(alias, Expression): 1047 alias = TableAlias(this=to_identifier(alias)) if alias else None 1048 1049 return Subquery(this=instance, alias=alias)
Returns a Subquery that wraps around this query.
Example:
Arguments:
- alias: an optional alias for the subquery.
- copy: if
False, modify this expression instance in-place.
1051 def limit( 1052 self: Q, expression: ExpOrStr | int, dialect: DialectType = None, copy: bool = True, **opts 1053 ) -> Q: 1054 """ 1055 Adds a LIMIT clause to this query. 1056 1057 Example: 1058 >>> select("1").union(select("1")).limit(1).sql() 1059 'SELECT 1 UNION SELECT 1 LIMIT 1' 1060 1061 Args: 1062 expression: the SQL code string to parse. 1063 This can also be an integer. 1064 If a `Limit` instance is passed, it will be used as-is. 1065 If another `Expression` instance is passed, it will be wrapped in a `Limit`. 1066 dialect: the dialect used to parse the input expression. 1067 copy: if `False`, modify this expression instance in-place. 1068 opts: other options to use to parse the input expressions. 1069 1070 Returns: 1071 A limited Select expression. 1072 """ 1073 return _apply_builder( 1074 expression=expression, 1075 instance=self, 1076 arg="limit", 1077 into=Limit, 1078 prefix="LIMIT", 1079 dialect=dialect, 1080 copy=copy, 1081 into_arg="expression", 1082 **opts, 1083 )
Adds a LIMIT clause to this query.
Example:
>>> select("1")union(select("1")).limit(1).sql() 'SELECT 1 UNION SELECT 1 LIMIT 1'
Arguments:
- expression: the SQL code string to parse.
This can also be an integer.
If a
Limitinstance is passed, it will be used as-is. If anotherExpressioninstance is passed, it will be wrapped in aLimit. - dialect: the dialect used to parse the input expression.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
A limited Select expression.
1085 def offset( 1086 self: Q, expression: ExpOrStr | int, dialect: DialectType = None, copy: bool = True, **opts 1087 ) -> Q: 1088 """ 1089 Set the OFFSET expression. 1090 1091 Example: 1092 >>> Select().from_("tbl").select("x").offset(10).sql() 1093 'SELECT x FROM tbl OFFSET 10' 1094 1095 Args: 1096 expression: the SQL code string to parse. 1097 This can also be an integer. 1098 If a `Offset` instance is passed, this is used as-is. 1099 If another `Expression` instance is passed, it will be wrapped in a `Offset`. 1100 dialect: the dialect used to parse the input expression. 1101 copy: if `False`, modify this expression instance in-place. 1102 opts: other options to use to parse the input expressions. 1103 1104 Returns: 1105 The modified Select expression. 1106 """ 1107 return _apply_builder( 1108 expression=expression, 1109 instance=self, 1110 arg="offset", 1111 into=Offset, 1112 prefix="OFFSET", 1113 dialect=dialect, 1114 copy=copy, 1115 into_arg="expression", 1116 **opts, 1117 )
Set the OFFSET expression.
Example:
Arguments:
- expression: the SQL code string to parse.
This can also be an integer.
If a
Offsetinstance is passed, this is used as-is. If anotherExpressioninstance is passed, it will be wrapped in aOffset. - dialect: the dialect used to parse the input expression.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Select expression.
1119 def order_by( 1120 self: Q, 1121 *expressions: t.Optional[ExpOrStr], 1122 append: bool = True, 1123 dialect: DialectType = None, 1124 copy: bool = True, 1125 **opts, 1126 ) -> Q: 1127 """ 1128 Set the ORDER BY expression. 1129 1130 Example: 1131 >>> Select().from_("tbl").select("x").order_by("x DESC").sql() 1132 'SELECT x FROM tbl ORDER BY x DESC' 1133 1134 Args: 1135 *expressions: the SQL code strings to parse. 1136 If a `Group` instance is passed, this is used as-is. 1137 If another `Expression` instance is passed, it will be wrapped in a `Order`. 1138 append: if `True`, add to any existing expressions. 1139 Otherwise, this flattens all the `Order` expression into a single expression. 1140 dialect: the dialect used to parse the input expression. 1141 copy: if `False`, modify this expression instance in-place. 1142 opts: other options to use to parse the input expressions. 1143 1144 Returns: 1145 The modified Select expression. 1146 """ 1147 return _apply_child_list_builder( 1148 *expressions, 1149 instance=self, 1150 arg="order", 1151 append=append, 1152 copy=copy, 1153 prefix="ORDER BY", 1154 into=Order, 1155 dialect=dialect, 1156 **opts, 1157 )
Set the ORDER BY expression.
Example:
Arguments:
- *expressions: the SQL code strings to parse.
If a
Groupinstance is passed, this is used as-is. If anotherExpressioninstance is passed, it will be wrapped in aOrder. - append: if
True, add to any existing expressions. Otherwise, this flattens all theOrderexpression into a single expression. - dialect: the dialect used to parse the input expression.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Select expression.
1159 @property 1160 def ctes(self) -> t.List[CTE]: 1161 """Returns a list of all the CTEs attached to this query.""" 1162 with_ = self.args.get("with") 1163 return with_.expressions if with_ else []
Returns a list of all the CTEs attached to this query.
1165 @property 1166 def selects(self) -> t.List[Expression]: 1167 """Returns the query's projections.""" 1168 raise NotImplementedError("Query objects must implement `selects`")
Returns the query's projections.
1170 @property 1171 def named_selects(self) -> t.List[str]: 1172 """Returns the output names of the query's projections.""" 1173 raise NotImplementedError("Query objects must implement `named_selects`")
Returns the output names of the query's projections.
1175 def select( 1176 self: Q, 1177 *expressions: t.Optional[ExpOrStr], 1178 append: bool = True, 1179 dialect: DialectType = None, 1180 copy: bool = True, 1181 **opts, 1182 ) -> Q: 1183 """ 1184 Append to or set the SELECT expressions. 1185 1186 Example: 1187 >>> Select().select("x", "y").sql() 1188 'SELECT x, y' 1189 1190 Args: 1191 *expressions: the SQL code strings to parse. 1192 If an `Expression` instance is passed, it will be used as-is. 1193 append: if `True`, add to any existing expressions. 1194 Otherwise, this resets the expressions. 1195 dialect: the dialect used to parse the input expressions. 1196 copy: if `False`, modify this expression instance in-place. 1197 opts: other options to use to parse the input expressions. 1198 1199 Returns: 1200 The modified Query expression. 1201 """ 1202 raise NotImplementedError("Query objects must implement `select`")
Append to or set the SELECT expressions.
Example:
>>> Select()select("x", "y").sql() 'SELECT x, y'
Arguments:
- *expressions: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. - append: if
True, add to any existing expressions. Otherwise, this resets the expressions. - dialect: the dialect used to parse the input expressions.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Query expression.
1204 def with_( 1205 self: Q, 1206 alias: ExpOrStr, 1207 as_: ExpOrStr, 1208 recursive: t.Optional[bool] = None, 1209 materialized: t.Optional[bool] = None, 1210 append: bool = True, 1211 dialect: DialectType = None, 1212 copy: bool = True, 1213 **opts, 1214 ) -> Q: 1215 """ 1216 Append to or set the common table expressions. 1217 1218 Example: 1219 >>> Select().with_("tbl2", as_="SELECT * FROM tbl").select("x").from_("tbl2").sql() 1220 'WITH tbl2 AS (SELECT * FROM tbl) SELECT x FROM tbl2' 1221 1222 Args: 1223 alias: the SQL code string to parse as the table name. 1224 If an `Expression` instance is passed, this is used as-is. 1225 as_: the SQL code string to parse as the table expression. 1226 If an `Expression` instance is passed, it will be used as-is. 1227 recursive: set the RECURSIVE part of the expression. Defaults to `False`. 1228 materialized: set the MATERIALIZED part of the expression. 1229 append: if `True`, add to any existing expressions. 1230 Otherwise, this resets the expressions. 1231 dialect: the dialect used to parse the input expression. 1232 copy: if `False`, modify this expression instance in-place. 1233 opts: other options to use to parse the input expressions. 1234 1235 Returns: 1236 The modified expression. 1237 """ 1238 return _apply_cte_builder( 1239 self, 1240 alias, 1241 as_, 1242 recursive=recursive, 1243 materialized=materialized, 1244 append=append, 1245 dialect=dialect, 1246 copy=copy, 1247 **opts, 1248 )
Append to or set the common table expressions.
Example:
Arguments:
- alias: the SQL code string to parse as the table name.
If an
Expressioninstance is passed, this is used as-is. - as_: the SQL code string to parse as the table expression.
If an
Expressioninstance is passed, it will be used as-is. - recursive: set the RECURSIVE part of the expression. Defaults to
False. - materialized: set the MATERIALIZED part of the expression.
- append: if
True, add to any existing expressions. Otherwise, this resets the expressions. - dialect: the dialect used to parse the input expression.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified expression.
1250 def union( 1251 self, expression: ExpOrStr, distinct: bool = True, dialect: DialectType = None, **opts 1252 ) -> Union: 1253 """ 1254 Builds a UNION expression. 1255 1256 Example: 1257 >>> import sqlglot 1258 >>> sqlglot.parse_one("SELECT * FROM foo").union("SELECT * FROM bla").sql() 1259 'SELECT * FROM foo UNION SELECT * FROM bla' 1260 1261 Args: 1262 expression: the SQL code string. 1263 If an `Expression` instance is passed, it will be used as-is. 1264 distinct: set the DISTINCT flag if and only if this is true. 1265 dialect: the dialect used to parse the input expression. 1266 opts: other options to use to parse the input expressions. 1267 1268 Returns: 1269 The new Union expression. 1270 """ 1271 return union(left=self, right=expression, distinct=distinct, dialect=dialect, **opts)
Builds a UNION expression.
Example:
>>> import sqlglot >>> sqlglot.parse_one("SELECT * FROM foo")union("SELECT * FROM bla").sql() 'SELECT * FROM foo UNION SELECT * FROM bla'
Arguments:
- expression: the SQL code string.
If an
Expressioninstance is passed, it will be used as-is. - distinct: set the DISTINCT flag if and only if this is true.
- dialect: the dialect used to parse the input expression.
- opts: other options to use to parse the input expressions.
Returns:
The new Union expression.
1273 def intersect( 1274 self, expression: ExpOrStr, distinct: bool = True, dialect: DialectType = None, **opts 1275 ) -> Intersect: 1276 """ 1277 Builds an INTERSECT expression. 1278 1279 Example: 1280 >>> import sqlglot 1281 >>> sqlglot.parse_one("SELECT * FROM foo").intersect("SELECT * FROM bla").sql() 1282 'SELECT * FROM foo INTERSECT SELECT * FROM bla' 1283 1284 Args: 1285 expression: the SQL code string. 1286 If an `Expression` instance is passed, it will be used as-is. 1287 distinct: set the DISTINCT flag if and only if this is true. 1288 dialect: the dialect used to parse the input expression. 1289 opts: other options to use to parse the input expressions. 1290 1291 Returns: 1292 The new Intersect expression. 1293 """ 1294 return intersect(left=self, right=expression, distinct=distinct, dialect=dialect, **opts)
Builds an INTERSECT expression.
Example:
>>> import sqlglot >>> sqlglot.parse_one("SELECT * FROM foo")intersect("SELECT * FROM bla").sql() 'SELECT * FROM foo INTERSECT SELECT * FROM bla'
Arguments:
- expression: the SQL code string.
If an
Expressioninstance is passed, it will be used as-is. - distinct: set the DISTINCT flag if and only if this is true.
- dialect: the dialect used to parse the input expression.
- opts: other options to use to parse the input expressions.
Returns:
The new Intersect expression.
1296 def except_( 1297 self, expression: ExpOrStr, distinct: bool = True, dialect: DialectType = None, **opts 1298 ) -> Except: 1299 """ 1300 Builds an EXCEPT expression. 1301 1302 Example: 1303 >>> import sqlglot 1304 >>> sqlglot.parse_one("SELECT * FROM foo").except_("SELECT * FROM bla").sql() 1305 'SELECT * FROM foo EXCEPT SELECT * FROM bla' 1306 1307 Args: 1308 expression: the SQL code string. 1309 If an `Expression` instance is passed, it will be used as-is. 1310 distinct: set the DISTINCT flag if and only if this is true. 1311 dialect: the dialect used to parse the input expression. 1312 opts: other options to use to parse the input expressions. 1313 1314 Returns: 1315 The new Except expression. 1316 """ 1317 return except_(left=self, right=expression, distinct=distinct, dialect=dialect, **opts)
Builds an EXCEPT expression.
Example:
>>> import sqlglot >>> sqlglot.parse_one("SELECT * FROM foo")except_("SELECT * FROM bla").sql() 'SELECT * FROM foo EXCEPT SELECT * FROM bla'
Arguments:
- expression: the SQL code string.
If an
Expressioninstance is passed, it will be used as-is. - distinct: set the DISTINCT flag if and only if this is true.
- dialect: the dialect used to parse the input expression.
- opts: other options to use to parse the input expressions.
Returns:
The new Except expression.
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1320class UDTF(DerivedTable): 1321 @property 1322 def selects(self) -> t.List[Expression]: 1323 alias = self.args.get("alias") 1324 return alias.columns if alias else []
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1327class Cache(Expression): 1328 arg_types = { 1329 "this": True, 1330 "lazy": False, 1331 "options": False, 1332 "expression": False, 1333 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1344class DDL(Expression): 1345 @property 1346 def ctes(self) -> t.List[CTE]: 1347 """Returns a list of all the CTEs attached to this statement.""" 1348 with_ = self.args.get("with") 1349 return with_.expressions if with_ else [] 1350 1351 @property 1352 def selects(self) -> t.List[Expression]: 1353 """If this statement contains a query (e.g. a CTAS), this returns the query's projections.""" 1354 return self.expression.selects if isinstance(self.expression, Query) else [] 1355 1356 @property 1357 def named_selects(self) -> t.List[str]: 1358 """ 1359 If this statement contains a query (e.g. a CTAS), this returns the output 1360 names of the query's projections. 1361 """ 1362 return self.expression.named_selects if isinstance(self.expression, Query) else []
1345 @property 1346 def ctes(self) -> t.List[CTE]: 1347 """Returns a list of all the CTEs attached to this statement.""" 1348 with_ = self.args.get("with") 1349 return with_.expressions if with_ else []
Returns a list of all the CTEs attached to this statement.
1351 @property 1352 def selects(self) -> t.List[Expression]: 1353 """If this statement contains a query (e.g. a CTAS), this returns the query's projections.""" 1354 return self.expression.selects if isinstance(self.expression, Query) else []
If this statement contains a query (e.g. a CTAS), this returns the query's projections.
1356 @property 1357 def named_selects(self) -> t.List[str]: 1358 """ 1359 If this statement contains a query (e.g. a CTAS), this returns the output 1360 names of the query's projections. 1361 """ 1362 return self.expression.named_selects if isinstance(self.expression, Query) else []
If this statement contains a query (e.g. a CTAS), this returns the output names of the query's projections.
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1365class DML(Expression): 1366 def returning( 1367 self, 1368 expression: ExpOrStr, 1369 dialect: DialectType = None, 1370 copy: bool = True, 1371 **opts, 1372 ) -> DML: 1373 """ 1374 Set the RETURNING expression. Not supported by all dialects. 1375 1376 Example: 1377 >>> delete("tbl").returning("*", dialect="postgres").sql() 1378 'DELETE FROM tbl RETURNING *' 1379 1380 Args: 1381 expression: the SQL code strings to parse. 1382 If an `Expression` instance is passed, it will be used as-is. 1383 dialect: the dialect used to parse the input expressions. 1384 copy: if `False`, modify this expression instance in-place. 1385 opts: other options to use to parse the input expressions. 1386 1387 Returns: 1388 Delete: the modified expression. 1389 """ 1390 return _apply_builder( 1391 expression=expression, 1392 instance=self, 1393 arg="returning", 1394 prefix="RETURNING", 1395 dialect=dialect, 1396 copy=copy, 1397 into=Returning, 1398 **opts, 1399 )
1366 def returning( 1367 self, 1368 expression: ExpOrStr, 1369 dialect: DialectType = None, 1370 copy: bool = True, 1371 **opts, 1372 ) -> DML: 1373 """ 1374 Set the RETURNING expression. Not supported by all dialects. 1375 1376 Example: 1377 >>> delete("tbl").returning("*", dialect="postgres").sql() 1378 'DELETE FROM tbl RETURNING *' 1379 1380 Args: 1381 expression: the SQL code strings to parse. 1382 If an `Expression` instance is passed, it will be used as-is. 1383 dialect: the dialect used to parse the input expressions. 1384 copy: if `False`, modify this expression instance in-place. 1385 opts: other options to use to parse the input expressions. 1386 1387 Returns: 1388 Delete: the modified expression. 1389 """ 1390 return _apply_builder( 1391 expression=expression, 1392 instance=self, 1393 arg="returning", 1394 prefix="RETURNING", 1395 dialect=dialect, 1396 copy=copy, 1397 into=Returning, 1398 **opts, 1399 )
Set the RETURNING expression. Not supported by all dialects.
Example:
>>> delete("tbl").returning("*", dialect="postgres").sql() 'DELETE FROM tbl RETURNING *'
Arguments:
- expression: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. - dialect: the dialect used to parse the input expressions.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
Delete: the modified expression.
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1402class Create(DDL): 1403 arg_types = { 1404 "with": False, 1405 "this": True, 1406 "kind": True, 1407 "expression": False, 1408 "exists": False, 1409 "properties": False, 1410 "replace": False, 1411 "refresh": False, 1412 "unique": False, 1413 "indexes": False, 1414 "no_schema_binding": False, 1415 "begin": False, 1416 "end": False, 1417 "clone": False, 1418 "concurrently": False, 1419 "clustered": False, 1420 } 1421 1422 @property 1423 def kind(self) -> t.Optional[str]: 1424 kind = self.args.get("kind") 1425 return kind and kind.upper()
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1428class SequenceProperties(Expression): 1429 arg_types = { 1430 "increment": False, 1431 "minvalue": False, 1432 "maxvalue": False, 1433 "cache": False, 1434 "start": False, 1435 "owned": False, 1436 "options": False, 1437 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1440class TruncateTable(Expression): 1441 arg_types = { 1442 "expressions": True, 1443 "is_database": False, 1444 "exists": False, 1445 "only": False, 1446 "cluster": False, 1447 "identity": False, 1448 "option": False, 1449 "partition": False, 1450 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1460class Describe(Expression): 1461 arg_types = { 1462 "this": True, 1463 "style": False, 1464 "kind": False, 1465 "expressions": False, 1466 "partition": False, 1467 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1499class SetItem(Expression): 1500 arg_types = { 1501 "this": False, 1502 "expressions": False, 1503 "kind": False, 1504 "collate": False, # MySQL SET NAMES statement 1505 "global": False, 1506 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1509class Show(Expression): 1510 arg_types = { 1511 "this": True, 1512 "history": False, 1513 "terse": False, 1514 "target": False, 1515 "offset": False, 1516 "starts_with": False, 1517 "limit": False, 1518 "from": False, 1519 "like": False, 1520 "where": False, 1521 "db": False, 1522 "scope": False, 1523 "scope_kind": False, 1524 "full": False, 1525 "mutex": False, 1526 "query": False, 1527 "channel": False, 1528 "global": False, 1529 "log": False, 1530 "position": False, 1531 "types": False, 1532 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1535class UserDefinedFunction(Expression): 1536 arg_types = {"this": True, "expressions": False, "wrapped": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1543class With(Expression): 1544 arg_types = {"expressions": True, "recursive": False} 1545 1546 @property 1547 def recursive(self) -> bool: 1548 return bool(self.args.get("recursive"))
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1557class CTE(DerivedTable): 1558 arg_types = { 1559 "this": True, 1560 "alias": True, 1561 "scalar": False, 1562 "materialized": False, 1563 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1570class TableAlias(Expression): 1571 arg_types = {"this": False, "columns": False} 1572 1573 @property 1574 def columns(self): 1575 return self.args.get("columns") or []
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1598class Column(Condition): 1599 arg_types = {"this": True, "table": False, "db": False, "catalog": False, "join_mark": False} 1600 1601 @property 1602 def table(self) -> str: 1603 return self.text("table") 1604 1605 @property 1606 def db(self) -> str: 1607 return self.text("db") 1608 1609 @property 1610 def catalog(self) -> str: 1611 return self.text("catalog") 1612 1613 @property 1614 def output_name(self) -> str: 1615 return self.name 1616 1617 @property 1618 def parts(self) -> t.List[Identifier]: 1619 """Return the parts of a column in order catalog, db, table, name.""" 1620 return [ 1621 t.cast(Identifier, self.args[part]) 1622 for part in ("catalog", "db", "table", "this") 1623 if self.args.get(part) 1624 ] 1625 1626 def to_dot(self) -> Dot | Identifier: 1627 """Converts the column into a dot expression.""" 1628 parts = self.parts 1629 parent = self.parent 1630 1631 while parent: 1632 if isinstance(parent, Dot): 1633 parts.append(parent.expression) 1634 parent = parent.parent 1635 1636 return Dot.build(deepcopy(parts)) if len(parts) > 1 else parts[0]
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
1617 @property 1618 def parts(self) -> t.List[Identifier]: 1619 """Return the parts of a column in order catalog, db, table, name.""" 1620 return [ 1621 t.cast(Identifier, self.args[part]) 1622 for part in ("catalog", "db", "table", "this") 1623 if self.args.get(part) 1624 ]
Return the parts of a column in order catalog, db, table, name.
1626 def to_dot(self) -> Dot | Identifier: 1627 """Converts the column into a dot expression.""" 1628 parts = self.parts 1629 parent = self.parent 1630 1631 while parent: 1632 if isinstance(parent, Dot): 1633 parts.append(parent.expression) 1634 parent = parent.parent 1635 1636 return Dot.build(deepcopy(parts)) if len(parts) > 1 else parts[0]
Converts the column into a dot expression.
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1643class ColumnDef(Expression): 1644 arg_types = { 1645 "this": True, 1646 "kind": False, 1647 "constraints": False, 1648 "exists": False, 1649 "position": False, 1650 } 1651 1652 @property 1653 def constraints(self) -> t.List[ColumnConstraint]: 1654 return self.args.get("constraints") or [] 1655 1656 @property 1657 def kind(self) -> t.Optional[DataType]: 1658 return self.args.get("kind")
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1661class AlterColumn(Expression): 1662 arg_types = { 1663 "this": True, 1664 "dtype": False, 1665 "collate": False, 1666 "using": False, 1667 "default": False, 1668 "drop": False, 1669 "comment": False, 1670 "allow_null": False, 1671 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1679class AlterSortKey(Expression): 1680 arg_types = {"this": False, "expressions": False, "compound": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1683class AlterSet(Expression): 1684 arg_types = { 1685 "expressions": False, 1686 "option": False, 1687 "tablespace": False, 1688 "access_method": False, 1689 "file_format": False, 1690 "copy_options": False, 1691 "tag": False, 1692 "location": False, 1693 "serde": False, 1694 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1709class Comment(Expression): 1710 arg_types = { 1711 "this": True, 1712 "kind": True, 1713 "expression": True, 1714 "exists": False, 1715 "materialized": False, 1716 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1719class Comprehension(Expression): 1720 arg_types = {"this": True, "expression": True, "iterator": True, "condition": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1724class MergeTreeTTLAction(Expression): 1725 arg_types = { 1726 "this": True, 1727 "delete": False, 1728 "recompress": False, 1729 "to_disk": False, 1730 "to_volume": False, 1731 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1735class MergeTreeTTL(Expression): 1736 arg_types = { 1737 "expressions": True, 1738 "where": False, 1739 "group": False, 1740 "aggregates": False, 1741 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1745class IndexConstraintOption(Expression): 1746 arg_types = { 1747 "key_block_size": False, 1748 "using": False, 1749 "parser": False, 1750 "comment": False, 1751 "visible": False, 1752 "engine_attr": False, 1753 "secondary_engine_attr": False, 1754 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1757class ColumnConstraint(Expression): 1758 arg_types = {"this": False, "kind": True} 1759 1760 @property 1761 def kind(self) -> ColumnConstraintKind: 1762 return self.args["kind"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1773class PeriodForSystemTimeConstraint(ColumnConstraintKind): 1774 arg_types = {"this": True, "expression": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1785class CheckColumnConstraint(ColumnConstraintKind): 1786 arg_types = {"this": True, "enforced": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1830class GeneratedAsIdentityColumnConstraint(ColumnConstraintKind): 1831 # this: True -> ALWAYS, this: False -> BY DEFAULT 1832 arg_types = { 1833 "this": False, 1834 "expression": False, 1835 "on_null": False, 1836 "start": False, 1837 "increment": False, 1838 "minvalue": False, 1839 "maxvalue": False, 1840 "cycle": False, 1841 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1844class GeneratedAsRowColumnConstraint(ColumnConstraintKind): 1845 arg_types = {"start": False, "hidden": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1850class IndexColumnConstraint(ColumnConstraintKind): 1851 arg_types = { 1852 "this": False, 1853 "expressions": False, 1854 "kind": False, 1855 "index_type": False, 1856 "options": False, 1857 "expression": False, # Clickhouse 1858 "granularity": False, 1859 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1875class MaskingPolicyColumnConstraint(ColumnConstraintKind): 1876 arg_types = {"this": True, "expressions": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1906class UniqueColumnConstraint(ColumnConstraintKind): 1907 arg_types = {"this": False, "index_type": False, "on_conflict": False, "nulls": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1925class ComputedColumnConstraint(ColumnConstraintKind): 1926 arg_types = {"this": True, "persisted": False, "not_null": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
1933class Delete(DML): 1934 arg_types = { 1935 "with": False, 1936 "this": False, 1937 "using": False, 1938 "where": False, 1939 "returning": False, 1940 "limit": False, 1941 "tables": False, # Multiple-Table Syntax (MySQL) 1942 } 1943 1944 def delete( 1945 self, 1946 table: ExpOrStr, 1947 dialect: DialectType = None, 1948 copy: bool = True, 1949 **opts, 1950 ) -> Delete: 1951 """ 1952 Create a DELETE expression or replace the table on an existing DELETE expression. 1953 1954 Example: 1955 >>> delete("tbl").sql() 1956 'DELETE FROM tbl' 1957 1958 Args: 1959 table: the table from which to delete. 1960 dialect: the dialect used to parse the input expression. 1961 copy: if `False`, modify this expression instance in-place. 1962 opts: other options to use to parse the input expressions. 1963 1964 Returns: 1965 Delete: the modified expression. 1966 """ 1967 return _apply_builder( 1968 expression=table, 1969 instance=self, 1970 arg="this", 1971 dialect=dialect, 1972 into=Table, 1973 copy=copy, 1974 **opts, 1975 ) 1976 1977 def where( 1978 self, 1979 *expressions: t.Optional[ExpOrStr], 1980 append: bool = True, 1981 dialect: DialectType = None, 1982 copy: bool = True, 1983 **opts, 1984 ) -> Delete: 1985 """ 1986 Append to or set the WHERE expressions. 1987 1988 Example: 1989 >>> delete("tbl").where("x = 'a' OR x < 'b'").sql() 1990 "DELETE FROM tbl WHERE x = 'a' OR x < 'b'" 1991 1992 Args: 1993 *expressions: the SQL code strings to parse. 1994 If an `Expression` instance is passed, it will be used as-is. 1995 Multiple expressions are combined with an AND operator. 1996 append: if `True`, AND the new expressions to any existing expression. 1997 Otherwise, this resets the expression. 1998 dialect: the dialect used to parse the input expressions. 1999 copy: if `False`, modify this expression instance in-place. 2000 opts: other options to use to parse the input expressions. 2001 2002 Returns: 2003 Delete: the modified expression. 2004 """ 2005 return _apply_conjunction_builder( 2006 *expressions, 2007 instance=self, 2008 arg="where", 2009 append=append, 2010 into=Where, 2011 dialect=dialect, 2012 copy=copy, 2013 **opts, 2014 )
1944 def delete( 1945 self, 1946 table: ExpOrStr, 1947 dialect: DialectType = None, 1948 copy: bool = True, 1949 **opts, 1950 ) -> Delete: 1951 """ 1952 Create a DELETE expression or replace the table on an existing DELETE expression. 1953 1954 Example: 1955 >>> delete("tbl").sql() 1956 'DELETE FROM tbl' 1957 1958 Args: 1959 table: the table from which to delete. 1960 dialect: the dialect used to parse the input expression. 1961 copy: if `False`, modify this expression instance in-place. 1962 opts: other options to use to parse the input expressions. 1963 1964 Returns: 1965 Delete: the modified expression. 1966 """ 1967 return _apply_builder( 1968 expression=table, 1969 instance=self, 1970 arg="this", 1971 dialect=dialect, 1972 into=Table, 1973 copy=copy, 1974 **opts, 1975 )
Create a DELETE expression or replace the table on an existing DELETE expression.
Example:
>>> delete("tbl").sql() 'DELETE FROM tbl'
Arguments:
- table: the table from which to delete.
- dialect: the dialect used to parse the input expression.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
Delete: the modified expression.
1977 def where( 1978 self, 1979 *expressions: t.Optional[ExpOrStr], 1980 append: bool = True, 1981 dialect: DialectType = None, 1982 copy: bool = True, 1983 **opts, 1984 ) -> Delete: 1985 """ 1986 Append to or set the WHERE expressions. 1987 1988 Example: 1989 >>> delete("tbl").where("x = 'a' OR x < 'b'").sql() 1990 "DELETE FROM tbl WHERE x = 'a' OR x < 'b'" 1991 1992 Args: 1993 *expressions: the SQL code strings to parse. 1994 If an `Expression` instance is passed, it will be used as-is. 1995 Multiple expressions are combined with an AND operator. 1996 append: if `True`, AND the new expressions to any existing expression. 1997 Otherwise, this resets the expression. 1998 dialect: the dialect used to parse the input expressions. 1999 copy: if `False`, modify this expression instance in-place. 2000 opts: other options to use to parse the input expressions. 2001 2002 Returns: 2003 Delete: the modified expression. 2004 """ 2005 return _apply_conjunction_builder( 2006 *expressions, 2007 instance=self, 2008 arg="where", 2009 append=append, 2010 into=Where, 2011 dialect=dialect, 2012 copy=copy, 2013 **opts, 2014 )
Append to or set the WHERE expressions.
Example:
>>> delete("tbl").where("x = 'a' OR x < 'b'").sql() "DELETE FROM tbl WHERE x = 'a' OR x < 'b'"
Arguments:
- *expressions: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. Multiple expressions are combined with an AND operator. - append: if
True, AND the new expressions to any existing expression. Otherwise, this resets the expression. - dialect: the dialect used to parse the input expressions.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
Delete: the modified expression.
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2017class Drop(Expression): 2018 arg_types = { 2019 "this": False, 2020 "kind": False, 2021 "expressions": False, 2022 "exists": False, 2023 "temporary": False, 2024 "materialized": False, 2025 "cascade": False, 2026 "constraints": False, 2027 "purge": False, 2028 "cluster": False, 2029 "concurrently": False, 2030 } 2031 2032 @property 2033 def kind(self) -> t.Optional[str]: 2034 kind = self.args.get("kind") 2035 return kind and kind.upper()
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2046class Changes(Expression): 2047 arg_types = {"information": True, "at_before": False, "end": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2055class CopyParameter(Expression): 2056 arg_types = {"this": True, "expression": False, "expressions": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2059class Copy(DML): 2060 arg_types = { 2061 "this": True, 2062 "kind": True, 2063 "files": True, 2064 "credentials": False, 2065 "format": False, 2066 "params": False, 2067 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2070class Credentials(Expression): 2071 arg_types = { 2072 "credentials": False, 2073 "encryption": False, 2074 "storage": False, 2075 "iam_role": False, 2076 "region": False, 2077 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2084class Directory(Expression): 2085 # https://spark.apache.org/docs/3.0.0-preview/sql-ref-syntax-dml-insert-overwrite-directory-hive.html 2086 arg_types = {"this": True, "local": False, "row_format": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2089class ForeignKey(Expression): 2090 arg_types = { 2091 "expressions": True, 2092 "reference": False, 2093 "delete": False, 2094 "update": False, 2095 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2112class From(Expression): 2113 @property 2114 def name(self) -> str: 2115 return self.this.name 2116 2117 @property 2118 def alias_or_name(self) -> str: 2119 return self.this.alias_or_name
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2134class Identifier(Expression): 2135 arg_types = {"this": True, "quoted": False, "global": False, "temporary": False} 2136 2137 @property 2138 def quoted(self) -> bool: 2139 return bool(self.args.get("quoted")) 2140 2141 @property 2142 def hashable_args(self) -> t.Any: 2143 return (self.this, self.quoted) 2144 2145 @property 2146 def output_name(self) -> str: 2147 return self.name
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2155class Index(Expression): 2156 arg_types = { 2157 "this": False, 2158 "table": False, 2159 "unique": False, 2160 "primary": False, 2161 "amp": False, # teradata 2162 "params": False, 2163 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2166class IndexParameters(Expression): 2167 arg_types = { 2168 "using": False, 2169 "include": False, 2170 "columns": False, 2171 "with_storage": False, 2172 "partition_by": False, 2173 "tablespace": False, 2174 "where": False, 2175 "on": False, 2176 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2179class Insert(DDL, DML): 2180 arg_types = { 2181 "hint": False, 2182 "with": False, 2183 "is_function": False, 2184 "this": False, 2185 "expression": False, 2186 "conflict": False, 2187 "returning": False, 2188 "overwrite": False, 2189 "exists": False, 2190 "alternative": False, 2191 "where": False, 2192 "ignore": False, 2193 "by_name": False, 2194 "stored": False, 2195 "partition": False, 2196 "settings": False, 2197 "source": False, 2198 } 2199 2200 def with_( 2201 self, 2202 alias: ExpOrStr, 2203 as_: ExpOrStr, 2204 recursive: t.Optional[bool] = None, 2205 materialized: t.Optional[bool] = None, 2206 append: bool = True, 2207 dialect: DialectType = None, 2208 copy: bool = True, 2209 **opts, 2210 ) -> Insert: 2211 """ 2212 Append to or set the common table expressions. 2213 2214 Example: 2215 >>> insert("SELECT x FROM cte", "t").with_("cte", as_="SELECT * FROM tbl").sql() 2216 'WITH cte AS (SELECT * FROM tbl) INSERT INTO t SELECT x FROM cte' 2217 2218 Args: 2219 alias: the SQL code string to parse as the table name. 2220 If an `Expression` instance is passed, this is used as-is. 2221 as_: the SQL code string to parse as the table expression. 2222 If an `Expression` instance is passed, it will be used as-is. 2223 recursive: set the RECURSIVE part of the expression. Defaults to `False`. 2224 materialized: set the MATERIALIZED part of the expression. 2225 append: if `True`, add to any existing expressions. 2226 Otherwise, this resets the expressions. 2227 dialect: the dialect used to parse the input expression. 2228 copy: if `False`, modify this expression instance in-place. 2229 opts: other options to use to parse the input expressions. 2230 2231 Returns: 2232 The modified expression. 2233 """ 2234 return _apply_cte_builder( 2235 self, 2236 alias, 2237 as_, 2238 recursive=recursive, 2239 materialized=materialized, 2240 append=append, 2241 dialect=dialect, 2242 copy=copy, 2243 **opts, 2244 )
2200 def with_( 2201 self, 2202 alias: ExpOrStr, 2203 as_: ExpOrStr, 2204 recursive: t.Optional[bool] = None, 2205 materialized: t.Optional[bool] = None, 2206 append: bool = True, 2207 dialect: DialectType = None, 2208 copy: bool = True, 2209 **opts, 2210 ) -> Insert: 2211 """ 2212 Append to or set the common table expressions. 2213 2214 Example: 2215 >>> insert("SELECT x FROM cte", "t").with_("cte", as_="SELECT * FROM tbl").sql() 2216 'WITH cte AS (SELECT * FROM tbl) INSERT INTO t SELECT x FROM cte' 2217 2218 Args: 2219 alias: the SQL code string to parse as the table name. 2220 If an `Expression` instance is passed, this is used as-is. 2221 as_: the SQL code string to parse as the table expression. 2222 If an `Expression` instance is passed, it will be used as-is. 2223 recursive: set the RECURSIVE part of the expression. Defaults to `False`. 2224 materialized: set the MATERIALIZED part of the expression. 2225 append: if `True`, add to any existing expressions. 2226 Otherwise, this resets the expressions. 2227 dialect: the dialect used to parse the input expression. 2228 copy: if `False`, modify this expression instance in-place. 2229 opts: other options to use to parse the input expressions. 2230 2231 Returns: 2232 The modified expression. 2233 """ 2234 return _apply_cte_builder( 2235 self, 2236 alias, 2237 as_, 2238 recursive=recursive, 2239 materialized=materialized, 2240 append=append, 2241 dialect=dialect, 2242 copy=copy, 2243 **opts, 2244 )
Append to or set the common table expressions.
Example:
>>> insert("SELECT x FROM cte", "t").with_("cte", as_="SELECT * FROM tbl").sql() 'WITH cte AS (SELECT * FROM tbl) INSERT INTO t SELECT x FROM cte'
Arguments:
- alias: the SQL code string to parse as the table name.
If an
Expressioninstance is passed, this is used as-is. - as_: the SQL code string to parse as the table expression.
If an
Expressioninstance is passed, it will be used as-is. - recursive: set the RECURSIVE part of the expression. Defaults to
False. - materialized: set the MATERIALIZED part of the expression.
- append: if
True, add to any existing expressions. Otherwise, this resets the expressions. - dialect: the dialect used to parse the input expression.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified expression.
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2247class ConditionalInsert(Expression): 2248 arg_types = {"this": True, "expression": False, "else_": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2251class MultitableInserts(Expression): 2252 arg_types = {"expressions": True, "kind": True, "source": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2255class OnConflict(Expression): 2256 arg_types = { 2257 "duplicate": False, 2258 "expressions": False, 2259 "action": False, 2260 "conflict_keys": False, 2261 "constraint": False, 2262 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2283class LoadData(Expression): 2284 arg_types = { 2285 "this": True, 2286 "local": False, 2287 "overwrite": False, 2288 "inpath": True, 2289 "partition": False, 2290 "input_format": False, 2291 "serde": False, 2292 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2308class Fetch(Expression): 2309 arg_types = { 2310 "direction": False, 2311 "count": False, 2312 "percent": False, 2313 "with_ties": False, 2314 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2317class Group(Expression): 2318 arg_types = { 2319 "expressions": False, 2320 "grouping_sets": False, 2321 "cube": False, 2322 "rollup": False, 2323 "totals": False, 2324 "all": False, 2325 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2344class Limit(Expression): 2345 arg_types = {"this": False, "expression": True, "offset": False, "expressions": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2348class Literal(Condition): 2349 arg_types = {"this": True, "is_string": True} 2350 2351 @property 2352 def hashable_args(self) -> t.Any: 2353 return (self.this, self.args.get("is_string")) 2354 2355 @classmethod 2356 def number(cls, number) -> Literal: 2357 return cls(this=str(number), is_string=False) 2358 2359 @classmethod 2360 def string(cls, string) -> Literal: 2361 return cls(this=str(string), is_string=True) 2362 2363 @property 2364 def output_name(self) -> str: 2365 return self.name 2366 2367 def to_py(self) -> int | str | Decimal: 2368 if self.is_number: 2369 try: 2370 return int(self.this) 2371 except ValueError: 2372 return Decimal(self.this) 2373 return self.this
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
2367 def to_py(self) -> int | str | Decimal: 2368 if self.is_number: 2369 try: 2370 return int(self.this) 2371 except ValueError: 2372 return Decimal(self.this) 2373 return self.this
Returns a Python object equivalent of the SQL node.
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- this
- expression
- expressions
- text
- is_string
- is_number
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2376class Join(Expression): 2377 arg_types = { 2378 "this": True, 2379 "on": False, 2380 "side": False, 2381 "kind": False, 2382 "using": False, 2383 "method": False, 2384 "global": False, 2385 "hint": False, 2386 "match_condition": False, # Snowflake 2387 } 2388 2389 @property 2390 def method(self) -> str: 2391 return self.text("method").upper() 2392 2393 @property 2394 def kind(self) -> str: 2395 return self.text("kind").upper() 2396 2397 @property 2398 def side(self) -> str: 2399 return self.text("side").upper() 2400 2401 @property 2402 def hint(self) -> str: 2403 return self.text("hint").upper() 2404 2405 @property 2406 def alias_or_name(self) -> str: 2407 return self.this.alias_or_name 2408 2409 def on( 2410 self, 2411 *expressions: t.Optional[ExpOrStr], 2412 append: bool = True, 2413 dialect: DialectType = None, 2414 copy: bool = True, 2415 **opts, 2416 ) -> Join: 2417 """ 2418 Append to or set the ON expressions. 2419 2420 Example: 2421 >>> import sqlglot 2422 >>> sqlglot.parse_one("JOIN x", into=Join).on("y = 1").sql() 2423 'JOIN x ON y = 1' 2424 2425 Args: 2426 *expressions: the SQL code strings to parse. 2427 If an `Expression` instance is passed, it will be used as-is. 2428 Multiple expressions are combined with an AND operator. 2429 append: if `True`, AND the new expressions to any existing expression. 2430 Otherwise, this resets the expression. 2431 dialect: the dialect used to parse the input expressions. 2432 copy: if `False`, modify this expression instance in-place. 2433 opts: other options to use to parse the input expressions. 2434 2435 Returns: 2436 The modified Join expression. 2437 """ 2438 join = _apply_conjunction_builder( 2439 *expressions, 2440 instance=self, 2441 arg="on", 2442 append=append, 2443 dialect=dialect, 2444 copy=copy, 2445 **opts, 2446 ) 2447 2448 if join.kind == "CROSS": 2449 join.set("kind", None) 2450 2451 return join 2452 2453 def using( 2454 self, 2455 *expressions: t.Optional[ExpOrStr], 2456 append: bool = True, 2457 dialect: DialectType = None, 2458 copy: bool = True, 2459 **opts, 2460 ) -> Join: 2461 """ 2462 Append to or set the USING expressions. 2463 2464 Example: 2465 >>> import sqlglot 2466 >>> sqlglot.parse_one("JOIN x", into=Join).using("foo", "bla").sql() 2467 'JOIN x USING (foo, bla)' 2468 2469 Args: 2470 *expressions: the SQL code strings to parse. 2471 If an `Expression` instance is passed, it will be used as-is. 2472 append: if `True`, concatenate the new expressions to the existing "using" list. 2473 Otherwise, this resets the expression. 2474 dialect: the dialect used to parse the input expressions. 2475 copy: if `False`, modify this expression instance in-place. 2476 opts: other options to use to parse the input expressions. 2477 2478 Returns: 2479 The modified Join expression. 2480 """ 2481 join = _apply_list_builder( 2482 *expressions, 2483 instance=self, 2484 arg="using", 2485 append=append, 2486 dialect=dialect, 2487 copy=copy, 2488 **opts, 2489 ) 2490 2491 if join.kind == "CROSS": 2492 join.set("kind", None) 2493 2494 return join
2409 def on( 2410 self, 2411 *expressions: t.Optional[ExpOrStr], 2412 append: bool = True, 2413 dialect: DialectType = None, 2414 copy: bool = True, 2415 **opts, 2416 ) -> Join: 2417 """ 2418 Append to or set the ON expressions. 2419 2420 Example: 2421 >>> import sqlglot 2422 >>> sqlglot.parse_one("JOIN x", into=Join).on("y = 1").sql() 2423 'JOIN x ON y = 1' 2424 2425 Args: 2426 *expressions: the SQL code strings to parse. 2427 If an `Expression` instance is passed, it will be used as-is. 2428 Multiple expressions are combined with an AND operator. 2429 append: if `True`, AND the new expressions to any existing expression. 2430 Otherwise, this resets the expression. 2431 dialect: the dialect used to parse the input expressions. 2432 copy: if `False`, modify this expression instance in-place. 2433 opts: other options to use to parse the input expressions. 2434 2435 Returns: 2436 The modified Join expression. 2437 """ 2438 join = _apply_conjunction_builder( 2439 *expressions, 2440 instance=self, 2441 arg="on", 2442 append=append, 2443 dialect=dialect, 2444 copy=copy, 2445 **opts, 2446 ) 2447 2448 if join.kind == "CROSS": 2449 join.set("kind", None) 2450 2451 return join
Append to or set the ON expressions.
Example:
>>> import sqlglot >>> sqlglot.parse_one("JOIN x", into=Join).on("y = 1").sql() 'JOIN x ON y = 1'
Arguments:
- *expressions: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. Multiple expressions are combined with an AND operator. - append: if
True, AND the new expressions to any existing expression. Otherwise, this resets the expression. - dialect: the dialect used to parse the input expressions.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Join expression.
2453 def using( 2454 self, 2455 *expressions: t.Optional[ExpOrStr], 2456 append: bool = True, 2457 dialect: DialectType = None, 2458 copy: bool = True, 2459 **opts, 2460 ) -> Join: 2461 """ 2462 Append to or set the USING expressions. 2463 2464 Example: 2465 >>> import sqlglot 2466 >>> sqlglot.parse_one("JOIN x", into=Join).using("foo", "bla").sql() 2467 'JOIN x USING (foo, bla)' 2468 2469 Args: 2470 *expressions: the SQL code strings to parse. 2471 If an `Expression` instance is passed, it will be used as-is. 2472 append: if `True`, concatenate the new expressions to the existing "using" list. 2473 Otherwise, this resets the expression. 2474 dialect: the dialect used to parse the input expressions. 2475 copy: if `False`, modify this expression instance in-place. 2476 opts: other options to use to parse the input expressions. 2477 2478 Returns: 2479 The modified Join expression. 2480 """ 2481 join = _apply_list_builder( 2482 *expressions, 2483 instance=self, 2484 arg="using", 2485 append=append, 2486 dialect=dialect, 2487 copy=copy, 2488 **opts, 2489 ) 2490 2491 if join.kind == "CROSS": 2492 join.set("kind", None) 2493 2494 return join
Append to or set the USING expressions.
Example:
>>> import sqlglot >>> sqlglot.parse_one("JOIN x", into=Join).using("foo", "bla").sql() 'JOIN x USING (foo, bla)'
Arguments:
- *expressions: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. - append: if
True, concatenate the new expressions to the existing "using" list. Otherwise, this resets the expression. - dialect: the dialect used to parse the input expressions.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Join expression.
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2497class Lateral(UDTF): 2498 arg_types = { 2499 "this": True, 2500 "view": False, 2501 "outer": False, 2502 "alias": False, 2503 "cross_apply": False, # True -> CROSS APPLY, False -> OUTER APPLY 2504 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2507class MatchRecognizeMeasure(Expression): 2508 arg_types = { 2509 "this": True, 2510 "window_frame": False, 2511 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2514class MatchRecognize(Expression): 2515 arg_types = { 2516 "partition_by": False, 2517 "order": False, 2518 "measures": False, 2519 "rows": False, 2520 "after": False, 2521 "pattern": False, 2522 "define": False, 2523 "alias": False, 2524 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2533class Offset(Expression): 2534 arg_types = {"this": False, "expression": True, "expressions": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2537class Order(Expression): 2538 arg_types = {"this": False, "expressions": True, "siblings": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2542class WithFill(Expression): 2543 arg_types = { 2544 "from": False, 2545 "to": False, 2546 "step": False, 2547 "interpolate": False, 2548 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2565class Ordered(Expression): 2566 arg_types = {"this": True, "desc": False, "nulls_first": True, "with_fill": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2594class BlockCompressionProperty(Property): 2595 arg_types = { 2596 "autotemp": False, 2597 "always": False, 2598 "default": False, 2599 "manual": False, 2600 "never": False, 2601 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2620class DataBlocksizeProperty(Property): 2621 arg_types = { 2622 "size": False, 2623 "units": False, 2624 "minimum": False, 2625 "maximum": False, 2626 "default": False, 2627 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2630class DataDeletionProperty(Property): 2631 arg_types = {"on": True, "filter_col": False, "retention_period": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2644class DistributedByProperty(Property): 2645 arg_types = {"expressions": False, "kind": True, "buckets": False, "order": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2708class IsolatedLoadingProperty(Property): 2709 arg_types = {"no": False, "concurrent": False, "target": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2712class JournalProperty(Property): 2713 arg_types = { 2714 "no": False, 2715 "dual": False, 2716 "before": False, 2717 "local": False, 2718 "after": False, 2719 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2727class ClusteredByProperty(Property): 2728 arg_types = {"expressions": True, "sorted_by": False, "buckets": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2770class LockingProperty(Property): 2771 arg_types = { 2772 "this": False, 2773 "kind": True, 2774 "for_or_in": False, 2775 "lock_type": True, 2776 "override": False, 2777 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2788class MergeBlockRatioProperty(Property): 2789 arg_types = {"this": False, "no": False, "default": False, "percent": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2809class PartitionBoundSpec(Expression): 2810 # this -> IN / MODULUS, expression -> REMAINDER, from_expressions -> FROM (...), to_expressions -> TO (...) 2811 arg_types = { 2812 "this": False, 2813 "expression": False, 2814 "from_expressions": False, 2815 "to_expressions": False, 2816 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2819class PartitionedOfProperty(Property): 2820 # this -> parent_table (schema), expression -> FOR VALUES ... / DEFAULT 2821 arg_types = {"this": True, "expression": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2832class ReturnsProperty(Property): 2833 arg_types = {"this": False, "is_table": False, "table": False, "null": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2844class RowFormatDelimitedProperty(Property): 2845 # https://cwiki.apache.org/confluence/display/hive/languagemanual+dml 2846 arg_types = { 2847 "fields": False, 2848 "escaped": False, 2849 "collection_items": False, 2850 "map_keys": False, 2851 "lines": False, 2852 "null": False, 2853 "serde": False, 2854 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2857class RowFormatSerdeProperty(Property): 2858 arg_types = {"this": True, "serde_properties": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2862class QueryTransform(Expression): 2863 arg_types = { 2864 "expressions": True, 2865 "command_script": True, 2866 "schema": False, 2867 "row_format_before": False, 2868 "record_writer": False, 2869 "row_format_after": False, 2870 "record_reader": False, 2871 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2964class WithSystemVersioningProperty(Property): 2965 arg_types = { 2966 "on": False, 2967 "this": False, 2968 "data_consistency": False, 2969 "retention_period": False, 2970 "with": True, 2971 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
2974class Properties(Expression): 2975 arg_types = {"expressions": True} 2976 2977 NAME_TO_PROPERTY = { 2978 "ALGORITHM": AlgorithmProperty, 2979 "AUTO_INCREMENT": AutoIncrementProperty, 2980 "CHARACTER SET": CharacterSetProperty, 2981 "CLUSTERED_BY": ClusteredByProperty, 2982 "COLLATE": CollateProperty, 2983 "COMMENT": SchemaCommentProperty, 2984 "DEFINER": DefinerProperty, 2985 "DISTKEY": DistKeyProperty, 2986 "DISTRIBUTED_BY": DistributedByProperty, 2987 "DISTSTYLE": DistStyleProperty, 2988 "ENGINE": EngineProperty, 2989 "EXECUTE AS": ExecuteAsProperty, 2990 "FORMAT": FileFormatProperty, 2991 "LANGUAGE": LanguageProperty, 2992 "LOCATION": LocationProperty, 2993 "LOCK": LockProperty, 2994 "PARTITIONED_BY": PartitionedByProperty, 2995 "RETURNS": ReturnsProperty, 2996 "ROW_FORMAT": RowFormatProperty, 2997 "SORTKEY": SortKeyProperty, 2998 } 2999 3000 PROPERTY_TO_NAME = {v: k for k, v in NAME_TO_PROPERTY.items()} 3001 3002 # CREATE property locations 3003 # Form: schema specified 3004 # create [POST_CREATE] 3005 # table a [POST_NAME] 3006 # (b int) [POST_SCHEMA] 3007 # with ([POST_WITH]) 3008 # index (b) [POST_INDEX] 3009 # 3010 # Form: alias selection 3011 # create [POST_CREATE] 3012 # table a [POST_NAME] 3013 # as [POST_ALIAS] (select * from b) [POST_EXPRESSION] 3014 # index (c) [POST_INDEX] 3015 class Location(AutoName): 3016 POST_CREATE = auto() 3017 POST_NAME = auto() 3018 POST_SCHEMA = auto() 3019 POST_WITH = auto() 3020 POST_ALIAS = auto() 3021 POST_EXPRESSION = auto() 3022 POST_INDEX = auto() 3023 UNSUPPORTED = auto() 3024 3025 @classmethod 3026 def from_dict(cls, properties_dict: t.Dict) -> Properties: 3027 expressions = [] 3028 for key, value in properties_dict.items(): 3029 property_cls = cls.NAME_TO_PROPERTY.get(key.upper()) 3030 if property_cls: 3031 expressions.append(property_cls(this=convert(value))) 3032 else: 3033 expressions.append(Property(this=Literal.string(key), value=convert(value))) 3034 3035 return cls(expressions=expressions)
3025 @classmethod 3026 def from_dict(cls, properties_dict: t.Dict) -> Properties: 3027 expressions = [] 3028 for key, value in properties_dict.items(): 3029 property_cls = cls.NAME_TO_PROPERTY.get(key.upper()) 3030 if property_cls: 3031 expressions.append(property_cls(this=convert(value))) 3032 else: 3033 expressions.append(Property(this=Literal.string(key), value=convert(value))) 3034 3035 return cls(expressions=expressions)
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3015 class Location(AutoName): 3016 POST_CREATE = auto() 3017 POST_NAME = auto() 3018 POST_SCHEMA = auto() 3019 POST_WITH = auto() 3020 POST_ALIAS = auto() 3021 POST_EXPRESSION = auto() 3022 POST_INDEX = auto() 3023 UNSUPPORTED = auto()
An enumeration.
Inherited Members
- enum.Enum
- name
- value
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3042class InputOutputFormat(Expression): 3043 arg_types = {"input_format": False, "output_format": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3051class Reference(Expression): 3052 arg_types = {"this": True, "expressions": False, "options": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3055class Tuple(Expression): 3056 arg_types = {"expressions": False} 3057 3058 def isin( 3059 self, 3060 *expressions: t.Any, 3061 query: t.Optional[ExpOrStr] = None, 3062 unnest: t.Optional[ExpOrStr] | t.Collection[ExpOrStr] = None, 3063 copy: bool = True, 3064 **opts, 3065 ) -> In: 3066 return In( 3067 this=maybe_copy(self, copy), 3068 expressions=[convert(e, copy=copy) for e in expressions], 3069 query=maybe_parse(query, copy=copy, **opts) if query else None, 3070 unnest=( 3071 Unnest( 3072 expressions=[ 3073 maybe_parse(t.cast(ExpOrStr, e), copy=copy, **opts) 3074 for e in ensure_list(unnest) 3075 ] 3076 ) 3077 if unnest 3078 else None 3079 ), 3080 )
3058 def isin( 3059 self, 3060 *expressions: t.Any, 3061 query: t.Optional[ExpOrStr] = None, 3062 unnest: t.Optional[ExpOrStr] | t.Collection[ExpOrStr] = None, 3063 copy: bool = True, 3064 **opts, 3065 ) -> In: 3066 return In( 3067 this=maybe_copy(self, copy), 3068 expressions=[convert(e, copy=copy) for e in expressions], 3069 query=maybe_parse(query, copy=copy, **opts) if query else None, 3070 unnest=( 3071 Unnest( 3072 expressions=[ 3073 maybe_parse(t.cast(ExpOrStr, e), copy=copy, **opts) 3074 for e in ensure_list(unnest) 3075 ] 3076 ) 3077 if unnest 3078 else None 3079 ), 3080 )
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3121class IndexTableHint(Expression): 3122 arg_types = {"this": True, "expressions": False, "target": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3126class HistoricalData(Expression): 3127 arg_types = {"this": True, "kind": True, "expression": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3130class Table(Expression): 3131 arg_types = { 3132 "this": False, 3133 "alias": False, 3134 "db": False, 3135 "catalog": False, 3136 "laterals": False, 3137 "joins": False, 3138 "pivots": False, 3139 "hints": False, 3140 "system_time": False, 3141 "version": False, 3142 "format": False, 3143 "pattern": False, 3144 "ordinality": False, 3145 "when": False, 3146 "only": False, 3147 "partition": False, 3148 "changes": False, 3149 "rows_from": False, 3150 "sample": False, 3151 } 3152 3153 @property 3154 def name(self) -> str: 3155 if isinstance(self.this, Func): 3156 return "" 3157 return self.this.name 3158 3159 @property 3160 def db(self) -> str: 3161 return self.text("db") 3162 3163 @property 3164 def catalog(self) -> str: 3165 return self.text("catalog") 3166 3167 @property 3168 def selects(self) -> t.List[Expression]: 3169 return [] 3170 3171 @property 3172 def named_selects(self) -> t.List[str]: 3173 return [] 3174 3175 @property 3176 def parts(self) -> t.List[Expression]: 3177 """Return the parts of a table in order catalog, db, table.""" 3178 parts: t.List[Expression] = [] 3179 3180 for arg in ("catalog", "db", "this"): 3181 part = self.args.get(arg) 3182 3183 if isinstance(part, Dot): 3184 parts.extend(part.flatten()) 3185 elif isinstance(part, Expression): 3186 parts.append(part) 3187 3188 return parts 3189 3190 def to_column(self, copy: bool = True) -> Alias | Column | Dot: 3191 parts = self.parts 3192 col = column(*reversed(parts[0:4]), fields=parts[4:], copy=copy) # type: ignore 3193 alias = self.args.get("alias") 3194 if alias: 3195 col = alias_(col, alias.this, copy=copy) 3196 return col
3175 @property 3176 def parts(self) -> t.List[Expression]: 3177 """Return the parts of a table in order catalog, db, table.""" 3178 parts: t.List[Expression] = [] 3179 3180 for arg in ("catalog", "db", "this"): 3181 part = self.args.get(arg) 3182 3183 if isinstance(part, Dot): 3184 parts.extend(part.flatten()) 3185 elif isinstance(part, Expression): 3186 parts.append(part) 3187 3188 return parts
Return the parts of a table in order catalog, db, table.
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3199class SetOperation(Query): 3200 arg_types = { 3201 "with": False, 3202 "this": True, 3203 "expression": True, 3204 "distinct": False, 3205 "by_name": False, 3206 **QUERY_MODIFIERS, 3207 } 3208 3209 def select( 3210 self: S, 3211 *expressions: t.Optional[ExpOrStr], 3212 append: bool = True, 3213 dialect: DialectType = None, 3214 copy: bool = True, 3215 **opts, 3216 ) -> S: 3217 this = maybe_copy(self, copy) 3218 this.this.unnest().select(*expressions, append=append, dialect=dialect, copy=False, **opts) 3219 this.expression.unnest().select( 3220 *expressions, append=append, dialect=dialect, copy=False, **opts 3221 ) 3222 return this 3223 3224 @property 3225 def named_selects(self) -> t.List[str]: 3226 return self.this.unnest().named_selects 3227 3228 @property 3229 def is_star(self) -> bool: 3230 return self.this.is_star or self.expression.is_star 3231 3232 @property 3233 def selects(self) -> t.List[Expression]: 3234 return self.this.unnest().selects 3235 3236 @property 3237 def left(self) -> Query: 3238 return self.this 3239 3240 @property 3241 def right(self) -> Query: 3242 return self.expression
3209 def select( 3210 self: S, 3211 *expressions: t.Optional[ExpOrStr], 3212 append: bool = True, 3213 dialect: DialectType = None, 3214 copy: bool = True, 3215 **opts, 3216 ) -> S: 3217 this = maybe_copy(self, copy) 3218 this.this.unnest().select(*expressions, append=append, dialect=dialect, copy=False, **opts) 3219 this.expression.unnest().select( 3220 *expressions, append=append, dialect=dialect, copy=False, **opts 3221 ) 3222 return this
Append to or set the SELECT expressions.
Example:
>>> Select()select("x", "y").sql() 'SELECT x, y'
Arguments:
- *expressions: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. - append: if
True, add to any existing expressions. Otherwise, this resets the expressions. - dialect: the dialect used to parse the input expressions.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Query expression.
3224 @property 3225 def named_selects(self) -> t.List[str]: 3226 return self.this.unnest().named_selects
Returns the output names of the query's projections.
3228 @property 3229 def is_star(self) -> bool: 3230 return self.this.is_star or self.expression.is_star
Checks whether an expression is a star.
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3257class Update(Expression): 3258 arg_types = { 3259 "with": False, 3260 "this": False, 3261 "expressions": True, 3262 "from": False, 3263 "where": False, 3264 "returning": False, 3265 "order": False, 3266 "limit": False, 3267 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3278class Version(Expression): 3279 """ 3280 Time travel, iceberg, bigquery etc 3281 https://trino.io/docs/current/connector/iceberg.html?highlight=snapshot#using-snapshots 3282 https://www.databricks.com/blog/2019/02/04/introducing-delta-time-travel-for-large-scale-data-lakes.html 3283 https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#for_system_time_as_of 3284 https://learn.microsoft.com/en-us/sql/relational-databases/tables/querying-data-in-a-system-versioned-temporal-table?view=sql-server-ver16 3285 this is either TIMESTAMP or VERSION 3286 kind is ("AS OF", "BETWEEN") 3287 """ 3288 3289 arg_types = {"this": True, "kind": True, "expression": False}
Time travel, iceberg, bigquery etc https://trino.io/docs/current/connector/iceberg.html?highlight=snapshot#using-snapshots https://www.databricks.com/blog/2019/02/04/introducing-delta-time-travel-for-large-scale-data-lakes.html https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#for_system_time_as_of https://learn.microsoft.com/en-us/sql/relational-databases/tables/querying-data-in-a-system-versioned-temporal-table?view=sql-server-ver16 this is either TIMESTAMP or VERSION kind is ("AS OF", "BETWEEN")
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3302class Select(Query): 3303 arg_types = { 3304 "with": False, 3305 "kind": False, 3306 "expressions": False, 3307 "hint": False, 3308 "distinct": False, 3309 "into": False, 3310 "from": False, 3311 **QUERY_MODIFIERS, 3312 } 3313 3314 def from_( 3315 self, expression: ExpOrStr, dialect: DialectType = None, copy: bool = True, **opts 3316 ) -> Select: 3317 """ 3318 Set the FROM expression. 3319 3320 Example: 3321 >>> Select().from_("tbl").select("x").sql() 3322 'SELECT x FROM tbl' 3323 3324 Args: 3325 expression : the SQL code strings to parse. 3326 If a `From` instance is passed, this is used as-is. 3327 If another `Expression` instance is passed, it will be wrapped in a `From`. 3328 dialect: the dialect used to parse the input expression. 3329 copy: if `False`, modify this expression instance in-place. 3330 opts: other options to use to parse the input expressions. 3331 3332 Returns: 3333 The modified Select expression. 3334 """ 3335 return _apply_builder( 3336 expression=expression, 3337 instance=self, 3338 arg="from", 3339 into=From, 3340 prefix="FROM", 3341 dialect=dialect, 3342 copy=copy, 3343 **opts, 3344 ) 3345 3346 def group_by( 3347 self, 3348 *expressions: t.Optional[ExpOrStr], 3349 append: bool = True, 3350 dialect: DialectType = None, 3351 copy: bool = True, 3352 **opts, 3353 ) -> Select: 3354 """ 3355 Set the GROUP BY expression. 3356 3357 Example: 3358 >>> Select().from_("tbl").select("x", "COUNT(1)").group_by("x").sql() 3359 'SELECT x, COUNT(1) FROM tbl GROUP BY x' 3360 3361 Args: 3362 *expressions: the SQL code strings to parse. 3363 If a `Group` instance is passed, this is used as-is. 3364 If another `Expression` instance is passed, it will be wrapped in a `Group`. 3365 If nothing is passed in then a group by is not applied to the expression 3366 append: if `True`, add to any existing expressions. 3367 Otherwise, this flattens all the `Group` expression into a single expression. 3368 dialect: the dialect used to parse the input expression. 3369 copy: if `False`, modify this expression instance in-place. 3370 opts: other options to use to parse the input expressions. 3371 3372 Returns: 3373 The modified Select expression. 3374 """ 3375 if not expressions: 3376 return self if not copy else self.copy() 3377 3378 return _apply_child_list_builder( 3379 *expressions, 3380 instance=self, 3381 arg="group", 3382 append=append, 3383 copy=copy, 3384 prefix="GROUP BY", 3385 into=Group, 3386 dialect=dialect, 3387 **opts, 3388 ) 3389 3390 def sort_by( 3391 self, 3392 *expressions: t.Optional[ExpOrStr], 3393 append: bool = True, 3394 dialect: DialectType = None, 3395 copy: bool = True, 3396 **opts, 3397 ) -> Select: 3398 """ 3399 Set the SORT BY expression. 3400 3401 Example: 3402 >>> Select().from_("tbl").select("x").sort_by("x DESC").sql(dialect="hive") 3403 'SELECT x FROM tbl SORT BY x DESC' 3404 3405 Args: 3406 *expressions: the SQL code strings to parse. 3407 If a `Group` instance is passed, this is used as-is. 3408 If another `Expression` instance is passed, it will be wrapped in a `SORT`. 3409 append: if `True`, add to any existing expressions. 3410 Otherwise, this flattens all the `Order` expression into a single expression. 3411 dialect: the dialect used to parse the input expression. 3412 copy: if `False`, modify this expression instance in-place. 3413 opts: other options to use to parse the input expressions. 3414 3415 Returns: 3416 The modified Select expression. 3417 """ 3418 return _apply_child_list_builder( 3419 *expressions, 3420 instance=self, 3421 arg="sort", 3422 append=append, 3423 copy=copy, 3424 prefix="SORT BY", 3425 into=Sort, 3426 dialect=dialect, 3427 **opts, 3428 ) 3429 3430 def cluster_by( 3431 self, 3432 *expressions: t.Optional[ExpOrStr], 3433 append: bool = True, 3434 dialect: DialectType = None, 3435 copy: bool = True, 3436 **opts, 3437 ) -> Select: 3438 """ 3439 Set the CLUSTER BY expression. 3440 3441 Example: 3442 >>> Select().from_("tbl").select("x").cluster_by("x DESC").sql(dialect="hive") 3443 'SELECT x FROM tbl CLUSTER BY x DESC' 3444 3445 Args: 3446 *expressions: the SQL code strings to parse. 3447 If a `Group` instance is passed, this is used as-is. 3448 If another `Expression` instance is passed, it will be wrapped in a `Cluster`. 3449 append: if `True`, add to any existing expressions. 3450 Otherwise, this flattens all the `Order` expression into a single expression. 3451 dialect: the dialect used to parse the input expression. 3452 copy: if `False`, modify this expression instance in-place. 3453 opts: other options to use to parse the input expressions. 3454 3455 Returns: 3456 The modified Select expression. 3457 """ 3458 return _apply_child_list_builder( 3459 *expressions, 3460 instance=self, 3461 arg="cluster", 3462 append=append, 3463 copy=copy, 3464 prefix="CLUSTER BY", 3465 into=Cluster, 3466 dialect=dialect, 3467 **opts, 3468 ) 3469 3470 def select( 3471 self, 3472 *expressions: t.Optional[ExpOrStr], 3473 append: bool = True, 3474 dialect: DialectType = None, 3475 copy: bool = True, 3476 **opts, 3477 ) -> Select: 3478 return _apply_list_builder( 3479 *expressions, 3480 instance=self, 3481 arg="expressions", 3482 append=append, 3483 dialect=dialect, 3484 into=Expression, 3485 copy=copy, 3486 **opts, 3487 ) 3488 3489 def lateral( 3490 self, 3491 *expressions: t.Optional[ExpOrStr], 3492 append: bool = True, 3493 dialect: DialectType = None, 3494 copy: bool = True, 3495 **opts, 3496 ) -> Select: 3497 """ 3498 Append to or set the LATERAL expressions. 3499 3500 Example: 3501 >>> Select().select("x").lateral("OUTER explode(y) tbl2 AS z").from_("tbl").sql() 3502 'SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z' 3503 3504 Args: 3505 *expressions: the SQL code strings to parse. 3506 If an `Expression` instance is passed, it will be used as-is. 3507 append: if `True`, add to any existing expressions. 3508 Otherwise, this resets the expressions. 3509 dialect: the dialect used to parse the input expressions. 3510 copy: if `False`, modify this expression instance in-place. 3511 opts: other options to use to parse the input expressions. 3512 3513 Returns: 3514 The modified Select expression. 3515 """ 3516 return _apply_list_builder( 3517 *expressions, 3518 instance=self, 3519 arg="laterals", 3520 append=append, 3521 into=Lateral, 3522 prefix="LATERAL VIEW", 3523 dialect=dialect, 3524 copy=copy, 3525 **opts, 3526 ) 3527 3528 def join( 3529 self, 3530 expression: ExpOrStr, 3531 on: t.Optional[ExpOrStr] = None, 3532 using: t.Optional[ExpOrStr | t.Collection[ExpOrStr]] = None, 3533 append: bool = True, 3534 join_type: t.Optional[str] = None, 3535 join_alias: t.Optional[Identifier | str] = None, 3536 dialect: DialectType = None, 3537 copy: bool = True, 3538 **opts, 3539 ) -> Select: 3540 """ 3541 Append to or set the JOIN expressions. 3542 3543 Example: 3544 >>> Select().select("*").from_("tbl").join("tbl2", on="tbl1.y = tbl2.y").sql() 3545 'SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y' 3546 3547 >>> Select().select("1").from_("a").join("b", using=["x", "y", "z"]).sql() 3548 'SELECT 1 FROM a JOIN b USING (x, y, z)' 3549 3550 Use `join_type` to change the type of join: 3551 3552 >>> Select().select("*").from_("tbl").join("tbl2", on="tbl1.y = tbl2.y", join_type="left outer").sql() 3553 'SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y' 3554 3555 Args: 3556 expression: the SQL code string to parse. 3557 If an `Expression` instance is passed, it will be used as-is. 3558 on: optionally specify the join "on" criteria as a SQL string. 3559 If an `Expression` instance is passed, it will be used as-is. 3560 using: optionally specify the join "using" criteria as a SQL string. 3561 If an `Expression` instance is passed, it will be used as-is. 3562 append: if `True`, add to any existing expressions. 3563 Otherwise, this resets the expressions. 3564 join_type: if set, alter the parsed join type. 3565 join_alias: an optional alias for the joined source. 3566 dialect: the dialect used to parse the input expressions. 3567 copy: if `False`, modify this expression instance in-place. 3568 opts: other options to use to parse the input expressions. 3569 3570 Returns: 3571 Select: the modified expression. 3572 """ 3573 parse_args: t.Dict[str, t.Any] = {"dialect": dialect, **opts} 3574 3575 try: 3576 expression = maybe_parse(expression, into=Join, prefix="JOIN", **parse_args) 3577 except ParseError: 3578 expression = maybe_parse(expression, into=(Join, Expression), **parse_args) 3579 3580 join = expression if isinstance(expression, Join) else Join(this=expression) 3581 3582 if isinstance(join.this, Select): 3583 join.this.replace(join.this.subquery()) 3584 3585 if join_type: 3586 method: t.Optional[Token] 3587 side: t.Optional[Token] 3588 kind: t.Optional[Token] 3589 3590 method, side, kind = maybe_parse(join_type, into="JOIN_TYPE", **parse_args) # type: ignore 3591 3592 if method: 3593 join.set("method", method.text) 3594 if side: 3595 join.set("side", side.text) 3596 if kind: 3597 join.set("kind", kind.text) 3598 3599 if on: 3600 on = and_(*ensure_list(on), dialect=dialect, copy=copy, **opts) 3601 join.set("on", on) 3602 3603 if using: 3604 join = _apply_list_builder( 3605 *ensure_list(using), 3606 instance=join, 3607 arg="using", 3608 append=append, 3609 copy=copy, 3610 into=Identifier, 3611 **opts, 3612 ) 3613 3614 if join_alias: 3615 join.set("this", alias_(join.this, join_alias, table=True)) 3616 3617 return _apply_list_builder( 3618 join, 3619 instance=self, 3620 arg="joins", 3621 append=append, 3622 copy=copy, 3623 **opts, 3624 ) 3625 3626 def where( 3627 self, 3628 *expressions: t.Optional[ExpOrStr], 3629 append: bool = True, 3630 dialect: DialectType = None, 3631 copy: bool = True, 3632 **opts, 3633 ) -> Select: 3634 """ 3635 Append to or set the WHERE expressions. 3636 3637 Example: 3638 >>> Select().select("x").from_("tbl").where("x = 'a' OR x < 'b'").sql() 3639 "SELECT x FROM tbl WHERE x = 'a' OR x < 'b'" 3640 3641 Args: 3642 *expressions: the SQL code strings to parse. 3643 If an `Expression` instance is passed, it will be used as-is. 3644 Multiple expressions are combined with an AND operator. 3645 append: if `True`, AND the new expressions to any existing expression. 3646 Otherwise, this resets the expression. 3647 dialect: the dialect used to parse the input expressions. 3648 copy: if `False`, modify this expression instance in-place. 3649 opts: other options to use to parse the input expressions. 3650 3651 Returns: 3652 Select: the modified expression. 3653 """ 3654 return _apply_conjunction_builder( 3655 *expressions, 3656 instance=self, 3657 arg="where", 3658 append=append, 3659 into=Where, 3660 dialect=dialect, 3661 copy=copy, 3662 **opts, 3663 ) 3664 3665 def having( 3666 self, 3667 *expressions: t.Optional[ExpOrStr], 3668 append: bool = True, 3669 dialect: DialectType = None, 3670 copy: bool = True, 3671 **opts, 3672 ) -> Select: 3673 """ 3674 Append to or set the HAVING expressions. 3675 3676 Example: 3677 >>> Select().select("x", "COUNT(y)").from_("tbl").group_by("x").having("COUNT(y) > 3").sql() 3678 'SELECT x, COUNT(y) FROM tbl GROUP BY x HAVING COUNT(y) > 3' 3679 3680 Args: 3681 *expressions: the SQL code strings to parse. 3682 If an `Expression` instance is passed, it will be used as-is. 3683 Multiple expressions are combined with an AND operator. 3684 append: if `True`, AND the new expressions to any existing expression. 3685 Otherwise, this resets the expression. 3686 dialect: the dialect used to parse the input expressions. 3687 copy: if `False`, modify this expression instance in-place. 3688 opts: other options to use to parse the input expressions. 3689 3690 Returns: 3691 The modified Select expression. 3692 """ 3693 return _apply_conjunction_builder( 3694 *expressions, 3695 instance=self, 3696 arg="having", 3697 append=append, 3698 into=Having, 3699 dialect=dialect, 3700 copy=copy, 3701 **opts, 3702 ) 3703 3704 def window( 3705 self, 3706 *expressions: t.Optional[ExpOrStr], 3707 append: bool = True, 3708 dialect: DialectType = None, 3709 copy: bool = True, 3710 **opts, 3711 ) -> Select: 3712 return _apply_list_builder( 3713 *expressions, 3714 instance=self, 3715 arg="windows", 3716 append=append, 3717 into=Window, 3718 dialect=dialect, 3719 copy=copy, 3720 **opts, 3721 ) 3722 3723 def qualify( 3724 self, 3725 *expressions: t.Optional[ExpOrStr], 3726 append: bool = True, 3727 dialect: DialectType = None, 3728 copy: bool = True, 3729 **opts, 3730 ) -> Select: 3731 return _apply_conjunction_builder( 3732 *expressions, 3733 instance=self, 3734 arg="qualify", 3735 append=append, 3736 into=Qualify, 3737 dialect=dialect, 3738 copy=copy, 3739 **opts, 3740 ) 3741 3742 def distinct( 3743 self, *ons: t.Optional[ExpOrStr], distinct: bool = True, copy: bool = True 3744 ) -> Select: 3745 """ 3746 Set the OFFSET expression. 3747 3748 Example: 3749 >>> Select().from_("tbl").select("x").distinct().sql() 3750 'SELECT DISTINCT x FROM tbl' 3751 3752 Args: 3753 ons: the expressions to distinct on 3754 distinct: whether the Select should be distinct 3755 copy: if `False`, modify this expression instance in-place. 3756 3757 Returns: 3758 Select: the modified expression. 3759 """ 3760 instance = maybe_copy(self, copy) 3761 on = Tuple(expressions=[maybe_parse(on, copy=copy) for on in ons if on]) if ons else None 3762 instance.set("distinct", Distinct(on=on) if distinct else None) 3763 return instance 3764 3765 def ctas( 3766 self, 3767 table: ExpOrStr, 3768 properties: t.Optional[t.Dict] = None, 3769 dialect: DialectType = None, 3770 copy: bool = True, 3771 **opts, 3772 ) -> Create: 3773 """ 3774 Convert this expression to a CREATE TABLE AS statement. 3775 3776 Example: 3777 >>> Select().select("*").from_("tbl").ctas("x").sql() 3778 'CREATE TABLE x AS SELECT * FROM tbl' 3779 3780 Args: 3781 table: the SQL code string to parse as the table name. 3782 If another `Expression` instance is passed, it will be used as-is. 3783 properties: an optional mapping of table properties 3784 dialect: the dialect used to parse the input table. 3785 copy: if `False`, modify this expression instance in-place. 3786 opts: other options to use to parse the input table. 3787 3788 Returns: 3789 The new Create expression. 3790 """ 3791 instance = maybe_copy(self, copy) 3792 table_expression = maybe_parse(table, into=Table, dialect=dialect, **opts) 3793 3794 properties_expression = None 3795 if properties: 3796 properties_expression = Properties.from_dict(properties) 3797 3798 return Create( 3799 this=table_expression, 3800 kind="TABLE", 3801 expression=instance, 3802 properties=properties_expression, 3803 ) 3804 3805 def lock(self, update: bool = True, copy: bool = True) -> Select: 3806 """ 3807 Set the locking read mode for this expression. 3808 3809 Examples: 3810 >>> Select().select("x").from_("tbl").where("x = 'a'").lock().sql("mysql") 3811 "SELECT x FROM tbl WHERE x = 'a' FOR UPDATE" 3812 3813 >>> Select().select("x").from_("tbl").where("x = 'a'").lock(update=False).sql("mysql") 3814 "SELECT x FROM tbl WHERE x = 'a' FOR SHARE" 3815 3816 Args: 3817 update: if `True`, the locking type will be `FOR UPDATE`, else it will be `FOR SHARE`. 3818 copy: if `False`, modify this expression instance in-place. 3819 3820 Returns: 3821 The modified expression. 3822 """ 3823 inst = maybe_copy(self, copy) 3824 inst.set("locks", [Lock(update=update)]) 3825 3826 return inst 3827 3828 def hint(self, *hints: ExpOrStr, dialect: DialectType = None, copy: bool = True) -> Select: 3829 """ 3830 Set hints for this expression. 3831 3832 Examples: 3833 >>> Select().select("x").from_("tbl").hint("BROADCAST(y)").sql(dialect="spark") 3834 'SELECT /*+ BROADCAST(y) */ x FROM tbl' 3835 3836 Args: 3837 hints: The SQL code strings to parse as the hints. 3838 If an `Expression` instance is passed, it will be used as-is. 3839 dialect: The dialect used to parse the hints. 3840 copy: If `False`, modify this expression instance in-place. 3841 3842 Returns: 3843 The modified expression. 3844 """ 3845 inst = maybe_copy(self, copy) 3846 inst.set( 3847 "hint", Hint(expressions=[maybe_parse(h, copy=copy, dialect=dialect) for h in hints]) 3848 ) 3849 3850 return inst 3851 3852 @property 3853 def named_selects(self) -> t.List[str]: 3854 return [e.output_name for e in self.expressions if e.alias_or_name] 3855 3856 @property 3857 def is_star(self) -> bool: 3858 return any(expression.is_star for expression in self.expressions) 3859 3860 @property 3861 def selects(self) -> t.List[Expression]: 3862 return self.expressions
3314 def from_( 3315 self, expression: ExpOrStr, dialect: DialectType = None, copy: bool = True, **opts 3316 ) -> Select: 3317 """ 3318 Set the FROM expression. 3319 3320 Example: 3321 >>> Select().from_("tbl").select("x").sql() 3322 'SELECT x FROM tbl' 3323 3324 Args: 3325 expression : the SQL code strings to parse. 3326 If a `From` instance is passed, this is used as-is. 3327 If another `Expression` instance is passed, it will be wrapped in a `From`. 3328 dialect: the dialect used to parse the input expression. 3329 copy: if `False`, modify this expression instance in-place. 3330 opts: other options to use to parse the input expressions. 3331 3332 Returns: 3333 The modified Select expression. 3334 """ 3335 return _apply_builder( 3336 expression=expression, 3337 instance=self, 3338 arg="from", 3339 into=From, 3340 prefix="FROM", 3341 dialect=dialect, 3342 copy=copy, 3343 **opts, 3344 )
Set the FROM expression.
Example:
Arguments:
- expression : the SQL code strings to parse.
If a
Frominstance is passed, this is used as-is. If anotherExpressioninstance is passed, it will be wrapped in aFrom. - dialect: the dialect used to parse the input expression.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Select expression.
3346 def group_by( 3347 self, 3348 *expressions: t.Optional[ExpOrStr], 3349 append: bool = True, 3350 dialect: DialectType = None, 3351 copy: bool = True, 3352 **opts, 3353 ) -> Select: 3354 """ 3355 Set the GROUP BY expression. 3356 3357 Example: 3358 >>> Select().from_("tbl").select("x", "COUNT(1)").group_by("x").sql() 3359 'SELECT x, COUNT(1) FROM tbl GROUP BY x' 3360 3361 Args: 3362 *expressions: the SQL code strings to parse. 3363 If a `Group` instance is passed, this is used as-is. 3364 If another `Expression` instance is passed, it will be wrapped in a `Group`. 3365 If nothing is passed in then a group by is not applied to the expression 3366 append: if `True`, add to any existing expressions. 3367 Otherwise, this flattens all the `Group` expression into a single expression. 3368 dialect: the dialect used to parse the input expression. 3369 copy: if `False`, modify this expression instance in-place. 3370 opts: other options to use to parse the input expressions. 3371 3372 Returns: 3373 The modified Select expression. 3374 """ 3375 if not expressions: 3376 return self if not copy else self.copy() 3377 3378 return _apply_child_list_builder( 3379 *expressions, 3380 instance=self, 3381 arg="group", 3382 append=append, 3383 copy=copy, 3384 prefix="GROUP BY", 3385 into=Group, 3386 dialect=dialect, 3387 **opts, 3388 )
Set the GROUP BY expression.
Example:
Arguments:
- *expressions: the SQL code strings to parse.
If a
Groupinstance is passed, this is used as-is. If anotherExpressioninstance is passed, it will be wrapped in aGroup. If nothing is passed in then a group by is not applied to the expression - append: if
True, add to any existing expressions. Otherwise, this flattens all theGroupexpression into a single expression. - dialect: the dialect used to parse the input expression.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Select expression.
3390 def sort_by( 3391 self, 3392 *expressions: t.Optional[ExpOrStr], 3393 append: bool = True, 3394 dialect: DialectType = None, 3395 copy: bool = True, 3396 **opts, 3397 ) -> Select: 3398 """ 3399 Set the SORT BY expression. 3400 3401 Example: 3402 >>> Select().from_("tbl").select("x").sort_by("x DESC").sql(dialect="hive") 3403 'SELECT x FROM tbl SORT BY x DESC' 3404 3405 Args: 3406 *expressions: the SQL code strings to parse. 3407 If a `Group` instance is passed, this is used as-is. 3408 If another `Expression` instance is passed, it will be wrapped in a `SORT`. 3409 append: if `True`, add to any existing expressions. 3410 Otherwise, this flattens all the `Order` expression into a single expression. 3411 dialect: the dialect used to parse the input expression. 3412 copy: if `False`, modify this expression instance in-place. 3413 opts: other options to use to parse the input expressions. 3414 3415 Returns: 3416 The modified Select expression. 3417 """ 3418 return _apply_child_list_builder( 3419 *expressions, 3420 instance=self, 3421 arg="sort", 3422 append=append, 3423 copy=copy, 3424 prefix="SORT BY", 3425 into=Sort, 3426 dialect=dialect, 3427 **opts, 3428 )
Set the SORT BY expression.
Example:
Arguments:
- *expressions: the SQL code strings to parse.
If a
Groupinstance is passed, this is used as-is. If anotherExpressioninstance is passed, it will be wrapped in aSORT. - append: if
True, add to any existing expressions. Otherwise, this flattens all theOrderexpression into a single expression. - dialect: the dialect used to parse the input expression.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Select expression.
3430 def cluster_by( 3431 self, 3432 *expressions: t.Optional[ExpOrStr], 3433 append: bool = True, 3434 dialect: DialectType = None, 3435 copy: bool = True, 3436 **opts, 3437 ) -> Select: 3438 """ 3439 Set the CLUSTER BY expression. 3440 3441 Example: 3442 >>> Select().from_("tbl").select("x").cluster_by("x DESC").sql(dialect="hive") 3443 'SELECT x FROM tbl CLUSTER BY x DESC' 3444 3445 Args: 3446 *expressions: the SQL code strings to parse. 3447 If a `Group` instance is passed, this is used as-is. 3448 If another `Expression` instance is passed, it will be wrapped in a `Cluster`. 3449 append: if `True`, add to any existing expressions. 3450 Otherwise, this flattens all the `Order` expression into a single expression. 3451 dialect: the dialect used to parse the input expression. 3452 copy: if `False`, modify this expression instance in-place. 3453 opts: other options to use to parse the input expressions. 3454 3455 Returns: 3456 The modified Select expression. 3457 """ 3458 return _apply_child_list_builder( 3459 *expressions, 3460 instance=self, 3461 arg="cluster", 3462 append=append, 3463 copy=copy, 3464 prefix="CLUSTER BY", 3465 into=Cluster, 3466 dialect=dialect, 3467 **opts, 3468 )
Set the CLUSTER BY expression.
Example:
Arguments:
- *expressions: the SQL code strings to parse.
If a
Groupinstance is passed, this is used as-is. If anotherExpressioninstance is passed, it will be wrapped in aCluster. - append: if
True, add to any existing expressions. Otherwise, this flattens all theOrderexpression into a single expression. - dialect: the dialect used to parse the input expression.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Select expression.
3470 def select( 3471 self, 3472 *expressions: t.Optional[ExpOrStr], 3473 append: bool = True, 3474 dialect: DialectType = None, 3475 copy: bool = True, 3476 **opts, 3477 ) -> Select: 3478 return _apply_list_builder( 3479 *expressions, 3480 instance=self, 3481 arg="expressions", 3482 append=append, 3483 dialect=dialect, 3484 into=Expression, 3485 copy=copy, 3486 **opts, 3487 )
Append to or set the SELECT expressions.
Example:
>>> Select()select("x", "y").sql() 'SELECT x, y'
Arguments:
- *expressions: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. - append: if
True, add to any existing expressions. Otherwise, this resets the expressions. - dialect: the dialect used to parse the input expressions.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Query expression.
3489 def lateral( 3490 self, 3491 *expressions: t.Optional[ExpOrStr], 3492 append: bool = True, 3493 dialect: DialectType = None, 3494 copy: bool = True, 3495 **opts, 3496 ) -> Select: 3497 """ 3498 Append to or set the LATERAL expressions. 3499 3500 Example: 3501 >>> Select().select("x").lateral("OUTER explode(y) tbl2 AS z").from_("tbl").sql() 3502 'SELECT x FROM tbl LATERAL VIEW OUTER EXPLODE(y) tbl2 AS z' 3503 3504 Args: 3505 *expressions: the SQL code strings to parse. 3506 If an `Expression` instance is passed, it will be used as-is. 3507 append: if `True`, add to any existing expressions. 3508 Otherwise, this resets the expressions. 3509 dialect: the dialect used to parse the input expressions. 3510 copy: if `False`, modify this expression instance in-place. 3511 opts: other options to use to parse the input expressions. 3512 3513 Returns: 3514 The modified Select expression. 3515 """ 3516 return _apply_list_builder( 3517 *expressions, 3518 instance=self, 3519 arg="laterals", 3520 append=append, 3521 into=Lateral, 3522 prefix="LATERAL VIEW", 3523 dialect=dialect, 3524 copy=copy, 3525 **opts, 3526 )
Append to or set the LATERAL expressions.
Example:
Arguments:
- *expressions: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. - append: if
True, add to any existing expressions. Otherwise, this resets the expressions. - dialect: the dialect used to parse the input expressions.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Select expression.
3528 def join( 3529 self, 3530 expression: ExpOrStr, 3531 on: t.Optional[ExpOrStr] = None, 3532 using: t.Optional[ExpOrStr | t.Collection[ExpOrStr]] = None, 3533 append: bool = True, 3534 join_type: t.Optional[str] = None, 3535 join_alias: t.Optional[Identifier | str] = None, 3536 dialect: DialectType = None, 3537 copy: bool = True, 3538 **opts, 3539 ) -> Select: 3540 """ 3541 Append to or set the JOIN expressions. 3542 3543 Example: 3544 >>> Select().select("*").from_("tbl").join("tbl2", on="tbl1.y = tbl2.y").sql() 3545 'SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y' 3546 3547 >>> Select().select("1").from_("a").join("b", using=["x", "y", "z"]).sql() 3548 'SELECT 1 FROM a JOIN b USING (x, y, z)' 3549 3550 Use `join_type` to change the type of join: 3551 3552 >>> Select().select("*").from_("tbl").join("tbl2", on="tbl1.y = tbl2.y", join_type="left outer").sql() 3553 'SELECT * FROM tbl LEFT OUTER JOIN tbl2 ON tbl1.y = tbl2.y' 3554 3555 Args: 3556 expression: the SQL code string to parse. 3557 If an `Expression` instance is passed, it will be used as-is. 3558 on: optionally specify the join "on" criteria as a SQL string. 3559 If an `Expression` instance is passed, it will be used as-is. 3560 using: optionally specify the join "using" criteria as a SQL string. 3561 If an `Expression` instance is passed, it will be used as-is. 3562 append: if `True`, add to any existing expressions. 3563 Otherwise, this resets the expressions. 3564 join_type: if set, alter the parsed join type. 3565 join_alias: an optional alias for the joined source. 3566 dialect: the dialect used to parse the input expressions. 3567 copy: if `False`, modify this expression instance in-place. 3568 opts: other options to use to parse the input expressions. 3569 3570 Returns: 3571 Select: the modified expression. 3572 """ 3573 parse_args: t.Dict[str, t.Any] = {"dialect": dialect, **opts} 3574 3575 try: 3576 expression = maybe_parse(expression, into=Join, prefix="JOIN", **parse_args) 3577 except ParseError: 3578 expression = maybe_parse(expression, into=(Join, Expression), **parse_args) 3579 3580 join = expression if isinstance(expression, Join) else Join(this=expression) 3581 3582 if isinstance(join.this, Select): 3583 join.this.replace(join.this.subquery()) 3584 3585 if join_type: 3586 method: t.Optional[Token] 3587 side: t.Optional[Token] 3588 kind: t.Optional[Token] 3589 3590 method, side, kind = maybe_parse(join_type, into="JOIN_TYPE", **parse_args) # type: ignore 3591 3592 if method: 3593 join.set("method", method.text) 3594 if side: 3595 join.set("side", side.text) 3596 if kind: 3597 join.set("kind", kind.text) 3598 3599 if on: 3600 on = and_(*ensure_list(on), dialect=dialect, copy=copy, **opts) 3601 join.set("on", on) 3602 3603 if using: 3604 join = _apply_list_builder( 3605 *ensure_list(using), 3606 instance=join, 3607 arg="using", 3608 append=append, 3609 copy=copy, 3610 into=Identifier, 3611 **opts, 3612 ) 3613 3614 if join_alias: 3615 join.set("this", alias_(join.this, join_alias, table=True)) 3616 3617 return _apply_list_builder( 3618 join, 3619 instance=self, 3620 arg="joins", 3621 append=append, 3622 copy=copy, 3623 **opts, 3624 )
Append to or set the JOIN expressions.
Example:
>>> Select()select("*")from_("tbl").join("tbl2", on="tbl1.y = tbl2.y").sql() 'SELECT * FROM tbl JOIN tbl2 ON tbl1.y = tbl2.y'>>> Select()select("1")from_("a").join("b", using=["x", "y", "z"]).sql() 'SELECT 1 FROM a JOIN b USING (x, y, z)'Use
join_typeto change the type of join:
Arguments:
- expression: the SQL code string to parse.
If an
Expressioninstance is passed, it will be used as-is. - on: optionally specify the join "on" criteria as a SQL string.
If an
Expressioninstance is passed, it will be used as-is. - using: optionally specify the join "using" criteria as a SQL string.
If an
Expressioninstance is passed, it will be used as-is. - append: if
True, add to any existing expressions. Otherwise, this resets the expressions. - join_type: if set, alter the parsed join type.
- join_alias: an optional alias for the joined source.
- dialect: the dialect used to parse the input expressions.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
Select: the modified expression.
3626 def where( 3627 self, 3628 *expressions: t.Optional[ExpOrStr], 3629 append: bool = True, 3630 dialect: DialectType = None, 3631 copy: bool = True, 3632 **opts, 3633 ) -> Select: 3634 """ 3635 Append to or set the WHERE expressions. 3636 3637 Example: 3638 >>> Select().select("x").from_("tbl").where("x = 'a' OR x < 'b'").sql() 3639 "SELECT x FROM tbl WHERE x = 'a' OR x < 'b'" 3640 3641 Args: 3642 *expressions: the SQL code strings to parse. 3643 If an `Expression` instance is passed, it will be used as-is. 3644 Multiple expressions are combined with an AND operator. 3645 append: if `True`, AND the new expressions to any existing expression. 3646 Otherwise, this resets the expression. 3647 dialect: the dialect used to parse the input expressions. 3648 copy: if `False`, modify this expression instance in-place. 3649 opts: other options to use to parse the input expressions. 3650 3651 Returns: 3652 Select: the modified expression. 3653 """ 3654 return _apply_conjunction_builder( 3655 *expressions, 3656 instance=self, 3657 arg="where", 3658 append=append, 3659 into=Where, 3660 dialect=dialect, 3661 copy=copy, 3662 **opts, 3663 )
Append to or set the WHERE expressions.
Example:
Arguments:
- *expressions: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. Multiple expressions are combined with an AND operator. - append: if
True, AND the new expressions to any existing expression. Otherwise, this resets the expression. - dialect: the dialect used to parse the input expressions.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
Select: the modified expression.
3665 def having( 3666 self, 3667 *expressions: t.Optional[ExpOrStr], 3668 append: bool = True, 3669 dialect: DialectType = None, 3670 copy: bool = True, 3671 **opts, 3672 ) -> Select: 3673 """ 3674 Append to or set the HAVING expressions. 3675 3676 Example: 3677 >>> Select().select("x", "COUNT(y)").from_("tbl").group_by("x").having("COUNT(y) > 3").sql() 3678 'SELECT x, COUNT(y) FROM tbl GROUP BY x HAVING COUNT(y) > 3' 3679 3680 Args: 3681 *expressions: the SQL code strings to parse. 3682 If an `Expression` instance is passed, it will be used as-is. 3683 Multiple expressions are combined with an AND operator. 3684 append: if `True`, AND the new expressions to any existing expression. 3685 Otherwise, this resets the expression. 3686 dialect: the dialect used to parse the input expressions. 3687 copy: if `False`, modify this expression instance in-place. 3688 opts: other options to use to parse the input expressions. 3689 3690 Returns: 3691 The modified Select expression. 3692 """ 3693 return _apply_conjunction_builder( 3694 *expressions, 3695 instance=self, 3696 arg="having", 3697 append=append, 3698 into=Having, 3699 dialect=dialect, 3700 copy=copy, 3701 **opts, 3702 )
Append to or set the HAVING expressions.
Example:
Arguments:
- *expressions: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. Multiple expressions are combined with an AND operator. - append: if
True, AND the new expressions to any existing expression. Otherwise, this resets the expression. - dialect: the dialect used to parse the input expressions.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Select expression.
3704 def window( 3705 self, 3706 *expressions: t.Optional[ExpOrStr], 3707 append: bool = True, 3708 dialect: DialectType = None, 3709 copy: bool = True, 3710 **opts, 3711 ) -> Select: 3712 return _apply_list_builder( 3713 *expressions, 3714 instance=self, 3715 arg="windows", 3716 append=append, 3717 into=Window, 3718 dialect=dialect, 3719 copy=copy, 3720 **opts, 3721 )
3723 def qualify( 3724 self, 3725 *expressions: t.Optional[ExpOrStr], 3726 append: bool = True, 3727 dialect: DialectType = None, 3728 copy: bool = True, 3729 **opts, 3730 ) -> Select: 3731 return _apply_conjunction_builder( 3732 *expressions, 3733 instance=self, 3734 arg="qualify", 3735 append=append, 3736 into=Qualify, 3737 dialect=dialect, 3738 copy=copy, 3739 **opts, 3740 )
3742 def distinct( 3743 self, *ons: t.Optional[ExpOrStr], distinct: bool = True, copy: bool = True 3744 ) -> Select: 3745 """ 3746 Set the OFFSET expression. 3747 3748 Example: 3749 >>> Select().from_("tbl").select("x").distinct().sql() 3750 'SELECT DISTINCT x FROM tbl' 3751 3752 Args: 3753 ons: the expressions to distinct on 3754 distinct: whether the Select should be distinct 3755 copy: if `False`, modify this expression instance in-place. 3756 3757 Returns: 3758 Select: the modified expression. 3759 """ 3760 instance = maybe_copy(self, copy) 3761 on = Tuple(expressions=[maybe_parse(on, copy=copy) for on in ons if on]) if ons else None 3762 instance.set("distinct", Distinct(on=on) if distinct else None) 3763 return instance
Set the OFFSET expression.
Example:
Arguments:
- ons: the expressions to distinct on
- distinct: whether the Select should be distinct
- copy: if
False, modify this expression instance in-place.
Returns:
Select: the modified expression.
3765 def ctas( 3766 self, 3767 table: ExpOrStr, 3768 properties: t.Optional[t.Dict] = None, 3769 dialect: DialectType = None, 3770 copy: bool = True, 3771 **opts, 3772 ) -> Create: 3773 """ 3774 Convert this expression to a CREATE TABLE AS statement. 3775 3776 Example: 3777 >>> Select().select("*").from_("tbl").ctas("x").sql() 3778 'CREATE TABLE x AS SELECT * FROM tbl' 3779 3780 Args: 3781 table: the SQL code string to parse as the table name. 3782 If another `Expression` instance is passed, it will be used as-is. 3783 properties: an optional mapping of table properties 3784 dialect: the dialect used to parse the input table. 3785 copy: if `False`, modify this expression instance in-place. 3786 opts: other options to use to parse the input table. 3787 3788 Returns: 3789 The new Create expression. 3790 """ 3791 instance = maybe_copy(self, copy) 3792 table_expression = maybe_parse(table, into=Table, dialect=dialect, **opts) 3793 3794 properties_expression = None 3795 if properties: 3796 properties_expression = Properties.from_dict(properties) 3797 3798 return Create( 3799 this=table_expression, 3800 kind="TABLE", 3801 expression=instance, 3802 properties=properties_expression, 3803 )
Convert this expression to a CREATE TABLE AS statement.
Example:
Arguments:
- table: the SQL code string to parse as the table name.
If another
Expressioninstance is passed, it will be used as-is. - properties: an optional mapping of table properties
- dialect: the dialect used to parse the input table.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input table.
Returns:
The new Create expression.
3805 def lock(self, update: bool = True, copy: bool = True) -> Select: 3806 """ 3807 Set the locking read mode for this expression. 3808 3809 Examples: 3810 >>> Select().select("x").from_("tbl").where("x = 'a'").lock().sql("mysql") 3811 "SELECT x FROM tbl WHERE x = 'a' FOR UPDATE" 3812 3813 >>> Select().select("x").from_("tbl").where("x = 'a'").lock(update=False).sql("mysql") 3814 "SELECT x FROM tbl WHERE x = 'a' FOR SHARE" 3815 3816 Args: 3817 update: if `True`, the locking type will be `FOR UPDATE`, else it will be `FOR SHARE`. 3818 copy: if `False`, modify this expression instance in-place. 3819 3820 Returns: 3821 The modified expression. 3822 """ 3823 inst = maybe_copy(self, copy) 3824 inst.set("locks", [Lock(update=update)]) 3825 3826 return inst
Set the locking read mode for this expression.
Examples:
Arguments:
- update: if
True, the locking type will beFOR UPDATE, else it will beFOR SHARE. - copy: if
False, modify this expression instance in-place.
Returns:
The modified expression.
3828 def hint(self, *hints: ExpOrStr, dialect: DialectType = None, copy: bool = True) -> Select: 3829 """ 3830 Set hints for this expression. 3831 3832 Examples: 3833 >>> Select().select("x").from_("tbl").hint("BROADCAST(y)").sql(dialect="spark") 3834 'SELECT /*+ BROADCAST(y) */ x FROM tbl' 3835 3836 Args: 3837 hints: The SQL code strings to parse as the hints. 3838 If an `Expression` instance is passed, it will be used as-is. 3839 dialect: The dialect used to parse the hints. 3840 copy: If `False`, modify this expression instance in-place. 3841 3842 Returns: 3843 The modified expression. 3844 """ 3845 inst = maybe_copy(self, copy) 3846 inst.set( 3847 "hint", Hint(expressions=[maybe_parse(h, copy=copy, dialect=dialect) for h in hints]) 3848 ) 3849 3850 return inst
Set hints for this expression.
Examples:
Arguments:
- hints: The SQL code strings to parse as the hints.
If an
Expressioninstance is passed, it will be used as-is. - dialect: The dialect used to parse the hints.
- copy: If
False, modify this expression instance in-place.
Returns:
The modified expression.
3852 @property 3853 def named_selects(self) -> t.List[str]: 3854 return [e.output_name for e in self.expressions if e.alias_or_name]
Returns the output names of the query's projections.
3856 @property 3857 def is_star(self) -> bool: 3858 return any(expression.is_star for expression in self.expressions)
Checks whether an expression is a star.
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3868class Subquery(DerivedTable, Query): 3869 arg_types = { 3870 "this": True, 3871 "alias": False, 3872 "with": False, 3873 **QUERY_MODIFIERS, 3874 } 3875 3876 def unnest(self): 3877 """Returns the first non subquery.""" 3878 expression = self 3879 while isinstance(expression, Subquery): 3880 expression = expression.this 3881 return expression 3882 3883 def unwrap(self) -> Subquery: 3884 expression = self 3885 while expression.same_parent and expression.is_wrapper: 3886 expression = t.cast(Subquery, expression.parent) 3887 return expression 3888 3889 def select( 3890 self, 3891 *expressions: t.Optional[ExpOrStr], 3892 append: bool = True, 3893 dialect: DialectType = None, 3894 copy: bool = True, 3895 **opts, 3896 ) -> Subquery: 3897 this = maybe_copy(self, copy) 3898 this.unnest().select(*expressions, append=append, dialect=dialect, copy=False, **opts) 3899 return this 3900 3901 @property 3902 def is_wrapper(self) -> bool: 3903 """ 3904 Whether this Subquery acts as a simple wrapper around another expression. 3905 3906 SELECT * FROM (((SELECT * FROM t))) 3907 ^ 3908 This corresponds to a "wrapper" Subquery node 3909 """ 3910 return all(v is None for k, v in self.args.items() if k != "this") 3911 3912 @property 3913 def is_star(self) -> bool: 3914 return self.this.is_star 3915 3916 @property 3917 def output_name(self) -> str: 3918 return self.alias
3876 def unnest(self): 3877 """Returns the first non subquery.""" 3878 expression = self 3879 while isinstance(expression, Subquery): 3880 expression = expression.this 3881 return expression
Returns the first non subquery.
3889 def select( 3890 self, 3891 *expressions: t.Optional[ExpOrStr], 3892 append: bool = True, 3893 dialect: DialectType = None, 3894 copy: bool = True, 3895 **opts, 3896 ) -> Subquery: 3897 this = maybe_copy(self, copy) 3898 this.unnest().select(*expressions, append=append, dialect=dialect, copy=False, **opts) 3899 return this
Append to or set the SELECT expressions.
Example:
>>> Select()select("x", "y").sql() 'SELECT x, y'
Arguments:
- *expressions: the SQL code strings to parse.
If an
Expressioninstance is passed, it will be used as-is. - append: if
True, add to any existing expressions. Otherwise, this resets the expressions. - dialect: the dialect used to parse the input expressions.
- copy: if
False, modify this expression instance in-place. - opts: other options to use to parse the input expressions.
Returns:
The modified Query expression.
3901 @property 3902 def is_wrapper(self) -> bool: 3903 """ 3904 Whether this Subquery acts as a simple wrapper around another expression. 3905 3906 SELECT * FROM (((SELECT * FROM t))) 3907 ^ 3908 This corresponds to a "wrapper" Subquery node 3909 """ 3910 return all(v is None for k, v in self.args.items() if k != "this")
Whether this Subquery acts as a simple wrapper around another expression.
SELECT * FROM (((SELECT * FROM t))) ^ This corresponds to a "wrapper" Subquery node
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- alias
- alias_column_names
- name
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3921class TableSample(Expression): 3922 arg_types = { 3923 "expressions": False, 3924 "method": False, 3925 "bucket_numerator": False, 3926 "bucket_denominator": False, 3927 "bucket_field": False, 3928 "percent": False, 3929 "rows": False, 3930 "size": False, 3931 "seed": False, 3932 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3935class Tag(Expression): 3936 """Tags are used for generating arbitrary sql like SELECT <span>x</span>.""" 3937 3938 arg_types = { 3939 "this": False, 3940 "prefix": False, 3941 "postfix": False, 3942 }
Tags are used for generating arbitrary sql like SELECT x.
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3947class Pivot(Expression): 3948 arg_types = { 3949 "this": False, 3950 "alias": False, 3951 "expressions": False, 3952 "field": False, 3953 "unpivot": False, 3954 "using": False, 3955 "group": False, 3956 "columns": False, 3957 "include_nulls": False, 3958 "default_on_null": False, 3959 } 3960 3961 @property 3962 def unpivot(self) -> bool: 3963 return bool(self.args.get("unpivot"))
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3966class Window(Condition): 3967 arg_types = { 3968 "this": True, 3969 "partition_by": False, 3970 "order": False, 3971 "spec": False, 3972 "alias": False, 3973 "over": False, 3974 "first": False, 3975 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3978class WindowSpec(Expression): 3979 arg_types = { 3980 "kind": False, 3981 "start": False, 3982 "start_side": False, 3983 "end": False, 3984 "end_side": False, 3985 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
3996class Star(Expression): 3997 arg_types = {"except": False, "replace": False, "rename": False} 3998 3999 @property 4000 def name(self) -> str: 4001 return "*" 4002 4003 @property 4004 def output_name(self) -> str: 4005 return self.name
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4016class Placeholder(Condition): 4017 arg_types = {"this": False, "kind": False} 4018 4019 @property 4020 def name(self) -> str: 4021 return self.this or "?"
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4024class Null(Condition): 4025 arg_types: t.Dict[str, t.Any] = {} 4026 4027 @property 4028 def name(self) -> str: 4029 return "NULL" 4030 4031 def to_py(self) -> Lit[None]: 4032 return None
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- is_int
- is_star
- alias
- alias_column_names
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4040class DataTypeParam(Expression): 4041 arg_types = {"this": True, "expression": False} 4042 4043 @property 4044 def name(self) -> str: 4045 return self.this.name
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4050class DataType(Expression): 4051 arg_types = { 4052 "this": True, 4053 "expressions": False, 4054 "nested": False, 4055 "values": False, 4056 "prefix": False, 4057 "kind": False, 4058 "nullable": False, 4059 } 4060 4061 class Type(AutoName): 4062 ARRAY = auto() 4063 AGGREGATEFUNCTION = auto() 4064 SIMPLEAGGREGATEFUNCTION = auto() 4065 BIGDECIMAL = auto() 4066 BIGINT = auto() 4067 BIGSERIAL = auto() 4068 BINARY = auto() 4069 BIT = auto() 4070 BOOLEAN = auto() 4071 BPCHAR = auto() 4072 CHAR = auto() 4073 DATE = auto() 4074 DATE32 = auto() 4075 DATEMULTIRANGE = auto() 4076 DATERANGE = auto() 4077 DATETIME = auto() 4078 DATETIME64 = auto() 4079 DECIMAL = auto() 4080 DECIMAL32 = auto() 4081 DECIMAL64 = auto() 4082 DECIMAL128 = auto() 4083 DOUBLE = auto() 4084 ENUM = auto() 4085 ENUM8 = auto() 4086 ENUM16 = auto() 4087 FIXEDSTRING = auto() 4088 FLOAT = auto() 4089 GEOGRAPHY = auto() 4090 GEOMETRY = auto() 4091 HLLSKETCH = auto() 4092 HSTORE = auto() 4093 IMAGE = auto() 4094 INET = auto() 4095 INT = auto() 4096 INT128 = auto() 4097 INT256 = auto() 4098 INT4MULTIRANGE = auto() 4099 INT4RANGE = auto() 4100 INT8MULTIRANGE = auto() 4101 INT8RANGE = auto() 4102 INTERVAL = auto() 4103 IPADDRESS = auto() 4104 IPPREFIX = auto() 4105 IPV4 = auto() 4106 IPV6 = auto() 4107 JSON = auto() 4108 JSONB = auto() 4109 LIST = auto() 4110 LONGBLOB = auto() 4111 LONGTEXT = auto() 4112 LOWCARDINALITY = auto() 4113 MAP = auto() 4114 MEDIUMBLOB = auto() 4115 MEDIUMINT = auto() 4116 MEDIUMTEXT = auto() 4117 MONEY = auto() 4118 NAME = auto() 4119 NCHAR = auto() 4120 NESTED = auto() 4121 NULL = auto() 4122 NULLABLE = auto() 4123 NUMMULTIRANGE = auto() 4124 NUMRANGE = auto() 4125 NVARCHAR = auto() 4126 OBJECT = auto() 4127 ROWVERSION = auto() 4128 SERIAL = auto() 4129 SET = auto() 4130 SMALLINT = auto() 4131 SMALLMONEY = auto() 4132 SMALLSERIAL = auto() 4133 STRUCT = auto() 4134 SUPER = auto() 4135 TEXT = auto() 4136 TINYBLOB = auto() 4137 TINYTEXT = auto() 4138 TIME = auto() 4139 TIMETZ = auto() 4140 TIMESTAMP = auto() 4141 TIMESTAMPNTZ = auto() 4142 TIMESTAMPLTZ = auto() 4143 TIMESTAMPTZ = auto() 4144 TIMESTAMP_S = auto() 4145 TIMESTAMP_MS = auto() 4146 TIMESTAMP_NS = auto() 4147 TINYINT = auto() 4148 TSMULTIRANGE = auto() 4149 TSRANGE = auto() 4150 TSTZMULTIRANGE = auto() 4151 TSTZRANGE = auto() 4152 UBIGINT = auto() 4153 UINT = auto() 4154 UINT128 = auto() 4155 UINT256 = auto() 4156 UMEDIUMINT = auto() 4157 UDECIMAL = auto() 4158 UNIQUEIDENTIFIER = auto() 4159 UNKNOWN = auto() # Sentinel value, useful for type annotation 4160 USERDEFINED = "USER-DEFINED" 4161 USMALLINT = auto() 4162 UTINYINT = auto() 4163 UUID = auto() 4164 VARBINARY = auto() 4165 VARCHAR = auto() 4166 VARIANT = auto() 4167 VECTOR = auto() 4168 XML = auto() 4169 YEAR = auto() 4170 TDIGEST = auto() 4171 4172 STRUCT_TYPES = { 4173 Type.NESTED, 4174 Type.OBJECT, 4175 Type.STRUCT, 4176 } 4177 4178 NESTED_TYPES = { 4179 *STRUCT_TYPES, 4180 Type.ARRAY, 4181 Type.MAP, 4182 } 4183 4184 TEXT_TYPES = { 4185 Type.CHAR, 4186 Type.NCHAR, 4187 Type.NVARCHAR, 4188 Type.TEXT, 4189 Type.VARCHAR, 4190 Type.NAME, 4191 } 4192 4193 SIGNED_INTEGER_TYPES = { 4194 Type.BIGINT, 4195 Type.INT, 4196 Type.INT128, 4197 Type.INT256, 4198 Type.MEDIUMINT, 4199 Type.SMALLINT, 4200 Type.TINYINT, 4201 } 4202 4203 UNSIGNED_INTEGER_TYPES = { 4204 Type.UBIGINT, 4205 Type.UINT, 4206 Type.UINT128, 4207 Type.UINT256, 4208 Type.UMEDIUMINT, 4209 Type.USMALLINT, 4210 Type.UTINYINT, 4211 } 4212 4213 INTEGER_TYPES = { 4214 *SIGNED_INTEGER_TYPES, 4215 *UNSIGNED_INTEGER_TYPES, 4216 Type.BIT, 4217 } 4218 4219 FLOAT_TYPES = { 4220 Type.DOUBLE, 4221 Type.FLOAT, 4222 } 4223 4224 REAL_TYPES = { 4225 *FLOAT_TYPES, 4226 Type.BIGDECIMAL, 4227 Type.DECIMAL, 4228 Type.DECIMAL32, 4229 Type.DECIMAL64, 4230 Type.DECIMAL128, 4231 Type.MONEY, 4232 Type.SMALLMONEY, 4233 Type.UDECIMAL, 4234 } 4235 4236 NUMERIC_TYPES = { 4237 *INTEGER_TYPES, 4238 *REAL_TYPES, 4239 } 4240 4241 TEMPORAL_TYPES = { 4242 Type.DATE, 4243 Type.DATE32, 4244 Type.DATETIME, 4245 Type.DATETIME64, 4246 Type.TIME, 4247 Type.TIMESTAMP, 4248 Type.TIMESTAMPNTZ, 4249 Type.TIMESTAMPLTZ, 4250 Type.TIMESTAMPTZ, 4251 Type.TIMESTAMP_MS, 4252 Type.TIMESTAMP_NS, 4253 Type.TIMESTAMP_S, 4254 Type.TIMETZ, 4255 } 4256 4257 @classmethod 4258 def build( 4259 cls, 4260 dtype: DATA_TYPE, 4261 dialect: DialectType = None, 4262 udt: bool = False, 4263 copy: bool = True, 4264 **kwargs, 4265 ) -> DataType: 4266 """ 4267 Constructs a DataType object. 4268 4269 Args: 4270 dtype: the data type of interest. 4271 dialect: the dialect to use for parsing `dtype`, in case it's a string. 4272 udt: when set to True, `dtype` will be used as-is if it can't be parsed into a 4273 DataType, thus creating a user-defined type. 4274 copy: whether to copy the data type. 4275 kwargs: additional arguments to pass in the constructor of DataType. 4276 4277 Returns: 4278 The constructed DataType object. 4279 """ 4280 from sqlglot import parse_one 4281 4282 if isinstance(dtype, str): 4283 if dtype.upper() == "UNKNOWN": 4284 return DataType(this=DataType.Type.UNKNOWN, **kwargs) 4285 4286 try: 4287 data_type_exp = parse_one( 4288 dtype, read=dialect, into=DataType, error_level=ErrorLevel.IGNORE 4289 ) 4290 except ParseError: 4291 if udt: 4292 return DataType(this=DataType.Type.USERDEFINED, kind=dtype, **kwargs) 4293 raise 4294 elif isinstance(dtype, DataType.Type): 4295 data_type_exp = DataType(this=dtype) 4296 elif isinstance(dtype, DataType): 4297 return maybe_copy(dtype, copy) 4298 else: 4299 raise ValueError(f"Invalid data type: {type(dtype)}. Expected str or DataType.Type") 4300 4301 return DataType(**{**data_type_exp.args, **kwargs}) 4302 4303 def is_type(self, *dtypes: DATA_TYPE, check_nullable: bool = False) -> bool: 4304 """ 4305 Checks whether this DataType matches one of the provided data types. Nested types or precision 4306 will be compared using "structural equivalence" semantics, so e.g. array<int> != array<float>. 4307 4308 Args: 4309 dtypes: the data types to compare this DataType to. 4310 check_nullable: whether to take the NULLABLE type constructor into account for the comparison. 4311 If false, it means that NULLABLE<INT> is equivalent to INT. 4312 4313 Returns: 4314 True, if and only if there is a type in `dtypes` which is equal to this DataType. 4315 """ 4316 if ( 4317 not check_nullable 4318 and self.this == DataType.Type.NULLABLE 4319 and len(self.expressions) == 1 4320 ): 4321 this_type = self.expressions[0] 4322 else: 4323 this_type = self 4324 4325 for dtype in dtypes: 4326 other_type = DataType.build(dtype, copy=False, udt=True) 4327 if ( 4328 not check_nullable 4329 and other_type.this == DataType.Type.NULLABLE 4330 and len(other_type.expressions) == 1 4331 ): 4332 other_type = other_type.expressions[0] 4333 4334 if ( 4335 other_type.expressions 4336 or this_type.this == DataType.Type.USERDEFINED 4337 or other_type.this == DataType.Type.USERDEFINED 4338 ): 4339 matches = this_type == other_type 4340 else: 4341 matches = this_type.this == other_type.this 4342 4343 if matches: 4344 return True 4345 return False
4257 @classmethod 4258 def build( 4259 cls, 4260 dtype: DATA_TYPE, 4261 dialect: DialectType = None, 4262 udt: bool = False, 4263 copy: bool = True, 4264 **kwargs, 4265 ) -> DataType: 4266 """ 4267 Constructs a DataType object. 4268 4269 Args: 4270 dtype: the data type of interest. 4271 dialect: the dialect to use for parsing `dtype`, in case it's a string. 4272 udt: when set to True, `dtype` will be used as-is if it can't be parsed into a 4273 DataType, thus creating a user-defined type. 4274 copy: whether to copy the data type. 4275 kwargs: additional arguments to pass in the constructor of DataType. 4276 4277 Returns: 4278 The constructed DataType object. 4279 """ 4280 from sqlglot import parse_one 4281 4282 if isinstance(dtype, str): 4283 if dtype.upper() == "UNKNOWN": 4284 return DataType(this=DataType.Type.UNKNOWN, **kwargs) 4285 4286 try: 4287 data_type_exp = parse_one( 4288 dtype, read=dialect, into=DataType, error_level=ErrorLevel.IGNORE 4289 ) 4290 except ParseError: 4291 if udt: 4292 return DataType(this=DataType.Type.USERDEFINED, kind=dtype, **kwargs) 4293 raise 4294 elif isinstance(dtype, DataType.Type): 4295 data_type_exp = DataType(this=dtype) 4296 elif isinstance(dtype, DataType): 4297 return maybe_copy(dtype, copy) 4298 else: 4299 raise ValueError(f"Invalid data type: {type(dtype)}. Expected str or DataType.Type") 4300 4301 return DataType(**{**data_type_exp.args, **kwargs})
Constructs a DataType object.
Arguments:
- dtype: the data type of interest.
- dialect: the dialect to use for parsing
dtype, in case it's a string. - udt: when set to True,
dtypewill be used as-is if it can't be parsed into a DataType, thus creating a user-defined type. - copy: whether to copy the data type.
- kwargs: additional arguments to pass in the constructor of DataType.
Returns:
The constructed DataType object.
4303 def is_type(self, *dtypes: DATA_TYPE, check_nullable: bool = False) -> bool: 4304 """ 4305 Checks whether this DataType matches one of the provided data types. Nested types or precision 4306 will be compared using "structural equivalence" semantics, so e.g. array<int> != array<float>. 4307 4308 Args: 4309 dtypes: the data types to compare this DataType to. 4310 check_nullable: whether to take the NULLABLE type constructor into account for the comparison. 4311 If false, it means that NULLABLE<INT> is equivalent to INT. 4312 4313 Returns: 4314 True, if and only if there is a type in `dtypes` which is equal to this DataType. 4315 """ 4316 if ( 4317 not check_nullable 4318 and self.this == DataType.Type.NULLABLE 4319 and len(self.expressions) == 1 4320 ): 4321 this_type = self.expressions[0] 4322 else: 4323 this_type = self 4324 4325 for dtype in dtypes: 4326 other_type = DataType.build(dtype, copy=False, udt=True) 4327 if ( 4328 not check_nullable 4329 and other_type.this == DataType.Type.NULLABLE 4330 and len(other_type.expressions) == 1 4331 ): 4332 other_type = other_type.expressions[0] 4333 4334 if ( 4335 other_type.expressions 4336 or this_type.this == DataType.Type.USERDEFINED 4337 or other_type.this == DataType.Type.USERDEFINED 4338 ): 4339 matches = this_type == other_type 4340 else: 4341 matches = this_type.this == other_type.this 4342 4343 if matches: 4344 return True 4345 return False
Checks whether this DataType matches one of the provided data types. Nested types or precision
will be compared using "structural equivalence" semantics, so e.g. array
Arguments:
- dtypes: the data types to compare this DataType to.
- check_nullable: whether to take the NULLABLE type constructor into account for the comparison.
If false, it means that NULLABLE
is equivalent to INT.
Returns:
True, if and only if there is a type in
dtypeswhich is equal to this DataType.
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4061 class Type(AutoName): 4062 ARRAY = auto() 4063 AGGREGATEFUNCTION = auto() 4064 SIMPLEAGGREGATEFUNCTION = auto() 4065 BIGDECIMAL = auto() 4066 BIGINT = auto() 4067 BIGSERIAL = auto() 4068 BINARY = auto() 4069 BIT = auto() 4070 BOOLEAN = auto() 4071 BPCHAR = auto() 4072 CHAR = auto() 4073 DATE = auto() 4074 DATE32 = auto() 4075 DATEMULTIRANGE = auto() 4076 DATERANGE = auto() 4077 DATETIME = auto() 4078 DATETIME64 = auto() 4079 DECIMAL = auto() 4080 DECIMAL32 = auto() 4081 DECIMAL64 = auto() 4082 DECIMAL128 = auto() 4083 DOUBLE = auto() 4084 ENUM = auto() 4085 ENUM8 = auto() 4086 ENUM16 = auto() 4087 FIXEDSTRING = auto() 4088 FLOAT = auto() 4089 GEOGRAPHY = auto() 4090 GEOMETRY = auto() 4091 HLLSKETCH = auto() 4092 HSTORE = auto() 4093 IMAGE = auto() 4094 INET = auto() 4095 INT = auto() 4096 INT128 = auto() 4097 INT256 = auto() 4098 INT4MULTIRANGE = auto() 4099 INT4RANGE = auto() 4100 INT8MULTIRANGE = auto() 4101 INT8RANGE = auto() 4102 INTERVAL = auto() 4103 IPADDRESS = auto() 4104 IPPREFIX = auto() 4105 IPV4 = auto() 4106 IPV6 = auto() 4107 JSON = auto() 4108 JSONB = auto() 4109 LIST = auto() 4110 LONGBLOB = auto() 4111 LONGTEXT = auto() 4112 LOWCARDINALITY = auto() 4113 MAP = auto() 4114 MEDIUMBLOB = auto() 4115 MEDIUMINT = auto() 4116 MEDIUMTEXT = auto() 4117 MONEY = auto() 4118 NAME = auto() 4119 NCHAR = auto() 4120 NESTED = auto() 4121 NULL = auto() 4122 NULLABLE = auto() 4123 NUMMULTIRANGE = auto() 4124 NUMRANGE = auto() 4125 NVARCHAR = auto() 4126 OBJECT = auto() 4127 ROWVERSION = auto() 4128 SERIAL = auto() 4129 SET = auto() 4130 SMALLINT = auto() 4131 SMALLMONEY = auto() 4132 SMALLSERIAL = auto() 4133 STRUCT = auto() 4134 SUPER = auto() 4135 TEXT = auto() 4136 TINYBLOB = auto() 4137 TINYTEXT = auto() 4138 TIME = auto() 4139 TIMETZ = auto() 4140 TIMESTAMP = auto() 4141 TIMESTAMPNTZ = auto() 4142 TIMESTAMPLTZ = auto() 4143 TIMESTAMPTZ = auto() 4144 TIMESTAMP_S = auto() 4145 TIMESTAMP_MS = auto() 4146 TIMESTAMP_NS = auto() 4147 TINYINT = auto() 4148 TSMULTIRANGE = auto() 4149 TSRANGE = auto() 4150 TSTZMULTIRANGE = auto() 4151 TSTZRANGE = auto() 4152 UBIGINT = auto() 4153 UINT = auto() 4154 UINT128 = auto() 4155 UINT256 = auto() 4156 UMEDIUMINT = auto() 4157 UDECIMAL = auto() 4158 UNIQUEIDENTIFIER = auto() 4159 UNKNOWN = auto() # Sentinel value, useful for type annotation 4160 USERDEFINED = "USER-DEFINED" 4161 USMALLINT = auto() 4162 UTINYINT = auto() 4163 UUID = auto() 4164 VARBINARY = auto() 4165 VARCHAR = auto() 4166 VARIANT = auto() 4167 VECTOR = auto() 4168 XML = auto() 4169 YEAR = auto() 4170 TDIGEST = auto()
An enumeration.
Inherited Members
- enum.Enum
- name
- value
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4396class Alter(Expression): 4397 arg_types = { 4398 "this": True, 4399 "kind": True, 4400 "actions": True, 4401 "exists": False, 4402 "only": False, 4403 "options": False, 4404 "cluster": False, 4405 "not_valid": False, 4406 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4423class Binary(Condition): 4424 arg_types = {"this": True, "expression": True} 4425 4426 @property 4427 def left(self) -> Expression: 4428 return self.this 4429 4430 @property 4431 def right(self) -> Expression: 4432 return self.expression
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4471class Div(Binary): 4472 arg_types = {"this": True, "expression": True, "typed": False, "safe": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4479class Dot(Binary): 4480 @property 4481 def is_star(self) -> bool: 4482 return self.expression.is_star 4483 4484 @property 4485 def name(self) -> str: 4486 return self.expression.name 4487 4488 @property 4489 def output_name(self) -> str: 4490 return self.name 4491 4492 @classmethod 4493 def build(self, expressions: t.Sequence[Expression]) -> Dot: 4494 """Build a Dot object with a sequence of expressions.""" 4495 if len(expressions) < 2: 4496 raise ValueError("Dot requires >= 2 expressions.") 4497 4498 return t.cast(Dot, reduce(lambda x, y: Dot(this=x, expression=y), expressions)) 4499 4500 @property 4501 def parts(self) -> t.List[Expression]: 4502 """Return the parts of a table / column in order catalog, db, table.""" 4503 this, *parts = self.flatten() 4504 4505 parts.reverse() 4506 4507 for arg in COLUMN_PARTS: 4508 part = this.args.get(arg) 4509 4510 if isinstance(part, Expression): 4511 parts.append(part) 4512 4513 parts.reverse() 4514 return parts
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
4492 @classmethod 4493 def build(self, expressions: t.Sequence[Expression]) -> Dot: 4494 """Build a Dot object with a sequence of expressions.""" 4495 if len(expressions) < 2: 4496 raise ValueError("Dot requires >= 2 expressions.") 4497 4498 return t.cast(Dot, reduce(lambda x, y: Dot(this=x, expression=y), expressions))
Build a Dot object with a sequence of expressions.
4500 @property 4501 def parts(self) -> t.List[Expression]: 4502 """Return the parts of a table / column in order catalog, db, table.""" 4503 this, *parts = self.flatten() 4504 4505 parts.reverse() 4506 4507 for arg in COLUMN_PARTS: 4508 part = this.args.get(arg) 4509 4510 if isinstance(part, Expression): 4511 parts.append(part) 4512 4513 parts.reverse() 4514 return parts
Return the parts of a table / column in order catalog, db, table.
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- alias
- alias_column_names
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Kwarg in special functions like func(kwarg => y).
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4637class Paren(Unary): 4638 @property 4639 def output_name(self) -> str: 4640 return self.this.name
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4643class Neg(Unary): 4644 def to_py(self) -> int | Decimal: 4645 if self.is_number: 4646 return self.this.to_py() * -1 4647 return super().to_py()
4644 def to_py(self) -> int | Decimal: 4645 if self.is_number: 4646 return self.this.to_py() * -1 4647 return super().to_py()
Returns a Python object equivalent of the SQL node.
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4650class Alias(Expression): 4651 arg_types = {"this": True, "alias": False} 4652 4653 @property 4654 def output_name(self) -> str: 4655 return self.alias
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4670class Aliases(Expression): 4671 arg_types = {"this": True, "expressions": True} 4672 4673 @property 4674 def aliases(self): 4675 return self.expressions
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4695class Bracket(Condition): 4696 # https://cloud.google.com/bigquery/docs/reference/standard-sql/operators#array_subscript_operator 4697 arg_types = { 4698 "this": True, 4699 "expressions": True, 4700 "offset": False, 4701 "safe": False, 4702 "returns_list_for_maps": False, 4703 } 4704 4705 @property 4706 def output_name(self) -> str: 4707 if len(self.expressions) == 1: 4708 return self.expressions[0].output_name 4709 4710 return super().output_name
4705 @property 4706 def output_name(self) -> str: 4707 if len(self.expressions) == 1: 4708 return self.expressions[0].output_name 4709 4710 return super().output_name
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4717class In(Predicate): 4718 arg_types = { 4719 "this": True, 4720 "expressions": False, 4721 "query": False, 4722 "unnest": False, 4723 "field": False, 4724 "is_global": False, 4725 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4733class TimeUnit(Expression): 4734 """Automatically converts unit arg into a var.""" 4735 4736 arg_types = {"unit": False} 4737 4738 UNABBREVIATED_UNIT_NAME = { 4739 "D": "DAY", 4740 "H": "HOUR", 4741 "M": "MINUTE", 4742 "MS": "MILLISECOND", 4743 "NS": "NANOSECOND", 4744 "Q": "QUARTER", 4745 "S": "SECOND", 4746 "US": "MICROSECOND", 4747 "W": "WEEK", 4748 "Y": "YEAR", 4749 } 4750 4751 VAR_LIKE = (Column, Literal, Var) 4752 4753 def __init__(self, **args): 4754 unit = args.get("unit") 4755 if isinstance(unit, self.VAR_LIKE): 4756 args["unit"] = Var( 4757 this=(self.UNABBREVIATED_UNIT_NAME.get(unit.name) or unit.name).upper() 4758 ) 4759 elif isinstance(unit, Week): 4760 unit.set("this", Var(this=unit.this.name.upper())) 4761 4762 super().__init__(**args) 4763 4764 @property 4765 def unit(self) -> t.Optional[Var | IntervalSpan]: 4766 return self.args.get("unit")
Automatically converts unit arg into a var.
4753 def __init__(self, **args): 4754 unit = args.get("unit") 4755 if isinstance(unit, self.VAR_LIKE): 4756 args["unit"] = Var( 4757 this=(self.UNABBREVIATED_UNIT_NAME.get(unit.name) or unit.name).upper() 4758 ) 4759 elif isinstance(unit, Week): 4760 unit.set("this", Var(this=unit.this.name.upper())) 4761 4762 super().__init__(**args)
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4769class IntervalOp(TimeUnit): 4770 arg_types = {"unit": True, "expression": True} 4771 4772 def interval(self): 4773 return Interval( 4774 this=self.expression.copy(), 4775 unit=self.unit.copy(), 4776 )
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4804class Func(Condition): 4805 """ 4806 The base class for all function expressions. 4807 4808 Attributes: 4809 is_var_len_args (bool): if set to True the last argument defined in arg_types will be 4810 treated as a variable length argument and the argument's value will be stored as a list. 4811 _sql_names (list): the SQL name (1st item in the list) and aliases (subsequent items) for this 4812 function expression. These values are used to map this node to a name during parsing as 4813 well as to provide the function's name during SQL string generation. By default the SQL 4814 name is set to the expression's class name transformed to snake case. 4815 """ 4816 4817 is_var_len_args = False 4818 4819 @classmethod 4820 def from_arg_list(cls, args): 4821 if cls.is_var_len_args: 4822 all_arg_keys = list(cls.arg_types) 4823 # If this function supports variable length argument treat the last argument as such. 4824 non_var_len_arg_keys = all_arg_keys[:-1] if cls.is_var_len_args else all_arg_keys 4825 num_non_var = len(non_var_len_arg_keys) 4826 4827 args_dict = {arg_key: arg for arg, arg_key in zip(args, non_var_len_arg_keys)} 4828 args_dict[all_arg_keys[-1]] = args[num_non_var:] 4829 else: 4830 args_dict = {arg_key: arg for arg, arg_key in zip(args, cls.arg_types)} 4831 4832 return cls(**args_dict) 4833 4834 @classmethod 4835 def sql_names(cls): 4836 if cls is Func: 4837 raise NotImplementedError( 4838 "SQL name is only supported by concrete function implementations" 4839 ) 4840 if "_sql_names" not in cls.__dict__: 4841 cls._sql_names = [camel_to_snake_case(cls.__name__)] 4842 return cls._sql_names 4843 4844 @classmethod 4845 def sql_name(cls): 4846 return cls.sql_names()[0] 4847 4848 @classmethod 4849 def default_parser_mappings(cls): 4850 return {name: cls.from_arg_list for name in cls.sql_names()}
The base class for all function expressions.
Attributes:
- is_var_len_args (bool): if set to True the last argument defined in arg_types will be treated as a variable length argument and the argument's value will be stored as a list.
- _sql_names (list): the SQL name (1st item in the list) and aliases (subsequent items) for this function expression. These values are used to map this node to a name during parsing as well as to provide the function's name during SQL string generation. By default the SQL name is set to the expression's class name transformed to snake case.
4819 @classmethod 4820 def from_arg_list(cls, args): 4821 if cls.is_var_len_args: 4822 all_arg_keys = list(cls.arg_types) 4823 # If this function supports variable length argument treat the last argument as such. 4824 non_var_len_arg_keys = all_arg_keys[:-1] if cls.is_var_len_args else all_arg_keys 4825 num_non_var = len(non_var_len_arg_keys) 4826 4827 args_dict = {arg_key: arg for arg, arg_key in zip(args, non_var_len_arg_keys)} 4828 args_dict[all_arg_keys[-1]] = args[num_non_var:] 4829 else: 4830 args_dict = {arg_key: arg for arg, arg_key in zip(args, cls.arg_types)} 4831 4832 return cls(**args_dict)
4834 @classmethod 4835 def sql_names(cls): 4836 if cls is Func: 4837 raise NotImplementedError( 4838 "SQL name is only supported by concrete function implementations" 4839 ) 4840 if "_sql_names" not in cls.__dict__: 4841 cls._sql_names = [camel_to_snake_case(cls.__name__)] 4842 return cls._sql_names
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4857class ParameterizedAgg(AggFunc): 4858 arg_types = {"this": True, "expressions": True, "params": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4865class ArgMax(AggFunc): 4866 arg_types = {"this": True, "expression": True, "count": False} 4867 _sql_names = ["ARG_MAX", "ARGMAX", "MAX_BY"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4870class ArgMin(AggFunc): 4871 arg_types = {"this": True, "expression": True, "count": False} 4872 _sql_names = ["ARG_MIN", "ARGMIN", "MIN_BY"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4875class ApproxTopK(AggFunc): 4876 arg_types = {"this": True, "expression": False, "counters": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4888class Anonymous(Func): 4889 arg_types = {"this": True, "expressions": False} 4890 is_var_len_args = True 4891 4892 @property 4893 def name(self) -> str: 4894 return self.this if isinstance(self.this, str) else self.this.name
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4897class AnonymousAggFunc(AggFunc): 4898 arg_types = {"this": True, "expressions": False} 4899 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4903class CombinedAggFunc(AnonymousAggFunc): 4904 arg_types = {"this": True, "expressions": False, "parts": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4907class CombinedParameterizedAgg(ParameterizedAgg): 4908 arg_types = {"this": True, "expressions": True, "params": True, "parts": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4913class Hll(AggFunc): 4914 arg_types = {"this": True, "expressions": False} 4915 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4918class ApproxDistinct(AggFunc): 4919 arg_types = {"this": True, "accuracy": False} 4920 _sql_names = ["APPROX_DISTINCT", "APPROX_COUNT_DISTINCT"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4923class Array(Func): 4924 arg_types = {"expressions": False, "bracket_notation": False} 4925 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4940class Pad(Func): 4941 arg_types = {"this": True, "expression": True, "fill_pattern": False, "is_left": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4952class ToNumber(Func): 4953 arg_types = { 4954 "this": True, 4955 "format": False, 4956 "nlsparam": False, 4957 "precision": False, 4958 "scale": False, 4959 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4967class ConvertTimezone(Func): 4968 arg_types = {"source_tz": False, "target_tz": True, "timestamp": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4971class GenerateSeries(Func): 4972 arg_types = {"start": True, "end": True, "step": False, "is_end_exclusive": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
4999class ArrayConcat(Func): 5000 _sql_names = ["ARRAY_CONCAT", "ARRAY_CAT"] 5001 arg_types = {"this": True, "expressions": False} 5002 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5005class ArrayConstructCompact(Func): 5006 arg_types = {"expressions": True} 5007 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5018class ArrayFilter(Func): 5019 arg_types = {"this": True, "expression": True} 5020 _sql_names = ["FILTER", "ARRAY_FILTER"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5023class ArrayToString(Func): 5024 arg_types = {"this": True, "expression": True, "null": False} 5025 _sql_names = ["ARRAY_TO_STRING", "ARRAY_JOIN"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5028class StringToArray(Func): 5029 arg_types = {"this": True, "expression": True, "null": False} 5030 _sql_names = ["STRING_TO_ARRAY", "SPLIT_BY_STRING"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5037class ArraySize(Func): 5038 arg_types = {"this": True, "expression": False} 5039 _sql_names = ["ARRAY_SIZE", "ARRAY_LENGTH"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5092class Case(Func): 5093 arg_types = {"this": False, "ifs": True, "default": False} 5094 5095 def when(self, condition: ExpOrStr, then: ExpOrStr, copy: bool = True, **opts) -> Case: 5096 instance = maybe_copy(self, copy) 5097 instance.append( 5098 "ifs", 5099 If( 5100 this=maybe_parse(condition, copy=copy, **opts), 5101 true=maybe_parse(then, copy=copy, **opts), 5102 ), 5103 ) 5104 return instance 5105 5106 def else_(self, condition: ExpOrStr, copy: bool = True, **opts) -> Case: 5107 instance = maybe_copy(self, copy) 5108 instance.set("default", maybe_parse(condition, copy=copy, **opts)) 5109 return instance
5095 def when(self, condition: ExpOrStr, then: ExpOrStr, copy: bool = True, **opts) -> Case: 5096 instance = maybe_copy(self, copy) 5097 instance.append( 5098 "ifs", 5099 If( 5100 this=maybe_parse(condition, copy=copy, **opts), 5101 true=maybe_parse(then, copy=copy, **opts), 5102 ), 5103 ) 5104 return instance
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5112class Cast(Func): 5113 arg_types = { 5114 "this": True, 5115 "to": True, 5116 "format": False, 5117 "safe": False, 5118 "action": False, 5119 } 5120 5121 @property 5122 def name(self) -> str: 5123 return self.this.name 5124 5125 @property 5126 def to(self) -> DataType: 5127 return self.args["to"] 5128 5129 @property 5130 def output_name(self) -> str: 5131 return self.name 5132 5133 def is_type(self, *dtypes: DATA_TYPE) -> bool: 5134 """ 5135 Checks whether this Cast's DataType matches one of the provided data types. Nested types 5136 like arrays or structs will be compared using "structural equivalence" semantics, so e.g. 5137 array<int> != array<float>. 5138 5139 Args: 5140 dtypes: the data types to compare this Cast's DataType to. 5141 5142 Returns: 5143 True, if and only if there is a type in `dtypes` which is equal to this Cast's DataType. 5144 """ 5145 return self.to.is_type(*dtypes)
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
5133 def is_type(self, *dtypes: DATA_TYPE) -> bool: 5134 """ 5135 Checks whether this Cast's DataType matches one of the provided data types. Nested types 5136 like arrays or structs will be compared using "structural equivalence" semantics, so e.g. 5137 array<int> != array<float>. 5138 5139 Args: 5140 dtypes: the data types to compare this Cast's DataType to. 5141 5142 Returns: 5143 True, if and only if there is a type in `dtypes` which is equal to this Cast's DataType. 5144 """ 5145 return self.to.is_type(*dtypes)
Checks whether this Cast's DataType matches one of the provided data types. Nested types
like arrays or structs will be compared using "structural equivalence" semantics, so e.g.
array
Arguments:
- dtypes: the data types to compare this Cast's DataType to.
Returns:
True, if and only if there is a type in
dtypeswhich is equal to this Cast's DataType.
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- alias_or_name
- type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- alias_or_name
- type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5164class Ceil(Func): 5165 arg_types = {"this": True, "decimals": False} 5166 _sql_names = ["CEIL", "CEILING"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5169class Coalesce(Func): 5170 arg_types = {"this": True, "expressions": False, "is_nvl": False} 5171 is_var_len_args = True 5172 _sql_names = ["COALESCE", "IFNULL", "NVL"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5175class Chr(Func): 5176 arg_types = {"this": True, "charset": False, "expressions": False} 5177 is_var_len_args = True 5178 _sql_names = ["CHR", "CHAR"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5181class Concat(Func): 5182 arg_types = {"expressions": True, "safe": False, "coalesce": False} 5183 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5195class Count(AggFunc): 5196 arg_types = {"this": False, "expressions": False, "big_int": False} 5197 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5229class DateAdd(Func, IntervalOp): 5230 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5233class DateSub(Func, IntervalOp): 5234 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5237class DateDiff(Func, TimeUnit): 5238 _sql_names = ["DATEDIFF", "DATE_DIFF"] 5239 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5242class DateTrunc(Func): 5243 arg_types = {"unit": True, "this": True, "zone": False} 5244 5245 def __init__(self, **args): 5246 unit = args.get("unit") 5247 if isinstance(unit, TimeUnit.VAR_LIKE): 5248 args["unit"] = Literal.string( 5249 (TimeUnit.UNABBREVIATED_UNIT_NAME.get(unit.name) or unit.name).upper() 5250 ) 5251 elif isinstance(unit, Week): 5252 unit.set("this", Literal.string(unit.this.name.upper())) 5253 5254 super().__init__(**args) 5255 5256 @property 5257 def unit(self) -> Expression: 5258 return self.args["unit"]
5245 def __init__(self, **args): 5246 unit = args.get("unit") 5247 if isinstance(unit, TimeUnit.VAR_LIKE): 5248 args["unit"] = Literal.string( 5249 (TimeUnit.UNABBREVIATED_UNIT_NAME.get(unit.name) or unit.name).upper() 5250 ) 5251 elif isinstance(unit, Week): 5252 unit.set("this", Literal.string(unit.this.name.upper())) 5253 5254 super().__init__(**args)
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5267class DatetimeAdd(Func, IntervalOp): 5268 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5271class DatetimeSub(Func, IntervalOp): 5272 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5275class DatetimeDiff(Func, TimeUnit): 5276 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5279class DatetimeTrunc(Func, TimeUnit): 5280 arg_types = {"this": True, "unit": True, "zone": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5309class MonthsBetween(Func): 5310 arg_types = {"this": True, "expression": True, "roundoff": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5313class LastDay(Func, TimeUnit): 5314 _sql_names = ["LAST_DAY", "LAST_DAY_OF_MONTH"] 5315 arg_types = {"this": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5326class TimestampAdd(Func, TimeUnit): 5327 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5330class TimestampSub(Func, TimeUnit): 5331 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5334class TimestampDiff(Func, TimeUnit): 5335 _sql_names = ["TIMESTAMPDIFF", "TIMESTAMP_DIFF"] 5336 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5339class TimestampTrunc(Func, TimeUnit): 5340 arg_types = {"this": True, "unit": True, "zone": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5343class TimeAdd(Func, TimeUnit): 5344 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5347class TimeSub(Func, TimeUnit): 5348 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5351class TimeDiff(Func, TimeUnit): 5352 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5359class DateFromParts(Func): 5360 _sql_names = ["DATE_FROM_PARTS", "DATEFROMPARTS"] 5361 arg_types = {"year": True, "month": True, "day": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5364class TimeFromParts(Func): 5365 _sql_names = ["TIME_FROM_PARTS", "TIMEFROMPARTS"] 5366 arg_types = { 5367 "hour": True, 5368 "min": True, 5369 "sec": True, 5370 "nano": False, 5371 "fractions": False, 5372 "precision": False, 5373 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5389class Date(Func): 5390 arg_types = {"this": False, "zone": False, "expressions": False} 5391 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5415class Explode(Func): 5416 arg_types = {"this": True, "expressions": False} 5417 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5437class Unnest(Func, UDTF): 5438 arg_types = { 5439 "expressions": True, 5440 "alias": False, 5441 "offset": False, 5442 "explode_array": False, 5443 } 5444 5445 @property 5446 def selects(self) -> t.List[Expression]: 5447 columns = super().selects 5448 offset = self.args.get("offset") 5449 if offset: 5450 columns = columns + [to_identifier("offset") if offset is True else offset] 5451 return columns
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5471class GapFill(Func): 5472 arg_types = { 5473 "this": True, 5474 "ts_column": True, 5475 "bucket_width": True, 5476 "partitioning_columns": False, 5477 "value_columns": False, 5478 "origin": False, 5479 "ignore_nulls": False, 5480 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5493class Greatest(Func): 5494 arg_types = {"this": True, "expressions": False} 5495 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5510class Xor(Connector, Func): 5511 arg_types = {"this": False, "expression": False, "expressions": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5514class If(Func): 5515 arg_types = {"this": True, "true": True, "false": False} 5516 _sql_names = ["IF", "IIF"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5540class JSONPath(Expression): 5541 arg_types = {"expressions": True} 5542 5543 @property 5544 def output_name(self) -> str: 5545 last_segment = self.expressions[-1].this 5546 return last_segment if isinstance(last_segment, str) else ""
5543 @property 5544 def output_name(self) -> str: 5545 last_segment = self.expressions[-1].this 5546 return last_segment if isinstance(last_segment, str) else ""
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5573class JSONPathSlice(JSONPathPart): 5574 arg_types = {"start": False, "end": False, "step": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5601class JSONObject(Func): 5602 arg_types = { 5603 "expressions": False, 5604 "null_handling": False, 5605 "unique_keys": False, 5606 "return_type": False, 5607 "encoding": False, 5608 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5611class JSONObjectAgg(AggFunc): 5612 arg_types = { 5613 "expressions": False, 5614 "null_handling": False, 5615 "unique_keys": False, 5616 "return_type": False, 5617 "encoding": False, 5618 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5622class JSONArray(Func): 5623 arg_types = { 5624 "expressions": True, 5625 "null_handling": False, 5626 "return_type": False, 5627 "strict": False, 5628 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5632class JSONArrayAgg(Func): 5633 arg_types = { 5634 "this": True, 5635 "order": False, 5636 "null_handling": False, 5637 "return_type": False, 5638 "strict": False, 5639 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5642class JSONExists(Func): 5643 arg_types = {"this": True, "path": True, "passing": False, "on_condition": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5648class JSONColumnDef(Expression): 5649 arg_types = {"this": False, "kind": False, "path": False, "nested_schema": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5657class JSONValue(Expression): 5658 arg_types = { 5659 "this": True, 5660 "path": True, 5661 "returning": False, 5662 "on_condition": False, 5663 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5667class JSONTable(Func): 5668 arg_types = { 5669 "this": True, 5670 "schema": True, 5671 "path": False, 5672 "error_handling": False, 5673 "empty_handling": False, 5674 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5678class ObjectInsert(Func): 5679 arg_types = { 5680 "this": True, 5681 "key": True, 5682 "value": True, 5683 "update_flag": False, 5684 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5687class OpenJSONColumnDef(Expression): 5688 arg_types = {"this": True, "kind": True, "path": False, "as_json": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5699class JSONExtract(Binary, Func): 5700 arg_types = { 5701 "this": True, 5702 "expression": True, 5703 "only_json_types": False, 5704 "expressions": False, 5705 "variant_extract": False, 5706 } 5707 _sql_names = ["JSON_EXTRACT"] 5708 is_var_len_args = True 5709 5710 @property 5711 def output_name(self) -> str: 5712 return self.expression.output_name if not self.expressions else ""
5710 @property 5711 def output_name(self) -> str: 5712 return self.expression.output_name if not self.expressions else ""
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5715class JSONExtractScalar(Binary, Func): 5716 arg_types = {"this": True, "expression": True, "only_json_types": False, "expressions": False} 5717 _sql_names = ["JSON_EXTRACT_SCALAR"] 5718 is_var_len_args = True 5719 5720 @property 5721 def output_name(self) -> str: 5722 return self.expression.output_name
Name of the output column if this expression is a selection.
If the Expression has no output name, an empty string is returned.
Example:
>>> from sqlglot import parse_one >>> parse_one("SELECT a")sqlglot.expressions[0].output_name 'a' >>> parse_one("SELECT b AS c")sqlglot.expressions[0].output_name 'c' >>> parse_one("SELECT 1 + 2")sqlglot.expressions[0].output_name ''
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5733class JSONFormat(Func): 5734 arg_types = {"this": False, "options": False} 5735 _sql_names = ["JSON_FORMAT"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5743class ParseJSON(Func): 5744 # BigQuery, Snowflake have PARSE_JSON, Presto has JSON_PARSE 5745 # Snowflake also has TRY_PARSE_JSON, which is represented using `safe` 5746 _sql_names = ["PARSE_JSON", "JSON_PARSE"] 5747 arg_types = {"this": True, "expression": False, "safe": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5750class Least(Func): 5751 arg_types = {"this": True, "expressions": False} 5752 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5763class Length(Func): 5764 arg_types = {"this": True, "binary": False} 5765 _sql_names = ["LENGTH", "LEN"]
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5768class Levenshtein(Func): 5769 arg_types = { 5770 "this": True, 5771 "expression": False, 5772 "ins_cost": False, 5773 "del_cost": False, 5774 "sub_cost": False, 5775 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5798class Map(Func): 5799 arg_types = {"keys": False, "values": False} 5800 5801 @property 5802 def keys(self) -> t.List[Expression]: 5803 keys = self.args.get("keys") 5804 return keys.expressions if keys else [] 5805 5806 @property 5807 def values(self) -> t.List[Expression]: 5808 values = self.args.get("values") 5809 return values.expressions if values else []
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5834class VarMap(Func): 5835 arg_types = {"keys": True, "values": True} 5836 is_var_len_args = True 5837 5838 @property 5839 def keys(self) -> t.List[Expression]: 5840 return self.args["keys"].expressions 5841 5842 @property 5843 def values(self) -> t.List[Expression]: 5844 return self.args["values"].expressions
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5848class MatchAgainst(Func): 5849 arg_types = {"this": True, "expressions": True, "modifier": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5852class Max(AggFunc): 5853 arg_types = {"this": True, "expressions": False} 5854 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5866class Min(AggFunc): 5867 arg_types = {"this": True, "expressions": False} 5868 is_var_len_args = True
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5888class Predict(Func): 5889 arg_types = {"this": True, "expression": True, "params_struct": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5908class ApproxQuantile(Quantile): 5909 arg_types = {"this": True, "quantile": True, "accuracy": False, "weight": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5918class Rand(Func): 5919 _sql_names = ["RAND", "RANDOM"] 5920 arg_types = {"this": False, "lower": False, "upper": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5931class ReadCSV(Func): 5932 _sql_names = ["READ_CSV"] 5933 is_var_len_args = True 5934 arg_types = {"this": True, "expressions": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5937class Reduce(Func): 5938 arg_types = {"this": True, "initial": True, "merge": True, "finish": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5941class RegexpExtract(Func): 5942 arg_types = { 5943 "this": True, 5944 "expression": True, 5945 "position": False, 5946 "occurrence": False, 5947 "parameters": False, 5948 "group": False, 5949 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5952class RegexpReplace(Func): 5953 arg_types = { 5954 "this": True, 5955 "expression": True, 5956 "replacement": False, 5957 "position": False, 5958 "occurrence": False, 5959 "modifiers": False, 5960 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5963class RegexpLike(Binary, Func): 5964 arg_types = {"this": True, "expression": True, "flag": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
5967class RegexpILike(Binary, Func): 5968 arg_types = {"this": True, "expression": True, "flag": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6026class StartsWith(Func): 6027 _sql_names = ["STARTS_WITH", "STARTSWITH"] 6028 arg_types = {"this": True, "expression": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6031class StrPosition(Func): 6032 arg_types = { 6033 "this": True, 6034 "substr": True, 6035 "position": False, 6036 "instance": False, 6037 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6044class StrToTime(Func): 6045 arg_types = {"this": True, "format": True, "zone": False, "safe": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6056class StrToMap(Func): 6057 arg_types = { 6058 "this": True, 6059 "pair_delim": False, 6060 "key_value_delim": False, 6061 "duplicate_resolution_callback": False, 6062 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6084class Stuff(Func): 6085 _sql_names = ["STUFF", "INSERT"] 6086 arg_types = {"this": True, "start": True, "length": True, "expression": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6114class TimeToStr(Func): 6115 arg_types = {"this": True, "format": True, "culture": False, "zone": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6138class Trim(Func): 6139 arg_types = { 6140 "this": True, 6141 "expression": False, 6142 "position": False, 6143 "collation": False, 6144 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6147class TsOrDsAdd(Func, TimeUnit): 6148 # return_type is used to correctly cast the arguments of this expression when transpiling it 6149 arg_types = {"this": True, "expression": True, "unit": False, "return_type": False} 6150 6151 @property 6152 def return_type(self) -> DataType: 6153 return DataType.build(self.args.get("return_type") or DataType.Type.DATE)
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6156class TsOrDsDiff(Func, TimeUnit): 6157 arg_types = {"this": True, "expression": True, "unit": False}
Inherited Members
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6195class UnixToTime(Func): 6196 arg_types = { 6197 "this": True, 6198 "scale": False, 6199 "zone": False, 6200 "hours": False, 6201 "minutes": False, 6202 "format": False, 6203 } 6204 6205 SECONDS = Literal.number(0) 6206 DECIS = Literal.number(1) 6207 CENTIS = Literal.number(2) 6208 MILLIS = Literal.number(3) 6209 DECIMILLIS = Literal.number(4) 6210 CENTIMILLIS = Literal.number(5) 6211 MICROS = Literal.number(6) 6212 DECIMICROS = Literal.number(7) 6213 CENTIMICROS = Literal.number(8) 6214 NANOS = Literal.number(9)
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6221class TimestampFromParts(Func): 6222 _sql_names = ["TIMESTAMP_FROM_PARTS", "TIMESTAMPFROMPARTS"] 6223 arg_types = { 6224 "year": True, 6225 "month": True, 6226 "day": True, 6227 "hour": True, 6228 "min": True, 6229 "sec": True, 6230 "nano": False, 6231 "zone": False, 6232 "milli": False, 6233 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6264class XMLTable(Func): 6265 arg_types = {"this": True, "passing": False, "columns": False, "by_ref": False}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- arg_types
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6276class Merge(Expression): 6277 arg_types = { 6278 "this": True, 6279 "using": True, 6280 "on": True, 6281 "expressions": True, 6282 "with": False, 6283 }
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6286class When(Func): 6287 arg_types = {"matched": True, "source": False, "condition": False, "then": True}
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
Inherited Members
- Expression
- Expression
- args
- parent
- arg_key
- index
- comments
- hashable_args
- this
- expression
- expressions
- text
- is_string
- is_number
- to_py
- is_int
- is_star
- alias
- alias_column_names
- name
- alias_or_name
- output_name
- type
- is_type
- is_leaf
- meta
- copy
- add_comments
- pop_comments
- append
- set
- depth
- iter_expressions
- find
- find_all
- find_ancestor
- parent_select
- same_parent
- root
- walk
- dfs
- bfs
- unnest
- unalias
- unnest_operands
- flatten
- to_s
- sql
- transform
- replace
- pop
- assert_is
- error_messages
- dump
- load
- and_
- or_
- not_
- as_
- isin
- between
- is_
- like
- ilike
- eq
- neq
- rlike
- div
- asc
- desc
6339def maybe_parse( 6340 sql_or_expression: ExpOrStr, 6341 *, 6342 into: t.Optional[IntoType] = None, 6343 dialect: DialectType = None, 6344 prefix: t.Optional[str] = None, 6345 copy: bool = False, 6346 **opts, 6347) -> Expression: 6348 """Gracefully handle a possible string or expression. 6349 6350 Example: 6351 >>> maybe_parse("1") 6352 Literal(this=1, is_string=False) 6353 >>> maybe_parse(to_identifier("x")) 6354 Identifier(this=x, quoted=False) 6355 6356 Args: 6357 sql_or_expression: the SQL code string or an expression 6358 into: the SQLGlot Expression to parse into 6359 dialect: the dialect used to parse the input expressions (in the case that an 6360 input expression is a SQL string). 6361 prefix: a string to prefix the sql with before it gets parsed 6362 (automatically includes a space) 6363 copy: whether to copy the expression. 6364 **opts: other options to use to parse the input expressions (again, in the case 6365 that an input expression is a SQL string). 6366 6367 Returns: 6368 Expression: the parsed or given expression. 6369 """ 6370 if isinstance(sql_or_expression, Expression): 6371 if copy: 6372 return sql_or_expression.copy() 6373 return sql_or_expression 6374 6375 if sql_or_expression is None: 6376 raise ParseError("SQL cannot be None") 6377 6378 import sqlglot 6379 6380 sql = str(sql_or_expression) 6381 if prefix: 6382 sql = f"{prefix} {sql}" 6383 6384 return sqlglot.parse_one(sql, read=dialect, into=into, **opts)
Gracefully handle a possible string or expression.
Example:
>>> maybe_parse("1") Literal(this=1, is_string=False) >>> maybe_parse(to_identifier("x")) Identifier(this=x, quoted=False)
Arguments:
- sql_or_expression: the SQL code string or an expression
- into: the SQLGlot Expression to parse into
- dialect: the dialect used to parse the input expressions (in the case that an input expression is a SQL string).
- prefix: a string to prefix the sql with before it gets parsed (automatically includes a space)
- copy: whether to copy the expression.
- **opts: other options to use to parse the input expressions (again, in the case that an input expression is a SQL string).
Returns:
Expression: the parsed or given expression.
6617def union( 6618 left: ExpOrStr, 6619 right: ExpOrStr, 6620 distinct: bool = True, 6621 dialect: DialectType = None, 6622 copy: bool = True, 6623 **opts, 6624) -> Union: 6625 """ 6626 Initializes a syntax tree from one UNION expression. 6627 6628 Example: 6629 >>> union("SELECT * FROM foo", "SELECT * FROM bla").sql() 6630 'SELECT * FROM foo UNION SELECT * FROM bla' 6631 6632 Args: 6633 left: the SQL code string corresponding to the left-hand side. 6634 If an `Expression` instance is passed, it will be used as-is. 6635 right: the SQL code string corresponding to the right-hand side. 6636 If an `Expression` instance is passed, it will be used as-is. 6637 distinct: set the DISTINCT flag if and only if this is true. 6638 dialect: the dialect used to parse the input expression. 6639 copy: whether to copy the expression. 6640 opts: other options to use to parse the input expressions. 6641 6642 Returns: 6643 The new Union instance. 6644 """ 6645 left = maybe_parse(sql_or_expression=left, dialect=dialect, copy=copy, **opts) 6646 right = maybe_parse(sql_or_expression=right, dialect=dialect, copy=copy, **opts) 6647 6648 return Union(this=left, expression=right, distinct=distinct)
Initializes a syntax tree from one UNION expression.
Example:
>>> union("SELECT * FROM foo", "SELECT * FROM bla").sql() 'SELECT * FROM foo UNION SELECT * FROM bla'
Arguments:
- left: the SQL code string corresponding to the left-hand side.
If an
Expressioninstance is passed, it will be used as-is. - right: the SQL code string corresponding to the right-hand side.
If an
Expressioninstance is passed, it will be used as-is. - distinct: set the DISTINCT flag if and only if this is true.
- dialect: the dialect used to parse the input expression.
- copy: whether to copy the expression.
- opts: other options to use to parse the input expressions.
Returns:
The new Union instance.
6651def intersect( 6652 left: ExpOrStr, 6653 right: ExpOrStr, 6654 distinct: bool = True, 6655 dialect: DialectType = None, 6656 copy: bool = True, 6657 **opts, 6658) -> Intersect: 6659 """ 6660 Initializes a syntax tree from one INTERSECT expression. 6661 6662 Example: 6663 >>> intersect("SELECT * FROM foo", "SELECT * FROM bla").sql() 6664 'SELECT * FROM foo INTERSECT SELECT * FROM bla' 6665 6666 Args: 6667 left: the SQL code string corresponding to the left-hand side. 6668 If an `Expression` instance is passed, it will be used as-is. 6669 right: the SQL code string corresponding to the right-hand side. 6670 If an `Expression` instance is passed, it will be used as-is. 6671 distinct: set the DISTINCT flag if and only if this is true. 6672 dialect: the dialect used to parse the input expression. 6673 copy: whether to copy the expression. 6674 opts: other options to use to parse the input expressions. 6675 6676 Returns: 6677 The new Intersect instance. 6678 """ 6679 left = maybe_parse(sql_or_expression=left, dialect=dialect, copy=copy, **opts) 6680 right = maybe_parse(sql_or_expression=right, dialect=dialect, copy=copy, **opts) 6681 6682 return Intersect(this=left, expression=right, distinct=distinct)
Initializes a syntax tree from one INTERSECT expression.
Example:
>>> intersect("SELECT * FROM foo", "SELECT * FROM bla").sql() 'SELECT * FROM foo INTERSECT SELECT * FROM bla'
Arguments:
- left: the SQL code string corresponding to the left-hand side.
If an
Expressioninstance is passed, it will be used as-is. - right: the SQL code string corresponding to the right-hand side.
If an
Expressioninstance is passed, it will be used as-is. - distinct: set the DISTINCT flag if and only if this is true.
- dialect: the dialect used to parse the input expression.
- copy: whether to copy the expression.
- opts: other options to use to parse the input expressions.
Returns:
The new Intersect instance.
6685def except_( 6686 left: ExpOrStr, 6687 right: ExpOrStr, 6688 distinct: bool = True, 6689 dialect: DialectType = None, 6690 copy: bool = True, 6691 **opts, 6692) -> Except: 6693 """ 6694 Initializes a syntax tree from one EXCEPT expression. 6695 6696 Example: 6697 >>> except_("SELECT * FROM foo", "SELECT * FROM bla").sql() 6698 'SELECT * FROM foo EXCEPT SELECT * FROM bla' 6699 6700 Args: 6701 left: the SQL code string corresponding to the left-hand side. 6702 If an `Expression` instance is passed, it will be used as-is. 6703 right: the SQL code string corresponding to the right-hand side. 6704 If an `Expression` instance is passed, it will be used as-is. 6705 distinct: set the DISTINCT flag if and only if this is true. 6706 dialect: the dialect used to parse the input expression. 6707 copy: whether to copy the expression. 6708 opts: other options to use to parse the input expressions. 6709 6710 Returns: 6711 The new Except instance. 6712 """ 6713 left = maybe_parse(sql_or_expression=left, dialect=dialect, copy=copy, **opts) 6714 right = maybe_parse(sql_or_expression=right, dialect=dialect, copy=copy, **opts) 6715 6716 return Except(this=left, expression=right, distinct=distinct)
Initializes a syntax tree from one EXCEPT expression.
Example:
>>> except_("SELECT * FROM foo", "SELECT * FROM bla").sql() 'SELECT * FROM foo EXCEPT SELECT * FROM bla'
Arguments:
- left: the SQL code string corresponding to the left-hand side.
If an
Expressioninstance is passed, it will be used as-is. - right: the SQL code string corresponding to the right-hand side.
If an
Expressioninstance is passed, it will be used as-is. - distinct: set the DISTINCT flag if and only if this is true.
- dialect: the dialect used to parse the input expression.
- copy: whether to copy the expression.
- opts: other options to use to parse the input expressions.
Returns:
The new Except instance.
6719def select(*expressions: ExpOrStr, dialect: DialectType = None, **opts) -> Select: 6720 """ 6721 Initializes a syntax tree from one or multiple SELECT expressions. 6722 6723 Example: 6724 >>> select("col1", "col2").from_("tbl").sql() 6725 'SELECT col1, col2 FROM tbl' 6726 6727 Args: 6728 *expressions: the SQL code string to parse as the expressions of a 6729 SELECT statement. If an Expression instance is passed, this is used as-is. 6730 dialect: the dialect used to parse the input expressions (in the case that an 6731 input expression is a SQL string). 6732 **opts: other options to use to parse the input expressions (again, in the case 6733 that an input expression is a SQL string). 6734 6735 Returns: 6736 Select: the syntax tree for the SELECT statement. 6737 """ 6738 return Select().select(*expressions, dialect=dialect, **opts)
Initializes a syntax tree from one or multiple SELECT expressions.
Example:
>>> select("col1", "col2")from_("tbl").sql() 'SELECT col1, col2 FROM tbl'
Arguments:
- *expressions: the SQL code string to parse as the expressions of a SELECT statement. If an Expression instance is passed, this is used as-is.
- dialect: the dialect used to parse the input expressions (in the case that an input expression is a SQL string).
- **opts: other options to use to parse the input expressions (again, in the case that an input expression is a SQL string).
Returns:
Select: the syntax tree for the SELECT statement.
6741def from_(expression: ExpOrStr, dialect: DialectType = None, **opts) -> Select: 6742 """ 6743 Initializes a syntax tree from a FROM expression. 6744 6745 Example: 6746 >>> from_("tbl").select("col1", "col2").sql() 6747 'SELECT col1, col2 FROM tbl' 6748 6749 Args: 6750 *expression: the SQL code string to parse as the FROM expressions of a 6751 SELECT statement. If an Expression instance is passed, this is used as-is. 6752 dialect: the dialect used to parse the input expression (in the case that the 6753 input expression is a SQL string). 6754 **opts: other options to use to parse the input expressions (again, in the case 6755 that the input expression is a SQL string). 6756 6757 Returns: 6758 Select: the syntax tree for the SELECT statement. 6759 """ 6760 return Select().from_(expression, dialect=dialect, **opts)
Initializes a syntax tree from a FROM expression.
Example:
>>> from_("tbl")select("col1", "col2").sql() 'SELECT col1, col2 FROM tbl'
Arguments:
- *expression: the SQL code string to parse as the FROM expressions of a SELECT statement. If an Expression instance is passed, this is used as-is.
- dialect: the dialect used to parse the input expression (in the case that the input expression is a SQL string).
- **opts: other options to use to parse the input expressions (again, in the case that the input expression is a SQL string).
Returns:
Select: the syntax tree for the SELECT statement.
6763def update( 6764 table: str | Table, 6765 properties: dict, 6766 where: t.Optional[ExpOrStr] = None, 6767 from_: t.Optional[ExpOrStr] = None, 6768 dialect: DialectType = None, 6769 **opts, 6770) -> Update: 6771 """ 6772 Creates an update statement. 6773 6774 Example: 6775 >>> update("my_table", {"x": 1, "y": "2", "z": None}, from_="baz", where="id > 1").sql() 6776 "UPDATE my_table SET x = 1, y = '2', z = NULL FROM baz WHERE id > 1" 6777 6778 Args: 6779 *properties: dictionary of properties to set which are 6780 auto converted to sql objects eg None -> NULL 6781 where: sql conditional parsed into a WHERE statement 6782 from_: sql statement parsed into a FROM statement 6783 dialect: the dialect used to parse the input expressions. 6784 **opts: other options to use to parse the input expressions. 6785 6786 Returns: 6787 Update: the syntax tree for the UPDATE statement. 6788 """ 6789 update_expr = Update(this=maybe_parse(table, into=Table, dialect=dialect)) 6790 update_expr.set( 6791 "expressions", 6792 [ 6793 EQ(this=maybe_parse(k, dialect=dialect, **opts), expression=convert(v)) 6794 for k, v in properties.items() 6795 ], 6796 ) 6797 if from_: 6798 update_expr.set( 6799 "from", 6800 maybe_parse(from_, into=From, dialect=dialect, prefix="FROM", **opts), 6801 ) 6802 if isinstance(where, Condition): 6803 where = Where(this=where) 6804 if where: 6805 update_expr.set( 6806 "where", 6807 maybe_parse(where, into=Where, dialect=dialect, prefix="WHERE", **opts), 6808 ) 6809 return update_expr
Creates an update statement.
Example:
>>> update("my_table", {"x": 1, "y": "2", "z": None}, from_="baz", where="id > 1").sql() "UPDATE my_table SET x = 1, y = '2', z = NULL FROM baz WHERE id > 1"
Arguments:
- *properties: dictionary of properties to set which are auto converted to sql objects eg None -> NULL
- where: sql conditional parsed into a WHERE statement
- from_: sql statement parsed into a FROM statement
- dialect: the dialect used to parse the input expressions.
- **opts: other options to use to parse the input expressions.
Returns:
Update: the syntax tree for the UPDATE statement.
6812def delete( 6813 table: ExpOrStr, 6814 where: t.Optional[ExpOrStr] = None, 6815 returning: t.Optional[ExpOrStr] = None, 6816 dialect: DialectType = None, 6817 **opts, 6818) -> Delete: 6819 """ 6820 Builds a delete statement. 6821 6822 Example: 6823 >>> delete("my_table", where="id > 1").sql() 6824 'DELETE FROM my_table WHERE id > 1' 6825 6826 Args: 6827 where: sql conditional parsed into a WHERE statement 6828 returning: sql conditional parsed into a RETURNING statement 6829 dialect: the dialect used to parse the input expressions. 6830 **opts: other options to use to parse the input expressions. 6831 6832 Returns: 6833 Delete: the syntax tree for the DELETE statement. 6834 """ 6835 delete_expr = Delete().delete(table, dialect=dialect, copy=False, **opts) 6836 if where: 6837 delete_expr = delete_expr.where(where, dialect=dialect, copy=False, **opts) 6838 if returning: 6839 delete_expr = t.cast( 6840 Delete, delete_expr.returning(returning, dialect=dialect, copy=False, **opts) 6841 ) 6842 return delete_expr
Builds a delete statement.
Example:
>>> delete("my_table", where="id > 1").sql() 'DELETE FROM my_table WHERE id > 1'
Arguments:
- where: sql conditional parsed into a WHERE statement
- returning: sql conditional parsed into a RETURNING statement
- dialect: the dialect used to parse the input expressions.
- **opts: other options to use to parse the input expressions.
Returns:
Delete: the syntax tree for the DELETE statement.
6845def insert( 6846 expression: ExpOrStr, 6847 into: ExpOrStr, 6848 columns: t.Optional[t.Sequence[str | Identifier]] = None, 6849 overwrite: t.Optional[bool] = None, 6850 returning: t.Optional[ExpOrStr] = None, 6851 dialect: DialectType = None, 6852 copy: bool = True, 6853 **opts, 6854) -> Insert: 6855 """ 6856 Builds an INSERT statement. 6857 6858 Example: 6859 >>> insert("VALUES (1, 2, 3)", "tbl").sql() 6860 'INSERT INTO tbl VALUES (1, 2, 3)' 6861 6862 Args: 6863 expression: the sql string or expression of the INSERT statement 6864 into: the tbl to insert data to. 6865 columns: optionally the table's column names. 6866 overwrite: whether to INSERT OVERWRITE or not. 6867 returning: sql conditional parsed into a RETURNING statement 6868 dialect: the dialect used to parse the input expressions. 6869 copy: whether to copy the expression. 6870 **opts: other options to use to parse the input expressions. 6871 6872 Returns: 6873 Insert: the syntax tree for the INSERT statement. 6874 """ 6875 expr = maybe_parse(expression, dialect=dialect, copy=copy, **opts) 6876 this: Table | Schema = maybe_parse(into, into=Table, dialect=dialect, copy=copy, **opts) 6877 6878 if columns: 6879 this = Schema(this=this, expressions=[to_identifier(c, copy=copy) for c in columns]) 6880 6881 insert = Insert(this=this, expression=expr, overwrite=overwrite) 6882 6883 if returning: 6884 insert = t.cast(Insert, insert.returning(returning, dialect=dialect, copy=False, **opts)) 6885 6886 return insert
Builds an INSERT statement.
Example:
>>> insert("VALUES (1, 2, 3)", "tbl").sql() 'INSERT INTO tbl VALUES (1, 2, 3)'
Arguments:
- expression: the sql string or expression of the INSERT statement
- into: the tbl to insert data to.
- columns: optionally the table's column names.
- overwrite: whether to INSERT OVERWRITE or not.
- returning: sql conditional parsed into a RETURNING statement
- dialect: the dialect used to parse the input expressions.
- copy: whether to copy the expression.
- **opts: other options to use to parse the input expressions.
Returns:
Insert: the syntax tree for the INSERT statement.
6889def condition( 6890 expression: ExpOrStr, dialect: DialectType = None, copy: bool = True, **opts 6891) -> Condition: 6892 """ 6893 Initialize a logical condition expression. 6894 6895 Example: 6896 >>> condition("x=1").sql() 6897 'x = 1' 6898 6899 This is helpful for composing larger logical syntax trees: 6900 >>> where = condition("x=1") 6901 >>> where = where.and_("y=1") 6902 >>> Select().from_("tbl").select("*").where(where).sql() 6903 'SELECT * FROM tbl WHERE x = 1 AND y = 1' 6904 6905 Args: 6906 *expression: the SQL code string to parse. 6907 If an Expression instance is passed, this is used as-is. 6908 dialect: the dialect used to parse the input expression (in the case that the 6909 input expression is a SQL string). 6910 copy: Whether to copy `expression` (only applies to expressions). 6911 **opts: other options to use to parse the input expressions (again, in the case 6912 that the input expression is a SQL string). 6913 6914 Returns: 6915 The new Condition instance 6916 """ 6917 return maybe_parse( 6918 expression, 6919 into=Condition, 6920 dialect=dialect, 6921 copy=copy, 6922 **opts, 6923 )
Initialize a logical condition expression.
Example:
>>> condition("x=1").sql() 'x = 1'This is helpful for composing larger logical syntax trees:
Arguments:
- *expression: the SQL code string to parse. If an Expression instance is passed, this is used as-is.
- dialect: the dialect used to parse the input expression (in the case that the input expression is a SQL string).
- copy: Whether to copy
expression(only applies to expressions). - **opts: other options to use to parse the input expressions (again, in the case that the input expression is a SQL string).
Returns:
The new Condition instance
6926def and_( 6927 *expressions: t.Optional[ExpOrStr], dialect: DialectType = None, copy: bool = True, **opts 6928) -> Condition: 6929 """ 6930 Combine multiple conditions with an AND logical operator. 6931 6932 Example: 6933 >>> and_("x=1", and_("y=1", "z=1")).sql() 6934 'x = 1 AND (y = 1 AND z = 1)' 6935 6936 Args: 6937 *expressions: the SQL code strings to parse. 6938 If an Expression instance is passed, this is used as-is. 6939 dialect: the dialect used to parse the input expression. 6940 copy: whether to copy `expressions` (only applies to Expressions). 6941 **opts: other options to use to parse the input expressions. 6942 6943 Returns: 6944 The new condition 6945 """ 6946 return t.cast(Condition, _combine(expressions, And, dialect, copy=copy, **opts))
Combine multiple conditions with an AND logical operator.
Example:
>>> and_("x=1", and_("y=1", "z=1")).sql() 'x = 1 AND (y = 1 AND z = 1)'
Arguments:
- *expressions: the SQL code strings to parse. If an Expression instance is passed, this is used as-is.
- dialect: the dialect used to parse the input expression.
- copy: whether to copy
expressions(only applies to Expressions). - **opts: other options to use to parse the input expressions.
Returns:
The new condition
6949def or_( 6950 *expressions: t.Optional[ExpOrStr], dialect: DialectType = None, copy: bool = True, **opts 6951) -> Condition: 6952 """ 6953 Combine multiple conditions with an OR logical operator. 6954 6955 Example: 6956 >>> or_("x=1", or_("y=1", "z=1")).sql() 6957 'x = 1 OR (y = 1 OR z = 1)' 6958 6959 Args: 6960 *expressions: the SQL code strings to parse. 6961 If an Expression instance is passed, this is used as-is. 6962 dialect: the dialect used to parse the input expression. 6963 copy: whether to copy `expressions` (only applies to Expressions). 6964 **opts: other options to use to parse the input expressions. 6965 6966 Returns: 6967 The new condition 6968 """ 6969 return t.cast(Condition, _combine(expressions, Or, dialect, copy=copy, **opts))
Combine multiple conditions with an OR logical operator.
Example:
>>> or_("x=1", or_("y=1", "z=1")).sql() 'x = 1 OR (y = 1 OR z = 1)'
Arguments:
- *expressions: the SQL code strings to parse. If an Expression instance is passed, this is used as-is.
- dialect: the dialect used to parse the input expression.
- copy: whether to copy
expressions(only applies to Expressions). - **opts: other options to use to parse the input expressions.
Returns:
The new condition
6972def xor( 6973 *expressions: t.Optional[ExpOrStr], dialect: DialectType = None, copy: bool = True, **opts 6974) -> Condition: 6975 """ 6976 Combine multiple conditions with an XOR logical operator. 6977 6978 Example: 6979 >>> xor("x=1", xor("y=1", "z=1")).sql() 6980 'x = 1 XOR (y = 1 XOR z = 1)' 6981 6982 Args: 6983 *expressions: the SQL code strings to parse. 6984 If an Expression instance is passed, this is used as-is. 6985 dialect: the dialect used to parse the input expression. 6986 copy: whether to copy `expressions` (only applies to Expressions). 6987 **opts: other options to use to parse the input expressions. 6988 6989 Returns: 6990 The new condition 6991 """ 6992 return t.cast(Condition, _combine(expressions, Xor, dialect, copy=copy, **opts))
Combine multiple conditions with an XOR logical operator.
Example:
>>> xor("x=1", xor("y=1", "z=1")).sql() 'x = 1 XOR (y = 1 XOR z = 1)'
Arguments:
- *expressions: the SQL code strings to parse. If an Expression instance is passed, this is used as-is.
- dialect: the dialect used to parse the input expression.
- copy: whether to copy
expressions(only applies to Expressions). - **opts: other options to use to parse the input expressions.
Returns:
The new condition
6995def not_(expression: ExpOrStr, dialect: DialectType = None, copy: bool = True, **opts) -> Not: 6996 """ 6997 Wrap a condition with a NOT operator. 6998 6999 Example: 7000 >>> not_("this_suit='black'").sql() 7001 "NOT this_suit = 'black'" 7002 7003 Args: 7004 expression: the SQL code string to parse. 7005 If an Expression instance is passed, this is used as-is. 7006 dialect: the dialect used to parse the input expression. 7007 copy: whether to copy the expression or not. 7008 **opts: other options to use to parse the input expressions. 7009 7010 Returns: 7011 The new condition. 7012 """ 7013 this = condition( 7014 expression, 7015 dialect=dialect, 7016 copy=copy, 7017 **opts, 7018 ) 7019 return Not(this=_wrap(this, Connector))
Wrap a condition with a NOT operator.
Example:
>>> not_("this_suit='black'").sql() "NOT this_suit = 'black'"
Arguments:
- expression: the SQL code string to parse. If an Expression instance is passed, this is used as-is.
- dialect: the dialect used to parse the input expression.
- copy: whether to copy the expression or not.
- **opts: other options to use to parse the input expressions.
Returns:
The new condition.
7022def paren(expression: ExpOrStr, copy: bool = True) -> Paren: 7023 """ 7024 Wrap an expression in parentheses. 7025 7026 Example: 7027 >>> paren("5 + 3").sql() 7028 '(5 + 3)' 7029 7030 Args: 7031 expression: the SQL code string to parse. 7032 If an Expression instance is passed, this is used as-is. 7033 copy: whether to copy the expression or not. 7034 7035 Returns: 7036 The wrapped expression. 7037 """ 7038 return Paren(this=maybe_parse(expression, copy=copy))
Wrap an expression in parentheses.
Example:
>>> paren("5 + 3").sql() '(5 + 3)'
Arguments:
- expression: the SQL code string to parse. If an Expression instance is passed, this is used as-is.
- copy: whether to copy the expression or not.
Returns:
The wrapped expression.
7054def to_identifier(name, quoted=None, copy=True): 7055 """Builds an identifier. 7056 7057 Args: 7058 name: The name to turn into an identifier. 7059 quoted: Whether to force quote the identifier. 7060 copy: Whether to copy name if it's an Identifier. 7061 7062 Returns: 7063 The identifier ast node. 7064 """ 7065 7066 if name is None: 7067 return None 7068 7069 if isinstance(name, Identifier): 7070 identifier = maybe_copy(name, copy) 7071 elif isinstance(name, str): 7072 identifier = Identifier( 7073 this=name, 7074 quoted=not SAFE_IDENTIFIER_RE.match(name) if quoted is None else quoted, 7075 ) 7076 else: 7077 raise ValueError(f"Name needs to be a string or an Identifier, got: {name.__class__}") 7078 return identifier
Builds an identifier.
Arguments:
- name: The name to turn into an identifier.
- quoted: Whether to force quote the identifier.
- copy: Whether to copy name if it's an Identifier.
Returns:
The identifier ast node.
7081def parse_identifier(name: str | Identifier, dialect: DialectType = None) -> Identifier: 7082 """ 7083 Parses a given string into an identifier. 7084 7085 Args: 7086 name: The name to parse into an identifier. 7087 dialect: The dialect to parse against. 7088 7089 Returns: 7090 The identifier ast node. 7091 """ 7092 try: 7093 expression = maybe_parse(name, dialect=dialect, into=Identifier) 7094 except (ParseError, TokenError): 7095 expression = to_identifier(name) 7096 7097 return expression
Parses a given string into an identifier.
Arguments:
- name: The name to parse into an identifier.
- dialect: The dialect to parse against.
Returns:
The identifier ast node.
7103def to_interval(interval: str | Literal) -> Interval: 7104 """Builds an interval expression from a string like '1 day' or '5 months'.""" 7105 if isinstance(interval, Literal): 7106 if not interval.is_string: 7107 raise ValueError("Invalid interval string.") 7108 7109 interval = interval.this 7110 7111 interval_parts = INTERVAL_STRING_RE.match(interval) # type: ignore 7112 7113 if not interval_parts: 7114 raise ValueError("Invalid interval string.") 7115 7116 return Interval( 7117 this=Literal.string(interval_parts.group(1)), 7118 unit=Var(this=interval_parts.group(2).upper()), 7119 )
Builds an interval expression from a string like '1 day' or '5 months'.
7122def to_table( 7123 sql_path: str | Table, dialect: DialectType = None, copy: bool = True, **kwargs 7124) -> Table: 7125 """ 7126 Create a table expression from a `[catalog].[schema].[table]` sql path. Catalog and schema are optional. 7127 If a table is passed in then that table is returned. 7128 7129 Args: 7130 sql_path: a `[catalog].[schema].[table]` string. 7131 dialect: the source dialect according to which the table name will be parsed. 7132 copy: Whether to copy a table if it is passed in. 7133 kwargs: the kwargs to instantiate the resulting `Table` expression with. 7134 7135 Returns: 7136 A table expression. 7137 """ 7138 if isinstance(sql_path, Table): 7139 return maybe_copy(sql_path, copy=copy) 7140 7141 table = maybe_parse(sql_path, into=Table, dialect=dialect) 7142 7143 for k, v in kwargs.items(): 7144 table.set(k, v) 7145 7146 return table
Create a table expression from a [catalog].[schema].[table] sql path. Catalog and schema are optional.
If a table is passed in then that table is returned.
Arguments:
- sql_path: a
[catalog].[schema].[table]string. - dialect: the source dialect according to which the table name will be parsed.
- copy: Whether to copy a table if it is passed in.
- kwargs: the kwargs to instantiate the resulting
Tableexpression with.
Returns:
A table expression.
7149def to_column( 7150 sql_path: str | Column, 7151 quoted: t.Optional[bool] = None, 7152 dialect: DialectType = None, 7153 copy: bool = True, 7154 **kwargs, 7155) -> Column: 7156 """ 7157 Create a column from a `[table].[column]` sql path. Table is optional. 7158 If a column is passed in then that column is returned. 7159 7160 Args: 7161 sql_path: a `[table].[column]` string. 7162 quoted: Whether or not to force quote identifiers. 7163 dialect: the source dialect according to which the column name will be parsed. 7164 copy: Whether to copy a column if it is passed in. 7165 kwargs: the kwargs to instantiate the resulting `Column` expression with. 7166 7167 Returns: 7168 A column expression. 7169 """ 7170 if isinstance(sql_path, Column): 7171 return maybe_copy(sql_path, copy=copy) 7172 7173 try: 7174 col = maybe_parse(sql_path, into=Column, dialect=dialect) 7175 except ParseError: 7176 return column(*reversed(sql_path.split(".")), quoted=quoted, **kwargs) 7177 7178 for k, v in kwargs.items(): 7179 col.set(k, v) 7180 7181 if quoted: 7182 for i in col.find_all(Identifier): 7183 i.set("quoted", True) 7184 7185 return col
Create a column from a [table].[column] sql path. Table is optional.
If a column is passed in then that column is returned.
Arguments:
- sql_path: a
[table].[column]string. - quoted: Whether or not to force quote identifiers.
- dialect: the source dialect according to which the column name will be parsed.
- copy: Whether to copy a column if it is passed in.
- kwargs: the kwargs to instantiate the resulting
Columnexpression with.
Returns:
A column expression.
7188def alias_( 7189 expression: ExpOrStr, 7190 alias: t.Optional[str | Identifier], 7191 table: bool | t.Sequence[str | Identifier] = False, 7192 quoted: t.Optional[bool] = None, 7193 dialect: DialectType = None, 7194 copy: bool = True, 7195 **opts, 7196): 7197 """Create an Alias expression. 7198 7199 Example: 7200 >>> alias_('foo', 'bar').sql() 7201 'foo AS bar' 7202 7203 >>> alias_('(select 1, 2)', 'bar', table=['a', 'b']).sql() 7204 '(SELECT 1, 2) AS bar(a, b)' 7205 7206 Args: 7207 expression: the SQL code strings to parse. 7208 If an Expression instance is passed, this is used as-is. 7209 alias: the alias name to use. If the name has 7210 special characters it is quoted. 7211 table: Whether to create a table alias, can also be a list of columns. 7212 quoted: whether to quote the alias 7213 dialect: the dialect used to parse the input expression. 7214 copy: Whether to copy the expression. 7215 **opts: other options to use to parse the input expressions. 7216 7217 Returns: 7218 Alias: the aliased expression 7219 """ 7220 exp = maybe_parse(expression, dialect=dialect, copy=copy, **opts) 7221 alias = to_identifier(alias, quoted=quoted) 7222 7223 if table: 7224 table_alias = TableAlias(this=alias) 7225 exp.set("alias", table_alias) 7226 7227 if not isinstance(table, bool): 7228 for column in table: 7229 table_alias.append("columns", to_identifier(column, quoted=quoted)) 7230 7231 return exp 7232 7233 # We don't set the "alias" arg for Window expressions, because that would add an IDENTIFIER node in 7234 # the AST, representing a "named_window" [1] construct (eg. bigquery). What we want is an ALIAS node 7235 # for the complete Window expression. 7236 # 7237 # [1]: https://cloud.google.com/bigquery/docs/reference/standard-sql/window-function-calls 7238 7239 if "alias" in exp.arg_types and not isinstance(exp, Window): 7240 exp.set("alias", alias) 7241 return exp 7242 return Alias(this=exp, alias=alias)
Create an Alias expression.
Example:
>>> alias_('foo', 'bar').sql() 'foo AS bar'>>> alias_('(select 1, 2)', 'bar', table=['a', 'b']).sql() '(SELECT 1, 2) AS bar(a, b)'
Arguments:
- expression: the SQL code strings to parse. If an Expression instance is passed, this is used as-is.
- alias: the alias name to use. If the name has special characters it is quoted.
- table: Whether to create a table alias, can also be a list of columns.
- quoted: whether to quote the alias
- dialect: the dialect used to parse the input expression.
- copy: Whether to copy the expression.
- **opts: other options to use to parse the input expressions.
Returns:
Alias: the aliased expression
7245def subquery( 7246 expression: ExpOrStr, 7247 alias: t.Optional[Identifier | str] = None, 7248 dialect: DialectType = None, 7249 **opts, 7250) -> Select: 7251 """ 7252 Build a subquery expression that's selected from. 7253 7254 Example: 7255 >>> subquery('select x from tbl', 'bar').select('x').sql() 7256 'SELECT x FROM (SELECT x FROM tbl) AS bar' 7257 7258 Args: 7259 expression: the SQL code strings to parse. 7260 If an Expression instance is passed, this is used as-is. 7261 alias: the alias name to use. 7262 dialect: the dialect used to parse the input expression. 7263 **opts: other options to use to parse the input expressions. 7264 7265 Returns: 7266 A new Select instance with the subquery expression included. 7267 """ 7268 7269 expression = maybe_parse(expression, dialect=dialect, **opts).subquery(alias, **opts) 7270 return Select().from_(expression, dialect=dialect, **opts)
Build a subquery expression that's selected from.
Example:
>>> subquery('select x from tbl', 'bar')select('x').sql() 'SELECT x FROM (SELECT x FROM tbl) AS bar'
Arguments:
- expression: the SQL code strings to parse. If an Expression instance is passed, this is used as-is.
- alias: the alias name to use.
- dialect: the dialect used to parse the input expression.
- **opts: other options to use to parse the input expressions.
Returns:
A new Select instance with the subquery expression included.
7301def column( 7302 col, 7303 table=None, 7304 db=None, 7305 catalog=None, 7306 *, 7307 fields=None, 7308 quoted=None, 7309 copy=True, 7310): 7311 """ 7312 Build a Column. 7313 7314 Args: 7315 col: Column name. 7316 table: Table name. 7317 db: Database name. 7318 catalog: Catalog name. 7319 fields: Additional fields using dots. 7320 quoted: Whether to force quotes on the column's identifiers. 7321 copy: Whether to copy identifiers if passed in. 7322 7323 Returns: 7324 The new Column instance. 7325 """ 7326 this = Column( 7327 this=to_identifier(col, quoted=quoted, copy=copy), 7328 table=to_identifier(table, quoted=quoted, copy=copy), 7329 db=to_identifier(db, quoted=quoted, copy=copy), 7330 catalog=to_identifier(catalog, quoted=quoted, copy=copy), 7331 ) 7332 7333 if fields: 7334 this = Dot.build( 7335 (this, *(to_identifier(field, quoted=quoted, copy=copy) for field in fields)) 7336 ) 7337 return this
Build a Column.
Arguments:
- col: Column name.
- table: Table name.
- db: Database name.
- catalog: Catalog name.
- fields: Additional fields using dots.
- quoted: Whether to force quotes on the column's identifiers.
- copy: Whether to copy identifiers if passed in.
Returns:
The new Column instance.
7340def cast( 7341 expression: ExpOrStr, to: DATA_TYPE, copy: bool = True, dialect: DialectType = None, **opts 7342) -> Cast: 7343 """Cast an expression to a data type. 7344 7345 Example: 7346 >>> cast('x + 1', 'int').sql() 7347 'CAST(x + 1 AS INT)' 7348 7349 Args: 7350 expression: The expression to cast. 7351 to: The datatype to cast to. 7352 copy: Whether to copy the supplied expressions. 7353 dialect: The target dialect. This is used to prevent a re-cast in the following scenario: 7354 - The expression to be cast is already a exp.Cast expression 7355 - The existing cast is to a type that is logically equivalent to new type 7356 7357 For example, if :expression='CAST(x as DATETIME)' and :to=Type.TIMESTAMP, 7358 but in the target dialect DATETIME is mapped to TIMESTAMP, then we will NOT return `CAST(x (as DATETIME) as TIMESTAMP)` 7359 and instead just return the original expression `CAST(x as DATETIME)`. 7360 7361 This is to prevent it being output as a double cast `CAST(x (as TIMESTAMP) as TIMESTAMP)` once the DATETIME -> TIMESTAMP 7362 mapping is applied in the target dialect generator. 7363 7364 Returns: 7365 The new Cast instance. 7366 """ 7367 expr = maybe_parse(expression, copy=copy, dialect=dialect, **opts) 7368 data_type = DataType.build(to, copy=copy, dialect=dialect, **opts) 7369 7370 # dont re-cast if the expression is already a cast to the correct type 7371 if isinstance(expr, Cast): 7372 from sqlglot.dialects.dialect import Dialect 7373 7374 target_dialect = Dialect.get_or_raise(dialect) 7375 type_mapping = target_dialect.generator_class.TYPE_MAPPING 7376 7377 existing_cast_type: DataType.Type = expr.to.this 7378 new_cast_type: DataType.Type = data_type.this 7379 types_are_equivalent = type_mapping.get( 7380 existing_cast_type, existing_cast_type 7381 ) == type_mapping.get(new_cast_type, new_cast_type) 7382 if expr.is_type(data_type) or types_are_equivalent: 7383 return expr 7384 7385 expr = Cast(this=expr, to=data_type) 7386 expr.type = data_type 7387 7388 return expr
Cast an expression to a data type.
Example:
>>> cast('x + 1', 'int').sql() 'CAST(x + 1 AS INT)'
Arguments:
- expression: The expression to cast.
- to: The datatype to cast to.
- copy: Whether to copy the supplied expressions.
dialect: The target dialect. This is used to prevent a re-cast in the following scenario:
- The expression to be cast is already a exp.Cast expression
- The existing cast is to a type that is logically equivalent to new type
For example, if :expression='CAST(x as DATETIME)' and :to=Type.TIMESTAMP, but in the target dialect DATETIME is mapped to TIMESTAMP, then we will NOT return
CAST(x (as DATETIME) as TIMESTAMP)and instead just return the original expressionCAST(x as DATETIME).This is to prevent it being output as a double cast
CAST(x (as TIMESTAMP) as TIMESTAMP)once the DATETIME -> TIMESTAMP mapping is applied in the target dialect generator.
Returns:
The new Cast instance.
7391def table_( 7392 table: Identifier | str, 7393 db: t.Optional[Identifier | str] = None, 7394 catalog: t.Optional[Identifier | str] = None, 7395 quoted: t.Optional[bool] = None, 7396 alias: t.Optional[Identifier | str] = None, 7397) -> Table: 7398 """Build a Table. 7399 7400 Args: 7401 table: Table name. 7402 db: Database name. 7403 catalog: Catalog name. 7404 quote: Whether to force quotes on the table's identifiers. 7405 alias: Table's alias. 7406 7407 Returns: 7408 The new Table instance. 7409 """ 7410 return Table( 7411 this=to_identifier(table, quoted=quoted) if table else None, 7412 db=to_identifier(db, quoted=quoted) if db else None, 7413 catalog=to_identifier(catalog, quoted=quoted) if catalog else None, 7414 alias=TableAlias(this=to_identifier(alias)) if alias else None, 7415 )
Build a Table.
Arguments:
- table: Table name.
- db: Database name.
- catalog: Catalog name.
- quote: Whether to force quotes on the table's identifiers.
- alias: Table's alias.
Returns:
The new Table instance.
7418def values( 7419 values: t.Iterable[t.Tuple[t.Any, ...]], 7420 alias: t.Optional[str] = None, 7421 columns: t.Optional[t.Iterable[str] | t.Dict[str, DataType]] = None, 7422) -> Values: 7423 """Build VALUES statement. 7424 7425 Example: 7426 >>> values([(1, '2')]).sql() 7427 "VALUES (1, '2')" 7428 7429 Args: 7430 values: values statements that will be converted to SQL 7431 alias: optional alias 7432 columns: Optional list of ordered column names or ordered dictionary of column names to types. 7433 If either are provided then an alias is also required. 7434 7435 Returns: 7436 Values: the Values expression object 7437 """ 7438 if columns and not alias: 7439 raise ValueError("Alias is required when providing columns") 7440 7441 return Values( 7442 expressions=[convert(tup) for tup in values], 7443 alias=( 7444 TableAlias(this=to_identifier(alias), columns=[to_identifier(x) for x in columns]) 7445 if columns 7446 else (TableAlias(this=to_identifier(alias)) if alias else None) 7447 ), 7448 )
Build VALUES statement.
Example:
>>> values([(1, '2')]).sql() "VALUES (1, '2')"
Arguments:
- values: values statements that will be converted to SQL
- alias: optional alias
- columns: Optional list of ordered column names or ordered dictionary of column names to types. If either are provided then an alias is also required.
Returns:
Values: the Values expression object
7451def var(name: t.Optional[ExpOrStr]) -> Var: 7452 """Build a SQL variable. 7453 7454 Example: 7455 >>> repr(var('x')) 7456 'Var(this=x)' 7457 7458 >>> repr(var(column('x', table='y'))) 7459 'Var(this=x)' 7460 7461 Args: 7462 name: The name of the var or an expression who's name will become the var. 7463 7464 Returns: 7465 The new variable node. 7466 """ 7467 if not name: 7468 raise ValueError("Cannot convert empty name into var.") 7469 7470 if isinstance(name, Expression): 7471 name = name.name 7472 return Var(this=name)
Build a SQL variable.
Example:
>>> repr(var('x')) 'Var(this=x)'>>> repr(var(column('x', table='y'))) 'Var(this=x)'
Arguments:
- name: The name of the var or an expression who's name will become the var.
Returns:
The new variable node.
7475def rename_table( 7476 old_name: str | Table, 7477 new_name: str | Table, 7478 dialect: DialectType = None, 7479) -> Alter: 7480 """Build ALTER TABLE... RENAME... expression 7481 7482 Args: 7483 old_name: The old name of the table 7484 new_name: The new name of the table 7485 dialect: The dialect to parse the table. 7486 7487 Returns: 7488 Alter table expression 7489 """ 7490 old_table = to_table(old_name, dialect=dialect) 7491 new_table = to_table(new_name, dialect=dialect) 7492 return Alter( 7493 this=old_table, 7494 kind="TABLE", 7495 actions=[ 7496 RenameTable(this=new_table), 7497 ], 7498 )
Build ALTER TABLE... RENAME... expression
Arguments:
- old_name: The old name of the table
- new_name: The new name of the table
- dialect: The dialect to parse the table.
Returns:
Alter table expression
7501def rename_column( 7502 table_name: str | Table, 7503 old_column_name: str | Column, 7504 new_column_name: str | Column, 7505 exists: t.Optional[bool] = None, 7506 dialect: DialectType = None, 7507) -> Alter: 7508 """Build ALTER TABLE... RENAME COLUMN... expression 7509 7510 Args: 7511 table_name: Name of the table 7512 old_column: The old name of the column 7513 new_column: The new name of the column 7514 exists: Whether to add the `IF EXISTS` clause 7515 dialect: The dialect to parse the table/column. 7516 7517 Returns: 7518 Alter table expression 7519 """ 7520 table = to_table(table_name, dialect=dialect) 7521 old_column = to_column(old_column_name, dialect=dialect) 7522 new_column = to_column(new_column_name, dialect=dialect) 7523 return Alter( 7524 this=table, 7525 kind="TABLE", 7526 actions=[ 7527 RenameColumn(this=old_column, to=new_column, exists=exists), 7528 ], 7529 )
Build ALTER TABLE... RENAME COLUMN... expression
Arguments:
- table_name: Name of the table
- old_column: The old name of the column
- new_column: The new name of the column
- exists: Whether to add the
IF EXISTSclause - dialect: The dialect to parse the table/column.
Returns:
Alter table expression
7532def convert(value: t.Any, copy: bool = False) -> Expression: 7533 """Convert a python value into an expression object. 7534 7535 Raises an error if a conversion is not possible. 7536 7537 Args: 7538 value: A python object. 7539 copy: Whether to copy `value` (only applies to Expressions and collections). 7540 7541 Returns: 7542 The equivalent expression object. 7543 """ 7544 if isinstance(value, Expression): 7545 return maybe_copy(value, copy) 7546 if isinstance(value, str): 7547 return Literal.string(value) 7548 if isinstance(value, bool): 7549 return Boolean(this=value) 7550 if value is None or (isinstance(value, float) and math.isnan(value)): 7551 return null() 7552 if isinstance(value, numbers.Number): 7553 return Literal.number(value) 7554 if isinstance(value, bytes): 7555 return HexString(this=value.hex()) 7556 if isinstance(value, datetime.datetime): 7557 datetime_literal = Literal.string(value.isoformat(sep=" ")) 7558 7559 tz = None 7560 if value.tzinfo: 7561 # this works for zoneinfo.ZoneInfo, pytz.timezone and datetime.datetime.utc to return IANA timezone names like "America/Los_Angeles" 7562 # instead of abbreviations like "PDT". This is for consistency with other timezone handling functions in SQLGlot 7563 tz = Literal.string(str(value.tzinfo)) 7564 7565 return TimeStrToTime(this=datetime_literal, zone=tz) 7566 if isinstance(value, datetime.date): 7567 date_literal = Literal.string(value.strftime("%Y-%m-%d")) 7568 return DateStrToDate(this=date_literal) 7569 if isinstance(value, tuple): 7570 if hasattr(value, "_fields"): 7571 return Struct( 7572 expressions=[ 7573 PropertyEQ( 7574 this=to_identifier(k), expression=convert(getattr(value, k), copy=copy) 7575 ) 7576 for k in value._fields 7577 ] 7578 ) 7579 return Tuple(expressions=[convert(v, copy=copy) for v in value]) 7580 if isinstance(value, list): 7581 return Array(expressions=[convert(v, copy=copy) for v in value]) 7582 if isinstance(value, dict): 7583 return Map( 7584 keys=Array(expressions=[convert(k, copy=copy) for k in value]), 7585 values=Array(expressions=[convert(v, copy=copy) for v in value.values()]), 7586 ) 7587 if hasattr(value, "__dict__"): 7588 return Struct( 7589 expressions=[ 7590 PropertyEQ(this=to_identifier(k), expression=convert(v, copy=copy)) 7591 for k, v in value.__dict__.items() 7592 ] 7593 ) 7594 raise ValueError(f"Cannot convert {value}")
Convert a python value into an expression object.
Raises an error if a conversion is not possible.
Arguments:
- value: A python object.
- copy: Whether to copy
value(only applies to Expressions and collections).
Returns:
The equivalent expression object.
7597def replace_children(expression: Expression, fun: t.Callable, *args, **kwargs) -> None: 7598 """ 7599 Replace children of an expression with the result of a lambda fun(child) -> exp. 7600 """ 7601 for k, v in tuple(expression.args.items()): 7602 is_list_arg = type(v) is list 7603 7604 child_nodes = v if is_list_arg else [v] 7605 new_child_nodes = [] 7606 7607 for cn in child_nodes: 7608 if isinstance(cn, Expression): 7609 for child_node in ensure_collection(fun(cn, *args, **kwargs)): 7610 new_child_nodes.append(child_node) 7611 else: 7612 new_child_nodes.append(cn) 7613 7614 expression.set(k, new_child_nodes if is_list_arg else seq_get(new_child_nodes, 0))
Replace children of an expression with the result of a lambda fun(child) -> exp.
7617def replace_tree( 7618 expression: Expression, 7619 fun: t.Callable, 7620 prune: t.Optional[t.Callable[[Expression], bool]] = None, 7621) -> Expression: 7622 """ 7623 Replace an entire tree with the result of function calls on each node. 7624 7625 This will be traversed in reverse dfs, so leaves first. 7626 If new nodes are created as a result of function calls, they will also be traversed. 7627 """ 7628 stack = list(expression.dfs(prune=prune)) 7629 7630 while stack: 7631 node = stack.pop() 7632 new_node = fun(node) 7633 7634 if new_node is not node: 7635 node.replace(new_node) 7636 7637 if isinstance(new_node, Expression): 7638 stack.append(new_node) 7639 7640 return new_node
Replace an entire tree with the result of function calls on each node.
This will be traversed in reverse dfs, so leaves first. If new nodes are created as a result of function calls, they will also be traversed.
7643def column_table_names(expression: Expression, exclude: str = "") -> t.Set[str]: 7644 """ 7645 Return all table names referenced through columns in an expression. 7646 7647 Example: 7648 >>> import sqlglot 7649 >>> sorted(column_table_names(sqlglot.parse_one("a.b AND c.d AND c.e"))) 7650 ['a', 'c'] 7651 7652 Args: 7653 expression: expression to find table names. 7654 exclude: a table name to exclude 7655 7656 Returns: 7657 A list of unique names. 7658 """ 7659 return { 7660 table 7661 for table in (column.table for column in expression.find_all(Column)) 7662 if table and table != exclude 7663 }
Return all table names referenced through columns in an expression.
Example:
>>> import sqlglot >>> sorted(column_table_names(sqlglot.parse_one("a.b AND c.d AND c.e"))) ['a', 'c']
Arguments:
- expression: expression to find table names.
- exclude: a table name to exclude
Returns:
A list of unique names.
7666def table_name(table: Table | str, dialect: DialectType = None, identify: bool = False) -> str: 7667 """Get the full name of a table as a string. 7668 7669 Args: 7670 table: Table expression node or string. 7671 dialect: The dialect to generate the table name for. 7672 identify: Determines when an identifier should be quoted. Possible values are: 7673 False (default): Never quote, except in cases where it's mandatory by the dialect. 7674 True: Always quote. 7675 7676 Examples: 7677 >>> from sqlglot import exp, parse_one 7678 >>> table_name(parse_one("select * from a.b.c").find(exp.Table)) 7679 'a.b.c' 7680 7681 Returns: 7682 The table name. 7683 """ 7684 7685 table = maybe_parse(table, into=Table, dialect=dialect) 7686 7687 if not table: 7688 raise ValueError(f"Cannot parse {table}") 7689 7690 return ".".join( 7691 ( 7692 part.sql(dialect=dialect, identify=True, copy=False) 7693 if identify or not SAFE_IDENTIFIER_RE.match(part.name) 7694 else part.name 7695 ) 7696 for part in table.parts 7697 )
Get the full name of a table as a string.
Arguments:
- table: Table expression node or string.
- dialect: The dialect to generate the table name for.
- identify: Determines when an identifier should be quoted. Possible values are: False (default): Never quote, except in cases where it's mandatory by the dialect. True: Always quote.
Examples:
>>> from sqlglot import exp, parse_one >>> table_name(parse_one("select * from a.b.c").find(exp.Table)) 'a.b.c'
Returns:
The table name.
7700def normalize_table_name(table: str | Table, dialect: DialectType = None, copy: bool = True) -> str: 7701 """Returns a case normalized table name without quotes. 7702 7703 Args: 7704 table: the table to normalize 7705 dialect: the dialect to use for normalization rules 7706 copy: whether to copy the expression. 7707 7708 Examples: 7709 >>> normalize_table_name("`A-B`.c", dialect="bigquery") 7710 'A-B.c' 7711 """ 7712 from sqlglot.optimizer.normalize_identifiers import normalize_identifiers 7713 7714 return ".".join( 7715 p.name 7716 for p in normalize_identifiers( 7717 to_table(table, dialect=dialect, copy=copy), dialect=dialect 7718 ).parts 7719 )
Returns a case normalized table name without quotes.
Arguments:
- table: the table to normalize
- dialect: the dialect to use for normalization rules
- copy: whether to copy the expression.
Examples:
>>> normalize_table_name("`A-B`.c", dialect="bigquery") 'A-B.c'
7722def replace_tables( 7723 expression: E, mapping: t.Dict[str, str], dialect: DialectType = None, copy: bool = True 7724) -> E: 7725 """Replace all tables in expression according to the mapping. 7726 7727 Args: 7728 expression: expression node to be transformed and replaced. 7729 mapping: mapping of table names. 7730 dialect: the dialect of the mapping table 7731 copy: whether to copy the expression. 7732 7733 Examples: 7734 >>> from sqlglot import exp, parse_one 7735 >>> replace_tables(parse_one("select * from a.b"), {"a.b": "c"}).sql() 7736 'SELECT * FROM c /* a.b */' 7737 7738 Returns: 7739 The mapped expression. 7740 """ 7741 7742 mapping = {normalize_table_name(k, dialect=dialect): v for k, v in mapping.items()} 7743 7744 def _replace_tables(node: Expression) -> Expression: 7745 if isinstance(node, Table): 7746 original = normalize_table_name(node, dialect=dialect) 7747 new_name = mapping.get(original) 7748 7749 if new_name: 7750 table = to_table( 7751 new_name, 7752 **{k: v for k, v in node.args.items() if k not in TABLE_PARTS}, 7753 dialect=dialect, 7754 ) 7755 table.add_comments([original]) 7756 return table 7757 return node 7758 7759 return expression.transform(_replace_tables, copy=copy) # type: ignore
Replace all tables in expression according to the mapping.
Arguments:
- expression: expression node to be transformed and replaced.
- mapping: mapping of table names.
- dialect: the dialect of the mapping table
- copy: whether to copy the expression.
Examples:
>>> from sqlglot import exp, parse_one >>> replace_tables(parse_one("select * from a.b"), {"a.b": "c"}).sql() 'SELECT * FROM c /* a.b */'
Returns:
The mapped expression.
7762def replace_placeholders(expression: Expression, *args, **kwargs) -> Expression: 7763 """Replace placeholders in an expression. 7764 7765 Args: 7766 expression: expression node to be transformed and replaced. 7767 args: positional names that will substitute unnamed placeholders in the given order. 7768 kwargs: keyword arguments that will substitute named placeholders. 7769 7770 Examples: 7771 >>> from sqlglot import exp, parse_one 7772 >>> replace_placeholders( 7773 ... parse_one("select * from :tbl where ? = ?"), 7774 ... exp.to_identifier("str_col"), "b", tbl=exp.to_identifier("foo") 7775 ... ).sql() 7776 "SELECT * FROM foo WHERE str_col = 'b'" 7777 7778 Returns: 7779 The mapped expression. 7780 """ 7781 7782 def _replace_placeholders(node: Expression, args, **kwargs) -> Expression: 7783 if isinstance(node, Placeholder): 7784 if node.this: 7785 new_name = kwargs.get(node.this) 7786 if new_name is not None: 7787 return convert(new_name) 7788 else: 7789 try: 7790 return convert(next(args)) 7791 except StopIteration: 7792 pass 7793 return node 7794 7795 return expression.transform(_replace_placeholders, iter(args), **kwargs)
Replace placeholders in an expression.
Arguments:
- expression: expression node to be transformed and replaced.
- args: positional names that will substitute unnamed placeholders in the given order.
- kwargs: keyword arguments that will substitute named placeholders.
Examples:
>>> from sqlglot import exp, parse_one >>> replace_placeholders( ... parse_one("select * from :tbl where ? = ?"), ... exp.to_identifier("str_col"), "b", tbl=exp.to_identifier("foo") ... ).sql() "SELECT * FROM foo WHERE str_col = 'b'"
Returns:
The mapped expression.
7798def expand( 7799 expression: Expression, 7800 sources: t.Dict[str, Query], 7801 dialect: DialectType = None, 7802 copy: bool = True, 7803) -> Expression: 7804 """Transforms an expression by expanding all referenced sources into subqueries. 7805 7806 Examples: 7807 >>> from sqlglot import parse_one 7808 >>> expand(parse_one("select * from x AS z"), {"x": parse_one("select * from y")}).sql() 7809 'SELECT * FROM (SELECT * FROM y) AS z /* source: x */' 7810 7811 >>> expand(parse_one("select * from x AS z"), {"x": parse_one("select * from y"), "y": parse_one("select * from z")}).sql() 7812 'SELECT * FROM (SELECT * FROM (SELECT * FROM z) AS y /* source: y */) AS z /* source: x */' 7813 7814 Args: 7815 expression: The expression to expand. 7816 sources: A dictionary of name to Queries. 7817 dialect: The dialect of the sources dict. 7818 copy: Whether to copy the expression during transformation. Defaults to True. 7819 7820 Returns: 7821 The transformed expression. 7822 """ 7823 sources = {normalize_table_name(k, dialect=dialect): v for k, v in sources.items()} 7824 7825 def _expand(node: Expression): 7826 if isinstance(node, Table): 7827 name = normalize_table_name(node, dialect=dialect) 7828 source = sources.get(name) 7829 if source: 7830 subquery = source.subquery(node.alias or name) 7831 subquery.comments = [f"source: {name}"] 7832 return subquery.transform(_expand, copy=False) 7833 return node 7834 7835 return expression.transform(_expand, copy=copy)
Transforms an expression by expanding all referenced sources into subqueries.
Examples:
>>> from sqlglot import parse_one >>> expand(parse_one("select * from x AS z"), {"x": parse_one("select * from y")}).sql() 'SELECT * FROM (SELECT * FROM y) AS z /* source: x */'>>> expand(parse_one("select * from x AS z"), {"x": parse_one("select * from y"), "y": parse_one("select * from z")}).sql() 'SELECT * FROM (SELECT * FROM (SELECT * FROM z) AS y /* source: y */) AS z /* source: x */'
Arguments:
- expression: The expression to expand.
- sources: A dictionary of name to Queries.
- dialect: The dialect of the sources dict.
- copy: Whether to copy the expression during transformation. Defaults to True.
Returns:
The transformed expression.
7838def func(name: str, *args, copy: bool = True, dialect: DialectType = None, **kwargs) -> Func: 7839 """ 7840 Returns a Func expression. 7841 7842 Examples: 7843 >>> func("abs", 5).sql() 7844 'ABS(5)' 7845 7846 >>> func("cast", this=5, to=DataType.build("DOUBLE")).sql() 7847 'CAST(5 AS DOUBLE)' 7848 7849 Args: 7850 name: the name of the function to build. 7851 args: the args used to instantiate the function of interest. 7852 copy: whether to copy the argument expressions. 7853 dialect: the source dialect. 7854 kwargs: the kwargs used to instantiate the function of interest. 7855 7856 Note: 7857 The arguments `args` and `kwargs` are mutually exclusive. 7858 7859 Returns: 7860 An instance of the function of interest, or an anonymous function, if `name` doesn't 7861 correspond to an existing `sqlglot.expressions.Func` class. 7862 """ 7863 if args and kwargs: 7864 raise ValueError("Can't use both args and kwargs to instantiate a function.") 7865 7866 from sqlglot.dialects.dialect import Dialect 7867 7868 dialect = Dialect.get_or_raise(dialect) 7869 7870 converted: t.List[Expression] = [maybe_parse(arg, dialect=dialect, copy=copy) for arg in args] 7871 kwargs = {key: maybe_parse(value, dialect=dialect, copy=copy) for key, value in kwargs.items()} 7872 7873 constructor = dialect.parser_class.FUNCTIONS.get(name.upper()) 7874 if constructor: 7875 if converted: 7876 if "dialect" in constructor.__code__.co_varnames: 7877 function = constructor(converted, dialect=dialect) 7878 else: 7879 function = constructor(converted) 7880 elif constructor.__name__ == "from_arg_list": 7881 function = constructor.__self__(**kwargs) # type: ignore 7882 else: 7883 constructor = FUNCTION_BY_NAME.get(name.upper()) 7884 if constructor: 7885 function = constructor(**kwargs) 7886 else: 7887 raise ValueError( 7888 f"Unable to convert '{name}' into a Func. Either manually construct " 7889 "the Func expression of interest or parse the function call." 7890 ) 7891 else: 7892 kwargs = kwargs or {"expressions": converted} 7893 function = Anonymous(this=name, **kwargs) 7894 7895 for error_message in function.error_messages(converted): 7896 raise ValueError(error_message) 7897 7898 return function
Returns a Func expression.
Examples:
>>> func("abs", 5).sql() 'ABS(5)'>>> func("cast", this=5, to=DataType.build("DOUBLE")).sql() 'CAST(5 AS DOUBLE)'
Arguments:
- name: the name of the function to build.
- args: the args used to instantiate the function of interest.
- copy: whether to copy the argument expressions.
- dialect: the source dialect.
- kwargs: the kwargs used to instantiate the function of interest.
Note:
The arguments
argsandkwargsare mutually exclusive.
Returns:
An instance of the function of interest, or an anonymous function, if
namedoesn't correspond to an existingFuncclass.
7901def case( 7902 expression: t.Optional[ExpOrStr] = None, 7903 **opts, 7904) -> Case: 7905 """ 7906 Initialize a CASE statement. 7907 7908 Example: 7909 case().when("a = 1", "foo").else_("bar") 7910 7911 Args: 7912 expression: Optionally, the input expression (not all dialects support this) 7913 **opts: Extra keyword arguments for parsing `expression` 7914 """ 7915 if expression is not None: 7916 this = maybe_parse(expression, **opts) 7917 else: 7918 this = None 7919 return Case(this=this, ifs=[])
Initialize a CASE statement.
Example:
case().when("a = 1", "foo").else_("bar")
Arguments:
- expression: Optionally, the input expression (not all dialects support this)
- **opts: Extra keyword arguments for parsing
expression
7922def array( 7923 *expressions: ExpOrStr, copy: bool = True, dialect: DialectType = None, **kwargs 7924) -> Array: 7925 """ 7926 Returns an array. 7927 7928 Examples: 7929 >>> array(1, 'x').sql() 7930 'ARRAY(1, x)' 7931 7932 Args: 7933 expressions: the expressions to add to the array. 7934 copy: whether to copy the argument expressions. 7935 dialect: the source dialect. 7936 kwargs: the kwargs used to instantiate the function of interest. 7937 7938 Returns: 7939 An array expression. 7940 """ 7941 return Array( 7942 expressions=[ 7943 maybe_parse(expression, copy=copy, dialect=dialect, **kwargs) 7944 for expression in expressions 7945 ] 7946 )
Returns an array.
Examples:
>>> array(1, 'x').sql() 'ARRAY(1, x)'
Arguments:
- expressions: the expressions to add to the array.
- copy: whether to copy the argument expressions.
- dialect: the source dialect.
- kwargs: the kwargs used to instantiate the function of interest.
Returns:
An array expression.
7949def tuple_( 7950 *expressions: ExpOrStr, copy: bool = True, dialect: DialectType = None, **kwargs 7951) -> Tuple: 7952 """ 7953 Returns an tuple. 7954 7955 Examples: 7956 >>> tuple_(1, 'x').sql() 7957 '(1, x)' 7958 7959 Args: 7960 expressions: the expressions to add to the tuple. 7961 copy: whether to copy the argument expressions. 7962 dialect: the source dialect. 7963 kwargs: the kwargs used to instantiate the function of interest. 7964 7965 Returns: 7966 A tuple expression. 7967 """ 7968 return Tuple( 7969 expressions=[ 7970 maybe_parse(expression, copy=copy, dialect=dialect, **kwargs) 7971 for expression in expressions 7972 ] 7973 )
Returns an tuple.
Examples:
>>> tuple_(1, 'x').sql() '(1, x)'
Arguments:
- expressions: the expressions to add to the tuple.
- copy: whether to copy the argument expressions.
- dialect: the source dialect.
- kwargs: the kwargs used to instantiate the function of interest.
Returns:
A tuple expression.
7976def true() -> Boolean: 7977 """ 7978 Returns a true Boolean expression. 7979 """ 7980 return Boolean(this=True)
Returns a true Boolean expression.
7983def false() -> Boolean: 7984 """ 7985 Returns a false Boolean expression. 7986 """ 7987 return Boolean(this=False)
Returns a false Boolean expression.
Returns a Null expression.