Skip to content

Commit 4992fcb

Browse files
committed
Add support for quoted table alias to close #606 (#2306)
You use single quotes or double quotes on table aliases SELECT col AS "Fancy Name" FROM table -- Double quotes ✓ SELECT col AS 'Fancy Name' FROM table -- Single quotes ✓ SELECT col AS `Fancy Name` FROM table -- Backticks (preexisting) SELECT col AS [Fancy Name] FROM table -- Brackets (preexisting)
1 parent e01badd commit 4992fcb

File tree

3 files changed

+97
-4
lines changed

3 files changed

+97
-4
lines changed

src/alasqlparser.jison

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,9 +1220,9 @@ ResultColumn
12201220
| Expression NUMBER
12211221
{ $1.as = $2; $$ = $1;}
12221222
| Expression AS StringValue
1223-
{ $1.as = $3; $$ = $1;}
1223+
{ $1.as = $3.value; $$ = $1;}
12241224
| Expression StringValue
1225-
{ $1.as = $2; $$ = $1;}
1225+
{ $1.as = $2.value; $$ = $1;}
12261226
| Expression
12271227
{ $$ = $1; }
12281228
;

src/alasqlparser.js

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/test606-B.js

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
if (typeof exports === 'object') {
2+
var assert = require('assert');
3+
var alasql = require('..');
4+
}
5+
6+
var test = '606-B';
7+
8+
describe('Test ' + test + ' - Quoted column aliases (double and single quotes)', function () {
9+
before(function () {
10+
alasql('create database test' + test.replace('-', '_'));
11+
alasql('use test' + test.replace('-', '_'));
12+
});
13+
14+
after(function () {
15+
alasql('drop database test' + test.replace('-', '_'));
16+
});
17+
18+
it('A) Double-quoted alias with AS keyword', function () {
19+
var res = alasql('SELECT 1 AS "Fancy Name"');
20+
assert.deepEqual(res, [{'Fancy Name': 1}]);
21+
});
22+
23+
it('B) Double-quoted alias without AS keyword', function () {
24+
var res = alasql('SELECT 1 "Another Fancy Name"');
25+
assert.deepEqual(res, [{'Another Fancy Name': 1}]);
26+
});
27+
28+
it('C) Single-quoted alias with AS keyword', function () {
29+
var res = alasql("SELECT 1 AS 'Single Quoted'");
30+
assert.deepEqual(res, [{'Single Quoted': 1}]);
31+
});
32+
33+
it('D) Single-quoted alias without AS keyword', function () {
34+
var res = alasql("SELECT 1 'Also Single Quoted'");
35+
assert.deepEqual(res, [{'Also Single Quoted': 1}]);
36+
});
37+
38+
it('E) Backtick alias still works', function () {
39+
var res = alasql('SELECT 1 AS `Backtick Name`');
40+
assert.deepEqual(res, [{'Backtick Name': 1}]);
41+
});
42+
43+
it('F) Bracket alias still works', function () {
44+
var res = alasql('SELECT 1 AS [Bracket Name]');
45+
assert.deepEqual(res, [{'Bracket Name': 1}]);
46+
});
47+
48+
it('G) Multiple columns with different quote styles', function () {
49+
var res = alasql(`SELECT
50+
1 AS "Double Quoted",
51+
2 AS 'Single Quoted',
52+
3 AS \`Backtick Quoted\`,
53+
4 AS [Bracket Quoted]
54+
`);
55+
assert.deepEqual(res, [
56+
{
57+
'Double Quoted': 1,
58+
'Single Quoted': 2,
59+
'Backtick Quoted': 3,
60+
'Bracket Quoted': 4,
61+
},
62+
]);
63+
});
64+
65+
it('H) Quoted alias from table', function () {
66+
alasql('CREATE TABLE test_alias (id INT, name STRING)');
67+
alasql('INSERT INTO test_alias VALUES (1, "Alice"), (2, "Bob")');
68+
69+
var res = alasql('SELECT id AS "User ID", name AS "Full Name" FROM test_alias');
70+
assert.deepEqual(res, [
71+
{'User ID': 1, 'Full Name': 'Alice'},
72+
{'User ID': 2, 'Full Name': 'Bob'},
73+
]);
74+
75+
alasql('DROP TABLE test_alias');
76+
});
77+
78+
it('I) Quoted alias with expression', function () {
79+
var res = alasql('SELECT 1 + 2 AS "Sum Result"');
80+
assert.deepEqual(res, [{'Sum Result': 3}]);
81+
});
82+
83+
it('J) Quoted alias with special characters', function () {
84+
var res = alasql('SELECT 1 AS "Column With Spaces & Special!"');
85+
assert.deepEqual(res, [{'Column With Spaces & Special!': 1}]);
86+
});
87+
});

0 commit comments

Comments
 (0)