iliaa Mon Oct 29 22:37:44 2007 UTC
Modified files:
/php-src/ext/pdo pdo_sql_parser.re pdo_sql_parser.c
/php-src/ext/pdo/tests bug_43130.phpt
Log:
MFB: Fixed bug #43130 (Bound parameters cannot have - in their name)
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_sql_parser.re?r1=1.40&r2=1.41&diff_format=u
Index: php-src/ext/pdo/pdo_sql_parser.re
diff -u php-src/ext/pdo/pdo_sql_parser.re:1.40
php-src/ext/pdo/pdo_sql_parser.re:1.41
--- php-src/ext/pdo/pdo_sql_parser.re:1.40 Tue Jun 5 22:56:57 2007
+++ php-src/ext/pdo/pdo_sql_parser.re Mon Oct 29 22:37:44 2007
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_sql_parser.re,v 1.40 2007/06/05 22:56:57 iliaa Exp $ */
+/* $Id: pdo_sql_parser.re,v 1.41 2007/10/29 22:37:44 iliaa Exp $ */
#include "php.h"
#include "php_pdo_driver.h"
@@ -46,7 +46,7 @@
s->tok = cursor;
/*!re2c
- BINDCHR = [:][a-zA-Z0-9_]+;
+ BINDCHR = [:][a-zA-Z0-9_-]+;
QUESTION = [?];
SPECIALS = [:?"'];
EOF = [\000];
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_sql_parser.c?r1=1.54&r2=1.55&diff_format=u
Index: php-src/ext/pdo/pdo_sql_parser.c
diff -u php-src/ext/pdo/pdo_sql_parser.c:1.54
php-src/ext/pdo/pdo_sql_parser.c:1.55
--- php-src/ext/pdo/pdo_sql_parser.c:1.54 Tue Jun 5 22:56:57 2007
+++ php-src/ext/pdo/pdo_sql_parser.c Mon Oct 29 22:37:44 2007
@@ -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"
/*
+----------------------------------------------------------------------+
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_sql_parser.c,v 1.54 2007/06/05 22:56:57 iliaa Exp $ */
+/* $Id: pdo_sql_parser.c,v 1.55 2007/10/29 22:37:44 iliaa Exp $ */
#include "php.h"
#include "php_pdo_driver.h"
@@ -50,189 +50,309 @@
#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"
- {
- YYCTYPE yych;
-
- if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 2) {
- goto yy8;
- }
- if(yych <= 0x00) goto yy11;
- if(yych <= '&') goto yy2;
- if(yych <= '\'') goto yy4;
- if(yych <= '>') goto yy5;
- goto yy6;
+
+#line 55 "ext/pdo/pdo_sql_parser.c"
+{
+ YYCTYPE yych;
+
+ if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
+ yych = *YYCURSOR;
+ switch(yych) {
+ case 0x00: goto yy11;
+ case '"': goto yy2;
+ case '\'': goto yy4;
+ case ':': goto yy5;
+ case '?': goto yy6;
+ default: goto yy8;
+ }
yy2:
- yych = *++YYCURSOR;
- if(yybm[0+yych] & 64) {
- goto yy28;
- }
- if(yych == '"') goto yy26;
- goto yy30;
+ yych = *++YYCURSOR;
+ switch(yych) {
+ case '"': goto yy26;
+ case '\'':
+ case ':':
+ case '?': goto yy28;
+ default: goto yy30;
+ }
yy3:
#line 62 "ext/pdo/pdo_sql_parser.re"
- { SKIP_ONE(PDO_PARSER_TEXT); }
-#line 114 "ext/pdo/pdo_sql_parser.c"
+ { SKIP_ONE(PDO_PARSER_TEXT); }
+#line 81 "ext/pdo/pdo_sql_parser.c"
yy4:
- yych = *++YYCURSOR;
- if(yybm[0+yych] & 16) {
- goto yy19;
- }
- if(yych == '\'') goto yy21;
- goto yy23;
+ yych = *++YYCURSOR;
+ switch(yych) {
+ case '"':
+ case ':':
+ case '?': goto yy19;
+ case '\'': goto yy21;
+ default: goto yy23;
+ }
yy5:
- yych = *++YYCURSOR;
- if(yybm[0+yych] & 4) {
- goto yy13;
- }
- if(yych <= 'Z') {
- if(yych <= '/') goto yy3;
- if(yych <= ':') goto yy16;
- if(yych <= '@') goto yy3;
- goto yy16;
- } else {
- if(yych <= '_') {
- if(yych <= '^') goto yy3;
- goto yy16;
- } else {
- if(yych <= '`') goto yy3;
- if(yych <= 'z') goto yy16;
- goto yy3;
- }
- }
+ yych = *++YYCURSOR;
+ switch(yych) {
+ case '"':
+ case '\'':
+ case ':':
+ case '?': goto yy13;
+ 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 yy3;
+ }
yy6:
- ++YYCURSOR;
- if(yybm[0+(yych = *YYCURSOR)] & 4) {
- goto yy13;
- }
+ ++YYCURSOR;
+ switch((yych = *YYCURSOR)) {
+ case '"':
+ case '\'':
+ case ':':
+ case '?': goto yy13;
+ default: goto yy7;
+ }
+yy7:
#line 61 "ext/pdo/pdo_sql_parser.re"
- { RET(PDO_PARSER_BIND_POS); }
-#line 149 "ext/pdo/pdo_sql_parser.c"
+ { RET(PDO_PARSER_BIND_POS); }
+#line 176 "ext/pdo/pdo_sql_parser.c"
yy8:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 2) {
- goto yy8;
- }
+ ++YYCURSOR;
+ if(YYLIMIT == YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ switch(yych) {
+ case 0x00:
+ case '"':
+ case '\'':
+ case ':':
+ case '?': goto yy10;
+ default: goto yy8;
+ }
+yy10:
#line 63 "ext/pdo/pdo_sql_parser.re"
- { RET(PDO_PARSER_TEXT); }
-#line 159 "ext/pdo/pdo_sql_parser.c"
+ { RET(PDO_PARSER_TEXT); }
+#line 192 "ext/pdo/pdo_sql_parser.c"
yy11:
- ++YYCURSOR;
+ ++YYCURSOR;
#line 64 "ext/pdo/pdo_sql_parser.re"
- { RET(PDO_PARSER_EOI); }
-#line 164 "ext/pdo/pdo_sql_parser.c"
+ { RET(PDO_PARSER_EOI); }
+#line 197 "ext/pdo/pdo_sql_parser.c"
yy13:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 4) {
- goto yy13;
- }
+ ++YYCURSOR;
+ if(YYLIMIT == YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ switch(yych) {
+ case '"':
+ case '\'':
+ case ':':
+ case '?': goto yy13;
+ default: goto yy15;
+ }
+yy15:
#line 59 "ext/pdo/pdo_sql_parser.re"
- { RET(PDO_PARSER_TEXT); }
-#line 174 "ext/pdo/pdo_sql_parser.c"
+ { RET(PDO_PARSER_TEXT); }
+#line 212 "ext/pdo/pdo_sql_parser.c"
yy16:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 8) {
- goto yy16;
- }
+ ++YYCURSOR;
+ if(YYLIMIT == YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ switch(yych) {
+ 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"
- { RET(PDO_PARSER_BIND); }
-#line 184 "ext/pdo/pdo_sql_parser.c"
+ { RET(PDO_PARSER_BIND); }
+#line 287 "ext/pdo/pdo_sql_parser.c"
yy19:
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 16) {
- goto yy19;
- }
- if(yych != '\'') goto yy23;
+ if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ switch(yych) {
+ case '"':
+ case ':':
+ case '?': goto yy19;
+ case '\'': goto yy21;
+ default: goto yy23;
+ }
yy21:
- ++YYCURSOR;
- if(yybm[0+(yych = *YYCURSOR)] & 4) {
- goto yy13;
- }
+ ++YYCURSOR;
+ switch((yych = *YYCURSOR)) {
+ case '"':
+ case '\'':
+ case ':':
+ case '?': goto yy13;
+ default: goto yy22;
+ }
yy22:
#line 58 "ext/pdo/pdo_sql_parser.re"
- { RET(PDO_PARSER_TEXT); }
-#line 200 "ext/pdo/pdo_sql_parser.c"
+ { RET(PDO_PARSER_TEXT); }
+#line 310 "ext/pdo/pdo_sql_parser.c"
yy23:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 32) {
- goto yy23;
- }
- yych = *++YYCURSOR;
- goto yy22;
+ ++YYCURSOR;
+ if(YYLIMIT == YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ switch(yych) {
+ case '\'': goto yy25;
+ default: goto yy23;
+ }
+yy25:
+ yych = *++YYCURSOR;
+ goto yy22;
yy26:
- ++YYCURSOR;
- if(yybm[0+(yych = *YYCURSOR)] & 4) {
- goto yy13;
- }
+ ++YYCURSOR;
+ switch((yych = *YYCURSOR)) {
+ case '"':
+ case '\'':
+ case ':':
+ case '?': goto yy13;
+ default: goto yy27;
+ }
yy27:
#line 57 "ext/pdo/pdo_sql_parser.re"
- { RET(PDO_PARSER_TEXT); }
-#line 218 "ext/pdo/pdo_sql_parser.c"
+ { RET(PDO_PARSER_TEXT); }
+#line 334 "ext/pdo/pdo_sql_parser.c"
yy28:
- if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 64) {
- goto yy28;
- }
- if(yych == '"') goto yy26;
-yy30:
- ++YYCURSOR;
- if(YYLIMIT == YYCURSOR) YYFILL(1);
- yych = *YYCURSOR;
- if(yybm[0+yych] & 128) {
- goto yy30;
- }
- ++YYCURSOR;
- yych = *YYCURSOR;
- goto yy27;
+ if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+ yych = *YYCURSOR;
+ switch(yych) {
+ case '"': goto yy26;
+ case '\'':
+ case ':':
+ case '?': goto yy28;
+ default: goto yy30;
}
+yy30:
+ ++YYCURSOR;
+ if(YYLIMIT == YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ switch(yych) {
+ case '"': goto yy32;
+ default: goto yy30;
+ }
+yy32:
+ ++YYCURSOR;
+ yych = *YYCURSOR;
+ goto yy27;
}
#line 65 "ext/pdo/pdo_sql_parser.re"
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/tests/bug_43130.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/pdo/tests/bug_43130.phpt
diff -u /dev/null php-src/ext/pdo/tests/bug_43130.phpt:1.2
--- /dev/null Mon Oct 29 22:37:44 2007
+++ php-src/ext/pdo/tests/bug_43130.phpt Mon Oct 29 22:37:44 2007
@@ -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"
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php