ext/flydata/parser/mysql/sql_parser.cpp in flydata-0.5.13 vs ext/flydata/parser/mysql/sql_parser.cpp in flydata-0.5.14
- old
+ new
@@ -60,11 +60,11 @@
} else if (*current == 'N') {
status = null_n;
} else if (*current == '0') {
mark = current; value_len = 1;//mark
status = first_zero;
- } else if ( (*current >= '1' && *current <= '9') || *current == '-' ) {
+ } else if ( (*current >= '1' && *current <= '9') || *current == '-' || *current == '+' || *current == '.') {
mark = current; value_len = 1;//mark
status = number;
} else if (*current == ',') {
status = value;
} else if (*current == ')') {
@@ -125,11 +125,11 @@
}
break;
case number:
if ($DEBUG) std::cout << "number[" << *current << "]: " << std::endl << std::flush;
- if ((*current >= '0' && *current <= '9') || *current == '.') {
+ if ((*current >= '0' && *current <= '9') || *current == '.' || *current == 'e' || *current == 'E' || *current == '-') {
status = number;
} else if (*current == ',') {
ch.value_callback(mark, value_len - 1, true);//value_callback :end_value
mark = 0; value_len = 0; //mark_reset
status = value;
@@ -387,13 +387,15 @@
status = first_char;
} else if (*current == 'Z') {
ch.value_callback("\x1a", 1, false);//value_callback '\Z'
mark = 0; value_len = 0;
status = first_char;
- } else if (*current == '0') {
- ch.value_callback("\0", 1, false);//value_callback '\0'
- mark = 0; value_len = 0;
- status = first_char;
+// Disabled handling of \0 for now in order to keep it compatible with the old
+// implementation.
+// } else if (*current == '0') {
+// ch.value_callback("\0", 1, false);//value_callback '\0'
+// mark = 0; value_len = 0;
+// status = first_char;
} else {
status = following_char;
}
break;