@malloydata/malloy-sql 0.0.240-dev250311213218 → 0.0.240-dev250311214430

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/malloy-sql",
3
- "version": "0.0.240-dev250311213218",
3
+ "version": "0.0.240-dev250311214430",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -24,7 +24,7 @@
24
24
  "prepublishOnly": "npm run build"
25
25
  },
26
26
  "dependencies": {
27
- "@malloydata/malloy": "^0.0.240-dev250311213218"
27
+ "@malloydata/malloy": "^0.0.240-dev250311214430"
28
28
  },
29
29
  "devDependencies": {
30
30
  "peggy": "^3.0.2"
@@ -1,8 +0,0 @@
1
- declare global {
2
- namespace jest {
3
- interface Matchers<R> {
4
- toBeErrorFreeMalloySQLParse(): R;
5
- }
6
- }
7
- }
8
- export {};
@@ -1,307 +0,0 @@
1
- "use strict";
2
- /*
3
- * Copyright 2023 Google LLC
4
- *
5
- * Permission is hereby granted, free of charge, to any person obtaining
6
- * a copy of this software and associated documentation files
7
- * (the "Software"), to deal in the Software without restriction,
8
- * including without limitation the rights to use, copy, modify, merge,
9
- * publish, distribute, sublicense, and/or sell copies of the Software,
10
- * and to permit persons to whom the Software is furnished to do so,
11
- * subject to the following conditions:
12
- *
13
- * The above copyright notice and this permission notice shall be
14
- * included in all copies or substantial portions of the Software.
15
- *
16
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
- */
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- const malloySQLParser_1 = require("../../malloySQLParser");
26
- const types_1 = require("../../types");
27
- expect.extend({
28
- toBeErrorFreeMalloySQLParse: function (document) {
29
- const parse = malloySQLParser_1.MalloySQLParser.parse(document);
30
- if (parse.errors.length > 0) {
31
- return {
32
- message: () => `unexpected parse errors: ${parse.errors
33
- .map(m => m.message)
34
- .join('\n')}`,
35
- pass: false,
36
- };
37
- }
38
- else
39
- return { pass: true, message: () => '' };
40
- },
41
- });
42
- describe('MalloySQL parse', () => {
43
- describe('Should parse inital comments', () => {
44
- test('initial single-line forward-slash comment', () => {
45
- ['//hello', ' //hello', '//hello\n', '\n //hello\n'].forEach(x => expect(x).toBeErrorFreeMalloySQLParse());
46
- });
47
- test('initial single-line double-dash comment', () => {
48
- ['--hello', ' --hello', '--hello\n', '\n --hello\n'].forEach(x => expect(x).toBeErrorFreeMalloySQLParse());
49
- });
50
- test('initial multi-line comment', () => {
51
- ['/* hi */', ' /* hi */ ', '/* hi */\n', '\n /* hi */\n'].forEach(x => expect(x).toBeErrorFreeMalloySQLParse());
52
- });
53
- test('initial comments mixed', () => {
54
- expect('\n //hey -- hey \n\t --hay\n/* hi */').toBeErrorFreeMalloySQLParse();
55
- });
56
- });
57
- describe('Should parse control statement', () => {
58
- test('Should parse immediate delimiter', () => {
59
- [
60
- '>>>sql connection:x',
61
- '>>>malloy',
62
- '>>>malloy //test',
63
- '>>>sql connection: a',
64
- '>>>sql connection: a\n',
65
- '>>>sql connection:a //x\n\n',
66
- '>>>sql connection: my_connection_name // test',
67
- ].forEach(x => expect(x).toBeErrorFreeMalloySQLParse());
68
- });
69
- test('Should parse initial comments and delimiter', () => {
70
- [
71
- '// hey\n>>>sql connection:x',
72
- '/* test */\n\n\n>>>malloy // test',
73
- '--info\t>>>sql a',
74
- ].forEach(x => expect(x).toBeErrorFreeMalloySQLParse());
75
- });
76
- test('Should parse multiple empty control statements', () => {
77
- [
78
- '// hey\n>>>sql connection:x\n>>>sql connection:x\n>>>malloy\n',
79
- '// hey\n>>>sql connection:x \n>>>sql\n>>>malloy\n\n',
80
- '\n>>>sql connection: my_connection_name \n /* test */\n\n>>>sql\n--hey\n>>>malloy\n\n',
81
- ].forEach(x => expect(x).toBeErrorFreeMalloySQLParse());
82
- });
83
- });
84
- describe('Should parse statement', () => {
85
- test('Should parse statement with comments', () => {
86
- expect(`>>>sql connection:y\nSELECT 1 FROM %{ malloy }% /*test*/`).toBeErrorFreeMalloySQLParse();
87
- expect(`>>>malloy \nquery -> source -> banana/*test*/`).toBeErrorFreeMalloySQLParse();
88
- });
89
- test('Should parse statements', () => {
90
- expect(`>>>sql connection:x\nSELECT 1 FROM %{ malloy }% /*test*/\n>>>malloy\n>>>sql`).toBeErrorFreeMalloySQLParse();
91
- expect(`>>>malloy\nquery -> source -> banana/*test*/\n\r>>>sql connection:x\nSELECT 1 >>>malloy\n\n`).toBeErrorFreeMalloySQLParse();
92
- });
93
- });
94
- describe('connection: config', () => {
95
- test('Should not allow connection in >>>malloy line', () => {
96
- expect(malloySQLParser_1.MalloySQLParser.parse(`>>>malloy connection`).errors).toHaveLength(1);
97
- });
98
- test('Should not allow anything besides comments in >>>malloy line', () => {
99
- expect(malloySQLParser_1.MalloySQLParser.parse(`>>>malloy a //test`).errors).toHaveLength(1);
100
- });
101
- test('Should handle a connection in a delimiter', () => {
102
- var _a, _b;
103
- const parse = malloySQLParser_1.MalloySQLParser.parse(`\
104
- >>>malloy
105
- import "foo"
106
- >>>sql connection:bigquery
107
- SELECT 1`);
108
- expect((_a = parse.statements[1].config) === null || _a === void 0 ? void 0 : _a.connection).toBe('bigquery');
109
- expect((_b = parse.statements[1].config) === null || _b === void 0 ? void 0 : _b.fromDelimiter).toBe(true);
110
- });
111
- test('Should handle a connection in a comment', () => {
112
- var _a, _b, _c;
113
- const parse = malloySQLParser_1.MalloySQLParser.parse(`\
114
- >>>malloy
115
- import "foo"
116
- >>>sql
117
- -- connection:bigquery
118
- SELECT 1`);
119
- expect((_a = parse.statements[1].config) === null || _a === void 0 ? void 0 : _a.connection).toBe('bigquery');
120
- expect((_b = parse.statements[1].config) === null || _b === void 0 ? void 0 : _b.fromDelimiter).toBeFalsy();
121
- expect((_c = parse.statements[1].config) === null || _c === void 0 ? void 0 : _c.inheritedConnection).toBeFalsy();
122
- });
123
- test('Should mark a connection as inherited', () => {
124
- var _a, _b, _c, _d, _e, _f;
125
- const parse = malloySQLParser_1.MalloySQLParser.parse(`\
126
- >>>malloy
127
- import "foo"
128
- >>>sql
129
- -- connection:bigquery
130
- SELECT 1
131
- >>>sql
132
- SELECT 2
133
- `);
134
- expect((_a = parse.statements[1].config) === null || _a === void 0 ? void 0 : _a.connection).toBe('bigquery');
135
- expect((_b = parse.statements[1].config) === null || _b === void 0 ? void 0 : _b.fromDelimiter).toBeFalsy();
136
- expect((_c = parse.statements[1].config) === null || _c === void 0 ? void 0 : _c.inheritedConnection).toBeFalsy();
137
- expect((_d = parse.statements[2].config) === null || _d === void 0 ? void 0 : _d.connection).toBe('bigquery');
138
- expect((_e = parse.statements[2].config) === null || _e === void 0 ? void 0 : _e.fromDelimiter).toBeFalsy();
139
- expect((_f = parse.statements[2].config) === null || _f === void 0 ? void 0 : _f.inheritedConnection).toBe(true);
140
- });
141
- });
142
- describe('Embedded Malloy', () => {
143
- test('Parenthesized embedded malloy can handle space between ( and {%', () => {
144
- const parse = malloySQLParser_1.MalloySQLParser.parse('>>>sql connection:bigquery\nSELECT ( %{ malloy }% )');
145
- const stmt = parse.statements[0];
146
- const embeddedMalloy = stmt.embeddedMalloyQueries[0];
147
- expect(embeddedMalloy.query).toBe(' malloy ');
148
- expect(embeddedMalloy.parenthesized).toBeTruthy();
149
- expect(embeddedMalloy.range.start.character).toBe(7);
150
- expect(embeddedMalloy.malloyRange.start.character).toBe(12);
151
- });
152
- test('Non-parenthesized embedded malloy', () => {
153
- const parse = malloySQLParser_1.MalloySQLParser.parse('>>>sql connection:bigquery\nSELECT %{ malloy }%');
154
- const stmt = parse.statements[0];
155
- const embeddedMalloy = stmt.embeddedMalloyQueries[0];
156
- expect(embeddedMalloy.query).toBe(' malloy ');
157
- expect(embeddedMalloy.parenthesized).toBeFalsy();
158
- expect(embeddedMalloy.range.start.character).toBe(7);
159
- expect(embeddedMalloy.malloyRange.start.character).toBe(9);
160
- });
161
- });
162
- describe('Parse output', () => {
163
- test('Should provide correct output for single statement', () => {
164
- var _a;
165
- const parse = malloySQLParser_1.MalloySQLParser.parse(`\
166
- >>>sql connection:bigquery
167
- SELECT 1`);
168
- expect(parse.statements).toHaveLength(1);
169
- expect(parse.statements[0].type).toBe(types_1.MalloySQLStatementType.SQL);
170
- expect(parse.statements[0].text).toBe('SELECT 1');
171
- expect((_a = parse.statements[0].config) === null || _a === void 0 ? void 0 : _a.connection).toBe('bigquery');
172
- expect(parse.statements[0].index).toBe(0);
173
- expect(parse.statements[0].range.start.line).toBe(1);
174
- expect(parse.statements[0].range.start.character).toBe(0);
175
- expect(parse.statements[0].range.end.character).toBe(8);
176
- });
177
- test('Should provide correct output for multiple statements', () => {
178
- var _a;
179
- const parse = malloySQLParser_1.MalloySQLParser.parse(`\
180
- >>>markdown
181
- # Hello SQL
182
- >>>sql connection:bigquery
183
- SELECT 1
184
- >>>markdown
185
- # Hello Malloy
186
- >>>malloy
187
- import "airports.malloy"`);
188
- expect(parse.statements).toHaveLength(4);
189
- expect(parse.statements[0].type).toBe(types_1.MalloySQLStatementType.MARKDOWN);
190
- expect(parse.statements[0].text).toBe('# Hello SQL');
191
- expect(parse.statements[0].index).toBe(0);
192
- expect(parse.statements[0].range.start.line).toBe(1);
193
- expect(parse.statements[0].range.start.character).toBe(0);
194
- expect(parse.statements[0].range.end.character).toBe(11);
195
- expect(parse.statements[1].type).toBe(types_1.MalloySQLStatementType.SQL);
196
- expect(parse.statements[1].text).toBe('SELECT 1');
197
- expect((_a = parse.statements[1].config) === null || _a === void 0 ? void 0 : _a.connection).toBe('bigquery');
198
- expect(parse.statements[1].index).toBe(1);
199
- expect(parse.statements[1].range.start.line).toBe(3);
200
- expect(parse.statements[1].range.start.character).toBe(0);
201
- expect(parse.statements[1].range.end.character).toBe(8);
202
- expect(parse.statements[2].type).toBe(types_1.MalloySQLStatementType.MARKDOWN);
203
- expect(parse.statements[2].text).toBe('# Hello Malloy');
204
- expect(parse.statements[2].index).toBe(2);
205
- expect(parse.statements[2].range.start.line).toBe(5);
206
- expect(parse.statements[2].range.start.character).toBe(0);
207
- expect(parse.statements[2].range.end.character).toBe(14);
208
- expect(parse.statements[3].type).toBe(types_1.MalloySQLStatementType.MALLOY);
209
- expect(parse.statements[3].text).toBe('import "airports.malloy"');
210
- expect(parse.statements[3].index).toBe(3);
211
- expect(parse.statements[3].range.start.line).toBe(7);
212
- expect(parse.statements[3].range.start.character).toBe(0);
213
- expect(parse.statements[3].range.end.character).toBe(24);
214
- });
215
- test('Should provide correct output for mulitple statements with embedded malloy', () => {
216
- var _a;
217
- const parse = malloySQLParser_1.MalloySQLParser.parse(`\
218
- >>>markdown
219
- # Hello SQL
220
- >>>sql connection:bigquery
221
- SELECT 1 FROM %{ malloy-here }%;
222
- >>>markdown
223
- # Hello Malloy
224
- >>>malloy
225
- import "airports.malloy"`);
226
- expect(parse.statements).toHaveLength(4);
227
- expect(parse.statements[0].type).toBe(types_1.MalloySQLStatementType.MARKDOWN);
228
- expect(parse.statements[0].text).toBe('# Hello SQL');
229
- expect(parse.statements[0].index).toBe(0);
230
- expect(parse.statements[0].range.start.line).toBe(1);
231
- expect(parse.statements[0].range.start.character).toBe(0);
232
- expect(parse.statements[0].range.end.character).toBe(11);
233
- expect(parse.statements[1].type).toBe(types_1.MalloySQLStatementType.SQL);
234
- expect(parse.statements[1].text).toBe('SELECT 1 FROM %{ malloy-here }%;');
235
- expect((_a = parse.statements[1].config) === null || _a === void 0 ? void 0 : _a.connection).toBe('bigquery');
236
- expect(parse.statements[1].index).toBe(1);
237
- expect(parse.statements[1].range.start.line).toBe(3);
238
- expect(parse.statements[1].range.start.character).toBe(0);
239
- expect(parse.statements[1].range.end.character).toBe(32);
240
- const embeddedMalloy = parse.statements[1]
241
- .embeddedMalloyQueries;
242
- expect(embeddedMalloy).toHaveLength(1);
243
- expect(embeddedMalloy[0].parenthesized).toBeFalsy();
244
- expect(embeddedMalloy[0].query).toBe(' malloy-here ');
245
- expect(embeddedMalloy[0].text).toBe('%{ malloy-here }%');
246
- expect(embeddedMalloy[0].range.start.line).toBe(3);
247
- expect(embeddedMalloy[0].range.start.character).toBe(14);
248
- expect(parse.statements[2].type).toBe(types_1.MalloySQLStatementType.MARKDOWN);
249
- expect(parse.statements[2].text).toBe('# Hello Malloy');
250
- expect(parse.statements[2].index).toBe(2);
251
- expect(parse.statements[2].range.start.line).toBe(5);
252
- expect(parse.statements[2].range.start.character).toBe(0);
253
- expect(parse.statements[2].range.end.character).toBe(14);
254
- expect(parse.statements[3].type).toBe(types_1.MalloySQLStatementType.MALLOY);
255
- expect(parse.statements[3].text).toBe('import "airports.malloy"');
256
- expect(parse.statements[3].index).toBe(3);
257
- expect(parse.statements[3].range.start.line).toBe(7);
258
- expect(parse.statements[3].range.start.character).toBe(0);
259
- expect(parse.statements[3].range.end.character).toBe(24);
260
- });
261
- test('Should provide correct output for embedded >>>', () => {
262
- var _a;
263
- const parse = malloySQLParser_1.MalloySQLParser.parse(`\
264
- >>>sql connection:bigquery
265
- SELECT 1
266
- >>>markdown
267
- # >>> I'm not a delimiter`);
268
- expect(parse.statements).toHaveLength(2);
269
- expect(parse.statements[0].type).toBe(types_1.MalloySQLStatementType.SQL);
270
- expect(parse.statements[0].text).toBe('SELECT 1');
271
- expect((_a = parse.statements[0].config) === null || _a === void 0 ? void 0 : _a.connection).toBe('bigquery');
272
- expect(parse.statements[0].index).toBe(0);
273
- expect(parse.statements[0].range.start.line).toBe(1);
274
- expect(parse.statements[0].range.start.character).toBe(0);
275
- expect(parse.statements[0].range.end.character).toBe(8);
276
- expect(parse.statements[1].type).toBe(types_1.MalloySQLStatementType.MARKDOWN);
277
- expect(parse.statements[1].text).toBe(`# >>> I'm not a delimiter`);
278
- expect(parse.statements[1].index).toBe(1);
279
- expect(parse.statements[1].range.start.line).toBe(3);
280
- expect(parse.statements[1].range.start.character).toBe(0);
281
- expect(parse.statements[1].range.end.character).toBe(25);
282
- });
283
- test('Should provide correct output for cells that contain only comments', () => {
284
- var _a;
285
- const parse = malloySQLParser_1.MalloySQLParser.parse(`\
286
- >>>sql connection:bigquery
287
- -- Nothing to see here, move along
288
- >>>markdown
289
- # I'm my own cell`);
290
- expect(parse.statements).toHaveLength(2);
291
- expect(parse.statements[0].type).toBe(types_1.MalloySQLStatementType.SQL);
292
- expect(parse.statements[0].text).toBe('-- Nothing to see here, move along');
293
- expect((_a = parse.statements[0].config) === null || _a === void 0 ? void 0 : _a.connection).toBe('bigquery');
294
- expect(parse.statements[0].index).toBe(0);
295
- expect(parse.statements[0].range.start.line).toBe(1);
296
- expect(parse.statements[0].range.start.character).toBe(0);
297
- expect(parse.statements[0].range.end.character).toBe(34);
298
- expect(parse.statements[1].type).toBe(types_1.MalloySQLStatementType.MARKDOWN);
299
- expect(parse.statements[1].text).toBe(`# I'm my own cell`);
300
- expect(parse.statements[1].index).toBe(1);
301
- expect(parse.statements[1].range.start.line).toBe(3);
302
- expect(parse.statements[1].range.start.character).toBe(0);
303
- expect(parse.statements[1].range.end.character).toBe(17);
304
- });
305
- });
306
- });
307
- //# sourceMappingURL=parse.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.spec.js","sourceRoot":"","sources":["../../../src/grammar/test/parse.spec.ts"],"names":[],"mappings":"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"}