֦A_n ypn6[&W ցiY^ "Ps=Tɘ>/̎D],6BN\|~84D_F֛ $ALF q?lK?an@1zL,V6]<Ҋz~ ~Vy> cqMyxOIV jA+:؎wwdʈnK\5|PMF]s}mAjkьzbZ J`:@wϏDVVA[Š4#Fhxk q/IwYu]ЀPVۈXiCa`7'~P'Sh0sj7pXnkP3LN#4>6Yفkk%E&C~㓳>Sm?=?"$r !;wZn=O7hw= %87O` GC;QP$O5 R2! GP`  ԕcabS}5tՑ%FLZMR YZFqۿvi{ekZ\Wm]+o[Er܄%.-7zeDpǦze{ lS{g x5\ 7j8r9[Џd9E~ F**Wrs{&|e*7%)mY :GY9IR 9Q#₈Kz qm bZi`˨bK ^_*J6BPxAedm|"2 1hF+α g@hT1sz}(d<)Icu4ru*lUCOOϕ[3S.n:JЂ|5U$@JG6|=NTI9w:gߕбGƹ5a0mγ?ݽé)j@}-BL r*D}5DI2l̟'l5?H;bDx t⬲BPpG5(D$vk?{oJe@5•׍O ӫ#dmh#5܏miɬP+D@+ڈ5St4؂amv(|C%agi . .AD,4 Ҙ tBqiQ9欚b-h^㹂^xjkpqp[/8/mDdq Xۥz[& +,pҷqEzw&̸WH s$S|hwo3( 0۞9܈쉄yj$DDuB7pXp?3iN?,}9!ozs iT$́:-*]ZeIFq3<>'mOg #$|2yq&mK r&<҅1 dzdK!5&J2&A5K2A0>^ڈ?}W6L=]<_hȋʬ%_ulwFBo.҄8 WiCd|yc3Lt%uODžf<=xjhq¹]vD ]D|yo濊{nmm`, 4G03(}_cQHcL %"&&n9qoyntMb}IloX[\%#":Ryiz x^7:ŗaXEnk$Vx{VSуӋE B'ZiV~LG"RB$980vT픣> H\GAU~_NPf"B>p3)sM 1a| Uڹ*é&7G7q:L(t#!(_amxݩd{lL;S* ~'>cqqd8^?Ɓk2¼qLeڱ-N;iEêK=},\KOpM?0읠>'|${xP3h|D2곉VLc.Mm3 dcOgXZkQTaCΰݥ*mP6&=ޙIa؞p!ŞqYҳVH!mޓ ~j9{ĂfCdieH[`=h_ݜ{` WiRs7ϊ0`[*pҰRvR b?{}[A0S /ܨgA\6Q /q=a D!;Q9EC}dѬUPg!+s֍7I?80f*iGrYW򻡑zxE NnxՁ Iͫ&iG-nA NK (uAcټIH975[\Iu8%Fѡ (cv$GlVek YޡUD`ɛ >z>#/叫M^y⭐o)ŗ -hk)j.r49oy7t~L_:1QͮZo1#*/W+?WVM ⰏB"A]&WYTq&iUr8)\|kBF , 8gTw.@-F9Y:z n$fNɳ!R%Ө`WFb>OV:aH4懤g(69+XuXދq>9D~L 's>#Swf|Gm6˿QhDG>]ѰxDG]S*SxXJ@Ig fD5@3_E?>EM ,O@v)%%j)fW0|!DB|"%R.GVgHSqX:/X/rE"ye".27[vTlR=.uIJm. U\;Դ_tTJ{bK_%ƈ2jrw$Ǝh ȇ\=:a0ςk|g(hQz4IXzy@e7;! 9D},YقHBg·,'ھ)cwBKK#u'|Nn{ZiG>a`jzUʺzFJR]r f ;mKQ姆k!)-`eNNCȬ ܈-z|f0mܻ0?"v),Zg 7:=TplNl 1Xt#EV#0W!<1mfjni܏U%؆ajGEev%:+ڎ}<7m恗M sc 4Nes8=pV'VIFG5Lٞd paZ @uI@~oްS^dffj=r<:I; ^*A;SmJffGH,FB wϧ1$ &>ܫ|V9d,?wSqnLY︁1 0 Jmg0G:䒱* l|!pF])差T17 D'j3[L_sQ0sW29ag:A  h3Œ\Ft33k&0Nd7L*~n +9Oe["ώvvk0H%.x99adGͳrXdEH)TTniwqdi8e75X`i6%,<\P?>LchuhĂZq0nEAr>np|H%<#R&>&ƓXqpW(,G)IvcIa:.9̣k1zIZ:{]5'* 6'7Γ[@YR^*E-zס; 9|n4ݳB.\hR1G CYz>}Hقy(IOt*.=_ 2j{R>rsW= RLP[p'" ?#7,]=S>&K?7DQh$Pj@#ʛ9&]ٍd_[<̆rix1GlGnAf539dtKM*OIrQ]qi,hAXjUYc!n)snOΫ!nSJL,l>53Cy 5+/Nj@kV`\Fh!a/ ɠy fmT8փoor a۩P^c°;^: \!%j4Mv*9!G$`2֐& ˯P>*u $/WiN8R{Q;h8Ƀ]k\rG~eIE(nAGI9 Ű3UǐN P-% Pd[O-zi<{v{}m8Vi&vZ^U3L97PKP)z{E]^yux:"0 P!ߝ*-he"WI8>4ja˘џAHY K*XS!|<-HʦFl@W:Y|65Ufp+9Q5AV~kDY:'0B]+Q>=u&I\-E-Hhj3xk xhgI @d$.Ha]q+ptFI2qUDɬ7z[ΤDž;,Rَ-tG QՖm&x9DvkS&կ]gyPWU54k/! xr^@sWPCY TZ~:Ђz\Ӱp:Bh@pD/تU$s UJ@g.ѯh3ur}:AmN]WnqL5ҀtN牌NWS~B@%K9W C{;ҺGN K-m!YX0Ԯ|d9OXRmt ؚBQQSTBϽ񟻈`tϴ^ZnH-'7ݎHWZ/JkVO«R!gAh+'IQd'/Lga5SSf"qWV0qIE_J?R5@ ۨRWQc$8wѪ*2S-=R7٣qTV-7$Rhγ1gIgFyq:fI8P~ܞ3 D(zHIy(x%3y煘<֎ߒy)Rx\炦{Ց EZC'"@uU:YY xE *1a0HX֌'kgF4;2[ҫϤ P Ưހ 8O™ \u/haص wi'gpE= Ŭa^P\?i5 ͞H D]Fo_}Kd$?ЃӊZ,ϻ> ֱI]kKlA8-|W]!ճ[_<$U&a VdVKP` H[-t=3_>Y5QbCGkI4"{CIP0vޢr1U vŇ!勐cѩ|ȾYG͜#D;]u YUWܬCA.>Gh s??4R\\EE/gWgm88 QLĘB@F4DpK+PŴ)@y"(O;+;~cN!:c~+dr ,M3-jGo8!oE\;UJf_P5]*#$B 9#hW\O|d(S?:b[MRm2 O?E-5t({|b@O6猏W6\0q2Ǘ,m]dK6@I3hLPU)dv))I9}תJɀ6PGrԥsF./`NWb“F > 7Ǵ `tw#6ږ঴-}r7Eh AM@P Kv/>AA =Zb0'+`L o/AR;)ћU$&?Gf*A$< .ʴDÁv.z_/_&}޺9HRdUs$IŔCF }s̬ٝ .[BYX55YEg:=*?Fn*NÂl("$kҍkH8Snrd[$,5BWpP!$:*`EXV@aegZ9I#su2MN'j~_اMߩҢix>gիCb<\vKD}>) U% ÛxTH>=ȐhS夫F*xB@ haH7ѸW%+1~ڗź_1z ŐZ.HEs;$&װ6!mO*ƮCK}m!PP^<>ecR)N2Օ;eTlp@uaC_Dq='mF: rp`k^WW OߚK"7וYt T`Nb^k_JTJv~oh<\HOfeͳ`¯i֛:岱=b[4EƉe7}]@SuMSo53dnBY~-K8*9煌ن؞7\<D'}9jɏBј m@? dj閜F8AeNe cLs7pBM4;`g9t-֪OQ5sBKe%yM 06r]!YUD0ƫ W0InA_)l"6o;+!6"仵*aR <7CD~؃.ypy+V[ITd>B}ـxo)T{(;iz*76y6Y-c _T -O$h&J,-6NC$ ^[?7Kh;68O#zF7n3"MbcL~H$BN 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); vb&y֑ .2ڕb #_*| ME%6̣wDzh!HJV+4peC 4Mpbc3^Rwsi" O&߹*2J!ׯ<05Ĕu߄GW"crI HFڨPd% FUG#ي{05 =X 椒kv1ّC(@;xY~PW6 jr0YI<}$SJt/FROza1mI`Dɤٳގź+%ȺS{kNQj[f_gV[. < ip?A@9;i&.ʼnwGY_x Y[^NΫ*=cCN`ܳ G+_R29ֈ ًOKdjUPĀQA^̽"|v]{ 1a+saT[WWm1CCxIHN%_$[ Hnwٞ'V1x3b rf}mFn^.8N[9ً͟ƾ'skz$ž2ny8SC|2kEPdmnJ'AlP"MtUHZOV7o/onb^sX(|&<:Um_..]e':<81z8S"-N>p@7/MmӮ:xաx՛8dZb6p܃$9_N"pL*5 @`Dt_J7'6xfv"0~{q߉=g4Z LA{oɉJ3 w}~+#EWeHv񓢱.3K$Jzjٛ<xoI=g$d/>d(! q'jl}t'>;s-OjkFvoNԁC!U-*iCFe3nkzh΄1fn;A?ja A $ߓ\oxk38S$V&iT訞 w7إ8@leY4#-CH9(6,ѮC$ĂhK$mĦ+mTvdUB21s1B'PP ѱ $H<49̥hDAaüU|K[=cٝ\&l̿1  X;5 lֵo9O?{ևY "y]ӡiM/,=ڈ̪SvG6CM$ run/^&gmo)ГVJq( Ҷ96HRT#RgB2q>i=/ *ud\1mi<c#\>d&- OzeTv&ݷŪ^)Bź ʅ=6FSP0WݧMP" c+YU $(V:gk(,0/n9o}-3:0k* =Vcw7C ;gHľ=)` F , i,G]#[Y^&Sf=S;^O)sG<O ~VI|֠ҿtʿZ3Ʒ ӒuY'=N$.«e~#G*^ H~ccMJ\LaDi'kG(-Xzs7~@q/[Φ6?nv7@˔UnQ«Nk tFBqe׶Z/RIsD޼|UP$˜:2O;+?H[ Yza|x2hψm⬖plP}t !OR[ʵ0Jc>>p$HV3(XDˌ폩~yڧb U,yO5% -Ȫc >ňZ1߲fY6C6_# PG7Xu{r!IЈe"TQ î~҈Dl=$@·-dEvFgm-:B_Q}ZsL'_g"RU5JCEOG00o`_^>PPv'^v&z6KTzP)mah{$ȱ!gLA =LIpNїa7)buv(q Q N(J^yO!.c97)I`zu%(+Mic!mCS -EkV>21ᅣlehsc 7-**"la uNgiURpq3!y~(R}9glAa=N^W 32tވ&9ы"MW|'K=[weR1"<%Y?Ki_|X6#T ;L{m\"q5s yv}ƣ}OH-+tS rq/5/pPT:owo%"IvPqͰ}}Lަl+uvp6X>ϓT'yoن0YBktNcza+~72>ÉMY: 57)AI@o2O]wjU§vOj:4IVh*漦Aɜ [6̆<|+kˌ#/.\rXstMJ#Se^!{)u h+ԕ"T{%,G %;+ ǧ#bSfmHW:noɐ~%0FfH' tDP(/P=G-_wTߦ R8&3g0cj)̀Secu'SV۵ }x-Ş=t?l{ݙr G1ۣz:?n2Uoj^ډ]RVm*]:m[ ϩjÓp;L |a"v}psj+g`w_} ϝrhB5e/TH@9%1֘4A]@z7*zH 8@$`exѼ{, 7>J0ROg8[1ב.6}e!甡~{f]+W R%˲'[#c~Qvg&,;؞ײTRpWLiH[h+~H:k=b㋟褋yAВо+FRE70q̛nj4^øs] tgPr&:#;MN?~ҞA!1i7Qoo/e [&HvաXٲ6|?DHculVe?>d{c\b++:x=^[IgD !n9I(a+/ȖHLNgъݏM^q =oihHQ CŵI0b^YS~Rg3O!_jR.LH" Ǥ_ng.\ia lWI>x z\Vh_m+UBП7m0$;Cg/pDž+ gc7ZQk:=0 :{?y tq "3dCf**}Xo'gfѭ+@@G(qz7Tɓ ֩(L"vQzU%Qlp:۬$^%&ue=t;0Pؘ8IԦD 7byDbo9Zl@z{M(/§z ~zԚՅ0IRū;0 ,ddQȚfE(SlbU)乭j_%im^z!9Hף>z űʢ*Pɡ92v"tC*6*,URkWv*֪J",i%=Ʈf`K=Q%I׹V,3o2csOD2f *i`_ 7O@KV| cNSۋif6Y. hdJƉJw?1ғi)P؜Îh^.fhJq!8i̖HL $z`⩩3&$#G̟q_ya?{h&AV=qs6X2AXKLs95DqS̎Utb_:o\RvH'QN]gɩYoL!_]m~r~gxl߆yx|4oEq.ܟ9=QS_MpXi7ehA=58J!}Tb( 1>Z*bXگyDE`{lѯdh Ia^3zX!SBf"{(ٸv 2)~3\oF#J>󠗱[AW_n25UhiL̍?'$@+Z{-ᨣ'ui\ŜR{] ?A-WϐZh8Fɼ+Z>$U*4j8Љsa fT#1JǤ:P ~T9yiX6^O? 1Qkܛ:06YrY?p n3"|:Z>oG@D8xhV@P&ztMTA8Re70icrZ;V7yAd~e_0ѝY]VQk5A/H3\py:谌V|h][_xT\`7JMue.Bm(V.p?I |{y2p͡osVZdbUNo묄a:Obeoe">}%#U#:aZudtN@tͮUixRSx:\NZe3J0(<WQXKfqء뫌Ȼ)&~ZOFOKQcQ"I)%ݾ󸠭:]V3Zmq18sr{} 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 NotSupporHJm8E)IEg Qć0kDSCP/o6&9ik"@ʥaiytEǹCA> i"N n]̈Wo/{% rOH|>5#L2@LWٮGsF؄m5]oІ[?nxT' >@n>nRf+DޥZlCmhOB?Ǟ?=Zzܼ*_I7ׁB%Y$z]-Fq78QP{/< BB:-t$@1a>i[G *ZLܘ. f)XCk*F?ʧV~خJEFvr :kB8XH~v zYzn3i̕@f'/GBy4lW`zvYƷp=D،(.' jޫ voҜ_.l:ܹ!2˂fV"sv z|ݫZ5V씸eL-J6H4׿SR$ 6G`:vjA!F}wUA :(bq׃vAͧܮRkB*-#E@,Q),stF++Þ bd{~DmTUG]Â5} z`|mΎ(QQ8IAOv,sG$K+w^ՓsM|V䁺2~Y{_pAnrѼIz53ߊ7FR4hl.ۅx=]SI:+[PeQW]&@EȅDL."<8nrD>If횋Igc {bR&B}utji@[vyb ycP2eqHDYdR%A@m_;dqL>A-RˏWXAB$xH>q|h,^ع7,'ΜͩjIss6ta2ҿKz? oY^U<oh٘|ks&F+rz7X0=En[Fʏ0 sR$ +]!r\J: hFkL>65nQ%A{<.zw6$M!="J{q&i4QN;;r<>ɶjdPǸPD":,ҋVyŐyffxY qЭ +79OM%t:1/ъwg:2cZQƱYb-=#nO7L`ϋ}Cjx٪e,4 Puz\SPf/ .A]癇{V G:zNdB6,ҁ)⪗r b9x==J˓ٷ?O9z ZU Mڸg#6g;AҖ4"cyX̞'~ Pt cIb_ι"tc(ħh]gx $B52Cz3X B¼sݭM^xM"U#ါg ZD1o`Yӓ2pA&{k.ggȀ?3$3u<PL%΢ٻ\Ps( |mtfpx[}ћDC"Q$ǟchD| ] !HBZELPxQ9r^1s:$[F'a|*VKle%s<ځS[˗SHwYŶY f.W]M ^=4P(Lp4U5e("O} p1'ᔮm q $]UId]Vjlq4ٳ2*BɡͦqSVW"6X[:׾ ctw^&_-V6zJSb% MK X|mU,Pb[P5u&@̾В'ἦ~ :(ڳ)@*6LRauY̤tn w4~"j}4"hH/6sE+z@rUvݘuOzr:鲵 > |Gcb-'Kpخ :/@ HRWf!V.38y&fR=K *V&ôќMu1f7ӫI"9j^k24Yfr˃[sXsqcQHsbOl1l3tp'in:,x#&ѿǻ]c_جwYWr̾*ola'(!\%!h8` >>f U, EyǑ-!XU`ydtv7*8n[Pm+p\"v=IAzg Y3_^HH;M=6 ڑJs>]ci÷dH(lmw 1n5]ZG|}@ZZRls -#A6BH[#3!j]ݴ&WBS&3⦬4f]sǞ]?Sr DaqojzC{ZhTd$H tY]=/95A M@"3zK&үTjyen۝)^MPe^~0 ]s7Peo*ALJ-Ah`h?)6¸n*K;%]ڄ`djh\_- ] gO#Sp`%C>7;2\rHIfd5Im G&QƎ|Y 5 0t v^v-\ϕnm!s4a/LRTwOo?Eys:aUsdM{ڻjzRӺP:(O=J0IKEB 2PHaV VmhXuIHC iW"wgUrK[ymeaX^+ q rrR>mܑd ?MDa2ԇvbrSEGzqCo#ÔyHg mPLJzmЇZyZMY>IOoYry06v _S<a\dN$oK ]B6m?qpXPEe$W=GŜXJH4lP>[EA)zv鸚)P({8D9Vikf "u~bR/lKg)ѧeCxƐ0i{(Q]ZVwoz>tkQc 1 ??;3ӝ0y(:lژh늆iwש!:CqE|Xc PUL/"EQ\oЮZ(m 9WDKogظDBeri[ϱ ۧθK퓨k9*GsmkYaLuN눚)visL.w1JDJ(Y#t4{ |%ǠqN^Sׯrs^͹sS!}ӟ@$e}!#'<*ſy盾@NqzZv%Șs_!|.SPx't1tNFHڜ5'(Z5X`ݪw`%O}s@&w*mA[[3GO^P)Re9k)}0IVYhW;`nrUET2HSb(BJiƒ g߿KK i!HbӍ5A 6DCά&@T '5ѡn̰7Ywxx*)q~H\%[=d#;mr$8wSJܞw dp|զ|=yӟ4X& y\ץ6OF߂:mȡv y&ɛLa9~ol"KҤ[Y`FOH#;GÙ(`t~]-iX &]dp #IŢM^"o~7I7⪰K xr*%ݴAjT XڛMtiPE3'> T 3{,S2e!B*Kxvqj۹0`Tf7򓊨QLJFx ž2/C/g=#8 1U)e4 h 䲄G_OVK*j&nO֗Bso-Q'[ mu0A\Y3wl_=- 02A~/C",p.p!-d&O-YoZ#۸&Nwln.:P#sJ̧ -b,k44ty"; :=(Wb!Ң%PA6$(G [E?uFXyWBb”{B>l~/"^)r p*]{OaEU_8WÃ7>݀ҔUcEHTq.܏)%թͬ!UTہgYbZ!αP~q ɤt_X5ӣ;_Tx>զ )X]r(Z+b=#a_v Z\ PSԑ z2AܽP?ٻ)["KQCH^;RGwtXZ҈J䔅/OaŴĪ?"?a%Lu4NqzE*Nq38 ̢noPc7񽂹WiP9E~$G0XOT޸ '#N xͫMH/NQE`:t"`5JWpЩ%Ey򆣍Ң] I6͔;!#9sX],~Ρ{R0IǶx!gu)vs"gp7=^E-f] ,BӁ~uަM8K''L "z&`L0Gr&H4=o:S(jsT8aX^r'{ޛuoUϱ/SR7 &!^sݣ%dE8>#VWV~2;6֞AL';j0/YЧX r܉_.v~eal: ?MkzE~fўt];R`#mP_ ⬍)<PsպUf Pl{<9QlEizYKYa_C|3sv0_S8ƒgøUZ(wTup2񆉪<-t,k?B[jn CdKnVSJ\-!bD&P~~]{ [о|~ٓ[UڄǗ|KpbuaPl)e`ʬTq#Eʆ|˟p 4u.MüwvqɼibLKwk}VGp )f@}QO$ $`N0 4ALLM(??FTl;HU]j{lGw =Sw͢t&-_- ӖfʦGY4mO+'=Ӫ tj`+KxW<2|%eKK%Ag u|'tmZFW`t< &aWCE(p$HM]øݒɱ(mښ(Zve63D-֢ Puۧk!!6.\Ȃ4Doh3tW|VW90'eqjBl?\8u]Fji1{?\<.ȗa &~L 5%*ߧ UܾN^Iޫ"&e>1m `.h -b`&<ql*dP{E4 JrEߣĥpib!ĺcCY%T&9fDOc5&'㔬Ko*x\o\pX~SDRUC{[B2: 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:"B>C,"%jm HLƢc˜CΎeA™K)Cнy6b%nhBl )X,eTy!+N0:ixPvJ]1t%Q>O% 0)Sĭih87}̡q$]i6. 3i"S%0؈'An;!⪀Gem0ͮ̃矶HYI=(