Skip to content

Commit 8339ac3

Browse files
czoIgrobert.kubac
andauthored
fix #270 (#364)
Co-authored-by: robert.kubac <robert.kubac@farmaprom.pl>
1 parent f0e4645 commit 8339ac3

3 files changed

Lines changed: 23 additions & 2 deletions

File tree

src/PHPSQLParser/processors/FromProcessor.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ protected function processFromExpression(&$parseInfo) {
9494

9595
// we have a reg_expr, so we have to parse it
9696
if ($parseInfo['ref_expr'] !== false) {
97-
$unparsed = $this->splitSQLIntoTokens($parseInfo['ref_expr']);
97+
$unparsed = $this->splitSQLIntoTokens(trim($parseInfo['ref_expr']));
9898

9999
// here we can get a comma separated list
100100
foreach ($unparsed as $k => $v) {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace PHPSQLParser\Test\Creator;
4+
use PHPSQLParser\PHPSQLParser;
5+
use PHPSQLParser\PHPSQLCreator;
6+
7+
class issue270Test extends \PHPUnit\Framework\TestCase
8+
{
9+
public function testIssue319()
10+
{
11+
$sql = 'SELECT * FROM table1 LEFT JOIN table2 USING (id1) LEFT JOIN table3 USING(id2) LEFT JOIN table4 ON table3.id3 = table4.id3';
12+
$createdSql = 'SELECT * FROM table1 LEFT JOIN table2 USING (id1) LEFT JOIN table3 USING (id2) LEFT JOIN table4 ON table3.id3 = table4.id3';
13+
14+
$parser = new PHPSQLParser();
15+
$creator = new PHPSQLCreator();
16+
17+
$parser->parse($sql, true);
18+
19+
$this->assertEquals($createdSql, $creator->create($parser->parsed));
20+
}
21+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
a:2:{s:6:"SELECT";a:3:{i:0;a:6:{s:9:"expr_type";s:6:"colref";s:5:"alias";b:0;s:9:"base_expr";s:8:"a.field1";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"a";i:1;s:6:"field1";}}s:8:"sub_tree";b:0;s:5:"delim";s:1:",";}i:1;a:6:{s:9:"expr_type";s:6:"colref";s:5:"alias";b:0;s:9:"base_expr";s:8:"b.field1";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"b";i:1;s:6:"field1";}}s:8:"sub_tree";b:0;s:5:"delim";s:1:",";}i:2;a:6:{s:9:"expr_type";s:6:"colref";s:5:"alias";b:0;s:9:"base_expr";s:8:"c.field1";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"c";i:1;s:6:"field1";}}s:8:"sub_tree";b:0;s:5:"delim";b:0;}}s:4:"FROM";a:7:{i:0;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:6:"tablea";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:6:"tablea";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:1:"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:1:"a";}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:8:"tablea a";s:8:"sub_tree";b:0;}i:1;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:6:"tableb";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:6:"tableb";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:1:"b";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"b";}}s:9:"base_expr";s:1:"b";}s:5:"hints";b:0;s:9:"join_type";s:4:"LEFT";s:8:"ref_type";s:2:"ON";s:10:"ref_clause";a:3:{i:0;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:5:"b.ida";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"b";i:1;s:3:"ida";}}s:8:"sub_tree";b:0;}i:1;a:3:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;}i:2;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:4:"a.id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"a";i:1;s:2:"id";}}s:8:"sub_tree";b:0;}}s:9:"base_expr";s:24:"tableb b ON b.ida = a.id";s:8:"sub_tree";b:0;}i:2;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:6:"tablec";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:6:"tablec";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:1:"c";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"c";}}s:9:"base_expr";s:1:"c";}s:5:"hints";b:0;s:9:"join_type";s:5:"RIGHT";s:8:"ref_type";s:2:"ON";s:10:"ref_clause";a:3:{i:0;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:5:"c.idb";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"c";i:1;s:3:"idb";}}s:8:"sub_tree";b:0;}i:1;a:3:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;}i:2;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:4:"b.id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"b";i:1;s:2:"id";}}s:8:"sub_tree";b:0;}}s:9:"base_expr";s:24:"tablec c ON c.idb = b.id";s:8:"sub_tree";b:0;}i:3;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:6:"tabled";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:6:"tabled";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:1:"d";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"d";}}s:9:"base_expr";s:1:"d";}s:5:"hints";b:0;s:9:"join_type";s:4:"JOIN";s:8:"ref_type";s:5:"USING";s:10:"ref_clause";a:1:{i:0;a:3:{s:9:"expr_type";s:11:"column-list";s:9:"base_expr";s:1:" ";s:8:"sub_tree";a:1:{i:0;a:3:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:0:"";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:0:{}}}}}}s:9:"base_expr";s:21:"tabled d USING (d_id)";s:8:"sub_tree";b:0;}i:4;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:1:"e";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"e";}}s:5:"alias";b:0;s:5:"hints";b:0;s:9:"join_type";s:5:"RIGHT";s:8:"ref_type";s:2:"ON";s:10:"ref_clause";a:3:{i:0;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:4:"e.id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"e";i:1;s:2:"id";}}s:8:"sub_tree";b:0;}i:1;a:3:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;}i:2;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:6:"a.e_id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"a";i:1;s:4:"e_id";}}s:8:"sub_tree";b:0;}}s:9:"base_expr";s:18:"e on e.id = a.e_id";s:8:"sub_tree";b:0;}i:5;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:1:"e";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"e";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:2:"e2";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:2:"e2";}}s:9:"base_expr";s:2:"e2";}s:5:"hints";b:0;s:9:"join_type";s:4:"LEFT";s:8:"ref_type";s:5:"USING";s:10:"ref_clause";a:1:{i:0;a:3:{s:9:"expr_type";s:11:"column-list";s:9:"base_expr";s:1:" ";s:8:"sub_tree";a:1:{i:0;a:3:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:0:"";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:0:{}}}}}}s:9:"base_expr";s:17:"e e2 using (e_id)";s:8:"sub_tree";b:0;}i:6;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:1:"e";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"e";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:2:"e3";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:2:"e3";}}s:9:"base_expr";s:2:"e3";}s:5:"hints";b:0;s:9:"join_type";s:4:"JOIN";s:8:"ref_type";s:2:"ON";s:10:"ref_clause";a:1:{i:0;a:3:{s:9:"expr_type";s:18:"bracket_expression";s:9:"base_expr";s:19:"(e3.e_id = e2.e_id)";s:8:"sub_tree";a:3:{i:0;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:7:"e3.e_id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:2:"e3";i:1;s:4:"e_id";}}s:8:"sub_tree";b:0;}i:1;a:3:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;}i:2;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:7:"e2.e_id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:2:"e2";i:1;s:4:"e_id";}}s:8:"sub_tree";b:0;}}}}s:9:"base_expr";s:27:"e e3 on (e3.e_id = e2.e_id)";s:8:"sub_tree";b:0;}}}
1+
a:2:{s:6:"SELECT";a:3:{i:0;a:6:{s:9:"expr_type";s:6:"colref";s:5:"alias";b:0;s:9:"base_expr";s:8:"a.field1";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"a";i:1;s:6:"field1";}}s:8:"sub_tree";b:0;s:5:"delim";s:1:",";}i:1;a:6:{s:9:"expr_type";s:6:"colref";s:5:"alias";b:0;s:9:"base_expr";s:8:"b.field1";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"b";i:1;s:6:"field1";}}s:8:"sub_tree";b:0;s:5:"delim";s:1:",";}i:2;a:6:{s:9:"expr_type";s:6:"colref";s:5:"alias";b:0;s:9:"base_expr";s:8:"c.field1";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"c";i:1;s:6:"field1";}}s:8:"sub_tree";b:0;s:5:"delim";b:0;}}s:4:"FROM";a:7:{i:0;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:6:"tablea";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:6:"tablea";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:1:"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:1:"a";}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:8:"tablea a";s:8:"sub_tree";b:0;}i:1;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:6:"tableb";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:6:"tableb";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:1:"b";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"b";}}s:9:"base_expr";s:1:"b";}s:5:"hints";b:0;s:9:"join_type";s:4:"LEFT";s:8:"ref_type";s:2:"ON";s:10:"ref_clause";a:3:{i:0;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:5:"b.ida";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"b";i:1;s:3:"ida";}}s:8:"sub_tree";b:0;}i:1;a:3:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;}i:2;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:4:"a.id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"a";i:1;s:2:"id";}}s:8:"sub_tree";b:0;}}s:9:"base_expr";s:24:"tableb b ON b.ida = a.id";s:8:"sub_tree";b:0;}i:2;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:6:"tablec";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:6:"tablec";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:1:"c";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"c";}}s:9:"base_expr";s:1:"c";}s:5:"hints";b:0;s:9:"join_type";s:5:"RIGHT";s:8:"ref_type";s:2:"ON";s:10:"ref_clause";a:3:{i:0;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:5:"c.idb";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"c";i:1;s:3:"idb";}}s:8:"sub_tree";b:0;}i:1;a:3:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;}i:2;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:4:"b.id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"b";i:1;s:2:"id";}}s:8:"sub_tree";b:0;}}s:9:"base_expr";s:24:"tablec c ON c.idb = b.id";s:8:"sub_tree";b:0;}i:3;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:6:"tabled";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:6:"tabled";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:1:"d";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"d";}}s:9:"base_expr";s:1:"d";}s:5:"hints";b:0;s:9:"join_type";s:4:"JOIN";s:8:"ref_type";s:5:"USING";s:10:"ref_clause";a:1:{i:0;a:3:{s:9:"expr_type";s:11:"column-list";s:9:"base_expr";s:6:"(d_id)";s:8:"sub_tree";a:1:{i:0;a:3:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:4:"d_id";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:4:"d_id";}}}}}}s:9:"base_expr";s:21:"tabled d USING (d_id)";s:8:"sub_tree";b:0;}i:4;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:1:"e";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"e";}}s:5:"alias";b:0;s:5:"hints";b:0;s:9:"join_type";s:5:"RIGHT";s:8:"ref_type";s:2:"ON";s:10:"ref_clause";a:3:{i:0;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:4:"e.id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"e";i:1;s:2:"id";}}s:8:"sub_tree";b:0;}i:1;a:3:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;}i:2;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:6:"a.e_id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:1:"a";i:1;s:4:"e_id";}}s:8:"sub_tree";b:0;}}s:9:"base_expr";s:18:"e on e.id = a.e_id";s:8:"sub_tree";b:0;}i:5;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:1:"e";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"e";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:2:"e2";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:2:"e2";}}s:9:"base_expr";s:2:"e2";}s:5:"hints";b:0;s:9:"join_type";s:4:"LEFT";s:8:"ref_type";s:5:"USING";s:10:"ref_clause";a:1:{i:0;a:3:{s:9:"expr_type";s:11:"column-list";s:9:"base_expr";s:6:"(e_id)";s:8:"sub_tree";a:1:{i:0;a:3:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:4:"e_id";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:4:"e_id";}}}}}}s:9:"base_expr";s:17:"e e2 using (e_id)";s:8:"sub_tree";b:0;}i:6;a:10:{s:9:"expr_type";s:5:"table";s:5:"table";s:1:"e";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:1:"e";}}s:5:"alias";a:4:{s:2:"as";b:0;s:4:"name";s:2:"e3";s:9:"no_quotes";a:2:{s:5:"delim";b:0;s:5:"parts";a:1:{i:0;s:2:"e3";}}s:9:"base_expr";s:2:"e3";}s:5:"hints";b:0;s:9:"join_type";s:4:"JOIN";s:8:"ref_type";s:2:"ON";s:10:"ref_clause";a:1:{i:0;a:3:{s:9:"expr_type";s:18:"bracket_expression";s:9:"base_expr";s:19:"(e3.e_id = e2.e_id)";s:8:"sub_tree";a:3:{i:0;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:7:"e3.e_id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:2:"e3";i:1;s:4:"e_id";}}s:8:"sub_tree";b:0;}i:1;a:3:{s:9:"expr_type";s:8:"operator";s:9:"base_expr";s:1:"=";s:8:"sub_tree";b:0;}i:2;a:4:{s:9:"expr_type";s:6:"colref";s:9:"base_expr";s:7:"e2.e_id";s:9:"no_quotes";a:2:{s:5:"delim";s:1:".";s:5:"parts";a:2:{i:0;s:2:"e2";i:1;s:4:"e_id";}}s:8:"sub_tree";b:0;}}}}s:9:"base_expr";s:27:"e e3 on (e3.e_id = e2.e_id)";s:8:"sub_tree";b:0;}}}

0 commit comments

Comments
 (0)