ÿØÿà JFIF    ÿÛ „  ( %"1!%)+...383,7(-.+  -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ  ß â" ÿÄ     ÿÄ H    !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ   ÿÄ %  !1AQa"23‘ÿÚ   ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6  öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷󲍷˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%ÌÁ²h´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ǍýʏTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆѪQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$˝Úsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇ l¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉ䢍mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ­‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U  Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ." ¤‡ú*õ'VŽ|¼´Úgllº¼klz[Æüï÷Aób‡Eÿ dÑ»Xx9ÃÜ£ÁT/`¼¸vI±Ýµ·Ë‚“G³þ*Ÿû´r|*}<¨îºœ @¦mÄ’M¹”.œ«Y–|6ÏU¤jç¥ÕÞqO ˜kDÆÁ¨5ÿ š;ÐЦ¦€GÙk \ –Þ=â¼=SͧµªS°ÚÍpÜãQűÀõ¬?ÃÁ1Ñ•õZà?hóœ€ L¦l{Y*K˜Ù›zc˜–ˆâ ø+¾ ­-Ök¥%ùEÜA'}ˆ><ÊIè“bpÍ/qÞâvoX€w,\úªò6Z[XdÒæ­@Ö—€$òJí#é>'°Ú ôª˜<)4ryÙ£|óAÅn5žêŸyÒäMÝ2{"}‰–¤l÷ûWX\l¾Á¸góÉOÔ /óñB¤f¸çñ[.P˜ZsÊË*ßT܈§QN¢’¡¨§V¼(Üù*eÕ“”5T¨‹Âê¥FŒã½Dü[8'Ò¥a…Ú¶k7a *•›¼'Ò·\8¨ª\@\õ¢¦íq+DÙrmÎ…_ªæ»ŠÓœ¡¯’Ré9MÅ×D™lælffc+ŒÑ,ý™ÿ ¯þǤ=Å’Á7µ÷ÚÛ/“Ü€ñýã¼àí¾ÕÑ+ƒ,uµMâÀÄbm:ÒÎPæ{˜Gz[ƒ¯«® KHà`ߨŠéí¯P8Aq.C‰ à€kòpj´kN¶qô€…Õ,ÜNŠª-­{Zö’æû44‰sŽè‰îVíRœÕm" 6?³D9¡ÇTíÅꋇ`4«¸ÝÁô ï’ýorqКÇZ«x4Žâéþuïf¹µö[P ,Q£éaX±`PÉÍZ ¸äYúg üAx ’6Lê‚xÝÓ*äQ  Ï’¨hÍ =²,6ï#rÃ<¯–£»ƒ‹,–ê•€ aÛsñ'%Æ"®ÛüìBᝠHÚ3ß°©$“XnœÖ’î2ËTeûìxîß ¦å¿çÉ ðK§þ{‘t‚Ϋ¬jéîZ[ ”š7L¥4VÚCE×]m¤Øy”ä4-dz£œ§¸x.*ãÊÊ b÷•h:©‡¦s`BTÁRû¾g⻩‹jø sF¢àJøFl‘È•Xᓁà~*j¯ +(ÚÕ6-£¯÷GŠØy‚<Ç’.F‹Hœw(+)ÜÜâÈzÄäT§FߘãÏ;DmVœ3Àu@mÚüXÝü•3B¨òÌÁÛ<·ÃÜ z,Ì@õÅ·d2]ü8s÷IôÞ¯^Ç9¢u„~ëAŸï4«M? K]­ÅàPl@s_ p:°¬ZR”´›JC[CS.h‹ƒïËœ«Æ]–÷ó‚wR×k7X‰k›‘´ù¦=¡«‰¨¨Â')—71ó’c‡Ðúµ `é.{§p¹ój\Ž{1h{o±Ý=áUÊïGÖŒõ–-BÄm+AZX¶¡ ïHðæ¥JmÙ;…䡟ˆ¦ ° äšiÉg«$üMk5¤L“’çÊvïâï ,=f“"íἊ5ô¬x6{ɏžID0e¸vçmi'︧ºð9$ò¹÷*£’9ÿ ²TÔ…×>JV¥}Œ}$p[bÔ®*[jzS*8 ”·T›Í–ñUîƒwo$áè=LT™ç—~ô·¤ÈÚ$榍q‰„+´kFm)ž‹©i–ËqÞŠ‰à¶ü( ‚•§ •°ò·‡#5ª•µÊ﯅¡X¨šÁ*F#TXJÊ ušJVÍ&=iÄs1‚3•'fý§5Ñ<=[íÞ­ PÚ;ѱÌ_~Ä££8rÞ ²w;’hDT°>ÈG¬8Á²ÚzŽ®ò®qZcqJêäÞ-ö[ܘbň±çb“ж31²n×iƒðÕ;1¶þÉ ªX‰,ßqÏ$>•î íZ¥Z 1{ç൵+ƒÕµ¥°T$§K]á»Ûï*·¤tMI’ÂZbŽÕiÒ˜}bÓ0£ª5›¨ [5Ž^ÝœWøÂÝh° ¢OWun£¤5 a2Z.G2³YL]jåtì”ä ÁÓ‘%"©<Ôúʰsº UZvä‡ÄiÆÒM .÷V·™ø#kèýiíÌ–ª)µT[)BˆõÑ xB¾B€ÖT¨.¥~ð@VĶr#¸ü*åZNDŽH;âi ],©£öØpù(šºãö¼T.uCê•4@ÿ GÕÛ)Cx›®0ø#:ÏðFÒbR\(€€Ä®fã4Þ‰Fä¯HXƒÅ,†öEÑÔÜ]Öv²?tLÃvBY£ú6Êu5ÅAQ³1‘’¬x–HŒÐ‡ ^ ¸KwJôÖŽ5×CÚ¨vÜ«/B0$×k°=ðbÇ(Ï)w±A†Á† 11Í=èQšµ626ŒÜ/`G«µ<}—-Ö7KEHÈÉðóȤmݱû±·ø«Snmá=“䫚mݱŸ¡¶~ó·“äUóJæúòB|E LêŽy´jDÔ$G¢þÐñ7óR8ýÒ…Ç› WVe#·Ÿ p·Fx~•ݤF÷0Èÿ K¯æS<6’¡WШ; ´ÿ ¥Êø\Òuî†åÝ–VNœkÒ7oòX¨Á­Ø÷FÎÑä±g÷ÿ M~Çî=p,X´ ÝÌÚÅ‹’ÃjÖ.ØöÏñ qïQ¤ÓZE†° =6·]܈ s¸>v•Ž^Ý\wq9r‰Î\¸¡kURÒ$­*‹Nq?Þª*!sŠÆ:TU_u±T+øX¡ ®¹¡,ÄâÃBTsÜ$Ø›4m椴zÜK]’’›Pƒ @€#â˜`é¹=I‡fiV•Ôî“nRm+µFPOhÍ0B£ €+¬5c v•:P'ÒyÎ ‰V~‚Ó†ÖuókDoh$å\*ö%Ю=£«…aȼ½÷Û.-½VŒŠ¼'lyî±1¬3ó#ÞE¿ÔS¤gV£m›=§\û"—WU¤ÚǼÿ ÂnÁGŒÃ ‚õN D³õNÚíŒÕ;HôyÄÈ©P¹Ä{:?R‘Ô¨âF÷ø£bÅó® JS|‚R÷ivýáâ€Æé¡è³´IئÑT!§˜•ت‚¬â@q€wnïCWÄ@JU€ê¯m6]Ï:£âx'+ÒðXvÓ¦Úm=–´7œ $ì“B£~p%ÕŸUþ« N@¼üï~w˜ñø5®—'Ôe»¤5ã//€ž~‰Tþ›Å7•#¤× Íö pÄ$ùeåì*«ÓŠEØWEÈsßg ¦ûvžSsLpºÊW–âµEWöˬH; ™!CYõZ ÃÄf æ#1W. \uWâ\,\Çf j’<qTbên›Î[vxx£ë 'ö¨1›˜ÀM¼Pÿ H)ƒêêŒA7s,|F“ 꺸k³9Ìö*ç®;Ö!Ö$Eiž•¹ÒÚ†ýóéÝû¾ÕS®ó$’NÝäŸz¤5r¦ãÄÃD÷Üø!°ø‡Ô&@m™Ì^Ãä­d q5Lnÿ N;.6½·N|#ä"1Nƒx“ã<3('&ñßt  ~ªu”1Tb㫨9ê–›–bìd$ߣ=#ÕãÒmU¯eí$EFù5ýYô櫨æì™Ç—±ssM]·á¿0ÕåJRÓªîiƒ+O58ÖñªŠÒx" \µâá¨i’¤i —Ö ” M+M¤ë9‚‰A¦°Qõ¾ßøK~¼Ã‘g…Ö´~÷Ï[3GUœÒ½#…kàÔ®Ò”‰³·dWV‰IP‰Ú8u¹”E ÖqLj¾êÕCBš{A^Âß;–¨`¯¬ìö ˼ ×tìø.tƐm*n¨y4o&Àx¥n¦×î‡aupáÛj8¿m›è¶ã!o½;ß0y^ý×^EÑ¿ÒjzŒ­)vÚÑnÄL …^ªô× ‡—‚3k Îý­hï]içå–îÏ*÷ñþ»Ô CÒjøjÍznˆ´ ¹#b'Fô‹ ‰v¥'’à'T´ƒHýÍ%M‰ ƒ&ÆÇŒï1 ‘ –Þ ‰i¬s žR-Ÿ kЬá¬7:þ 0ŒÅÒÕ/aÙ¬ÃÝ#Úøœ ©aiVc‰. ¹¦ãµ” ›Yg¦›ÆÎýº°f³7ƒhá·¸­}&D9¡ÂsÉÙÞèŠõØàC™¨ñbFC|´Ü(ŸƒÚÒ-%»'a Ì¿)ËÇn¿úÿ ÞŽX…4ÊÅH^ôΑí@ù¹Eh¶“L8Çjù ¼ÎåVªóR©Ï5uà V4lZß®=€xÖŸ–ÑÈ ÷”¨°¾__yM1tÉ?uÆþIkÄgæ@þ[¢†°XÃJ£j·:nkÅ¢u ‘}âGzö­/IµèЬ¼48q¦F°ŽR¼=ûì{´¯RýicS ÕÛ íNtÍÙï£,w4rêì®»~x(©Uñ§#Ñ&œÕ¤>ÎåÍÓ9’Ö{9eV­[Öjâ²ãu]˜å2›qÑšÕJç0€sÄ|Êëè0튔bÁ>“{×_F`Ø©ºê:µä,v¤ðfc1±"«ÔÍän1#=· Âøv~H½ÐßA¾¿Ü€Óš]Õ; I¾÷ç‚Qi†î¹9ywÔKG˜áñ zQY—§ÃÕZ07§X‚ Áh;ÁM)iÌCH-¯T‘ë|A0{Ò½LÚ–TâÖkÜ’dÀ“rmm»”جPF³ÖcbE§T€ÒxKºû’Ó®7±²(\4ŽÃ¸Uu@j™yĵ;³µ!Á¢b.W¤=mõ´êµK k ¸K^ÜÛ#p*Ü14qkZç5ïë †°5Ï%ÍÛ<Õ¤×Ô¥ê†C Õ´¼ú$ƒÖ“”]Ù¬qÞÚ[4©ý!ûÏ—Áb쳐XµA¬â~`›Çr¸8ìùÝ䫦<>ä÷«?xs´ÇÑ /á;¹øüÊÈÙà{"@Žïzâ¬[âß‚ U_<ÇŸ½4èN˜ú61®qŠu ¦þF£»äJ_ˆÙÎ~ ÞAã–݄ϗrŠD;xTž‘ô`É«…suãO`?³à™ô Lý#Íc5öoæØ‚y´´÷«ZR§<&JÇ+éâô´€i!Àˆ0æAoàðLèÖ-2ŸõW.’t^–(KÁmHµV@xÜÇy®Ñø­â^:Ú3w· 7½¹°ñ¸â¹®:',«Mœ—n­Á+Ãbš LÈ‘ÄnRÓÅœ%¦²‰¨ùQ:¤f‚ "PÕtô¸…cæl…&˜Ú˜Ôkv‹ž+vŠ,=¢v­6—Xy*¥t£«<™:“aîϲ=¦6rO]XI¿Œ÷¤zÚ­›¶ 6÷”w\d ü~v®ˆÌk«^m<ÿ ¢‰Õ\)ùºŽ;… lîÙÅEŠ®cѾ@vnMÏ,¼“ñ•ŽBxðÃzãÇç%3ˆ"}Ù•Åî> BÉú;Ò]V+P˜F_´ßé> Øše|ï‡ÄOmFæÇ ãqÞ$/xÐx­z`ï9"œÜij‚!7.\Td…9M‡•iŽ‹¾‘50ÞŽn¥ß4ÉôO ¹*í^QêËÜÇÌ8=ާs‰'ÂëÙ«á%Pú[O †ÅP¯Vsް.‰,kc¶ ¬A9n˜XÎ-ÞšN["¹QÕ‰ƒMýÁߺXJæÍaLj¾×Ãmã¾ãÚ uñÒþåQô¦¥ /ÄUx:‚ÍÜ’ Đ©ØÝ3V¨‰ÕnÐ6ó*óúK­«…c ¯U òhsý­jóÔj#,ímŒRµ«lbïUTŒÑ8†Ä0œÏr`ð¡¬É Ї ë"À² ™ 6¥ f¶ ¢ÚoܱԷ-<Àî)†a¶ž'Ú»¨TXqØæ¶÷YÄHy˜9ÈIW­YÀuMFë ºÏ’AqÌ4·/Ú †ô'i$øä­=Ä Ý|öK×40è|È6p‘0§)o¥ctî§H+CA-“ xØ|ÐXАç l8íºð3Ø:³¤¬KX¯UÿÙ /* vim: set expandtab sw=4 ts=4 sts=4: */ /** * @fileoverview function used in this file builds history tab and generates query. * * @requires jQuery * @requires moves.js * @version $Id$ */ var history_array = []; // Global array to store history objects var select_field = []; // Global array to store informaation for columns which are used in select clause var g_index; var vqb_editor = null; /** * To display details of objects(where,rename,Having,aggregate,groupby,orderby,having) * * @param index index of history_array where change is to be made * **/ function detail(index) { var type = history_array[index].get_type(); var str; if (type == "Where") { str = 'Where ' + history_array[index].get_column_name() + history_array[index].get_obj().getrelation_operator() + history_array[index].get_obj().getquery(); } if (type == "Rename") { str = 'Rename ' + history_array[index].get_column_name() + ' To ' + history_array[index].get_obj().getrename_to(); } if (type == "Aggregate") { str = 'Select ' + history_array[index].get_obj().get_operator() + '( ' + history_array[index].get_column_name() + ' )'; } if (type == "GroupBy") { str = 'GroupBy ' + history_array[index].get_column_name(); } if (type == "OrderBy") { str = 'OrderBy ' + history_array[index].get_column_name() + ' ' + history_array[index].get_obj().get_order(); } if (type == "Having") { str = 'Having '; if (history_array[index].get_obj().get_operator() != 'None') { str += history_array[index].get_obj().get_operator() + '( ' + history_array[index].get_column_name() + ' )'; str += history_array[index].get_obj().getrelation_operator() + history_array[index].get_obj().getquery(); } else { str = 'Having ' + history_array[index].get_column_name() + history_array[index].get_obj().getrelation_operator() + history_array[index].get_obj().getquery(); } } return str; } /** * Sorts history_array[] first,using table name as the key and then generates the HTML code for history tab, * clubbing all objects of same tables together * This function is called whenever changes are made in history_array[] * * * @param {int} init starting index of unsorted array * @param {int} finit last index of unsorted array * **/ function display(init, finit) { var str, i, j, k, sto, temp; // this part sorts the history array based on table name,this is needed for clubbing all object of same name together. for (i = init; i < finit; i++) { sto = history_array[i]; temp = history_array[i].get_tab();//+ '.' + history_array[i].get_obj_no(); for Self JOINS for (j = 0; j < i; j++) { if (temp > (history_array[j].get_tab())) {//+ '.' + history_array[j].get_obj_no())) { //for Self JOINS for (k = i; k > j; k--) { history_array[k] = history_array[k - 1]; } history_array[j] = sto; break; } } } // this part generates HTML code for history tab.adds delete,edit,and/or and detail features with objects. str = ''; // string to store Html code for history tab for (i = 0; i < history_array.length; i++) { temp = history_array[i].get_tab(); //+ '.' + history_array[i].get_obj_no(); for Self JOIN str += '

' + temp + '

'; str += '
\n'; while ((history_array[i].get_tab()) == temp) { //+ '.' + history_array[i].get_obj_no()) == temp) { str += '
'; str += ''; } else { str += ''; } str += '' + '' + '' + ''; } else { str += '' + '' + '' + ''; } str += ''; i++; if (i >= history_array.length) { break; } str += '
'; if (history_array[i].get_and_or()) { str += '' + PMA_getImage('b_sbrowse.png', 'column name') + '' + history_array[i].get_column_name() + ''; if (history_array[i].get_type() == "GroupBy" || history_array[i].get_type() == "OrderBy") { str += '' + PMA_getImage('s_info.png', detail(i)) + '' + history_array[i].get_type() + '' + PMA_getImage('b_drop.png', PMA_messages.strDelete) + '' + PMA_getImage('s_info.png', detail(i)) + '' + history_array[i].get_type() + '' + PMA_getImage('b_edit.png', PMA_messages.strEdit) + '' + PMA_getImage('b_drop.png', PMA_messages.strDelete) + '
'; } i--; str += '
'; } return str; } /** * To change And/Or relation in history tab * * * @param {int} index of history_array where change is to be made * **/ function and_or(index) { if (history_array[index].get_and_or()) { history_array[index].set_and_or(0); } else { history_array[index].set_and_or(1); } var existingDiv = document.getElementById('ab'); existingDiv.innerHTML = display(0, 0); $('#ab').accordion("refresh"); } /** * Deletes entry in history_array * * @param index index of history_array[] which is to be deleted * **/ function history_delete(index) { for (var k = 0; k < from_array.length; k++) { if (from_array[k] == history_array[index].get_tab()) { from_array.splice(k, 1); break; } } history_array.splice(index, 1); var existingDiv = document.getElementById('ab'); existingDiv.innerHTML = display(0, 0); $('#ab').accordion("refresh"); } /** * To show where,rename,aggregate,having forms to edit a object * * @param{int} index index of history_array where change is to be made * **/ function history_edit(index) { g_index = index; var type = history_array[index].get_type(); if (type == "Where") { document.getElementById('eQuery').value = history_array[index].get_obj().getquery(); document.getElementById('erel_opt').value = history_array[index].get_obj().getrelation_operator(); document.getElementById('query_where').style.left = '530px'; document.getElementById('query_where').style.top = '130px'; document.getElementById('query_where').style.position = 'absolute'; document.getElementById('query_where').style.zIndex = '103'; document.getElementById('query_where').style.visibility = 'visible'; document.getElementById('query_where').style.display = 'block'; } if (type == "Having") { document.getElementById('hQuery').value = history_array[index].get_obj().getquery(); document.getElementById('hrel_opt').value = history_array[index].get_obj().getrelation_operator(); document.getElementById('hoperator').value = history_array[index].get_obj().get_operator(); document.getElementById('query_having').style.left = '530px'; document.getElementById('query_having').style.top = '130px'; document.getElementById('query_having').style.position = 'absolute'; document.getElementById('query_having').style.zIndex = '103'; document.getElementById('query_having').style.visibility = 'visible'; document.getElementById('query_having').style.display = 'block'; } if (type == "Rename") { document.getElementById('e_rename').value = history_array[index].get_obj().getrename_to(); document.getElementById('query_rename_to').style.left = '530px'; document.getElementById('query_rename_to').style.top = '130px'; document.getElementById('query_rename_to').style.position = 'absolute'; document.getElementById('query_rename_to').style.zIndex = '103'; document.getElementById('query_rename_to').style.visibility = 'visible'; document.getElementById('query_rename_to').style.display = 'block'; } if (type == "Aggregate") { document.getElementById('e_operator').value = history_array[index].get_obj().get_operator(); document.getElementById('query_Aggregate').style.left = '530px'; document.getElementById('query_Aggregate').style.top = '130px'; document.getElementById('query_Aggregate').style.position = 'absolute'; document.getElementById('query_Aggregate').style.zIndex = '103'; document.getElementById('query_Aggregate').style.visibility = 'visible'; document.getElementById('query_Aggregate').style.display = 'block'; } } /** * Make changes in history_array when Edit button is clicked * checks for the type of object and then sets the new value * * @param index index of history_array where change is to be made **/ function edit(type) { if (type == "Rename") { if (document.getElementById('e_rename').value !== "") { history_array[g_index].get_obj().setrename_to(document.getElementById('e_rename').value); document.getElementById('e_rename').value = ""; } document.getElementById('query_rename_to').style.visibility = 'hidden'; } if (type == "Aggregate") { if (document.getElementById('e_operator').value != '---') { history_array[g_index].get_obj().set_operator(document.getElementById('e_operator').value); document.getElementById('e_operator').value = '---'; } document.getElementById('query_Aggregate').style.visibility = 'hidden'; } if (type == "Where") { if (document.getElementById('erel_opt').value != '--' && document.getElementById('eQuery').value !== "") { history_array[g_index].get_obj().setquery(document.getElementById('eQuery').value); history_array[g_index].get_obj().setrelation_operator(document.getElementById('erel_opt').value); } document.getElementById('query_where').style.visibility = 'hidden'; } if (type == "Having") { if (document.getElementById('hrel_opt').value != '--' && document.getElementById('hQuery').value !== "") { history_array[g_index].get_obj().setquery(document.getElementById('hQuery').value); history_array[g_index].get_obj().setrelation_operator(document.getElementById('hrel_opt').value); history_array[g_index].get_obj().set_operator(document.getElementById('hoperator').value); } document.getElementById('query_having').style.visibility = 'hidden'; } var existingDiv = document.getElementById('ab'); existingDiv.innerHTML = display(0, 0); $('#ab').accordion("refresh"); } /** * history object closure * * @param ncolumn_name name of the column on which conditions are put * @param nobj object details(where,rename,orderby,groupby,aggregate) * @param ntab table name of the column on which conditions are applied * @param nobj_no object no used for inner join * @param ntype type of object * **/ function history_obj(ncolumn_name, nobj, ntab, nobj_no, ntype) { var and_or; var obj; var tab; var column_name; var obj_no; var type; this.set_column_name = function (ncolumn_name) { column_name = ncolumn_name; }; this.get_column_name = function () { return column_name; }; this.set_and_or = function (nand_or) { and_or = nand_or; }; this.get_and_or = function () { return and_or; }; this.get_relation = function () { return and_or; }; this.set_obj = function (nobj) { obj = nobj; }; this.get_obj = function () { return obj; }; this.set_tab = function (ntab) { tab = ntab; }; this.get_tab = function () { return tab; }; this.set_obj_no = function (nobj_no) { obj_no = nobj_no; }; this.get_obj_no = function () { return obj_no; }; this.set_type = function (ntype) { type = ntype; }; this.get_type = function () { return type; }; this.set_obj_no(nobj_no); this.set_tab(ntab); this.set_and_or(0); this.set_obj(nobj); this.set_column_name(ncolumn_name); this.set_type(ntype); } /** * where object closure, makes an object with all information of where * * @param nrelation_operator type of relation operator to be applied * @param nquery stores value of value/sub-query * **/ var where = function (nrelation_operator, nquery) { var relation_operator; var query; this.setrelation_operator = function (nrelation_operator) { relation_operator = nrelation_operator; }; this.setquery = function (nquery) { query = nquery; }; this.getquery = function () { return query; }; this.getrelation_operator = function () { return relation_operator; }; this.setquery(nquery); this.setrelation_operator(nrelation_operator); }; /** * Orderby object closure * * @param norder order, ASC or DESC */ var orderby = function(norder) { var order; this.set_order = function(norder) { order = norder; }; this.get_order = function() { return order; }; this.set_order(norder); }; /** * Having object closure, makes an object with all information of where * * @param nrelation_operator type of relation operator to be applied * @param nquery stores value of value/sub-query * @param noperator operator **/ var having = function (nrelation_operator, nquery, noperator) { var relation_operator; var query; var operator; this.set_operator = function (noperator) { operator = noperator; }; this.setrelation_operator = function (nrelation_operator) { relation_operator = nrelation_operator; }; this.setquery = function (nquery) { query = nquery; }; this.getquery = function () { return query; }; this.getrelation_operator = function () { return relation_operator; }; this.get_operator = function () { return operator; }; this.setquery(nquery); this.setrelation_operator(nrelation_operator); this.set_operator(noperator); }; /** * rename object closure,makes an object with all information of rename * * @param nrename_to new name information * **/ var rename = function (nrename_to) { var rename_to; this.setrename_to = function (nrename_to) { rename_to = nrename_to; }; this.getrename_to = function () { return rename_to; }; this.setrename_to(nrename_to); }; /** * aggregate object closure * * @param noperator aggregte operator * **/ var aggregate = function (noperator) { var operator; this.set_operator = function (noperator) { operator = noperator; }; this.get_operator = function () { return operator; }; this.set_operator(noperator); }; /** * This function returns unique element from an array * * @param arrayName array from which duplicate elem are to be removed. * @return unique array */ function unique(arrayName) { var newArray = []; uniquetop: for (var i = 0; i < arrayName.length; i++) { for (var j = 0; j < newArray.length; j++) { if (newArray[j] == arrayName[i]) { continue uniquetop; } } newArray[newArray.length] = arrayName[i]; } return newArray; } /** * This function takes in array and a value as input and returns 1 if values is present in array * else returns -1 * * @param arrayName array * @param value value which is to be searched in the array */ function found(arrayName, value) { for (var i = 0; i < arrayName.length; i++) { if (arrayName[i] == value) { return 1; } } return -1; } /** * This function concatenates two array * * @params add array elements of which are pushed in * @params arr array in which elements are added */ function add_array(add, arr) { for (var i = 0; i < add.length; i++) { arr.push(add[i]); } return arr; } /* This function removes all elements present in one array from the other. * * @params rem array from which each element is removed from other array. * @params arr array from which elements are removed. * */ function remove_array(rem, arr) { for (var i = 0; i < rem.length; i++) { for (var j = 0; j < arr.length; j++) { if (rem[i] == arr[j]) { arr.splice(j, 1); } } } return arr; } /** * This function builds the groupby clause from history object * */ function query_groupby() { var i; var str = ""; for (i = 0; i < history_array.length;i++) { if (history_array[i].get_type() == "GroupBy") { str += '`' + history_array[i].get_column_name() + "`, "; } } str = str.substr(0, str.length - 2); return str; } /** * This function builds the Having clause from the history object. * */ function query_having() { var i; var and = "("; for (i = 0; i < history_array.length;i++) { if (history_array[i].get_type() == "Having") { if (history_array[i].get_obj().get_operator() != 'None') { and += history_array[i].get_obj().get_operator() + "(`" + history_array[i].get_column_name() + "`) " + history_array[i].get_obj().getrelation_operator(); and += " " + history_array[i].get_obj().getquery() + ", "; } else { and += "`" + history_array[i].get_column_name() + "` " + history_array[i].get_obj().getrelation_operator() + " " + history_array[i].get_obj().getquery() + ", "; } } } if (and == "(") { and = ""; } else { and = and.substr(0, and.length - 2) + ")"; } return and; } /** * This function builds the orderby clause from the history object. * */ function query_orderby() { var i; var str = ""; for (i = 0; i < history_array.length;i++) { if (history_array[i].get_type() == "OrderBy") { str += "`" + history_array[i].get_column_name() + "` " + history_array[i].get_obj().get_order() + ", "; } } str = str.substr(0, str.length - 2); return str; } /** * This function builds the Where clause from the history object. * */ function query_where() { var i; var and = "("; var or = "("; for (i = 0; i < history_array.length;i++) { if (history_array[i].get_type() == "Where") { if (history_array[i].get_and_or() === 0) { and += "( `" + history_array[i].get_column_name() + "` " + history_array[i].get_obj().getrelation_operator() + " " + history_array[i].get_obj().getquery() + ")"; and += " AND "; } else { or += "( `" + history_array[i].get_column_name() + "` " + history_array[i].get_obj().getrelation_operator() + " " + history_array[i].get_obj().getquery() + ")"; or += " OR "; } } } if (or != "(") { or = or.substring(0, (or.length - 4)) + ")"; } else { or = ""; } if (and != "(") { and = and.substring(0, (and.length - 5)) + ")"; } else { and = ""; } if (or !== "") { and = and + " OR " + or + " )"; } return and; } function check_aggregate(id_this) { var i; for (i = 0; i < history_array.length; i++) { var temp = '`' + history_array[i].get_tab() + '`.`' + history_array[i].get_column_name() + '`'; if (temp == id_this && history_array[i].get_type() == "Aggregate") { return history_array[i].get_obj().get_operator() + '(' + id_this + ')'; } } return ""; } function check_rename(id_this) { var i; for (i = 0; i < history_array.length; i++) { var temp = '`' + history_array[i].get_tab() + '`.`' + history_array[i].get_column_name() + '`'; if (temp == id_this && history_array[i].get_type() == "Rename") { return " AS `" + history_array[i].get_obj().getrename_to() + "`"; } } return ""; } /** * This function builds from clause of query * makes automatic joins. * * */ function query_from() { var i; var tab_left = []; var tab_used = []; var t_tab_used = []; var t_tab_left = []; var temp; var query = ""; var quer = ""; var parts = []; var t_array = []; t_array = from_array; var K = 0; var k; var key; var key2; var key3; var parts1; // the constraints that have been used in the LEFT JOIN var constraints_added = []; for (i = 0; i < history_array.length; i++) { from_array.push(history_array[i].get_tab()); } from_array = unique(from_array); tab_left = from_array; temp = tab_left.shift(); quer = '`' + temp + '`'; tab_used.push(temp); // if master table (key2) matches with tab used get all keys and check if tab_left matches // after this check if master table (key2) matches with tab left then check if any foreign matches with master . for (i = 0; i < 2; i++) { for (K in contr) { for (key in contr[K]) {// contr name for (key2 in contr[K][key]) {// table name parts = key2.split("."); if (found(tab_used, parts[1]) > 0) { for (key3 in contr[K][key][key2]) { parts1 = contr[K][key][key2][key3][0].split("."); if (found(tab_left, parts1[1]) > 0) { if (found(constraints_added, key) > 0) { query += ' AND ' + '`' + parts[1] + '`.`' + key3 + '` = '; query += '`' + parts1[1] + '`.`' + contr[K][key][key2][key3][1] + '` '; } else { query += "\n" + 'LEFT JOIN '; query += '`' + parts[1] + '` ON '; query += '`' + parts1[1] + '`.`' + contr[K][key][key2][key3][1] + '` = '; query += '`' + parts[1] + '`.`' + key3 + '` '; constraints_added.push(key); } t_tab_left.push(parts[1]); } } } } } } K = 0; t_tab_left = unique(t_tab_left); tab_used = add_array(t_tab_left, tab_used); tab_left = remove_array(t_tab_left, tab_left); t_tab_left = []; for (K in contr) { for (key in contr[K]) { for (key2 in contr[K][key]) {// table name parts = key2.split("."); if (found(tab_left, parts[1]) > 0) { for (key3 in contr[K][key][key2]) { parts1 = contr[K][key][key2][key3][0].split("."); if (found(tab_used, parts1[1]) > 0) { if (found(constraints_added, key) > 0) { query += ' AND ' + '`' + parts[1] + '`.`' + key3 + '` = '; query += '`' + parts1[1] + '`.`' + contr[K][key][key2][key3][1] + '` '; } else { query += "\n" + 'LEFT JOIN '; query += '`' + parts[1] + '` ON '; query += '`' + parts1[1] + '`.`' + contr[K][key][key2][key3][1] + '` = '; query += '`' + parts[1] + '`.`' + key3 + '` '; constraints_added.push(key); } t_tab_left.push(parts[1]); } } } } } } t_tab_left = unique(t_tab_left); tab_used = add_array(t_tab_left, tab_used); tab_left = remove_array(t_tab_left, tab_left); t_tab_left = []; } for (k in tab_left) { quer += " , `" + tab_left[k] + "`"; } query = quer + query; from_array = t_array; return query; } /** * This function is the main function for query building. * uses history object details for this. * * @ uses query_where() * @ uses query_groupby() * @ uses query_having() * @ uses query_orderby() * * @param formtitle title for the form * @param fadin */ function build_query(formtitle, fadin) { var q_select = "SELECT "; var temp; if (select_field.length > 0) { for (var i = 0; i < select_field.length; i++) { temp = check_aggregate(select_field[i]); if (temp !== "") { q_select += temp; temp = check_rename(select_field[i]); q_select += temp + ", "; } else { temp = check_rename(select_field[i]); q_select += select_field[i] + temp + ", "; } } q_select = q_select.substring(0, q_select.length - 2); } else { q_select += "* "; } q_select += "\nFROM " + query_from(); var q_where = query_where(); if (q_where !== "") { q_select += "\nWHERE " + q_where; } var q_groupby = query_groupby(); if (q_groupby !== "") { q_select += "\nGROUP BY " + q_groupby; } var q_having = query_having(); if (q_having !== "") { q_select += "\nHAVING " + q_having; } var q_orderby = query_orderby(); if (q_orderby !== "") { q_select += "\nORDER BY " + q_orderby; } /** * @var button_options Object containing options * for jQueryUI dialog buttons */ var button_options = {}; button_options[PMA_messages.strClose] = function () { $(this).dialog("close"); }; button_options[PMA_messages.strSubmit] = function () { if (vqb_editor) { var $elm = $ajaxDialog.find('textarea'); vqb_editor.save(); $elm.val(vqb_editor.getValue()); } $('#vqb_form').submit(); }; var $ajaxDialog = $('#box').dialog({ appendTo: '#page_content', width: 500, buttons: button_options, modal: true, title: 'SELECT' }); // Attach syntax highlighted editor to query dialog /** * @var $elm jQuery object containing the reference * to the query textarea. */ var $elm = $ajaxDialog.find('textarea'); if (! vqb_editor) { vqb_editor = PMA_getSQLEditor($elm); } if (vqb_editor) { vqb_editor.setValue(q_select); vqb_editor.focus(); } else { $elm.val(q_select); $elm.focus(); } } AJAX.registerTeardown('pmd/history.js', function () { vqb_editor = null; history_array = []; select_field = []; $("#ok_edit_rename").unbind('click'); $("#ok_edit_having").unbind('click'); $("#ok_edit_Aggr").unbind('click'); $("#ok_edit_where").unbind('click'); }); AJAX.registerOnload('pmd/history.js', function () { $("#ok_edit_rename").click(function() { edit('Rename'); }); $("#ok_edit_having").click(function() { edit('Having'); }); $("#ok_edit_Aggr").click(function() { edit('Aggregate'); }); $("#ok_edit_where").click(function() { edit('Where'); }); $('#ab').accordion({collapsible : true, active : 'none'}); });