diff options
author | Wez Furlong <wez@php.net> | 2005-07-08 15:24:42 +0000 |
---|---|---|
committer | Wez Furlong <wez@php.net> | 2005-07-08 15:24:42 +0000 |
commit | 206c7b8372ce32c2f2236a9286523eeb3236e2ba (patch) | |
tree | 328c8516110e7007b07f8157a8d62efaea6f9534 /ext/pdo/pdo_sql_parser.c | |
parent | ab1ba644dbf09da5f7683d1e76a1ac4b56690f30 (diff) | |
download | php-git-206c7b8372ce32c2f2236a9286523eeb3236e2ba.tar.gz |
And the generated version of the parser
Diffstat (limited to 'ext/pdo/pdo_sql_parser.c')
-rw-r--r-- | ext/pdo/pdo_sql_parser.c | 288 |
1 files changed, 194 insertions, 94 deletions
diff --git a/ext/pdo/pdo_sql_parser.c b/ext/pdo/pdo_sql_parser.c index 1b59014489..2704a3bbcd 100644 --- a/ext/pdo/pdo_sql_parser.c +++ b/ext/pdo/pdo_sql_parser.c @@ -1,5 +1,5 @@ -/* Generated by re2c 0.9.6 on Thu Apr 14 18:29:11 2005 */ -#line 1 "pdo_sql_parser.re" +/* Generated by re2c 0.9.3 on Fri Jul 8 08:01:28 2005 */ +#line 1 "../php5-HEAD/ext/pdo/pdo_sql_parser.re" /* +----------------------------------------------------------------------+ | PHP Version 5 | @@ -46,7 +46,7 @@ static int scan(Scanner *s) char *cursor = s->cur; std: s->tok = cursor; - #line 55 "pdo_sql_parser.re" + #line 55 "../php5-HEAD/ext/pdo/pdo_sql_parser.re" @@ -54,117 +54,202 @@ static int scan(Scanner *s) { YYCTYPE yych; unsigned int yyaccept; - static unsigned char yybm[] = { - 0, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 0, 168, 168, 168, 168, 192, - 168, 168, 168, 168, 168, 168, 168, 168, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 160, 168, 168, 168, 168, 160, - 168, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 168, 8, 168, 168, 184, - 168, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, - }; goto yy0; - ++YYCURSOR; +yy1: ++YYCURSOR; yy0: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - if(yybm[0+yych] & 8) { - goto yy8; + switch(yych){ + case '\000': 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: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych >= 0x01) goto yy24; + if(yych >= '\001') goto yy24; goto yy3; yy3: -#line 62 "pdo_sql_parser.re" +#line 62 "../php5-HEAD/ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 65 "<stdout>" +#line 31 "<stdout>" yy4: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych <= 0x00) goto yy3; - if(yych == '"') goto yy3; - goto yy17; + switch(yych){ + case '\000': case '"': goto yy3; + default: goto yy17; + } yy5: yych = *++YYCURSOR; - if(yybm[0+yych] & 16) { - goto yy13; + switch(yych){ + 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 yy13; + default: goto yy3; } - goto yy3; yy6: ++YYCURSOR; goto yy7; yy7: -#line 61 "pdo_sql_parser.re" +#line 61 "../php5-HEAD/ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_BIND_POS); } -#line 81 "<stdout>" +#line 107 "<stdout>" yy8: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; goto yy9; -yy9: if(yybm[0+yych] & 8) { - goto yy8; +yy9: switch(yych){ + case '\000': case '"': case '\'': case ':': case '?': goto yy10; + default: goto yy8; } - goto yy10; yy10: -#line 63 "pdo_sql_parser.re" +#line 63 "../php5-HEAD/ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 94 "<stdout>" +#line 120 "<stdout>" yy11: ++YYCURSOR; goto yy12; yy12: -#line 64 "pdo_sql_parser.re" +#line 64 "../php5-HEAD/ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_EOI); } -#line 100 "<stdout>" +#line 126 "<stdout>" yy13: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; goto yy14; -yy14: if(yybm[0+yych] & 16) { - goto yy13; +yy14: switch(yych){ + 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 yy13; + default: goto yy15; } - goto yy15; yy15: -#line 60 "pdo_sql_parser.re" +#line 60 "../php5-HEAD/ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_BIND); } -#line 113 "<stdout>" +#line 198 "<stdout>" yy16: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; goto yy17; -yy17: if(yybm[0+yych] & 32) { - goto yy16; +yy17: switch(yych){ + case '\000': case '"': goto yy18; + case '\'': goto yy19; + case '\\': goto yy22; + default: goto yy16; } - if(yych <= '&') goto yy18; - if(yych <= '\'') goto yy19; - goto yy22; yy18: YYCURSOR = YYMARKER; switch(yyaccept){ case 1: goto yy21; @@ -175,44 +260,48 @@ yy19: yyaccept = 1; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; goto yy20; -yy20: if(yybm[0+yych] & 32) { - goto yy16; +yy20: switch(yych){ + case '\000': case '"': goto yy21; + case '\'': goto yy19; + case '\\': goto yy22; + default: goto yy16; } - if(yych <= '&') goto yy21; - if(yych <= '\'') goto yy19; - goto yy22; yy21: -#line 59 "pdo_sql_parser.re" +#line 59 "../php5-HEAD/ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 144 "<stdout>" +#line 229 "<stdout>" yy22: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == '\'') goto yy16; - goto yy18; + switch(yych){ + case '\'': goto yy16; + default: goto yy18; + } yy23: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; goto yy24; -yy24: if(yybm[0+yych] & 128) { - goto yy23; +yy24: switch(yych){ + case '\000': goto yy18; + case '"': goto yy26; + case '\\': goto yy25; + default: goto yy23; } - if(yych <= 0x00) goto yy18; - if(yych <= '[') goto yy26; - goto yy25; yy25: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == '"') goto yy23; - goto yy18; + switch(yych){ + case '"': goto yy23; + default: goto yy18; + } yy26: ++YYCURSOR; goto yy27; yy27: -#line 58 "pdo_sql_parser.re" +#line 58 "../php5-HEAD/ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 173 "<stdout>" +#line 262 "<stdout>" } -#line 65 "pdo_sql_parser.re" +#line 65 "../php5-HEAD/ext/pdo/pdo_sql_parser.re" } @@ -281,12 +370,22 @@ PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, return -1; } - if (stmt->supports_placeholders == query_type) { + + if (stmt->supports_placeholders == query_type && !stmt->named_rewrite_template) { /* query matches native syntax */ ret = 0; goto clean_up; } + if (stmt->named_rewrite_template) { + /* magic/hack. + * We we pretend that the query was positional even if + * it was named so that we fall into the + * named rewrite case below. Not too pretty, + * but it works. */ + query_type = PDO_PLACEHOLDER_POSITIONAL; + } + params = stmt->bound_params; /* Do we have placeholders but no bound params */ @@ -416,11 +515,12 @@ rewrite: } else if (query_type == PDO_PLACEHOLDER_POSITIONAL) { /* rewrite ? to :pdoX */ char idxbuf[32]; + const char *tmpl = stmt->named_rewrite_template ? stmt->named_rewrite_template : ":pdo%d"; newbuffer_len = inquery_len; for (plc = placeholders; plc; plc = plc->next) { - snprintf(idxbuf, sizeof(idxbuf), ":pdo%d", plc->bindno); + snprintf(idxbuf, sizeof(idxbuf), tmpl, plc->bindno + 1); plc->quoted = estrdup(idxbuf); plc->qlen = strlen(plc->quoted); plc->freeq = 1; |