ó
|£*^c           @  sW  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l m Z m Z d  d l	 m
 Z
 m Z m Z m Z m Z e j j Z d „  Z d „  Z d e d „ Z d „  Z d	 d d
 „  ƒ  YZ d d d „  ƒ  YZ d d d „  ƒ  YZ d d d „  ƒ  YZ d d d „  ƒ  YZ d d  d „  ƒ  YZ d d! d „  ƒ  YZ d d" d „  ƒ  YZ d d# d „  ƒ  YZ  d S($   iÿÿÿÿ(   t   unicode_literalsN(   t   peekt   consume(   t   to_php_identifiert	   PHPStringt   PHPArrayt   PHPDictt
   PHPLiteralc         C  sL   |  d k r d S|  j } | d d k rD | d d k rD | d d !S| Sd S(   u1    unescape an SQL name, e.g. convert `abc` to abc i    u   `iÿÿÿÿi   N(   t   Nonet   value(   t   tokt   v(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   get_name   s    	 c         C  s   d j  |  j d d ƒ ƒ S(   Nu   '{}'u   'u   ''(   t   formatt   replace(   t   s(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   sql_build_string   s    c         C  s"  | r& t  t j d ƒ r& t ƒ  t ƒ  S|  d  k	 rA t |  ƒ } n	 t ƒ  } | j t j j j	 k ru t
 t | j ƒ ƒ S| j t j j k rš t t | ƒ ƒ S| j t j k rÅ | j d k rÅ t d ƒ S| j t j k rð | j d k rð t d ƒ St j j ƒ  d j | j | ƒ GHt | j ƒ Sd  S(   Nu   NULLu   CURRENT_TIMESTAMPu   CURRENT_DATEu"   Unrecognized value of type {}: {}.(   R   t   Tt   KeywordR   t	   NullValueR   t   ttypet   Literalt   Numbert   Integert   IntegerValuet   intR	   t   Stringt   StringValuet   sql_parse_stringt   DateTimeValuet   radt   consolet   warnR   t   LiteralValue(   t	   type_hintt
   allow_nullR
   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   parse_sql_value   s$    	!
!
c         C  s|   |  j  d d !} |  j t j j j k r8 | j d d ƒ S|  j t j j j k r` | j d d ƒ St d j	 |  j ƒ ƒ ‚ d  S(   Ni   iÿÿÿÿu   ''u   'u   \"u   "u   Unknown string token type {}(
   R	   R   R   R   R   t   SingleR   t   Symbolt
   ValueErrorR   (   t   tokent   val(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR   4   s    t   Tablec           B  sz   e  Z d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z e d
 „ Z d „  Z RS(   c         C  sF   | |  _  t j ƒ  |  _ d  |  _ t ƒ  |  _ t ƒ  |  _ | |  _	 d  S(   N(
   t   namet   collectionst   OrderedDictt   columnsR   t   primary_keyt   sett   unique_keyst   foreign_keyst   source_file(   t   selfR+   R3   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   __init__A   s    		c         C  sG   | j  |  j k r3 t d j | j  |  j  ƒ ƒ ‚ n  | |  j | j  <d  S(   Nu)   Column '{}' defined twice for table '{}'.(   R+   R.   R'   R   (   R4   t   column(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt
   add_columnI   s    	c         C  s   | |  j  k S(   N(   R.   (   R4   R+   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt
   has_columnO   s    c         C  sE   x> | D]6 } |  j  | ƒ s t d j | | |  j ƒ ƒ ‚ q q Wd  S(   Nu8   Unknown column '{}' encountered while {} for table '{}'.(   R8   R'   R   R+   (   R4   R.   t   descriptiont   col(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   check_columnsR   s
    c         C  s¦   |  j  d  k	 r* t d j |  j ƒ ƒ ‚ n  |  j | d ƒ x\ | D]T } |  j | j t j	 @r| t d j | |  j ƒ ƒ ‚ n  |  j | j t j
 O_ qA W| |  _  d  S(   Nu+   Primary key specified twice for table '{}'.u   adding a primary keyu;   Primary key cannot contain NULL column '{}' for table '{}'.(   R/   R   R'   R   R+   R;   R.   t   flagst   Columnt	   FLAG_NULLt   FLAG_NOTNULL(   R4   t   pkR:   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   set_primary_keyY   s    	c         C  s$   |  j  | d ƒ |  j j | ƒ d  S(   Nu   adding a unique key(   R;   R1   t   add(   R4   t   uk(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   add_unique_keyd   s    c         C  s-   |  j  | j j ƒ  d ƒ |  j j | ƒ d  S(   Nu   adding a foreign key(   R;   R.   t   keysR2   RB   (   R4   t   fk(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   add_foreign_keyh   s    c         C  s   t  |  j d d „  ƒS(   Nt   keyc         S  s   |  j  S(   N(   R.   (   RF   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   <lambda>m   s    (   t   sortedR2   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   foreign_keys_sortedl   s    c         C  sS   t  | ƒ d k s t ‚ |  j | k r+ t Sx! |  j D] } | | k r5 t Sq5 Wt S(   Ni    (   t   lent   AssertionErrorR/   t   TrueR1   t   False(   R4   R.   RC   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt	   is_uniqueo   s    c         C  s   d t  |  j ƒ j ƒ  S(   Nu   Table_(   R   R+   t
   capitalize(   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   get_php_classx   s    c         C  s.  g  } x* |  j  j ƒ  D] } | j | j ƒ  ƒ q W|  j d  k	 r{ t |  j ƒ d k r{ | j d d j |  j ƒ d ƒ n  x/ |  j D]$ } | j d d j | ƒ d ƒ q… Wx' |  j	 ƒ  D] } | j | j ƒ  ƒ qº W| rò d j
 |  j ƒ } n d } | d |  j d	 7} | d
 j | ƒ 7} | d 7} | S(   Ni    u   PRIMARY KEY (`u   `, `u   `)u   UNIQUE KEY (`u   DROP TABLE IF EXISTS `{}`;
u    u   CREATE TABLE `u   ` (
  u   ,
  u&   
) ENGINE=InnoDB DEFAULT CHARSET=utf8;(   R.   t   valuest   appendt   to_sqlR/   R   RL   t   joinR1   RK   R   R+   (   R4   t   add_dropt   linesR:   RC   RF   t   sql(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRU   {   s     $$"
c         C  sS  |  j  ƒ  } g  } | j d j | ƒ ƒ | j d ƒ | j d ƒ | j d ƒ | j d j | ƒ ƒ | j d ƒ | j d ƒ | j d ƒ | j d	 ƒ | j d
 ƒ | j d j t |  j ƒ t g  |  j j ƒ  D] } | j ƒ  ^ qÑ d t	 ƒƒ ƒ | j d j t g  |  j
 ƒ  D] } | j | ƒ ^ qƒ ƒ ƒ | j d ƒ | j d ƒ | j d ƒ | j d ƒ | j d ƒ t g  t |  j ƒ D] } t | ƒ ^ qˆƒ } | j d j | ƒ ƒ | j d ƒ x@ |  j j ƒ  D]) } | j t j @rÖt | j ƒ } PqÖqÖWd } | j d ƒ | j d j | ƒ ƒ | j d ƒ | j d ƒ d j | ƒ S(   Nu   class {} extends R\Table {{u$       private static $instance = null;u*       public static function getInstance() {u'           if (self::$instance === null) {u'               self::$instance = new {}();u	           }u           return self::$instance;u       }u       private $foreignKeys;u&       protected function __construct() {u#          parent::__construct({}, {});t	   multilineu          $this->foreignKeys = {};u&       public function getForeignKeys() {u"           return $this->foreignKeys;u%       public function getPrimaryKey() {u           return {};u   nullu%       public function getAutoColumn() {u   }u   
(   RR   RT   R   R   R+   R   R.   RS   t   to_phpRN   RK   RJ   R/   R<   R=   t	   FLAG_AUTOR   RV   (   R4   t   schema_classest   cls_nameRX   R:   RF   t   pk_phpt   auto_column(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR[   ”   sH    +2.N(   t   __name__t
   __module__R   R5   R7   R8   R;   RA   RD   RG   RK   RP   RR   RO   RU   R[   (    (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR*   @   s   										R=   c           B  s5   e  Z d  Z d Z d Z d „  Z d „  Z d „  Z RS(   i   i   i   c         C  s(   | |  _  | |  _ d |  _ d  |  _ d  S(   Ni    (   R+   t   typeR<   R   t   default_value(   R4   R+   t   ctype(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR5   Ä   s    			c         C  sÖ   g  } | j  d |  j d ƒ | j  |  j j ƒ  ƒ |  j t j @rT | j  d ƒ n  |  j t j @rt | j  d ƒ n  |  j d  k	 r© | j  d ƒ | j  |  j j ƒ  ƒ n  |  j t j
 @rÉ | j  d ƒ n  d j | ƒ S(   Nu   `u   NOT NULLu   NULLu   DEFAULTu   AUTO_INCREMENTu    (   RT   R+   Rc   RU   R<   R=   R?   R>   Rd   R   R\   RV   (   R4   RY   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRU   É   s    c         C  s¶   |  j  d  k	 r! |  j  j ƒ  } n d } g  } |  j t j @rM | j d ƒ n  |  j t j @rm | j d ƒ n  d j t	 |  j
 ƒ |  j j ƒ  | t | ƒ d k r¯ d j | ƒ n d ƒ S(   Nu   nullu   R\Column::FLAG_AUTOu   R\Column::FLAG_NULLABLEu   new R\Column({}, {}, {}, {})i    u   |u   0(   Rd   R   R[   R<   R=   R\   RT   R>   R   R   R+   Rc   RL   RV   (   R4   t   default_phpt	   flags_php(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR[   ×   s    (   Ra   Rb   R>   R?   R\   R5   RU   R[   (    (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR=   ¿   s   		t
   ForeignKeyc           B  s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C  s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   t   tableR.   t	   on_updatet	   on_delete(   R4   Ri   R.   Rj   Rk   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR5   è   s    			c         C  s"   t  |  j |  j |  j |  j f ƒ S(   N(   t   reprRi   R.   Rj   Rk   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   __repr__í   s    c         C  s«   g  } t  |  j j ƒ  Œ  \ } } | j d j d j | ƒ |  j d j | ƒ ƒ ƒ |  j d  k	 rx | j d |  j ƒ n  |  j	 d  k	 rž | j d |  j	 ƒ n  d j | ƒ S(   Nu4   CONSTRAINT FOREIGN KEY (`{}`) REFERENCES `{}` (`{}`)u   `, `u
   ON UPDATE u
   ON DELETE u    (
   t   zipR.   t   itemsRT   R   RV   Ri   Rj   R   Rk   (   R4   RY   t	   cols_fromt   cols_to(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRU   ï   s    %c         C  sb   t  ƒ  } x- |  j j ƒ  D] \ } } t | ƒ | | <q Wd j t |  j ƒ t | |  j ƒ | ƒ S(   Nu   new R\ForeignKey({}, {}, {})(   R   R.   Ro   R   R   Ri   (   R4   R]   t   colmapt   c1t   c2(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR[   ù   s
    	(   Ra   Rb   R5   Rm   RU   R[   (    (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRh   ç   s   			
R   c           B  s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C  s   d  S(   N(   R   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt	   get_value  s    c         C  s   d S(   Nu   NULL(    (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRU     s    c         C  s   d S(   Nu   new R\NullValue()(    (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR[     s    (   Ra   Rb   Ru   RU   R[   (    (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR      s   		R   c           B  s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C  s"   t  | t ƒ s t ‚ | |  _ d  S(   N(   t
   isinstanceR   RM   R	   (   R4   R	   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR5   	  s    c         C  s   |  j  S(   N(   R	   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRu     s    c         C  s   t  |  j ƒ S(   N(   t   unicodeR	   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRU     s    c         C  s   d j  |  j ƒ S(   Nu   new R\ConstantValue({})(   R   R	   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR[     s    (   Ra   Rb   R5   Ru   RU   R[   (    (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR     s   			R   c           B  s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C  s"   t  | t ƒ s t ‚ | |  _ d  S(   N(   Rv   t
   basestringRM   R	   (   R4   R	   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR5     s    c         C  s   |  j  S(   N(   R	   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRu     s    c         C  s   t  |  j ƒ S(   N(   R   R	   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRU     s    c         C  s   d j  t |  j ƒ ƒ S(   Nu   new R\ConstantValue({})(   R   R   R	   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR[     s    (   Ra   Rb   R5   Ru   RU   R[   (    (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR     s   			R   c           B  s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C  s%   | d k s t  d ƒ ‚ | |  _ d  S(   Nu   CURRENT_TIMESTAMPu   CURRENT_DATEu   Unknown DateTime type.(   u   CURRENT_TIMESTAMPu   CURRENT_DATE(   RM   R+   (   R4   R+   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR5      s    c         C  s   |  S(   N(    (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRu   #  s    c         C  s   |  j  S(   N(   R+   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRU   %  s    c         C  s   d j  |  j ƒ S(   Nu(   new R\DateTimeValue(R\DateTimeValue::{})(   R   R+   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR[   '  s    (   Ra   Rb   R5   Ru   RU   R[   (    (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR     s   			R!   c           B  s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C  s   | |  _  d  S(   N(   t   literal(   R4   Ry   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR5   +  s    c         C  s   |  j  S(   N(   Ry   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRU   -  s    c         C  s   |  j  S(   N(   Ry   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRu   /  s    c         C  s.   t  j j ƒ  d j |  j ƒ GHd j |  j ƒ S(   Nu,   Using unmodified SQL literal as PHP code: {}u   new R\ConstantValue({})(   R   R   R    R   Ry   (   R4   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR[   1  s    (   Ra   Rb   R5   RU   Ru   R[   (    (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR!   *  s   			t
   ColumnTypec           B  s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C  s   | |  _  | |  _ d  S(   N(   R+   t   args(   R4   R+   R{   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR5   8  s    	c         C  sX   t  |  j ƒ d k rM d j |  j d j g  |  j D] } | j ƒ  ^ q1 ƒ ƒ S|  j Sd  S(   Ni    u   {}({})u   ,(   RL   R{   R   R+   RV   RU   (   R4   R)   (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRU   ;  s    ,c         C  sS   g  |  j  D] } t | j ƒ  ƒ ^ q
 } d j |  j j ƒ  d j t t | ƒ ƒ ƒ S(   Nu   new R\{}Type({})u   , (	   R{   R   Ru   R   R+   RQ   RV   t   mapRw   (   R4   t   argt   args_php(    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyR[   A  s    ((   Ra   Rb   R5   RU   R[   (    (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyRz   7  s   		(    (    (    (    (    (    (    (    (    (!   t
   __future__R    R,   t   sqlparset   rad.consoleR   t
   rad.parserR   R   t   rad.phpR   R   R   R   R   t   tokenst   TokenR   R   R   R   RO   R$   R   R*   R=   Rh   R   R   R   R   R!   Rz   (    (    (    s[   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/rad/sql.pyt   <module>   s&   (	
		(