Skip to content

Commit

Permalink
Merge branch 'svnsync'
Browse files Browse the repository at this point in the history
CHG: the base_expr of a select-expression contains now an explicit alias (with "as"). Check your client code!
CHG: the parser output has been changed because of the new "hints" property (FROM clause)
  • Loading branch information
witchi committed Apr 16, 2014
2 parents 8b37b19 + d2bb1f6 commit c162c64
Show file tree
Hide file tree
Showing 35 changed files with 50 additions and 51 deletions.
22 changes: 10 additions & 12 deletions src/PHPSQLParser/processors/SelectExpressionProcessor.php
Expand Up @@ -104,6 +104,13 @@ public function process($expression) {
$base_expr .= $token;
}

if ($alias) {
// remove quotation from the alias
$alias['no_quotes'] = $this->revokeQuotation($alias['name']);
$alias['name'] = trim($alias['name']);
$alias['base_expr'] = trim($alias['base_expr']);
}

$stripped = $this->processExpressionList($stripped);

// TODO: the last part can also be a comment, don't use array_pop
Expand All @@ -127,26 +134,17 @@ public function process($expression) {
'base_expr' => trim($last['base_expr']));
// remove the last token
array_pop($tokens);
$base_expr = join("", $tokens);
}
}

if (!$alias) {
$base_expr = join("", $tokens);
} else {
/* remove escape from the alias */
$alias['no_quotes'] = $this->revokeQuotation($alias['name']);
$alias['name'] = trim($alias['name']);
$alias['base_expr'] = trim($alias['base_expr']);
}

$base_expr = $expression;

// TODO: this is always done with $stripped, how we do it twice?
$processed = $this->processExpressionList($tokens);

// if there is only one part, we copy the expr_type
// in all other cases we use "expression" as global type
// in all other cases we use "EXPRESSION" as global type
$type = ExpressionType::EXPRESSION;

if (count($processed) === 1) {
if (!$this->isSubQuery($processed[0])) {
$type = $processed[0]['expr_type'];
Expand Down
2 changes: 1 addition & 1 deletion tests/expected/parser/alias3.serialized
@@ -1 +1 @@
a:2:{s:6:"SELECT";a:1:{i:0;a:5:{s:9:"expr_type";s:10:"expression";s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:4:"colA";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:4:"colA";}}s:9:"base_expr";s:4:"colA";}s:9:"base_expr";s:30:"(select colA AS a from test t)";s:8:"sub_tree";a:1:{i:0;a:3:{s:9:"expr_type";s:8:"subquery";s:9:"base_expr";s:30:"(select colA AS a from test t)";s:8:"sub_tree";a:2:{s:6:"SELECT";a:1:{i:0;a:6:{s:9:"expr_type";s:6:"colref";s:5:"alias";a:4:{s:2:"as";b:1;s:4:"name";s:1:"a";s:9:"base_expr";s:4:"AS a";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"a";}}}s:9:"base_expr";s:4:"colA";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:4:"colA";}}s:8:"sub_tree";b:0;s:5:"delim";b:0;}}s:4:"FROM";a:1:{i:0;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:4:"test";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:4:"test";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:1:"t";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"t";}}s:9:"base_expr";s:1:"t";}s:5:"hints";b:0;s:9:"join_type";s:4:"JOIN";s:8:"ref_type";b:0;s:10:"ref_clause";b:0;s:9:"base_expr";s:6:"test t";s:8:"sub_tree";b:0;}}}}}s:5:"delim";b:0;}}s:4:"FROM";a:1:{i:0;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:7:"example";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:7:"example";}}s:5:"alias";a:4:{s:2:"as";b:1;s:4:"name";s:1:"b";s:9:"base_expr";s:4:"as b";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"b";}}}s:5:"hints";b:0;s:9:"join_type";s:4:"JOIN";s:8:"ref_type";b:0;s:10:"ref_clause";b:0;s:9:"base_expr";s:12:"example as b";s:8:"sub_tree";b:0;}}}
a:2:{s:6:"SELECT";a:1:{i:0;a:5:{s:9:"expr_type";s:10:"expression";s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:4:"colA";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:4:"colA";}}s:9:"base_expr";s:4:"colA";}s:9:"base_expr";s:35:"(select colA AS a from test t) colA";s:8:"sub_tree";a:1:{i:0;a:3:{s:9:"expr_type";s:8:"subquery";s:9:"base_expr";s:30:"(select colA AS a from test t)";s:8:"sub_tree";a:2:{s:6:"SELECT";a:1:{i:0;a:6:{s:9:"expr_type";s:6:"colref";s:5:"alias";a:4:{s:2:"as";b:1;s:4:"name";s:1:"a";s:9:"base_expr";s:4:"AS a";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"a";}}}s:9:"base_expr";s:4:"colA";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:4:"colA";}}s:8:"sub_tree";b:0;s:5:"delim";b:0;}}s:4:"FROM";a:1:{i:0;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:4:"test";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:4:"test";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:1:"t";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"t";}}s:9:"base_expr";s:1:"t";}s:5:"hints";b:0;s:9:"join_type";s:4:"JOIN";s:8:"ref_type";b:0;s:10:"ref_clause";b:0;s:9:"base_expr";s:6:"test t";s:8:"sub_tree";b:0;}}}}}s:5:"delim";b:0;}}s:4:"FROM";a:1:{i:0;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:7:"example";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:7:"example";}}s:5:"alias";a:4:{s:2:"as";b:1;s:4:"name";s:1:"b";s:9:"base_expr";s:4:"as b";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"b";}}}s:5:"hints";b:0;s:9:"join_type";s:4:"JOIN";s:8:"ref_type";b:0;s:10:"ref_clause";b:0;s:9:"base_expr";s:12:"example as b";s:8:"sub_tree";b:0;}}}
2 changes: 1 addition & 1 deletion tests/expected/parser/issue12.serialized
@@ -1 +1 @@
a:5:{s:6:"SELECT";a:3:{i:0;a:6:{s:9:"expr_type";s:8:"reserved";s:5:"alias";b:0;s:9:"base_expr";s:19:"SQL_CALC_FOUND_ROWS";s:8:"sub_tree";b:0;s:5:"delim";s:1:" ";s:8:"position";i:7;}i:1;a:7:{s:9:"expr_type";s:6:"colref";s:5:"alias";b:0;s:9:"base_expr";s:9:"SmTable.*";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:1:"*";}}s:8:"sub_tree";b:0;s:5:"delim";s:1:",";s:8:"position";i:27;}i:2;a:6:{s:9:"expr_type";s:10:"expression";s:5:"alias";a:5:{s:2:"as";b:1;s:4:"name";s:13:"keyword_score";s:9:"base_expr";s:16:"AS keyword_score";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:13:"keyword_score";}}s:8:"position";i:125;}s:9:"base_expr";s:86:"MATCH (SmTable.fulltextsearch_keyword) AGAINST ('google googles' WITH QUERY EXPANSION)";s:8:"sub_tree";a:3:{i:0;a:4:{s:9:"expr_type";s:8:"function";s:9:"base_expr";s:5:"MATCH";s:8:"sub_tree";a:1:{i:0;a:5:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:30:"SmTable.fulltextsearch_keyword";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:22:"fulltextsearch_keyword";}}s:8:"sub_tree";b:0;s:8:"position";i:45;}}s:8:"position";i:38;}i:1;a:5:{s:9:"expr_type";s:8:"function";s:9:"base_expr";s:7:"AGAINST";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:7:"AGAINST";}}s:8:"sub_tree";b:0;s:8:"position";i:77;}i:2;a:4:{s:9:"expr_type";s:15:"match-arguments";s:9:"base_expr";s:39:"('google googles' WITH QUERY EXPANSION)";s:8:"sub_tree";a:2:{i:0;a:4:{s:9:"expr_type";s:5:"const";s:9:"base_expr";s:16:"'google googles'";s:8:"sub_tree";b:0;s:8:"position";i:86;}i:1;a:4:{s:9:"expr_type";s:10:"match-mode";s:9:"base_expr";s:20:"WITH QUERY EXPANSION";s:8:"sub_tree";b:0;s:8:"position";i:103;}}s:8:"position";i:85;}}s:5:"delim";b:0;s:8:"position";i:38;}}s:4:"FROM";a:1:{i:0;a:11:{s:9:"expr_type";s:5:"table";s:5:"table";s:7:"SmTable";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:7:"SmTable";}}s:5:"alias";b:0;s:5:"hints";b:0;s:9:"join_type";s:4:"JOIN";s:8:"ref_type";b:0;s:10:"ref_clause";b:0;s:9:"base_expr";s:7:"SmTable";s:8:"sub_tree";b:0;s:8:"position";i:147;}}s:5:"WHERE";a:9:{i:0;a:5:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:14:"SmTable.status";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:6:"status";}}s:8:"sub_tree";b:0;s:8:"position";i:161;}i:1;a:4:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;s:8:"position";i:176;}i:2;a:4:{s:9:"expr_type";s:5:"const";s:9:"base_expr";s:3:"'A'";s:8:"sub_tree";b:0;s:8:"position";i:178;}i:3;a:4:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:3:"AND";s:8:"sub_tree";b:0;s:8:"position";i:182;}i:4;a:4:{s:9:"expr_type";s:18:"bracket_expression";s:9:"base_expr";s:50:"(SmTable.country_id = 1 AND SmTable.state_id = 10)";s:8:"sub_tree";a:7:{i:0;a:5:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:18:"SmTable.country_id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:10:"country_id";}}s:8:"sub_tree";b:0;s:8:"position";i:187;}i:1;a:4:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;s:8:"position";i:206;}i:2;a:4:{s:9:"expr_type";s:5:"const";s:9:"base_expr";s:1:"1";s:8:"sub_tree";b:0;s:8:"position";i:208;}i:3;a:4:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:3:"AND";s:8:"sub_tree";b:0;s:8:"position";i:210;}i:4;a:5:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:16:"SmTable.state_id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:8:"state_id";}}s:8:"sub_tree";b:0;s:8:"position";i:214;}i:5;a:4:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;s:8:"position";i:231;}i:6;a:4:{s:9:"expr_type";s:5:"const";s:9:"base_expr";s:2:"10";s:8:"sub_tree";b:0;s:8:"position";i:233;}}s:8:"position";i:186;}i:5;a:4:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:3:"AND";s:8:"sub_tree";b:0;s:8:"position";i:237;}i:6;a:4:{s:9:"expr_type";s:8:"function";s:9:"base_expr";s:5:"MATCH";s:8:"sub_tree";a:1:{i:0;a:5:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:30:"SmTable.fulltextsearch_keyword";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:22:"fulltextsearch_keyword";}}s:8:"sub_tree";b:0;s:8:"position";i:248;}}s:8:"position";i:241;}i:7;a:5:{s:9:"expr_type";s:8:"function";s:9:"base_expr";s:7:"AGAINST";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:7:"AGAINST";}}s:8:"sub_tree";b:0;s:8:"position";i:280;}i:8;a:4:{s:9:"expr_type";s:15:"match-arguments";s:9:"base_expr";s:18:"('google googles')";s:8:"sub_tree";a:1:{i:0;a:4:{s:9:"expr_type";s:5:"const";s:9:"base_expr";s:16:"'google googles'";s:8:"sub_tree";b:0;s:8:"position";i:289;}}s:8:"position";i:288;}}s:5:"ORDER";a:2:{i:0;a:6:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:13:"SmTable.level";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:5:"level";}}s:8:"sub_tree";b:0;s:9:"direction";s:4:"DESC";s:8:"position";i:316;}i:1;a:5:{s:9:"expr_type";s:5:"alias";s:9:"base_expr";s:13:"keyword_score";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:13:"keyword_score";}}s:9:"direction";s:4:"DESC";s:8:"position";i:336;}}s:5:"LIMIT";a:2:{s:6:"offset";s:1:"0";s:8:"rowcount";s:2:"10";}}
a:5:{s:6:"SELECT";a:3:{i:0;a:6:{s:9:"expr_type";s:8:"reserved";s:5:"alias";b:0;s:9:"base_expr";s:19:"SQL_CALC_FOUND_ROWS";s:8:"sub_tree";b:0;s:5:"delim";s:1:" ";s:8:"position";i:7;}i:1;a:7:{s:9:"expr_type";s:6:"colref";s:5:"alias";b:0;s:9:"base_expr";s:9:"SmTable.*";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:1:"*";}}s:8:"sub_tree";b:0;s:5:"delim";s:1:",";s:8:"position";i:27;}i:2;a:6:{s:9:"expr_type";s:10:"expression";s:5:"alias";a:5:{s:2:"as";b:1;s:4:"name";s:13:"keyword_score";s:9:"base_expr";s:16:"AS keyword_score";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:13:"keyword_score";}}s:8:"position";i:125;}s:9:"base_expr";s:103:"MATCH (SmTable.fulltextsearch_keyword) AGAINST ('google googles' WITH QUERY EXPANSION) AS keyword_score";s:8:"sub_tree";a:3:{i:0;a:4:{s:9:"expr_type";s:8:"function";s:9:"base_expr";s:5:"MATCH";s:8:"sub_tree";a:1:{i:0;a:5:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:30:"SmTable.fulltextsearch_keyword";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:22:"fulltextsearch_keyword";}}s:8:"sub_tree";b:0;s:8:"position";i:45;}}s:8:"position";i:38;}i:1;a:5:{s:9:"expr_type";s:8:"function";s:9:"base_expr";s:7:"AGAINST";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:7:"AGAINST";}}s:8:"sub_tree";b:0;s:8:"position";i:77;}i:2;a:4:{s:9:"expr_type";s:15:"match-arguments";s:9:"base_expr";s:39:"('google googles' WITH QUERY EXPANSION)";s:8:"sub_tree";a:2:{i:0;a:4:{s:9:"expr_type";s:5:"const";s:9:"base_expr";s:16:"'google googles'";s:8:"sub_tree";b:0;s:8:"position";i:86;}i:1;a:4:{s:9:"expr_type";s:10:"match-mode";s:9:"base_expr";s:20:"WITH QUERY EXPANSION";s:8:"sub_tree";b:0;s:8:"position";i:103;}}s:8:"position";i:85;}}s:5:"delim";b:0;s:8:"position";i:38;}}s:4:"FROM";a:1:{i:0;a:11:{s:9:"expr_type";s:5:"table";s:5:"table";s:7:"SmTable";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:7:"SmTable";}}s:5:"alias";b:0;s:5:"hints";b:0;s:9:"join_type";s:4:"JOIN";s:8:"ref_type";b:0;s:10:"ref_clause";b:0;s:9:"base_expr";s:7:"SmTable";s:8:"sub_tree";b:0;s:8:"position";i:147;}}s:5:"WHERE";a:9:{i:0;a:5:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:14:"SmTable.status";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:6:"status";}}s:8:"sub_tree";b:0;s:8:"position";i:161;}i:1;a:4:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;s:8:"position";i:176;}i:2;a:4:{s:9:"expr_type";s:5:"const";s:9:"base_expr";s:3:"'A'";s:8:"sub_tree";b:0;s:8:"position";i:178;}i:3;a:4:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:3:"AND";s:8:"sub_tree";b:0;s:8:"position";i:182;}i:4;a:4:{s:9:"expr_type";s:18:"bracket_expression";s:9:"base_expr";s:50:"(SmTable.country_id = 1 AND SmTable.state_id = 10)";s:8:"sub_tree";a:7:{i:0;a:5:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:18:"SmTable.country_id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:10:"country_id";}}s:8:"sub_tree";b:0;s:8:"position";i:187;}i:1;a:4:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;s:8:"position";i:206;}i:2;a:4:{s:9:"expr_type";s:5:"const";s:9:"base_expr";s:1:"1";s:8:"sub_tree";b:0;s:8:"position";i:208;}i:3;a:4:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:3:"AND";s:8:"sub_tree";b:0;s:8:"position";i:210;}i:4;a:5:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:16:"SmTable.state_id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:8:"state_id";}}s:8:"sub_tree";b:0;s:8:"position";i:214;}i:5;a:4:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;s:8:"position";i:231;}i:6;a:4:{s:9:"expr_type";s:5:"const";s:9:"base_expr";s:2:"10";s:8:"sub_tree";b:0;s:8:"position";i:233;}}s:8:"position";i:186;}i:5;a:4:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:3:"AND";s:8:"sub_tree";b:0;s:8:"position";i:237;}i:6;a:4:{s:9:"expr_type";s:8:"function";s:9:"base_expr";s:5:"MATCH";s:8:"sub_tree";a:1:{i:0;a:5:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:30:"SmTable.fulltextsearch_keyword";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:22:"fulltextsearch_keyword";}}s:8:"sub_tree";b:0;s:8:"position";i:248;}}s:8:"position";i:241;}i:7;a:5:{s:9:"expr_type";s:8:"function";s:9:"base_expr";s:7:"AGAINST";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:7:"AGAINST";}}s:8:"sub_tree";b:0;s:8:"position";i:280;}i:8;a:4:{s:9:"expr_type";s:15:"match-arguments";s:9:"base_expr";s:18:"('google googles')";s:8:"sub_tree";a:1:{i:0;a:4:{s:9:"expr_type";s:5:"const";s:9:"base_expr";s:16:"'google googles'";s:8:"sub_tree";b:0;s:8:"position";i:289;}}s:8:"position";i:288;}}s:5:"ORDER";a:2:{i:0;a:6:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:13:"SmTable.level";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:7:"SmTable";i:1;s:5:"level";}}s:8:"sub_tree";b:0;s:9:"direction";s:4:"DESC";s:8:"position";i:316;}i:1;a:5:{s:9:"expr_type";s:5:"alias";s:9:"base_expr";s:13:"keyword_score";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:13:"keyword_score";}}s:9:"direction";s:4:"DESC";s:8:"position";i:336;}}s:5:"LIMIT";a:2:{s:6:"offset";s:1:"0";s:8:"rowcount";s:2:"10";}}

0 comments on commit c162c64

Please sign in to comment.