-/* Generated by re2c 0.9.3 on Sat Feb 12 15:31:40 2005 */
-#line 1 "/home/rei/php_dev/pecl/pdo/pdo_sql_parser.re"
+/* Generated by re2c 0.9.3 on Sun Feb 13 00:25:51 2005 */
+#line 1 "pdo_sql_parser.re"
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
char *cursor = s->cur;
std:
s->tok = cursor;
- #line 54 "/home/rei/php_dev/pecl/pdo/pdo_sql_parser.re"
+ #line 54 "pdo_sql_parser.re"
if(yych >= '\001') goto yy24;
goto yy3;
yy3:
-#line 61 "/home/rei/php_dev/pecl/pdo/pdo_sql_parser.re"
+#line 61 "pdo_sql_parser.re"
{ RET(PDO_PARSER_TEXT); }
#line 63 "<stdout>"
yy4: yyaccept = 0;
yy6: ++YYCURSOR;
goto yy7;
yy7:
-#line 60 "/home/rei/php_dev/pecl/pdo/pdo_sql_parser.re"
+#line 60 "pdo_sql_parser.re"
{ RET(PDO_PARSER_BIND_POS); }
#line 77 "<stdout>"
yy8: ++YYCURSOR;
yy9: if(yybm[0+yych] & 8) goto yy8;
goto yy10;
yy10:
-#line 62 "/home/rei/php_dev/pecl/pdo/pdo_sql_parser.re"
+#line 62 "pdo_sql_parser.re"
{ RET(PDO_PARSER_TEXT); }
#line 88 "<stdout>"
yy11: ++YYCURSOR;
goto yy12;
yy12:
-#line 63 "/home/rei/php_dev/pecl/pdo/pdo_sql_parser.re"
+#line 63 "pdo_sql_parser.re"
{ RET(PDO_PARSER_EOI); }
#line 94 "<stdout>"
yy13: ++YYCURSOR;
yy14: if(yybm[0+yych] & 16) goto yy13;
goto yy15;
yy15:
-#line 59 "/home/rei/php_dev/pecl/pdo/pdo_sql_parser.re"
+#line 59 "pdo_sql_parser.re"
{ RET(PDO_PARSER_BIND); }
#line 105 "<stdout>"
yy16: ++YYCURSOR;
if(yych <= '\'') goto yy19;
goto yy22;
yy21:
-#line 58 "/home/rei/php_dev/pecl/pdo/pdo_sql_parser.re"
+#line 58 "pdo_sql_parser.re"
{ RET(PDO_PARSER_TEXT); }
#line 132 "<stdout>"
yy22: ++YYCURSOR;
yy26: ++YYCURSOR;
goto yy27;
yy27:
-#line 57 "/home/rei/php_dev/pecl/pdo/pdo_sql_parser.re"
+#line 57 "pdo_sql_parser.re"
{ RET(PDO_PARSER_TEXT); }
#line 159 "<stdout>"
}
-#line 64 "/home/rei/php_dev/pecl/pdo/pdo_sql_parser.re"
+#line 64 "pdo_sql_parser.re"
}
params = stmt->bound_params;
/* Do we have placeholders but no bound params */
- if (bindno && !params) {
+ if (bindno && !params && stmt->supports_placeholders == PDO_PLACEHOLDER_NONE) {
pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "no parameters were bound" TSRMLS_CC);
ret = -1;
goto clean_up;
} else {
/* rewrite :name to ? */
+
+ newbuffer_len = inquery_len;
+
+ if (stmt->bound_param_map == NULL) {
+ ALLOC_HASHTABLE(stmt->bound_param_map);
+ zend_hash_init(stmt->bound_param_map, 13, NULL, NULL, 0);
+ }
+
+ for (plc = placeholders; plc; plc = plc->next) {
+ char *name;
+
+ name = estrndup(plc->pos, plc->len);
+ zend_hash_index_update(stmt->bound_param_map, plc->bindno, name, plc->len + 1, NULL);
+ efree(name);
+ plc->quoted = "?";
+ plc->qlen = 1;
+ }
- /* HARD!. We need to remember the mapping and bind those positions. */
- pdo_raise_impl_error(stmt->dbh, stmt, "IM001", "cannot map :name to ? in this version" TSRMLS_CC);
- ret = -1;
+ goto rewrite;
}
clean_up: