
    ը	f)w                        d Z ddlmZ ddlZddlZddlZddlmZ ddlZddl	m
Z
 ddlmZmZmZ ddlmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZ  G d	 d
ej<                        Z G d de      Z  G d de      Z! G d de      Z"e#dk(  r  e$ejJ                        dvr% e&e ejN                          ejP                           e$ejJ                        dk(  rdZ)n e*ejJ                  d         Z)ejJ                  d   dk(  re Z+n:ejJ                  d   dk(  re!Z+n% e&e ejN                          ejP                           ejX                  d      Z- e+dejJ                  d   e)      Z.e.j_                          e-ja                          yy)a  
@package dbmgr.sqlbuilder

@brief GRASS SQL Select/Update Builder

Classes:
 - sqlbuilder::SQLBuilder
 - sqlbuilder::SQLBuilderSelect
 - sqlbuilder::SQLBuilderUpdate

Usage:
@code
python sqlbuilder.py select|update vector_map
@endcode

(C) 2007-2014 by the GRASS Development Team

This program is free software under the GNU General Public License
(>=v2). Read the file COPYING that comes with GRASS for details.

@author Jachym Cepicky <jachym.cepicky gmail.com> (original author)
@author Martin Landa <landa.martin gmail.com>
@author Hamish Bowman <hamish_b yahoo.com>
@author Refactoring, SQLBUilderUpdate by Stepan Turek <stepan.turek seznam.cz> (GSoC 2012, mentor: Martin Landa)
    )print_functionN)	globalvar)Signal)
RunCommandGErrorGMessage)CreateDbInfoDescVectorDBInfoGetUnicodeValue)ApplyButtonButtonClearButtonCloseButtonTextCtrl
StaticText	StaticBoxc                   l    e Zd ZdZg ej
                  dfdZddZddZd Z	d Z
d Zd	 Zd
 Zd Zd Zy)
SQLBuilderzMSQLBuider class
    Base class for classes, which builds SQL statements.
       c                 F   t         j                  j                  | |||       | j                  t        j                  t
        j                  j                  t        j                  d      t         j                               || _        || _        d| j                  vrVt        j                  | j                  d      d   | _        | j                  s!t        j                  t!        d      |z         | j                  j#                  dd      \  | _        | _        || _        t+        | j                        | _        | j,                  j/                  | j(                        | _        | j,                  j3                  | j(                        \  | _        | _        g | _        t        j:                  | t         j<                        | _        | jA                  d	      | _!        | jE                  |       | j>                  jG                  d
       | j>                  jI                  | jJ                         | jJ                  jM                  | j>                         | jO                  d       | jQ                  | j>                  jS                                | jU                          y )Nzgrass_sql.ico@vector)elementfullnamezVector map <%s> not foundr   parentid)numberT)i  iX  )+wxFrame__init__SetIconIconospathjoinr   ICONDIRBITMAP_TYPE_ICOr   vectmapgrass	find_filefatal_splitmapnamemapsetlayerr
   dbInfoGetTable	tablenameGetDbSettingsdriverdatabase	colvaluesPanelID_ANYpanelCreateStatusBar	statusbar	_doLayoutSetAutoLayoutSetSizer	pagesizerFit
SetMinSizeSetClientSizeGetSizeCenterOnParent)selfr   titler)   modeChoicesr   r1   s          1/usr/lib/grass83/gui/wxpython/dbmgr/sqlbuilder.pyr!   zSQLBuilder.__init__:   s   
$E2GGY..@"BTBT	
  dll" ??4<<J:VDL<<A9:WDE$(LL$6$6sA$>!dk 
"4<<0--djj9%)[[%>%>tzz%J"T]XXTbii8
 --Q-7{#

  &

DNN+4::&
#4::--/0    c                 "   t        j                  t         j                        | _        |rt	        | j
                  t         j                  dt        d      z        }t        j                  |t         j                        }|j                  t        | j
                  | j                  | j                        dt         j                  t         j                  z  d       t	        | j
                  t         j                  dt        d      z        }t        j                  |t         j                        }t        | j
                  t         j                  d	d
t         j                         | _        | j"                  j%                          t        j&                  | j"                  j(                         |j                  | j"                  t         j                         t+        | j
                        | _        | j,                  j/                  t        d             t1        | j
                        | _        | j2                  j/                  t        d             t5        | j
                        | _        | j6                  j/                  t        d             dgdgdgdgdgdgdgdgdgdgdgdgd| _        t        j:                  | j
                  t         j                        | _        t?        j@                  | j8                        D ]Z  \  }}tC        | j<                  t         j                  |d         }	| j8                  |   jE                  |	jG                                \ t        jH                  d d!d!"      | _%        | jJ                  j                  | j,                         | jJ                  j                  | j2                         | jJ                  j                  | j6                         t        jL                  d!d!      }
|
j                  | jO                  | j8                  d#   d         d$%       |
j                  | jO                  | j8                  d&   d         d'%       |
j                  | jO                  | j8                  d(   d         d)%       |
j                  | jO                  | j8                  d*   d         d+%       |
j                  | jO                  | j8                  d,   d         d-%       |
j                  | jO                  | j8                  d.   d         d/%       |
j                  | jO                  | j8                  d0   d         d1%       |
j                  | jO                  | j8                  d2   d         d3%       |
j                  | jO                  | j8                  d4   d         d5%       |
j                  | jO                  | j8                  d6   d         d7%       |
j                  | jO                  | j8                  d8   d         d9%       |
j                  | jO                  | j8                  d:   d         d;%       | j<                  jQ                  |
       t        j                  t         jR                        | _*        t	        | j
                  t         j                  dt        d<      z        }t        j                  |t         j                        }t        jV                  | j
                  t         j                  | j                  jY                  | jZ                        t         j\                  =      | _/        |j                  | j^                  dt         j                  >       |rt        j                  t         j                        }t        j`                  | j
                  t         j                  dt        d?      z  |t         jb                  d@      | _2        | jd                  jg                  d       |j                  | jd                  dt         j                  d!       t        j:                  | j
                  t         j                        | _4        t	        | jh                  t         j                  dt        dA      z        }t        j                  |t         j                        }t        jV                  | jh                  t         j                  | jj                  t         j\                  =      | _6        |j                  | jl                  dt         j                  >       | jh                  jQ                  |       tC        | jh                  t         j                  t        dB            | _7        | jn                  jq                  dC       tC        | jh                  t         j                  t        dD            | _9        | jr                  j/                  t        dE             | jr                  jq                  dC       t        j                  t         jR                        }|j                  | jr                  dt         jt                  d!       |j                  | jn                  dF       |j                  |dt         jv                  d!       t        j                  t         jR                        }t        | jh                  t         j                  t         jx                  G      | _=        |j                  t}        | jh                  t         j                  t        dH            dt         j~                  t         jt                  z  d!       |j                  | jz                  dt         j                  >       |j                  |dt         j                  t         j                  z  d!       | jT                  j                  |dt         j                  >       | jT                  j                  | jh                  dt         j                  >       t        j                  | j
                  t         j                  t        dI            | _A        | j                  j                  dJ       |r=| j                  j                  t         j                  t         j                  z  d!K       |r`| j                  j                  dt         j                  t         jt                  z  t         j                  z  t         j                  z  d!       | j                  j                  | jT                  dt         j                  t         jt                  z  t         j                  z  t         j                  z  d!       | j                  j                  | j<                  dt         j                  >       | j                  j                  |dt         j                  t         j                  z  t         jt                  z  d!       | j                  j                  | jJ                  dt         j                  t         j                  z  d!       | j                  j                  | j                  dt         j                  t         jt                  z  t         j                  z  t         j                  z  d!       |r4| jd                  j                  t         j                  | j                         | jn                  j                  t         j                  | j                         | jr                  j                  t         j                  | j                         t?        j@                  | j8                        D ]A  \  }}| jO                  |d         j                  t         j                  | j                         C | j6                  j                  t         j                  | j                         | j,                  j                  t         j                  | j                         | j2                  j                  t         j                  | j                         | j^                  j                  t         j                  | j                         | jl                  j                  t         j                  | j                         | jz                  j                  t         j                  | j                         | jz                  j                  t         j                  | j                         yL)MDo dialog layout %s zDatabase connectionr   r   label)r1   r      )
proportionflagborderQuery )2   )r   r   valuesizestyle)rS   )r   zSet SQL statement to defaultzApply SQL statementzClose the dialog=z!=LIKE>z>=<z<=ORNOTAND()%)isisnotlikegtgeltleornotandbracprcr   r         )colshgapvgapre   r   r   posrf   r   r   rg   )   r   rh   r   r   ri   r   r   rl   )rz   r   rj   r   rz   rk   r   rz   rm   )rz   rz   ro   )r   rQ   rp   )r   rQ   rn   )rz   rQ   Columnsr   r   choicesr[   rR   rS   zInteractive insertion)r   r   rP   r   r[   majorDimensionValueszGet all valuesFz
Get samplez%Get first 256 unique values as sample)rR   )r   r   r[   zGo to:zClose dialog on applyT)rS   rT   N)Wr   BoxSizerVERTICALrA   r   r;   r:   r-   StaticBoxSizerAddr	   r2   r1   EXPANDALLr   TE_MULTILINEtext_sqlSetInsertionPointEnd	CallAfterSetFocusr   	btn_clear
SetToolTipr   	btn_applyr   	btn_close	btn_logicr9   btn_logicpanelsix	iteritemsr   appendGetIdFlexGridSizerbuttonsizerGridBagSizerFindWindowByIdr@   
HORIZONTALhsizerListBox
GetColumnsr4   LB_MULTIPLElist_columnsRadioBoxRA_SPECIFY_COLSmodeSetSelectionvaluespanelr8   list_values
btn_uniqueEnablebtn_uniquesampleRIGHTTOPTE_PROCESS_ENTERgotor   ALIGN_CENTER_VERTICALCheckBoxclose_onapplySetValueLEFTBOTTOMALIGN_CENTER_HORIZONTALALIGN_RIGHTBindEVT_RADIOBOXOnMode
EVT_BUTTONOnUniqueValuesOnSampleValues	OnAddMarkOnCloseOnClearOnApplyEVT_LISTBOXOnAddColumn
OnAddValueEVT_TEXTOnGoToEVT_TEXT_ENTER)rG   rI   
showDbInfodatabaseboxdatabaseboxsizersqlboxsqlboxsizerkeyrY   btnbtn_logicsizer
columnsboxcolumnsizer	modesizer	valuesbox
valuesizerbuttonsizer3	gotosizers                     rJ   r>   zSQLBuilder._doLayoute   sQ    R[[1 #zzbiivBW@X7XK  "00bkkJ   T[[

KYY'	 !  $**&1W:BUV''< ::yy//
 	**,
T]]++,BII6
 %DJJ7!!!$B"CD$DJJ7!!!$9":;$DJJ7!!!$6"78            E%
N !hhdjjRYYG--7 	4JC 3 3		qRCNN3&&syy{3	4 ++CT^^,T^^,T^^,A.4..t~~d/CA/FGVT4..t~~g/Fq/IJPVW4..t~~f/Ea/HIvV4..t~~d/CA/FGVT4..t~~d/CA/FGVT4..t~~d/CA/FGVT4..t~~d/CA/FGVT4..t~~d/CA/FGVT4..t~~e/DQ/GHfU4..t~~f/Ea/HIvV4..t~~e/DQ/GHfU4..t~~e/DQ/GHfU$$^4
 kk"--0::"))6AiL3H

 ''
BKK@JJ::yyKK**4>>:..	
 	))abiiHBKK0Izz99q!899#(( DI II""1%MM$))		!ML
 884::"))D##		!H+9M
	 &&y"++>
::##yyNN..	
 	t''ABIIF!!*- ##		;K9L
 	u% &##		<!
 	((+R)ST$$U+{{2==1..1288TUVQ7|qI KK.	##		9L9L
	 	d..299AhKP))BHH4	 	 	
 	diiABII>yQRVVbii5GPQR		B((QRYYG[[::"))15L3M
 	##D)NN/bffryy6HQRSNNWWrxx'"))3bii?	   	KK288#bii/"));	 	 	
 	AB4N4N 	 	
 	ABII,?"((,JST 	 	
 	"&&1HQR 	 	
 	288#bii/"));	 	 	
 IINN2??DKK8 	R]]D,?,?@""2==$2E2EF--7 	NJCa)..r}}dnnM	N 	BMM4<<8BMM4<<8BMM4<<8r~~t/?/?@bnndoo>		r{{DKK0		r(($//:rK   c           	      0   g }	 | j                   j                         d   }| j                   j                  |      }| j                  j	                          dj                  || j                        }|r|dj                  d      z  }t        j                  || j                  | j                  d      }|sy| j                  j                  | j                  j                  | j                              |   }d}	g }
|D ]X  }|d	   d
vr|
j                  t!        |d                n,|
j                  dj                  t#        |d                      |	dz  }	Z | j                  j%                  |
       y#  | j                  j	                          Y yxY w)zGet unique valuesr   Nz7SELECT DISTINCT {column} FROM {table} ORDER BY {column})columntablez	 LIMIT {}   z{_sep_})sqlr7   r6   septype)	charactertextz'{}'r   )r   GetSelections	GetStringr   Clearformatr4   r*   	db_selectr7   r6   r2   GetTableDescr3   r1   r   strr   AppendItems)rG   event
justsamplevalsidxr   r   datadesciitemsitems               rJ   r   zSQLBuilder.OnUniqueValuesg  sn   	##113A6C&&005F
 	 GNN O 
 ;%%c**CdmmDKKY
 {{''(<(<TZZ(HI&Q 	DF|#88Sa\*V]]?47+CDEFA	 	$$U+9	""$s   8E7 7Fc                 (    | j                  dd       y)zGet sample valuesNT)r   rG   r   s     rJ   r   zSQLBuilder.OnSampleValues  s    D$'rK   c                 D   | j                   j                         }|D ]0  }| j                   j                  |      }| j                  d|       2 | j                  j                         s7| j                  j                  d       | j                  j                  d       yy)zAdd column name to the queryr   r   rY   TN)r   r   r   _addr   	IsEnabledr   r   )rG   r   r   r   r   s        rJ   r   zSQLBuilder.OnAddColumn  s    --/ 	6A&&003FIIhfI5	6 $$..0!!((.OO""4( 1rK   c                    | j                   j                         }|s|j                          y|d   }| j                   j                  |      }| j                  j                         d   }| j                  j                  |      }| j
                  j                  | j
                  j                  | j                              |   d   }| j                  d|       y)z	Add valueNr   r   rY   r   )
r   r   Skipr   r   r2   r   r3   r1   r   )rG   r   	selectionr   rY   r   ctypes          rJ   r   zSQLBuilder.OnAddValue  s    $$224	JJLl  **3/--/2"",,S1(()=)=djj)IJ6R
 			'	/rK   c                    | j                   j                         D ]  }| j                   j                  |        |j                         }t	        |      }dx}}d}| j                   j                         D ]2  }|dk(  r|j                  d      rd}|r|dd }|d | |k(  r|} n|dz  }4 |dkD  r| j                   j                  |       y y )Nr   F'Tr   rW   )r   r   Deselectr   lenGetItems
startswithr   )rG   r   r   gotoTextlenLimitfoundr   strings           rJ   r   zSQLBuilder.OnGoTo  s    $$224 	,D%%d+	, ??$x=$$--/ 	DaxDOOC0AbzIX(*1HC	 19))%0 rK   c                 l   d}| j                   r'| j                   j                         r| j                  }n2| j                  r&| j                  j                         r| j                  }t        j                        D ]"  \  }}|j                         |d   k(  s|d   } n | j                  d|       y)zAdd markNr   r   markr   )	r   IsShownr   btn_arithmeticpanelbtn_arithmeticr   r   r   r   )rG   r   r  btnsr   rY   s         rJ   r   zSQLBuilder.OnAddMark  s    4#6#6#>#>#@>>D%%$*B*B*J*J*L&&D--- 	JC{{}a(Qx	
 			&	-rK   c                 r    | j                   j                         j                         j                  dd      S )zReturn SQL statement
 )r   GetValuestripreplacerG   s    rJ   GetSQLStatementzSQLBuilder.GetSQLStatement  s+    }}%%'--/77cBBrK   c                 D    | j                          |j                          y N)Destroyr   r   s     rJ   r   zSQLBuilder.OnClose  s    

rK   N)F)__name__
__module____qualname____doc__r   r:   r!   r>   r   r   r   r   r   r   r  r    rK   rJ   r   r   5   sL     <>"))ST )V@;D",H(	)0$1,.CrK   r   c                   h    e Zd ZdZej
                  ddfdZd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)SQLBuilderSelectz'Class for building SELECT SQL statementr   Nc           	          || _         t        d      d|dz  }t        d      t        d      g}t        j                  | |||t        j
                  ||       y )N(GRASS SQL Builder (%(type)s) - <%(map)s>SELECTr   mapzColumn to show (SELECT clause)#Constraint for query (WHERE clause)r   rI   r1   )
evtHandlerr-   r   r!   r   r:   )rG   r   r)   r   r1   r%  rH   rI   s           rJ   r!   zSQLBuilderSelect.__init__  sp    $ <=A
 
 ./34

 	yy# 	 	
rK   c                 J   t         j                  | |       | j                  j                  d| j                  z         | j                  j                  t        d      dz         t        | j                  t        j                  t        d            | _        | j                  j                  t        d             | j                  j                  d| j                         | j                  j                  t        j                  | j                          | j                  j                  t        j"                  | j$                         | j                  j'                  | j                  j)                                | j*                  j-                  t        d      d	       y
)rM   SELECT * FROM %szExample: %sz@SELECT * FROM roadsmajor WHERE MULTILANE = 'no' OR OBJECTID < 10VerifyrO   zVerify SQL statementr   zSQL statement not verifiedr   N)r   r>   r   r   r4   r   r-   r   r;   r   r:   
btn_verifyr   Insertr   r   OnTextr   OnVerifySetInsertionPointGetLastPositionr=   SetStatusText)rG   rI   s     rJ   r>   zSQLBuilderSelect._doLayout  s    	T;/1DNNBC  mPQ	

 !

ryy(T""1%;#<=4??32;;4R]]DMM:''(E(E(GH$$Q'C%DaHrK   c                     | j                   r| j                  d       | j                  j                         r| j                          |j	                          y)Apply button pressedapplyr   N)r%  r   	IsCheckedr  r   r   s     rJ   r   zSQLBuilderSelect.OnApply  s;    ??OO'O*'')LLN

rK   c                 T    | j                   j                  d| j                  z         y)Clear button pressedr'  N)r   r   r4   r   s     rJ   r   zSQLBuilderSelect.OnClear  s    1DNNBCrK   c                 ~   | j                   j                         dk(  r5| j                  j                          | j                  j                          nQ| j                   j                         dk(  r4| j                  j                          | j                  j                          | j                  j                          y)Adjusts builder for chosen moder   r   N)r   GetSelectionr   Hider   ShowrA   Layoutr   s     rJ   r   zSQLBuilderSelect.OnMode  s    99!!#q(!!#$$&YY##%*!!#$$&rK   c                     t        | j                  j                               dkD  r| j                  j	                  d       y| j                  j	                  d       y)zQuery string changedr   TFN)r   r   r  r)  r   r   s     rJ   r+  zSQLBuilderSelect.OnText#  s@    t}}%%'(1,OO""4(OO""5)rK   c           	      p   t        dd| j                  | j                  j                         d| j                  | j
                        \  }}|dk7  rA|r?| j                  j                  t        d      d       t        | t        d      |z         y
| j                  j                  t        d	      d       y
)zVerify button pressedz	db.selectTt)getErrorMsgr   r   flagsr6   r7   r   zSQL statement is not validzSQL statement is not valid.

%sr   messagezSQL statement is validN)
r   r4   r   r  r6   r7   r=   r/  r-   r   rG   r   retmsgs       rJ   r,  zSQLBuilderSelect.OnVerify*  s    ..&&(;;]]
S !8NN((+G)H!L$*M(NQT(TUNN((+C)DaHrK   c                    | j                   j                         }| j                   j                         }d}|dk(  r3| j                  j	                         dk(  rt        d      }|j                         j                  d      }||| j                         }|dk(  rg }	n|j                  d      }	||	v r|	j                  |       n|	j                  |       t        |	      dk  rdg}	d	dj                  |	      z   d
z   }t        |      }|||d z  }nd}|j                         j                  d      dk  r|dz  }|d
|z   z  }| j                   j                         t        |      z   }||z   }n(|dv r$d
|z   d
z   }
|d| |
z   ||d z   }|t        |
      z  }|r| j                   j                  |       t        j                   | j                   j"                         | j                   j%                  |       y)YAdd element to the query

        :param element: element to add (column, value)
        rV   r   r   selectfrom*,r   zSELECT r  Nwhere WHERE)rY   r  )r   r  GetInsertionPointr   r9  r   lowerfindr  r.   remover   r&   r.  r   r   r   r   r-  )rG   r   rY   sqlstrcurspos	newsqlstridx1idx2colstrrs   addstrs              rJ   r   zSQLBuilderSelect._add<  s   
 '')--113	hyy%%'1,8}||~**62T*002S=D!<<,DD=KK&KK&t9q=D &6<	i.VDE]*		<<>&&w/!3)IS5[(	--779C	NJ"Y.	))5[3&Fx(61F784DDIs6{"GMM""9-
T]]++,''0rK   c                 6    | j                   j                         S )z0Return True if the dialog will be close on apply)r   r4  r  s    rJ   CloseOnApplyzSQLBuilderSelect.CloseOnApplyl  s    !!++--rK   c                 l    | j                   r| j                  d       t        j                  | |       y)zClose button pressedcloser3  N)r%  r   r   r   s     rJ   r   zSQLBuilderSelect.OnClosep  s'    ??OO'O*4'rK   )r  r  r  r  r   r:   r!   r>   r   r   r   r+  r,  r   r[  r   r  rK   rJ   r  r    sF    1+-99A$ 
0I,D *I$.1`.(rK   r  c                   \    e Zd ZdZej
                  ddfdZd Zd Zd Z	d Z
d	 Zd
 Zd Zy)SQLBuilderUpdatez'Class for building UPDATE SQL statementr   Nc           	      8   || _         t        d      d|dz  }t        d      t        d      t        d      g}t        j                  | |||t        j
                  ||       t        d      | _        |r&| j                  j                  |j                         y y )	Nr  UPDATEr!  zColumn to set (SET clause)r#  zCalculate column value to setr$  zSQLBuilder.sqlApplied)
r   r-   r   r!   r   r:   r   
sqlAppliedconnectUpdate)rG   r   r)   r   r1   r   rH   rI   s           rJ   r!   zSQLBuilderUpdate.__init__{  s    <=A
 
 *+34-.
 	yy# 	 	
 !!89OO##FMM2 rK   c                 
   t         j                  | |       d| j                  z  | _        | j                  r"| xj                  d| j                  z  z  c_        | j
                  j                  | j                         dgdgdgdgdgdgd	| _        t        j                  | j                  t        j                  
      | _        t        j                  | j                        D ]Z  \  }}t        | j                  t        j                  |d         }| j                  |   j!                  |j#                                \ t        j$                  dd      }|j'                  | j)                  | j                  d   d         d       |j'                  | j)                  | j                  d   d         d       |j'                  | j)                  | j                  d   d         d       |j'                  | j)                  | j                  d   d         d       |j'                  | j)                  | j                  d   d         d       |j'                  | j)                  | j                  d   d         d       | j                  j+                  |       | j,                  j/                  d| j                  dt        j0                         t        j                  | j                  t        j                  
      | _        | j5                          t7        | j2                  t        j                  dt9        d       z        }t        j:                  |t        j<                        }t        j>                  | j2                  t        j                  tA        | jB                  d!   jE                               t        jF                  "      | _$        |j'                  | jH                  dt        jJ                         | j2                  j+                  |       | jL                  j/                  d#| j2                  dt        jJ                         | jH                  jO                  t        jP                  | jR                         t        j                  | j                        D ]A  \  }}| j)                  |d         jO                  t        jT                  | jV                         C | jX                  j[                  d       | j]                  d$       | j
                  j_                  | j
                  ja                                y$)%rM   zUPDATE %s SETz %s = r\   rc   +-/rK  )eqro   plusminusdividemultiplyr   r   rO   rr   )rt   ru   ri  r   rv   rw   ro   ry   rj  r{   rk  r|   rl  r}   rm  r~   rQ   r   rN   	Functionssqliter   rz   N)1r   r>   r4   initTextr   r   r   r
  r   r9   r;   r:   r	  r   r   r   r   r   r   r   r   r@   rA   r*  r   	funcpanel_initSqlFunctionsr   r-   r   r   r   listsqlFuncskeysLB_SORT	list_funcr   r   r   r   	OnAddFuncr   r   r   r   r   r-  r.  )rG   rI   r   rY   r   btn_arithmeticsizerfuncsbox	funcsizers           rJ   r>   zSQLBuilderUpdate._doLayout  sA    	T;/'$..8;;MMX33Mt}}-      !
* $&884::"))#L --(;(;< 	9JC 8 8RYYeTUhWC$++CIIK8	9 !oo11= 3 3D 9! <=6 	  	
 	 3 3F ;A >?V 	  	
 	 3 3F ;A >?V 	  	
 	 3 3G <Q ?@f 	  	
 	 3 3H =a @Av 	  	
 	 3 3J ? BC 	  	
 	  ))*=>t''AB<V<V 	 	
 		B >>biiv+7N
 %%h<	>>yyx05578**	
 	dnnC	*1dnnKBNNDNN;--(;(;< 	NJCa)..r}}dnnM	N		q!D''(E(E(GHrK   c           	      ^   t        dd| | j                  j                         d| j                  | j                        \  }}|dk7  r(|r&| j
                  j                  t        d      d       n%| j
                  j                  t        d      d       | j                  j                          y)	r1  z
db.executeTrg  )r@  r   stdininputr6   r7   r   zSQL statement was not appliedzSQL statement appliedN)
r   r   r  r6   r7   r=   r/  r-   rb  emitrD  s       rJ   r   zSQLBuilderUpdate.OnApply  s     --((*;;]]
S !8NN((+J)KQONN((+B)CQGrK   c                 N    | j                   j                  | j                         y)r6  N)r   r   rp  r   s     rJ   r   zSQLBuilderUpdate.OnClear	  s    t}}-rK   c                 \   | j                   j                         dk(  rj| j                  j                          | j                  j                          | j
                  j                          | j                  j                          n| j                   j                         dk(  ri| j                  j                          | j                  j                          | j
                  j                          | j                  j                          n| j                   j                         dk(  rh| j                  j                          | j                  j                          | j
                  j                          | j                  j                          | j                  j                          y)r8  r   r   rz   N)
r   r9  r   r:  r   r	  rq  r;  rA   r<  r   s     rJ   r   zSQLBuilderUpdate.OnMode  s#   99!!#q(!!#$$&$$))+NN!YY##%*!!#$$&$$))+NN!YY##%*!!#$$&$$))+NN!rK   c                    | j                   dk(  rt        | t        d             y| j                  j	                         }|D ]C  }| j
                  d   | j                  j                  |         d   }| j                  d|       E y)	zAdd function to the querydbfz3Dbf driver does not support usage of SQL functions.rB  Nro  r   funcr   )r6   r   r-   rw  r   rt  r   r   )rG   r   r   r   r  s        rJ   rx  zSQLBuilderUpdate.OnAddFunc   s     ;;%OP nn**, 	2A==*4>>+C+CA+FGJDIIfDI1	2rK   c                 ~   | j                   j                         }| j                   j                         }d}|dv s"|dk(  rC| j                  j	                         dk(  r&d|z   dz   }|d| |z   ||d z   }|t        |      z  }n|dk(  r| j                  j	                         dk(  r8|j                         j                  d      t        d      z   }|j                         j                  d	      }|dk\  r||| j                         }	n||d j                         }	|	j                  d
      D 
cg c]$  }
|
j                  d      d   j                         & }}
||v rE| j                   j                  |       t        j                  | j                   j                         y|	r|	d
z  }	d|	z   }	|	d|z   dz   z  }	|d| |	z   }|dk\  r|||d z  }|t        |	      z   }ny| j                  j	                         dk(  r\d}|j                         j                  d	      dk  r|dz  }|d|z   z  }| j                   j                         t        |      z   }||z   }|r| j                   j                  |       t        j                  | j                   j                         | j                   j                  |       yc c}
w )rH  rV   )rY   r  r  r   rz   r  Nr   setrM  rL  r\   z= r   rN  )r   r  rO  r   r9  r   rP  rQ  r  r.   r-  r   r   r   r.  r   )rG   r   rY   rS  rT  rU  rY  rV  rW  rX  colrs   s               rJ   r   zSQLBuilderUpdate._add/  s   
 '')--113	//xDII$:$:$<$A5[3&Fx(61F784DDIs6{"G yy%%'1,||~**51CJ>||~**7319#D.446F#DE]002F=C\\#=NOc		#q)//1OOD=MM33G<LL!7!78cMFv#+,,"5DMF2	19.IV,'')Q.	<<>&&w/!3)IS5[(	--779C	NJ"Y.	MM""9-
T]]++,''05 Ps   0)J:c           
      V    i | _         dgdgdgdgdgdgdgdgd	gd
	| j                   d<   y )NzABS()zLENGTH()zLOWER()zLTRIM(,)zMAX()zMIN()zRTRIM(,)zSUBSTR (,[,])zTRIM (,))	ABSLENGTHLOWERLTRIMMAXMINRTRIMSUBSTRTRIMro  )rt  r  s    rJ   rr  z"SQLBuilderUpdate._initSqlFunctionsd  sI     9!l[ \99 \&'L
#
hrK   )r  r  r  r  r   r:   r!   r>   r   r   r   rx  r   rr  r  rK   rJ   r_  r_  x  s<    1+-99Ad 3:[Iz(. &231j
rK   r_  c                   N     e Zd ZdZej
                  df fd	Zd Zd Zd Z	 xZ
S )SQLBuilderWherez-Class for building SELECT SQL WHERE statementr   c                 t    t        d      d|dz  }t        t        |   |||t        j
                  |       y )Nr  WHEREr!  )r   r1   )r-   superr  r!   r   r:   )rG   r   r)   r   r1   rH   	__class__s         rJ   r!   zSQLBuilderWhere.__init__w  sD    <=A
 

 	ot-E7ryy 	. 	
rK   c                 :    | j                   j                  d       y )NrV   )r   r   r   s     rJ   r   zSQLBuilderWhere.OnClear  s    r"rK   c                     | j                   j                  | j                  j                                | j                  j                         r| j                          |j                          y r  )r   r   r   r  r   r4  r  r   r   s     rJ   r   zSQLBuilderWhere.OnApply  sE    T]]3356'')LLN

rK   c                    | j                   j                         }| j                   j                         }d}|dkD  r||dz
     dk7  r|dz  }||z  }|t        |      k  r|||   dk7  rdndz  }|rN| j                   j	                  |d| |z   ||d z          | j                   j                  |t        |      z          t        j                  | j                   j                         y)rH  rV   r   r   r  N)	r   r  rO  r   r   r-  r   r   r   )rG   r   rY   rS  inspointrU  s         rJ   r   zSQLBuilderWhere._add  s    
 '')==224	a<F8a<0C7IU	c&k!x 0C 7R?IMM""6)8#4y#@6()CT#TUMM++Hs9~,EF
T]]++,rK   )r  r  r  r  r   r:   r!   r   r   r   __classcell__)r  s   @rJ   r  r  t  s#    7+-99A 
#-rK   r  __main__)rQ   rq   )filerQ   r   rI  updaterz   )r   r)   r1   )1r  
__future__r   r$   sysr   corer   r   grass.pydispatch.signalr   	core.gcmdr   r   r   dbmgr.vinfor	   r
   r   gui_core.wrapr   r   r   r   r   r   r   grass.scriptscriptr*   r    r   r  r_  r  r  r   argvprintstderrexitr1   int
sqlBuilderAppappsqlbr;  MainLoopr  rK   rJ   <module>r     sX  4 & 	 
 
  	 * 2 2 G G   b bJ[(z [(|y
z y
x+-j +-\ z
388}F"gCJJ'

388}CHHQK 
xx{h%
	!	 %
gCJJ'

"&&)CT388A;eDDIIKLLN- rK   