-/* Generated by re2c 0.5 on Thu May 20 12:43:08 2004 */
+/* Generated by re2c 0.5 on Thu May 20 13:12:59 2004 */
#line 1 "/home/george/src/pecl/pdo/pdo_sql_parser.re"
/*
+----------------------------------------------------------------------+
#define PDO_PARSER_TEXT 1
#define PDO_PARSER_BIND 2
-#define PDO_PARSER_EOI 3
+#define PDO_PARSER_BIND_POS 3
+#define PDO_PARSER_EOI 4
#define RET(i) {s->cur = cursor; return i; }
char *cursor = s->cur;
std:
s->tok = cursor;
- #line 51
+ #line 54
{
YYCTYPE yych;
unsigned int yyaccept;
static unsigned char yybm[] = {
- 0, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 0, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 128, 160, 160, 160, 160, 160,
- 160, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 160, 32, 160, 160, 224,
- 160, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160,
+ 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;
yy1: ++YYCURSOR;
yy0:
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
- if(yybm[0+yych] & 32) goto yy5;
- if(yych <= '\000') goto yy8;
- if(yych >= ':') goto yy4;
+ if(yybm[0+yych] & 8) goto yy8;
+ if(yych <= '\000') goto yy11;
+ if(yych <= '&') goto yy2;
+ if(yych <= '\'') goto yy4;
+ if(yych <= '>') goto yy5;
+ goto yy6;
yy2: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
- if(yych >= '\001') goto yy14;
+ if(yych >= '\001') goto yy24;
yy3:
-#line 56
+#line 61
{ RET(PDO_PARSER_TEXT); }
-yy4: yych = *++YYCURSOR;
- if(yybm[0+yych] & 64) goto yy10;
+yy4: yyaccept = 0;
+ yych = *(YYMARKER = ++YYCURSOR);
+ if(yych <= '\000') goto yy3;
+ if(yych == '"') goto yy3;
+ goto yy17;
+yy5: yych = *++YYCURSOR;
+ if(yybm[0+yych] & 16) goto yy13;
goto yy3;
-yy5: ++YYCURSOR;
+yy6: yych = *++YYCURSOR;
+yy7:
+#line 60
+ { RET(PDO_PARSER_BIND_POS); }
+yy8: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
-yy6: if(yybm[0+yych] & 32) goto yy5;
-yy7:
-#line 57
+yy9: if(yybm[0+yych] & 8) goto yy8;
+yy10:
+#line 62
{ RET(PDO_PARSER_TEXT); }
-yy8: yych = *++YYCURSOR;
-yy9:
-#line 58
+yy11: yych = *++YYCURSOR;
+yy12:
+#line 63
{ RET(PDO_PARSER_EOI); }
-yy10: ++YYCURSOR;
+yy13: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
-yy11: if(yybm[0+yych] & 64) goto yy10;
-yy12:
-#line 55
+yy14: if(yybm[0+yych] & 16) goto yy13;
+yy15:
+#line 59
{ RET(PDO_PARSER_BIND); }
-yy13: ++YYCURSOR;
+yy16: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
-yy14: if(yybm[0+yych] & 128) goto yy13;
- if(yych <= '\000') goto yy15;
- if(yych <= '[') goto yy17;
- goto yy16;
-yy15: YYCURSOR = YYMARKER;
+yy17: if(yybm[0+yych] & 32) goto yy16;
+ if(yych <= '&') goto yy18;
+ if(yych <= '\'') goto yy19;
+ goto yy22;
+yy18: YYCURSOR = YYMARKER;
switch(yyaccept){
+ case 1: goto yy21;
case 0: goto yy3;
}
-yy16: ++YYCURSOR;
+yy19: yyaccept = 1;
+ YYMARKER = ++YYCURSOR;
+ if(YYLIMIT == YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+yy20: if(yybm[0+yych] & 32) goto yy16;
+ if(yych <= '&') goto yy21;
+ if(yych <= '\'') goto yy19;
+ goto yy22;
+yy21:
+#line 58
+ { RET(PDO_PARSER_TEXT); }
+yy22: ++YYCURSOR;
+ if(YYLIMIT == YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+ if(yych == '\'') goto yy16;
+ goto yy18;
+yy23: ++YYCURSOR;
+ if(YYLIMIT == YYCURSOR) YYFILL(1);
+ yych = *YYCURSOR;
+yy24: if(yybm[0+yych] & 128) goto yy23;
+ if(yych <= '\000') goto yy18;
+ if(yych <= '[') goto yy26;
+yy25: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- if(yych == '"') goto yy13;
- goto yy15;
-yy17: yych = *++YYCURSOR;
-yy18:
-#line 54
+ if(yych == '"') goto yy23;
+ goto yy18;
+yy26: yych = *++YYCURSOR;
+yy27:
+#line 57
{ RET(PDO_PARSER_TEXT); }
}
-#line 59
+#line 64
}
if(!params) {
/* error */
efree(*outquery);
- return 0;
+ return (int) (s.cur - inquery);
}
/* lookup bind first via hash and then index */
/* stupid keys need to be null-terminated, even though we know their length */
else {
/* error and cleanup */
efree(*outquery);
- return 0;
+ return (int) (s.cur - inquery);
+ }
+ bindno++;
+ }
+ else if(t == PDO_PARSER_BIND_POS) {
+ if(!params) {
+ /* error */
+ efree(*outquery);
+ return (int) (s.cur - inquery);
+ }
+ /* lookup bind by index */
+ if(SUCCESS == zend_hash_index_find(params, bindno, (void **)¶m))
+ {
+ char *quotedstr;
+ int quotedstrlen;
+ /* currently everything is a string here */
+
+ /* quote the bind value if necessary */
+ if(stmt->dbh->methods->quoter(stmt->dbh, Z_STRVAL_P(param->parameter),
+ Z_STRLEN_P(param->parameter), "edstr, "edstrlen TSRMLS_CC))
+ {
+ memcpy(ptr, quotedstr, quotedstrlen);
+ ptr += quotedstrlen;
+ *outquery_len += quotedstrlen;
+ efree(quotedstr);
+ } else {
+ memcpy(ptr, Z_STRVAL_P(param->parameter), Z_STRLEN_P(param->parameter));
+ ptr += Z_STRLEN_P(param->parameter);
+ *outquery_len += (Z_STRLEN_P(param->parameter));
+ }
+ }
+ else {
+ /* error and cleanup */
+ efree(*outquery);
+ return (int) (s.cur - inquery);
}
bindno++;
- }
+ }
}
*ptr = '\0';
- return 1;
+ return 0;
}
/*