/** * Handle remembered sorting order, only for single table query * * @param string $db database name * @param string $table table name * @param array &$analyzed_sql_results the analyzed query results * @param string &$full_sql_query SQL query * * @return void */ function PMA_handleSortOrder($db, $table, &$analyzed_sql_results, &$full_sql_query) { $pmatable = new Table($table, $db); if (empty($analyzed_sql_results['order'])) { // Retrieving the name of the column we should sort after. $sortCol = $pmatable->getUiProp(Table::PROP_SORTED_COLUMN); if (empty($sortCol)) { return; } // Remove the name of the table from the retrieved field name. $sortCol = str_replace(PMA\libraries\Util::backquote($table) . '.', '', $sortCol); // Create the new query. $full_sql_query = SqlParser\Utils\Query::replaceClause($analyzed_sql_results['statement'], $analyzed_sql_results['parser']->list, 'ORDER BY ' . $sortCol); // TODO: Avoid reparsing the query. $analyzed_sql_results = SqlParser\Utils\Query::getAll($full_sql_query); } else { // Store the remembered table into session. $pmatable->setUiProp(Table::PROP_SORTED_COLUMN, SqlParser\Utils\Query::getClause($analyzed_sql_results['statement'], $analyzed_sql_results['parser']->list, 'ORDER BY')); } }
/** * Get url sql query without conditions to shorten URLs * * @param array $analyzed_sql_results analyzed sql results * * @return string $url_sql analyzed sql query * * @access private * * @see _getTableBody() */ private function _getUrlSqlQuery($analyzed_sql_results) { if ($analyzed_sql_results['querytype'] != 'SELECT' || mb_strlen($this->__get('sql_query')) < 200) { return $this->__get('sql_query'); } $query = 'SELECT ' . SqlParser\Utils\Query::getClause($analyzed_sql_results['statement'], $analyzed_sql_results['parser']->list, 'SELECT'); $from_clause = SqlParser\Utils\Query::getClause($analyzed_sql_results['statement'], $analyzed_sql_results['parser']->list, 'FROM'); if (!empty($from_clause)) { $query .= ' FROM ' . $from_clause; } return $query; }
/** * Transforms a DELETE query into SELECT statement. * * @param array $analyzed_sql_results Analyzed SQL results from parser. * * @return string SQL query */ function PMA_getSimulatedDeleteQuery($analyzed_sql_results) { $table_references = SqlParser\Utils\Query::getTables($analyzed_sql_results['statement']); $where = SqlParser\Utils\Query::getClause($analyzed_sql_results['statement'], $analyzed_sql_results['parser']->list, 'WHERE'); if (empty($where)) { $where = '1'; } $order_and_limit = ''; if (!empty($analyzed_sql_results['statement']->order)) { $order_and_limit .= ' ORDER BY ' . SqlParser\Utils\Query::getClause($analyzed_sql_results['statement'], $analyzed_sql_results['parser']->list, 'ORDER BY'); } if (!empty($analyzed_sql_results['statement']->limit)) { $order_and_limit .= ' LIMIT ' . SqlParser\Utils\Query::getClause($analyzed_sql_results['statement'], $analyzed_sql_results['parser']->list, 'LIMIT'); } return 'SELECT * FROM ' . implode(', ', $table_references) . ' WHERE ' . $where . $order_and_limit; }