The branch, master has been updated via 1dba9c1836bf12aab40aeb129fd00aa04904a330 (commit) via a05eb3ebcde7b04d5f742b73b9a768b3f3a5d7d9 (commit) via c5b393665ca77d719bc67290cc4ddd003354cf4a (commit) via 77b2b7627d714f2621c5d320b5cfe5450229b7a5 (commit) via 4f438c33170e44f16282156540a1a6ab0b097035 (commit) via 0741a534017d2df65208eb1d288a079a84c76dc8 (commit) via 2d4a4427ef861373065b8630d5d6b6377c425eb3 (commit) via 46262835b6eb88290fbe32eec53c71b2568360a4 (commit) from cb9f7a2c26737fd0a2bc004bd289c3309dc7a78b (commit)
- Log ----------------------------------------------------------------- commit 1dba9c1836bf12aab40aeb129fd00aa04904a330 Merge: a05eb3e cb9f7a2 Author: Madhura Jayaratne madhura.cj@gmail.com Date: Fri Aug 19 15:17:32 2011 +0530
Merge branch 'master' of ssh://phpmyadmin.git.sourceforge.net/gitroot/phpmyadmin/phpmyadmin
Conflicts: libraries/tbl_select.lib.php
commit a05eb3ebcde7b04d5f742b73b9a768b3f3a5d7d9 Author: Madhura Jayaratne madhura.cj@gmail.com Date: Fri Aug 19 14:27:25 2011 +0530
Should return results when $propertiesIconic == true
commit c5b393665ca77d719bc67290cc4ddd003354cf4a Author: Madhura Jayaratne madhura.cj@gmail.com Date: Fri Aug 19 13:36:28 2011 +0530
More code style corrections
commit 77b2b7627d714f2621c5d320b5cfe5450229b7a5 Author: Madhura Jayaratne madhura.cj@gmail.com Date: Fri Aug 19 11:21:21 2011 +0530
Adhere to PEAR coding standards
commit 4f438c33170e44f16282156540a1a6ab0b097035 Author: Madhura Jayaratne madhura.cj@gmail.com Date: Fri Aug 19 11:07:11 2011 +0530
Coding style corrections
commit 0741a534017d2df65208eb1d288a079a84c76dc8 Author: Madhura Jayaratne madhura.cj@gmail.com Date: Fri Aug 19 10:44:33 2011 +0530
Remove tab characters
commit 2d4a4427ef861373065b8630d5d6b6377c425eb3 Author: Madhura Jayaratne madhura.cj@gmail.com Date: Fri Aug 19 10:42:57 2011 +0530
Fix doc blocks
commit 46262835b6eb88290fbe32eec53c71b2568360a4 Author: Madhura Jayaratne madhura.cj@gmail.com Date: Fri Aug 19 10:03:35 2011 +0530
Only non-empty search values should go into where clause
-----------------------------------------------------------------------
Summary of changes: libraries/tbl_select.lib.php | 360 +++++++++++++++++++---------------------- 1 files changed, 167 insertions(+), 193 deletions(-)
diff --git a/libraries/tbl_select.lib.php b/libraries/tbl_select.lib.php index 57c520d..755322e 100644 --- a/libraries/tbl_select.lib.php +++ b/libraries/tbl_select.lib.php @@ -11,71 +11,64 @@
require_once 'url_generating.lib.php';
- /** - * PMA_tbl_setTitle() sets the title for foreign keys display link +/** + * Sets the title for foreign keys display link. * - * @param $propertiesIconic Type of icon property - * @param $themeImage Icon Image - * @return string $str Value of the Title + * @param mixed $propertiesIconic Type of icon property + * @param string $pmaThemeImage Icon Image * + * @return string $str Value of the Title */ - -function PMA_tbl_setTitle($propertiesIconic,$pmaThemeImage){ +function PMA_tbl_setTitle($propertiesIconic, $pmaThemeImage) +{ if ($propertiesIconic == true) { $str = '<img class="icon" width="16" height="16" src="' . $pmaThemeImage - .'b_browse.png" alt="' . __('Browse foreign values') . '" title="' - . __('Browse foreign values') . '" />'; - - if ($propertiesIconic === 'both') { - $str .= __('Browse foreign values'); - return $str; - } - } else { - return __('Browse foreign values'); - } + .'b_browse.png" alt="' . __('Browse foreign values') . '" title="' + . __('Browse foreign values') . '" />'; + + if ($propertiesIconic === 'both') { + $str .= __('Browse foreign values'); + } + + return $str; + } else { + return __('Browse foreign values'); + } }
- /** - * PMA_tbl_getFields() gets all the fields of a table along with their types,collations and whether null or not. - * - * @uses PMA_DBI_query() - * @uses PMA_backquote() - * @uses PMA_DBI_num_rows() - * @uses PMA_DBI_fetch_assoc() - * @uses PMA_DBI_free_result() - * @uses preg_replace() - * @uses str_replace() - * @uses strncasecmp() - * @uses empty() - * - * @param $db Selected database - * @param $table Selected table +/** + * Gets all the fields of a table along with their types, collations + * and whether null or not. * - * @return array($fields_list,$fields_type,$fields_collation,$fields_null) Array containing the field list, field types, collations and null constatint + * @param string $table Selected table + * @param string $db Selected database * + * @return array Array containing the field list, field types, collations + * and null constraint */ - -function PMA_tbl_getFields($table,$db) { - +function PMA_tbl_getFields($table,$db) +{ // Gets the list and number of fields - - $fields = PMA_DBI_get_columns($db, $table, true); + $fields = PMA_DBI_get_columns($db, $table, true); $fields_list = $fields_null = $fields_type = $fields_collation = array(); $geom_column_present = false; $geom_types = PMA_getGISDatatypes(); + foreach ($fields as $row) { $fields_list[] = $row['Field']; $type = $row['Type']; + // check whether table contains geometric columns if (in_array($type, $geom_types)) { $geom_column_present = true; } + // reformat mysql query output if (strncasecmp($type, 'set', 3) == 0 - || strncasecmp($type, 'enum', 4) == 0) { + || strncasecmp($type, 'enum', 4) == 0 + ) { $type = str_replace(',', ', ', $type); } 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)) { @@ -91,51 +84,49 @@ function PMA_tbl_getFields($table,$db) { } $fields_null[] = $row['Null']; $fields_type[] = $type; - $fields_collation[] = !empty($row['Collation']) && $row['Collation'] != 'NULL' - ? $row['Collation'] - : ''; + $fields_collation[] = ! empty($row['Collation']) && $row['Collation'] != 'NULL' + ? $row['Collation'] + : ''; } // end while
- return array($fields_list,$fields_type,$fields_collation,$fields_null, $geom_column_present); - + return array($fields_list, $fields_type, $fields_collation, $fields_null, $geom_column_present); }
-/* PMA_tbl_setTableHeader() sets the table header for displaying a table in query-by-example format +/** + * Sets the table header for displaying a table in query-by-example format. * - * @return HTML content, the tags and content for table header + * @param bool $geom_column_present whether a geometry column is present * + * @return HTML content, the tags and content for table header */ - -function PMA_tbl_setTableHeader($geom_column_present = false){ - +function PMA_tbl_setTableHeader($geom_column_present = false) +{ // Display the Function column only if there is alteast one geomety colum $func = ''; if ($geom_column_present) { $func = '<th>' . __('Function') . '</th>'; }
-return '<thead> + return '<thead> <tr>' . $func . '<th>' . __('Column') . '</th> <th>' . __('Type') . '</th> <th>' . __('Collation') . '</th> <th>' . __('Operator') . '</th> <th>' . __('Value') . '</th> - </tr> + </tr> </thead>'; - - }
-/* PMA_tbl_getSubTabs() returns an array with necessary configrations to create sub-tabs(Table Search and Zoom Search) in the table_select page - * - * @return array $subtabs Array containing configuration (icon,text,link,id,args) of sub-tabs for Table Search and Zoom search +/** + * Returns an array with necessary configrations to create + * sub-tabs(Table Search and Zoom Search) in the table_select page. * + * @return array Array containing configuration (icon, text, link, id, args) + * of sub-tabs for Table Search and Zoom search */ - -function PMA_tbl_getSubTabs(){ - +function PMA_tbl_getSubTabs() +{ $subtabs = array(); - $subtabs['search']['icon'] = 'b_search.png'; $subtabs['search']['text'] = __('Table Search'); $subtabs['search']['link'] = 'tbl_select.php'; @@ -148,74 +139,65 @@ function PMA_tbl_getSubTabs(){ $subtabs['zoom']['id'] = 'zoom_search_id';
return $subtabs; - }
- -/* PMA_tbl_getForeignFields_Values() creates the HTML content for: 1) Browsing foreign data for a field. 2) Creating elements for search criteria input on fields. - * - * @uses PMA_foreignDropdown - * @uses PMA_generate_common_url - * @uses isset() - * @uses is_array() - * @uses in_array() - * @uses urlencode() - * @uses str_replace() - * @uses stbstr() - * - * @param $foreigners Array of foreign keys - * @param $foreignData Foreign keys data - * @param $field Column name - * @param $tbl_fields_type Column type - * @param $i Column index - * @param $db Selected database - * @param $table Selected table - * @param $titles Selected title - * @param $foreignMaxLimit Max limit of displaying foreign elements - * @param $fields Array of search criteria inputs - * @param $in_fbs In function based search +/** + * Creates the HTML content for: + * 1) Browsing foreign data for a field. + * 2) Creating elements for search criteria input on fields. * - * @return string $str HTML content for viewing foreing data and elements for search criteria input. + * @param array $foreigners Array of foreign keys + * @param array $foreignData Foreign keys data + * @param string $field Column name + * @param string $tbl_fields_type Column type + * @param int $i Column index + * @param string $db Selected database + * @param string $table Selected table + * @param array $titles Selected title + * @param int $foreignMaxLimit Max limit of displaying foreign elements + * @param array $fields Array of search criteria inputs + * @param bool $in_fbs Whether we are in 'function based search' * + * @return string HTML content for viewing foreing data and elements + * for search criteria input. */ - -function PMA_getForeignFields_Values($foreigners, $foreignData, $field, $tbl_fields_type, $i, $db, $table, $titles, $foreignMaxLimit, $fields, $in_fbs = false){ - +function PMA_getForeignFields_Values($foreigners, $foreignData, $field, $tbl_fields_type, $i, $db, $table, $titles, $foreignMaxLimit, $fields, $in_fbs = false) +{ $str = ''; - if ($foreigners && isset($foreigners[$field]) && is_array($foreignData['disp_row'])) { // f o r e i g n k e y s - $str .= ' <select name="fields[' . $i . ']" id="fieldID_' . $i .'">' . "\n"; + $str .= '<select name="fields[' . $i . ']" id="fieldID_' . $i .'">' . "\n"; // go back to first row // here, the 4th parameter is empty because there is no current // value of data for the dropdown (the search page initial values // are displayed empty) - $str .= PMA_foreignDropdown($foreignData['disp_row'], - $foreignData['foreign_field'], - $foreignData['foreign_display'], - '', $foreignMaxLimit); - $str .= ' </select>' . "\n"; - } - elseif ($foreignData['foreign_link'] == true) { + $str .= PMA_foreignDropdown( + $foreignData['disp_row'], $foreignData['foreign_field'], + $foreignData['foreign_display'], '', $foreignMaxLimit + ); + $str .= '</select>' . "\n"; + + } elseif ($foreignData['foreign_link'] == true) { if(isset($fields[$i]) && is_string($fields[$i])){ - $str .= '<input type="text" id="fieldID_' . $i .'"name="fields[' . $i . '] " value="' . $fields[$i] . '"'; - 'id="field_' . md5($field) . '[' . $i .']" - class="textfield"/>' ; + $str .= '<input type="text" id="fieldID_' . $i .'"name="fields[' . $i . '] " value="' . $fields[$i] . '"'; + 'id="field_' . md5($field) . '[' . $i .']" + class="textfield"/>' ; } else{ - $str .= '<input type="text" id="fieldID_' . $i .'"name="fields[' . $i . '] "'; - 'id="field_' . md5($field) . '[' . $i .']" - class="textfield" />' ; + $str .= '<input type="text" id="fieldID_' . $i .'"name="fields[' . $i . '] "'; + 'id="field_' . md5($field) . '[' . $i .']" + class="textfield" />' ; } ?> - <?php $str .= '<script type="text/javascript">'; + <?php $str .= '<script type="text/javascript">'; // <![CDATA[ - $str .= <<<EOT + $str .= <<<EOT <a target="_blank" onclick="window.open(this.href, 'foreigners', 'width=640,height=240,scrollbars=yes'); return false" href="browse_foreigners.php? EOT; $str .= '' . PMA_generate_common_url($db, $table) . '&field=' . urlencode($field) . '&fieldkey=' . $i . '">' . str_replace("'", "'", $titles['Browse']) . '</a>'; // ]] $str .= '</script>'; + } elseif (in_array($tbl_fields_type[$i], PMA_getGISDatatypes())) { // g e o m e t r y $str .= '<input type="text" name="fields[' . $i . ']"' @@ -228,72 +210,68 @@ EOT; $str .= PMA_linkOrButton($edit_url, $edit_str, array(), false, false, '_blank'); $str .= '</span>'; } + } elseif (strncasecmp($tbl_fields_type[$i], 'enum', 4) == 0) { // e n u m s $enum_value=explode(', ', str_replace("'", '', substr($tbl_fields_type[$i], 5, -1))); $cnt_enum_value = count($enum_value); $str .= '<select name="fields[' . ($i) . '][]" id="fieldID_' . $i .'"' - .' multiple="multiple" size="' . min(3, $cnt_enum_value) . '">' . "\n"; - for ($j = 0; $j < $cnt_enum_value; $j++) { - if(isset($fields[$i]) && is_array($fields[$i]) && in_array($enum_value[$j],$fields[$i])){ - $str .= ' <option value="' . $enum_value[$j] . '" Selected>' - . $enum_value[$j] . '</option>'; - } - else{ - $str .= ' <option value="' . $enum_value[$j] . '">' - . $enum_value[$j] . '</option>'; - } - } // end for - $str .= ' </select>' . "\n"; - } - else { + .' multiple="multiple" size="' . min(3, $cnt_enum_value) . '">' . "\n"; + + for ($j = 0; $j < $cnt_enum_value; $j++) { + if (isset($fields[$i]) + && is_array($fields[$i]) + && in_array($enum_value[$j], $fields[$i]) + ) { + $str .= '<option value="' . $enum_value[$j] . '" Selected>' + . $enum_value[$j] . '</option>'; + } else { + $str .= '<option value="' . $enum_value[$j] . '">' + . $enum_value[$j] . '</option>'; + } + } // end for + $str .= '</select>' . "\n"; + + } else { // o t h e r c a s e s $the_class = 'textfield'; $type = $tbl_fields_type[$i]; + if ($type == 'date') { $the_class .= ' datefield'; } elseif ($type == 'datetime' || substr($type, 0, 9) == 'timestamp') { $the_class .= ' datetimefield'; } - if(isset($fields[$i]) && is_string($fields[$i])){ - $str .= ' <input type="text" name="fields[' . $i . ']" ' - .' size="40" class="' . $the_class . '" id="fieldID_' . $i .'" value = "' . $fields[$i] . '"/>' . "\n"; - } - else{ - $str .= ' <input type="text" name="fields[' . $i . ']"' - .' size="40" class="' . $the_class . '" id="fieldID_' . $i .'" />' . "\n"; - } - }; - return $str;
+ if (isset($fields[$i]) && is_string($fields[$i])) { + $str .= '<input type="text" name="fields[' . $i . ']"' + .' size="40" class="' . $the_class . '" id="fieldID_' + . $i .'" value = "' . $fields[$i] . '"/>' . "\n"; + } else { + $str .= '<input type="text" name="fields[' . $i . ']"' + .' size="40" class="' . $the_class . '" id="fieldID_' + . $i .'" />' . "\n"; + } + } + return $str; }
- -/* PMA_tbl_search_getWhereClause() Return the where clause for query generation based on the inputs provided. - * - * @uses PMA_backquote - * @uses PMA_sqlAddslashes - * @uses preg_match - * @uses isset() - * @uses in_array() - * @uses str_replace() - * @uses strpos() - * @uses explode() - * @uses trim() - * - * @param $fields Search criteria input - * @param $names Name of the field(column) on which search criteria is submitted - * @param $types Type of the field - * @param $collations Field collation - * @param $func_type Search fucntion/operator - * @param $unaryFlag Whether operator unary or not +/** + * Return the where clause for query generation based on the inputs provided. * - * @return string $str HTML content for viewing foreing data and elements for search criteria input. + * @param mixed $fields Search criteria input + * @param string $names Name of the column on which search is submitted + * @param string $types Type of the field + * @param string $collations Field collation + * @param string $func_type Search fucntion/operator + * @param bool $unaryFlag Whether operator unary or not + * @param bool $geom_func Whether geometry functions should be applied * + * @return string HTML content for viewing foreing data and elements + * for search criteria input. */ - -function PMA_tbl_search_getWhereClause($fields, $names, $types, $collations, $func_type, $unaryFlag, $geom_func = null){ - +function PMA_tbl_search_getWhereClause($fields, $names, $types, $collations, $func_type, $unaryFlag, $geom_func = null) +{ /** * @todo move this to a more apropriate place */ @@ -305,7 +283,6 @@ function PMA_tbl_search_getWhereClause($fields, $names, $types, $collations, $fu );
$w = ''; - // If geometry function is set apply it to the field name if ($geom_func != null && trim($geom_func) != '') { // Get details about the geometry fucntions @@ -314,8 +291,8 @@ function PMA_tbl_search_getWhereClause($fields, $names, $types, $collations, $fu // If the function takes a single parameter if ($geom_funcs[$geom_func]['params'] == 1) { $backquoted_name = $geom_func . '(' . PMA_backquote($names) . ')'; - // If the function takes two parameters } else { + // If the function takes two parameters // create gis data from the string $gis_data = PMA_createGISData($fields);
@@ -326,7 +303,7 @@ function PMA_tbl_search_getWhereClause($fields, $names, $types, $collations, $fu // New output type is the output type of the function being applied $types = $geom_funcs[$geom_func]['type'];
- // If the intended where clause is something like 'IsEmpty(`spatial_col_name`)' + // If the where clause is something like 'IsEmpty(`spatial_col_name`)' if (isset($geom_unary_functions[$geom_func]) && trim($fields) == '') { $w = $backquoted_name; return $w; @@ -335,11 +312,11 @@ function PMA_tbl_search_getWhereClause($fields, $names, $types, $collations, $fu $backquoted_name = PMA_backquote($names); }
- if($unaryFlag){ + if ($unaryFlag) { $fields = ''; - $w = $backquoted_name . ' ' . $func_type; + $w = $backquoted_name . ' ' . $func_type;
- } elseif (in_array($types, PMA_getGISDatatypes())) { + } elseif (in_array($types, PMA_getGISDatatypes()) && ! empty($fields)) { // create gis data from the string $gis_data = PMA_createGISData($fields); $w = $backquoted_name . ' ' . $func_type . ' ' . $gis_data; @@ -360,23 +337,25 @@ function PMA_tbl_search_getWhereClause($fields, $names, $types, $collations, $fu $parens_open = '('; $parens_close = ')';
- } else { - $parens_open = ''; - $parens_close = ''; - } - $enum_where = ''' . PMA_sqlAddslashes($fields[0]) . '''; - for ($e = 1; $e < $enum_selected_count; $e++) { - $enum_where .= ', '' . PMA_sqlAddslashes($fields[$e]) . '''; - } + } else { + $parens_open = ''; + $parens_close = ''; + } + $enum_where = ''' . PMA_sqlAddslashes($fields[0]) . '''; + for ($e = 1; $e < $enum_selected_count; $e++) { + $enum_where .= ', '' . PMA_sqlAddslashes($fields[$e]) . '''; + }
- $w = $backquoted_name . ' ' . $func_type . ' ' . $parens_open . $enum_where . $parens_close; + $w = $backquoted_name . ' ' . $func_type . ' ' . $parens_open . $enum_where . $parens_close; }
} elseif ($fields != '') { // For these types we quote the value. Even if it's another type (like INT), // for a LIKE we always quote the value. MySQL converts strings to numbers // and numbers to strings as necessary during the comparison - if (preg_match('@char|binary|blob|text|set|date|time|year@i', $types) || strpos(' ' . $func_type, 'LIKE')) { + if (preg_match('@char|binary|blob|text|set|date|time|year@i', $types) + || strpos(' ' . $func_type, 'LIKE') + ) { $quot = '''; } else { $quot = ''; @@ -392,23 +371,28 @@ function PMA_tbl_search_getWhereClause($fields, $names, $types, $collations, $fu $fields = '^' . $fields . '$'; }
- if ($func_type == 'IN (...)' || $func_type == 'NOT IN (...)' || $func_type == 'BETWEEN' || $func_type == 'NOT BETWEEN') { + if ($func_type == 'IN (...)' + || $func_type == 'NOT IN (...)' + || $func_type == 'BETWEEN' + || $func_type == 'NOT BETWEEN' + ) { $func_type = str_replace(' (...)', '', $func_type);
- // quote values one by one - $values = explode(',', $fields); - foreach ($values as &$value) - $value = $quot . PMA_sqlAddslashes(trim($value)) . $quot; + // quote values one by one + $values = explode(',', $fields); + foreach ($values as &$value) { + $value = $quot . PMA_sqlAddslashes(trim($value)) . $quot; + }
- if ($func_type == 'BETWEEN' || $func_type == 'NOT BETWEEN') - $w = $backquoted_name . ' ' . $func_type . ' ' . (isset($values[0]) ? $values[0] : '') . ' AND ' . (isset($values[1]) ? $values[1] : ''); - else + if ($func_type == 'BETWEEN' || $func_type == 'NOT BETWEEN') { + $w = $backquoted_name . ' ' . $func_type . ' ' . (isset($values[0]) ? $values[0] : '') + . ' AND ' . (isset($values[1]) ? $values[1] : ''); + } else { $w = $backquoted_name . ' ' . $func_type . ' (' . implode(',', $values) . ')'; - } - else { + } + } else { $w = $backquoted_name . ' ' . $func_type . ' ' . $quot . PMA_sqlAddslashes($fields) . $quot;; } - } // end if
return $w; @@ -417,14 +401,14 @@ function PMA_tbl_search_getWhereClause($fields, $names, $types, $collations, $fu /** * Formats a SVG plot for the query results. * - * @param array $data Data for the status chart - * @param array &$settings Settings used to generate the chart + * @param array $data Data for the status chart + * @param array &$settings Settings used to generate the chart * * @return string HTML and JS code for the SVG plot */ function PMA_SVG_scatter_plot($data, &$settings) { - require_once './libraries/svg_plot/pma_scatter_plot.php'; + include_once './libraries/svg_plot/pma_scatter_plot.php';
if (empty($data)) { // empty data @@ -441,15 +425,5 @@ function PMA_SVG_scatter_plot($data, &$settings) } return $scatter_plot->asSVG(); } - } - - - - - - - - - ?>
hooks/post-receive