Skip to content

Commit 3da66cf

Browse files
Copilotmathiasrw
andcommitted
Add double quote and parameterized query tests
Added two new test sections: - Test G: Double quote escaping tests, documenting that AlaSQL treats double quotes in double-quoted strings as literals (not escape sequences), which is correct behavior since double quotes are typically for identifiers in SQL - Test H: Parameterized queries with escaped data, testing round-trip behavior with single quotes, backslashes, and combinations passed as parameters and stored/retrieved from tables All 8 test sections now pass, providing comprehensive coverage of string literal escaping. Co-authored-by: mathiasrw <1063454+mathiasrw@users.noreply.github.com>
1 parent 5cdd8e6 commit 3da66cf

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

test/test489.js

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,85 @@ describe('Test 489 - ASCII with backslash character', function () {
111111
var result = alasql("VALUE OF SELECT '\\\\\\\\''\\\\'''");
112112
assert.equal(result, "\\\\'\\'");
113113
});
114+
115+
it('G) Double quote escaping tests', function () {
116+
// Note: In SQL, double quotes are typically for identifiers, not string literals
117+
// AlaSQL allows both single and double quotes for strings, but only single quote
118+
// doubling works as an escape sequence. Double quotes inside double-quoted strings
119+
// are treated as literal characters, not escape sequences.
120+
121+
// Double-quoted string with literal double quotes (no escaping)
122+
assert.equal(alasql('VALUE OF SELECT """"'), '""');
123+
124+
// Double-quoted string (alternative syntax, no escaping needed)
125+
assert.equal(alasql("VALUE OF SELECT \"\"\"\""), '""');
126+
127+
// Double quote inside single quotes (no escaping, just literal characters)
128+
assert.equal(alasql("VALUE OF SELECT '\"\"'"), '""');
129+
130+
// Single double quote in double-quoted string
131+
assert.equal(alasql('VALUE OF SELECT "x"'), 'x');
132+
133+
// Multiple double quotes are literal in double-quoted strings
134+
assert.equal(alasql('VALUE OF SELECT "a""b"'), 'a""b');
135+
});
136+
137+
it('H) Parameterized queries with escaped data', function () {
138+
// Test how the parser handles escaped characters when data is passed in
139+
140+
// Single quote in parameter
141+
var res1 = alasql("VALUE OF SELECT ?", ["'"]);
142+
assert.equal(res1, "'");
143+
144+
// Double single quotes in parameter
145+
var res2 = alasql("VALUE OF SELECT ?", ["''"]);
146+
assert.equal(res2, "''");
147+
148+
// Backslash in parameter
149+
var res3 = alasql("VALUE OF SELECT ?", ["\\"]);
150+
assert.equal(res3, "\\");
151+
152+
// Multiple backslashes in parameter
153+
var res4 = alasql("VALUE OF SELECT ?", ["\\\\"]);
154+
assert.equal(res4, "\\\\");
155+
156+
// Backslash followed by quote in parameter
157+
var res5 = alasql("VALUE OF SELECT ?", ["\\'"]);
158+
assert.equal(res5, "\\'");
159+
160+
// Double quote in parameter
161+
var res6 = alasql("VALUE OF SELECT ?", ['"']);
162+
assert.equal(res6, '"');
163+
164+
// Double quotes in parameter
165+
var res7 = alasql("VALUE OF SELECT ?", ['""']);
166+
assert.equal(res7, '""');
167+
168+
// Complex: backslash, quote, backslash in parameter
169+
var res8 = alasql("VALUE OF SELECT ?", ["\\'\\"]);
170+
assert.equal(res8, "\\'\\");
171+
172+
// Test round-trip: insert and select with escaped characters
173+
alasql("CREATE TABLE test_escape (val STRING)");
174+
175+
// Insert single quote
176+
alasql("INSERT INTO test_escape VALUES (?)", ["'"]);
177+
var result1 = alasql("SELECT val FROM test_escape");
178+
assert.equal(result1[0].val, "'");
179+
180+
// Clear and insert backslash
181+
alasql("DELETE FROM test_escape");
182+
alasql("INSERT INTO test_escape VALUES (?)", ["\\"]);
183+
var result2 = alasql("SELECT val FROM test_escape");
184+
assert.equal(result2[0].val, "\\");
185+
186+
// Clear and insert backslash + quote
187+
alasql("DELETE FROM test_escape");
188+
alasql("INSERT INTO test_escape VALUES (?)", ["\\'"]);
189+
var result3 = alasql("SELECT val FROM test_escape");
190+
assert.equal(result3[0].val, "\\'");
191+
192+
// Clean up
193+
alasql("DROP TABLE test_escape");
194+
});
114195
});

0 commit comments

Comments
 (0)