
b]c        _   @   sz  d  Z  d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m	 Z	 d d	 l m
 Z
 d d
 l m Z d d l m Z d d l m Z d d l m Z e d d d d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] d^ d_ d` da db dc dd de df dg dh di dj dk dl g^  Z e j dm e j  Z e j dn e j  Z do   e dp dq  D j dr g  Z e j ds e j  Z e j ds e j  Z e j dt e j  Z e j du e j  Z e j dv e j  Z i dw dx 6dy dz 6d{ d| 6d} d~ 6d d 6Z i% d e j 6d e j  6d e j! 6d e j" 6d e j# 6d e j$ 6d e j% 6d e j& 6d e j' 6d e j( 6d e j) 6d e j* 6d e j+ 6d e j, 6d e j- 6d e j. 6d e j/ 6d e j0 6d e j1 6d e j2 6d e j3 6d e j4 6d e j5 6d e j6 6d e j7 6d e j8 6d e j9 6d e j: 6d e j; 6d e j< 6d e j= 6d e j> 6d e j? 6d e j@ 6d e jA 6d e jB 6d e jC 6ZD i d e jE 6d e jF 6d e jG 6d e jH 6d e jI 6d e jJ 6d e jK 6d e jL 6d e jM 6d e jN 6d e jO 6d e jP 6d e jQ 6d e jR 6ZS i d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6ZT i d e
 jU jV 6d e
 jU jW 6d e
 jU jX 6d e
 jU jY 6d e
 jU jZ 6d e
 jU j[ 6Z\ d e] f d     YZ^ d e j_ e j` e]  f d     YZa d e jb f d     YZc d e^ f d     YZd d ed f d     YZe d e^ f d     YZf d ea f d     YZg d eg f d     YZh d e] f d     YZi d S(   s]  Base SQL and DDL compiler implementations.

Classes provided include:

:class:`.compiler.SQLCompiler` - renders SQL
strings

:class:`.compiler.DDLCompiler` - renders DDL
(data definition language) strings

:class:`.compiler.GenericTypeCompiler` - renders
type specification strings.

To generate user-defined SQL strings, see
:doc:`/ext/compiler`.

iNi   (   t   crud(   t   elements(   t	   functions(   t	   operators(   t   schema(   t
   selectable(   t   sqltypes(   t   visitorsi   (   t   exc(   t   utilt   allt   analyset   analyzet   andt   anyt   arrayt   ast   asct
   asymmetrict   authorizationt   betweent   binaryt   botht   caset   castt   checkt   collatet   columnt
   constraintt   createt   crosst   current_datet   current_rolet   current_timet   current_timestampt   current_usert   defaultt
   deferrablet   desct   distinctt   dot   elset   endt   exceptt   falset   fort   foreignt   freezet   fromt   fullt   grantt   groupt   havingt   iliket   int	   initiallyt   innert	   intersectt   intot   ist   isnullt   joint   leadingt   leftt   liket   limitt	   localtimet   localtimestampt   naturalt   newt   nott   notnullt   nullt   offt   offsett   oldt   ont   onlyt   ort   ordert   outert   overlapst   placingt   primaryt
   referencest   rightt   selectt   session_usert   sett   similart   somet	   symmetrict   tablet   thent   tot   trailingt   truet   uniont   uniquet   usert   usingt   verboset   whent   wheres   ^[A-Z0-9_$]+$s   ^[A-Z0-9_ $]+$c         C   s   h  |  ] } t  |   q S(    (   t   str(   t   .0t   x(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <setcomp>   s   	 i    i
   t   $s5   ^(?:RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULT)$s   ^(?:DEFERRED|IMMEDIATE)$s%   (?<![:\w\$\x5c]):([\w\$]+)(?![:\w\$])s   \x5c(:[\w\$]*)(?![:\w\$])s   %%(%(name)s)st   pyformatt   ?t   qmarks   %%st   formats   :[_POSITION]t   numerics	   :%(name)st   nameds    AND s    OR s    + s    * s    - s    / s    % t   -s    < s    <= s    != s    > s    >= s    = s    IS DISTINCT FROM s    IS NOT DISTINCT FROM s    || s    MATCH s    NOT MATCH s    IN s    NOT IN s   , s    FROM s    AS s    IS s    IS NOT s	    COLLATE s   EXISTS s	   DISTINCT s   NOT s   ANY s   ALL s    DESCs    ASCs    NULLS FIRSTs    NULLS LASTt   coalescet   CURRENT_DATEt   CURRENT_TIMEt   CURRENT_TIMESTAMPt   CURRENT_USERt	   LOCALTIMEt   LOCALTIMESTAMPt   randomt   sysdatet   SESSION_USERt   USERt   CUBEt   ROLLUPs   GROUPING SETSt   montht   dayt   yeart   secondt   hourt   doyt   minutet   quartert   dowt   weekt   epocht   millisecondst   microsecondst   timezone_hourt   timezone_minutet   UNIONs	   UNION ALLt   EXCEPTs
   EXCEPT ALLt	   INTERSECTs   INTERSECT ALLt   Compiledc           B   s   e  Z d  Z d Z e j   Z d d e j   d  Z e j	 d d  d    Z
 d   Z e d    Z d   Z d   Z d d	  Z e d
    Z d   Z d   Z RS(   s  Represent a compiled SQL or DDL expression.

    The ``__str__`` method of the ``Compiled`` object should produce
    the actual text of the statement.  ``Compiled`` objects are
    specific to their underlying database dialect, and also may
    or may not be specific to the columns referenced within a
    particular set of bind parameters.  In no case should the
    ``Compiled`` object be dependent on the actual values of those
    bind parameters, even though it may reference those values as
    defaults.
    c         C   s   | |  _  | |  _ |  j  j |  _ | r? |  j j |  |  _ n  | d k	 r | |  _ | j |  _ |  j rx | j	 |  _
 n  |  j |  j |  |  _ n  d S(   sq  Construct a new :class:`.Compiled` object.

        :param dialect: :class:`.Dialect` to compile against.

        :param statement: :class:`.ClauseElement` to be compiled.

        :param bind: Optional Engine or Connection to compile this
          statement against.

        :param schema_translate_map: dictionary of schema names to be
         translated when forming the resultant SQL

         .. versionadded:: 1.1

         .. seealso::

            :ref:`schema_translating`

        :param compile_kwargs: additional kwargs that will be
         passed to the initial call to :meth:`.Compiled.process`.


        N(   t   dialectt   bindt   identifier_preparert   preparert   _with_schema_translatet   Nonet	   statementt   supports_executiont   can_executet   _execution_optionst   execution_optionst   processt   string(   t   selfR   R   R   t   schema_translate_mapt   compile_kwargs(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   __init__  s     					s   0.7s   The :meth:`.Compiled.compile` method is deprecated and will be removed in a future release.   The :class:`.Compiled` object now runs its compilation within the constructor, and this method does nothing.c         C   s   d S(   sD   Produce the internal string representation of this element.
        N(    (   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   compileA  s    
c         C   s2   |  j  r | j |  | |  St j |  j   d  S(   N(   R   t   _execute_compiledR   t   ObjectNotExecutableErrorR   (   R   t
   connectiont   multiparamst   params(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _execute_on_connectionM  s    	c         C   s   t     d S(   s   Return a Compiled that is capable of processing SQL expressions.

        If this compiler is one, it would likely just return 'self'.

        N(   t   NotImplementedError(   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   sql_compilerS  s    c         K   s   | j  |  |  S(   N(   t   _compiler_dispatch(   R   t   objt   kwargs(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR   ]  s    c         C   s   |  j  p d S(   s3   Return the string text of the generated SQL or DDL.t    (   R   (   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   __str__`  s    c         C   s   t     d S(   s   Return the bind params for this compiled object.

        :param params: a dict of string/object pairs whose values will
                       override bind values compiled in to the
                       statement.
        N(   R   (   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   construct_paramse  s    c         C   s
   |  j    S(   s0   Return the bind params for this compiled object.(   R   (   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR   o  s    c         O   s@   |  j  } | d k r- t j d d d  n  | j |  | |  S(   s   Execute this compiled object.s>   This Compiled object is not bound to any Engine or Connection.t   codet   2afiN(   R   R   R   t   UnboundExecutionErrorR   (   R   R   R   t   e(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   executet  s    	c         O   s   |  j  | |   j   S(   sJ   Execute this compiled object and return the result's
        scalar value.(   R   t   scalar(   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     s    N(   t   __name__t
   __module__t   __doc__R   t   _cached_metadataR	   t   immutabledictR   R   t
   deprecatedR   R   t   propertyR   R   R   R   R   R   R   (    (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR      s"   
)
	
		
	t   TypeCompilerc           B   s&   e  Z d  Z d Z d   Z d   Z RS(   s2   Produces DDL specification for TypeEngine objects.s	   visit_\w+c         C   s   | |  _  d  S(   N(   R   (   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     s    c         K   s   | j  |  |  S(   N(   R   (   R   t   type_t   kw(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     s    (   R   R   R   t   ensure_kwargR   R   (    (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     s   	t   _CompileLabelc           B   sM   e  Z d  Z d Z d Z d	 d  Z e d    Z e d    Z d   Z	 RS(
   s;   lightweight label object which acts as an expression.Label.t   labelt   elementt   namec         C   s&   | |  _  | |  _ | f | |  _ d  S(   N(   R   R   t
   _alt_names(   R   t   colR   t	   alt_names(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     s    		c         C   s
   |  j  j S(   N(   R   t	   proxy_set(   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     s    c         C   s
   |  j  j S(   N(   R   t   type(   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     s    c         K   s   |  S(   N(    (   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   self_group  s    (   R   R   (    (
   R   R   R   t   __visit_name__t	   __slots__R   R   R   R   R   (    (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     s   t   SQLCompilerc           B   s  e  Z d  Z e Z e Z e Z Z	 Z
 e Z d Z e Z e Z e Z e Z e Z e Z e Z d Z d Z Z d e d  Z e d    Z e j d    Z e j  d    Z! d   Z" e j# d    Z$ d   Z% e d    Z& d d e d	  Z' e d
    Z( e j) d  d    Z* d   Z+ e d  Z, e d  Z- e d  Z. d e e d d  Z/ d   Z0 d e d  Z1 d   Z2 d   Z3 d   Z4 d   Z5 d   Z6 d   Z7 d   Z8 d e e d  Z9 d   Z: d   Z; d   Z< d   Z= d    Z> d!   Z? d"   Z@ d#   ZA d$   ZB d%   ZC d&   ZD d'   ZE d d(  ZF d)   ZG d*   ZH d+   ZI e e d, d-  ZJ d.   ZK d/   ZL d0   ZM d1   ZN d2   ZO d3   ZP d4   ZQ d5   ZR d6   ZS d e d7  ZT d8   ZU d9   ZV d:   ZW d;   ZX d<   ZY e d=  ZZ d>   Z[ d?   Z\ e j# d@    Z] dA   Z^ dB   Z_ dC   Z` dD   Za dE   Zb dF   Zc dG   Zd dH   Ze dI   Zf dJ   Zg dK   Zh dL   Zi e e e dM  Zj dN   Zk dO   Zl dP   Zm dQ   Zn dR   Zo dS   Zp d e dT  Zq e e d d dU  Zr e e e d dV  Zs dW   Zt e dX  Zu dY   Zv dZ   Zw d e e d[  Zx d\   Zy d]   Zz d^   Z{ d_   Z| d`   Z} da   Z~ db   Z e j dc e   f dd e   f g  Z e de  Z e e d d, e d e df  Z dg   Z dh   Z di   Z dj   Z dk   Z dl   Z dm   Z dn   Z do   Z dp   Z dq   Z dr   Z e e e d e ds  Z e dt  Z du   Z e dv  Z dw   Z dx   Z dy   Z e dz  Z e j# d{    Z d|   Z d}   Z e d~  Z d   Z d   Z d   Z RS(   ss   Default implementation of :class:`.Compiled`.

    Compiles :class:`.ClauseElement` objects into SQL strings.

    c         K   s9  | |  _  | p t | d t  |  _ i  |  _ t j   |  _ g  |  _ g  |  _	 | j
 |  _
 |  j
 r g  |  _ | j d k |  _ n  t | j |  _ d |  _ | j p | j |  _ t j |  j  |  _ i  |  _ t j |  | | |  |  j s |  j s |  j r| j r| j |  _ n  |  j
 r5|  j r5|  j   n  d S(   s  Construct a new :class:`.SQLCompiler` object.

        :param dialect: :class:`.Dialect` to be used

        :param statement: :class:`.ClauseElement` to be compiled

        :param column_keys:  a list of column names to be compiled into an
         INSERT or UPDATE statement.

        :param inline: whether to generate INSERT statements as "inline", e.g.
         not formatted to return any generated defaults

        :param kwargs: additional keyword arguments to be consumed by the
         superclass.

        t   inlineRp   N(    t   column_keyst   getattrt   FalseR   t   bindsR	   t   column_dictt
   bind_namest   stackt   _result_columnst
   positionalt   positiontupt
   paramstylet   _numeric_bindst   BIND_TEMPLATESt   bindtemplateR   t   ctest   label_lengtht   max_identifier_lengtht   PopulateDictt   _process_anont   anon_mapt   truncated_namesR   R   t   isinsertt   isupdatet   isdeletet
   _returningt	   returningt   _apply_numbered_params(   R   R   R   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     s*    									c         C   s   t  |  j |  j  S(   N(   t   listt   insert_prefetcht   update_prefetch(   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   prefetchE  s    c         C   s:   t  j   |  _ i  |  _ t |  _ |  j r6 i  |  _ n  d S(   s   Initialize collections related to CTEs only if
        a CTE is located, to save on the overhead of
        these collections otherwise.

        N(   R	   t   OrderedDictR   t   ctes_by_nameR   t   ctes_recursiveR   t   cte_positional(   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _init_cte_stateI  s
    			c         c   s   |  j  |  j } } g  t |  _  |  _ z> |  j rL |  j d } t | d <n d } |  j  |  j f VWd | r} | j d  n  | | |  _  |  _ Xd S(   s;   special API to support the use case of 'nested result sets'it   need_result_map_for_nestedN(   R   t   _ordered_columnsR   R   t   TrueR   t   pop(   R   t   result_columnst   ordered_columnst   entry(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _nested_resultW  s    	c            s7   t  j d    t j d   f d   |  j  |  _ d  S(   Ni   s   \[_POSITION\]c            s   t  t j     S(   N(   Rh   R	   t   next(   t   m(   t   poscount(    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   <lambda>r  R   (   t	   itertoolst   countt   ret   subR   (   R   (    (   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR   o  s    c            s'   t  d     f d     j D D  S(   Nc         s   s-   |  ]# \ } } | d  k	 r | | f Vq d  S(   N(   R   (   Ri   t   keyt   value(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>x  s   	c         3   s1   |  ]' }   j  | | j j   j  f Vq d  S(   N(   R   R   t   _cached_bind_processorR   (   Ri   t	   bindparam(   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>z  s   (   t   dictR   (   R   (    (   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _bind_processorsu  s    c         C   s   t  |  j  d k S(   Ni   (   t   lenR   (   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   is_subquery  s    c         C   s   |  S(   N(    (   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     s    c         C   s  | r i  } x |  j  D] } |  j  | } | j | k rL | | j | | <q | | k ri | | | | <q | r | j r | r t j d | j | f d d  q t j d | j d d  q | j r | j | | <q | j | | <q W| Si  } x |  j  D] } | r_| j r_| r@t j d | j | f d d  q_t j d | j d d  n  | j r| j | |  j  | <q | j | |  j  | <q W| Sd S(   s5   return a dictionary of bind parameter keys and valuess@   A value is required for bind parameter %r, in parameter group %dR   t   cd3xs)   A value is required for bind parameter %rN(   R   R  t   requiredR   t   InvalidRequestErrort   callablet   effective_valueR  (   R   R   t   _group_numbert   _checkt   pdR	  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     sL    
	
	c         C   s   |  j  d t  S(   so   Return the bind param dictionary embedded into this
        compiled object, for those values that are present.R  (   R   R   (   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     s    s   sqlalchemy.engine.resultc         C   s   | j  j |  j  S(   s(   utility method used for unit tests only.(   t   ResultMetaDatat   _create_result_mapR   (   R   t   result(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s    c         C   s   d S(   s   Called when a SELECT statement has no froms, and no FROM clause is
        to be appended.

        Gives Oracle a chance to tack on a ``FROM DUAL`` to the string output.

        R   (    (   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   default_from  s    c         K   s   d | j  j |  |  d S(   Nt   (t   )(   R   R   (   R   t   groupingt   asfromR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_grouping  s    c   
      K   s   |  j  r |  j j r |  j  d d } | j \ } } } | rG | } n | } | j j }	 |	 d  k	 r |	 j | k r |	 j | |	 j  r | j j | d <q n  |  j	 | j d | | S(   NiR   t   render_label_as_labelt   within_columns_clause(
   R   R   t   supports_simple_order_by_labelt   _label_resolve_dictR   t   _order_by_label_elementR   R   t   shares_lineageR   (
   R   R   R   R   R   t	   with_colst
   only_fromst	   only_colst   resolve_dictt   order_by_elem(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_label_reference  s     		c   	      K   s   |  j  s |  j | j  S|  j  d d } | j \ } } } y' | rU | | j } n | | j } Wn* t k
 r t j | j t j	 d  n! X| | d <|  j | d | | Sd  S(   NiR   s6   Can't resolve label reference for ORDER BY / GROUP BY.R  R   (
   R   R   t   _text_clauseR"  R   t   KeyErrorR   t   _no_text_coercionR   t   CompileError(	   R   R   R   R   R   R%  R&  R'  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_textual_label_reference  s     	
c   
      K   s  | o
 | } | | k } | s% | r^ t  | j t j  rR |  j d | j  }	 q^ | j }	 n  | r | d  k	 r | |	 | j | |	 f | j | j  n  | j j	 |  d t
 d t
 | t t j |  j j | |	  S| r |  j j | |	  S| j j	 |  d t | Sd  S(   Nt   colidentR   t   within_label_clause(   t
   isinstanceR   R   t   _truncated_labelt   _truncated_identifierR   R   R   R   R   R   t	   OPERATORSR   t   as_R   t   format_labelR   (
   R   R   t   add_to_result_mapR1  R   R  R   t   render_label_with_ast   render_label_onlyt	   labelname(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_label  s$    =	c         C   s   t  j d   d  S(   Ns:   Cannot compile Column object until its 'name' is assigned.(   R   R.  (   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _fallback_column_nameF  s    c         K   sn  | j  } } | d  k r+ |  j |  } n  | j } | rb t | t j  rb |  j d |  } n  | d  k	 r | | | | | | j f | j	  n  | r |  j
 |  } n |  j j |  } | j } | d  k s | s | j r | S|  j j |  }	 |	 r|  j j |	  d }
 n d }
 | j  } t | t j  rN|  j d |  } n  |
 |  j j |  d | Sd  S(   NR0  t   .R   t   alias(   R   R   R=  t
   is_literalR2  R   R3  R4  R  R   t   escape_literal_columnR   t   quoteR\   t   named_with_columnt   schema_for_objectt   quote_schema(   R   R   R8  t   include_tableR   R   t	   orig_nameR@  R\   t   effective_schemat   schema_prefixt	   tablename(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_columnK  s.    	"		c         K   s   |  j  j | j  S(   N(   R   t   format_collationt	   collation(   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_collations  s    c         K   s   | j  S(   N(   R   (   R   t
   fromclauseR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_fromclausev  s    c         K   s   | j  S(   N(   R   (   R   t   indexR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_indexy  s    c         K   s#   | | d <|  j  j j | j |  S(   Nt   type_expression(   R   t   type_compilerR   R   (   R   t
   typeclauseR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_typeclause|  s    
c         C   s%   |  j  j r! | j d d  } n  | S(   Nt   %s   %%(   R   t   _double_percentst   replace(   R   t   text(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   post_process_text  s    c         C   s%   |  j  j r! | j d d  } n  | S(   NRW  s   %%(   R   RX  RY  (   R   RZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRA    s    c            sU       f d   }  j  s* t  _ n  t j d   t j |  j  j    S(   Nc            sI   |  j  d  } |  j k r5  j  j |    S j |    Sd  S(   Ni   (   R3   t   _bindparamsR   t   bindparam_string(   R   R   (   R   R   t
   textclause(    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   do_bindparam  s    c         S   s   |  j  d  S(   Ni   (   R3   (   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    R   (   R   R   t   isplaintextt   BIND_PARAMS_ESCR  t   BIND_PARAMSR[  RZ  (   R   R^  R   R_  (    (   R   R   R^  s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_textclause  s    	c         K   s   |  j  } | r |  j n
 |  j  d } | pY | d k rJ | j d t  pY | j d t  } | r | j |  _ |  _ x0 | j D]" }	 |  j |	 d t	 d |  j
 q Wn  |  j | j |  }
 | r | r d |
 }
 n  |
 S(   Nii    t   need_result_map_for_compoundR   R   R8  s   (%s)(   R   t   _default_stack_entryt   getR   R   R   t   _textual_ordered_columnst   column_argsR   R   t   _add_to_result_mapR   (   R   t   taft   compound_indexR  t   parensR   t   toplevelR   t   populate_result_mapt   cRZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_text_as_from  s"    
c         K   s   d S(   Nt   NULL(    (   R   t   exprR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_null  s    c         K   s   |  j  j r d Sd Sd  S(   NR`   t   1(   R   t   supports_native_boolean(   R   Rr  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_true  s    c         K   s   |  j  j r d Sd Sd  S(   NR,   t   0(   R   Ru  (   R   Rr  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_false  s    c            s   | j  } | d  k r d } n t | j  } | j d      f d   | j D D  } | j r|  j j r| d | } n  | S(   Nt    c         s   s   |  ] } | r | Vq d  S(   N(    (   Ri   t   s(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>  s   c         3   s!   |  ] } | j      Vq d  S(   N(   R   (   Ri   Ro  (   R   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>  s    s   VALUES (   t   operatorR   R5  R=   t   clausest   _tuple_valuesR   t   tuple_in_values(   R   t
   clauselistR   t   sepRZ  (    (   R   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_clauselist  s    		#c         K   s   d } | j  d  k	 r5 | | j  j |  |  d 7} n  xI | j D]> \ } } | d | j |  |  d | j |  |  d 7} q? W| j d  k	 r | d | j j |  |  d 7} n  | d 7} | S(   Ns   CASE Ry  s   WHEN s    THEN s   ELSE t   END(   R  R   R   t   whenst   else_(   R   t   clauseR   Rj   t   condR  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_case  s     3!
c         K   s   | j  j |  |  S(   N(   t   typed_expressionR   (   R   t   type_coerceR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_type_coerce  s    c         K   s,   d | j  j |  |  | j j |  |  f S(   Ns   CAST(%s AS %s)(   R  R   RU  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_cast  s    c         K   s*  d | d t  j k r d nx | d t  j k r5 d n_ | d d k  rq d |  j t  j t | d   |  f n# d |  j t  j | d  |  f | d t  j k r d nx | d t  j k r d n_ | d d k  rd |  j t  j t | d   |  f n# d |  j t  j | d  |  f f S(	   Ns	   %s AND %si    s   UNBOUNDED PRECEDINGs   CURRENT ROWs   %s PRECEDINGs   %s FOLLOWINGi   s   UNBOUNDED FOLLOWING(   R   t   RANGE_UNBOUNDEDt   RANGE_CURRENTR   t   literalt   abs(   R   t   range_R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _format_frame_clause  s    < <c      
   K   s   | j  r% d |  j | j  |  } n+ | j rJ d |  j | j |  } n d  } d | j j |  |  d j g  d | j f d | j f f D]@ \ } } | d  k	 r t	 |  r d | | j |  |  f ^ q | r | g n g   f S(   Ns   RANGE BETWEEN %ss   ROWS BETWEEN %ss   %s OVER (%s)Ry  t	   PARTITIONt   ORDERs   %s BY %s(
   R  R  t   rowsR   R   R   R=   t   partition_byt   order_byR  (   R   t   overR   R  t   wordR  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_over  s    				7c         K   s,   d | j  j |  |  | j j |  |  f S(   Ns   %s WITHIN GROUP (ORDER BY %s)(   R   R   R  (   R   t   withingroupR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_withingroup-  s    c         K   s,   d | j  j |  |  | j j |  |  f S(   Ns   %s FILTER (WHERE %s)(   t   funcR   t	   criterion(   R   t
   funcfilterR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_funcfilter3  s    c         K   s8   |  j  j | j | j  } d | | j j |  |  f S(   Ns   EXTRACT(%s FROM %s)(   t   extract_mapRf  t   fieldRr  R   (   R   t   extractR   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_extract9  s    c         K   s7  | d  k	 r+ | | j | j d | j  n  t |  d | j j   d   } | r] | | |  St j | j d   } | r | j r | d 7} q n= | j } |  j	 j
 |  r |  j	 j |  n | } | d } d j g  | j D]0 } |  j	 j
 |  r|  j	 j |  n | ^ q | g  i |  j | |  d 6Sd  S(   Ns   visit_%s_funcs   %(expr)sR>  Rr  (    (   R   R   R   R   t   lowert	   FUNCTIONSRf  t	   __class__t	   _has_argsR   t   _requires_quotes_illegal_charsRB  R=   t   packagenamest   function_argspec(   R   R  R8  R   t   dispR   t   tok(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_function@  s$    		$
:
c         K   s   |  j  | j  S(   N(   t   visit_sequencet   sequence(   R   t
   next_valueR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_next_value_func`  s    c         K   s   t  d |  j j   d  S(   Ns2   Dialect '%s' does not support sequence increments.(   R   R   R   (   R   R  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  c  s    c         K   s   | j  j |  |  S(   N(   t   clause_exprR   (   R   R  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  i  s    i    c            s   j  } | r  j n
  j  d } | pG | d k oG | j d t  }  j  j i | d d 6| d d 6| d 6| d 6  j j | j  }	 d |	 d j     f d   t | j	  D  }
 |
  j
 | t d	      7}
 |
  j |   7}
 |
 | j d  k	 s"| j d  k	 r4 j |   p7d
 7}
  j r]| r] j   |
 }
 n   j  j d    r| rd |
 d S|
 Sd  S(   Nii    Rd  t   correlate_fromst   asfrom_fromsR   Ry  c      
   3   s9   |  ]/ \ } } | j   d    d t d |  Vq d S(   R  Rl  Rk  N(   R   R   (   Ri   t   iRo  (   R  R   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>  s   R  R   R  R  (   R   Re  Rf  R   t   appendt   compound_keywordst   keywordR=   t	   enumeratet   selectst   group_by_clauseR
  t   order_by_clauset   _limit_clauseR   t   _offset_clauset   limit_clauseR   t   _render_cte_clauseR   (   R   t   csR  Rl  Rk  R   Rm  R   t   need_result_mapR  RZ  (    (   R  R   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_compound_selectl  s6    
	"c         C   s6   d | j  | | r d | n d f } t |  | d   S(   Ns   visit_%s_%s%st   _R   (   R   R   R   (   R   t	   operator_t
   qualifier1t
   qualifier2t   attrname(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _get_operator_dispatch  s
    c         K   s   | j  rr | j r$ t j d   n  |  j | j  d d  } | rU | | | j  |  S|  j | t | j  |  Snf | j r |  j | j d d  } | r | | | j |  S|  j | t | j |  Sn t j d   d  S(   NsF   Unary expression does not support operator and modifier simultaneouslyt   unaryR{  t   modifiers,   Unary expression has no operator or modifier(   R{  R  R   R.  R  t    _generate_generic_unary_operatorR5  t    _generate_generic_unary_modifier(   R   R  R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_unary  s&    			c         K   sC   | j  s |  j j r( |  j | j |  Sd |  j | j |  Sd  S(   Ns   %s = 1(   t   _is_implicitly_booleanR   Ru  R   R   (   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_istrue_unary_operator  s    	c         K   sG   | j  s |  j j r, d |  j | j |  Sd |  j | j |  Sd  S(   Ns   NOT %ss   %s = 0(   R  R   Ru  R   R   (   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_isfalse_unary_operator  s    	c         K   s   d |  j  | d t j S(   Ns   NOT %st   override_operator(   t   visit_binaryR   t   match_op(   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_notmatch_op_binary  s    	c         C   s   t  j d  d  S(   Ns   The IN-predicate was invoked with an empty sequence. This results in a contradiction, which nonetheless can be expensive to evaluate.  Consider alternative strategies for improved performance.(   R	   t   warn(   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _emit_empty_in_warning  s    c         K   sF   |  j  j r d S|  j  j r) |  j   n  |  j | j | j k  Sd  S(   Ns   1 != 1(   R   t   _use_static_int   _warn_on_empty_inR  R   R?   (   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_empty_in_op_binary  s
    c         K   sF   |  j  j r d S|  j  j r) |  j   n  |  j | j | j k  Sd  S(   Ns   1 = 1(   R   R  R  R  R   R?   (   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_empty_notin_op_binary  s
    c         C   s   t  d |  j j   d  S(   Ns3   Dialect '%s' does not support empty set expression.(   R   R   R   (   R   t   element_types(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_empty_set_expr  s    c         K   s   |  j  r@ t | j t j  r@ t | j t j  r@ t | d <n  | pL | j } |  j | d d   } | rz | | | |  Sy t
 | } Wn# t k
 r t j |  |   n X|  j | | |  Sd  S(   Nt   literal_bindsR   (   t   ansi_bind_rulesR2  R?   R   t   BindParameterRU   R   R{  R  R   R5  R,  R   t   UnsupportedCompilationErrort   _generate_generic_binary(   R   R   R  t   eager_groupingR   R  R  t   opstring(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s    	c         K   s   |  j  | j |  S(   N(   R   t   sql_function(   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt&   visit_function_as_comparison_op_binary  s    c         K   sd   |  j  j r6 |  j | j |  d |  j | j |  S|  j | j |  d |  j | j |  Sd  S(   Ns    %% s    % (   R   RX  R   R?   RU   (   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_mod_binary  s    *c         K   s+   | j  | d <|  j | d | j d |  S(   NR  Ry  (   R  R  R  (   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_custom_op_binary%  s    c         K   s   |  j  | | j d |  S(   NRy  (   R  R  (   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_custom_op_unary_operator+  s    c         K   s   |  j  | d | j |  S(   NRy  (   R  R  (   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_custom_op_unary_modifier0  s    c         K   sq   | j  d t  } t | d <| j j |  d | | | | j j |  d | | } | rm | rm d | } n  | S(   Nt
   _in_binaryR  s   (%s)(   Rf  R   R   R?   R   RU   (   R   R   R  R  R   R  RZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  5  s    
%c         K   s   | | j  j |  |  S(   N(   R   R   (   R   R  R  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  J  s    c         K   s   | j  j |  |  | S(   N(   R   R   (   R   R  R  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  M  s    c         C   s   t  j d d t j S(   Ns   '%'R   (   R   t   literal_columnR   t
   STRINGTYPE(   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _like_percent_literalP  s    c         K   sF   | j    } |  j } | j | j  j |  | _ |  j | | |  S(   N(   t   _cloneR  t   __add__RU   t   visit_like_op_binary(   R   R   R{  R   t   percent(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_contains_op_binaryT  s    	c         K   sF   | j    } |  j } | j | j  j |  | _ |  j | | |  S(   N(   R  R  R  RU   t   visit_notlike_op_binary(   R   R   R{  R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_notcontains_op_binaryZ  s    	c         K   s=   | j    } |  j } | j | j  | _ |  j | | |  S(   N(   R  R  t   __radd__RU   R  (   R   R   R{  R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_startswith_op_binary`  s    	c         K   s=   | j    } |  j } | j | j  | _ |  j | | |  S(   N(   R  R  R  RU   R  (   R   R   R{  R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_notstartswith_op_binaryf  s    	c         K   s=   | j    } |  j } | j | j  | _ |  j | | |  S(   N(   R  R  R  RU   R  (   R   R   R{  R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_endswith_op_binaryl  s    	c         K   s=   | j    } |  j } | j | j  | _ |  j | | |  S(   N(   R  R  R  RU   R  (   R   R   R{  R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_notendswith_op_binaryr  s    	c         K   sd   | j  j d d   } d | j j |  |  | j j |  |  f | r_ d |  j | t j  n d S(   Nt   escapes
   %s LIKE %ss    ESCAPE R   (	   t	   modifiersRf  R   R?   R   RU   t   render_literal_valueR   R  (   R   R   R{  R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  x  s    c         K   sd   | j  j d d   } d | j j |  |  | j j |  |  f | r_ d |  j | t j  n d S(   NR  s   %s NOT LIKE %ss    ESCAPE R   (	   R  Rf  R   R?   R   RU   R  R   R  (   R   R   R{  R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s    c         K   sd   | j  j d d   } d | j j |  |  | j j |  |  f | r_ d |  j | t j  n d S(   NR  s   lower(%s) LIKE lower(%s)s    ESCAPE R   (	   R  Rf  R   R?   R   RU   R  R   R  (   R   R   R{  R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_ilike_op_binary  s    c         K   sd   | j  j d d   } d | j j |  |  | j j |  |  f | r_ d |  j | t j  n d S(   NR  s   lower(%s) NOT LIKE lower(%s)s    ESCAPE R   (	   R  Rf  R   R?   R   RU   R  R   R  (   R   R   R{  R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_notilike_op_binary  s    c         K   s4   | j  j d t  } |  j | | r* d n d |  S(   NR[   s    BETWEEN SYMMETRIC s	    BETWEEN (   R  Rf  R   R  (   R   R   R{  R   R[   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_between_op_binary  s    c         K   s4   | j  j d t  } |  j | | r* d n d |  S(   NR[   s    NOT BETWEEN SYMMETRIC s    NOT BETWEEN (   R  Rf  R   R  (   R   R   R{  R   R[   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_notbetween_op_binary  s
    c   
   	   K   s  | sX | j  j |  j  } | j rX | j |  } |  j | d t d | d | | Sn  | sm | r |  j r | j d  k r | j
 d  k r t j d | j   n  |  j | d t | S|  j |  } | |  j k rl|  j | }	 |	 | k	 rl|	 j s| j r2|	 j j | j  r2t j d | j   qi|	 j sD| j rit j d | j | j f   qiqln  | |  j | j <|  j | <|  j | d | j | S(   Nt   skip_bind_expressionR   R  s@   Bind parameter '%s' without a renderable value not allowed here.sI   Bind parameter '%s' conflicts with unique bind parameter of the same names   bindparam() name '%s' is reserved for automatic usage in the VALUES or SET clause of this insert/update statement.   Please use a name other than column name when using bindparam() with insert() or update() (for example, 'b_%s').t	   expanding(   R   t   dialect_implR   t   _has_bind_expressiont   bind_expressionR   R   R  R  R   R  R   R.  R  t   render_literal_bindparamt   _truncate_bindparamR   Rb   R   t   intersectiont   _is_crudR]  R  (
   R   R	  R   R  R  R   t   implR  R   t   existing(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_bindparam  sB    		
c         K   s   | j  } |  j | | j  S(   N(   R  R  R   (   R   R	  R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s    	c         C   s6   | j  |  j  } | r" | |  St d |   d S(   s  Render the value of a bind parameter as a quoted literal.

        This is used for statement sections that do not accept bind parameters
        on the target driver/database.

        This should be implemented by subclasses using the quoting services
        of the DBAPI.

        s(   Don't know how to literal-quote value %rN(   t   _cached_literal_processorR   R   (   R   R  R   t	   processor(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s
    
c         C   s[   | |  j  k r |  j  | S| j } t | t j  rJ |  j d |  } n  | |  j  | <| S(   NR	  (   R   R  R2  R   R3  R4  (   R   R	  t	   bind_name(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s    	c         C   s   | | f |  j  k r& |  j  | | f S| j |  j  } t |  |  j d k r |  j  j | d  } | d t |  j d d  !d t |  d } | d |  j  | <n | } | |  j  | | f <| S(   Ni   i   i    R  i   (   R   t	   apply_mapR   R  R   Rf  t   maxt   hex(   R   t   ident_classR   t   anonnamet   countert	   truncname(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR4    s    /c         C   s   | |  j  S(   N(   R   (   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   _anonymize(  s    c         C   sP   | j  d d  \ } } |  j j | d  } | d |  j | <| d t |  S(   NRy  i   R  (   t   splitR   Rf  Rh   (   R   R  t   identt   derivedt   anonymous_counter(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR   +  s    c         K   se   |  j  r8 | d  k	 r% | j |  q8 |  j j |  n  | rO t |  _ d | S|  j i | d 6Sd  S(   Ns   ([EXPANDING_%s])R   (   R   R   R  R   R   t   contains_expanding_parametersR   (   R   R   t   positional_namesR  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR]  1  s    		c            s    j    | | d <t | j t j  rA   j d | j  } n	 | j } t } t }	 |   j k r   j | }
 | |
 k }	 | |
 j	 k s | |
 k r t } q |
 | j	 k r   j
 |
 =q t j d |   n  | s | r=| j d  k	 r.| j } | j j } t | t j  r:  j d |  } q:q=| } d  } n  | r8|   j | <d | j j k rd   j k r  j j i | j j d d 6   _ n  |   j
 k r  j | |  n  | r8|   j
 k r8| j rt   _ n    j j | |  } | j rt | j t j  r&| j } n4 t | j t j  rN| j j d } n t sZt  g  t j | j   D] } | d  k	 rm| ^ qm} | d d j!   f d   | D  7} n    j" rg  | d	 <  j# | <n  | d
 | j j$   d t | 7} | j% r%| d   j& | | j% |  7} n  |   j
 | <q8n  | r| r^|	 r^  j j | |  S| r  j j | |  }   j j' |  r  j j( |  } n  |   j) |  7} | S  j j | |  Sn  d  S(   Nt   visiting_cteR?  s5   Multiple, unrelated CTEs found with the same name: %rt
   autocommiti    s   (%s)s   , c         3   s!   |  ] }   j  j |  Vq d  S(   N(   R   t   format_column(   Ri   R  (   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>  s   R  s    AS 
R  Ry  (*   R   R2  R   R   R3  R4  R   R   R   t	   _restatesR   R   R.  t
   _cte_aliasR   R   R   R   Ra   t	   visit_ctet	   recursiveR   R   t   format_aliast   originalR   t   Selectt   CompoundSelectR  t   AssertionErrorR	   t   unique_listt   inner_columnsR=   R   R   R   t	   _suffixest   _generate_prefixest   _requires_quotesRB  t   get_render_as_alias_suffix(   R   t   cteR  t   ashintt	   fromhintsR  R   t   cte_namet
   is_new_ctet   embedded_in_current_named_ctet   existing_ctet   pre_alias_ctet   cte_pre_alias_nameRZ  t
   col_sourceRo  t
   recur_cols(    (   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR$  ?  s    	

										c   	      K   s   | s | rE t  | j t j  r9 |  j d | j  } qE | j } n  | r^ |  j j | |  S| r | j j |  d t	 | |  j
 |  j j | |   } | r | | k r |  j | | | | |  } n  | S| j j |  |  Sd  S(   NR?  R  (   R2  R   R   R3  R4  R   R&  R'  R   R   R0  t   format_from_hint_text(	   R   R?  R  R2  t   iscrudR3  R   t
   alias_namet   ret(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_alias  s     		c         K   s   t  | d <d |  j | |  S(   Nt   laterals
   LATERAL %s(   R   R@  (   R   RA  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_lateral  s    
c         K   sg   d |  j  | d t | | j   j |  |  f } | j d  k	 rc | d | j j |  |  7} n  | S(   Ns   %s TABLESAMPLE %sR  s    REPEATABLE (%s)(   R@  R   t   _get_methodR   t   seedR   (   R   t   tablesampleR  R   RZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_tablesample  s    c         C   s   d | S(   Ns    AS (    (   R   t   alias_name_text(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR0    s    c         C   s    |  j  j | | | | f  d  S(   N(   R   R  (   R   t   keynameR   t   objectsR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRi    s    c	            s;    j  j  j  }	 |	 j r] | s* | r] |	 j    }
 | rT    f d   } q{ d } n   }
 | ru  j } n d } | s |
 } nt   t j	  r |
   k	 r t
 |
   j d   j f } q|
 } nC| d k	 r| rt
 |
 | d   j f } n| rst   t j  rs  j rs  j d k	 rst   j t j  rst
 |
 t j   j  d   j f } n t   t j  rt   t j  s  j rt   d  st   t j  rt
 |
   j  } n< |
   k	 rt
 |
 t j   j  d   j f } n |
 } | j d | d |  | j  |  S(   s.   produce labeled columns present in a select().c            s!    j  |  |   f | |  d  S(   N(   Ri  (   RH  R   RI  R   (   R   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR8    s    R   R   R   R8  N(   R   R  R   t   _has_column_expressiont   column_expressionR   Ri  R2  R   t   LabelR   R   R   t
   _key_labelt   ColumnClauseR@  R\   R   R(  t   _as_truncatedR  t
   TextClauset   UnaryExpressiont   wraps_column_expressiont   hasattrR   t   Functiont
   anon_labelt   updateR   (   R   RV   R   Rn  R  t   column_clause_argsR   R   t   need_column_expressionsR  t   col_exprR8  t   result_expr(    (   R   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _label_select_column  s\    				
		c         C   s-   |  j  | |  } | r) | d | 7} n  | S(   NRy  (   t   get_from_hint_text(   R   t   sqltextR\   t   hintR=  t   hinttext(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR<  L  s    c         C   s   d  S(   N(   R   (   R   t   byfroms(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   get_select_hint_textR  s    c         C   s   d  S(   N(   R   (   R   R\   RZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR\  U  s    c         C   s   d  S(   N(   R   (   R   R\   RZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   get_crud_hint_textX  s    c         C   s   d j  |  S(   NRy  (   R=   (   R   t
   hint_texts(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   get_statement_hint_text[  s    c            s.   i    i  g      f d     |  S(   s   Rewrite any "a JOIN (b JOIN c)" expression as
        "a JOIN (select * from b JOIN c) AS anon", to support
        databases that can't parse a parenthesized join correctly
        (i.e. sqlite < 3.7.16).

        c   
         sz  |   d k r  d |  S|    k r0   |  S|  j    }   |  <| j r| j rt | j t j  r| j    | j |  | _  | j |  } t j	 | j
 g d t j   } x) | j D] } | j | _ | j | _ q Wt t | j j
 j | j   } | | | j
 j <| | | j
 j <| | | j j
 j <| | | j j
 j <xE t  d j    D]- \ } } | | k rg| |  d | <qgqgW d j |  | | _  | j |  | _ n | j rd | d <| j d  |  n | j rc| j rc| j d d   d k }	 |	 r3 j i   n  d | d <| j d  |  |	 rv d =qvn | j d  |  | S(   Nit
   use_labelst   select_containert   transform_cluet   clonet   inside_select(   R  t   is_selectablet   _is_joinR2  RU   R   t   FromGroupingt   _reset_exportedR?   R(  R   R   R?  Ro  R  RM  R   t   _labelR
  t   zipR   t   itemsRV  t   onclauset   _is_from_containert   _copy_internalst
   _is_selectRf  R   R  (
   R   R   t   newelemRU   t   selectable_Ro  t   translate_dictt   kt   vt   barrier_select(   t   clonedt   column_translatet   visit(    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR}  h  sR    		
#		

(    (   R   RV   (    (   R{  R|  R}  s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt"   _transform_select_for_nested_joins^  s    	Qc   	   
      s   t  d   | j D    t    f d   | j D  } g  |  j D]I \ } } } } | | t g  | D] } | j | |  ^ qd  | f ^ qB |  _ d  S(   Nc         s   s   |  ] } | j  | f Vq d  S(   N(   RM  (   Ri   Ro  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>  s    c         3   s"   |  ] }   | j  | f Vq d  S(   N(   RM  (   Ri   Ro  (   t	   inner_col(    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>  s    (   R
  R,  R   t   tupleRf  (	   R   RV   t   transformed_selectt   dR  R   t   objst   typR   (    (   R  s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt&   _transform_result_map_for_nested_joins  s
    R  R  c   	      C   s   |  j  } | r |  j n
 |  j  d } | d } | d } | rk | rk | j d | j |  d d  } n | j d | d |  } | S(   NiR  R  t   explicit_correlate_fromst   implicit_correlate_froms(    (   R   Re  t   _get_display_fromst
   difference(	   R   RV   R  RA  Rm  R   R  R  t   froms(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _display_froms_for_select  s    


				c	            s  | j  o$ | o$ |  j o$ |  j j }
 |
 ro |  j |  } |  j | d | d | d | d | d t |	 } n  |  j } | r |  j n
 |  j d } | p | j d t	  p | j d t	  } } | d	 k r t	 } n  | r d
 |	 k r |	 d
 =n  |
 r| r|  j
 | |  n  | S|  j | | | |  } |	 j   } | j i t	 d 6t	 d 6 d } | j r|  j |  \ } } | r| | d 7} qn d  } | j r| |  j | | j |	  7} n  | |  j | |	  7} g  g  | j D]3 \ } } |  j | | | | | d | d | ^ qD] } | d  k	 r| ^ q} | r| d  k	 rt t g  | j D] \ } } | ^ q]g  | j D] \ } } | ^ q|    g  |  j D]: \ } } } } | | t   f d   | D  | f ^ q|  _ n  |  j | | | | | |	  } | j rng  | j D]* \ } } | d |  j j f k r| ^ q} | rn| d |  j |  7} qnn  |  j r| r|  j   | } n  | j  r| d |  j | | j  |	  7} n  |  j j! d  | s| r| rd | d S| Sd  S(   NR  Rl  R3  Rk  t   nested_join_translationiRd  R   i    R8  R1  R   s   SELECT Ry  R   RX  c         3   s!   |  ] }   j  | |  Vq d  S(   N(   Rf  (   Ri   t   o(   t	   translate(    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>V  s    t   *R  R  ("   Re  R   R   t   supports_right_nested_joinsR~  t   visit_selectR   Re  Rf  R   R  t   _setup_select_stackt   copyRV  t   _hintst   _setup_select_hintsR   t	   _prefixesR.  t   get_select_precolumnst   _columns_plus_namesR[  R
  Ro  R   R  t   _compose_select_bodyt   _statement_hintsR   Rd  R   R  R-  R   (   R   RV   R  Rl  R3  Rk  R  t   select_wraps_forRA  R   t   needs_nested_translationR  RZ  Rm  R   Rn  RX  R  RW  t	   hint_textt   byfromR   R   Ro  R,  R  R   R   t   dialect_namet   htt   per_dialect(    (   R  s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s    	
	
	
			D%M	$	c      
   C   s   t  g  | j j   D]P \ \ } } } | d |  j j f k r | | i | j |  d t d 6f ^ q  } |  j |  } | | f S(   NR  R2  R   (   R
  R  Rp  R   R   R   R   Ra  (   R   RV   t   from_R   R_  R  R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  v  s    Gc         C   s   | d } | d } | rE | rE | j  d | j |  d d  } n | j  d | d |  } t t j |    } | j |  }	 i | d 6|	 d 6| d 6}
 |  j j |
  | S(   NR  R  R  R  R   (    (   R  R  RX   R   t   _from_objectsRa   R   R  (   R   RV   R   R  RA  R  R  R  t   new_correlate_fromst   all_correlate_fromst	   new_entry(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s$    

				
c   	      C   s  | d j  |  7} | r | d 7} | j rm | d j  g  | D]$ } | j |  d t d | | ^ q<  7} q | d j  g  | D] } | j |  d t | ^ q}  7} n | |  j   7} | j d  k	 r | j j |  |  } | r | d | 7} q n  | j j r| |  j	 | |  7} n  | j
 d  k	 rY| j
 j |  |  } | rY| d | 7} qYn  | j j r~| |  j | |  7} n  | j d  k	 s| j d  k	 r| |  j | |  7} n  | j d  k	 r| |  j | |  7} n  | S(   Ns   , s    
FROM R  R3  s    
WHERE s	    
HAVING (   R=   R  R   R   R  t   _whereclauseR   t   _group_by_clauseR|  R  t   _havingt   _order_by_clauseR  R  R  R  t   _for_update_argt   for_update_clause(	   R   RZ  RV   R,  R  R  R   t   ft   t(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s:    
		5	/c            s9   d j     f d   | D  } | r5 | d 7} n  | S(   NRy  c         3   sE   |  ]; \ } } | d  k s- |  j j k r | j     Vq d  S(   N(   R   R   R   R   (   Ri   t   prefixR  (   R   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>  s   	(   R=   (   R   t   stmtt   prefixesR   R  (    (   R   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR.    s    c         C   s   |  j  rB t g  |  j D] } |  j | ^ q g   |  j |  _ n  |  j |  j  d } | d j g  |  j j   D] } | ^ qq  7} | d 7} | S(   NRy  s   , 
s   
 (	   R   t   sumR   R   R   t   get_cte_preambleR   R=   t   values(   R   R1  t   cte_textt   txt(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s    	)/
c         C   s   | r
 d Sd Sd  S(   Ns   WITH RECURSIVEt   WITH(    (   R   R%  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s    c         K   s   | j  r d p d S(   sc   Called when building a ``SELECT`` statement, position is just
        before column list.

        s	   DISTINCT R   (   t	   _distinct(   R   RV   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s    c         K   s+   | j  j |  |  } | r# d | Sd Sd S(   s5   allow dialects to customize how GROUP BY is rendered.s
    GROUP BY R   N(   R  R   (   R   RV   R   t   group_by(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s    c         K   s+   | j  j |  |  } | r# d | Sd Sd S(   s5   allow dialects to customize how ORDER BY is rendered.s
    ORDER BY R   N(   R  R   (   R   RV   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  	  s    c         K   s   d S(   Ns    FOR UPDATE(    (   R   RV   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  	  s    c         C   s   t  j d   d  S(   Ns@   RETURNING is not supported by this dialect's statement compiler.(   R   R.  (   R   R  t   returning_cols(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   returning_clause	  s    c         K   s   d } | j  d  k	 r5 | d |  j | j  |  7} n  | j d  k	 r | j  d  k r` | d 7} n  | d |  j | j |  7} n  | S(   NR   s   
 LIMIT s
   
 LIMIT -1s    OFFSET (   R  R   R   R  (   R   RV   R   RZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  	  s      c   
      K   s   | s | r |  j  j |  } | rV | rV |  j  j |  d |  j  j | j  }	 n |  j  j | j  }	 | r | | k r |  j |	 | | | |  }	 n  |	 Sd Sd  S(   NR>  R   (   R   RD  RE  RB  R   R<  (
   R   R\   R  R=  R2  R3  t
   use_schemaR   RH  R?  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_table	  s    
,c         K   sw   | j  r d } n | j r$ d } n d } | j j |  d t | | | j j |  d t | d | j j |  |  S(   Ns    FULL OUTER JOIN s    LEFT OUTER JOIN s    JOIN R  s    ON (   R1   t   isouterR?   R   R   RU   Rq  (   R   R=   R  R   t	   join_type(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_join<	  s    				c         C   s   t  g  | j j   D]6 \ \ } } } | d |  j j f k r | | f ^ q  } | j | k r |  j | | j | | j t  } n  | | f S(   NR  (   R
  R  Rp  R   R   R\   R<  R   (   R   R  t
   table_textR\   R   R  t   dialect_hints(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _setup_crud_hintsK	  s    -c         K   s  |  j  } |  j  j i t   d 6t   d 6| d 6 t j |  | t j |  } | r |  j j r |  j j r t	 j
 d |  j j   n  | j r |  j j s t	 j
 d |  j j   n  | d } n | } |  j } |  j j } d }	 | j r|	 |  j | | j |  7}	 n  |	 d 7}	 | j | j  }
 | j rT|  j | |
  \ } }
 n  |	 |
 7}	 | sk| r|	 d	 d
 j g  | D] } | j | d  ^ q~ 7}	 n  |  j s| j r|  j | |  j p| j  } |  j r|	 d | 7}	 qn d  } | j d  k	 re|  j |  j |  } |  j rT| rT|  j j  rT|	 d |  j!   | f 7}	 q|	 d | 7}	 n | r| r|	 d 7}	 ns | j r|	 d d
 j d   | D  7}	 nF d
 j g  | D] } | d ^ q } |	 d | 7}	 | r| |  _" n  | j# d  k	 r0|  j | j# |  } | r0|	 d | 7}	 q0n  | rQ|  j rQ|	 d | 7}	 n  |  j r| r|  j j  r|  j!   |	 }	 n  |  j  j$ d  | rd |	 d S|	 Sd  S(   NR  R  R   sW   The '%s' dialect with current database version settings does not support empty inserts.sc   The '%s' dialect with current database version settings does not support in-place multirow inserts.i    s   INSERT s   INTO s    (%s)s   , Ry  s    %s%ss    %ss    DEFAULT VALUESs
    VALUES %sc         s   s,   |  ]" } d  d j  d   | D  Vq d S(   s   (%s)s   , c         s   s   |  ] } | d  Vq d S(   i   N(    (   Ri   Ro  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>	  s    N(   R=   (   Ri   t   crud_param_set(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>	  s   i   s    VALUES (%s)iR  R  (%   R   R  RX   R    t   _setup_crud_paramst   ISINSERTR   t   supports_default_valuest   supports_empty_insertR   R.  R   t   _has_multi_parameterst   supports_multivalues_insertR   R  R.  t   format_tableR\   R  R  R=   R!  R   R   R  t   returning_precedes_valuesR   RV   R   t   _insert_from_selectR   t   cte_follows_insertR  t   insert_single_values_exprt   _post_values_clauseR   (   R   t   insert_stmtR  R   Rm  t   crud_paramst   crud_params_singleR   R  RZ  R  R  Ro  R  t   select_textR  t   post_values_clause(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_insertY	  s    
	

				
	
.		&c         C   s   d S(   s3   Provide a hook for MySQL to add LIMIT to the UPDATEN(   R   (   R   t   update_stmt(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   update_limit_clause	  s    c         K   s    t  | d <| j |  d t  | S(   s|   Provide a hook to override the initial table clause
        in an UPDATE statement.

        MySQL overrides this.

        R  R=  (   R   R   (   R   R  t
   from_tablet   extra_fromsR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   update_tables_clause	  s    
c         K   s   t  d   d S(   s~   Provide a hook to override the generation of an
        UPDATE..FROM clause.

        MySQL and MSSQL override this.

        sC   This backend does not support multiple-table criteria within UPDATEN(   R   (   R   R  R  R  t
   from_hintsR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   update_from_clause	  s    	c            s   j  } | j } t |  } | rt t t j | j   } g  | D] } | | k rD | ^ qD }	 | j |  }
 n g  }	 | j h }
  j  j i |
 d 6|
 d 6| d 6 d } | j	 r |  j
 | | j	 |  7} n   j | | j |	 |  } t j  | t j |  } | j r3 j | |  \ } } n d  } | | 7} | d 7} | oY j   | d j    f d   | D  7}  j s| j r j r| d  j |  j p| j  7} qn  | r j | | j |	 | |  } | r| d | 7} qn  | j d  k	 rE j | j |  } | rE| d	 | 7} qEn   j |  } | rk| d | 7} n   j s}| j r j r| d  j |  j p| j  7} n   j r| r j   | } n   j  j d
  | rd | d S| Sd  S(   NR  R  R   s   UPDATE s    SET s   , c         3   s4   |  ]* } | d  j   d   d | d Vq d S(   i    RF  t   =i   N(   R   (   Ri   Ro  (   RF  R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>
  s   Ry  s    WHERE iR  R  (   R   t   _extra_fromst   boolRX   R   R  R\   Ra   R  R  R.  R  R    R  t   ISUPDATER  R  R   t'   render_table_with_column_in_update_fromR=   R   R   R  R  R  R  R   R  R   R  R   (   R   R  R  R   Rm  R  t   is_multitablet
   main_fromsR  t   render_extra_fromsR  RZ  R  R  R  t   extra_from_textR  R  (    (   RF  R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_update	  s|    
	%				

		 	
c         C   s   t  j |  |  j  S(   N(   R    t   _key_getters_for_crud_columnR   (   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  K
  s    c         K   s   t  d   d S(   s   Provide a hook to override the generation of an
        DELETE..FROM clause.

        This can be used to implement DELETE..USING for example.

        MySQL and MSSQL override this.

        sC   This backend does not support multiple-table criteria within DELETEN(   R   (   R   R  R  R  R  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   delete_extra_from_clauseO
  s    c         C   s   | j  |  d t d t S(   NR  R=  (   R   R   (   R   t   delete_stmtR  R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   delete_table_clause_
  s    c         K   s  |  j  } t j |  | t j |  | j } | j h j |  } |  j  j i | d 6| d 6| d 6 d } | j r | |  j	 | | j |  7} n  | d 7} |  j
 | | j |  } | j r |  j | |  \ }	 } n d  }	 | | 7} | j r|  j r| d |  j | | j  7} qn  | r]|  j | | j | |	 |  }
 |
 r]| d |
 7} q]n  | j d  k	 r| j j |  |  } | r| d | 7} qn  | j r|  j r| d |  j | | j  7} n  |  j r| r|  j   | } n  |  j  j d  | rd	 | d
 S| Sd  S(   NR  R  R   s   DELETE s   FROM Ry  s    WHERE iR  R  (   R   R    R  t   ISDELETER  R\   Ra   R  R  R.  R  R  R  R   R   R  R  R  R  R   R   R  R   (   R   R  R  R   Rm  R  R  RZ  R  R  R  R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_deleteb
  s^    
				
	
			c         C   s   d |  j  j |  S(   Ns   SAVEPOINT %s(   R   t   format_savepoint(   R   t   savepoint_stmt(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_savepoint
  s    c         C   s   d |  j  j |  S(   Ns   ROLLBACK TO SAVEPOINT %s(   R   R  (   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_rollback_to_savepoint
  s    c         C   s   d |  j  j |  S(   Ns   RELEASE SAVEPOINT %s(   R   R  (   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_release_savepoint
  s    N(    (   R   R   R   t   EXTRACT_MAPR  t   COMPOUND_KEYWORDSR  R   R   R   R   R`  R   R   R  R  R  R  Rg  R   R   R   R  R   R   R   R   R   R	   t   memoized_instancemethodR   t
   contextlibt   contextmanagerR   R   t   memoized_propertyR  R  R   R   R   t   dependenciesR  R  R  R*  R/  R<  R=  RK  RN  RP  RR  RV  R[  RA  Rc  Rp  Rs  Rv  Rx  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R   R  R  R  R  R  R4  R  R   R]  R$  R@  RB  RF  R0  Ri  R[  R<  Ra  R\  Rb  Rd  R~  R  R   t	   frozensetRe  R  R  R  R  R  R.  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  (    (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     sJ  	
G		8		"+	'																			 			2																															8						v			
S						]	!			6	
											p		
	f		J		t   StrSQLCompilerc           B   sV   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 RS(	   sw  A :class:`.SQLCompiler` subclass which allows a small selection
    of non-standard SQL features to render into a string value.

    The :class:`.StrSQLCompiler` is invoked whenever a Core expression
    element is directly stringified without calling upon the
    :meth:`.ClauseElement.compile` method.   It can render a limited set
    of non-standard SQL constructs to assist in basic stringification,
    however for more substantial custom or dialect-specific SQL constructs,
    it will be necessary to make use of :meth:`.ClauseElement.compile`
    directly.

    .. seealso::

        :ref:`faq_sql_expression_string`

    c         C   s   d S(   Ns   <name unknown>(    (   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR=  
  s    c         K   s,   d |  j  | j |  |  j  | j |  f S(   Ns   %s[%s](   R   R?   RU   (   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_getitem_binary
  s    c         K   s   |  j  | | |  S(   N(   R  (   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_json_getitem_op_binary
  s    c         K   s   |  j  | | |  S(   N(   R  (   R   R   R{  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt!   visit_json_path_getitem_op_binary
  s    c         K   s   d |  j  j |  S(   Ns   <next sequence value: %s>(   R   t   format_sequence(   R   t   seqR   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  
  s    c         C   sH   g  t  j |  D]! } |  j d  | t t i   ^ q } d d j |  S(   Ns
   RETURNING s   , (   R   t   _select_iterablesR[  R   R   R   R=   (   R   R  R  Ro  t   columns(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  
  s    4c            s'   d d j      f d   | D  S(   Ns   FROM s   , c         3   s-   |  ]# } | j   d  t d    Vq d S(   R  R3  N(   R   R   (   Ri   R  (   R  R   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>
  s   (   R=   (   R   R  R  R  R  R   (    (   R  R   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  
  s    	c            s'   d d j      f d   | D  S(   Ns   , c         3   s-   |  ]# } | j   d  t d    Vq d S(   R  R3  N(   R   R   (   Ri   R  (   R  R   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>
  s   (   R=   (   R   R  R  R  R  R   (    (   R  R   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  
  s    	(   R   R   R   R=  R  R  R  R  R  R  R  (    (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  
  s   							t   DDLCompilerc           B   sp  e  Z e j d     Z e j d    Z d$ d  Z d   Z d   Z	 d   Z
 d   Z e d  Z d$ d  Z d	   Z d
   Z d   Z e e d  Z d   Z e d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% d   Z& d    Z' d!   Z( d"   Z) d#   Z* RS(%   c         C   s   |  j  j |  j  d   S(   N(   R   t   statement_compilerR   (   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR   
  s    c         C   s
   |  j  j S(   N(   R   RT  (   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRT  
  s    c         C   s   d  S(   N(   R   (   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR      s    c         K   s   | j  } t | j t j  r | j   } |  j } | j | j  } t |  d k rk | d d } } n | d | d } } | j	 d |  | j	 d |  | j	 d | j
 | j   n  |  j j | j |  S(   Ni   i    R   iR\   R   t   fullname(   t   contextR2  t   targetR   t   TableR  R   t   format_table_seqR  t
   setdefaultR  R   R[  R   (   R   t   ddlR   R  R   t   pathR\   t   sch(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt	   visit_ddl  s    		c         C   s   |  j  j | j  } d | S(   Ns   CREATE SCHEMA (   R   t   format_schemaR   (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_create_schema  s    c         C   s9   |  j  j | j  } d | } | j r5 | d 7} n  | S(   Ns   DROP SCHEMA s    CASCADE(   R   R  R   t   cascade(   R   t   dropR   RZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_drop_schema  s
    
	c         C   s  | j  } |  j } d } | j r> | d j | j  d 7} n  | d | j |  d 7} |  j |  } | r | | d 7} n  | d 7} d } t } x | j D] } | j  }	 yb |  j | d |	 j	 o | }
 |
 d  k	 r | | 7} d } | d |
 7} n  |	 j	 rt } n  Wq t j k
 ra} t j t j t j d	  | j |	 j | j d
 f   q Xq W|  j | d | j } | r| | d | 7} n  | d |  j |  7} | S(   Ns   
CREATE Ry  s   TABLE R  s   
t   first_pks   , 
s   	s    (in table '%s', column '%s'): %si    t    _include_foreign_key_constraintss   
)%s

(   R   R   R  R=   R  t   create_table_suffixR   R  R   t   primary_keyR   R   R   R.  R	   t   raise_from_causet   ut   descriptionR   t   argst   create_table_constraintst   include_foreign_key_constraintst   post_create_table(   R   R   R\   R   RZ  R  t	   separatorR  t   create_columnR   t	   processedt   cet   const(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_create_table!  sF    			
	
	)c            sh   | j  } | j r d  S  j | d | } d j   f d   | j D  } | rd | d | 7} n  | S(   NR  Ry  c         3   s   |  ] }   j  |  Vq d  S(   N(   R   (   Ri   R   (   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>Z  s    (   R   t   systemR   t   get_column_specificationR=   t   constraints(   R   R   R  R   RZ  R#  (    (   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_create_columnR  s    		c            s   g  } | j  r" | j | j   n  | j } | d  k	 rI | j |  } n	 t   } | j g  | j D]' } | | j  k	 rb | | k rb | ^ qb  d j d     f d   | D D  S(   Ns   , 
	c         s   s!   |  ] } | d  k	 r | Vq d  S(   N(   R   (   Ri   t   p(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>z  s   c         3   s\   |  ]R } | j  d k s' | j     r   j j sG t | d  t  r   j |  Vq d S(   t	   use_alterN(   t   _create_ruleR   R   t   supports_alterR   R   R   (   Ri   R   (   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>|  s
   (	   R  R  t   foreign_key_constraintsR   R  RX   t   extendt   _sorted_constraintsR=   (   R   R\   R  R'  t   all_fkcst	   omit_fkcsRo  (    (   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  a  s    			(c         C   s   d |  j  j | j  S(   Ns   
DROP TABLE (   R   R  R   (   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_drop_table  s    c         C   s   d |  j  j | j  S(   Ns   
DROP VIEW (   R   R  R   (   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_drop_view  s    c         C   s,   | j  d  k r( t j d | j   n  d  S(   Ns,   Index '%s' is not associated with any table.(   R\   R   R   R.  R   (   R   RQ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _verify_index_table  s    c            s   | j  }   j |    j } d } | j r; | d 7} n  | d   j | d | | j | j d | d j   f d   | j D  f 7} | S(   Ns   CREATE s   UNIQUE s   INDEX %s ON %s (%s)t   include_schemaR  s   , c         3   s-   |  ]# }   j  j | d  t d t Vq d S(   RF  R  N(   R   R   R   R   (   Ri   Rr  (   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>  s   (	   R   R4  R   Rb   t   _prepared_index_nameR  R\   R=   t   expressions(   R   R   R5  t   include_table_schemaRQ  R   RZ  (    (   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_create_index  s    			c         C   s    | j  } d |  j | d t S(   Ns   
DROP INDEX R5  (   R   R6  R   (   R   R  RQ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_drop_index  s    		c         C   s   | j  d  k	 r' |  j j | j   } n d  } | rN | rN |  j j |  } n d  } |  j j |  } | r} | d | } n  | S(   NR>  (   R\   R   R   RD  RE  t   format_index(   R   RQ  R5  RH  t   schema_namet
   index_name(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR6    s    c         C   s,   d |  j  j | j j  |  j | j  f S(   Ns   ALTER TABLE %s ADD %s(   R   R  R   R\   R   (   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_add_constraint  s    c         C   s8   d |  j  j | j  |  j j | j j t j    f S(   Ns   COMMENT ON TABLE %s IS %s(   R   R  R   R   R  t   commentR   t   String(   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_set_table_comment  s    	c         C   s   d |  j  j | j  S(   Ns   COMMENT ON TABLE %s IS NULL(   R   R  R   (   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_drop_table_comment  s    c         C   sD   d |  j  j | j d t d t |  j j | j j t j    f S(   Ns   COMMENT ON COLUMN %s IS %st	   use_tableR  (	   R   R!  R   R   R   R  R?  R   R@  (   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_set_column_comment  s
    		c         C   s   d |  j  j | j d t S(   Ns   COMMENT ON COLUMN %s IS NULLRC  (   R   R!  R   R   (   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_drop_column_comment  s    c         C   sf  d |  j  j | j  } | j j d  k	 rB | d | j j 7} n  | j j d  k	 rk | d | j j 7} n  | j j d  k	 r | d | j j 7} n  | j j d  k	 r | d | j j 7} n  | j j d  k	 r | d 7} n  | j j	 d  k	 r | d 7} n  | j j
 d  k	 r$| d | j j
 7} n  | j j t k rC| d	 7} n  | j j d  k	 rb| d
 7} n  | S(   Ns   CREATE SEQUENCE %ss    INCREMENT BY %ds    START WITH %ds    MINVALUE %ds    MAXVALUE %ds    NO MINVALUEs    NO MAXVALUEs	    CACHE %ds    ORDERs    CYCLE(   R   R  R   t	   incrementR   t   startt   minvaluet   maxvaluet
   nominvaluet
   nomaxvaluet   cacheRO   R   t   cycle(   R   R   RZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_create_sequence  s*    c         C   s   d |  j  j | j  S(   Ns   DROP SEQUENCE %s(   R   R  R   (   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_drop_sequence  s    c         C   s   | j  } | j d  k	 r- |  j j |  } n d  } | d  k rX t j d | j    n  d |  j j | j  j  | | j	 r d p d f S(   Ns<   Can't emit DROP CONSTRAINT for constraint %r; it has no names#   ALTER TABLE %s DROP CONSTRAINT %s%ss    CASCADER   (
   R   R   R   R   t   format_constraintR   R.  R  R\   R  (   R   R  R   t   formatted_name(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_drop_constraint   s    	c         K   sx   |  j  j |  d |  j j j | j d | } |  j |  } | d  k	 r^ | d | 7} n  | j st | d 7} n  | S(   NRy  RS  s	    DEFAULT s	    NOT NULL(	   R   R!  R   RT  R   R   t   get_column_default_stringR   t   nullable(   R   R   R   t   colspecR$   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR&    s    	c         C   s   d S(   NR   (    (   R   R\   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  "  s    c         C   s   d S(   NR   (    (   R   R\   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  %  s    c         C   sp   t  | j t j  rh t  | j j t j  rI |  j j | j j t	 j
  S|  j j | j j d t Sn d  Sd  S(   NR  (   R2  t   server_defaultR   t   DefaultClauset   argR	   t   string_typesR   R  R   R  R   R   R   (   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRS  (  s    		c         C   s   d } | j  d  k	 rG |  j j |  } | d  k	 rG | d | 7} qG n  | d |  j j | j d t d t 7} | |  j	 |  7} | S(   NR   s   CONSTRAINT %s s
   CHECK (%s)RF  R  (
   R   R   R   RP  R   R   R]  R   R   t   define_constraint_deferrability(   R   R   RZ  RQ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_check_constraint5  s    c         C   s   d } | j  d  k	 rG |  j j |  } | d  k	 rG | d | 7} qG n  | d |  j j | j d t d t 7} | |  j	 |  7} | S(   NR   s   CONSTRAINT %s s
   CHECK (%s)RF  R  (
   R   R   R   RP  R   R   R]  R   R   RZ  (   R   R   RZ  RQ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_column_check_constraintA  s    c            s   t  |  d k r d Sd } | j d  k	 r]   j j |  } | d  k	 r] | d | 7} q] n  | d 7} | d d j   f d   | j r | j n | j D  7} |   j	 |  7} | S(   Ni    R   s   CONSTRAINT %s s   PRIMARY KEY s   (%s)s   , c         3   s$   |  ] }   j  j | j  Vq d  S(   N(   R   RB  R   (   Ri   Ro  (   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>W  s   (
   R  R   R   R   RP  R=   t   _implicit_generatedt   columns_autoinc_firstR  RZ  (   R   R   RZ  RQ  (    (   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_primary_key_constraintM  s    
c            s  |  j    d } | j d  k	 rP |  j  j |  } | d  k	 rP | d | 7} qP n  t | j  d j j } | d d j   f d   | j D  |  j	 | |    d j   f d   | j D  f 7} | |  j
 |  7} | |  j |  7} | |  j |  7} | S(   NR   s   CONSTRAINT %s i    s"   FOREIGN KEY(%s) REFERENCES %s (%s)s   , c         3   s$   |  ] }   j  | j j  Vq d  S(   N(   RB  t   parentR   (   Ri   R  (   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>k  s    c         3   s$   |  ] }   j  | j j  Vq d  S(   N(   RB  R   R   (   Ri   R  (   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>q  s    (   R   R   R   RP  R   R   R   R\   R=   t   define_constraint_remote_tablet   define_constraint_matcht   define_constraint_cascadesRZ  (   R   R   RZ  RQ  t   remote_table(    (   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_foreign_key_constrainta  s$    	!c         C   s   | j  |  S(   s=   Format the remote table clause of a CREATE CONSTRAINT clause.(   R  (   R   R   R\   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRa  y  s    c            s   t  |  d k r d Sd } | j d  k	 rN   j j |  } | d | 7} n  | d d j   f d   | D  7} |   j |  7} | S(   Ni    R   s   CONSTRAINT %s s   UNIQUE (%s)s   , c         3   s$   |  ] }   j  j | j  Vq d  S(   N(   R   RB  R   (   Ri   Ro  (   R   (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pys	   <genexpr>  s    (   R  R   R   R   RP  R=   RZ  (   R   R   RZ  RQ  (    (   R   s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_unique_constraint~  s    !c         C   sn   d } | j  d  k	 r8 | d |  j j | j  t  7} n  | j d  k	 rj | d |  j j | j t  7} n  | S(   NR   s    ON DELETE %ss    ON UPDATE %s(   t   ondeleteR   R   t   validate_sql_phraset   FK_ON_DELETEt   onupdatet   FK_ON_UPDATE(   R   R   RZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRc    s    c         C   sn   d } | j  d  k	 r8 | j  r+ | d 7} q8 | d 7} n  | j d  k	 rj | d |  j j | j t  7} n  | S(   NR   s    DEFERRABLEs    NOT DEFERRABLEs    INITIALLY %s(   R%   R   R7   R   Rh  t   FK_INITIALLY(   R   R   RZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRZ    s    	c         C   s-   d } | j  d  k	 r) | d | j  7} n  | S(   NR   s	    MATCH %s(   t   matchR   (   R   R   RZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRb    s    N(+   R   R   R	   R  R   RT  R   R   R  R  R  R$  R   R(  R  R2  R3  R4  R   R9  R:  R6  R>  RA  RB  RD  RE  RN  RO  RR  R&  R  R  RS  R[  R\  R_  Re  Ra  Rf  Rc  RZ  Rb  (    (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  
  sH   				1(								
																t   GenericTypeCompilerc           B   s  e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d    Z" d!   Z# d"   Z$ d#   Z% d$   Z& d%   Z' d&   Z( d'   Z) d(   Z* d)   Z+ RS(*   c         K   s   d S(   Nt   FLOAT(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_FLOAT  s    c         K   s   d S(   Nt   REAL(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_REAL  s    c         K   sT   | j  d  k r d S| j d  k r4 d i | j  d 6Sd i | j  d 6| j d 6Sd  S(   Nt   NUMERICs   NUMERIC(%(precision)s)t	   precisions!   NUMERIC(%(precision)s, %(scale)s)t   scale(   Rt  R   Ru  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_NUMERIC  s    
c         K   sT   | j  d  k r d S| j d  k r4 d i | j  d 6Sd i | j  d 6| j d 6Sd  S(   Nt   DECIMALs   DECIMAL(%(precision)s)Rt  s!   DECIMAL(%(precision)s, %(scale)s)Ru  (   Rt  R   Ru  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_DECIMAL  s    
c         K   s   d S(   Nt   INTEGER(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_INTEGER  s    c         K   s   d S(   Nt   SMALLINT(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_SMALLINT  s    c         K   s   d S(   Nt   BIGINT(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_BIGINT  s    c         K   s   d S(   Nt	   TIMESTAMP(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_TIMESTAMP  s    c         K   s   d S(   Nt   DATETIME(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_DATETIME  s    c         K   s   d S(   Nt   DATE(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_DATE  s    c         K   s   d S(   Nt   TIME(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_TIME  s    c         K   s   d S(   Nt   CLOB(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_CLOB  s    c         K   s   d S(   Nt   NCLOB(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_NCLOB  s    c         C   sD   | } | j  r# | d | j  7} n  | j r@ | d | j 7} n  | S(   Ns   (%d)s    COLLATE "%s"(   t   lengthRM  (   R   R   R   RZ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _render_string_type  s    		c         K   s   |  j  | d  S(   Nt   CHAR(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_CHAR  s    c         K   s   |  j  | d  S(   Nt   NCHAR(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_NCHAR  s    c         K   s   |  j  | d  S(   Nt   VARCHAR(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_VARCHAR  s    c         K   s   |  j  | d  S(   Nt   NVARCHAR(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_NVARCHAR  s    c         K   s   |  j  | d  S(   Nt   TEXT(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_TEXT  s    c         K   s   d S(   Nt   BLOB(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_BLOB  s    c         K   s   d | j  r d | j  p d S(   Nt   BINARYs   (%d)R   (   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_BINARY  s    c         K   s   d | j  r d | j  p d S(   Nt	   VARBINARYs   (%d)R   (   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_VARBINARY  s    c         K   s   d S(   Nt   BOOLEAN(    (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_BOOLEAN  s    c         K   s   |  j  | |  S(   N(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_large_binary  s    c         K   s   |  j  | |  S(   N(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_boolean
  s    c         K   s   |  j  | |  S(   N(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_time  s    c         K   s   |  j  | |  S(   N(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_datetime  s    c         K   s   |  j  | |  S(   N(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_date  s    c         K   s   |  j  | |  S(   N(   R~  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_big_integer  s    c         K   s   |  j  | |  S(   N(   R|  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_small_integer  s    c         K   s   |  j  | |  S(   N(   Rz  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_integer  s    c         K   s   |  j  | |  S(   N(   Rr  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_real  s    c         K   s   |  j  | |  S(   N(   Rp  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_float"  s    c         K   s   |  j  | |  S(   N(   Rv  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_numeric%  s    c         K   s   |  j  | |  S(   N(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_string(  s    c         K   s   |  j  | |  S(   N(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_unicode+  s    c         K   s   |  j  | |  S(   N(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_text.  s    c         K   s   |  j  | |  S(   N(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_unicode_text1  s    c         K   s   |  j  | |  S(   N(   R  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt
   visit_enum4  s    c         K   s   t  j d |   d  S(   NsK   Can't generate DDL for %r; did you forget to specify a type on this Column?(   R   R.  (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRs  7  s    c         K   s   |  j  | j |  j  |  S(   N(   R   t   type_engineR   (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_type_decorator>  s    c         K   s   | j  |   S(   N(   t   get_col_spec(   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   visit_user_definedA  s    (,   R   R   Rp  Rr  Rv  Rx  Rz  R|  R~  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  Rs  R  R  (    (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRn    sT   																																										t   StrSQLTypeCompilerc           B   s   e  Z d    Z d   Z RS(   c         C   s&   | j  d  r |  j St |   d  S(   Nt   visit_(   t
   startswitht   _visit_unknownt   AttributeError(   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   __getattr__F  s    c         K   s   d | j  j S(   Ns   %s(   R  R   (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  L  s    (   R   R   R  R  (    (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  E  s   	t   IdentifierPreparerc           B   sL  e  Z d  Z e Z e Z e Z e	 j
 d  Z d d d e e d  Z d   Z d   Z d   Z d   Z d   Z d   Z d	   Z d d
  Z d d  Z d   Z e d  Z d d  Z d d  Z d d  Z e j d  d    Z  d   Z! e d d  Z" d   Z# e d d e d  Z$ e d  Z% e j& d    Z' d   Z( RS(   s@   Handle quoting and case-folding of identifiers based on options.t   "c         C   sq   | |  _  | |  _ | p |  j |  _ | |  _ |  j d |  _ | |  _ | |  _ i  |  _ |  j  j d k |  _	 d S(   ss  Construct a new ``IdentifierPreparer`` object.

        initial_quote
          Character that begins a delimited identifier.

        final_quote
          Character that ends a delimited identifier. Defaults to
          `initial_quote`.

        omit_schema
          Prevent prepending schema name. Useful for databases that do
          not support schemae.
        i   Ro   Rl   N(   Ro   Rl   (
   R   t   initial_quotet   final_quotet   escape_quotet   escape_to_quotet   omit_schemat   quote_case_sensitive_collationst   _stringsR   RX  (   R   R   R  R  R  R  R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR   \  s    							 c         C   s>   |  j  j |  j   } | j j |  j  t j |  | _ | S(   N(   R  t   __new__t   __dict__RV  R   t   _schema_getterRD  (   R   R   t   prep(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR     s    c         C   s:   | j  |  j |  j  } |  j r6 | j  d d  } n  | S(   s   Escape an identifier.

        Subclasses should override this to provide database-dependent
        escaping behavior.
        RW  s   %%(   RY  R  R  RX  (   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _escape_identifier  s    	c         C   s   | j  |  j |  j  S(   s   Canonicalize an escaped identifier.

        Subclasses should override this to provide database-dependent
        unescaping behavior that reverses _escape_identifier.
        (   RY  R  R  (   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _unescape_identifier  s    c         C   s?   | d k	 r; | j |  r; t j d | | j f   n  | S(   s   keyword sequence filter.

        a filter for elements that are intended to represent keyword sequences,
        such as "INITIALLY", "INITIALLY DEFERRED", etc.   no special characters
        should be present.

        .. versionadded:: 1.3

        s/   Unexpected SQL phrase: %r (matching against %r)N(   R   Rm  R   R.  t   pattern(   R   R   t   reg(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRh    s
    c         C   s   |  j  |  j |  |  j S(   s~   Quote an identifier.

        Subclasses should override this to provide database-dependent
        quoting behavior.
        (   R  R  R  (   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   quote_identifier  s    
c         C   sT   | j    } | |  j k pS | d |  j k pS |  j j t j |   pS | | k S(   s5   Return True if the given identifier requires quoting.i    (   R  t   reserved_wordst   illegal_initial_characterst   legal_charactersRm  R	   t	   text_type(   R   R  t   lc_value(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR/    s
    c         C   s   |  j  j t j |   S(   sj   Return True if the given identifier requires quoting, but
        not taking case convention into account.(   R  Rm  R	   R  (   R   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR    s    c         C   s)   | d k	 r t j d  n  |  j |  S(   s  Conditionally quote a schema name.


        The name is quoted if it is a reserved word, contains quote-necessary
        characters, or is an instance of :class:`.quoted_name` which includes
        ``quote`` set to ``True``.

        Subclasses can override this to provide database-dependent
        quoting behavior for schema names.

        :param schema: string schema name
        :param force: unused

            .. deprecated:: 0.9

                The :paramref:`.IdentifierPreparer.quote_schema.force`
                parameter is deprecated and will be removed in a future
                release.  This flag has no effect on the behavior of the
                :meth:`.IdentifierPreparer.quote` method; please refer to
                :class:`.quoted_name`.

        s   The IdentifierPreparer.quote_schema.force parameter is deprecated and will be removed in a future release.  This flag has no effect on the behavior of the IdentifierPreparer.quote method; please refer to quoted_name().N(   R   R	   t   warn_deprecatedRB  (   R   R   t   force(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRE    s    
c         C   s   | d k	 r t j d  n  t | d d  } | d k r | |  j k rT |  j | S|  j |  r| |  j |  |  j | <n | |  j | <|  j | Sn | r |  j |  S| Sd S(   s  Conditionally quote an identfier.

        The identifier is quoted if it is a reserved word, contains
        quote-necessary characters, or is an instance of
        :class:`.quoted_name` which includes ``quote`` set to ``True``.

        Subclasses can override this to provide database-dependent
        quoting behavior for identifier names.

        :param ident: string identifier
        :param force: unused

            .. deprecated:: 0.9

                The :paramref:`.IdentifierPreparer.quote.force`
                parameter is deprecated and will be removed in a future
                release.  This flag has no effect on the behavior of the
                :meth:`.IdentifierPreparer.quote` method; please refer to
                :class:`.quoted_name`.

        s   The IdentifierPreparer.quote.force parameter is deprecated and will be removed in a future release.  This flag has no effect on the behavior of the IdentifierPreparer.quote method; please refer to quoted_name().RB  N(   R   R	   R  R   R  R/  R  (   R   R  R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRB    s    
c         C   s   |  j  r |  j |  S| Sd  S(   N(   R  RB  (   R   t   collation_name(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRL     s    	c         C   s[   |  j  | j  } |  j |  } |  j rW | rW | d  k	 rW |  j |  d | } n  | S(   NR>  (   RB  R   RD  R  R   RE  (   R   R  R  R   RH  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  &  s    
c         C   s   |  j  | p | j  S(   N(   RB  R   (   R   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR7  3  s    c         C   s   |  j  | p | j  S(   N(   RB  R   (   R   R?  R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR&  6  s    c         C   s4   | p | j  } |  j |  r0 |  j |  } n  | S(   N(   R  R/  R  (   R   t	   savepointR   R  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  9  s    s   sqlalchemy.sql.namingc         C   s
  t  | j t j  r^ | j | | j  } | d  k rg t  | j t j  rO d  S| j } qg n	 | j } t  | t j  r | j	 d k r |  j
 j p |  j
 j } n |  j
 j } t |  | k r | d | d !d t j |  d } q n |  j
 j |  |  j |  S(   NRQ  i    i   R  i(   R2  R   R   t   _defer_namet   _constraint_name_for_tableR\   R   t   _defer_none_nameR3  R   R   t   max_index_name_lengthR   R  R	   t   md5_hext   validate_identifierRB  (   R   t   namingR   R   t   max_(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyRP  B  s"    	,c         C   s   |  j  |  S(   N(   RP  (   R   RQ  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR;  `  s    c         C   sj   | d k r | j } n  |  j |  } |  j |  } |  j rf | rf | rf |  j |  d | } n  | S(   s'   Prepare a quoted table and schema name.R>  N(   R   R   RB  RD  R  RE  (   R   R\   R  R   R  RH  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  c  s    c         C   s   |  j  |  S(   s   Prepare a quoted schema name.(   RB  (   R   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  p  s    c         C   s   | d k r | j } n  t | d t  sm | r] |  j | j d | d | d |  j |  S|  j |  Sn. | r |  j | j d | d | d | S| Sd S(   s   Prepare a quoted column name.R@  R  R   R>  N(   R   R   R   R   R  R\   RB  (   R   R   RC  R   t
   table_nameR  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR!  u  s    
-$c         C   sa   |  j  |  } |  j rG | rG | rG |  j |  |  j | d t f S|  j | d t f Sd S(   s(   Format table name and schema as a tuple.R  N(   RD  R  RE  R  R   (   R   R\   R  RH  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR	    s
    c         C   sr   g  |  j  |  j |  j |  j  f D] } t j |  ^ q" \ } } } t j d i | d 6| d 6| d 6 } | S(   NsM   (?:(?:%(initial)s((?:%(escaped)s|[^%(final)s])+)%(final)s|([^\.]+))(?=\.|$))+t   initialt   finalt   escaped(   R  R  R  R  R  R   (   R   Rz  R  R  t   escaped_finalt   r(    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   _r_identifiers  s    7c         C   sQ   |  j  } g  g  | j |  D] \ } } | p1 | ^ q D] } |  j |  ^ q8 S(   s:   Unpack 'schema.table.column'-like strings into components.(   R  t   findallR  (   R   t   identifiersR  t   at   bR  (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   unformat_identifiers  s    	N()   R   R   R   t   RESERVED_WORDSR  t   LEGAL_CHARACTERSR  t   ILLEGAL_INITIAL_CHARACTERSR  R   R  R   RD  R   R   R   R   R  R  Rh  R  R/  R  RE  RB  RL  R  R7  R&  R  R	   R  RP  R;  R  R  R!  R	  R  R  R  (    (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyR  P  sF   							
	%2				 (j   R   R  R  R  R   R    R   R   R   R   R   R   R   R   R	   RX   R  R   t   IR  t   LEGAL_CHARACTERS_PLUS_SPACEt   rangeRa   R  Ri  Rk  Rl  t   UNICODERb  Ra  R   t   and_t   or_t   addt   mulR  t   divt   modt   truedivt   negt   ltt   let   net   gtt   get   eqt   is_distinct_fromt   isnot_distinct_fromt	   concat_opR  t   notmatch_opt   in_opt   notin_opt   comma_opR  R6  t   is_t   isnotR   t   existst   distinct_opt   invt   any_opt   all_opt   desc_opt   asc_opt   nullsfirst_opt   nullslast_opR5  Rs   R   R!   R"   R#   RB   RC   Rz   R{   RW   Rc   t   cubet   rollupt   grouping_setsR  R  R)  R   t	   UNION_ALLR   t
   EXCEPT_ALLR   t   INTERSECT_ALLR  t   objectR   t   with_metaclasst   EnsureKWArgTypeR   t	   VisitableR   R   R  R  Rn  R  R  (    (    (    s6   lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyt   <module>   s  %


















































%         = 