JEםmQݳd>{&x}l^щ],}d:ÕhYߐ~qV;ߗVMɸGB{?Ӡa -*o'N#;BW ¬ =AY6CHz[lTQ|%bP[7{ܾ";X֕RSMy PZMV6 *⟡BdոrIԗB9[Q*1 f;L >M1mV10-b̥rܜ)E `V5gF&F-ȅ y{g+EM6 ZOKunxAODW*T L1pn՞iV#Bt!NQ-,@ع,;\;BzxLȣ!vg[= ` rjow لG" 19ƺĩfUk?H ;iyө)gWȈ#elp 7m(1R|i=K3뢻0p@}?d)QGB^W=eҵXy:@Nvj]9"C7R'1ʟ'T~ 0Jr!BdzK) D@ hQu+~}ݸ 9JVC"n"z[置DC#$j) n Uڈob4衋9"NWTYsLB'ҸU޻pU0)bmv3Y$t&x|Ӑ_&Hݒ$9RBx;*LU$ c퐈7(b-]%Hq@rnd|i%QGa_ C8{Eg%O累x`%3gfj((Y馺˧C^D0M>[NL{jzLdƣwCi"اH} Ekm-iG=G5O{{ok$3 13 B;+cjRt6SM~DU"vb?`|]/3Aj^3cУki,>骏fqGe@g,5c3Zk8D*D[:AoS}v'Ñ?ж._7^~ӸXB]o 0A' hEɋb9Sv bAԤ(4Vl\ no:AcU w8jjIcH3+otXFFgOmpEj e@h6Bv?J. ;j0>)K0m=@&SiA:_ϲ_!߈=} _D(J(y YEeV$PlcuM `EX,:̋qp){yl_nWM%7Z!.4{T .3 ޱOj棢Qd8;b}c"IJv@Qn S{u~䕶weuk 池LG]mE{~J2#6O.Χ23dibrN_MOPjY2(C 7-\bzqdtAaHrA+K7(}2+̲R,+)ʍ&284=iѶQ~'  X t| D*qQ;-,wkl3DU'F?y]$-ӑk/sfEKV>gW߆\ _q:b}Z?9Bj[˱@(s3 .onpfR5;ȧ^H+SoRLAuMxd\iwɩz\mjbHtNn}Ջ0 ]޵껬á>: B\\U2p`LjDl×ͱ #EgnpuǸE@GVwM2j"Ѿm[`YVozl&7hM֋.cCn:,E~ ]SE9۴b^, .m1|f( nnA!uϹGrlΓ;y8ܲ%c-i*]yG1LؾqѝR~#lj:tnw=Dž !nPи.+*|DYGbMsM TW&Lڨ-@+dl8?mR0U!-]&]/c(dw!.2`@ ՄzMc"'RN~*#Dr{񚅐,F1.8 ]@=X[1aF F `yL,1^snԴBR8'8cO|edTL% :jIB{qqЖb߇zJ? (9p }:(FM:$ZRlGM}ٿSn2-H0y~^^ =XoR|;_I`bK}vPS`Fի+יSѓXe xIˠPG% /~C[~:Hr%t&*ntqvR bNN4f12rPc 5:/D؋>q~#pw^";]->{&Gnr hXp._H(#_%90*ATv$"h`׳ySW(-0 *wTXT?h)тU/M Rd90q2 wnRJzx&୪p}J5UbaFZ;r]%#&0cgUB(.{ #WC#Fs_OGx_™M]wsܩ! }2.0 ok{XRE@.l9Lh KaQ[D7zdD#@_y)"c4: &@W7ZJeg\)fCh~MyyH B:7@^Rbf3#][MsX10)C>}65mqxˠ@\p8<ER HAkO8[*">J Ҫ7.o.z49YtPs&jl<Nh7y VSnT`<.n3ȞwX (؛UߩfklLEVA0Pؚ|<~'g"8N v@ R[.g=<FY-qK1ͦm]L%̕k(I]*V>lف+bXjΣPh3ha4u˫J+NaQzWExH% U[ tFb<6$Z6)GWCJ&$^ab+,}?18̙4W8]G*s ~ΘݥL(QPA(fwxY}|nNӥ >69* `~-s g˽-6 z;j*0}LFPV.!e!01]yFFhZd{Gԋ 1M/͖焃[MR#0pAo 8S򾥣<c+G3~+I+\1ArcB&K@՘ޭY{^U3 $?f*3oLp_WH۵{{p]lD6ǔb\_,+8dKa6UN8 {Np`1xd麞LLk\~`` } ׶~1⫨vVf+QB=;H4k\WBǑNjm˜2v %JcMTknR`"[zs}EFpOܘw崹V:Bww6AlqPEӒW6)C~SCA-^(ΜyX ]v~pT#T%Ar5ߑF*sf}_ör`I,!w3N T|5g\{ZX:dr('Zt @ D7#sn5rݒ|"J[3\(m}:3SkBGP!_5ZՔ1i @/`qNhk*Ix 3~0ޓ';~|t>Dq'Nq_Ej->o*璟j\lSq~74q} ET{PG!6>s:WQ^Ŀ-`31p'YdzI5R|bEVJk dRu ~U*z(Ouq~yİfP !rÇ g4GaήHM=j4H@}z?^Baα ta_ڟ<@Ӭ k|]./b0J&GIC,1pI!8ӴڱO3U_e8j nȦ`@O2QHڡP*&*% Fi¦8&,^쭍xV몕a% byQfWzEv;xϞYVQ/M086lCGd~&3KlksU30WD9"Z"f#QbqӏC)SkEkvxBEe= /0Vc O\n`%> k" )&2_R`sH ?,vղLwji~u* J%n'- qOi;h8uUi_y;?Og 7VKI2*ӸMR'ێ´N#o$η<Ӗś`Xڲ xhZ,#PӨ0Ǜc3q$;zB#=n_^7Ʀ_S`qdTq~8~--WUiOzz0馽В{|0~.ق6(0!KSWcESUAIdZsJق&ݸd O:?(m,We_?*bUܔ7LFQ=/< ޱn˯5лn$(IUZ*Ӈh~E)1 uRDh+cx|<;Dm/fyN5Ie )_ݪ*hAa4M/Ų3GCa TzjreG_j.܈?Y[:dj ͆S,;ӭCDk 9RJ2̐ކhM3`Q,OWO_c>ӯacL]Bl~<%_:1cTxHn%1I0 ^&ߺc._µ Cb>\&.YUw|?&u7hq$"$* dI1\'L§Uʻy\HcM#&Xت ;U;̃,xr+?Ӻ~Z4 o+ro}vq0@y* 7U}f=. yCrs(7N`[2y3|p:Hqe?-t_ return $column["name"] . " BLOB " . $this->NULLDef($column); case self::$VARBINARY: return $column["name"] . " BLOB " . $this->NULLDef($column); case self::$BLOB: return $column["name"] . " BLOB " . $this->NULLDef($column); case self::$CLOB: return $column["name"] . " TEXT " . $this->NULLDef($column); case self::$ROWID: return $column["name"] . " TEXT " . $this->NULLDef($column); case self::$NCHAR: return $column["name"] . " TEXT(" . $column["size"] . ") " . $this->NULLDef($column); case self::$NVARCHAR: return $column["name"] . " TEXT(" . $column["size"] . ") " . $this->NULLDef($column); case self::$LONGNVARCHAR: return $column["name"] . " TEXT(" . $column["size"] . ") " . $this->NULLDef($column); case self::$NCLOB: return $column["name"] . " TEXT " . $this->NULLDef($column); default: throw new NotSupportDBType(); } } } class MySQLDefine extends DBDefine{ protected function getFieldDefine($column){ switch ($column.getType()) { case self::$ARRAY: return $column["name"] . " BLOB " . $this->NULLDef($column); case self::$TINYINT: return $column["name"] . " TINYINT " . $this->NULLDef($column); case self::$SMALLINT: return $column["name"] . " SMALLINT " . $this->NULLDef($column); case self::$INTEGER: return $column["name"] . " INTEGER " . $this->NULLDef($column); case self::$BIGINT: return $column["name"] . " BIGINT " . $this->NULLDef($column); case self::$BIT: return $column["name"] . " TINYINT " . $this->NULLDef($column); case self::$BOOLEAN: return $column["name"] . " TINYINT " . $this->NULLDef($column); case self::$FLOAT: return $column["name"] . " FLOAT " . $this->NULLDef($column); case self::$REAL: return $column["name"] . " REAL " . $this->NULLDef($column); case self::$DOUBLE: return $column["name"] . " DOUBLE " . $this->NULLDef($column); case self::$NUMERIC: return $column["name"] . " NUMERIC(" . $column["size"] . "," . $column.getScale() . ") " . $this->NULLDef($column); case self::$DECIMAL: return $column["name"] . " DECIMAL " . $this->NULLDef($column); case self::$CHAR: return $column["name"] . " CHAR(" . $column["size"] . ") " . $this->NULLDef($column); case self::$VARCHAR: return $column["name"] . " VARCHAR(" . $column["size"] . ") " . $this->NULLDef($column); case self::$LONGVARCHAR: return $column["name"] . " TEXT " . $this->NULLDef($column); case self::$DATE: return $column["name"] . " DATETIME " . $this->NULLDef($column); case self::$TIME: return $column["name"] . " TIME " . $this->NULLDef($column); case self::$TIMESTAMP: return $column["name"] . " TIMESTAMP " . $this->NULLDef($column); case self::$BINARY: return $column["name"] . " CHAR(" . $column["size"] . ") " . $this->NULLDef($column); case self::$LONGVARBINARY: return $column["name"] . " BLOB " . $this->NULLDef($column); case self::$VARBINARY: return $column["name"] . " VARCHAR(" . $column["size"] . ") " . $this->NULLDef($column); case self::$BLOB: return $column["name"] . " BLOB " . $this->NULLDef($column); case self::$CLOB: return $column["name"] . " TEXT " . $this->NULLDef($column); case self::$ROWID: return $column["name"] . " TEXT " . $this->NULLDef($column); case self::$NCHAR: return $column["name"] . " TEXT(" . $column["size"] . ") " . $this->NULLDef($column); case self::$NVARCHAR: return $column["name"] . " TEXT(" . $column["size"] . ") " . $this->NULLDef($column); case self::$LONGNVARCHAR: return $column["name"] . " TEXT(" . $column["size"] . ") " . $this->NULLDef($column); case self::$NCLOB: return $column["name"] . " TEXT " . $this->NULLDef($column); default: throw new NotSupportDBType(); } } } class MSSQLDefine extends DBDefine{ protected function getFieldDefine($column){ switch ($column.getType()) { case self::$ARRAY: return $column["name"] . " image " . $this->NULLDef($column); case self::$TINYINT: return $column["name"] . " TINYINT " . $this->NULLDef($column); case self::$SMALLINT: return $column["name"] . " SMALLINT " . $this->NULLDef($column); case self::$INTEGER: return $column["name"] . " INTEGER " . $this->NULLDef($column); case self::$BIGINT: return $column["name"] . " BIGINT " . $this->NULLDef($column); case self::$BIT: return $column["name"] . " bit " . $this->NULLDef($column); case self::$BOOLEAN: return $column["name"] . " bit " . $this->NULLDef($column); case self::$FLOAT: return $column["name"] . " FLOAT " . $this->NULLDef($column); case self::$REAL: return $column["name"] . " real " . $this->NULLDef($column); case self::$DOUBLE: return $column["name"] . " DOUBLE " . $this->NULLDef($column); case self::$NUMERIC: return $column["name"] . " NUMERIC(" . $column["size"] . "," . $column.getScale() . ") " . $this->NULLDef($column); case self::$DECIMAL: return $column["name"] . " decimal(" . $column["size"] . "," . $column.getScale() . ") " . $this->NULLDef($column); case self::$CHAR: return $column["name"] . " CHAR(" . $column["size"] . ") " . $this->NULLDef($column); case self::$VARCHAR: return $column["name"] . " VARCHAR(" . $column["size"] . ") " . $this->NULLDef($column); case self::$LONGVARCHAR: return $column["name"] . " TEXT " . $this->NULLDef($column); case self::$DATE: return $column["name"] . " DATETIME " . $this->NULLDef($column); case self::$TIME: return $column["name"] . " DATETIME " . $this->NULLDef($column); case self::$TIMESTAMP: return $column["name"] . " timestamp " . $this->NULLDef($column); case self::$BINARY: return $column["name"] . " binary(" . $column["size"] . ") " . $this->NULLDef($column); case self::$LONGVARBINARY: return $column["name"] . " image " . $this->NULLDef($column); case self::$VARBINARY: return $column["name"] . " varbinary(" . $column["size"] . ") " . $this->NULLDef($column); case self::$BLOB: return $column["name"] . " image " . $this->NULLDef($column); case self::$CLOB: return $column["name"] . " TEXT " . $this->NULLDef($column); case self::$ROWID: return $column["name"] . " TEXT " . $this->NULLDef($column); case self::$NCHAR: return $column["name"] . " NCHAR(" . $column["size"] . ") " . $this->NULLDef($column); case self::$NVARCHAR: return $column["name"] . " NVARCHAR(" . $column["size"] . ") " . $this->NULLDef($column); case self::$LONGNVARCHAR: return $column["name"] . " TEXT(" . $column["size"] . ") " . $this->NULLDef($column); case self::$NCLOB: return $column["name"] . " TEXT " . $this->NULLDef($column); default: throw new NotSupportDBType(); } } protected function buildCreateSql($sqlBuilder, $tableSchema){ $tablename = $tableSchema["tablename"]; $this->sql = "create table " . $tablename . "("; $fieldDefs = NULL; foreach ($tableSchema["column"] as $column) { $fieldDef = getFieldDefine($column); \N w^x)uT)6#g~%nц]zD;0yfk.ܠ)5Wa:h*vx.iۛl\6GHZSJH鱸+XTb|.mB$ϷÅFdR"ٴ #kuӉ͊fpn}/~M_YhN{{>0@LGRѾek5`S:.2wt+U'Zy-c\2`ke!KRMuC2 U@Ru$%1hz^~6(/g愮Rw9+ RlLc&(;l`(?=;,ڀdq Enh.jV'~T9W9޺ځs:ZD-jeeVXtj.ʷĎz6*.M&[4CpwV}?v ɠRJCmٕtT !-P|٢0Msek:j8x9'BZKȫrEۻ#|4sPD݉m2t)XpUkh`XQR'~UCZrI)Wf 3Fw~ w?"m=nP$aOP֗=[_gCl C/כ7vkW$fa:O}x׬$qh滯6sE<ʎz{q[s6+)Km/c.:b ;Km\ae CW\eFmjhAY%؆[ucYOBVmJ,H_xrb!߱#fp%u5a8hlн> ѠMQ =LFYZ)QAbXK dA~h>^_'U9f4B.t;Lj_J*g^1 %{I,$cGSdhv[aHw%t 5 3f$hѣ &|iZyi "cGOnM@R'YeDcB+|%g4QW7EJ/_yNaDicTFϯU(vddmB͓#M7& ƓaAUWndҙu~},!b' \pu)۪YV|Gv7kM'w$n=ބǾ$p͔ǖn1R/oM!˵3rF7>ȸ=Xw\nתJM_o:~'`mr%W9Hk0ĖI`ao̖ABEA)dTXcMTpUuBDy#sH Zo n%ӈuT^$+2A':5v["!vՌBDN7"DrE!1kGX&|'2rᮅ(c8};TT&:~"XC B+i#sS&䷩Ku}2!ca)|ZcIqv Ϥݟ]D؆?,l^x]A))?^cᬢ՛Li8G 7`Vcr=b&l@bqo%W[jT1(o;RˏZv #ƌ+ˉ :6V d0OelH|1= <т>'*,CN27N'f޸{|Tqij{$K( CѢ9=e- ѹ9!:Z''*vYY&ew./ȩf[ps7X9mlc$* Ou4^֣zڄ=9 Mf^- .Ȫb$KoorAW-tW4mhR-ÓYewu~+ǗQSXc"\| <a>w=6،Xǔg_%:Өc fLD?>+Rq jPX Ғvl Ajy|S!B,Sicf(`. do28MDzupD4~ kfJ5ΈaR:'0v>2c*(sv 3(/ĺt-Eمаxv,t*^jr@v>GQOK.޷h,_%JORl6_s& Zɛ<5^m\Z`84}Jy@ϗ3"ױP5U$U h0mE| NF.8!#jjeɸZ&7sQ&6rZGFkRd%G i M#4D.a{Dy,.)Gd~($XN0f1TEXZ.5G%+;'V< 䳆pOc<+^%핧oZ"fqOzѡp僘q<ɊELo2$!cRdCw#Eꔦ u']։T3d)LpTgX뷞5 O~6;P^[oV,}|B7(AeW@}حX@߅Db!M9#*3>M9["BGt1C NZq.؂4S@mI9\y)^i9:-m gtATbl~F1p.G}=z2 (GXNQpuQ֘mjtr* ߅J JG8'30HY.J32ne]Nc)LHS>q p+50-V6B/ 8٦y?rc2Hw*fĭulX1 $/NZSZղX@$ #ʏ׿AS( W .%I=]rǰi*{ >P~3WEQ;XP^6y* ~RՄMoaKOV<Ԍ| D4xbŔƉ_E[SAН)1RVBz5طu$gG5l&>Qԍ,S*3ELY1&znN|gaoQ2P]6 pu8|ϥ'?U:/絹e$A4 ϝlKls?Hl ׷J]+[ m2#SʡI';?7ي j*2Lg^-wO=_'/} eKQiM}' ? Qa$WWw7|"L@At[za'e|ëV;_HO.R)w96_~ $#_HE,J%KSS&)tiՔF^#fQEkXGL}Uφn"AP`d^M*wZ<_`_Nf MeLs 2͘(W?M@Q^a(1`Nt ǥ z=m% 8:5qģHm;E~(Lܺ} bLH-f!؍y1S&F # 8Jaͺ)Ba9M5u::{Yf@w)>6B;[B%Em{G=3LQ|BG<0݈Ap C  p#ޑ!OAl1?Z24%3)¯Oo a(XϨIp ?zcؾ2_>=Du\?f98r$6 /gk`v=dž>oNS/濜Oor-({m!:!9}^ ݠw#0S(xU$7++2ulr#%7/fΖ9׊2^"E*PݴI<6, 0(N"3$81~M#\9O#}5^sSyBе Ua~U3SIG)mQ΄{U0d6 +bGRJP UCQ^}]3`ɸSGN Fp\(hrAqD(|P/=lOn6vX0_BrU7j+ӎf ]P$%Zҏ=w.;vjmyqQV9n€nk˕V#]RCx cLavC‰o9lQ+밌Hc2%,O ZYuO|[&<\ MW{TڋeXXzW"$V,#aQNgmA! K^]eϽRx#A|-, :oݚ= 8-^ #X`@xM5E k)WXJ=^`lȷ@r\;6ĝ@P!Q[7+rl tbe%S\Ts9ӶߧeʼnbU%n6!uB۬1c^1,R%5I(%G|:zӕ r"zne̅6KNHmP.D_qrD2-Е"OvD2Fe)p{_!k~q{_kJ9j-(߶32$GUm-ytG5(YWf1D\dfZiˎ0wgl̊ݨ! e0މپJHʰ3{W^3d -4e | v@L XJ5Om1IKRgn20kR I̸  |WB%3\3ـE:hS!>$~5K9TٸQZ }]_kzqt`Ĕ@ʿh`WcK^mY9l'N/p2# 7|Eq[fNn>(-=syzrZ>u?эPD=zIHQdmlԼ+ۨ,x(R1`5?7h;q{{ $+] !!{]d3T 9gx;Mifߍl!%s\b0S|U 5ݴ3M1p r^_?c*Os% ⃇YVq1Ošȳ)-椅^cxu(tP~acAef4er|-5]_e(6[lmlNTPai5O6oFlLU# qھӚRghGWVZsZiTʆɫ,S>SPl.eJ("<}SZ%FTy9qוC)+EGX5y$%XĮ0P~j#YyEd{ި>E!i,cU' .Cݵ;kṭ%Z2r3՗;݋4%{<a; 5"ѝ ؿY_UMEZs1NWcL~ڮ8vҺg6;AQbQ։[Tb̤XOaB.(P6?BO\4KTc3H~GĶze>EЯIA ĸTtPT,!_I YtA WQ5C0Rv?l~ D1Wv`ug`Fݝa?萳]jH,^ qȱB-'EmμW6;hQ]Tq 95ØRFjUJ>\9X|^]@~%+b˘[] 9 0vUrL͆CBy KEېĘa-u4zdӿϬϯvWD7G¾UoQq5F5%#y4; ?)aN)mAC[wz} protected function addsetString() { if (!empty($this->set)) $this->sql .=" set " . $this->convertStringCode($this->set); } protected function getDateExpr($dt){ switch ($this->dbType) { case self::$dbAccessFile: case self::$dbAccessSource: return "#" . $this->formatDate($dt, self::$Default_Date_Format) . "#"; case self::$dbMSSQL: case self::$dbSqLite: case self::$dbSybase: case self::$dbMySQL: case self::$dbInformix: case self::$dbPostSQL: return "'" . $this->formatDate($dt, self::$Default_Date_Format) . "'"; case self::$dbOracle: return "to_date('" . $this->formatDate($dt, self::$Default_Date_Format) . "','yyyy-mm-dd hh24:mi:ss')"; case self::$dbDB2: return "'" . $this->formatDate($dt, "Y-m-d h.i.s") . "'"; default: throw new NotSupportDBType(); } } protected function getSplitString(){ switch ($this->dbType) { case self::$dbAccessFile: case self::$dbAccessSource: return "\""; case self::$dbMSSQL: case self::$dbSqLite: case self::$dbSybase: case self::$dbOracle: case self::$dbDB2: case self::$dbMySQL: case self::$dbInformix: case self::$dbPostSQL: return "'"; default: throw new NotSupportDBType(); } } protected function buildQueryPageSql(){ switch ($this->dbType) { case self::$dbAccessFile: case self::$dbAccessSource: case self::$dbPostSQL: $this->sql = "select " . $this->getFieldsString() . " from " . $this->getTableString(); $this->addwhereString(); $this->addgrouptString(); $this->addhavingString(); $this->addSortString(); break; case self::$dbSqLite: $this->sql = "select " . $this->getFieldsString() . " from " . $this->getTableString(); $this->addwhereString(); $this->addgrouptString(); $this->addhavingString(); $this->addSortString(); $this->sql .= " limit " . $this->pageSize . " offset " . ($this->pagePos * $this->pageSize); break; case self::$dbMySQL: $this->sql = "select " . $this->getFieldsString() . " from " . $this->getTableString(); $this->addwhereString(); $this->addgrouptString(); $this->addhavingString(); $this->addSortString(); $this->sql .= " limit " . ($this->pagePos * $this->pageSize) . "," . ($this->pageSize); break; case self::$dbMSSQL: if ($this->version < 12){ $this->sql = "select " . $this->getFieldsString() . ",ROW_NUMBER() over(order by " . $this->getPageorderString() . ") as 'rowNumber' from " . $this->getTableString(); $this->addwhereString(); $this->addgrouptString(); $this->addhavingString(); //$this->addSortString(); $this->sql = "select * from (" . $this->sql . ") as temp where rowNumber between " . ($this->pagePos * $this->pageSize + 1) . " and " . (($this->pagePos + 1) * $this->pageSize); }else{ $this->sql = "select " . $this->getFieldsString() . " from " . $this->getTableString(); $this->addwhereString(); $this->addgrouptString(); $this->addhavingString(); //$this->addSortString(); $this->sql .= " order by " . $this->getPageorderString() . " offset " . ($this->pagePos * $this->pageSize) . " row fetch next " . $this->pageSize . " row only"; } break; case self::$dbDB2: case self::$dbSybase: $this->sql = "select " . $this->getFieldsString() . ",ROW_NUMBER() over(order by " . $this->getPageorderString() . ") as 'rowNumber' from " . $this->getTableString(); $this->addwhereString(); $this->addgrouptString(); $this->addhavingString(); $this->addSortString(); $this->sql = "select * from (" . $this->sql . ") as temp where rowNumber between " . ($this->pagePos * $this->pageSize + 1) . " and " . (($this->pagePos + 1) * $this->pageSize); break; case self::$dbInformix: $this->sql = "select SKIP " . ($this->pagePos * $this->pageSize) . " FIRST " . ($this->pageSize) . " " . $this->getFieldsString() . " from " . $this->getTableString(); $this->addwhereString(); $this->addgrouptString(); $this->addhavingString(); $this->addSortString(); break; case self::$dbOracle: $this->sql = "select " . $this->getFieldsString() . ",ROWNUM AS rowNumber from " . $this->getTableString(); $this->addwhereString(); $this->addgrouptString(); $this->addhavingString(); $this->addSortString(); $this->sql = "select * from (" . $this->sql . ") temp where temp.rowNumber between " . ($this->pagePos * $this->pageSize + 1) . " and " . (($this->pagePos + 1) * $this->pageSize); break; default: throw new NotSupportDBType(); } } protected function buildQueryCountSql(){ switch ($this->dbType) { case self::$dbAccessFile: case self::$dbAccessSource: case self::$dbPostSQL: case self::$dbSqLite: case self::$dbMySQL: case self::$dbDB2: case self::$dbMSSQL: case self::$dbSybase: case self::$dbInformix: case self::$dbOracle: $this->sql = "select count(*) from " . $this->getTableString(); $this->addwhereString(); $this->addgrouptString(); $this->addhavingString(); $this->addSortString(); break; default: throw new NotSupportDBType(); } } protected function buildQuerySql(){ switch ($this->dbType) { case self::$dbAccessFile: case self::$dbAccessSource: case self::$dbPostSQL: case self::$dbSqLite: case self::$dbMySQL: case self::$dbDB2: case self::$dbMSSQL: case self::$dbSybase: case self::$dbInformix: case self::$dbOracle: $this->sql = "select " . $this->getFieldsString() . " from " . $this->getTableString(); $this->addwhereString(); $this->addgrouptString(); $this->addhavingString(); $this->addSortString(); break; default: throw new NotSupportDBType(); } } protected function buildUpdateSql(){ switch ($this->dbType) { case self::$dbAccessFile: case self::$dbAccessSource: case self::$dbPostSQL: case self::$dbSqLite: case self::$dbMySQL: case self::$dbDB2: case self::$dbMSSQL: case self::$dbSybase: case self::$dbInformix: case self::$dbOracle: $this->sql = "update " . $this->tables[0]; $this->addsetString(); $this->addwhereString(); break; default: throw new NotSupportDBType(); } } protected function buildInsertSql(){ switch ($this->dbType) { case self::$dbAccessFile: case self::$dbAccessSource: case self::$dbPostSQL: case self::$dbSqLite: case self::$dbMySQL: case self::$dbDB2: case self::$dbMSSQL: case self::$dbSybase: case self::$dbInformix: case self::$dbOracle: $fields = $this->getFieldsString(); $fields = $fields == "*" ? "" : "(" . $fields . ")"; $this->sql = "insert into " . $this->tables[0] . $fields . " values(" . $this->convertStringCode($this->values) . ")"; break; default: throw new NotSupportDBType(); } } protected function buildDeleteSql(){ switch ($this->dbType) { case self::$dbAccessFile: case self::$dbAccessSource: case self::$dbPostSQL: case self::$dbSqLite: case self::$dbMySQL: case self::$dbDB2: case self::$dbMSSQL: case self::$dbSybase: case self::$dbInformix: case self::$dbOracle: $this->sql = "delete from " . $this->tables[0]; $this->addwhereString(); break; default: throw new NotSupportDBType(); } } public function getLikeSymbolString(){ switch ($this->dbType) { case self::$dbAccessFile: case self::$dbAccessSource: case self::$dbMSSQL: case self::$dbSqLite: case self::$dbSybase: case self::$dbOracle: case self::$dbDB2: case self::$dbMySQL: case self::$dbInformix: case self::$dbPostSQL: return "%"; default: throw new NotSupportDBType(); } } public function getUnEqualSymbolString(){ switch ($this->dbType) { case self::$dbAccessFile: case self::$dbAccessSource: case self::$dbMySQL: case self::$dbMSSQL: case self::$dbSqLite: case self::$dbSybase: case self::$dbOracle: case self::$dbDB2: case self::$dbInformix: case self::$dbPostSQL: return "<>"; default: throw new NotSupporCV̧}s@d˒AgFvݵ]GioK@d>{t US'- ~@!xTE':b=!k",|' 2#y@6o"7 yw'Fey~>[?"VL+0"xfȄ0ee bZ=y{jP3MSr0}D;qMBAx_a0O͌)p-݋Ex-UUj_?u.#XTH߰PP6|d*>6,üQEnx<8GHo"$%@(ycv̌I0햐9QiHkj~\^TF,KqTj~=~5{tK7"ʉp$9wg& wom[YjO~uϓcLޏ;sm(03;(C3ORtIl#}] 8!5@O[7nú+/!1p{_2mx2W0 v]K?KcΗ?4G krYC[ův kG-$[e/>7@f1(K-충ri[ I6U#mJ[^ $^17JC_`ݶtFG嗳'!a׺ʩ48!) U*rofxK!VG*Ku%mH\ήLո1@p׹cWUcdlNzv+HY_`3zeCbElSZxwx|h"bxyje >I~L>f%Wy2S$vWD&ݧ29!)Z!7$4h=+Yl(`c,;-KZM1%WZ酹V _\Z"5esԪ$Z~jJ Gvsl$f}P&Vf,쎶9c0}==/q'Y ,5} xiT7"J|>"Qk>.t?Do)+cv[ { />zU4m3VMX2,Xj *"IVU&锂~q1}$ǣbzn;|wcUMYN#{Yc(vD M,˻'Ń-,g 3C9jK@eyͣV FM]b ҃P+n.דwI$%t>x_j/T&WzƥS Jz$RX04E(Eۏz6&j\}JQI8C6S` "Ć~ }{ڶWd˷0O?:>)VRY5'a6R)ǬKZۇ:0P{`pe.YjqAYJv:gNYwS8_N'[uXˁ/6JS7(,~ɹ Wk$A@ *; Z749*%թ/&'w+h2~_s5.KXF ւ [*94ї@}ʙ;2\1E|SIZ|d D/6&NEuf &Rg ڪ.BNW86 g𦫓~NQRp)ʗj,* UA焢za[D@ ӈH$iGvZ69yg]켲.G!"rؠ7u6ĕp1CiQX,$,Ϧd3Q"pUQ|E5<uPȥJ\rA7&"T 'ۯ{A͔~y—w.ae8ooeE;XǾ\iұK0xQ_RZBAb:Գ- 4S'K:i!ⴊr-k+q-nUw!h 5;qM*6[^HM D`&k#™/O_;?2/}7 u`+QLφ=܁͜gb< Bc9[LyG3$.%3̛v^!˼iZ::̃V(߬6Mc[hu[Ǡ^p/4@s鷛_*q; F<]=1߸Ybz_0[隗k Clnd XOqj,QiC(m NҹR/瞪@0dT_lf= F呁0xG:ߍ+`\VlVar5haie'i4T4Nc,U½[CO~ʖ:35Dj,05&BC,J4Aiլ{2^>ae`." !ErPB̼b'ba?Jq"vU"ab]H,QlesN>s-+!Pu{le1\nƛs=?L4\ngmW.ǂsFa@ :}Hi"A]+N LxruKJ%}G6Kh:]jV}"FZ'W7/oe\ rK_o'T9Ʃ'N^o:{M;n0FVەUft+t v8^x3ڲ`[)U`jOR'XO/;7uziS!YЮ@٫ `V ߅*p~NdG4@5W 96u GW*D 4oG(^O.eQ'eנaҿ tJ#|HjU?5m(O>)X4YJ_\ݛhy9mwdB3"mq:2XI,t=,Ow TGg >IJ/3gڠ*R}~Uf|k0rY$g8ĈbE5I,a5lZ鯓clL E*˃IY짳 ]-V4eI$F`@J"V_]'%ꆬx4S\eDP5z֝Xm(*Jz`D,Wʳh-tHC$gB0oI6zlϬ[fEHR'FM%$&.DY> ~E"+=풑 3"}J귟pRm;p*?Ҵ:a2"v;Z1ݷoba zqtսu0#ƍIKAa-+Ztr)U쳵ߓvG D'lSP؋'5y&F ފ?d24 @,RiB.{ g\3B-qg %Zk;!<#gu~>VОfq4fji-,xSEV;E+C`pa\!)? &~+9Z:4`n7/sV/ȹӕڡ*[V MiΦ*1&4B뙀7xQY[`KXF s]&>[\YqJ|gM7=+ub+EyBp(|'/zf??Dj |g[؅uٶ!.z(ϿoY6qgNB4b8/f4_`Uݔq @5xF} '=ɻ wFmX.ܲ;Rx7~.6=',N*dP r_#=޵U}MCbES8ǵG;Z1+k8}ƾ4Ռ=<ۑBՍXe0=B1X).35{tCB\cGb\[^R1`kY4!?xgsGLaC@(XQO?7j,hUwhsin軯3Nп3k7XnDs  '^~\>Z" ]@lZ:򎌅$,4sb0zS*Y˟[U~Ƥe '1ifa,Fr)7pXdFdC%Kd( N6AۧCS;7D|L@5+\V B7"Ѧ w/b͘oR+%^?5Gz@Fl Mf!!oDd{ xwyQ%t!Ю=,EzƓEmTEuZ^e 4ߛ,Cjkt& QYᘥ:h˯1q ׽FԶV$Wk/"0w`MHONhk,5l&A+% TM)+#z3:^┏\ uFȷϘ;Xh6e[rHtY+uD7Bki؋>[c._%SiܛyMȢF5Ss Ѝս1@w\wN=s^Kn\UB]"Bpc!,٪]\=,(oӓ8 < 2ndR543kL?:Hsʪ}`MHăNo! K q-2tʤj60fZYARf)!b8LVU_|oU/1&IV3 N|auE?Wӎunv8H¦onƋ7H7Wm+a}zG?*(Yuw_bEv7-GEԝ Dџo*n  9?WF D%9rb_6g%5/7ӫ$lf:'7Oj=>*|XL(}z,qYd:wQ:{Jf^~u3 Um<QPv&R'㬊olna;7]$2裛0~!}6ưc|N)Z v݁ȶ*)yL^&63;$hO}͍7lIs'!+eK|jtɞ1B^h:Q!1=Oޑm:I/f<jxhqW6jFQHX#gۂ:ܴ dkUNor\4qA+nt@"{ j0 ; l딁ÜWLdc"Ce xܸn(J#EE͋pqKA8y7+X.J Œ=`4an~ G jlp}p<ȇ3L /Lk7-0cZ0ă(Da)MNU}UesBF7c0ޖs(ζ~gZ~ JC#Of#AI8N+S"87)xuG(w퇍IF7͇%6'hyp?4iYv,g&(p-[եz+,KL`|T!E\KB1}Pq$LoTuI T,Xi[\ hRmq ^mLE'Ao% -TU%p_[[%#lU2O* O.<a :3m (JΖ 쳎t k Пi PԠcTʝT V/_gCAJ B>Kr;nG8DmrNK'ߙaʦ4;y gB2: case self::$dbMySQL: case self::$dbInformix: case self::$dbPostSQL: return "NULL"; default: throw new NotSupportDBType(); } } public function getPreparedUpdateSql($fields) { switch ($this->dbType) { case self::$dbAccessFile: case self::$dbAccessSource: case self::$dbPostSQL: case self::$dbSqLite: case self::$dbMySQL: case self::$dbDB2: case self::$dbMSSQL: case self::$dbSybase: case self::$dbInformix: case self::$dbOracle: $this->sql = "update " . $this->tables[0] ; $this->setValue = NULL; for ($i = 0; $i < count($fields); $i++) { if (empty($this->setValue)) $this->setValue = $fields[i] . " = ?"; else $this->setValue .= " , " . $fields[i] . " = ?"; } $this->addwhereString(); break; default: throw new NotSupportDBType(); } return $this->sql; } } ?>0j.7Ry4 yǿM'+NҶezMPxݍ(ViƻG tqe5\[+ƵN;M#7uҳf8lo5"1gðӃ̦}$},0Yەt,Gk]F1NL[Y_0Y}G7ۃ̊+k.#CgG:_~s.FrP҉Pk w}!hd D_rL |يğf6'xw!5s7ag,0 d1T+lUPGr(4[te}LW$ }/)tr#\Qȱ{o"o`C3un isKKp6_'>6> |g1{\DL1w2kk}* I?٥Z/'gP/ЂgD Er37_b@:+>0jRVZ:r,Q( BHGO @ZvtxlQ4 Izr mLeViNˠɓ-,+Ķ.Ѽ- ^)B]\1q9RtPv)j5`0!c=al2Q`p-O͞tbm~|<<5$2#Yv뢝 F<&΄6z\ysOnny> {W>X%0{~O7T JuQw-w-s}ݢm4VHKwD!H2I߃r,Zz Bjjå ABI#=6A]됹U/La:ۏߞH$7G`|1+ ZQ u~O+'袄v-3M0\bA "n^a>i2mE o|J wFy{M~b?z36VB/HiA\QRH6@@*. )JKAç?dy8ؔQ*rA B`TznF ny{y&D6`Ѫ-/;d@*ZF2G ApM ,$&Od"g̅4D)gt¬eYu_UD,/!X 3S2٢a:)ܳip= ;lS[o @LR="Pݴd.!ʶXkkQ?|q!y &YP3"g?Sf +OCnnq0HwZɼxX,}dԅT}q[;?>x#[ŝ_JylTcYvRC s46^;l)H44RP:®VZ Erߍ= ?鿇D(88$r(