[PHP-CVS] cvs: php-src(PHP_5_1) /ext/pdo pdo_sql_parser.c pdo_sql_parser.re
iliaa Wed Jan 25 16:35:23 2006 UTC Modified files: (Branch: PHP_5_1) /php-src/ext/pdopdo_sql_parser.re pdo_sql_parser.c Log: Properly rewrite queries where a bound parameter appears more then once. http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_sql_parser.re?r1=1.28.2.3&r2=1.28.2.4&diff_format=u Index: php-src/ext/pdo/pdo_sql_parser.re diff -u php-src/ext/pdo/pdo_sql_parser.re:1.28.2.3 php-src/ext/pdo/pdo_sql_parser.re:1.28.2.4 --- php-src/ext/pdo/pdo_sql_parser.re:1.28.2.3 Sun Jan 1 12:26:08 2006 +++ php-src/ext/pdo/pdo_sql_parser.re Wed Jan 25 16:35:23 2006 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: pdo_sql_parser.re,v 1.28.2.3 2006/01/01 12:26:08 sniper Exp $ */ +/* $Id: pdo_sql_parser.re,v 1.28.2.4 2006/01/25 16:35:23 iliaa Exp $ */ #include "php.h" #include "php_pdo_driver.h" @@ -287,15 +287,25 @@ } for (plc = placeholders; plc; plc = plc->next) { - snprintf(idxbuf, sizeof(idxbuf), tmpl, plc->bindno + 1); + int skip_map = 0; + char *p; + name = estrndup(plc->pos, plc->len); + + /* check if bound parameter is already available */ + if (!strcmp(name, "?") || zend_hash_find(stmt->bound_param_map, name, plc->len + 1, (void**) &p) == FAILURE) { + snprintf(idxbuf, sizeof(idxbuf), tmpl, plc->bindno + 1); + } else { + memset(idxbuf, 0, sizeof(idxbuf)); + memcpy(idxbuf, p, sizeof(idxbuf)); + skip_map = 1; + } + plc->quoted = estrdup(idxbuf); plc->qlen = strlen(plc->quoted); plc->freeq = 1; newbuffer_len += plc->qlen; - name = estrndup(plc->pos, plc->len); - - if (stmt->named_rewrite_template) { + if (!skip_map && stmt->named_rewrite_template) { /* create a mapping */ zend_hash_update(stmt->bound_param_map, name, plc->len + 1, idxbuf, plc->qlen + 1, NULL); http://cvs.php.net/viewcvs.cgi/php-src/ext/pdo/pdo_sql_parser.c?r1=1.35.2.5&r2=1.35.2.6&diff_format=u Index: php-src/ext/pdo/pdo_sql_parser.c diff -u php-src/ext/pdo/pdo_sql_parser.c:1.35.2.5 php-src/ext/pdo/pdo_sql_parser.c:1.35.2.6 --- php-src/ext/pdo/pdo_sql_parser.c:1.35.2.5 Sun Jan 1 12:50:11 2006 +++ php-src/ext/pdo/pdo_sql_parser.cWed Jan 25 16:35:23 2006 @@ -1,4 +1,4 @@ -/* Generated by re2c 0.9.11 on Sun Jan 1 14:38:30 2006 */ +/* Generated by re2c 0.9.11 on Wed Jan 25 11:31:13 2006 */ #line 1 "ext/pdo/pdo_sql_parser.re" /* +--+ @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_sql_parser.c,v 1.35.2.5 2006/01/01 12:50:11 sniper Exp $ */ +/* $Id: pdo_sql_parser.c,v 1.35.2.6 2006/01/25 16:35:23 iliaa Exp $ */ #include "php.h" #include "php_pdo_driver.h" @@ -512,15 +512,25 @@ } for (plc = placeholders; plc; plc = plc->next) { - snprintf(idxbuf, sizeof(idxbuf), tmpl, plc->bindno + 1); + int skip_map = 0; + char *p; + name = estrndup(plc->pos, plc->len); + + /* check if bound parameter is already available */ + if (!strcmp(name, "?") || zend_hash_find(stmt->bound_param_map, name, plc->len + 1, (void**) &p) == FAILURE) { + snprintf(idxbuf, sizeof(idxbuf), tmpl, plc->bindno + 1); + } else { + memset(idxbuf, 0, sizeof(idxbuf)); + memcpy(idxbuf, p, sizeof(idxbuf)); + skip_map = 1; + } + plc->quoted = estrdup(idxbuf); plc->qlen = strlen(plc->quoted); plc->freeq = 1; newbuffer_len += plc->qlen; - name = estrndup(plc->pos, plc->len); - - if (stmt->named_rewrite_template) { + if (!skip_map && stmt->named_rewrite_template) { /* create a mapping */ zend_hash_update(stmt->bound_param_map, name, plc->len + 1, idxbuf, plc->qlen + 1, NULL); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_1) /ext/pdo pdo_sql_parser.c
sniper Thu Dec 1 15:28:27 2005 EDT Modified files: (Branch: PHP_5_1) /php-src/ext/pdopdo_sql_parser.c Log: - Fix paths for --enable-gcov usage # re2c -b -o ext/pdo/pdo_sql_parser.c ext/pdo/pdo_sql_parser.re http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_sql_parser.c?r1=1.35.2.2&r2=1.35.2.3&ty=u Index: php-src/ext/pdo/pdo_sql_parser.c diff -u php-src/ext/pdo/pdo_sql_parser.c:1.35.2.2 php-src/ext/pdo/pdo_sql_parser.c:1.35.2.3 --- php-src/ext/pdo/pdo_sql_parser.c:1.35.2.2 Sat Sep 10 16:58:57 2005 +++ php-src/ext/pdo/pdo_sql_parser.cThu Dec 1 15:28:27 2005 @@ -1,4 +1,4 @@ -/* Generated by re2c 0.9.9.rc1 on Sat Sep 10 15:53:03 2005 */ +/* Generated by re2c 0.9.10 on Thu Dec 1 22:27:35 2005 */ #line 1 "ext/pdo/pdo_sql_parser.re" /* +--+ @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_sql_parser.c,v 1.35.2.2 2005/09/10 20:58:57 wez Exp $ */ +/* $Id: pdo_sql_parser.c,v 1.35.2.3 2005/12/01 20:28:27 sniper Exp $ */ #include "php.h" #include "php_pdo_driver.h" @@ -85,7 +85,7 @@ 162, 162, 162, 162, 162, 162, 162, 162, }; -#line 89 "" +#line 89 "ext/pdo/pdo_sql_parser.c" { YYCTYPE yych; unsigned int yyaccept; @@ -113,7 +113,7 @@ yy3: #line 63 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 117 "" +#line 117 "ext/pdo/pdo_sql_parser.c" yy4: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yybm[0+yych] & 16) { @@ -150,7 +150,7 @@ yy7: #line 62 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_BIND_POS); } -#line 154 "" +#line 154 "ext/pdo/pdo_sql_parser.c" yy8: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; @@ -162,13 +162,13 @@ yy10: #line 64 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 166 "" +#line 166 "ext/pdo/pdo_sql_parser.c" yy11: ++YYCURSOR; goto yy12; yy12: #line 65 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_EOI); } -#line 172 "" +#line 172 "ext/pdo/pdo_sql_parser.c" yy13: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; @@ -180,7 +180,7 @@ yy15: #line 60 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 184 "" +#line 184 "ext/pdo/pdo_sql_parser.c" yy16: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; @@ -192,7 +192,7 @@ yy18: #line 61 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_BIND); } -#line 196 "" +#line 196 "ext/pdo/pdo_sql_parser.c" yy19: yyaccept = 1; YYMARKER = ++YYCURSOR; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -218,7 +218,7 @@ yy22: #line 59 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 222 "" +#line 222 "ext/pdo/pdo_sql_parser.c" yy23: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; @@ -250,7 +250,7 @@ yy29: #line 58 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 254 "" +#line 254 "ext/pdo/pdo_sql_parser.c" yy30: yyaccept = 1; YYMARKER = ++YYCURSOR; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src(PHP_5_1) /ext/pdo pdo_sql_parser.c
wez Sat Sep 10 16:58:57 2005 EDT Modified files: (Branch: PHP_5_1) /php-src/ext/pdopdo_sql_parser.c Log: and touch the generated file http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_sql_parser.c?r1=1.35.2.1&r2=1.35.2.2&ty=u Index: php-src/ext/pdo/pdo_sql_parser.c diff -u php-src/ext/pdo/pdo_sql_parser.c:1.35.2.1 php-src/ext/pdo/pdo_sql_parser.c:1.35.2.2 --- php-src/ext/pdo/pdo_sql_parser.c:1.35.2.1 Sat Sep 3 20:48:59 2005 +++ php-src/ext/pdo/pdo_sql_parser.cSat Sep 10 16:58:57 2005 @@ -1,5 +1,5 @@ -/* Generated by re2c 0.9.9 on Sun Sep 4 02:48:16 2005 */ -#line 1 "pdo_sql_parser.re" +/* Generated by re2c 0.9.9.rc1 on Sat Sep 10 15:53:03 2005 */ +#line 1 "ext/pdo/pdo_sql_parser.re" /* +--+ | PHP Version 5| @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_sql_parser.c,v 1.35.2.1 2005/09/04 00:48:59 edink Exp $ */ +/* $Id: pdo_sql_parser.c,v 1.35.2.2 2005/09/10 20:58:57 wez Exp $ */ #include "php.h" #include "php_pdo_driver.h" @@ -46,7 +46,7 @@ char *cursor = s->cur; s->tok = cursor; - #line 55 "pdo_sql_parser.re" + #line 55 "ext/pdo/pdo_sql_parser.re" { @@ -85,7 +85,7 @@ 162, 162, 162, 162, 162, 162, 162, 162, }; -#line 89 "pdo_sql_parser.c" +#line 89 "" { YYCTYPE yych; unsigned int yyaccept; @@ -111,9 +111,9 @@ if(yych == '"') goto yy28; goto yy33; yy3: -#line 63 "pdo_sql_parser.re" +#line 63 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 117 "pdo_sql_parser.c" +#line 117 "" yy4: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yybm[0+yych] & 16) { @@ -148,9 +148,9 @@ } goto yy7; yy7: -#line 62 "pdo_sql_parser.re" +#line 62 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_BIND_POS); } -#line 154 "pdo_sql_parser.c" +#line 154 "" yy8: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; @@ -160,15 +160,15 @@ } goto yy10; yy10: -#line 64 "pdo_sql_parser.re" +#line 64 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 166 "pdo_sql_parser.c" +#line 166 "" yy11: ++YYCURSOR; goto yy12; yy12: -#line 65 "pdo_sql_parser.re" +#line 65 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_EOI); } -#line 172 "pdo_sql_parser.c" +#line 172 "" yy13: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; @@ -178,9 +178,9 @@ } goto yy15; yy15: -#line 60 "pdo_sql_parser.re" +#line 60 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 184 "pdo_sql_parser.c" +#line 184 "" yy16: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; @@ -190,9 +190,9 @@ } goto yy18; yy18: -#line 61 "pdo_sql_parser.re" +#line 61 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_BIND); } -#line 196 "pdo_sql_parser.c" +#line 196 "" yy19: yyaccept = 1; YYMARKER = ++YYCURSOR; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -216,9 +216,9 @@ } goto yy22; yy22: -#line 59 "pdo_sql_parser.re" +#line 59 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 222 "pdo_sql_parser.c" +#line 222 "" yy23: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; @@ -248,9 +248,9 @@ } goto yy29; yy29: -#line 58 "pdo_sql_parser.re" +#line 58 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 254 "pdo_sql_parser.c" +#line 254 "" yy30: yyaccept = 1; YYMARKER = ++YYCURSOR; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -287,7 +287,7 @@ goto yy29; } } -#line 66 "pdo_sql_parser.re" +#line 66 "ext/pdo/pdo_sql_parser.re" } @@ -435,8 +435,6 @@ plc->freeq = 0; break; - case IS_BOOL: - convert_to_long(param->parameter); case IS_LONG: case IS_DOUBLE: convert_to_string(param->parameter); @@ -445,6 +443,8 @@ plc->freeq = 0; break; + case IS_BOOL: + convert_to_long(param->parameter); default: convert_to_string(param->parameter); if (!stmt->dbh->methods->quoter(stmt->dbh, Z_STRV
[PHP-CVS] cvs: php-src(PHP_5_1) /ext/pdo pdo_sql_parser.c
edink Sat Sep 3 20:48:59 2005 EDT Modified files: (Branch: PHP_5_1) /php-src/ext/pdopdo_sql_parser.c Log: touch http://cvs.php.net/diff.php/php-src/ext/pdo/pdo_sql_parser.c?r1=1.35&r2=1.35.2.1&ty=u Index: php-src/ext/pdo/pdo_sql_parser.c diff -u php-src/ext/pdo/pdo_sql_parser.c:1.35 php-src/ext/pdo/pdo_sql_parser.c:1.35.2.1 --- php-src/ext/pdo/pdo_sql_parser.c:1.35 Wed Aug 3 10:07:38 2005 +++ php-src/ext/pdo/pdo_sql_parser.cSat Sep 3 20:48:59 2005 @@ -1,4 +1,4 @@ -/* Generated by re2c 0.9.8 on Mon Jul 18 19:08:15 2005 */ +/* Generated by re2c 0.9.9 on Sun Sep 4 02:48:16 2005 */ #line 1 "pdo_sql_parser.re" /* +--+ @@ -18,7 +18,7 @@ +--+ */ -/* $Id: pdo_sql_parser.c,v 1.35 2005/08/03 14:07:38 sniper Exp $ */ +/* $Id: pdo_sql_parser.c,v 1.35.2.1 2005/09/04 00:48:59 edink Exp $ */ #include "php.h" #include "php_pdo_driver.h" @@ -51,41 +51,41 @@ { static unsigned char yybm[] = { - 0, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 2, 161, 161, 161, 161, 202, - 161, 161, 161, 161, 161, 161, 161, 161, - 165, 165, 165, 165, 165, 165, 165, 165, - 165, 165, 242, 161, 161, 161, 161, 242, - 161, 165, 165, 165, 165, 165, 165, 165, - 165, 165, 165, 165, 165, 165, 165, 165, - 165, 165, 165, 165, 165, 165, 165, 165, - 165, 165, 165, 161, 1, 161, 161, 165, - 161, 165, 165, 165, 165, 165, 165, 165, - 165, 165, 165, 165, 165, 165, 165, 165, - 165, 165, 165, 165, 165, 165, 165, 165, - 165, 165, 165, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, + 0, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 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, 2, 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 89 "" +#line 89 "pdo_sql_parser.c" { YYCTYPE yych; unsigned int yyaccept; @@ -94,7 +94,7 @@ yy0: if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; - if(yybm[0+yych] & 1) { + if(yybm[0+yych] & 2) { goto yy8; } if(yych <= 0x00)goto yy11; @@ -105,31 +105,25 @@ yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yybm[0+yych] & 64) { - goto yy32; + goto yy30; } if(yych <= 0x00)goto yy3; - if(yych == '"') goto yy30; - goto yy35; + if(yych == '"') goto yy28; + goto yy33; yy3: #line 63 "pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line