diff --git a/libraries/Types.class.php b/libraries/Types.class.php
index ec14814dc5..ae63411501 100644
--- a/libraries/Types.class.php
+++ b/libraries/Types.class.php
@@ -148,18 +148,24 @@ class PMA_Types
/**
* Returns operators for given type as html options
*
- * @param string $type Type of field
- * @param boolean $null Whether field can be NULL
+ * @param string $type Type of field
+ * @param boolean $null Whether field can be NULL
+ * @param string $selectedOperator Option to be selected
*
- * @return array
+ * @return string Generated Html
*/
- public function getTypeOperatorsHtml($type, $null)
+ public function getTypeOperatorsHtml($type, $null, $selectedOperator = null)
{
$html = '';
foreach ($this->getTypeOperators($type, $null) as $fc) {
- $escaped = htmlspecialchars($fc);
- $html .= '';
+ if (isset($selectedOperator) && $selectedOperator == $fc) {
+ $html .= '';
+ } else {
+ $html .= '';
+ }
}
return $html;
diff --git a/libraries/tbl_select.lib.php b/libraries/tbl_select.lib.php
index b2dada9821..ae94346cde 100644
--- a/libraries/tbl_select.lib.php
+++ b/libraries/tbl_select.lib.php
@@ -44,7 +44,7 @@ function PMA_tbl_getFields($db, $table)
} else {
// strip the "BINARY" attribute, except if we find "BINARY(" because
// this would be a BINARY or VARBINARY field type
- if (!preg_match('@BINARY[\(]@i', $type)) {
+ if (! preg_match('@BINARY[\(]@i', $type)) {
$type = preg_replace('@BINARY@i', '', $type);
}
$type = preg_replace('@ZEROFILL@i', '', $type);
@@ -331,7 +331,7 @@ function PMA_tbl_search_getWhereClause($fields, $names, $types, $collations,
$w = $backquoted_name . ' ' . $func_type . ' ' . $gis_data;
} elseif (strncasecmp($types, 'enum', 4) == 0) {
- if (!empty($fields)) {
+ if (! empty($fields)) {
if (! is_array($fields)) {
$fields = explode(',', $fields);
}
@@ -410,4 +410,356 @@ function PMA_tbl_search_getWhereClause($fields, $names, $types, $collations,
return $w;
}
+
+/**
+ * Builds the sql search query from the post parameters
+ *
+ * @param string $table Selected table
+ * @param array $fields Entered values of the columns
+ * @param array $criteriaColumnNames Names of all columns
+ * @param array $criteriaColumnTypes Types of all columns
+ * @param array $criteriaColumnCollations Collations of all columns
+ * @param array $criteriaColumnOperators Operators for given column type
+ *
+ * @return string the generated SQL query
+ */
+function PMA_tblSearchBuildSqlQuery($table, $fields, $criteriaColumnNames,
+ $criteriaColumnTypes, $criteriaColumnCollations, $criteriaColumnOperators)
+{
+ $sql_query = 'SELECT ';
+
+ // If only distinct values are needed
+ $is_distinct = (isset($_POST['distinct'])) ? 'true' : 'false';
+ if ($is_distinct == 'true') {
+ $sql_query .= 'DISTINCT ';
+ }
+
+ // if all column names were selected to display, we do a 'SELECT *'
+ // (more efficient and this helps prevent a problem in IE
+ // if one of the rows is edited and we come back to the Select results)
+ if (count($_POST['columnsToDisplay']) == count($criteriaColumnNames)) {
+ $sql_query .= '* ';
+ } else {
+ $sql_query .= implode(', ', PMA_backquote($_POST['columnsToDisplay']));
+ } // end if
+
+ $sql_query .= ' FROM ' . PMA_backquote($table);
+ $whereClause = PMA_tblSearchGenerateWhereClause(
+ $fields, $criteriaColumnNames, $criteriaColumnTypes,
+ $criteriaColumnCollations, $criteriaColumnOperators
+ );
+ $sql_query .= $whereClause;
+
+ // if the search results are to be ordered
+ if ($_POST['orderByColumn'] != '--nil--') {
+ $sql_query .= ' ORDER BY ' . PMA_backquote($_POST['orderByColumn'])
+ . ' ' . $_POST['order'];
+ } // end if
+ return $sql_query;
+}
+
+/**
+ * Generates the where clause for the SQL search query to be executed
+ *
+ * @param array $fields Entered values of the columns
+ * @param array $criteriaColumnNames Names of all columns
+ * @param array $criteriaColumnTypes Types of all columns
+ * @param array $criteriaColumnCollations Collations of all columns
+ * @param array $criteriaColumnOperators Operators for given column type
+ *
+ * @return string the generated where clause
+ */
+function PMA_tblSearchGenerateWhereClause($fields, $criteriaColumnNames,
+ $criteriaColumnTypes, $criteriaColumnCollations, $criteriaColumnOperators)
+{
+ $fullWhereClause = '';
+
+ if (trim($_POST['customWhereClause']) != '') {
+ $fullWhereClause .= ' WHERE ' . $_POST['customWhereClause'];
+ return $fullWhereClause;
+ }
+
+ // If there are no search criterias set, return
+ if (! array_filter($fields)) {
+ return $fullWhereClause;
+ }
+
+ // else continue to form the where clause from column criteria values
+ $fullWhereClause = $charsets = array();
+ reset($criteriaColumnOperators);
+ while (list($i, $operator) = each($criteriaColumnOperators)) {
+ list($charsets[$i]) = explode('_', $criteriaColumnCollations[$i]);
+ $unaryFlag = $GLOBALS['PMA_Types']->isUnaryOperator($operator);
+ $tmp_geom_func = isset($geom_func[$i]) ? $geom_func[$i] : null;
+
+ $whereClause = PMA_tbl_search_getWhereClause(
+ $fields[$i], $criteriaColumnNames[$i], $criteriaColumnTypes[$i],
+ $criteriaColumnCollations[$i], $operator, $unaryFlag, $tmp_geom_func
+ );
+
+ if ($whereClause) {
+ $fullWhereClause[] = $whereClause;
+ }
+ } // end while
+
+ if ($fullWhereClause) {
+ $fullWhereClause = ' WHERE ' . implode(' AND ', $fullWhereClause);
+ }
+ return $fullWhereClause;
+}
+
+/**
+ * Generates HTML for a geometrical function column to be displayed in table
+ * search selection form
+ *
+ * @param boolean $geomColumnFlag whether a geometry column is present
+ * @param array $columnTypes array containing types of all columns in the table
+ * @param array $geom_types array of GIS data types
+ * @param integer $column_index index of current column in $columnTypes array
+ *
+ * @return string the generated HTML
+ */
+function PMA_tblSearchGetGeomFuncHtml($geomColumnFlag, $columnTypes,
+$geom_types, $column_index)
+{
+ $html_output = '';
+ // return if geometrical column is not present
+ if (! $geomColumnFlag) {
+ return $html_output;
+ }
+
+ /**
+ * Displays 'Function' column if it is present
+ */
+ $html_output .= '
';
+ // if a geometry column is present
+ if (in_array($columnTypes[$column_index], $geom_types)) {
+ $html_output .= '';
+ } else {
+ $html_output .= ' ';
+ }
+ $html_output .= ' | ';
+ return $html_output;
+}
+
+/**
+ * Generates formatted HTML for extra search options in table search form
+ *
+ * @param array $columnNames Array containing types of all columns in the table
+ * @param integer $columnCount Number of columns in the table
+ *
+ * @return string the generated HTML
+ */
+function PMA_tblSearchGetOptions($columnNames, $columnCount)
+{
+ $html_output = '';
+ $html_output .= PMA_getDivForSliderEffect('searchoptions', __('Options'));
+ /**
+ * Displays columns select list for selecting distinct columns in the search
+ */
+ $html_output .= '';
+
+ /**
+ * Displays input box for custom 'Where' clause to be used in the search
+ */
+ $html_output .= '';
+
+ /**
+ * Displays option of changing default number of rows displayed per page
+ */
+ $html_output .= '';
+
+ /**
+ * Displays option for ordering search results by a column value (Asc or Desc)
+ */
+ $html_output .= '
';
+ return $html_output;
+}
+
+/**
+ * Generates HTML for displaying fields table in search form
+ *
+ * @param array $columnNames Names of columns in the table
+ * @param array $columnTypes Types of columns in the table
+ * @param array $columnCollations Collation of all columns
+ * @param array $columnNullFlags Null information of columns
+ * @param boolean $geomColumnFlag Whether a geometry column is present
+ * @param integer $columnCount Number of columns in the table
+ * @param array $foreigners Array of foreign keys
+ * @param string $db Selected database
+ * @param string $table Selected table
+ *
+ * @return string the generated HTML
+ */
+function PMA_tblSearchGetFieldsTableHtml($columnNames, $columnTypes,
+$columnCollations, $columnNullFlags, $geomColumnFlag, $columnCount,
+$foreigners, $db, $table)
+{
+ $html_output = '';
+ $html_output .= '';
+ $html_output .= PMA_tbl_setTableHeader($geomColumnFlag) . '';
+ $odd_row = true;
+ $titles['Browse'] = PMA_getIcon('b_browse.png', __('Browse foreign values'));
+ $geom_types = PMA_getGISDatatypes();
+
+ // for every column present in table
+ for ($i = 0; $i < $columnCount; $i++) {
+ $html_output .= '';
+ $odd_row = !$odd_row;
+
+ /**
+ * If 'Function' column is present
+ */
+ $html_output .= PMA_tblSearchGetGeomFuncHtml(
+ $geomColumnFlag, $columnTypes, $geom_types, $i
+ );
+ /**
+ * Displays column's name, type and collation
+ */
+ $html_output .= '| ' . htmlspecialchars($columnNames[$i]) . ' | ';
+ $html_output .= '' . htmlspecialchars($columnTypes[$i]) . ' | ';
+ $html_output .= '' . $columnCollations[$i] . ' | ';
+ /**
+ * Displays column's comparison operators depending on column type
+ */
+ $html_output .= ' | ';
+ /**
+ * Displays column's foreign relations if any
+ */
+ $html_output .= '';
+ $field = $columnNames[$i];
+ $foreignData = PMA_getForeignData($foreigners, $field, false, '', '');
+ $html_output .= PMA_getForeignFields_Values(
+ $foreigners, $foreignData, $field, $columnTypes, $i, $db, $table,
+ $titles, $GLOBALS['cfg']['ForeignKeyMaxLimit'], '', true
+ );
+
+ $html_output .= ''
+ . ''
+ . ' |
';
+ } // end for
+
+ $html_output .= '
';
+ return $html_output;
+}
+
+/**
+ * Generates the table search form under table search tab
+ *
+ * @param string $goto Goto URL
+ * @param array $columnNames Names of columns in the table
+ * @param array $columnTypes Types of columns in the table
+ * @param array $columnCollations Collation of all columns
+ * @param array $columnNullFlags Null information of columns
+ * @param boolean $geomColumnFlag Whether a geometry column is present
+ * @param integer $columnCount Number of columns in the table
+ * @param array $foreigners Array of foreign keys
+ * @param string $db Selected database
+ * @param string $table Selected table
+ *
+ * @return string the generated HTML for table search form
+ */
+function PMA_tblSearchGetSelectionForm($goto, $columnNames, $columnTypes,
+$columnCollations, $columnNullFlags, $geomColumnFlag, $columnCount,
+$foreigners, $db, $table)
+{
+ $html_output = '';
+ $html_output .= '';
+ return $html_output;
+}
?>
diff --git a/tbl_select.php b/tbl_select.php
index a0a7ac9b45..dd3dd733ec 100644
--- a/tbl_select.php
+++ b/tbl_select.php
@@ -23,26 +23,16 @@ $GLOBALS['js_include'][] = 'tbl_change.js';
$GLOBALS['js_include'][] = 'jquery/timepicker.js';
$GLOBALS['js_include'][] = 'gis_data_editor.js';
-$titles['Browse'] = PMA_getIcon('b_browse.png', __('Browse foreign values'));
-
-$geom_types = PMA_getGISDatatypes();
-
$post_params = array(
'ajax_request',
- 'collations',
+ 'criteriaColumnCollations',
'db',
- 'distinct',
'fields',
- 'func',
- 'max_number_of_fields',
- 'names',
- 'order',
- 'orderField',
- 'param',
+ 'criteriaColumnOperators',
+ 'criteriaColumnNames',
'session_max_rows',
'table',
- 'types',
- 'where',
+ 'criteriaColumnTypes',
);
foreach ($post_params as $one_post_param) {
if (isset($_POST[$one_post_param])) {
@@ -54,14 +44,14 @@ foreach ($post_params as $one_post_param) {
/**
* Not selection yet required -> displays the selection form
*/
-if (! isset($param) || $param[0] == '') {
+if (! isset($_POST['columnsToDisplay']) || $_POST['columnsToDisplay'][0] == '') {
// Gets some core libraries
include_once 'libraries/tbl_common.inc.php';
//$err_url = 'tbl_select.php' . $err_url;
$url_query .= '&goto=tbl_select.php&back=tbl_select.php';
/**
- * Gets tables informations
+ * Gets table's information
*/
include_once 'libraries/tbl_info.inc.php';
@@ -72,230 +62,30 @@ if (! isset($param) || $param[0] == '') {
$err_url = $goto . '?' . PMA_generate_common_url($db, $table);
// Gets the list and number of fields
- list($fields_list, $fields_type, $fields_collation, $fields_null, $geom_column_present)
+ list($columnNames, $columnTypes, $columnCollations, $columnNullFlags, $geomColumnFlag)
= PMA_tbl_getFields($db, $table);
- $fields_cnt = count($fields_list);
+ $columnCount = count($columnNames);
// retrieve keys into foreign fields, if any
// check also foreigners even if relwork is FALSE (to get
// foreign keys from innodb)
$foreigners = PMA_getForeigners($db, $table);
- ?>
-
- do the work
*/
-
- // Builds the query
-
- $sql_query = 'SELECT ' . (isset($distinct) ? 'DISTINCT ' : '');
-
- // if all fields were selected to display, we do a SELECT *
- // (more efficient and this helps prevent a problem in IE
- // if one of the rows is edited and we come back to the Select results)
-
- if (count($param) == $max_number_of_fields) {
- $sql_query .= '* ';
- } else {
- $param = PMA_backquote($param);
- $sql_query .= implode(', ', $param);
- } // end if
-
- // avoid a loop, for example when $cfg['DefaultTabTable'] is set
- // to 'tbl_select.php'
- unset($param);
-
- $sql_query .= ' FROM ' . PMA_backquote($table);
-
- // The where clause
- if (trim($where) != '') {
- $sql_query .= ' WHERE ' . $where;
- } else {
- $w = $charsets = array();
- $cnt_func = count($func);
- reset($func);
- while (list($i, $func_type) = each($func)) {
-
- list($charsets[$i]) = explode('_', $collations[$i]);
- $unaryFlag = $GLOBALS['PMA_Types']->isUnaryOperator($func_type);
-
- $tmp_geom_func = isset($geom_func[$i]) ? $geom_func[$i] : null;
- $whereClause = PMA_tbl_search_getWhereClause(
- $fields[$i], $names[$i], $types[$i], $collations[$i],
- $func_type, $unaryFlag, $tmp_geom_func
- );
-
- if ($whereClause) {
- $w[] = $whereClause;
- }
- } // end while
- if ($w) {
- $sql_query .= ' WHERE ' . implode(' AND ', $w);
- }
- } // end if
-
- if ($orderField != '--nil--') {
- $sql_query .= ' ORDER BY ' . PMA_backquote($orderField) . ' ' . $order;
- } // end if
+ $sql_query = PMA_tblSearchBuildSqlQuery(
+ $table, $fields, $criteriaColumnNames, $criteriaColumnTypes,
+ $criteriaColumnCollations, $criteriaColumnOperators
+ );
include 'sql.php';
}
-
?>
diff --git a/tbl_zoom_select.php b/tbl_zoom_select.php
index ca2d40fbaa..0e705ddf58 100644
--- a/tbl_zoom_select.php
+++ b/tbl_zoom_select.php
@@ -45,7 +45,6 @@ $post_params = array(
'fields',
'fields_null',
'inputs',
- 'max_number_of_fields',
'maxPlotLimit',
'types',
'zoom_submit',
@@ -170,7 +169,6 @@ $fields_cnt = count($fields_list);
// check also foreigners even if relwork is FALSE (to get
// foreign keys from innodb)
$foreigners = PMA_getForeigners($db, $table);
-$flag = 1;
$tbl_fields_type = $tbl_fields_collation = $tbl_fields_null = array();
if (! isset($zoom_submit) && ! isset($inputs)) {
@@ -189,13 +187,30 @@ echo PMA_generateHtmlTabs(PMA_tbl_getSubTabs(), $url_params, 'topmenu2');
* Set the field name,type,collation and whether null on select of a coulmn
*/
if (isset($inputs) && ($inputs[0] != 'pma_null' || $inputs[1] != 'pma_null')) {
- $flag = 2;
for ($i = 0 ; $i < 4 ; $i++) {
if ($inputs[$i] != 'pma_null') {
$key = array_search($inputs[$i], $fields_list);
$tbl_fields_type[$i] = $fields_type[$key];
$tbl_fields_collation[$i] = $fields_collation[$key];
- $tbl_fields_null[$i] = $fields_null[$key];
+ $tbl_fields_func[$i] = '';
+ $foreignData = PMA_getForeignData($foreigners, $inputs[$i], false, '', '');
+ $tbl_fields_value[$i] = PMA_getForeignFields_Values(
+ $foreigners,
+ $foreignData,
+ $inputs[$i],
+ $tbl_fields_type,
+ $i,
+ $db,
+ $table,
+ $titles,
+ $GLOBALS['cfg']['ForeignKeyMaxLimit'],
+ $fields
+ );
}
}
}
@@ -210,7 +225,6 @@ if (isset($inputs) && ($inputs[0] != 'pma_null' || $inputs[1] != 'pma_null')) {
-