Changeset: bcee807428ca for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/bcee807428ca
Modified Files:
sql/server/rel_dump.c
sql/test/SQLancer/Tests/sqlancer19.SQL.py
Branch: Jul2021
Log Message:
Parse identifiers correclty too
diffs (66 lines):
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -86,7 +86,7 @@ dump_escape_ident(sql_allocator *sa, con
res = r;
while (*s) {
- if (*s == '"')
+ if (*s == '"' || *s == '\\')
*r++ = '\\';
*r++ = *s++;
}
@@ -717,8 +717,9 @@ skipIdent( char *r, int *pos)
{
if (r[*pos] == '"') {
(*pos)++;
- while(r[*pos] && r[*pos] != '"') {
- if (r[*pos] == '\\' && r[*pos + 1] == '"') /* We send
escaped '"' character, so consider this pair as just one */
+ while (r[*pos] && r[*pos] != '"') {
+ /* We send escaped '"' and '\' characters */
+ if (r[*pos] == '\\' && (r[*pos + 1] == '"' || r[*pos +
1] == '\\'))
(*pos)+=2;
else
(*pos)++;
@@ -729,13 +730,14 @@ skipIdent( char *r, int *pos)
}
}
-static void /* We send escaped '"' character, so remove the escape after
parsing */
+static void
convertIdent(char *r)
{
int i = 0, j = 0;
- while(r[i] && r[i] != '"') {
- if (r[i] == '\\' && r[i + 1] == '"') {
- r[j++] = '"';
+ while (r[i] && r[i] != '"') {
+ /* We send escaped '"' and '\' characters */
+ if (r[i] == '\\' && (r[i + 1] == '"' || r[i + 1] == '\\')) {
+ r[j++] = r[i + 1];
i+=2;
} else {
r[j++] = r[i++];
@@ -1717,7 +1719,7 @@ rel_read(mvc *sql, char *r, int *pos, li
bool inside_identifier = false;
while (r[*pos] && (inside_identifier || r[*pos]
!= '\n')) { /* the input parameters must be parsed after the input relation,
skip them for now */
- if (inside_identifier && r[*pos] ==
'\\' && r[*pos + 1] == '"') {
+ if (inside_identifier && r[*pos] ==
'\\' && (r[*pos + 1] == '"' || r[*pos + 1] == '\\')) {
(*pos)+=2;
} else if (r[*pos] == '"') {
inside_identifier =
!inside_identifier;
diff --git a/sql/test/SQLancer/Tests/sqlancer19.SQL.py
b/sql/test/SQLancer/Tests/sqlancer19.SQL.py
--- a/sql/test/SQLancer/Tests/sqlancer19.SQL.py
+++ b/sql/test/SQLancer/Tests/sqlancer19.SQL.py
@@ -59,6 +59,10 @@ with SQLTestCase() as cli:
.assertSucceeded().assertDataResultMatch([("\\",)])
cli.execute("SELECT r'\\' from rt3;") \
.assertSucceeded().assertDataResultMatch([("\\",)])
+ cli.execute("SELECT 1 as \"ups\\\", 2 as \"\\\", 3 as \"\"\"\", 4 as
\"\"\"\\\", 5 as \"\\\"\"\" from t3;") \
+ .assertSucceeded().assertDataResultMatch([(1,2,3,4,5)])
+ cli.execute("SELECT 1 as \"ups\\\", 2 as \"\\\", 3 as \"\"\"\", 4 as
\"\"\"\\\", 5 as \"\\\"\"\" from rt3;") \
+ .assertSucceeded().assertDataResultMatch([(1,2,3,4,5)])
cli.execute("ROLLBACK;")
cli.execute("""
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list