[Phpmyadmin-git] [SCM] phpMyAdmin branch, master, updated. RELEASE_3_3_8-10972-g3b74d9b

Marc Delisle lem9 at users.sourceforge.net
Fri Nov 19 19:08:54 CET 2010


The branch, master has been updated
       via  3b74d9ba019f6e1904699d5355e5e9c597896dcb (commit)
       via  d09e630af2fff492d6b75fea40da37547eeba63d (commit)
       via  9dd406c0455089b6a5b285ec73e4f2d675216376 (commit)
       via  e3bb1f875969280e9a2bdf991b21fc808b8eaa55 (commit)
       via  eb83a062bd91c9ed206f27017f49e5042748c310 (commit)
       via  369b5d00f8474d2e82e371e565edf1891ca8bfc5 (commit)
       via  e6bb88117f61466b24ac79b36ad1f27da1168bd1 (commit)
       via  638cee4decf831773cefabe50edd750da430e371 (commit)
       via  5dce476c4ce706790143852220591c4a9655eef1 (commit)
       via  5fce10df15de80ddf8db3ed68911401dc03c142f (commit)
       via  0d58ceb962650535343d4774d3c7f0e470bfd1c1 (commit)
       via  64f1f5a0ea81c363f1a0d4454984ef3fb21bc7cf (commit)
       via  10daf4da1b2a5354d7433cd8fc6f44fd6104c8dc (commit)
       via  55c310a24d3afa14dee4bf4c599843e31ed3f5c4 (commit)
       via  2c03eb298655b264b8f6acb3341030a70ee77a91 (commit)
       via  1cf156c91361e0f6b0f2767c7f35b0b1ae42e469 (commit)
       via  de28609ff984b3e3314f749893729bf88fddaf97 (commit)
       via  80cca8f6b32da2bd3c38e48d12aedf37218b285e (commit)
       via  8a672bad12d08013ba3242ba457e790a49bbfe00 (commit)
       via  7e37b2cdb37bcc1c64ef726986e6e3efc8b25145 (commit)
       via  f3d9b75c3503d87aff57d02feef7736bbbca98de (commit)
       via  bc910761d6cd48a40c91bb8af38ae9402ad18c63 (commit)
       via  2c80a5023bb8d7b21e5f2f955e5a70ae6119deb4 (commit)
       via  ca3a49dfcff833168de8584cdd659ca6cc01b5d0 (commit)
       via  dea405cfc3379c8e8e91e4b2446c63fdee16c8c0 (commit)
       via  12af64757baf59b9b00c4895cc3a9dc7902a567b (commit)
       via  58a2724c315f49f34ce503fc168b2a594e256a14 (commit)
       via  d8af30ca5c2fc0e726eaee986757db9bb79f474f (commit)
       via  701b93f3520d39cbca9a0be09eea06619fe2b0d1 (commit)
       via  c3eb6f389bfb84eebe6d2bfe27c45091af31eefd (commit)
       via  d14a5a8dc0cef4bfccb9065b1a435bb4e23b981c (commit)
      from  20e460fc50adeaa3da3da28b54b2361c577f11c6 (commit)


- Log -----------------------------------------------------------------
commit 3b74d9ba019f6e1904699d5355e5e9c597896dcb
Author: Marc Delisle <marc at infomarc.info>
Date:   Fri Nov 19 13:07:49 2010 -0500

    credits

commit d09e630af2fff492d6b75fea40da37547eeba63d
Author: Marc Delisle <marc at infomarc.info>
Date:   Fri Nov 19 13:02:41 2010 -0500

    improve message and make it translatable

commit 9dd406c0455089b6a5b285ec73e4f2d675216376
Author: Marc Delisle <marc at infomarc.info>
Date:   Fri Nov 19 12:52:10 2010 -0500

    capitalize keywords; make other strings translatable

commit e3bb1f875969280e9a2bdf991b21fc808b8eaa55
Author: Marc Delisle <marc at infomarc.info>
Date:   Fri Nov 19 12:21:43 2010 -0500

    wrong target to execute the query; missing parameters

commit eb83a062bd91c9ed206f27017f49e5042748c310
Merge: 20e460fc50adeaa3da3da28b54b2361c577f11c6 369b5d00f8474d2e82e371e565edf1891ca8bfc5
Author: Marc Delisle <marc at infomarc.info>
Date:   Fri Nov 19 12:17:33 2010 -0500

    Merge remote branch 'ankitg/master'

commit 369b5d00f8474d2e82e371e565edf1891ca8bfc5
Author: ankitg <ankitatbits at gmail.com>
Date:   Tue Aug 17 00:23:57 2010 +0530

    minor bugsfixed documentation added

commit e6bb88117f61466b24ac79b36ad1f27da1168bd1
Author: ankitg <ankitatbits at gmail.com>
Date:   Thu Aug 12 05:20:44 2010 +0530

    from and having clause added with auto left joins

commit 638cee4decf831773cefabe50edd750da430e371
Author: ankitg <ankitatbits at gmail.com>
Date:   Wed Jul 28 12:00:46 2010 +0530

    where orderby groupby clauses

commit 5dce476c4ce706790143852220591c4a9655eef1
Author: ankitg <ankitatbits at gmail.com>
Date:   Thu Jul 15 01:08:19 2010 +0530

    bugs fixed

commit 5fce10df15de80ddf8db3ed68911401dc03c142f
Author: ankitg <ankitatbits at gmail.com>
Date:   Wed Jul 14 04:16:25 2010 +0530

    query window

commit 0d58ceb962650535343d4774d3c7f0e470bfd1c1
Author: ankitg <ankitatbits at gmail.com>
Date:   Mon Jul 12 08:25:46 2010 +0530

    Select part of Query builder complete with rename and aggregate operators

commit 64f1f5a0ea81c363f1a0d4454984ef3fb21bc7cf
Author: ankitg <ankitatbits at gmail.com>
Date:   Fri Jul 9 03:33:14 2010 +0530

    store selected columns info

commit 10daf4da1b2a5354d7433cd8fc6f44fd6104c8dc
Author: ankitg <ankitatbits at gmail.com>
Date:   Wed Jul 7 00:31:53 2010 +0530

    some changes plus comments added

commit 55c310a24d3afa14dee4bf4c599843e31ed3f5c4
Merge: 1cf156c91361e0f6b0f2767c7f35b0b1ae42e469 2c03eb298655b264b8f6acb3341030a70ee77a91
Author: ankitg <ankitatbits at gmail.com>
Date:   Fri Jul 2 12:11:27 2010 +0530

    Merge branch 'visualbuilder'

commit 2c03eb298655b264b8f6acb3341030a70ee77a91
Author: ankitg <ankitatbits at gmail.com>
Date:   Fri Jul 2 12:10:56 2010 +0530

    new features in history tab

commit 1cf156c91361e0f6b0f2767c7f35b0b1ae42e469
Merge: 80cca8f6b32da2bd3c38e48d12aedf37218b285e de28609ff984b3e3314f749893729bf88fddaf97
Author: ankitg <ankitatbits at gmail.com>
Date:   Sat Jun 26 16:42:59 2010 +0530

    Merge branch 'visualbuilder'

commit de28609ff984b3e3314f749893729bf88fddaf97
Author: ankitg <ankitatbits at gmail.com>
Date:   Sat Jun 26 16:42:29 2010 +0530

    history tab changes

commit 80cca8f6b32da2bd3c38e48d12aedf37218b285e
Merge: 7e37b2cdb37bcc1c64ef726986e6e3efc8b25145 8a672bad12d08013ba3242ba457e790a49bbfe00
Author: ankitg <ankitatbits at gmail.com>
Date:   Fri Jun 25 09:46:33 2010 +0530

    Merge branch 'visualbuilder'

commit 8a672bad12d08013ba3242ba457e790a49bbfe00
Author: ankitg <ankitatbits at gmail.com>
Date:   Fri Jun 25 09:46:08 2010 +0530

    history tab few changes

commit 7e37b2cdb37bcc1c64ef726986e6e3efc8b25145
Merge: ca3a49dfcff833168de8584cdd659ca6cc01b5d0 f3d9b75c3503d87aff57d02feef7736bbbca98de
Author: ankitg <ankitatbits at gmail.com>
Date:   Fri Jun 25 09:33:40 2010 +0530

    Merge branch 'visualbuilder'

commit f3d9b75c3503d87aff57d02feef7736bbbca98de
Author: ankitg <ankitatbits at gmail.com>
Date:   Wed Jun 23 11:39:52 2010 +0530

    initalized h_tabs

commit bc910761d6cd48a40c91bb8af38ae9402ad18c63
Author: ankitg <ankitatbits at gmail.com>
Date:   Wed Jun 23 11:19:23 2010 +0530

    .js file added for history

commit 2c80a5023bb8d7b21e5f2f955e5a70ae6119deb4
Author: ankitg <ankitatbits at gmail.com>
Date:   Wed Jun 23 11:15:16 2010 +0530

    added new images for history

commit ca3a49dfcff833168de8584cdd659ca6cc01b5d0
Author: ankitg <ankitatbits at gmail.com>
Date:   Wed Jun 23 11:01:48 2010 +0530

    .js file for history tab operatoins

commit dea405cfc3379c8e8e91e4b2446c63fdee16c8c0
Author: ankitg <ankitatbits at gmail.com>
Date:   Wed Jun 23 10:49:15 2010 +0530

    CSS for history tab

commit 12af64757baf59b9b00c4895cc3a9dc7902a567b
Author: ankitg <ankitatbits at gmail.com>
Date:   Wed Jun 9 22:53:13 2010 +0530

    options added in designer

commit 58a2724c315f49f34ce503fc168b2a594e256a14
Author: ankitg <ankitatbits at gmail.com>
Date:   Wed Jun 9 22:49:29 2010 +0530

    link in query tab

commit d8af30ca5c2fc0e726eaee986757db9bb79f474f
Merge: 701b93f3520d39cbca9a0be09eea06619fe2b0d1 b5b75a4bf19214431b528dbc52ec7510db901cf6
Author: ankitg <ankitatbits at gmail.com>
Date:   Tue Jun 8 12:43:28 2010 +0530

    Merge git://repo.or.cz/phpmyadmin

commit 701b93f3520d39cbca9a0be09eea06619fe2b0d1
Merge: c3eb6f389bfb84eebe6d2bfe27c45091af31eefd 7a9dd2bcd25e68253e327d93fce65d1735c016d4
Author: ankitg <ankitatbits at gmail.com>
Date:   Sat Jun 5 13:11:18 2010 +0530

    Merge git://repo.or.cz/phpmyadmin

commit c3eb6f389bfb84eebe6d2bfe27c45091af31eefd
Merge: 667dc8417702c4f13783e4e51c18f80c1afe5b32 d14a5a8dc0cef4bfccb9065b1a435bb4e23b981c
Author: ankitg <ankitatbits at gmail.com>
Date:   Tue May 25 22:26:37 2010 +0530

    Merge branch 'master' of ssh://repo.or.cz/srv/git/phpmyadmin/ankitg

commit d14a5a8dc0cef4bfccb9065b1a435bb4e23b981c
Author: ankitg <ankitatbits at gmail.com>
Date:   Sat May 22 15:30:59 2010 +0530

    first commit

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |    7 +-
 Documentation.html                                 |    6 +
 db_qbe.php                                         |   23 +
 js/messages.php                                    |    3 +
 .../img/b_chart.png => pmd/images/and_icon.png     |  Bin 3118 -> 3539 bytes
 pmd/images/or_icon.png                             |  Bin 0 -> 50345 bytes
 pmd/images/query_builder.png                       |  Bin 0 -> 49112 bytes
 pmd/scripts/history.js                             |  765 ++++++++++++++++++++
 pmd/scripts/move.js                                |  182 +++++-
 pmd/styles/default/images/minus.png                |  Bin 0 -> 48703 bytes
 pmd/styles/default/images/plus.png                 |  Bin 0 -> 48663 bytes
 pmd/styles/default/style1.css                      |  203 ++++++
 pmd_common.php                                     |    6 +-
 pmd_general.php                                    |  450 +++++++++++-
 14 files changed, 1630 insertions(+), 15 deletions(-)
 copy themes/original/img/b_chart.png => pmd/images/and_icon.png (75%)
 create mode 100644 pmd/images/or_icon.png
 create mode 100644 pmd/images/query_builder.png
 create mode 100644 pmd/scripts/history.js
 create mode 100644 pmd/styles/default/images/minus.png
 create mode 100644 pmd/styles/default/images/plus.png
 create mode 100644 readme

diff --git a/ChangeLog b/ChangeLog
index 73375bf..0a10389 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -113,12 +113,13 @@
 - bug #3056610 [interface] Removed modification options for information_schema 
 + patch #3055886 [config] Add Left frame table filter visibility config option, thanks to eesau
 - [core] Force generating of new session on login
-- rfe #1105678 [interface] Drop page-break-before as it is useless for smaller
++ rfe #1105678 [interface] Drop page-break-before as it is useless for smaller
   tables.
-- rfe #2956556 [interface] Allow to wrap enum values.
++ rfe #2956556 [interface] Allow to wrap enum values.
 - bug #1669459 [interface] Do not automatically mark PDF schema rows to delete
 - bug #3087682 [interface] Do not apply LeftFrameDBSeparator on first character.
-- rfe #3111455 [interface] Column highlighting and marking in table view
++ rfe #3111455 [interface] Column highlighting and marking in table view
++ Visual query builder
 
 3.3.9.0 (not yet released)
 - bug [doc] Fix references to MySQL doc
diff --git a/Documentation.html b/Documentation.html
index e96044b..f6235e7 100644
--- a/Documentation.html
+++ b/Documentation.html
@@ -4834,6 +4834,12 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
   <li>BLOBstreaming support with PBMS PHP extension</li>
 </ul></li>
 
+<li>Ankit Gupta (Google Summer of Code 2010)
+<ul>
+  <li>Visual query builder</li>
+</ul></li>
+
+
 </ul>
 
 <p>
diff --git a/db_qbe.php b/db_qbe.php
index a8aeb42..daaba0d 100644
--- a/db_qbe.php
+++ b/db_qbe.php
@@ -163,6 +163,29 @@ function showColumnSelectCell($columns, $column_number, $selected = '')
 }
 
 ?>
+<?php if (!empty($tab_designer['link'])) {
+        $tab_designer['link'] = htmlentities($tab_designer['link']);
+        $tab_designer['link'] = $tab_designer['link'] . PMA_generate_common_url($url_params);
+        if (! empty($tab_designer['args'])) {
+            foreach ($tab_designer['args'] as $param => $value) {
+                $tab_designer['link'] .= PMA_get_arg_separator('html') . urlencode($param) . '='
+                    . urlencode($value);
+            }
+        }
+    }
+    if (! empty($tab['fragment'])) {
+        $tab['link'] .= $tab['fragment'];
+    }
+?>
+<div class="notice">
+	<span id="footnote_1">
+    Switch to
+	<form action="<?php echo $tab_designer['link'] ?>" method="post">
+		<input type="submit"  style="background-color:#FFD; border-width:0; color:#00F;   
+    	font-size: 15px;cursor: pointer" name="query" onmouseover="this.style.color='#F00';"
+    	value="visual builder" onmouseout="this.style.color='#00F'"/></span>
+	</form>
+</div>
 <form action="db_qbe.php" method="post">
 <fieldset>
 <table class="data" style="width: 100%;">
diff --git a/js/messages.php b/js/messages.php
index c034d74..761f810 100644
--- a/js/messages.php
+++ b/js/messages.php
@@ -94,6 +94,9 @@ $js_messages['strSelectForeignKey'] = __('Select Foreign Key');
 $js_messages['strPleaseSelectPrimaryOrUniqueKey'] = __('Please select the primary key or a unique key');
 $js_messages['strChangeDisplay'] = __('Choose column to display');
 
+/* Visual query builder (pmd/scripts/move.js) */
+$js_messages['strAddOption'] = __('Add an option for column ');
+
 /* password generation */
 $js_messages['strGeneratePassword'] = __('Generate password');
 $js_messages['strGenerate'] = __('Generate');
diff --git a/themes/original/img/b_chart.png b/pmd/images/and_icon.png
similarity index 75%
copy from themes/original/img/b_chart.png
copy to pmd/images/and_icon.png
index 388ec30..bb51726 100644
Binary files a/themes/original/img/b_chart.png and b/pmd/images/and_icon.png differ
diff --git a/pmd/images/or_icon.png b/pmd/images/or_icon.png
new file mode 100644
index 0000000..fa76f3b
Binary files /dev/null and b/pmd/images/or_icon.png differ
diff --git a/pmd/images/query_builder.png b/pmd/images/query_builder.png
new file mode 100644
index 0000000..6d0f554
Binary files /dev/null and b/pmd/images/query_builder.png differ
diff --git a/pmd/scripts/history.js b/pmd/scripts/history.js
new file mode 100644
index 0000000..ace5bae
--- /dev/null
+++ b/pmd/scripts/history.js
@@ -0,0 +1,765 @@
+/* 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;
+
+/**
+ * function for panel, hides and shows toggle_container <div>,which is for history elements uses {@link JQuery}.
+ *
+ * @param	index	has value 1 or 0,decides wheter to hide toggle_container on load. 
+**/
+
+function panel(index) {
+    if (!index) {
+        $(".toggle_container").hide(); 
+    }
+    $("h2.tiger").click(function(){
+    $(this).toggleClass("active").next().slideToggle("slow");
+    });
+}
+
+/**
+ * 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[]
+ *
+ * @uses	and_or()
+ * @uses	history_edit()
+ * @uses	history_delete()
+ * 	
+ * @param {int}  init 	starting index of unsorted array   
+ * @param {int}	final   last index of unsorted array
+ *
+**/
+
+function display(init,final) {
+    var str,i,j,k,sto;
+    // 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 < final;i++) {
+        sto = history_array[i];
+        var 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 ( var i=0; i < history_array.length; i++){
+        var temp = history_array[i].get_tab(); //+ '.' + history_array[i].get_obj_no(); for Self JOIN
+        str += '<h2 class="tiger"><a href="#">' + temp + '</a></h2>';  				
+        str += '<div class="toggle_container">\n';
+        while((history_array[i].get_tab()) == temp) { //+ '.' + history_array[i].get_obj_no()) == temp) {
+            str +='<div class="block"> <table width ="250">';
+            str += '<thead><tr><td>';
+            if(history_array[i].get_and_or()){
+                str +='<img src="pmd/images/or_icon.png" onclick="and_or('+i+')" title="OR"/></td>';
+            }
+            else {
+               str +='<img src="pmd/images/and_icon.png" onclick="and_or('+i+')" title="AND"/></td>';
+            }
+            str +='<td style="padding-left: 5px;" align="right"><img src="./themes/original/img/b_sbrowse.png" title="column name"/></td><td width="175" style="padding-left:            5px">' + history_array[i].get_column_name();
+            if (history_array[i].get_type() == "GroupBy" || history_array[i].get_type() == "OrderBy") {
+                str += '</td><td align="center"><img src="themes/original/img/b_info.png" title="'+detail(i)+'"/><td title="' + detail(i) +'">' + history_array[i].get_type()                + '</td></td><td onmouseover="this.className=\'history_table\';" onmouseout="this.className=\'history_table2\'" onclick=history_delete('+ i +')><img                src="themes/original/img/b_drop.png" title="Delete"></td></tr></thead>';
+           }
+           else {
+               str += '</td><td align="center"><img src="themes/original/img/b_info.png" title="'+detail(i)+'"/></td><td title="' + detail(i) +'">' + history_array[i].               get_type() + '</td><td <td onmouseover="this.className=\'history_table\';" onmouseout="this.className=\'history_table2\'" onclick=history_edit('+ i +')><img               src="themes/original/img/b_edit.png" title="Edit"/></td><td onmouseover="this.className=\'history_table\';" onmouseout="this.className=\'history_table2\'"               onclick=history_delete('+ i +')><img src="themes/original/img/b_drop.png" title="Delete"></td></tr></thead>'; 
+           }
+           i++;
+           if(i >= history_array.length) {
+               break;
+           }
+           str += '</table></div><br/>';
+        }
+        i--;
+        str += '</div><br/>';
+    }
+    return str;
+}
+
+/**
+ * To change And/Or relation in history tab 
+ * 
+ * @uses	panel()
+ *
+ * @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);
+    panel(1);
+}
+
+/**
+ * To display details of obects(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() ;
+    }
+    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;
+}
+
+/**
+ * Deletes entry in history_array
+ *
+ * @uses	panel()
+ * @uses	display()
+ * @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);
+    panel(1);
+}
+
+/**
+ * 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 = '9';
+        document.getElementById('query_where').style.visibility = 'visible';
+    }
+    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 = '9';
+        document.getElementById('query_having').style.visibility = 'visible';
+    }
+    if (type == "Rename") {
+        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 = '9';
+        document.getElementById('query_rename_to').style.visibility = 'visible';
+    }
+    if (type == "Aggregate") {
+        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 = '9';
+        document.getElementById('query_Aggregate').style.visibility = 'visible';
+    }
+}
+
+/**
+ * Make changes in history_array when Edit button is clicked
+ * checks for the type of object and then sets the new value
+ * @uses	panel()
+ * @uses	display()
+ *
+ * @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);
+    panel(1);
+}
+
+/**
+ * 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(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);
+};
+
+
+/**
+ * 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 
+ *
+**/
+
+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 arraName array from which duplicate elem are to be removed.
+ * @return unique array
+ */
+
+function unique(arrayName) {
+    var newArray=new Array();
+    label:for(var i=0; i<arrayName.length;i++ )
+    {  
+        for(var j=0; j<newArray.length;j++ )
+        {
+            if(newArray[j]==arrayName[i]) 
+                continue label;
+        }
+        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 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;
+    for(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 - 1);
+    q_select += " FROM " + query_from();
+    if(query_where() != "") {
+        q_select +="\n WHERE";
+		q_select += query_where();
+    }
+    if(query_groupby() != "") { q_select += "\nGROUP BY " + query_groupby(); }
+    if(query_having() != "") { q_select += "\nHAVING " + query_having(); }
+    if(query_orderby() != "") { q_select += "\nORDER BY " + query_orderby(); }
+    var box = document.getElementById('box'); 
+    document.getElementById('filter').style.display='block';
+    var btitle = document.getElementById('boxtitle');
+    btitle.innerHTML = 'SELECT';//formtitle;
+    if(fadin){
+        gradient("box", 0);
+        fadein("box");
+    }
+    else{ 	
+        box.style.display='block';
+    }  	
+    document.getElementById('textSqlquery').innerHTML = q_select;
+}
+ /**
+  * This function builds from clause of query
+  * makes automatic joins.
+  * 
+  * @uses unique
+  * @uses add_array
+  * @uses remove_array
+  *
+  */
+ 
+
+function query_from() {
+    var i =0;
+    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;
+    for(i; 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 foriegn 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) {
+                                query += "\n" + 'LEFT JOIN ';
+                                query += '`' + parts1[0] + '`.`' + parts1[1] + '` ON ' ;
+                                query += '`' + parts[1] +'`.`' + key3 + '` = ';
+                                query += '`' + parts1[1] + '`.`' + contr[K][key][key2][key3][1] + '` ';
+                                t_tab_left.push(parts1[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) {
+                                   query += "\n" + 'LEFT JOIN ';
+                                   query += '`' + parts[0] + '`.`' + parts[1] + '` ON ' ;
+                                   query += '`' + parts1[1] + '`.`' + contr[K][key][key2][key3][1] + '` = ';
+                                   query += '`' + parts[1] + '`.`' + key3 + '` ';
+                                   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;
+}
+				/*		document.write(key3+";"); //master_field
+							document.write(contr[K][key][key2][key3][0]+";"); // foreign_table
+							document.write(contr[K][key][key2][key3][1]+";"); //forieign_feild */
+/**
+ * This function concatenates two array
+ *
+ * @params add array elements of which are pushed in
+ * @params arr array in which elemnets are added
+ */
+function add_array(add,arr){
+    for( var i=0; i<add.length; i++){
+        arr.push(add[i]);
+    }
+    return arr;
+}
+ 
+/* This fucntion 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 = 0;
+    var str = "";
+    for(i; 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 -1);
+    return str;
+}
+
+/**
+ * This function builds the Having clause from the history object.
+ *
+ */
+
+function query_having() {
+    var i = 0;
+    var and = "(";
+    for(i; 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 = 0;
+    var str = "" ;
+    for(i; i < history_array.length;i++) {
+        if(history_array[i].get_type() == "OrderBy") { str += history_array[i].get_column_name() + " , "; }
+    }
+    str = str.substr(0,str.length -1);
+    return str;
+}
+
+
+/**
+ * This function builds the Where clause from the history object.
+ *
+ */
+
+function query_where(){
+    var i = 0;
+    var and = "(";
+    var or = "(";
+    for(i; 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 = 0;
+    for(i;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 = 0;
+    for (i;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 "";
+}
+
+function gradient(id, level)
+{
+    var box = document.getElementById(id);
+    box.style.opacity = level;
+    box.style.MozOpacity = level;
+    box.style.KhtmlOpacity = level;
+    box.style.filter = "alpha(opacity=" + level * 100 + ")";
+    box.style.display="block";
+    return;
+}
+
+
+function fadein(id) 
+{
+    var level = 0;
+    while(level <= 1){
+        setTimeout( "gradient('" + id + "'," + level + ")", (level* 1000) + 10);
+        level += 0.01;
+    }
+}
+
+function closebox()
+{
+    document.getElementById('box').style.display='none';
+    document.getElementById('filter').style.display='none';
+}
diff --git a/pmd/scripts/move.js b/pmd/scripts/move.js
index 93180cb..b2f99ee 100644
--- a/pmd/scripts/move.js
+++ b/pmd/scripts/move.js
@@ -32,6 +32,8 @@ var timeoutID;
 var layer_menu_cur_click = 0;
 var step = 10;
 var old_class;
+var from_array = [];
+var downer;
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
@@ -620,7 +622,6 @@ function Small_tab(t, re_load)
     var id      = document.getElementById('id_tbody_' + t);
     var id_this = document.getElementById('id_hide_tbody_' + t);
     var id_t    = document.getElementById(t);
-
     id_t.style.width = id_t.offsetWidth + 'px';
     if (id_this.innerHTML == "v") {
         //---CROSS
@@ -646,7 +647,6 @@ function Select_tab(t)
     //----------
     var id_t = document.getElementById(t);
     window.scrollTo(parseInt(id_t.style.left) - 300, parseInt(id_t.style.top) - 300);
-
     setTimeout(function(){document.getElementById('id_zag_' + t).className = 'tab_zag';}, 800);
 }
 //------------------------------------------------------------------------------
@@ -964,3 +964,181 @@ function getColorByTarget( target )
 
   return color;
 }
+
+function Click_option(id_this,column_name,table_name) 
+{
+    var left = Glob_X - (document.getElementById(id_this).offsetWidth>>1);
+    document.getElementById(id_this).style.left = left + 'px';
+    // var top = Glob_Y - document.getElementById(id_this).offsetHeight - 10;
+    document.getElementById(id_this).style.top  = (screen.height / 4) + 'px';
+    document.getElementById(id_this).style.visibility = "visible";
+    document.getElementById('option_col_name').innerHTML = '<strong>' + PMA_messages['strAddOption'] +'"' +column_name+ '"</strong>';
+    col_name = column_name;
+    tab_name = table_name;
+}
+
+function Close_option()
+{
+    document.getElementById('pmd_optionse').style.visibility = "hidden";
+}
+
+function Select_all(id_this,owner)
+{
+    var parent= document.form1;
+    downer =owner;
+    var i;
+    var tab = [];
+    for(i = 0; i < parent.elements.length; i++) {
+        if (parent.elements[i].type == "checkbox" && parent.elements[i].id.substring(0,(9 + id_this.length)) == 'select_' + id_this + '._') {
+            if(document.getElementById('select_all_' + id_this).checked == true) {
+                parent.elements[i].checked = true;
+                parent.elements[i].disabled = true;
+                var temp = '`' + id_this.substring(owner.length +1) + '`.*';
+           }	
+           else {
+               parent.elements[i].checked = false;
+               parent.elements[i].disabled = false;	
+           }
+        }
+    }
+    if(document.getElementById('select_all_' + id_this).checked == true) {
+        select_field.push('`' + id_this.substring(owner.length +1) + '`.*');
+        tab = id_this.split(".");
+        from_array.push(tab[1]);
+    }
+    else {
+        for (i =0; i < select_field.length; i++) {
+            if (select_field[i] == ('`' + id_this.substring(owner.length +1) + '`.*')) {
+                select_field.splice(i,1);
+            }
+        }
+        for(k =0 ;k < from_array.length;k++){
+            if(from_array[k] == id_this){ 
+                from_array.splice(k,1); 
+                break;
+            }
+        }
+    }
+    Re_load();
+}
+
+function Table_onover(id_this,val,buil)
+{
+    if(!val) {
+        document.getElementById("id_zag_" + id_this).className="tab_zag_2";
+        if(buil) {
+            document.getElementById("id_zag_" + id_this + "_2").className="tab_zag_2";
+        }
+    }
+    else {
+        document.getElementById("id_zag_" + id_this).className="tab_zag";
+        if(buil) {
+            document.getElementById("id_zag_" + id_this + "_2").className="tab_zag";
+        }
+    }
+}
+
+/* This function stores selected column information in select_field[]
+ * In case column is checked it add else it deletes
+ *
+ */
+function store_column(id_this,owner,col) {
+    var i = 0;
+    var k = 0;
+    if (document.getElementById('select_' + owner + '.' + id_this + '._' + col).checked == true) {
+        select_field.push('`' + id_this + '`.`' + col +'`');	
+        from_array.push(id_this);
+    }
+    else {
+        for(i; i < select_field.length ;i++) {
+            if (select_field[i] == ('`' + id_this + '`.`' + col +'`')) {
+                select_field.splice(i,1);
+                break;
+            }
+        }
+        for(k =0 ;k < from_array.length;k++){
+            if(from_array[k] == id_this){ 
+                from_array.splice(k,1); 
+			    break;
+            }
+        }
+     }
+}
+
+/**
+ * This function builds object and adds them to history_array
+ * first it does a few checks on each object, then makes an object(where,rename,groupby,aggregate,orderby)
+ * then a new history object is made and finally all these history objects are addded to history_array[]
+ * 
+ * @uses	where()
+ * @uses	history()
+ * @uses	aggregate()
+ * @uses	rename()
+ * @uses	panel()
+ * @uses	display()
+**/
+
+function add_object() {
+    var rel = document.getElementById('rel_opt');
+    var sum = 0;
+    var init = history_array.length;
+    if (rel.value != '--') {
+        if (document.getElementById('Query').value == "") {
+            document.getElementById('hint').innerHTML = "value/subQuery is empty" ;
+            document.getElementById('hint').style.visibility = "visible";
+            return;
+        }
+        var p = document.getElementById('Query');
+        var where_obj = new where(rel.value,p.value);//make where object
+        history_array.push(new history(col_name,where_obj,tab_name,h_tabs[downer + '.' + tab_name],"Where"));
+        sum = sum + 1;
+        rel.value = '--';
+        p.value = "";
+    }
+    if (document.getElementById('new_name').value !="") {
+        var rename_obj = new rename(document.getElementById('new_name').value);//make Rename object
+        history_array.push(new history(col_name,rename_obj,tab_name,h_tabs[downer + '.' + tab_name],"Rename"));
+        sum = sum + 1;
+        document.getElementById('new_name').value = "" ;
+    }
+	if (document.getElementById('operator').value != '---') {
+        var aggregate_obj = new aggregate(document.getElementById('operator').value) ;
+        history_array.push(new history(col_name,aggregate_obj,tab_name,h_tabs[downer + '.' + tab_name],"Aggregate"));
+        sum = sum + 1;
+        document.getElementById('operator').value = '---';
+		//make aggregate operator
+    }
+    if (document.getElementById('groupby').checked == true ) {
+        history_array.push(new history(col_name,'GroupBy',tab_name,h_tabs[downer + '.' +tab_name],"GroupBy"));
+        sum = sum + 1;
+        document.getElementById('groupby').checked = false;
+	//make groupby
+    }
+    if (document.getElementById('h_rel_opt').value != '--') {
+        if (document.getElementById('having').value == "") {
+            document.getElementById('hint').innerHTML = "value/subQuery is empty" ;
+            document.getElementById('hint').style.visibility = "visible";
+           return;
+        }
+        var p = document.getElementById('having');
+        var where_obj = new having(document.getElementById('h_rel_opt').value,p.value,document.getElementById('h_operator').value);//make where object
+        history_array.push(new history(col_name,where_obj,tab_name,h_tabs[downer + '.' + tab_name],"Having"));
+        sum = sum + 1;
+        document.getElementById('h_rel_opt').value = '--';
+        document.getElementById('h_operator').value = '---';
+        p.value = ""; //make having
+    }
+    if (document.getElementById('orderby').checked == true) {
+        history_array.push(new history(col_name,'OrderBy',tab_name,h_tabs[downer + '.' + tab_name],"OrderBy"));
+        sum = sum + 1;
+        document.getElementById('orderby').checked = false;
+		//make orderby
+    }
+    document.getElementById('hint').innerHTML = sum + "object created" ;
+    document.getElementById('hint').style.visibility = "visible";
+	//output sum new objects created
+    var existingDiv = document.getElementById('ab');
+    existingDiv.innerHTML = display(init,history_array.length);
+    Close_option();
+    panel(0);
+}
diff --git a/pmd/styles/default/images/minus.png b/pmd/styles/default/images/minus.png
new file mode 100644
index 0000000..cf72f39
Binary files /dev/null and b/pmd/styles/default/images/minus.png differ
diff --git a/pmd/styles/default/images/plus.png b/pmd/styles/default/images/plus.png
new file mode 100644
index 0000000..ebcd27d
Binary files /dev/null and b/pmd/styles/default/images/plus.png differ
diff --git a/pmd/styles/default/style1.css b/pmd/styles/default/style1.css
index 129c8d3..eb3d690 100644
--- a/pmd/styles/default/style1.css
+++ b/pmd/styles/default/style1.css
@@ -146,6 +146,23 @@ form {
     color: #888888;
 }
 
+.option_tab {
+	padding-left: 2px;
+	padding-right: 2px;
+	width: 5px;
+}
+
+.select_all {
+	vertical-align: top;
+	padding-left: 2px;
+	padding-right: 2px;
+	cursor: default;
+	width: 1px;
+	color: #000000;
+	background-image: url(images/Header.png);
+    background-repeat: repeat-x;
+}
+
 .small_tab {
     vertical-align: top;
     background-color: #0064ea;
@@ -371,9 +388,195 @@ a.M_butt:hover {
     width: 153px;
 }
 
+#pmd_optionse {
+    position: absolute;
+    left: 636px;
+    top: 85px;
+    z-index: 1000;
+    width: 153px;
+}
+
 #layer_menu_sizer {
     background-image: url(../../images/resize.png);
     cursor: nw-resize;
     width: 16px;
     height: 16px;
 }
+
+.panel {
+position: fixed;
+top: 50px;
+right: 0;
+display: none;
+background: #FFF;
+border:1px solid #F5F5F5;
+width: 350 px;
+height: auto;
+padding: 30px 170px 30px 30px;
+color:#FFF;
+z-index:99;
+}
+
+a.trigger{
+position: fixed;
+text-decoration: none;
+top: 60px; right: 0;
+font-size: 16px;
+font-family: verdana, helvetica, arial, sans-serif;
+color:#fff;
+padding: 10px 40px 10px 15px;
+font-weight: 700;
+background:#333333 url(images/plus.png) 85% 55% no-repeat;
+border:1px solid #444444;
+display: block;
+}
+
+a.trigger:hover{
+position: fixed;
+text-decoration: none;
+top: 60px; right: 0;
+font-size: 16px;
+font-family: verdana, helvetica, arial, sans-serif;
+color:#080808;
+padding: 10px 40px 10px 15px;
+font-weight: 700;
+background:#fff696 url(images/plus.png) 85% 55% no-repeat;
+border:1px solid #999;
+display: block;
+}
+
+a.active.trigger {
+background:#222222 url(images/minus.png) 85% 55% no-repeat;
+z-index:999;
+}
+
+a.active.trigger:hover {
+background:#fff696 url(images/minus.png) 85% 55% no-repeat;
+z-index:999;
+}
+
+h2.tiger{
+	background-repeat: repeat-x;
+    padding: 1px;
+    font-weight: bold;
+	font-size:14px;
+	padding: 50 20 50 20px;
+	margin: 0 0 5px 0;
+	width: 250px;
+	float: left;
+	color : #333;
+	text-align: center;
+}
+
+h2.tiger a {
+	background-image: url(images/Header.png);
+	text-align: center;
+	text-decoration: none;
+	color : #333;
+	display: block;
+}
+
+h2.tiger a:hover {  
+	color: #000; 
+	background-image: url(images/Header_Linked.png);
+}
+
+h2.active {
+	background-image: url(images/Header.png);
+    background-repeat: repeat-x;
+    padding: 1px;
+	background-position: left bottom;
+} 
+
+.toggle_container {
+	margin: 0 0 5px;
+	padding: 0;
+	border-top: 1px solid #d6d6d6;
+	background: #FFF ;
+	width: 250px;
+	overflow: hidden;
+	font-size: 1.2em;
+	clear: both;
+}
+
+.toggle_container .block {
+	background-color: #DBE4E8;
+	padding:40 15 40 15px; /*--Padding of Container--*/
+	border:1px solid #999;
+	color:#000;
+}
+
+.history_table {
+	text-align: center;
+	background-color: #9999CC;
+}
+
+.history_table2 {
+	text-align: center;
+	background-color: #DBE4E8;
+}
+
+#filter {
+	display: none;
+	position: absolute;
+	top: 0%;
+	left: 0%;
+	width: 100%;
+	height: 100%;
+	background-color: #CCA;
+	z-index:10;
+	opacity:0.5;
+	filter: alpha(opacity=50);
+}
+
+#box {
+	display: none;
+	position: absolute;
+	top: 20%;
+	left: 30%;
+	width: 500px;
+	height: 220px;
+	padding: 48px;
+	margin:0;
+	border: 1px solid black;
+	background-color: white;
+	z-index:101;
+	overflow: visible;
+}
+
+#boxtitle {
+	position:absolute;
+	float:center;
+	top:0;
+	left:0;
+	width:593px;
+	height:20px;
+	padding:0;
+	padding-top:4px;
+	left-padding:8px;
+	margin:0;
+	border-bottom:4px solid #3CF;
+	background-color: #D0DCE0; //#09c;
+	color:black;
+	font-weight:bold;
+	padding-left: 2px;
+	font-family:"Times New Roman", Times, serif;
+	font-size:16px;
+	text-align:left;
+}
+
+#tblfooter {
+	background-color: D3DCE3;
+	float: right;
+	padding-top:10px;
+	color: black;
+	font-weight: normal;
+}
+
+input.btn {
+	color:#333; 
+	font: bold 84%'trebuchet ms',helvetica,sans-serif; 
+	background-color: #D0DCE0; 
+}
+
+
diff --git a/pmd_common.php b/pmd_common.php
index 2cb2213..df8fdf2 100644
--- a/pmd_common.php
+++ b/pmd_common.php
@@ -237,11 +237,13 @@ function get_script_tabs()
     $script_tabs =
         '<script type="text/javascript">' . "\n" .
         '// <![CDATA[' . "\n" .
-        'var j_tabs = new Array();' . "\n";
+        'var j_tabs = new Array();' . "\n" .
+		'var h_tabs = new Array();' . "\n" ;
     for ($i = 0, $cnt = count($GLOBALS['PMD']['TABLE_NAME']); $i < $cnt; $i++) {
         $script_tabs .= "j_tabs['" . $GLOBALS['PMD_URL']['TABLE_NAME'][$i] . "'] = '"
             . (PMA_foreignkey_supported($GLOBALS['PMD']['TABLE_TYPE'][$i]) ? '1' : '0') . "';\n";
-    }
+    	$script_tabs .="h_tabs['" . $GLOBALS['PMD_URL']['TABLE_NAME'][$i] . "'] = 1;"."\n" ;
+	}
     $script_tabs .=
         '// ]]>' . "\n" .
         '</script>' . "\n";
diff --git a/pmd_general.php b/pmd_general.php
index 90ed0a8..eb2e445 100644
--- a/pmd_general.php
+++ b/pmd_general.php
@@ -27,6 +27,7 @@ $hidden           = "hidden";
     <link rel="shortcut icon" href="pmd/images/favicon.ico" type="image/x-icon" />
     <link rel="stylesheet" type="text/css" href="pmd/styles/<?php echo $GLOBALS['PMD']['STYLE'] ?>/style1.css" />
     <title>Designer</title>
+     <script src="./js/jquery/jquery-1.4.2.js" type="text/javascript"></script>
     <script type="text/javascript">
     // <![CDATA[
 <?php
@@ -34,8 +35,18 @@ echo '
     var server = "' . PMA_escapeJsString($server) . '";
     var db = "' . PMA_escapeJsString($db) . '";
     var token = "' . PMA_escapeJsString($token) . '";';
+	echo "\n";
+	if($_REQUEST['query']) {
+	echo '
+	 $(document).ready(function(){
+		$(".trigger").click(function(){
+		$(".panel").toggle("fast");
+		$(this).toggleClass("active");
+		return false;
+		});
+	});';
+	}
 ?>
-
     // ]]>
     </script>
 <?php
@@ -47,7 +58,8 @@ require_once './libraries/header_scripts.inc.php';
 ?>
     <script src="js/messages.php<?php echo PMA_generate_common_url($params); ?>" type="text/javascript"></script>
     <script src="pmd/scripts/ajax.js" type="text/javascript"></script>
-    <script src="pmd/scripts/move.js" type="text/javascript"></script>
+    <script src="pmd/scripts/history.js" type="text/javascript"></script> 
+	<script src="pmd/scripts/move.js" type="text/javascript"></script>
     <!--[if IE]>
     <script src="pmd/scripts/iecanvas.js" type="text/javascript"></script>
     <![endif]-->
@@ -98,11 +110,18 @@ echo $script_tabs . $script_contr . $script_display_field;
             class="M_butt" target="_self"
         ><img title="<?php echo __('Toggle small/big'); ?>" alt="key" src="pmd/images/bottom.png"
         /></a><img class="M_bord" src="pmd/images/bord.png" alt=""
-        /><a href="javascript:PDF_save();" onmousedown="return false;"
+        /><a href="javascript:PDF_save();" onmousedown="return false;" 
             class="M_butt" target="_self"
         ><img src="pmd/images/pdf.png" alt="key" width="20" height="20"
-                title="<?php echo __('Import/Export coordinates for PDF schema'); ?>" /></a>
-        <a href="javascript:Top_menu_right(document.getElementById('key_Left_Right'));"
+                title="<?php echo __('Import/Export coordinates for PDF schema'); ?>" /></a
+         >
+        <?php if($_REQUEST['query']){
+            echo '<a href="#" onClick="build_query(\'SQL Query on Database\', 0)" onmousedown="return false;" 
+            class="M_butt" target="_self">';
+            echo '<img src="pmd/images/query_builder.png" alt="key" width="20" height="20" title="';
+            echo __('Build Query');
+            echo '"/></a>'; }?> 
+         <a href="javascript:Top_menu_right(document.getElementById('key_Left_Right'));"
             onmousedown="return false;" class="M_butt last" target="_self">
             <img src="pmd/images/2rightarrow_m.png" id="key_Left_Right" alt=">"
                 title="<?php echo __('Move Menu'); ?>" /></a>
@@ -187,6 +206,13 @@ for ($i = 0; $i < count($GLOBALS['PMD']["TABLE_NAME"]); $i++) {
          ">
 <thead>
 <tr>
+    <?php 
+	if(isset($_REQUEST['query'])) {
+		echo '<td class="select_all">';
+    	echo '<input type="checkbox" value="select_all_'.htmlspecialchars($t_n_url).'" style="margin: 0px;" ';
+        echo 'id="select_all_'.htmlspecialchars($t_n_url).'" title="select all" ';
+        echo 'onclick="Select_all(\''. htmlspecialchars($t_n_url) .'\',\''.htmlspecialchars($GLOBALS['PMD_OUT']["OWNER"][$i]).'\')"></td>';
+	}?>
     <td class="small_tab" onmouseover="this.className='small_tab2';"
         onmouseout="this.className='small_tab';"
         id="id_hide_tbody_<?php echo $t_n_url ?>"
@@ -204,15 +230,21 @@ for ($i = 0; $i < count($GLOBALS['PMD']["TABLE_NAME"]); $i++) {
         onclick="Start_tab_upd('<?php echo $GLOBALS['PMD_URL']["TABLE_NAME_SMALL"][$i]; ?>');">
         <img src="pmd/images/exec_small.png" alt="" /></td>
     <td nowrap="nowrap" id="id_zag_<?php echo $t_n_url ?>" class="tab_zag"
-        onmousedown="cur_click=document.getElementById('<?php echo $t_n_url ?>');"
-        onmouseover="this.className = 'tab_zag_2'"
-        onmouseout="this.className = 'tab_zag'">
+        onmousedown="cur_click=document.getElementById('<?php echo $t_n_url ?>');"/
+        onmouseover="Table_onover('<?php echo $t_n_url ?>',0,<?php echo (isset($_REQUEST['query'])? 1 : 0 )?> )"
+        onmouseout="Table_onover('<?php echo $t_n_url ?>',1,<?php echo (isset($_REQUEST['query']) ? 1 : 0 )?>)">
         <span class='owner'>
         <?php
         echo $GLOBALS['PMD_OUT']["OWNER"][$i];
         echo '.</span>';
         echo $GLOBALS['PMD_OUT']["TABLE_NAME_SMALL"][$i];
         ?></td>
+    <?php 
+	if(isset($_REQUEST['query'])) {
+		echo '<td class="tab_zag"  onmouseover="Table_onover(\''.htmlspecialchars($t_n_url).'\',0,1)"  id="id_zag_'.htmlspecialchars($t_n_url).'_2"';
+        echo 'onmousedown="cur_click=document.getElementById(\''.htmlspecialchars($t_n_url).'\');"';
+        echo 'onmouseout="Table_onover(\''.htmlspecialchars($t_n_url).'\',1,1)">';
+	}?>
 </tr>
 </thead>
 <tbody id="id_tbody_<?php echo $t_n_url ?>"
@@ -243,6 +275,14 @@ for ($i = 0; $i < count($GLOBALS['PMD']["TABLE_NAME"]); $i++) {
             echo (isset($tables_all_keys[$t_n.".".$tab_column[$t_n]["COLUMN_NAME"][$j]]) ? 1 : 0);
         }
         ?>)">
+    <?php 
+	if(isset($_REQUEST['query'])) {
+    	echo '<td class="select_all">';
+	    echo '<input value="'.htmlspecialchars($t_n_url).urlencode($tab_column[$t_n]["COLUMN_NAME"][$j]).'"'; 
+        echo 'type="checkbox" id="select_'.htmlspecialchars($t_n_url).'._'.urlencode($tab_column[$t_n]["COLUMN_NAME"][$j]).'" ';
+ 		echo 'style="margin: 0px;" title="select_'.urlencode($tab_column[$t_n]["COLUMN_NAME"][$j]).'" ';
+		echo 'onclick="store_column(\''.urlencode($GLOBALS['PMD_OUT']["TABLE_NAME_SMALL"][$i]).'\',\''.htmlspecialchars($GLOBALS['PMD_OUT']["OWNER"][$i]).'\',\''.urlencode($tab_column[$t_n]["COLUMN_NAME"][$j]).'\')"></td>';
+	}?>
     <td width="10px" colspan="3"
         id="<?php echo $t_n_url.".".urlencode($tab_column[$t_n]["COLUMN_NAME"][$j]) ?>">
         <div style="white-space:nowrap">
@@ -276,6 +316,14 @@ for ($i = 0; $i < count($GLOBALS['PMD']["TABLE_NAME"]); $i++) {
         ?>
         </div>
    </td>
+   <?php 
+   if(isset($_REQUEST['query'])) {
+	   //$temp = $GLOBALS['PMD_OUT']["OWNER"][$i].'.'.$GLOBALS['PMD_OUT']["TABLE_NAME_SMALL"][$i];
+	   echo '<td class="small_tab_pref" onmouseover="this.className=\'small_tab_pref2\';"';
+	   echo 'onmouseout="this.className=\'small_tab_pref\';"';
+	   echo 'onclick="Click_option(\'pmd_optionse\',\''.urlencode($tab_column[$t_n]["COLUMN_NAME"][$j]).'\',\''.$GLOBALS['PMD_OUT']["TABLE_NAME_SMALL"][$i].'\')" >';
+	   echo  '<img src="pmd/images/exec_small.png" title="options" alt="" /></td> ';
+	} ?>
 </tr>
         <?php
     }
@@ -390,6 +438,392 @@ for ($i = 0; $i < count($GLOBALS['PMD']["TABLE_NAME"]); $i++) {
 </tr>
 </tbody>
 </table>
+
+<table id="pmd_optionse" style="visibility:<?php echo $hidden ?>;"
+    width="5%" border="0" cellpadding="0" cellspacing="0">
+<tbody>
+<tr>
+    <td class="frams1" width="10px"></td>
+    <td class="frams5" width="99%" ></td>
+    <td class="frams2" width="10px"><div class="bor"></div></td>
+</tr>
+<tr>
+    <td class="frams8"></td>
+    <td class="input_tab">
+        <table width="168" border="0" align="center" cellpadding="2" cellspacing="0">
+       <thead>
+        <tr>
+        	<td colspan="2" rowspan="2" id="option_col_name" nowrap="nowrap" align="center"></td>
+        </tr>
+        </thead>
+        <tbody id="where">
+        <tr><td align="center" nowrap="nowrap"><b>WHERE</b></td></tr>
+        <tr>
+        <td width="58" nowrap="nowrap"><?php echo __('Relation operator'); ?></td>
+            <td width="102"><select name="rel_opt" id="rel_opt">
+                    <option value="--" selected="selected"> -- </option>
+                    <option value="=" > = </option>
+                    <option value=">"> > </option>
+                    <option value="<"> < </option>
+                    <option value=">="> >= </option>
+                    <option value="<="> <= </option>
+                    <option value="NOT"> NOT </option>
+                    <option value="IN"> IN </option>
+                    <option value="EXCEPT"> <?php echo __('Except'); ?> </option>
+                    <option value="NOT IN"> NOT IN </option>
+                </select>
+            </td>
+        </tr>
+        <tr>
+        <td nowrap="nowrap"><?php echo __('Value'); ?>/<br /><?php echo __('subquery'); ?></td>
+            <td><textarea id="Query" value="" cols="18"></textarea>
+            </td>
+        </tr>
+        <tr><td align="center" nowrap="nowrap"><b><?php echo __('Rename to'); ?></b></td></tr>
+        <tr>
+        <td width="58" nowrap="nowrap"><?php echo __('New name'); ?></td>
+        	<td width="102"><input type="text" value="" id="new_name"/></td>
+        </tr>
+        <tr><td align="center" nowrap="nowrap"><b><?php echo __('Aggregate'); ?></b></td></tr>   
+         <tr>
+         <td width="58" nowrap="nowrap"><?php echo __('Operator'); ?></td>
+            <td width="102"><select name="operator" id="operator">
+                    <option value="---" selected="selected">---</option>
+                    <option value="sum" > SUM </option>
+                    <option value="min"> MIN </option>
+                    <option value="max"> MAX </option>
+                    <option value="avg"> AVG </option>
+                    <option value="count"> COUNT </option>
+                    </select>
+           </td></tr>
+           <tr>
+				<td nowrap="nowrap" width="58" align="center"><b>GROUP BY</b></td>
+                <td><input type="checkbox" value="groupby" id="groupby"/></td>
+           </tr>           	
+           <tr>
+				<td nowrap="nowrap" width="58" align="center"><b>ORDER BY</b></td>
+                <td><input type="checkbox" value="orderby" id="orderby"/></td>
+           </tr>
+          <tr><td align="center" nowrap="nowrap"><b>HAVING</b></td></tr>
+          <tr>
+          <td width="58" nowrap="nowrap"><?php echo __('Operator'); ?></td>
+            <td width="102"><select name="h_operator" id="h_operator">
+                    <option value="---" selected="selected">---</option>
+                    <option value="None" > <?php echo __('None'); ?> </option>
+                    <option value="sum" > SUM </option>
+                    <option value="min"> MIN </option>
+                    <option value="max"> MAX </option>
+                    <option value="avg"> AVG </option>
+                    <option value="count"> COUNT </option>
+                    </select>
+           	</td></tr>
+            <tr>
+            <td width="58" nowrap="nowrap"><?php echo __('Relation operator'); ?></td>
+            <td width="102"><select name="h_rel_opt" id="h_rel_opt">
+                    <option value="--" selected="selected"> -- </option>
+                    <option value="=" > = </option>
+                    <option value=">"> > </option>
+                    <option value="<"> < </option>
+                    <option value=">="> >= </option>
+                    <option value="<="> <= </option>
+                    <option value="NOT"> NOT </option>
+                    <option value="IN"> IN </option>
+                    <option value="EXCEPT"> <?php echo __('Except'); ?> </option>
+                    <option value="NOT IN"> NOT IN </option>
+                </select>
+            </td>
+        	</tr>
+            <tr>
+            <td width="58" nowrap="nowrap"><?php echo __('Value'); ?>/<br/><?php echo __('subquery'); ?></td>
+        		<td width="102"><textarea id="having" value="" cols="18"></textarea></td>
+        	</tr>
+        </tbody>
+        <tbody>
+        <tr>
+            <td colspan="2" align="center" nowrap="nowrap">
+                <input type="button" class="butt" name="Button"
+                    value="<?php echo __('OK'); ?>" onclick="add_object()" />
+                <input type="button" class="butt" name="Button"
+                    value="<?php echo __('Cancel'); ?>"
+                    onclick="Close_option()" />
+            </td>
+        </tr>
+        </tbody>
+        </table>
+    </td>
+    <td class="frams6"></td>
+</tr>
+<tr>
+    <td class="frams4"><div class="bor"></div></td>
+    <td class="frams7"></td>
+    <td class="frams3"></td>
+</tr>
+</tbody>
+</table>
+
+<table id="query_rename_to" style="visibility:<?php echo $hidden ?>;"
+    width="5%" border="0" cellpadding="0" cellspacing="0">
+<tbody>
+<tr>
+    <td class="frams1" width="10px"></td>
+    <td class="frams5" width="99%" ></td>
+    <td class="frams2" width="10px"><div class="bor"></div></td>
+</tr>
+<tr>
+    <td class="frams8"></td>
+    <td class="input_tab">
+        <table width="168" border="0" align="center" cellpadding="2" cellspacing="0">
+        <thead>
+        <tr>
+        <td colspan="2" align="center" nowrap="nowrap"><strong><?php echo __('Rename to'); ?></strong></td>
+        </tr>
+        </thead>
+        <tbody id="rename_to">
+        <tr>
+        <td width="58" nowrap="nowrap"><?php echo __('New name'); ?></td>
+            <td width="102">
+            	<input type="text" value="" id="e_rename"/>
+            </td>
+        </tr>
+        </tbody>
+        <tbody>
+        <tr>
+            <td colspan="2" align="center" nowrap="nowrap">
+                <input type="button" class="butt" name="Button"
+                    value="<?php echo __('OK'); ?>" onclick="edit('Rename')" />
+                <input type="button" class="butt" name="Button"
+                    value="<?php echo __('Cancel'); ?>"
+                    onclick="document.getElementById('query_rename_to').style.visibility = 'hidden';" />
+            </td>
+        </tr>
+        </tbody>
+        </table>
+    </td>
+    <td class="frams6"></td>
+</tr>
+<tr>
+    <td class="frams4"><div class="bor"></div></td>
+    <td class="frams7"></td>
+    <td class="frams3"></td>
+</tr>
+</tbody>
+</table>
+
+<table id="query_having" style="visibility:<?php echo $hidden ?>;"
+    width="5%" border="0" cellpadding="0" cellspacing="0">
+<tbody>
+	<tr>
+    	<td class="frams1" width="10px"></td>
+    	<td class="frams5" width="99%" ></td>
+    	<td class="frams2" width="10px"><div class="bor"></div></td>
+	</tr>
+<tr>
+    <td class="frams8"></td>
+    <td class="input_tab">
+    <table width="168" border="0" align="center" cellpadding="2" cellspacing="0">
+       <thead>
+        <tr>
+          <td colspan="2" align="center" nowrap="nowrap"><strong>HAVING</strong></td>
+        </tr>
+        </thead>
+        <tbody id="rename_to">
+        <tr>
+        <td width="58" nowrap="nowrap"><?php echo __('Operator'); ?></td>
+            <td width="102"><select name="hoperator" id="hoperator">
+                    <option value="---" selected="selected">---</option>
+                    <option value="None" > None </option>
+                    <option value="sum" > SUM </option>
+                    <option value="min"> MIN </option>
+                    <option value="max"> MAX </option>
+                    <option value="avg"> AVG </option>
+                    <option value="count"> COUNT </option>
+                    </select>
+           </td></tr>
+        <tr>
+        <tr>
+        <td width="58" nowrap="nowrap"><?php echo __('Operator'); ?></td>
+            <td width="102"><select name="hrel_opt" id="hrel_opt">
+            	<option value="--" selected="selected"> -- </option>
+                    <option value="=" > = </option>
+                    <option value=">"> > </option>
+                    <option value="<"> < </option>
+                    <option value=">="> >= </option>
+                    <option value="<="> <= </option>
+                    <option value="NOT"> NOT </option>
+                    <option value="IN"> IN </option>
+                    <option value="EXCEPT"> <?php echo __('Except'); ?> </option>
+                    <option value="NOT IN"> NOT IN </option>
+                </select>
+            </td>
+        </tr>
+        <tr>
+        <td nowrap="nowrap"><?php echo __('Value'); ?>/<br /><?php echo __('subquery'); ?></td>
+            <td><textarea id="hQuery" value="" cols="18"></textarea>
+            </td>
+        	</tr>
+         </tbody>
+        <tbody>
+        <tr>
+            <td colspan="2" align="center" nowrap="nowrap">
+                <input type="button" class="butt" name="Button"
+                    value="<?php echo __('OK'); ?>" onclick="edit('Having')" />
+                <input type="button" class="butt" name="Button"
+                    value="<?php echo __('Cancel'); ?>"
+                    onclick="document.getElementById('query_having').style.visibility = 'hidden';" />
+            </td>
+        </tr>
+        </tbody>
+        </table>
+    </td>
+    <td class="frams6"></td>
+</tr>
+<tr>
+    <td class="frams4"><div class="bor"></div></td>
+    <td class="frams7"></td>
+    <td class="frams3"></td>
+</tr>
+</tbody>
+</table>
+
+<table id="query_Aggregate" style="visibility:<?php echo $hidden ?>;"
+    width="5%" border="0" cellpadding="0" cellspacing="0">
+<tbody>
+<tr>
+    <td class="frams1" width="10px"></td>
+    <td class="frams5" width="99%" ></td>
+    <td class="frams2" width="10px"><div class="bor"></div></td>
+</tr>
+<tr>
+    <td class="frams8"></td>
+    <td class="input_tab">
+        <table width="168" border="0" align="center" cellpadding="2" cellspacing="0">
+        <thead>
+        <tr>
+        <td colspan="2" align="center" nowrap="nowrap"><strong><?php echo __('Aggregate'); ?></strong></td>
+        </tr>
+        </thead>
+        <tbody>
+        <tr>
+        <td width="58" nowrap="nowrap"><?php echo __('Operator'); ?></td>
+            <td width="102">
+            	<select name="operator" id="e_operator">
+                	<option value="---" selected="selected">---</option>
+                	<option value="sum" > SUM </option>
+                	<option value="min"> MIN </option>
+                	<option value="max"> MAX </option>
+   	            	<option value="avg"> AVG </option>
+                	<option value="avg"> COUNT </option>
+                </select>
+           </td></tr>   
+        </tbody>
+        <tbody>
+        <tr>
+            <td colspan="2" align="center" nowrap="nowrap">
+                <input type="button" class="butt" name="Button"
+                    value="<?php echo __('OK'); ?>" onclick="edit('Aggregate')" />
+                <input type="button" class="butt" name="Button"
+                    value="<?php echo __('Cancel'); ?>"
+                    onclick="document.getElementById('query_Aggregate').style.visibility = 'hidden';" />
+            </td>
+        </tr>
+        </tbody>
+        </table>
+    </td>
+    <td class="frams6"></td>
+</tr>
+<tr>
+    <td class="frams4"><div class="bor"></div></td>
+    <td class="frams7"></td>
+    <td class="frams3"></td>
+</tr>
+</tbody>
+</table>
+
+<table id="query_where" style="visibility:<?php echo $hidden ?>;"
+    width="5%" border="0" cellpadding="0" cellspacing="0">
+<tbody>
+	<tr>
+    	<td class="frams1" width="10px"></td>
+    	<td class="frams5" width="99%" ></td>
+    	<td class="frams2" width="10px"><div class="bor"></div></td>
+	</tr>
+<tr>
+    <td class="frams8"></td>
+    <td class="input_tab">
+    <table width="168" border="0" align="center" cellpadding="2" cellspacing="0">
+       <thead>
+        <tr>
+          <td colspan="2" align="center" nowrap="nowrap"><strong>WHERE</strong></td>
+        </tr>
+        </thead>
+        <tbody id="rename_to">
+        <tr>
+        <td width="58" nowrap="nowrap"><?php echo __('Operator'); ?></td>
+            <td width="102"><select name="erel_opt" id="erel_opt">
+            	<option value="--" selected="selected"> -- </option>
+                    <option value="=" > = </option>
+                    <option value=">"> > </option>
+                    <option value="<"> < </option>
+                    <option value=">="> >= </option>
+                    <option value="<="> <= </option>
+                    <option value="NOT"> NOT </option>
+                    <option value="IN"> IN </option>
+                    <option value="EXCEPT"> <?php echo __('Except'); ?> </option>
+                    <option value="NOT IN"> NOT IN </option>
+                </select>
+            </td>
+        </tr>
+        <tr>
+        <td nowrap="nowrap"><?php echo __('Value'); ?>/<br /><?php echo __('subquery'); ?></td>
+            <td><textarea id="eQuery" value="" cols="18"></textarea>
+            </td>
+        	</tr>
+         </tbody>
+        <tbody>
+        <tr>
+            <td colspan="2" align="center" nowrap="nowrap">
+                <input type="button" class="butt" name="Button"
+                    value="<?php echo __('OK'); ?>" onclick="edit('Where')" />
+                <input type="button" class="butt" name="Button"
+                    value="<?php echo __('Cancel'); ?>"
+                    onclick="document.getElementById('query_where').style.visibility = 'hidden';" />
+            </td>
+        </tr>
+        </tbody>
+        </table>
+    </td>
+    <td class="frams6"></td>
+</tr>
+<tr>
+    <td class="frams4"><div class="bor"></div></td>
+    <td class="frams7"></td>
+    <td class="frams3"></td>
+</tr>
+</tbody>
+</table>
+
+<?php 
+if($_REQUEST['query']) {
+	echo '<div class="panel">';
+  	echo '<div style="clear:both;"></div>';
+   	echo '<div id="ab"></div>';
+ 	echo '<div style="clear:both;"></div>';
+  	echo '</div>';
+	echo '<a class="trigger" href="#">' . __('Active options') . '</a>';
+	echo '<div id="filter"></div>';
+	echo '<div id="box">';
+  	echo '<span id="boxtitle"></span>';
+  	echo '<form method="post" action="db_qbe.php" >';
+    echo '<textarea cols="80" name="sql_query" id="textSqlquery" rows="15"></textarea><div id="tblfooter">';
+    echo '  <input type="submit" name="submit_sql" class="btn">';
+    echo '  <input type="button" name="cancel" value="Cancel" onClick="closebox()" class="btn">';
+    echo PMA_generate_common_hidden_inputs($GLOBALS['db']);
+    echo '</div></p>';
+    echo '</form></div>';
+	
+} ?>
+
+
 <!-- cache images -->
 <img src="pmd/images/2leftarrow_m.png" width="0" height="0" alt="" />
 <img src="pmd/images/rightarrow1.png" width="0" height="0" alt="" />
diff --git a/readme b/readme
new file mode 100644
index 0000000..e69de29


hooks/post-receive
-- 
phpMyAdmin




More information about the Git mailing list