id;ddlmZddlmZddlmZddlmZddlmZddlmZGdd ej Z Gd d eZ d Z d S))ARRAY)elements) expression) functions)schema)ColumnCollectionConstraintcTeZdZdZdZdZddZdZej fdZ e dZ dS) aggregate_order_byaRepresent a PostgreSQL aggregate order by expression. E.g.:: from sqlalchemy.dialects.postgresql import aggregate_order_by expr = func.array_agg(aggregate_order_by(table.c.a, table.c.b.desc())) stmt = select([expr]) would represent the expression:: SELECT array_agg(a ORDER BY b DESC) FROM table; Similarly:: expr = func.string_agg( table.c.a, aggregate_order_by(literal_column("','"), table.c.a) ) stmt = select([expr]) Would represent:: SELECT string_agg(a, ',' ORDER BY a) FROM table; .. versionadded:: 1.1 .. versionchanged:: 1.2.13 - the ORDER BY argument may be multiple terms .. seealso:: :class:`_functions.array_agg` c0tj||_|jj|_t |}|dkrt d|dkr!tj|d|_dStj|dtji|_dS)Nz)at least one ORDER BY element is requiredr_literal_as_text)r_literal_as_bindstargettypelen TypeErrororder_by ClauseList)selfrr_lobs W/opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/dialects/postgresql/ext.py__init__zaggregate_order_by.__init__5s088 K$ 8}} 199GHH H QYY$6x{CCDMMM$/,4,FDMMMNc|SN)ragainsts r self_groupzaggregate_order_by.self_groupCs rc |j|jfSrrr)rkwargss r get_childrenzaggregate_order_by.get_childrenFs{DM))rc R||jfi||_||jfi||_dSrr!)rclonekws r_copy_internalsz"aggregate_order_by._copy_internalsIs<eDK..2.. dm22r22 rc4|jj|jjzSr)r _from_objectsr)rs rr)z aggregate_order_by._from_objectsMs{(4=+FFFrr) __name__ __module__ __qualname____doc____visit_name__rrr#r_cloner'propertyr)rrrr r s  D*N   ***%-O3333GGXGGGrr cXeZdZdZdZdZejddddZd dZ dS) ExcludeConstraintzA table-level EXCLUDE constraint. Defines an EXCLUDE constraint as described in the `postgres documentation`__. __ http://www.postgresql.org/docs/9.0/static/sql-createtable.html#SQL-CREATETABLE-EXCLUDE exclude_constraintNwherez:class:`.ExcludeConstraint`z$:paramref:`.ExcludeConstraint.where`cg}g}i|_t|\}}t|||D]d\\}}} } } | || ||jn| } | | |j| <t j|}||| | fe||_tj |g|R| d| d| dd| dd|_ | d} | t j | d |_ | d i|_dS) a2 Create an :class:`.ExcludeConstraint` object. E.g.:: const = ExcludeConstraint( (Column('period'), '&&'), (Column('group'), '='), where=(Column('group') != 'some group'), ops={'group': 'my_operator_class'} ) The constraint is normally embedded into the :class:`_schema.Table` construct directly, or added later using :meth:`.append_constraint`:: some_table = Table( 'some_table', metadata, Column('id', Integer, primary_key=True), Column('period', TSRANGE()), Column('group', String) ) some_table.append_constraint( ExcludeConstraint( (some_table.c.period, '&&'), (some_table.c.group, '='), where=some_table.c.group != 'some group', name='some_table_excl_const', ops={'group': 'my_operator_class'} ) ) :param \*elements: A sequence of two tuples of the form ``(column, operator)`` where "column" is a SQL expression element or a raw SQL string, most typically a :class:`_schema.Column` object, and "operator" is a string containing the operator to use. In order to specify a column name when a :class:`_schema.Column` object is not available, while ensuring that any necessary quoting rules take effect, an ad-hoc :class:`_schema.Column` or :func:`_expression.column` object should be used. :param name: Optional, the in-database name of this constraint. :param deferrable: Optional bool. If set, emit DEFERRABLE or NOT DEFERRABLE when issuing DDL for this constraint. :param initially: Optional string. If set, emit INITIALLY when issuing DDL for this constraint. :param using: Optional string. If set, emit USING when issuing DDL for this constraint. Defaults to 'gist'. :param where: Optional SQL expression construct or literal SQL string. If set, emit WHERE when issuing DDL for this constraint. :param ops: Optional dictionary. Used to define operator classes for the elements; works the same way as that of the :ref:`postgresql_ops ` parameter specified to the :class:`_schema.Index` construct. .. versionadded:: 1.3.21 .. seealso:: :ref:`postgresql_operator_classes` - general description of how PostgreSQL operator classes are specified. Nname deferrable initially)r6r7r8usinggistr4T)allow_coercion_to_textops) operatorszip"_extract_col_expression_collectionappendr6r_literal_as_column _render_exprsr rgetr9rr4r<)rrr&columns render_exprs expressionsr=exprcolumnstrname add_elementoperatorr6r4s rrzExcludeConstraint.__init__`sn !$h Y>A  3 3K @ @)? ?  8 8 : 0T67K(&{+++"("46;;'D'/t$066D   tX 6 7 7 7 7)"+    vvl++ff[))     VVGV,, w  #4dDJ66%$$rc fdjD}j|jjjjjd}|jj|S)Ncjg|]/}tj|jj|jf0Sr)r_copy_expressionparentr=r6).0rGr target_tables r z*ExcludeConstraint.copy..sM   'dk<HHty)    r)r6r7r8r4r9) rD __class__r6r7r8r4r9dispatch_update)rrQr&rcs`` rcopyzExcludeConstraint.copys          DN n**     4=)))rr) r*r+r,r-r.r4r_document_text_coercionrrWrrrr2r2Rsv*N E%X%%. x%x%  x%trr2cBt|d<tjj|i|S)zPostgreSQL-specific form of :class:`_functions.array_agg`, ensures return type is :class:`_postgresql.ARRAY` and not the plain :class:`_types.ARRAY`, unless an explicit ``type_`` is passed. .. versionadded:: 1.1 _default_array_type)rrfunc array_agg)argr&s rr\r\s'!&B > #S /B / //rN) arrayrsqlrrrr sql.schemar ColumnElementr r2r\rrrrbs444444?G?G?G?G?G1?G?G?GD^^^^^2^^^B 0 0 0 0 0r