ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ 4]c@sddlmZddlmZddlmZddlmZddlmZ ddl m Z ddl m Z dd lmZdZd e fd YZeed Zde fdYZdefdYZdefdYZdS(i(texti(tutil(tschema(t _generative(tInsert(t ClauseElement(talias(tpublic_factoryRtinsertcBsVeZdZejdZeddddddZeddddZ RS(sPostgreSQL-specific implementation of INSERT. Adds methods for PG-specific syntaxes such as ON CONFLICT. .. versionadded:: 1.1 cCst|jddjS(sProvide the ``excluded`` namespace for an ON CONFLICT statement PG's ON CONFLICT clause allows reference to the row that would be inserted, known as ``excluded``. This attribute provides all columns in this row to be referenceable. .. seealso:: :ref:`postgresql_insert_on_conflict` - example of how to use :attr:`.Insert.excluded` tnametexcluded(Rttabletcolumns(tself((sU/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyR scCst||||||_|S(s Specifies a DO UPDATE SET action for ON CONFLICT clause. Either the ``constraint`` or ``index_elements`` argument is required, but only one of these can be specified. :param constraint: The name of a unique or exclusion constraint on the table, or the constraint object itself if it has a .name attribute. :param index_elements: A sequence consisting of string column names, :class:`.Column` objects, or other column expression objects that will be used to infer a target index. :param index_where: Additional WHERE criterion that can be used to infer a conditional target index. :param set\_: Required argument. A dictionary or other mapping object with column names as keys and expressions or literals as values, specifying the ``SET`` actions to take. If the target :class:`.Column` specifies a ".key" attribute distinct from the column name, that key should be used. .. warning:: This dictionary does **not** take into account Python-specified default UPDATE values or generation functions, e.g. those specified using :paramref:`.Column.onupdate`. These values will not be exercised for an ON CONFLICT style of UPDATE, unless they are manually specified in the :paramref:`.Insert.on_conflict_do_update.set_` dictionary. :param where: Optional argument. If present, can be a literal SQL string or an acceptable expression for a ``WHERE`` clause that restricts the rows affected by ``DO UPDATE SET``. Rows not meeting the ``WHERE`` condition will not be updated (effectively a ``DO NOTHING`` for those rows). .. versionadded:: 1.1 .. seealso:: :ref:`postgresql_insert_on_conflict` (tOnConflictDoUpdatet_post_values_clause(R t constrainttindex_elementst index_wheretset_twhere((sU/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyton_conflict_do_update.s9cCst||||_|S(s" Specifies a DO NOTHING action for ON CONFLICT clause. The ``constraint`` and ``index_elements`` arguments are optional, but only one of these can be specified. :param constraint: The name of a unique or exclusion constraint on the table, or the constraint object itself if it has a .name attribute. :param index_elements: A sequence consisting of string column names, :class:`.Column` objects, or other column expression objects that will be used to infer a target index. :param index_where: Additional WHERE criterion that can be used to infer a conditional target index. .. versionadded:: 1.1 .. seealso:: :ref:`postgresql_insert_on_conflict` (tOnConflictDoNothingR(R RRR((sU/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyton_conflict_do_nothinglsN( t__name__t __module__t__doc__Rtmemoized_propertyR RtNoneRR(((sU/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyRs7s.dialects.postgresql.inserttOnConflictClausecBseZddddZRS(cCs|dk r[t|tj r[t|tjtjtjfr[t |dpR|}q[n|dk r/|dk rt dnt|tjr||_ d|_ d|_ q/t|tjr|j}|jdjd}q/t|tjr |j}|j}q/|j}|jdjd}n|dk rYd|_ ||_ ||_ n&|dkrd|_ |_ |_ ndS(NR s8'constraint' and 'index_elements' are mutually exclusivet postgresqlR(Rt isinstanceRt string_typesRtIndext ConstraintRtExcludeConstrainttgetattrt ValueErrortconstraint_targettinferred_target_elementstinferred_target_whereclauset expressionstdialect_optionstgetR R(R RRR((sU/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyt__init__s:                    N(RRRR,(((sU/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyRsRcBseZdZRS(R(RRt__visit_name__(((sU/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyRsRcBs&eZdZddddddZRS(RcCstt|jd|d|d||jdkrR|jdkrRtdnt|t si| rxtdng|j D]\}}||f^q|_ ||_ dS(NRRRsVEither constraint or index_elements, but not both, must be specified unless DO NOTHINGs,set parameter must be a non-empty dictionary( tsuperRR,R'RR&R%Rtdicttitemstupdate_values_to_settupdate_whereclause(R RRRRRtkeytvalue((sU/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyR,s .N(RRR-RR,(((sU/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyRs N(RR(tRRtsqlRtsql.baseRtsql.dmlRtStandardInsertt sql.elementsRtsql.expressionRtutil.langhelpersRt__all__RRRR(((sU/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/dialects/postgresql/dml.pyts{,