
b]c           @   sh  d  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 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 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/ 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 dm dn do dp dq dr ds dt du dv dw dx dy dz 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 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 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 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 g  Z% d e& f d     YZ' d e' e j! f d    YZ( de' e j! f d    YZ) de' e j* f d    YZ+ de j, f d    YZ- de j. f d	    YZ/ d
e j. f d    YZ0 de j. f d    YZ1 de j. f d    YZ2 de j3 f d    YZ4 de j5 f d    YZ6 i, e d) 6e d~ 6e d 6e d 6e- d 6e d6e d6e d6e d 6e dL 6e dK 6e df 6e dT 6e d6e d 6e1 d6e0 d6e d6e d6e dH 6e d 6e d4 6e d6 6e# d 6e# d6e# d6e( d6e) d6e d 6e d!6e d"6e d#6e d$6e d%6e d&6e d'6e+ d(6e d* 6e" d 6e4 d)6e/ d+ 6e d*6e  d 6e2 d+6Z7 d,e j8 f d-    YZ9 d.e
 j: f d/    YZ; d0e j< f d1    YZ= d2e j> f d3    YZ? d4e j@ f d5    YZA d6e
 jB f d7    YZC d S(8  s  

.. dialect:: sybase
    :name: Sybase

.. note::

    The Sybase dialect within SQLAlchemy **is not currently supported**.   The
    dialect is not tested within continuous integration and is likely to have
    many issues and caveats not currently handled.

iN(   t   exc(   t   schema(   t   types(   t   util(   t   default(   t
   reflection(   t   compiler(   t   text(   t   BIGINT(   t   BINARY(   t   CHAR(   t   DATE(   t   DATETIME(   t   DECIMAL(   t   FLOAT(   t   INT(   t   INTEGER(   t   NCHAR(   t   NUMERIC(   t   NVARCHAR(   t   REAL(   t   SMALLINT(   t   TEXT(   t   TIME(   t	   TIMESTAMP(   t   Unicode(   t	   VARBINARY(   t   VARCHARt   addt   allt   altert   andt   anyt   ast   asct   backupt   begint   betweent   bigintt   binaryt   bitt   bottomt   breakt   byt   callt
   capabilityt   cascadet   caset   castt   chart   char_convertt	   charactert   checkt
   checkpointt   closet   commentt   committ   connectt
   constraintt   containst   continuet   convertt   createt   crosst   cubet   currentt   current_timestampt   current_usert   cursort   datet   dbspacet
   deallocatet   dect   decimalt   declareR   t   deletet   deletingt   desct   distinctt   dot   doublet   dropt   dynamict   elset   elseift	   encryptedt   endt   endift   escapet   exceptt	   exceptiont   exect   executet   existingt   existst   externlogint   fetcht   firstt   floatt   fort   forcet   foreignt   forwardt   fromt   fullt   gotot   grantt   groupt   havingt   holdlockt
   identifiedt   ift   int   indext   index_lparent   innert   inoutt   insensitivet   insertt	   insertingt   installt   insteadt   intt   integert
   integratedt	   intersectt   intot   iqt   ist	   isolationt   joint   keyt   lateralt   leftt   liket   lockt   logint   longt   matcht
   membershipt   messaget   modet   modifyt   naturalt   newt   not
   noholdlockt   nott   notifyt   nullt   numerict   oft   offt   ont   opent   optiont   optionst   ort   ordert   otherst   outt   outert   overt   passthrought	   precisiont   preparet   primaryt   printt
   privilegest   proct	   proceduret   publicationt	   raiserrort   readtextt   realt	   referencet
   referencest   releaset   remotet   removet   renamet
   reorganizet   resourcet   restoret   restrictt   returnt   revoket   rightt   rollbackt   rollupt   savet	   savepointt   scrollt   selectt	   sensitivet   sessiont   sett   setusert   sharet   smallintt   somet   sqlcodet   sqlstatet   startt   stopt   subtranst   subtransactiont   synchronizet   syntax_errort   tablet	   temporaryt   thent   timet	   timestampt   tinyintt   tot   topt   trant   triggert   truncatet   tsequalt	   unboundedt   uniont   uniquet   unknownt   unsignedt   updatet   updatingt   usert   usingt   validatet   valuest	   varbinaryt   varchart   variablet   varyingt   viewt   waitt   waitfort   whent   wheret   whilet   windowt   witht	   with_cubet   with_lparent   with_rollupt   withint   workt	   writetextt   _SybaseUnitypeMixinc           B   s   e  Z d  Z d   Z RS(   s-   these types appear to return a buffer object.c         C   s   d   } | S(   Nc         S   s   |  d  k	 r t |   Sd  Sd  S(   N(   t   Nonet   str(   t   value(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   process"  s    
(    (   t   selft   dialectt   coltypeR   (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   result_processor!  s    	(   t   __name__t
   __module__t   __doc__R  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR     s   t   UNICHARc           B   s   e  Z d  Z RS(   R  (   R  R  t   __visit_name__(    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  +  s   t
   UNIVARCHARc           B   s   e  Z d  Z RS(   R  (   R  R  R  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  /  s   t   UNITEXTc           B   s   e  Z d  Z RS(   R	  (   R  R  R  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR	  3  s   t   TINYINTc           B   s   e  Z d  Z RS(   R
  (   R  R  R  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR
  7  s   t   BITc           B   s   e  Z d  Z RS(   R  (   R  R  R  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  ;  s   t   MONEYc           B   s   e  Z d  Z RS(   R  (   R  R  R  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  ?  s   t
   SMALLMONEYc           B   s   e  Z d  Z RS(   R  (   R  R  R  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  C  s   t   UNIQUEIDENTIFIERc           B   s   e  Z d  Z RS(   R  (   R  R  R  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  G  s   t   IMAGEc           B   s   e  Z d  Z RS(   R  (   R  R  R  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  K  s   t   SybaseTypeCompilerc           B   st   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 RS(   c         K   s   |  j  |  S(   N(   t   visit_IMAGE(   R   t   type_t   kw(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_large_binaryP  s    c         K   s   |  j  |  S(   N(   t	   visit_BIT(   R   R  R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_booleanS  s    c         K   s   |  j  |  S(   N(   t   visit_NVARCHAR(   R   R  R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_unicodeV  s    c         K   s   d | j  S(   Ns   UNICHAR(%d)(   t   length(   R   R  R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_UNICHARY  s    c         K   s   d | j  S(   Ns   UNIVARCHAR(%d)(   R  (   R   R  R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_UNIVARCHAR\  s    c         K   s   d S(   NR	  (    (   R   R  R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_UNITEXT_  s    c         K   s   d S(   NR
  (    (   R   R  R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_TINYINTb  s    c         K   s   d S(   NR  (    (   R   R  R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  e  s    c         K   s   d S(   NR  (    (   R   R  R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  h  s    c         K   s   d S(   NR  (    (   R   R  R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_MONEYk  s    c         K   s   d S(   NR  (    (   R   R  R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_SMALLMONEYn  s    c         K   s   d S(   NR  (    (   R   R  R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_UNIQUEIDENTIFIERq  s    (   R  R  R  R  R  R  R  R  R  R  R  R  R  R   (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  O  s   											s   unsigned bigints   unsigned ints   unsigned smallints   double precisiont
   smallmoneyt   moneyt   smalldatetimet   datetimes   character varyings   char varyingt   unichars   unicode charactert   nchars   national chars   national charactert   nvarchars   nchar varyings   national char varyings   national character varyingR   t   unitextt   images   long varchart   uniqueidentifiert   SybaseInspectorc           B   s   e  Z d    Z d d  Z RS(   c         C   s   t  j j |  |  d  S(   N(   R   t	   Inspectort   __init__(   R   t   conn(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR-    s    c         C   s"   |  j  j |  j | | d |  j S(   s3   Return the table id from `table_name` and `schema`.t
   info_cache(   R   t   get_table_idt   bindR/  (   R   t
   table_nameR   (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR0    s    	N(   R  R  R-  R   R0  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR+    s   	t   SybaseExecutionContextc           B   s2   e  Z e Z d    Z d   Z d   Z d   Z RS(   c         C   s   t     d S(   s  Must be implemented by subclasses to accommodate DDL executions.

        "connection" is the raw unwrapped DBAPI connection.   "value"
        is True or False.  when True, the connection should be configured
        such that a DDL can take place subsequently.  when False,
        a DDL has taken place and the connection should be resumed
        into non-autocommit mode.

        N(   t   NotImplementedError(   R   t
   connectionR   (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   set_ddl_autocommit  s    
c         C   s   |  j  r |  j j j } | j } | d  k	 } | rO | j |  j d k |  _ n	 t	 |  _ |  j r |  j
 j d |  j j j |   q n  |  j r |  j s t j d   n  |  j j j j d  |  j |  j j j t  n  d  S(   Ni    s   SET IDENTITY_INSERT %s ONsG   The Sybase dialect only supports DDL in 'autocommit' mode at this time.s-   AUTOCOMMIT (Assuming no Sybase 'ddl in tran')(   t   isinsertt   compiledt	   statementR   t   _autoincrement_columnR   R   t   compiled_parameterst   _enable_identity_insertt   FalseRD   R\   R   t   identifier_preparert   format_tablet   isddlt   should_autocommitR    t   InvalidRequestErrort   root_connectiont   enginet   loggert   infoR6  R5  t   True(   R   t   tblt
   seq_columnt   insert_has_sequence(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   pre_exec  s&    							c         C   s[   |  j  r |  j |  j t  n  |  j rW |  j j d |  j j j	 |  j
 j j   n  d  S(   Ns   SET IDENTITY_INSERT %s OFF(   R@  R6  RC  R=  R<  RD   R\   R   R>  R?  R8  R9  R   (   R   (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt	   post_exec  s    			c         C   s7   |  j    } | j d  | j   d } | j   | S(   Ns   SELECT @@identity AS lastrowidi    (   t   create_cursorR\   t   fetchoneR6   (   R   RD   t	   lastrowid(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   get_lastrowid  s
    
(   R  R  R=  R<  R6  RK  RL  RP  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR3    s
   		%	t   SybaseSQLCompilerc           B   s   e  Z e Z e j e j j i d  d 6d d 6d d 6 Z d   Z	 d   Z
 d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z RS(   t	   dayofyeart   doyt   weekdayt   dowt   millisecondt   millisecondsc         K   sZ   | j  r d p d } | j } | r8 | d | f 7} n  | j } | rV t d   n  | S(   Ns	   DISTINCT t    s   TOP %s s"   Sybase ASE does not support OFFSET(   t	   _distinctt   _limitt   _offsetR4  (   R   R   R  t   st   limitt   offset(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   get_select_precolumns  s    		c         C   s   | S(   N(    (   R   R   R   (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   get_from_hint_text  s    c         K   s   d S(   NRX  (    (   R   R   R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   limit_clause  s    c         K   s8   |  j  j | j | j  } d | |  j | j |  f S(   Ns   DATEPART("%s", %s)(   t   extract_mapt   gett   fieldR   t   expr(   R   t   extractR  Rd  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_extract  s    c         K   s   d S(   Ns	   GETDATE()(    (   R   t   fnR  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_now_func  s    c         C   s   d S(   NRX  (    (   R   R   (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   for_update_clause   s    c         K   sK   t  | d <|  j | j |  } | rC |  j   s; | j rC d | Sd Sd  S(   Nt   literal_bindss
    ORDER BY RX  (   RG  R   t   _order_by_clauset   is_subqueryRZ  (   R   R   R  t   order_by(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   order_by_clause%  s
    
c         C   s4   t  } | r t } n  | j |  d t d t d | S(   s=   If we have extra froms make sure we render any alias as hint.t   asfromt   iscrudt   ashint(   R=  RG  t   _compiler_dispatch(   R   t   delete_stmtt
   from_tablet   extra_fromsRr  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   delete_table_clause/  s
    	c            s.   d d j      f d   | g | D  S(   s4   Render the DELETE .. FROM clause specific to Sybase.s   FROM s   , c         3   s-   |  ]# } | j   d  t d    Vq d S(   Rp  t	   fromhintsN(   Rs  RG  (   t   .0t   t(   t
   from_hintsR  R   (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pys	   <genexpr>=  s   (   R   (   R   Rt  Ru  Rv  R{  R  (    (   R{  R  R   s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   delete_extra_from_clause8  s    	(   R  R  RG  t   ansi_bind_rulesR   t   update_copyR   t   SQLCompilerRb  R_  R`  Ra  Rg  Ri  Rj  Ro  Rw  R|  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyRQ    s   								
		t   SybaseDDLCompilerc           B   s   e  Z d    Z d   Z RS(   c   	      K   s_  |  j  j |  d |  j j j | j d | } | j d  k rS t j	 d   n  | j j
 } | | k r t | j t j  o | j } | r | j p d | j p d } } n d
 \ } } | | f d k r | d 7} q[| d | | f 7} nh |  j |  } | d  k	 r| d | 7} n  | j d  k	 r[| j sA| j rN| d 7} q[| d	 7} n  | S(   Nt    t   type_expressionsH   The Sybase dialect requires Table-bound columns in order to generate DDLi   s	    IDENTITYs    IDENTITY(%s,%s)s	    DEFAULT s	    NOT NULLs    NULL(   i   i   (   i   i   (   t   preparert   format_columnR   t   type_compilerR   t   typeR   R   R    t   CompileErrorR:  t
   isinstanceR   t	   sa_schemat   SequenceR   t	   incrementt   get_column_default_stringt   nullablet   primary_key(	   R   t   columnt   kwargst   colspect   seq_colt   sequenceR   R  R   (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   get_column_specificationC  s.    	"c         C   s;   | j  } d |  j j | j j  |  j | j  d t f S(   Ns   
DROP INDEX %s.%st   include_schema(   t   elementR  t   quote_identifierR   t   namet   _prepared_index_nameR=  (   R   RQ   Rq   (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   visit_drop_indexo  s    	(   R  R  R  R  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  B  s   	,t   SybaseIdentifierPreparerc           B   s   e  Z e Z RS(    (   R  R  t   RESERVED_WORDSt   reserved_words(    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  w  s   t   SybaseDialectc           B   s:  e  Z d  Z e Z e Z e Z e Z e Z e	 Z
 i  Z e Z e Z e Z e Z e Z e Z g  Z d   Z d   Z d d  Z e j d d   Z d   Z e j d d   Z  e j d d   Z! e j d d   Z" e j d	    Z# e j d d
   Z$ e j d d   Z% e j d d   Z& d d  Z' RS(   t   sybasec         C   s   | j  t d  j d t   S(   Ns   SELECT user_name() as user_namet   username(   t   scalarR   t   columnsR   (   R   R5  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   _get_default_schema_name  s    c         C   sM   t  t |   j |  |  j d  k	 r@ |  j d k  r@ d |  _ n	 d |  _ d  S(   Ni   i   i   (   i   (   t   superR  t
   initializet   server_version_infoR   t   max_identifier_length(   R   R5  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR    s
    c         K   s   d } | d k r |  j } n  t d  } t j rx t | t  rT | j d  } n  t | t  rx | j d  } qx n  | j | d | d | } | j	   } | d k r t
 j |   n  | S(   s   Fetch the id for schema.table_name.

        Several reflection methods require the table id.  The idea for using
        this method is that it can be fetched one time and cached for
        subsequent calls.

        s   
          SELECT o.id AS id
          FROM sysobjects o JOIN sysusers u ON o.uid=u.uid
          WHERE u.name = :schema_name
              AND o.name = :table_name
              AND o.type in ('U', 'V')
        t   asciit   schema_nameR2  N(   R   t   default_schema_nameR   R   t   py2kR  t   unicodet   encodeR\   R  R    t   NoSuchTableError(   R   R5  R2  R   R  t   table_idt   TABLEID_SQLt   result(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR0    s     			c      
   K   s   |  j  | | | d | j d  } t d  } | j | d | } g  } xc | D][ \ }	 }
 } } } } } } |  j |	 |
 t |  t |  | | | |  } | j |  qR W| S(   NR/  s*  
          SELECT col.name AS name,
                 t.name AS type,
                 (col.status & 8) AS nullable,
                 (col.status & 128) AS autoincrement,
                 com.text AS 'default',
                 col.prec AS precision,
                 col.scale AS scale,
                 col.length AS length
          FROM systypes t, syscolumns col LEFT OUTER JOIN syscomments com ON
              col.cdefault = com.id
          WHERE col.usertype = t.usertype
              AND col.id = :table_id
          ORDER BY col.colid
        R  (   R0  Rc  R   R\   t   _get_column_infot   boolt   append(   R   R5  R2  R   R  R  t
   COLUMN_SQLt   resultsR  R  R  R  t   autoincrementt   default_R   t   scaleR  t   col_info(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   get_columns  s&    		"			c	         C   s&  |  j  j | d   }	 i  }
 |	 t t f k r< | | f } nH |	 t k rT | f } n0 |	 t t t t	 t
 t f k r~ | f } n d } |	 r |	 | |
   }	 n  t j d | | f  t j }	 | r | j d d  j   } t j d d   |  } n d  } t d | d |	 d | d	 | d
 |  } | S(   Ns*   Did not recognize type '%s' of column '%s't   DEFAULTRX  s   ^'(.*)'$c         S   s   |  j  d  S(   Ni   (   Rk   (   t   m(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   <lambda>  RX  R  R  R  R   R  (    (   t   ischema_namesRc  R   R   R   R   R
   R   R  R  R   R   R   t   warnt   sqltypest   NULLTYPEt   replacet   stript   ret   subt   dict(   R   R  R  R  R  R   R   R  R  R  R  t   argst   column_info(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR    s2    		c         K   s~  |  j  | | | d | j d  } i  } i  } g  } i | d 6| d 6| | <t d  }	 | j |	 d | }
 i  } x  |
 D] } | d | | d <q| W| | | <t d  } | j | d | j   } t d  } x| D]} | d	 } | | k r| j | d | } | j   } | j   i | d d 6d  d 6} | d  k	 sZ| d |  j k rk| d | d <n  | | | <| j |	 d | }
 i  } x  |
 D] } | d | | d <qW| | | <n  | | } | | } g  } g  } xQ t	 d
 | d d
  D]8 } | j
 | | d |  | j
 | | d |  qWi | d 6| d d 6| d d 6| d 6| d d 6} | j
 |  q W| S(   NR/  R  R   su   
          SELECT c.colid AS id, c.name AS name
          FROM syscolumns c
          WHERE c.id = :table_id
        R  t   ids(  
          SELECT o.name AS name, r.reftabid AS reftable_id,
            r.keycnt AS 'count',
            r.fokey1 AS fokey1, r.fokey2 AS fokey2, r.fokey3 AS fokey3,
            r.fokey4 AS fokey4, r.fokey5 AS fokey5, r.fokey6 AS fokey6,
            r.fokey7 AS fokey7, r.fokey1 AS fokey8, r.fokey9 AS fokey9,
            r.fokey10 AS fokey10, r.fokey11 AS fokey11, r.fokey12 AS fokey12,
            r.fokey13 AS fokey13, r.fokey14 AS fokey14, r.fokey15 AS fokey15,
            r.fokey16 AS fokey16,
            r.refkey1 AS refkey1, r.refkey2 AS refkey2, r.refkey3 AS refkey3,
            r.refkey4 AS refkey4, r.refkey5 AS refkey5, r.refkey6 AS refkey6,
            r.refkey7 AS refkey7, r.refkey1 AS refkey8, r.refkey9 AS refkey9,
            r.refkey10 AS refkey10, r.refkey11 AS refkey11,
            r.refkey12 AS refkey12, r.refkey13 AS refkey13,
            r.refkey14 AS refkey14, r.refkey15 AS refkey15,
            r.refkey16 AS refkey16
          FROM sysreferences r JOIN sysobjects o on r.tableid = o.id
          WHERE r.tableid = :table_id
        s   
          SELECT o.name AS name, u.name AS 'schema'
          FROM sysobjects o JOIN sysusers u ON o.uid = u.uid
          WHERE o.id = :table_id
        t   reftable_idi   t   counts   fokey%is   refkey%it   constrained_columnst   referred_schemat   referred_tablet   referred_columns(   R0  Rc  R   R\   t   fetchallRN  R6   R   R  t   rangeR  (   R   R5  R2  R   R  R  t   table_cachet   column_cachet   foreign_keysR  R  R  t   colt   REFCONSTRAINT_SQLt   referential_constraintst   REFTABLE_SQLt   rR  t   ct   reftablet
   table_infot   reftable_columnsR  R  t   it   fk_info(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   get_foreign_keys)  sd    	
		




c         K   s   |  j  | | | d | j d  } t d  } | j | d | } g  } x | D]x }	 g  }
 x3 t d |	 d  D] } |
 j |	 d | f  qr Wi |	 d d 6t |	 d  d 6|
 d	 6} | j |  qR W| S(
   NR/  s  
          SELECT object_name(i.id) AS table_name,
                 i.keycnt AS 'count',
                 i.name AS name,
                 (i.status & 0x2) AS 'unique',
                 index_col(object_name(i.id), i.indid, 1) AS col_1,
                 index_col(object_name(i.id), i.indid, 2) AS col_2,
                 index_col(object_name(i.id), i.indid, 3) AS col_3,
                 index_col(object_name(i.id), i.indid, 4) AS col_4,
                 index_col(object_name(i.id), i.indid, 5) AS col_5,
                 index_col(object_name(i.id), i.indid, 6) AS col_6,
                 index_col(object_name(i.id), i.indid, 7) AS col_7,
                 index_col(object_name(i.id), i.indid, 8) AS col_8,
                 index_col(object_name(i.id), i.indid, 9) AS col_9,
                 index_col(object_name(i.id), i.indid, 10) AS col_10,
                 index_col(object_name(i.id), i.indid, 11) AS col_11,
                 index_col(object_name(i.id), i.indid, 12) AS col_12,
                 index_col(object_name(i.id), i.indid, 13) AS col_13,
                 index_col(object_name(i.id), i.indid, 14) AS col_14,
                 index_col(object_name(i.id), i.indid, 15) AS col_15,
                 index_col(object_name(i.id), i.indid, 16) AS col_16
          FROM sysindexes i, sysobjects o
          WHERE o.id = i.id
            AND o.id = :table_id
            AND (i.status & 2048) = 0
            AND i.indid BETWEEN 1 AND 254
        R  i   R  s   col_%iR  R   t   column_names(   R0  Rc  R   R\   R  R  R  (   R   R5  R2  R   R  R  t	   INDEX_SQLR  t   indexesR  R  R  t
   index_info(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   get_indexes  s     	
c         K   s   |  j  | | | d | j d  } t d  } | j | d | } | j   } | j   g  }	 | r x7 t d | d d  D] }
 |	 j | d |
 f  q Wi |	 d 6| d d 6Si g  d 6d  d 6Sd  S(	   NR/  sy  
          SELECT object_name(i.id) AS table_name,
                 i.keycnt AS 'count',
                 i.name AS name,
                 index_col(object_name(i.id), i.indid, 1) AS pk_1,
                 index_col(object_name(i.id), i.indid, 2) AS pk_2,
                 index_col(object_name(i.id), i.indid, 3) AS pk_3,
                 index_col(object_name(i.id), i.indid, 4) AS pk_4,
                 index_col(object_name(i.id), i.indid, 5) AS pk_5,
                 index_col(object_name(i.id), i.indid, 6) AS pk_6,
                 index_col(object_name(i.id), i.indid, 7) AS pk_7,
                 index_col(object_name(i.id), i.indid, 8) AS pk_8,
                 index_col(object_name(i.id), i.indid, 9) AS pk_9,
                 index_col(object_name(i.id), i.indid, 10) AS pk_10,
                 index_col(object_name(i.id), i.indid, 11) AS pk_11,
                 index_col(object_name(i.id), i.indid, 12) AS pk_12,
                 index_col(object_name(i.id), i.indid, 13) AS pk_13,
                 index_col(object_name(i.id), i.indid, 14) AS pk_14,
                 index_col(object_name(i.id), i.indid, 15) AS pk_15,
                 index_col(object_name(i.id), i.indid, 16) AS pk_16
          FROM sysindexes i, sysobjects o
          WHERE o.id = i.id
            AND o.id = :table_id
            AND (i.status & 2048) = 2048
            AND i.indid BETWEEN 1 AND 254
        R  i   R  s   pk_%iR  R  (	   R0  Rc  R   R\   RN  R6   R  R  R   (   R   R5  R2  R   R  R  t   PK_SQLR  t   pksR  R  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   get_pk_constraint  s    	
c         K   s6   t  d  } | j |  } g  | D] } | d ^ q" S(   Ns%   SELECT u.name AS name FROM sysusers uR  (   R   R\   (   R   R5  R  t
   SCHEMA_SQLt   schemasR\  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   get_schema_names  s    c         K   s   | d  k r |  j } n  t d  } t j rQ t | t  rQ | j d  } qQ n  | j | d | } g  | D] } | d ^ qm S(   Ns   
          SELECT o.name AS name
          FROM sysobjects o JOIN sysusers u ON o.uid = u.uid
          WHERE u.name = :schema_name
            AND o.type = 'U'
        R  R  R  (	   R   R  R   R   R  R  R  R  R\   (   R   R5  R   R  t	   TABLE_SQLt   tablesRz  (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   get_table_names  s    		c         K   sp   | d  k r |  j } n  t d  } t j rQ t | t  rQ | j d  } qQ n  | j | d | } | j	   S(   Ns   
          SELECT c.text
          FROM syscomments c JOIN sysobjects o ON c.id = o.id
          WHERE o.name = :view_name
            AND o.type = 'V'
        R  t	   view_name(
   R   R  R   R   R  R  R  R  R\   R  (   R   R5  R  R   R  t   VIEW_DEF_SQLR   (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   get_view_definition  s    		c         K   s   | d  k r |  j } n  t d  } t j rQ t | t  rQ | j d  } qQ n  | j | d | } g  | D] } | d ^ qm S(   Ns   
          SELECT o.name AS name
          FROM sysobjects o JOIN sysusers u ON o.uid = u.uid
          WHERE u.name = :schema_name
            AND o.type = 'V'
        R  R  R  (	   R   R  R   R   R  R  R  R  R\   (   R   R5  R   R  t   VIEW_SQLt   viewst   v(    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   get_view_names)  s    		c         C   s7   y |  j  | | |  Wn t j k
 r. t SXt Sd  S(   N(   R0  R    R  R=  RG  (   R   R5  R2  R   (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt	   has_table>  s
    N((   R  R  R  R=  t   supports_unicode_statementst   supports_sane_rowcountt   supports_sane_multi_rowcountt   supports_native_booleant   supports_unicode_bindsRG  t   postfetch_lastrowidt   colspecsR  R  R  RQ  t   statement_compilerR  t   ddl_compilerR  R  R+  t	   inspectort   construct_argumentsR  R  R   R0  R   t   cacheR  R  R  R  R  R  R  R  R  R  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyR  {  sF   		
$2	3e21	(D   R  R  t
   sqlalchemyR    R   R  R   R  R   t   sqlalchemy.engineR   R   t   sqlalchemy.sqlR   R   t   sqlalchemy.typesR   R	   R
   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R  t   objectR   R  R  t   UnicodeTextR	  t   IntegerR
  t
   TypeEngineR  R  R  R  t   LargeBinaryR  t   GenericTypeCompilerR  R  R,  R+  t   DefaultExecutionContextR3  R  RQ  t   DDLCompilerR  t   IdentifierPreparerR  t   DefaultDialectR  (    (    (    s>   lib/python2.7/site-packages/sqlalchemy/dialects/sybase/base.pyt   <module>   sv  &
HH5