C   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" @@hC}!Ѱ<" 9iׂIIIHk+?c?*Y!du)bT9вU$8GI.澬DSq q}.d8FهKaKdrFh.]y4 JЛ]KBE$$ $ PR΀G]ui$$'! "#031C/Td=SQ?62Ccj{ ̏dچ/cV`Wz͈{Y`dhL ]OBlomrn s-ڗEZN_1%bHϣV7):ӷ)}~(;!b15K[Evϻ>q.% O(c#x$'+`٥vv(M"vB.a T~ϕhy(6nݱl1yNɓxA R8rqv1.cS+_&@ uM5Ĉ XmeLXqy#9]c}ɄLdeJ몓I1T dCaM$T,X bʭ!%F5X1x#!q\F2&RqCol~̱.0ϦLd`. m{Y~k{C}bv;UcN(ouh6 &Y587E$-']n,@TD\+RyUU^Q,f>1qfU Fڥ>IfNUwu#OMMQ6 N*_ k rS`1:!F'<+ b?O2 !Q12A "3a#$?,7!`yǮ(16w a F#?*"sv>Ⱥfv͑s]GnS ȥpG ыEg)Zx rYq] @f_܃pչEڎّC Ŝ*/ hOSvو\5Uy|oHm2CSBW)5{TW=o*R Aks=Cre?i /ں$beo`ޮGHy;fNAl8.\S"aúFYvNk-*`vkʈ2fEEWa, fF^#;[9^~Y$:0#W3Z*IZڹkn--9=G;7F)m{TɆ=Ȭ55Baڞ5M#m5Ʀm8+Hh$}:&eQ[;i]С::o$<~5RB?s35rOֿwP/̅(Z6R>)N4!ʊwz-rw+ykq1bKhƸ4NӐXQ_})+e15nq?[^9<z3Fsi8')9p){RPZ+*p(aYV6lg9;duNt@3sTwzaŇGTbH(#*zc9Kb1tÊ Z?giDHRB^MvOLD,'dqCP$ΔU֟֊=sF$JދZ?NANWP, ¦򙈉&;xdupiIpd;Dž!ֿѮAb%u}j-p>I[Nbi G';4wm]H]#LӘNNRs.]en -8ePsQ;țEݫ7g_LWEZ:/IagnܤiٹŷTH~ia֎~KV A-2m]F"m9-Z bǰ״ @~4Nxčtl>u#rgѐ3;M9<J1vfL8׋1PHgPXv{O}nKQ؋7bX4<`Y7siV)s:{rOhz @4VWB&ɡob܋F4>ysfXWSNO$,.u:ԫgyao4$hD#ٸf^kh7#1Z֥&*v-;bޭQhowy]ه.+7Mⴻ JYgfi3qK C3¹? 5Z.N^Z wKF͂7ރ۞wjTJ.qŠ\Sv1UR욽&NpЖ``уm`vn#z4>eV`'h'jAҔ-4:Hn]9h<nU6m2cE1/Y%I~ʏ|VBƟ@;%M9M}1Dd%gO] у&rf7uܲ(!1AQaq0 ?!*@)JeGj{['v+)(/д%젍ZkkLuRmj.c@Z VJdjh62AO a;oBu H=nKW8Bɰu?бأm,sr|8˨iqI2tZۄJPXEzޔj~]UMuzv!N&1YzJՠ\po'ሸC؊YTD"HM5Ъi߯aFA)ڮzE@hg֝81jk\M38ܢ  s7N}ޭGNBcL pk;Jδ3eiUgAYW]\>GyگQ=fKA;Ta`eM+Q Lň]GM<ĦjHNMx}aX{̣S ԅnMASr ( (Lzo9.;ӳf `Ӕ٢3 IW\9~_saa\ԊWܭX:ӆ38ty*NqPBIYjE>DP!R%-4'皺;~J!7mXhP!曭$\AYj.lC4+jDdgC0-*|`ZD+лC")s8KqpqMs4 7\U`.[Ey8AH!/,(:M -T䓥~ O4-Ԓn}HDN7K$_Ԕ䚞`RhB_aX?4Vŗ@هua;{PcT+7YBo?r-ͩ{ĎA ˼nM286G1V˜Jв"lV55C]h̊A%  'pԂՐ9=d=e{'<3_ :^~4(n-Cs5m![jmIqU~Tw8`pH8uД l maP0 9yCMF1G糞.U~FC{!e(Y:P7~;LN^{1r\ԬG(0dÏOqKZ⑼T{ 2sKdՏ?mMQ=67iH+9d=;QؤH8nLbDyS%({bCupt#C$A"H{jqᶯ:n=EhH`!mMA?v6+MԿ⟚q KiD*Q5CZ2|]:Xd+t:o@M :32b[\5=ֵ7])|tϺwBńe!`:I,9:j@/a 8+v6&{Ǹ@MviA 6T'whs E}xG&'g J~1qff&q˘-vYm /i1 I6u,)#,΁l}*&`$ͬe%w3xѤXcD执g峕5B/|$=%8 a 2.l c@G \/x[өq]v5?N|!\,>{"r/?&!1QAa ᑱ?ĊD肭 nv@yޝ (I…U - bmE>,1v!d& &檔5D&0PԔ͒@Z:†E" Q`”>PH:~OP3W@hMkU \OR5ʄ,f|r}јxo)"+hQK/0`5{M~ '!1AQaq0 ??k#^~G#V,#Z1'ܤ~pO%OO\q`~ }EŰ5 輸dux\$s[{T2t`Bgq4Z]b 㛪3,(@bApr)9:@|b!rg:N^Ʌ x_\pm7I0?>^kw|.K[sF@]Gn*L yO leP.p֍jS=ʨןQF"5zʼnk*8u" Fg cSyVƇNؐ(48hVAӎ^^ jyB p"y]ļlU(7U`3pCGF'&ygozXν: P"@G@x[o&MJ$F.hi w;}/^͇qnmN/TQއO1\,}bQ #¯^S!)X#GPȏt c^\' }iIZa)z4͊Ξy48,f#KP!Jx|wʆ#Z< ~Krp&qH/;R沽+ER~0vV#ʀTS(-ڝBybCDb8~= Yͧ]@nMk2%;%,r6LR腻?^;KŇ=ք =`ɥ/z&I{#JMC}H9^UJ,P pSGd69Ϭu%"ˢP K"k)=9 ㇌,OliXzh " R ^sNkQ >63( PQPy3$f+W՛=4ǁ`*^ EbKt6^!籷ȭK{/;Lpx;aOلz[.NP4]GcTv~sg'LED]j'G]6rYUPw*OİՋi'8۴#gXx+=eU6Rc"u2~?ny;u3'6f b߬M$*k&?6 *^1nێz)Ra}1ٯ%EY2QEp$ EqSt#+x *hUIXM?'//a'G q@0( } G#Ȣp 9;/& `B&$yt(*zxӔS?Kȏ3{p b  ۍ-z܈֦6?<ǬPNG 更 6/h0Ziuae*M'A xvq.>F oN{Q{gDLu=|O xNdq8(EUu,O tDJ ;GeCV YZ T4{(Ӳ'ctfwcjre޳m #7,6BE4QP.P(&^{9H-mo qg1=>p)/"p0!4m‚S6úFNh D )XdT FؤZ⸚kHc8v I `ԁ i4)t*çLe_>ruGEQgǔctō0l6vd GG8v^|#JyZPSO YCuAߐ"xOfHF@KV!少Eҕ]h [).q*0I<8^6}p^thoigiDKp,23I5쓄OY6s7QsOw^wJ/A➰0g(ՄyKԇQS?HwX=ҞX~Q='p?7 @g~G}rgT? JFIF  H H (ICC_PROFILE   0 mntrRGB XYZ acsp   - desc trXYZ d gXYZ x bXYZ  rTRC  (gTRC  (bTRC  (wtpt  cprt  بV7eudakt!Q ,*RGPQNČzŬb 5666p z"c83''Mq6Gitql@90.ۚAcN|li:9蠃p/^ZnLx84v;[#$ nh'c32o8Ɛ5KAv*_?nX?pyֆ̈́#z23F0Oe> {Gu.V (C'h/o%>x1X r:(>}{ycX8b]U:dOMsVAp'Z3'3E-ybj:>jOvUw#2cl~@gFCjțbz ^:-tdfj{XTh8aUM^+dAl"(KK m1$$ XKKqržoqg V FF#pG~:]֦!!Ң:pC+ AzӬ].t`='h_/} @L\,x㌼z԰+J-v+Y['8' % X q=[4Sj~4ݢ#dʂēRL5kX؊>l:t\baBA\Q38( ө:&$ 'L#d{qH>*5;jDo ˷YmԈ*[9*5tUf%3= GUW\'AR_W4_P պ -|4RFJZv0d[ˠzJ|PU8;鯌 'VcL,κ>*eb)f,0"j1 1v՘;bJ++COz7%>NU,=z\cEVK>Ic7} .jHn;^觱GHI HVǂO:ߊ{mSV?K|@ AiAT`2j 1~K8’$ ~]=9ឦG *9EMּm5Xf9Qĸ}i D%+t+;F: v:-&h_rD|! Ә;Zl븂':C&ҀaeKkm6 uT".}J&\ hciB2B+T7t?EPþЌmAF\lc2ЊABmE,cն\QJ]d5 `O Y@8?lx#KiI&Ri1fR2f1N%_g*TӨ??N:}+לɀh٭qL,ʈBrcuBmz ̢TV^ 뙏8' ufUX3㓏>NG:/;Hp饕B1K /%iɫ VQ%:_ -1oL?Roa\i^F|W*Na)P X#y㯨z+Cح\вjirm*dWҡQbBȨi'%NEb?'[h=`OiU϶u nR}GW4fVJmiR~J|l%m'%"LW V27NsXb?_={s}ij4Ý=SNjxFV"ԎI(E)]ӝЖm[4 m`5-7Wf󪥎bZKa#Vb%KY5T$y`46̼p C7HM'l{Oi +Pw~j,S5T4(FԨ;A`*HJTPgt(6/cg5U1@Qb8Y!rBzOQKF+6v%=~XDPpWc_-:߈#c坣CW1:^Q 06Ӭq@ Dj$ UW$?9F\cSM5=2>hב\,()JBk; J#j徻W(p=oQD #UMhU*Fc ?N=nF5Ӑ12w05Z뀩4ڣ霅uC1y%nJ8Ԑ*crR 9W=H9,A׻,.ZFb QEGVNs, q';OMmbtNVqOw*֙kPѬ؈XJIӯEWok+R{%j; Yx 7&&,LԜYbw"lI(*`۹F AS- #$413)Qpڤ3RxOJ$cP]viuq {kyN.- B,@󪳪ڸAor%X0UNb9 򍕑7)*233|Rnb@q|EUý$!7&["XOy ~ƓtADhP]mG파9p=ԜZ]ӭሎOeyq !bI GU:5~FoL ST[е$]$g*w]!;m@ޠ&IUڬ{҄բ-.SmҒ` vU"oL;'5s"W)@äL1i}^Y5$+Pv0o HU @ȓsQM)?M\4Q $2;g WJ/NwFJGD: y όMfW!QUZ%azҳDK_XhM^rԝ^!d'<#ﴛO{/F?+$ Y' wg'$ljGAH7l4xѶc}I*esg~;ͤt@B2iB'9C a8fTR: %NO@ m3sv w .@濾 ,FYrT0mUW_v>>d[A6ڊx:YTLHvӺ!nSD}>[mET0_,'C]pjVᅷPDZ[-V0`>}ܟpmֻ2O6O*ݹXHSN(J /+1՟#(P*gEO#w&j6?;ڡ)+U]l\/{莄*I/9<'$'#'yt/&-\\WPL`/p9qa'e¨E] fAAEYnGtm,ϮwXT>AaN#FjŵjQFdq^<H?yJ܃2*3 T4ЧH**W;(ꭽ¾Pf=eyA4FJ6{e]JqOCf#3SJf iMM\ iT$rG8$9>2:M)Q#NKe&"E8.z<mHk?#t˒A]; G0H:f!i! j{1m}o7u;$99Ӱ\ncz:zALq޶wyKT<4X,'!Y;Ͱ6q GM~_~܂}t>(zl}:r L9 fe}.-R*<`c6oܛ=prҽGB)nQ%)s*&i΍%—Zb{m[NNkbwBw Q*dF HP iܛ; aV68j}\eIGI'͔B;yA :^bn-m#@S6ˎr ;~cmƻgU:X6G%[gc{]c4)fpsgY˅>*"1}2<175)]V5)kdkM~`΂:{4nGPTTb   뎱϶w FFᓂG8>zF_H9_rDl:ҶH5Z!Bj.yk}erb:SOT]!ǎ?n:HεZsyztn[7NZ#UQO$.J#]Cr#YX9c<'$z 9 .$$PnDSn 2u5X g\ ?|Aᬰⶵ >>bE)Cb-ruMc׺*,\)`^m ge\k.۫8گoK1gWMpU޻zI=EErz:#6--/Wm\z8מ0x tA_c?Ծc^MژIMyO>l0ċ}t7[\ʲ9̜m_a[姯rְjP\kx1'CdmvF70e+m-]a?ݝKuSMUm 8f Yb!)2Z.UD \~:ܽ8zR̪Kcbs&ߦ1$, w\gc3F$iU#<`:I4{w.2aQ$EXNo?Gm NN rE$#Jn҉!AH'zePzRog8u(tJP߁Z.pÐ͢Aռ65Xsyvm 6RW7W;|0 >OүG@ٳ<>omԼ()kZJlK,F 4)snOQ{u㌏= Ao,ծ?eKBzG 6e6 f|CU _4C[j͕M8,%emM8\ cv COwTGi _94BDf%'ns8MPc&-y"8R_j 3a+z+N 9QlDQ40E VۋrH2I_YO',:뿉WNHvﵐ0B}na*E zUbN#0e"f.Q H5"-HVn=+ # Eiy- v8=g`o[ 鼛2.D^QeB ؅qϿRC~ B+Jۍ8 4*ӖΝ1R BI\ 1[0 I9y)Y " 7]6qg\ vP  s= Ѭ֕)פE< c`ϷU9W,: ?y1hsU(T ge/룮JA]|4aZVAIeIhBI!l$3![qHnw\7R{oM/ִ>5& gwjFE dc@K:V&W/k+=Yk[ @fU5zzmFȖH,[ n-dc wd[z"g4ϘRr0`B8_; #$^Zo5KZYKj GY%s"!a[9I2TF-w#a]˒Itٮei_FpVЧ૱W3eCi7 "}HApG>h֝5i T٧- '`dX1AF$$ޙ_Z]ڷTC Uy JGO} >A"5a> ZUR -Z\9 jrWݖQRݳ*ļ]$ڵXq=/w z\II#{ӭl^;F_R쵎[ָ[gKKͰoQ )W녕іs*kuzŨQde`WU_KLE~"g r<2GyއL(-VY -Z(IU0 |\;8C mhl:̄DkYHOk|:*DY tsس |zrO;񍃌sT31=jwyШ^nZHm_G̮0W󿓹S;_$mٛIDV=f-H}U]HA*vԶ3\Wh*I#$@6x^OZC&JU 16 XD*if&BDGFYYP[KLX uX .Z hq Ghb8M#Mqt\c> aT 00=㎨ʕGQԪR,ĜI9zӦJO3Rn`C5܊@QO1N.ؔ"I\YÖĐHdL\}IP~jm$ y; :ZGZVJv =&*UF#``R`*S+p\=) ҭ9k̮Ršx0'**ԑLkɺk+zJb#:|MZ ?j$ݼ &X)$6FY6ѕ/; J*nlC*ų_ ԕ{_6:\47ڷs4RmĊ=z *ʪXT[]5Bl#a-˙bv8@H|Rwe9A%5&M%Z02TN)&&GfM 儀oŒM;=.//k~ E"a9/3y,>lj>ZXy&εYP&h gec<``]!}i'c KQulFIʓ_\T58(+cJq~ [dgmm/`Xڙhtkq ו$"c[PVY[uɜ&#몵"ȾqC"ÜȔ!<Mj8u-dx*gϫtTLdKlaWڭ\~|7u`h(w֋cL=˼=FvcGs}зUBSМ;FI;Q$8+V|[CS쮙1%YP Q% LVVK+&,cIb]Vyi ~h?yF4"5As-F ݆x55P&E:W@f;}Gy^]U ITki 1 d﫠*cNh' cؗYnsL:b?H :kM~@8#Iqɔ~:f]P*i]H'fjhxTҗ1O:^t$1]UXz&tODT>(^s&3#N_/x-䬦? ~vU-W$4'ӎvRG|jySW?u4(1 G[ِ22jʎhrmoյشgRͮ%ϟѬ9 oR  n-&F-@hgY_qN;"2 !KJ  šA^, "aG8`=14=5Mqk>U@UT :RgjrKF.O$I9'=i}._ Default page
  • Your IP: 216.73.216.3
  • Server IP: 1.201.172.194
  • Server: Linux hyjg 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
  • Server Software: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/8.2.20
  • PHP Version: 8.2.20
  • Buat File | Buat Folder
Edit File: rte_routines.lib.php
"; $retval .= ""; $retval .= ""; $retval .= " " . __('Is deterministic') . ""; $retval .= " "; $retval .= ""; $retval .= ""; $retval .= " " . __('Definer') . ""; $retval .= " "; $retval .= ""; $retval .= ""; $retval .= " " . __('Security type') . ""; $retval .= " "; $retval .= ""; $retval .= ""; $retval .= " " . __('SQL data access') . ""; $retval .= " "; $retval .= ""; $retval .= ""; $retval .= " " . __('Comment') . ""; $retval .= " "; $retval .= ""; $retval .= ""; $retval .= ""; if ($GLOBALS['is_ajax_request']) { $retval .= ""; $retval .= ""; } $retval .= "
"; $retval .= ""; return $retval; } // end PMA_RTN_getEditorForm() /** * Composes the query necessary to create a routine from an HTTP request. * * @return string The CREATE [ROUTINE | PROCEDURE] query. */ function PMA_RTN_getQueryFromRequest() { global $_REQUEST, $errors, $param_sqldataaccess, $param_directions, $PMA_Types; $_REQUEST['item_type'] = isset($_REQUEST['item_type']) ? $_REQUEST['item_type'] : ''; $query = 'CREATE '; if (! empty($_REQUEST['item_definer'])) { if (/*overload*/mb_strpos($_REQUEST['item_definer'], '@') !== false) { $arr = explode('@', $_REQUEST['item_definer']); $query .= 'DEFINER=' . PMA_Util::backquote($arr[0]); $query .= '@' . PMA_Util::backquote($arr[1]) . ' '; } else { $errors[] = __('The definer must be in the "username@hostname" format!'); } } if ($_REQUEST['item_type'] == 'FUNCTION' || $_REQUEST['item_type'] == 'PROCEDURE' ) { $query .= $_REQUEST['item_type'] . ' '; } else { $errors[] = sprintf( __('Invalid routine type: "%s"'), htmlspecialchars($_REQUEST['item_type']) ); } if (! empty($_REQUEST['item_name'])) { $query .= PMA_Util::backquote($_REQUEST['item_name']); } else { $errors[] = __('You must provide a routine name!'); } $params = ''; $warned_about_dir = false; $warned_about_length = false; if ( ! empty($_REQUEST['item_param_name']) && ! empty($_REQUEST['item_param_type']) && ! empty($_REQUEST['item_param_length']) && is_array($_REQUEST['item_param_name']) && is_array($_REQUEST['item_param_type']) && is_array($_REQUEST['item_param_length']) ) { $item_param_name = $_REQUEST['item_param_name']; $item_param_type = $_REQUEST['item_param_type']; $item_param_length = $_REQUEST['item_param_length']; for ($i=0, $nb = count($item_param_name); $i < $nb; $i++) { if (! empty($item_param_name[$i]) && ! empty($item_param_type[$i]) ) { if ($_REQUEST['item_type'] == 'PROCEDURE' && ! empty($_REQUEST['item_param_dir'][$i]) && in_array($_REQUEST['item_param_dir'][$i], $param_directions) ) { $params .= $_REQUEST['item_param_dir'][$i] . " " . PMA_Util::backquote($item_param_name[$i]) . " " . $item_param_type[$i]; } else if ($_REQUEST['item_type'] == 'FUNCTION') { $params .= PMA_Util::backquote($item_param_name[$i]) . " " . $item_param_type[$i]; } else if (! $warned_about_dir) { $warned_about_dir = true; $errors[] = sprintf( __('Invalid direction "%s" given for parameter.'), htmlspecialchars($_REQUEST['item_param_dir'][$i]) ); } if ($item_param_length[$i] != '' && !preg_match( '@^(DATE|DATETIME|TIME|TINYBLOB|TINYTEXT|BLOB|TEXT|' . 'MEDIUMBLOB|MEDIUMTEXT|LONGBLOB|LONGTEXT|' . 'SERIAL|BOOLEAN)$@i', $item_param_type[$i] ) ) { $params .= "(" . $item_param_length[$i] . ")"; } else if ($item_param_length[$i] == '' && preg_match( '@^(ENUM|SET|VARCHAR|VARBINARY)$@i', $item_param_type[$i] ) ) { if (! $warned_about_length) { $warned_about_length = true; $errors[] = __( 'You must provide length/values for routine parameters' . ' of type ENUM, SET, VARCHAR and VARBINARY.' ); } } if (! empty($_REQUEST['item_param_opts_text'][$i])) { if ($PMA_Types->getTypeClass($item_param_type[$i]) == 'CHAR') { $params .= ' CHARSET ' . /*overload*/mb_strtolower( $_REQUEST['item_param_opts_text'][$i] ); } } if (! empty($_REQUEST['item_param_opts_num'][$i])) { if ($PMA_Types->getTypeClass($item_param_type[$i]) == 'NUMBER') { $params .= ' ' . /*overload*/mb_strtoupper( $_REQUEST['item_param_opts_num'][$i] ); } } if ($i != (count($item_param_name) - 1)) { $params .= ", "; } } else { $errors[] = __( 'You must provide a name and a type for each routine parameter.' ); break; } } } $query .= "(" . $params . ") "; if ($_REQUEST['item_type'] == 'FUNCTION') { $item_returntype = isset($_REQUEST['item_returntype']) ? $_REQUEST['item_returntype'] : null; if (! empty($item_returntype) && in_array( $item_returntype, PMA_Util::getSupportedDatatypes() ) ) { $query .= "RETURNS " . $item_returntype; } else { $errors[] = __('You must provide a valid return type for the routine.'); } if (! empty($_REQUEST['item_returnlength']) && !preg_match( '@^(DATE|DATETIME|TIME|TINYBLOB|TINYTEXT|BLOB|TEXT|' . 'MEDIUMBLOB|MEDIUMTEXT|LONGBLOB|LONGTEXT|SERIAL|BOOLEAN)$@i', $item_returntype ) ) { $query .= "(" . $_REQUEST['item_returnlength'] . ")"; } else if (empty($_REQUEST['item_returnlength']) && preg_match( '@^(ENUM|SET|VARCHAR|VARBINARY)$@i', $item_returntype ) ) { if (! $warned_about_length) { $warned_about_length = true; $errors[] = __( 'You must provide length/values for routine parameters' . ' of type ENUM, SET, VARCHAR and VARBINARY.' ); } } if (! empty($_REQUEST['item_returnopts_text'])) { if ($PMA_Types->getTypeClass($item_returntype) == 'CHAR') { $query .= ' CHARSET ' . /*overload*/mb_strtolower($_REQUEST['item_returnopts_text']); } } if (! empty($_REQUEST['item_returnopts_num'])) { if ($PMA_Types->getTypeClass($item_returntype) == 'NUMBER') { $query .= ' ' . /*overload*/mb_strtoupper($_REQUEST['item_returnopts_num']); } } $query .= ' '; } if (! empty($_REQUEST['item_comment'])) { $query .= "COMMENT '" . PMA_Util::sqlAddslashes($_REQUEST['item_comment']) . "' "; } if (isset($_REQUEST['item_isdeterministic'])) { $query .= 'DETERMINISTIC '; } else { $query .= 'NOT DETERMINISTIC '; } if (! empty($_REQUEST['item_sqldataaccess']) && in_array($_REQUEST['item_sqldataaccess'], $param_sqldataaccess) ) { $query .= $_REQUEST['item_sqldataaccess'] . ' '; } if (! empty($_REQUEST['item_securitytype'])) { if ($_REQUEST['item_securitytype'] == 'DEFINER' || $_REQUEST['item_securitytype'] == 'INVOKER' ) { $query .= 'SQL SECURITY ' . $_REQUEST['item_securitytype'] . ' '; } } if (! empty($_REQUEST['item_definition'])) { $query .= $_REQUEST['item_definition']; } else { $errors[] = __('You must provide a routine definition.'); } return $query; } // end PMA_RTN_getQueryFromRequest() /** * Handles requests for executing a routine * * @return void */ function PMA_RTN_handleExecute() { global $_GET, $_POST, $_REQUEST, $GLOBALS, $db; /** * Handle all user requests other than the default of listing routines */ if (! empty($_REQUEST['execute_routine']) && ! empty($_REQUEST['item_name'])) { // Build the queries $routine = PMA_RTN_getDataFromName( $_REQUEST['item_name'], $_REQUEST['item_type'], false ); if ($routine === false) { $message = __('Error in processing request:') . ' '; $message .= sprintf( PMA_RTE_getWord('not_found'), htmlspecialchars(PMA_Util::backquote($_REQUEST['item_name'])), htmlspecialchars(PMA_Util::backquote($db)) ); $message = PMA_message::error($message); if ($GLOBALS['is_ajax_request']) { $response = PMA_Response::getInstance(); $response->isSuccess(false); $response->addJSON('message', $message); exit; } else { echo $message->getDisplay(); unset($_POST); } } $queries = array(); $end_query = array(); $args = array(); $all_functions = $GLOBALS['PMA_Types']->getAllFunctions(); for ($i=0; $i<$routine['item_num_params']; $i++) { if (isset($_REQUEST['params'][$routine['item_param_name'][$i]])) { $value = $_REQUEST['params'][$routine['item_param_name'][$i]]; if (is_array($value)) { // is SET type $value = implode(',', $value); } $value = PMA_Util::sqlAddSlashes($value); if (! empty($_REQUEST['funcs'][$routine['item_param_name'][$i]]) && in_array( $_REQUEST['funcs'][$routine['item_param_name'][$i]], $all_functions ) ) { $queries[] = "SET @p$i=" . $_REQUEST['funcs'][$routine['item_param_name'][$i]] . "('$value');\n"; } else { $queries[] = "SET @p$i='$value';\n"; } $args[] = "@p$i"; } else { $args[] = "@p$i"; } if ($routine['item_type'] == 'PROCEDURE') { if ($routine['item_param_dir'][$i] == 'OUT' || $routine['item_param_dir'][$i] == 'INOUT' ) { $end_query[] = "@p$i AS " . PMA_Util::backquote($routine['item_param_name'][$i]); } } } if ($routine['item_type'] == 'PROCEDURE') { $queries[] = "CALL " . PMA_Util::backquote($routine['item_name']) . "(" . implode(', ', $args) . ");\n"; if (count($end_query)) { $queries[] = "SELECT " . implode(', ', $end_query) . ";\n"; } } else { $queries[] = "SELECT " . PMA_Util::backquote($routine['item_name']) . "(" . implode(', ', $args) . ") " . "AS " . PMA_Util::backquote($routine['item_name']) . ";\n"; } // Get all the queries as one SQL statement $multiple_query = implode("", $queries); $outcome = true; $affected = 0; // Execute query if (! $GLOBALS['dbi']->tryMultiQuery($multiple_query)) { $outcome = false; } // Generate output if ($outcome) { // Pass the SQL queries through the "pretty printer" $output = PMA_Util::formatSql(implode($queries, "\n")); // Display results $output .= "
"; $output .= sprintf( __('Execution results of routine %s'), PMA_Util::backquote(htmlspecialchars($routine['item_name'])) ); $output .= ""; $nbResultsetToDisplay = 0; do { $result = $GLOBALS['dbi']->storeResult(); $num_rows = $GLOBALS['dbi']->numRows($result); if (($result !== false) && ($num_rows > 0)) { $output .= ""; foreach ($GLOBALS['dbi']->getFieldsMeta($result) as $field) { $output .= ""; } $output .= ""; $color_class = 'odd'; while ($row = $GLOBALS['dbi']->fetchAssoc($result)) { $output .= "" . browseRow($row, $color_class) . ""; $color_class = ($color_class == 'odd') ? 'even' : 'odd'; } $output .= "
"; $output .= htmlspecialchars($field->name); $output .= "
"; $nbResultsetToDisplay++; $affected = $num_rows; } if (! $GLOBALS['dbi']->moreResults()) { break; } $output .= "
"; $GLOBALS['dbi']->freeResult($result); } while ($GLOBALS['dbi']->nextResult()); $output .= "
"; $message = __('Your SQL query has been executed successfully.'); if ($routine['item_type'] == 'PROCEDURE') { $message .= '
'; // TODO : message need to be modified according to the // output from the routine $message .= sprintf( _ngettext( '%d row affected by the last statement inside the ' . 'procedure.', '%d rows affected by the last statement inside the ' . 'procedure.', $affected ), $affected ); } $message = PMA_message::success($message); if ($nbResultsetToDisplay == 0) { $notice = __( 'MySQL returned an empty result set (i.e. zero rows).' ); $output .= PMA_message::notice($notice)->getDisplay(); } } else { $output = ''; $message = PMA_message::error( sprintf( __('The following query has failed: "%s"'), htmlspecialchars($multiple_query) ) . '

' . __('MySQL said: ') . $GLOBALS['dbi']->getError(null) ); } // Print/send output if ($GLOBALS['is_ajax_request']) { $response = PMA_Response::getInstance(); $response->isSuccess($message->isSuccess()); $response->addJSON('message', $message->getDisplay() . $output); $response->addJSON('dialog', false); exit; } else { echo $message->getDisplay() . $output; if ($message->isError()) { // At least one query has failed, so shouldn't // execute any more queries, so we quit. exit; } unset($_POST); // Now deliberately fall through to displaying the routines list } return; } else if (! empty($_GET['execute_dialog']) && ! empty($_GET['item_name'])) { /** * Display the execute form for a routine. */ $routine = PMA_RTN_getDataFromName( $_GET['item_name'], $_GET['item_type'], true ); if ($routine !== false) { $form = PMA_RTN_getExecuteForm($routine); if ($GLOBALS['is_ajax_request'] == true) { $title = __("Execute routine") . " " . PMA_Util::backquote( htmlentities($_GET['item_name'], ENT_QUOTES) ); $response = PMA_Response::getInstance(); $response->addJSON('message', $form); $response->addJSON('title', $title); $response->addJSON('dialog', true); } else { echo "\n\n

" . __("Execute routine") . "

\n\n"; echo $form; } exit; } else if (($GLOBALS['is_ajax_request'] == true)) { $message = __('Error in processing request:') . ' '; $message .= sprintf( PMA_RTE_getWord('not_found'), htmlspecialchars(PMA_Util::backquote($_REQUEST['item_name'])), htmlspecialchars(PMA_Util::backquote($db)) ); $message = PMA_message::error($message); $response = PMA_Response::getInstance(); $response->isSuccess(false); $response->addJSON('message', $message); exit; } } } /** * Browse row array * * @param array $row Columns * @param string $color_class CSS class * * @return string */ function browseRow($row, $color_class) { $output = null; foreach ($row as $value) { if ($value === null) { $value = 'NULL'; } else { $value = htmlspecialchars($value); } $output .= "" . $value . ""; } return $output; } /** * Creates the HTML code that shows the routine execution dialog. * * @param array $routine Data for the routine returned by * PMA_RTN_getDataFromName() * * @return string HTML code for the routine execution dialog. */ function PMA_RTN_getExecuteForm($routine) { global $db, $cfg; // Escape special characters $routine['item_name'] = htmlentities($routine['item_name'], ENT_QUOTES); for ($i=0; $i<$routine['item_num_params']; $i++) { $routine['item_param_name'][$i] = htmlentities( $routine['item_param_name'][$i], ENT_QUOTES ); } // Create the output $retval = ""; $retval .= "\n\n"; $retval .= "
\n"; $retval .= "\n"; } $retval .= "\n"; $retval .= "\n"; $retval .= "\n"; if ($cfg['ShowFunctionFields']) { $retval .= "\n"; } $retval .= "\n"; $retval .= "\n"; // Get a list of data types that are not yet supported. $no_support_types = PMA_Util::unsupportedDatatypes(); for ($i=0; $i<$routine['item_num_params']; $i++) { // Each parameter if ($routine['item_type'] == 'PROCEDURE' && $routine['item_param_dir'][$i] == 'OUT' ) { continue; } $rowclass = ($i % 2 == 0) ? 'even' : 'odd'; $retval .= "\n\n"; $retval .= "\n"; $retval .= "\n"; if ($cfg['ShowFunctionFields']) { $retval .= "\n"; } // Append a class to date/time fields so that // jQuery can attach a datepicker to them $class = ''; if ($routine['item_param_type'][$i] == 'DATETIME' || $routine['item_param_type'][$i] == 'TIMESTAMP' ) { $class = 'datetimefield'; } else if ($routine['item_param_type'][$i] == 'DATE') { $class = 'datefield'; } $retval .= "\n"; $retval .= "\n"; } $retval .= "\n
" . __('Name') . "" . __('Type') . "" . __('Function') . "" . __('Value') . "
{$routine['item_param_name'][$i]}{$routine['item_param_type'][$i]}\n"; if (stristr($routine['item_param_type'][$i], 'enum') || stristr($routine['item_param_type'][$i], 'set') || in_array( /*overload*/mb_strtolower($routine['item_param_type'][$i]), $no_support_types ) ) { $retval .= "--\n"; } else { $field = array( 'True_Type' => /*overload*/mb_strtolower( $routine['item_param_type'][$i] ), 'Type' => '', 'Key' => '', 'Field' => '', 'Default' => '', 'first_timestamp' => false ); $retval .= ""; } $retval .= "\n"; if (in_array($routine['item_param_type'][$i], array('ENUM', 'SET'))) { $tokens = PMA_SQP_parse($routine['item_param_length'][$i]); if ($routine['item_param_type'][$i] == 'ENUM') { $input_type = 'radio'; } else { $input_type = 'checkbox'; } for ($j=0; $j<$tokens['len']; $j++) { if ($tokens[$j]['type'] != 'punct_listsep') { $tokens[$j]['data'] = htmlentities( PMA_Util::unquote($tokens[$j]['data']), ENT_QUOTES ); $retval .= "" . $tokens[$j]['data'] . "
\n"; } } } else if (in_array( /*overload*/mb_strtolower($routine['item_param_type'][$i]), $no_support_types )) { $retval .= "\n"; } else { $retval .= "\n"; } $retval .= "
\n"; if ($GLOBALS['is_ajax_request'] != true) { $retval .= "\n\n"; $retval .= "
\n"; $retval .= " \n"; $retval .= "
\n"; } else { $retval .= ""; $retval .= ""; } $retval .= "
\n\n"; $retval .= "\n\n"; return $retval; } // end PMA_RTN_getExecuteForm() ?>