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

Reply via email to