Skip to content

Commit 3adf389

Browse files
committed
Recognize question mark as parameter, add formatter for parameters
1 parent 0eb16ef commit 3adf389

File tree

5 files changed

+57
-2
lines changed

5 files changed

+57
-2
lines changed

src/Context.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ public static function isSymbol($str)
389389
return Token::FLAG_SYMBOL_VARIABLE;
390390
} elseif ($str[0] === '`') {
391391
return Token::FLAG_SYMBOL_BACKTICK;
392-
} elseif ($str[0] === ':') {
392+
} elseif ($str[0] === ':' || $str[0] === '?') {
393393
return Token::FLAG_SYMBOL_PARAMETER;
394394
}
395395

src/Lexer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,7 @@ public function parseSymbol()
872872
$flags |= Token::FLAG_SYMBOL_SYSTEM;
873873
}
874874
} elseif ($flags & Token::FLAG_SYMBOL_PARAMETER) {
875-
if ($this->last + 1 < $this->len) {
875+
if ('?' !== $token && $this->last + 1 < $this->len) {
876876
++$this->last;
877877
}
878878
} else {

src/Utils/Formatter.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,13 @@ protected function getDefaultFormats()
225225
'cli' => "\x1b[91m",
226226
'function' => '',
227227
),
228+
array(
229+
'type' => Token::TYPE_SYMBOL,
230+
'flags' => Token::FLAG_SYMBOL_PARAMETER,
231+
'html' => 'class="sql-parameter"',
232+
'cli' => "\x1b[31m",
233+
'function' => '',
234+
),
228235
array(
229236
'type' => Token::TYPE_SYMBOL,
230237
'flags' => 0,

tests/Lexer/TokenTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,12 @@ public function testExtractSymbol()
7474

7575
$tok = new Token('@`foo`', Token::TYPE_SYMBOL, Token::FLAG_SYMBOL_VARIABLE);
7676
$this->assertEquals($tok->value, 'foo');
77+
78+
$tok = new Token(':foo', Token::TYPE_SYMBOL, Token::FLAG_SYMBOL_PARAMETER);
79+
$this->assertEquals($tok->value, 'foo');
80+
81+
$tok = new Token('?', Token::TYPE_SYMBOL, Token::FLAG_SYMBOL_PARAMETER);
82+
$this->assertEquals($tok->value, '?');
7783
}
7884

7985
public function testInlineToken()

tests/Utils/FormatterTest.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,48 @@ public function formatQueries()
506506
"\x1b[0m",
507507
'html' => '<span class="sql-reserved">JOIN</span> tbl2 <span class="sql-reserved">ON</span> c1 = c2',
508508
),
509+
'named param' => array(
510+
'query' => 'select * from tbl where col = :param',
511+
'text' => 'SELECT' . "\n" .
512+
' *' . "\n" .
513+
'FROM' . "\n" .
514+
' tbl' . "\n" .
515+
'WHERE' . "\n" .
516+
' col = :param',
517+
'cli' => "\x1b[35mSELECT" . "\n" .
518+
" \x1b[39m*" . "\n" .
519+
"\x1b[35mFROM" . "\n" .
520+
" \x1b[39mtbl" . "\n" .
521+
"\x1b[35mWHERE" . "\n" .
522+
" \x1b[39mcol = \x1b[31m:param" . "\x1b[0m",
523+
'html' => '<span class="sql-reserved">SELECT</span>' . '<br/>' .
524+
'&nbsp;&nbsp;&nbsp;&nbsp;*' . '<br/>' .
525+
'<span class="sql-reserved">FROM</span>' . '<br/>' .
526+
'&nbsp;&nbsp;&nbsp;&nbsp;tbl' . '<br/>' .
527+
'<span class="sql-reserved">WHERE</span>' . '<br/>' .
528+
'&nbsp;&nbsp;&nbsp;&nbsp;col = <span class="sql-parameter">:param</span>',
529+
),
530+
'anon param' => array(
531+
'query' => 'select * from tbl where col = ?',
532+
'text' => 'SELECT' . "\n" .
533+
' *' . "\n" .
534+
'FROM' . "\n" .
535+
' tbl' . "\n" .
536+
'WHERE' . "\n" .
537+
' col = ?',
538+
'cli' => "\x1b[35mSELECT" . "\n" .
539+
" \x1b[39m*" . "\n" .
540+
"\x1b[35mFROM" . "\n" .
541+
" \x1b[39mtbl" . "\n" .
542+
"\x1b[35mWHERE" . "\n" .
543+
" \x1b[39mcol = \x1b[31m?" . "\x1b[0m",
544+
'html' => '<span class="sql-reserved">SELECT</span>' . '<br/>' .
545+
'&nbsp;&nbsp;&nbsp;&nbsp;*' . '<br/>' .
546+
'<span class="sql-reserved">FROM</span>' . '<br/>' .
547+
'&nbsp;&nbsp;&nbsp;&nbsp;tbl' . '<br/>' .
548+
'<span class="sql-reserved">WHERE</span>' . '<br/>' .
549+
'&nbsp;&nbsp;&nbsp;&nbsp;col = <span class="sql-parameter">?</span>',
550+
),
509551
);
510552
}
511553
}

0 commit comments

Comments
 (0)