Skip to content

Commit 2bf3d1a

Browse files
committed
Merge #276 - add missing options in SET statement
Pull-request: #276 Fixes: #255 Signed-off-by: William Desportes <[email protected]>
2 parents 997dd4a + e763bc7 commit 2bf3d1a

File tree

4 files changed

+122
-2
lines changed

4 files changed

+122
-2
lines changed

src/Statements/SetStatement.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,15 @@ class SetStatement extends Statement
5858
'PASSWORD' => array(
5959
3,
6060
'expr',
61-
)
61+
),
62+
'SESSION' => 3,
63+
'GLOBAL' => 3,
64+
'PERSIST' => 3,
65+
'PERSIST_ONLY' => 3,
66+
'@@SESSION' => 3,
67+
'@@GLOBAL' => 3,
68+
'@@PERSIST' => 3,
69+
'@@PERSIST_ONLY' => 3,
6270
);
6371

6472
public static $END_OPTIONS = array(

tests/Builder/SetStatementTest.php

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,115 @@ public function testBuilderView()
6363
'SET NAMES \'utf8\' DEFAULT',
6464
$stmt->build()
6565
);
66+
67+
/* Assertion 6 */
68+
$query = 'SET sql_mode = \'TRADITIONAL\'';
69+
70+
$parser = new Parser($query);
71+
$stmt = $parser->statements[0];
72+
73+
$this->assertEquals(
74+
'SET sql_mode = \'TRADITIONAL\'',
75+
$stmt->build()
76+
);
77+
78+
/* Assertion 7 */
79+
$query = 'SET SESSION sql_mode = \'TRADITIONAL\'';
80+
81+
$parser = new Parser($query);
82+
$stmt = $parser->statements[0];
83+
84+
$this->assertEquals(
85+
'SET SESSION sql_mode = \'TRADITIONAL\'',
86+
$stmt->build()
87+
);
88+
89+
/* Assertion 8 */
90+
$query = 'SET GLOBAL sql_mode = \'TRADITIONAL\'';
91+
92+
$parser = new Parser($query);
93+
$stmt = $parser->statements[0];
94+
95+
$this->assertEquals(
96+
'SET GLOBAL sql_mode = \'TRADITIONAL\'',
97+
$stmt->build()
98+
);
99+
100+
/* Assertion 9 */
101+
$query = 'SET @@SESSION sql_mode = \'TRADITIONAL\'';
102+
103+
$parser = new Parser($query);
104+
$stmt = $parser->statements[0];
105+
106+
$this->assertEquals(
107+
'SET SESSION sql_mode = \'TRADITIONAL\'',
108+
$stmt->build()
109+
);
110+
111+
/* Assertion 10 */
112+
$query = 'SET @@GLOBAL sql_mode = \'TRADITIONAL\'';
113+
114+
$parser = new Parser($query);
115+
$stmt = $parser->statements[0];
116+
117+
$this->assertEquals(
118+
'SET GLOBAL sql_mode = \'TRADITIONAL\'',
119+
$stmt->build()
120+
);
121+
122+
/* Assertion 11 */
123+
$query = 'SET @@sql_mode = \'TRADITIONAL\'';
124+
125+
$parser = new Parser($query);
126+
$stmt = $parser->statements[0];
127+
128+
$this->assertEquals(
129+
'SET @@sql_mode = \'TRADITIONAL\'',
130+
$stmt->build()
131+
);
132+
133+
/* Assertion 12 */
134+
$query = 'SET PERSIST sql_mode = \'TRADITIONAL\'';
135+
136+
$parser = new Parser($query);
137+
$stmt = $parser->statements[0];
138+
139+
$this->assertEquals(
140+
'SET PERSIST sql_mode = \'TRADITIONAL\'',
141+
$stmt->build()
142+
);
143+
144+
/* Assertion 13 */
145+
$query = 'SET PERSIST_ONLY sql_mode = \'TRADITIONAL\'';
146+
147+
$parser = new Parser($query);
148+
$stmt = $parser->statements[0];
149+
150+
$this->assertEquals(
151+
'SET PERSIST_ONLY sql_mode = \'TRADITIONAL\'',
152+
$stmt->build()
153+
);
154+
155+
/* Assertion 14 */
156+
$query = 'SET @@PERSIST sql_mode = \'TRADITIONAL\'';
157+
158+
$parser = new Parser($query);
159+
$stmt = $parser->statements[0];
160+
161+
$this->assertEquals(
162+
'SET PERSIST sql_mode = \'TRADITIONAL\'',
163+
$stmt->build()
164+
);
165+
166+
/* Assertion 15 */
167+
$query = 'SET @@PERSIST_ONLY sql_mode = \'TRADITIONAL\'';
168+
169+
$parser = new Parser($query);
170+
$stmt = $parser->statements[0];
171+
172+
$this->assertEquals(
173+
'SET PERSIST_ONLY sql_mode = \'TRADITIONAL\'',
174+
$stmt->build()
175+
);
66176
}
67177
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
a:4:{s:5:"query";s:39:"SET CHARSET 'utf8' CHARACTER SET 'utf8'";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:39:"SET CHARSET 'utf8' CHARACTER SET 'utf8'";s:3:"len";i:39;s:4:"last";i:39;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:10:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"SET";s:5:"value";s:3:"SET";s:7:"keyword";s:3:"SET";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:0;}i:1;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:3;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"CHARSET";s:5:"value";s:7:"CHARSET";s:7:"keyword";s:7:"CHARSET";s:4:"type";i:1;s:5:"flags";i:33;s:8:"position";i:4;}i:3;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:11;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"'utf8'";s:5:"value";s:4:"utf8";s:7:"keyword";N;s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:12;}i:5;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:18;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:13:"CHARACTER SET";s:5:"value";s:13:"CHARACTER SET";s:7:"keyword";s:13:"CHARACTER SET";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:19;}i:7;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:32;}i:8;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"'utf8'";s:5:"value";s:4:"utf8";s:7:"keyword";N;s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:33;}i:9;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";N;s:5:"value";N;s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:10;s:3:"idx";i:10;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"parser";O:27:"PhpMyAdmin\SqlParser\Parser":5:{s:4:"list";r:7;s:10:"statements";a:1:{i:0;O:44:"PhpMyAdmin\SqlParser\Statements\SetStatement":4:{s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:2:{i:3;a:4:{s:4:"name";s:7:"CHARSET";s:6:"equals";b:0;s:4:"expr";s:6:"'utf8'";s:5:"value";s:4:"utf8";}i:5;a:4:{s:4:"name";s:13:"CHARACTER SET";s:6:"equals";b:0;s:4:"expr";s:6:"'utf8'";s:5:"value";s:4:"utf8";}}}s:3:"set";a:0:{}s:5:"first";i:0;s:4:"last";i:8;}}s:8:"brackets";i:0;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:1:{i:0;a:3:{i:0;s:37:"This option conflicts with "CHARSET".";i:1;r:51;i:2;i:0;}}}}
1+
a:4:{s:5:"query";s:39:"SET CHARSET 'utf8' CHARACTER SET 'utf8'";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:39:"SET CHARSET 'utf8' CHARACTER SET 'utf8'";s:3:"len";i:39;s:4:"last";i:39;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:10:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:3:"SET";s:5:"value";s:3:"SET";s:7:"keyword";s:3:"SET";s:4:"type";i:1;s:5:"flags";i:11;s:8:"position";i:0;}i:1;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:3;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:7:"CHARSET";s:5:"value";s:7:"CHARSET";s:7:"keyword";s:7:"CHARSET";s:4:"type";i:1;s:5:"flags";i:33;s:8:"position";i:4;}i:3;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:11;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"'utf8'";s:5:"value";s:4:"utf8";s:7:"keyword";N;s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:12;}i:5;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:18;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:13:"CHARACTER SET";s:5:"value";s:13:"CHARACTER SET";s:7:"keyword";s:13:"CHARACTER SET";s:4:"type";i:1;s:5:"flags";i:7;s:8:"position";i:19;}i:7;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:32;}i:8;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"'utf8'";s:5:"value";s:4:"utf8";s:7:"keyword";N;s:4:"type";i:7;s:5:"flags";i:1;s:8:"position";i:33;}i:9;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";N;s:5:"value";N;s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:10;s:3:"idx";i:10;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"parser";O:27:"PhpMyAdmin\SqlParser\Parser":5:{s:4:"list";r:7;s:10:"statements";a:1:{i:0;O:44:"PhpMyAdmin\SqlParser\Statements\SetStatement":5:{s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:2:{i:3;a:4:{s:4:"name";s:7:"CHARSET";s:6:"equals";b:0;s:4:"expr";s:6:"'utf8'";s:5:"value";s:4:"utf8";}i:13;a:4:{s:4:"name";s:13:"CHARACTER SET";s:6:"equals";b:0;s:4:"expr";s:6:"'utf8'";s:5:"value";s:4:"utf8";}}}s:11:"end_options";N;s:3:"set";a:0:{}s:5:"first";i:0;s:4:"last";i:8;}}s:8:"brackets";i:0;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:1:{i:0;a:3:{i:0;s:37:"This option conflicts with "CHARSET".";i:1;r:51;i:2;i:0;}}}}

tools/contexts/MySql80000.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,8 @@ PARTITION (R)
378378
PARTITIONING
379379
PARTITIONS
380380
PASSWORD
381+
PERSIST
382+
PERSIST_ONLY
381383
PHASE
382384
PLUGIN
383385
PLUGIN_DIR

0 commit comments

Comments
 (0)