MFB: Fixed bug #43130 (Bound parameters cannot have - in their name)

This commit is contained in:
Ilia Alshanetsky 2007-10-29 22:37:44 +00:00
parent 18215d9347
commit 38c68da824
3 changed files with 309 additions and 159 deletions

View File

@ -1,4 +1,4 @@
/* Generated by re2c 0.11.0 on Tue Jun 5 18:56:17 2007 */ /* Generated by re2c 0.11.0 on Mon Oct 29 18:37:31 2007 */
#line 1 "ext/pdo/pdo_sql_parser.re" #line 1 "ext/pdo/pdo_sql_parser.re"
/* /*
+----------------------------------------------------------------------+ +----------------------------------------------------------------------+
@ -50,190 +50,310 @@ static int scan(Scanner *s)
#line 54 "ext/pdo/pdo_sql_parser.re" #line 54 "ext/pdo/pdo_sql_parser.re"
{
static unsigned char yybm[] = {
160, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 52, 162, 162, 162, 162, 196,
162, 162, 162, 162, 162, 162, 162, 162,
170, 170, 170, 170, 170, 170, 170, 170,
170, 170, 244, 162, 162, 162, 162, 244,
162, 170, 170, 170, 170, 170, 170, 170,
170, 170, 170, 170, 170, 170, 170, 170,
170, 170, 170, 170, 170, 170, 170, 170,
170, 170, 170, 162, 162, 162, 162, 170,
162, 170, 170, 170, 170, 170, 170, 170,
170, 170, 170, 170, 170, 170, 170, 170,
170, 170, 170, 170, 170, 170, 170, 170,
170, 170, 170, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162,
};
#line 90 "ext/pdo/pdo_sql_parser.c" #line 55 "ext/pdo/pdo_sql_parser.c"
{ {
YYCTYPE yych; YYCTYPE yych;
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR; yych = *YYCURSOR;
if(yybm[0+yych] & 2) { switch(yych) {
goto yy8; case 0x00: goto yy11;
case '"': goto yy2;
case '\'': goto yy4;
case ':': goto yy5;
case '?': goto yy6;
default: goto yy8;
} }
if(yych <= 0x00) goto yy11;
if(yych <= '&') goto yy2;
if(yych <= '\'') goto yy4;
if(yych <= '>') goto yy5;
goto yy6;
yy2: yy2:
yych = *++YYCURSOR; yych = *++YYCURSOR;
if(yybm[0+yych] & 64) { switch(yych) {
goto yy28; case '"': goto yy26;
case '\'':
case ':':
case '?': goto yy28;
default: goto yy30;
} }
if(yych == '"') goto yy26;
goto yy30;
yy3: yy3:
#line 62 "ext/pdo/pdo_sql_parser.re" #line 62 "ext/pdo/pdo_sql_parser.re"
{ SKIP_ONE(PDO_PARSER_TEXT); } { SKIP_ONE(PDO_PARSER_TEXT); }
#line 114 "ext/pdo/pdo_sql_parser.c" #line 81 "ext/pdo/pdo_sql_parser.c"
yy4: yy4:
yych = *++YYCURSOR; yych = *++YYCURSOR;
if(yybm[0+yych] & 16) { switch(yych) {
goto yy19; case '"':
case ':':
case '?': goto yy19;
case '\'': goto yy21;
default: goto yy23;
} }
if(yych == '\'') goto yy21;
goto yy23;
yy5: yy5:
yych = *++YYCURSOR; yych = *++YYCURSOR;
if(yybm[0+yych] & 4) { switch(yych) {
goto yy13; case '"':
} case '\'':
if(yych <= 'Z') { case ':':
if(yych <= '/') goto yy3; case '?': goto yy13;
if(yych <= ':') goto yy16; case '-':
if(yych <= '@') goto yy3; case '0':
goto yy16; case '1':
} else { case '2':
if(yych <= '_') { case '3':
if(yych <= '^') goto yy3; case '4':
goto yy16; case '5':
} else { case '6':
if(yych <= '`') goto yy3; case '7':
if(yych <= 'z') goto yy16; case '8':
goto yy3; case '9':
} case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
case 'M':
case 'N':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'S':
case 'T':
case 'U':
case 'V':
case 'W':
case 'X':
case 'Y':
case 'Z':
case '_':
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
case 'o':
case 'p':
case 'q':
case 'r':
case 's':
case 't':
case 'u':
case 'v':
case 'w':
case 'x':
case 'y':
case 'z': goto yy16;
default: goto yy3;
} }
yy6: yy6:
++YYCURSOR; ++YYCURSOR;
if(yybm[0+(yych = *YYCURSOR)] & 4) { switch((yych = *YYCURSOR)) {
goto yy13; case '"':
case '\'':
case ':':
case '?': goto yy13;
default: goto yy7;
} }
yy7:
#line 61 "ext/pdo/pdo_sql_parser.re" #line 61 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_BIND_POS); } { RET(PDO_PARSER_BIND_POS); }
#line 149 "ext/pdo/pdo_sql_parser.c" #line 176 "ext/pdo/pdo_sql_parser.c"
yy8: yy8:
++YYCURSOR; ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
if(yybm[0+yych] & 2) { switch(yych) {
goto yy8; case 0x00:
case '"':
case '\'':
case ':':
case '?': goto yy10;
default: goto yy8;
} }
yy10:
#line 63 "ext/pdo/pdo_sql_parser.re" #line 63 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_TEXT); } { RET(PDO_PARSER_TEXT); }
#line 159 "ext/pdo/pdo_sql_parser.c" #line 192 "ext/pdo/pdo_sql_parser.c"
yy11: yy11:
++YYCURSOR; ++YYCURSOR;
#line 64 "ext/pdo/pdo_sql_parser.re" #line 64 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_EOI); } { RET(PDO_PARSER_EOI); }
#line 164 "ext/pdo/pdo_sql_parser.c" #line 197 "ext/pdo/pdo_sql_parser.c"
yy13: yy13:
++YYCURSOR; ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
if(yybm[0+yych] & 4) { switch(yych) {
goto yy13; case '"':
case '\'':
case ':':
case '?': goto yy13;
default: goto yy15;
} }
yy15:
#line 59 "ext/pdo/pdo_sql_parser.re" #line 59 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_TEXT); } { RET(PDO_PARSER_TEXT); }
#line 174 "ext/pdo/pdo_sql_parser.c" #line 212 "ext/pdo/pdo_sql_parser.c"
yy16: yy16:
++YYCURSOR; ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
if(yybm[0+yych] & 8) { switch(yych) {
goto yy16; case '-':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
case 'M':
case 'N':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'S':
case 'T':
case 'U':
case 'V':
case 'W':
case 'X':
case 'Y':
case 'Z':
case '_':
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
case 'o':
case 'p':
case 'q':
case 'r':
case 's':
case 't':
case 'u':
case 'v':
case 'w':
case 'x':
case 'y':
case 'z': goto yy16;
default: goto yy18;
} }
yy18:
#line 60 "ext/pdo/pdo_sql_parser.re" #line 60 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_BIND); } { RET(PDO_PARSER_BIND); }
#line 184 "ext/pdo/pdo_sql_parser.c" #line 287 "ext/pdo/pdo_sql_parser.c"
yy19: yy19:
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR; yych = *YYCURSOR;
if(yybm[0+yych] & 16) { switch(yych) {
goto yy19; case '"':
case ':':
case '?': goto yy19;
case '\'': goto yy21;
default: goto yy23;
} }
if(yych != '\'') goto yy23;
yy21: yy21:
++YYCURSOR; ++YYCURSOR;
if(yybm[0+(yych = *YYCURSOR)] & 4) { switch((yych = *YYCURSOR)) {
goto yy13; case '"':
case '\'':
case ':':
case '?': goto yy13;
default: goto yy22;
} }
yy22: yy22:
#line 58 "ext/pdo/pdo_sql_parser.re" #line 58 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_TEXT); } { RET(PDO_PARSER_TEXT); }
#line 200 "ext/pdo/pdo_sql_parser.c" #line 310 "ext/pdo/pdo_sql_parser.c"
yy23: yy23:
++YYCURSOR; ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
if(yybm[0+yych] & 32) { switch(yych) {
goto yy23; case '\'': goto yy25;
default: goto yy23;
} }
yy25:
yych = *++YYCURSOR; yych = *++YYCURSOR;
goto yy22; goto yy22;
yy26: yy26:
++YYCURSOR; ++YYCURSOR;
if(yybm[0+(yych = *YYCURSOR)] & 4) { switch((yych = *YYCURSOR)) {
goto yy13; case '"':
case '\'':
case ':':
case '?': goto yy13;
default: goto yy27;
} }
yy27: yy27:
#line 57 "ext/pdo/pdo_sql_parser.re" #line 57 "ext/pdo/pdo_sql_parser.re"
{ RET(PDO_PARSER_TEXT); } { RET(PDO_PARSER_TEXT); }
#line 218 "ext/pdo/pdo_sql_parser.c" #line 334 "ext/pdo/pdo_sql_parser.c"
yy28: yy28:
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR; yych = *YYCURSOR;
if(yybm[0+yych] & 64) { switch(yych) {
goto yy28; case '"': goto yy26;
case '\'':
case ':':
case '?': goto yy28;
default: goto yy30;
} }
if(yych == '"') goto yy26;
yy30: yy30:
++YYCURSOR; ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
if(yybm[0+yych] & 128) { switch(yych) {
goto yy30; case '"': goto yy32;
default: goto yy30;
} }
yy32:
++YYCURSOR; ++YYCURSOR;
yych = *YYCURSOR; yych = *YYCURSOR;
goto yy27; goto yy27;
} }
}
#line 65 "ext/pdo/pdo_sql_parser.re" #line 65 "ext/pdo/pdo_sql_parser.re"
} }

View File

@ -46,7 +46,7 @@ static int scan(Scanner *s)
s->tok = cursor; s->tok = cursor;
/*!re2c /*!re2c
BINDCHR = [:][a-zA-Z0-9_]+; BINDCHR = [:][a-zA-Z0-9_-]+;
QUESTION = [?]; QUESTION = [?];
SPECIALS = [:?"']; SPECIALS = [:?"'];
EOF = [\000]; EOF = [\000];

View File

@ -0,0 +1,30 @@
--TEST--
PDO Common: Bug #43130 (Bound parameters cannot have - in their name)
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded('pdo')) die('skip');
$dir = getenv('REDIR_TEST_DIR');
if (false == $dir) die('skip no driver');
require_once $dir . 'pdo_test.inc';
PDOTest::skip();
?>
--FILE--
<?php
if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/');
require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
$db = PDOTest::factory();
$db->exec("CREATE TABLE test (a varchar(100), b varchar(100), c varchar(100))");
for ($i = 0; $i < 5; $i++) {
$db->exec("INSERT INTO test (a,b,c) VALUES('test".$i."','".$i."','".$i."')");
}
$stmt = $db->prepare("SELECT a FROM test WHERE b=:id-value");
$stmt->bindParam(':id-value', $id);
$id = '1';
$stmt->execute();
var_dump($stmt->fetch(PDO::FETCH_COLUMN));
?>
--EXPECT--
string(5) "test1"