ó
ø¢TQc           @   sQ   d  d l  m Z d  d l Z d  d l Z e j d ƒ Z d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   BaseDatabaseIntrospectionNsQ   \sCONSTRAINT `[^`]*` FOREIGN KEY \(`([^`]*)`\) REFERENCES `([^`]*)` \(`([^`]*)`\)t   DatabaseIntrospectionc           B   sİ   e  Z i d  e j 6d e j 6d e j 6d  e j 6d e j 6d e j 6d e j	 6Z
 y d e
 e j <Wn e k
 rv n Xy d e
 e j <Wn e k
 r› n Xd „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z RS(   t	   TextFieldt	   DateFieldt	   CharFieldt   DecimalFieldt   DateTimeFieldt
   FloatFieldc         C   sW   | t  j k r: | d d k r: | d d k r3 d Sd Sn t t |  ƒ j | | ƒ Sd  S(   Ni   i    i   i   t   BigIntegerFieldt   IntegerField(   t	   cx_Oraclet   NUMBERt   superR   t   get_field_type(   t   selft	   data_typet   description(    (    s@   ../Django//lib/python/django/db/backends/oracle/introspection.pyR      s    c         C   s4   | j  d ƒ g  | j ƒ  D] } | d j ƒ  ^ q S(   s6   Returns a list of table names in the current database.s"   SELECT TABLE_NAME FROM USER_TABLESi    (   t   executet   fetchallt   lower(   R   t   cursort   row(    (    s@   ../Django//lib/python/django/db/backends/oracle/introspection.pyt   get_table_list(   s    c         C   s`   | j  d |  j j j | ƒ ƒ g  } x3 | j D]( } | j | d j ƒ  f | d ƒ q0 W| S(   sQ   Returns a description of the table, with the DB-API cursor.description interface.s!   SELECT * FROM %s WHERE ROWNUM < 2i    i   (   R   t
   connectiont   opst
   quote_nameR   t   appendR   (   R   R   t
   table_nameR   t   desc(    (    s@   ../Django//lib/python/django/db/backends/oracle/introspection.pyt   get_table_description-   s
     &c         C   s
   | j  ƒ  S(   s6   Table name comparison is case insensitive under Oracle(   R   (   R   t   name(    (    s@   ../Django//lib/python/django/db/backends/oracle/introspection.pyt   table_name_converter5   s    c         C   s?   t  g  t |  j | | ƒ ƒ D] \ } } | d | f ^ q ƒ S(   su   
        Returns a dictionary of {field_name: field_index} for the given table.
        Indexes are 0-based.
        i    (   t   dictt	   enumerateR   (   R   R   R   t   it   d(    (    s@   ../Django//lib/python/django/db/backends/oracle/introspection.pyt   _name_to_index9   s    c         C   sb   | j  ƒ  } | j d | g ƒ i  } x6 | j ƒ  D]( } | d | d j ƒ  f | | d <q2 W| S(   s¯   
        Returns a dictionary of {field_index: (field_index_other_table, other_table)}
        representing all relationships to the given table. Indexes are 0-based.
        sˆ  
    SELECT ta.column_id - 1, tb.table_name, tb.column_id - 1
    FROM   user_constraints, USER_CONS_COLUMNS ca, USER_CONS_COLUMNS cb,
           user_tab_cols ta, user_tab_cols tb
    WHERE  user_constraints.table_name = %s AND
           ta.table_name = user_constraints.table_name AND
           ta.column_name = ca.column_name AND
           ca.table_name = ta.table_name AND
           user_constraints.constraint_name = ca.constraint_name AND
           user_constraints.r_constraint_name = cb.constraint_name AND
           cb.table_name = tb.table_name AND
           cb.column_name = tb.column_name AND
           ca.position = cb.positioni   i   i    (   t   upperR   R   R   (   R   R   R   t	   relationsR   (    (    s@   ../Django//lib/python/django/db/backends/oracle/introspection.pyt   get_relations@   s    &c         C   sj   d } | j  | | g ƒ i  } xD | j ƒ  D]6 } i t | d ƒ d 6t | d ƒ d 6| | d <q, W| S(   NsZ  
    SELECT LOWER(uic1.column_name) AS column_name,
           CASE user_constraints.constraint_type
               WHEN 'P' THEN 1 ELSE 0
           END AS is_primary_key,
           CASE user_indexes.uniqueness
               WHEN 'UNIQUE' THEN 1 ELSE 0
           END AS is_unique
    FROM   user_constraints, user_indexes, user_ind_columns uic1
    WHERE  user_constraints.constraint_type (+) = 'P'
      AND  user_constraints.index_name (+) = uic1.index_name
      AND  user_indexes.uniqueness (+) = 'UNIQUE'
      AND  user_indexes.index_name (+) = uic1.index_name
      AND  uic1.table_name = UPPER(%s)
      AND  uic1.column_position = 1
      AND  NOT EXISTS (
              SELECT 1
              FROM   user_ind_columns uic2
              WHERE  uic2.index_name = uic1.index_name
                AND  uic2.column_position = 2
           )
        i   t   primary_keyi   t   uniquei    (   R   R   t   bool(   R   R   R   t   sqlt   indexesR   (    (    s@   ../Django//lib/python/django/db/backends/oracle/introspection.pyt   get_indexesY   s     (   t   __name__t
   __module__R
   t   CLOBt   DATETIMEt
   FIXED_CHARt   NCLOBR   t   STRINGt	   TIMESTAMPt   data_types_reverset   NATIVE_FLOATt   AttributeErrort   UNICODER   R   R   R   R$   R'   R-   (    (    (    s@   ../Django//lib/python/django/db/backends/oracle/introspection.pyR      s.   





						(   t   django.db.backendsR    R
   t   ret   compilet   foreign_key_reR   (    (    (    s@   ../Django//lib/python/django/db/backends/oracle/introspection.pyt   <module>   s   