|
@@ -240,225 +240,7 @@ define([
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- describe('Locations', function () {
|
|
|
|
|
- it('should suggest locations for "SELECT | FROM testTableA"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT ',
|
|
|
|
|
- afterCursor: ' FROM testTableA',
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- suggestColumns: { tables: [{ identifierChain: [{ name: 'testTableA' }] }] },
|
|
|
|
|
- suggestKeywords: ['*', 'ALL', 'DISTINCT'],
|
|
|
|
|
- suggestAggregateFunctions: true,
|
|
|
|
|
- suggestAnalyticFunctions: true,
|
|
|
|
|
- suggestFunctions: {},
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 22, last_column: 32}, identifierChain: [{ name: 'testTableA' }]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should suggest locations for "SELECT a.| FROM testTableA"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT a.',
|
|
|
|
|
- afterCursor: ' FROM testTableA',
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 24, last_column: 34}, identifierChain: [{ name: 'testTableA' }]}
|
|
|
|
|
- ],
|
|
|
|
|
- suggestColumns: { tables: [{ identifierChain: [{ name: 'testTableA' }, { name: 'a' }] }] },
|
|
|
|
|
- suggestKeywords: ['*'],
|
|
|
|
|
- lowerCase: false
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should suggest locations for "SELECT aaa| FROM testTableA"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT aaa',
|
|
|
|
|
- afterCursor: ' FROM testTableA',
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- suggestColumns: { tables: [{ identifierChain: [{ name: 'testTableA' }] }] },
|
|
|
|
|
- suggestKeywords: ['*', 'ALL', 'DISTINCT'],
|
|
|
|
|
- suggestAggregateFunctions: true,
|
|
|
|
|
- suggestAnalyticFunctions: true,
|
|
|
|
|
- suggestFunctions: {},
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 17, last_column: 27}, identifierChain: [{ name: 'testTableA' }]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should suggest locations for "SELECT aaa| \\nFROM testTableA"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT aaa',
|
|
|
|
|
- afterCursor: ' \nFROM testTableA',
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- suggestColumns: { tables: [{ identifierChain: [{ name: 'testTableA' }] }] },
|
|
|
|
|
- suggestKeywords: ['*', 'ALL', 'DISTINCT'],
|
|
|
|
|
- suggestAggregateFunctions: true,
|
|
|
|
|
- suggestAnalyticFunctions: true,
|
|
|
|
|
- suggestFunctions: {},
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'table', location: { first_line: 2, last_line: 2, first_column: 6, last_column: 16}, identifierChain: [{ name: 'testTableA' }]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should suggest locations for "SELECT |bbbb FROM testTableA"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT ',
|
|
|
|
|
- afterCursor: 'bbbb FROM testTableA',
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- suggestColumns: { tables: [{ identifierChain: [{ name: 'testTableA' }] }] },
|
|
|
|
|
- suggestKeywords: ['*', 'ALL', 'DISTINCT'],
|
|
|
|
|
- suggestAggregateFunctions: true,
|
|
|
|
|
- suggestAnalyticFunctions: true,
|
|
|
|
|
- suggestFunctions: {},
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 18, last_column: 28}, identifierChain: [{ name: 'testTableA' }]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should suggest locations for "SELECT a.aaaaa|bbbb FROM testTableA"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT aaaaa',
|
|
|
|
|
- afterCursor: 'bbbb FROM testTableA',
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- suggestColumns: { tables: [{ identifierChain: [{ name: 'testTableA' }] }] },
|
|
|
|
|
- suggestKeywords: ['*', 'ALL', 'DISTINCT'],
|
|
|
|
|
- suggestAggregateFunctions: true,
|
|
|
|
|
- suggestAnalyticFunctions: true,
|
|
|
|
|
- suggestFunctions: {},
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 23, last_column: 33}, identifierChain: [{ name: 'testTableA' }]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should suggest locations for "SELECT foo.aaaaa|bbbb FROM testTableA"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT foo.aaaaa',
|
|
|
|
|
- afterCursor: 'bbbb FROM testTableA',
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- suggestColumns: { tables: [{ identifierChain: [{ name: 'testTableA' }, { name: 'foo' }] }] },
|
|
|
|
|
- suggestKeywords: ['*'],
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 27, last_column: 37}, identifierChain: [{ name: 'testTableA' }]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should suggest locations for "SELECT b, foo.aaaaa|bbbb FROM testTableA"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT b, foo.aaaaa',
|
|
|
|
|
- afterCursor: 'bbbb FROM testTableA',
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 8, last_column: 9}, identifierChain: [{ name: 'testTableA' }, { name: 'b' }]},
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 30, last_column: 40}, identifierChain: [{ name: 'testTableA' }]}
|
|
|
|
|
- ],
|
|
|
|
|
- suggestColumns: { tables: [{ identifierChain: [{ name: 'testTableA' }, { name: 'foo' }] }] },
|
|
|
|
|
- suggestKeywords: ['*'],
|
|
|
|
|
- lowerCase: false
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should suggest locations for "SELECT foo, aaaaa|bbbb FROM testTableA"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT foo, aaaaa',
|
|
|
|
|
- afterCursor: 'bbbb FROM testTableA',
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- suggestColumns: { tables: [{ identifierChain: [{ name: 'testTableA' }] }] },
|
|
|
|
|
- suggestKeywords: ['*'],
|
|
|
|
|
- suggestAggregateFunctions: true,
|
|
|
|
|
- suggestAnalyticFunctions: true,
|
|
|
|
|
- suggestFunctions: {},
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 8, last_column: 11}, identifierChain: [{ name: 'testTableA' }, { name: 'foo' }]},
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 28, last_column: 38}, identifierChain: [{ name: 'testTableA' }]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should suggest locations for "SELECT testTableB.a, cos(1), tta.abcdefg|hijk, tta.bla, cos(1) FROM testTableA tta, testTableB;"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT testTableB.a, cos(1), tta.abcdefg',
|
|
|
|
|
- afterCursor: 'hijk, tta.bla, cos(1) FROM testTableA tta, testTableB;',
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- noErrors: true,
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 19, last_column: 20}, identifierChain: [{ name: 'testTableB' }, { name: 'a'}]},
|
|
|
|
|
- { type: 'function', location: { first_line: 1, last_line: 1, first_column: 22, last_column: 24}, function: 'cos'},
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 51, last_column: 54}, identifierChain: [{ name: 'testTableA' }, { name: 'bla'}]},
|
|
|
|
|
- { type: 'function', location: { first_line: 1, last_line: 1, first_column: 56, last_column: 58}, function: 'cos'},
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 68, last_column: 78}, identifierChain: [{ name: 'testTableA' }]},
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 84, last_column: 94}, identifierChain: [{ name: 'testTableB' }]}
|
|
|
|
|
- ],
|
|
|
|
|
- suggestColumns: { tables: [{ identifierChain: [{ name: 'testTableA' }] }] },
|
|
|
|
|
- suggestKeywords: ['*'],
|
|
|
|
|
- lowerCase: false
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
describe('Complete Statements', function () {
|
|
describe('Complete Statements', function () {
|
|
|
- it('should handle "SELECT tta.* FROM testTableA tta, testTableB; |"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT tta.* FROM testTableA tta, testTableB; ',
|
|
|
|
|
- afterCursor: '',
|
|
|
|
|
- containsKeywords: ['SELECT'],
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- locations: [
|
|
|
|
|
- {type: 'table', location: { first_line: 1, last_line: 1, first_column: 19, last_column: 29}, identifierChain: [{ name: 'testTableA' }]},
|
|
|
|
|
- {type: 'table', location: { first_line: 1, last_line: 1, first_column: 35, last_column: 45}, identifierChain: [{ name: 'testTableB' }]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should handle "SELECT COUNT(*) FROM testTable; |"', function () {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT COUNT(*) FROM testTable;',
|
|
|
|
|
- afterCursor: '',
|
|
|
|
|
- containsKeywords: ['SELECT'],
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- locations: [
|
|
|
|
|
- {type: 'function', location:{ first_line: 1, last_line: 1, first_column: 8, last_column: 12}, function: 'count'},
|
|
|
|
|
- {type: 'table', location: { first_line: 1, last_line: 1, first_column: 22, last_column: 31}, identifierChain: [{ name: 'testTable' }]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
it('should suggest columns "SELECT IF(baa, boo, bee) AS b, | FROM testTable;"', function () {
|
|
it('should suggest columns "SELECT IF(baa, boo, bee) AS b, | FROM testTable;"', function () {
|
|
|
assertAutoComplete({
|
|
assertAutoComplete({
|
|
|
beforeCursor: 'SELECT IF(baa, boo, bee) AS b, ',
|
|
beforeCursor: 'SELECT IF(baa, boo, bee) AS b, ',
|
|
@@ -491,117 +273,6 @@ define([
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- it('should handle "SELECT tmp.bc, ROUND(tmp.r, 2) AS r FROM ( SELECT tstDb1.b1.cat AS bc, SUM(tstDb1.b1.price * tran.qua) AS r FROM tstDb1.b1 JOIN [SHUFFLE] tran ON ( tran.b_id = tstDb1.b1.id AND YEAR(tran.tran_d) BETWEEN 2008 AND 2010) GROUP BY tstDb1.b1.cat) tmp ORDER BY r DESC LIMIT 60; |"', function () {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT tmp.bc, ROUND(tmp.r, 2) AS r FROM ( SELECT tstDb1.b1.cat AS bc, SUM(tstDb1.b1.price * tran.qua) AS r FROM tstDb1.b1 JOIN [SHUFFLE] tran ON ( tran.b_id = tstDb1.b1.id AND YEAR(tran.tran_d) BETWEEN 2008 AND 2010) GROUP BY tstDb1.b1.cat) tmp ORDER BY r DESC LIMIT 60;',
|
|
|
|
|
- afterCursor: '',
|
|
|
|
|
- dialect: 'impala',
|
|
|
|
|
- containsKeywords: ['SELECT'],
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 12, last_column: 14}, identifierChain: [{ subQuery: 'tmp' }, { name: 'bc' }]},
|
|
|
|
|
- { type: 'function', location: { first_line: 1, last_line: 1, first_column: 16, last_column: 20 }, function: 'round' },
|
|
|
|
|
- { type: 'column', location: { first_line:1, last_line: 1, first_column: 26, last_column: 27}, identifierChain: [{ subQuery: 'tmp' }, { name: 'r' }]},
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 61, last_column: 64 }, identifierChain: [{ name: 'tstDb1' }, { name: 'b1' }, { name: 'cat' }]},
|
|
|
|
|
- { type: 'function', location: { first_line: 1, last_line: 1, first_column: 72, last_column: 74 }, function: 'sum' },
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 86, last_column: 91 }, identifierChain: [{ name: 'tstDb1' }, { name: 'b1' }, { name: 'price' }] },
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 99, last_column: 102 }, identifierChain: [{ name: 'tran' }, { name: 'qua' }] },
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 121, last_column: 123 }, identifierChain: [{ name: 'tstDb1' }, { name: 'b1' }] },
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 139, last_column: 143 }, identifierChain: [{ name: 'tran' }] },
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 154, last_column: 158 }, identifierChain: [{ name: 'tran' }, { name: 'b_id' }] },
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 171, last_column: 173 }, identifierChain: [{ name: 'tstDb1' }, { name: 'b1' }, { name: 'id' }]},
|
|
|
|
|
- { type: 'function', location: { first_line: 1, last_line: 1, first_column: 178, last_column: 181 }, function: 'year' },
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 188, last_column: 194 }, identifierChain: [{ name: 'tran' }, { name: 'tran_d' }] },
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 238, last_column: 241 }, identifierChain: [{ name: 'tstDb1' }, { name: 'b1' }, { name: 'cat' }] },
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 256, last_column: 257 }, identifierChain: [{ subQuery: 'tmp' },{ name: 'r'}]}
|
|
|
|
|
- ],
|
|
|
|
|
- lowerCase: false
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should handle "SELECT * FROM testTable t1 ORDER BY t1.a ASC, t1.b, t1.c DESC, t1.d;\nSELECT t1.bla FROM testTable2 t1;\\nSELECT * FROM testTable3 t3, testTable4 t4 WHERE |"', function () {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT * FROM testTable t1 ORDER BY t1.a ASC, t1.b, t1.c DESC, t1.d;\nSELECT t1.bla FROM testTable2 t1;\nSELECT * FROM testTable3 t3, testTable4 t4 WHERE ',
|
|
|
|
|
- afterCursor: '',
|
|
|
|
|
- containsKeywords: ['EXISTS'],
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 15, last_column: 24}, identifierChain: [{ name: 'testTable' }]},
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 40, last_column: 41},identifierChain: [{ name: 'testTable' }, { name: 'a'}]},
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 50, last_column: 51},identifierChain: [{ name: 'testTable' }, { name: 'b'}]},
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 56, last_column: 57},identifierChain: [{ name: 'testTable' }, { name: 'c'}]},
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 67, last_column: 68},identifierChain: [{ name: 'testTable' }, { name: 'd'}]},
|
|
|
|
|
- { type: 'column', location: { first_line: 2, last_line: 2, first_column: 11, last_column: 14},identifierChain: [{ name: 'testTable2' }, { name: 'bla'}]},
|
|
|
|
|
- { type: 'table', location: { first_line: 2, last_line: 2, first_column: 20, last_column: 30}, identifierChain: [{ name: 'testTable2' }]},
|
|
|
|
|
- { type: 'table', location: { first_line: 3, last_line: 3, first_column: 15, last_column: 25}, identifierChain: [{ name: 'testTable3' }]},
|
|
|
|
|
- { type: 'table', location: { first_line: 3, last_line: 3, first_column: 30, last_column: 40}, identifierChain: [{ name: 'testTable4' }]}
|
|
|
|
|
- ],
|
|
|
|
|
- suggestFunctions: {},
|
|
|
|
|
- suggestColumns: { tables: [{ identifierChain: [{ name: 'testTable3' }], alias: 't3' }, { identifierChain: [{ name: 'testTable4' }], alias: 't4' }] },
|
|
|
|
|
- suggestIdentifiers: [{ name: 't3.', type: 'alias' }, { name: 't4.', type: 'alias'}],
|
|
|
|
|
- lowerCase: false
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should handle "SELECT * FROM testTable ORDER BY a ASC, b, c DESC, d; |"', function () {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT * FROM testTable ORDER BY a ASC, b, c DESC, d; ',
|
|
|
|
|
- afterCursor: '',
|
|
|
|
|
- containsKeywords: ['SELECT'],
|
|
|
|
|
- dialect: 'impala',
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 15, last_column: 24}, identifierChain: [{ name: 'testTable' }]},
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 34, last_column: 35},identifierChain: [{ name: 'testTable' }, { name: 'a'}]},
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 41, last_column: 42},identifierChain: [{ name: 'testTable' }, { name: 'b'}]},
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 44, last_column: 45},identifierChain: [{ name: 'testTable' }, { name: 'c'}]},
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 52, last_column: 53},identifierChain: [{ name: 'testTable' }, { name: 'd'}]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should handle "SELECT * FROM testTable1 JOIN db1.table2; |"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT * FROM testTable1 JOIN db1.table2; ',
|
|
|
|
|
- afterCursor: '',
|
|
|
|
|
- containsKeywords: ['SELECT'],
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- locations: [
|
|
|
|
|
- {type: 'table', location: { first_line: 1, last_line: 1, first_column: 15, last_column: 25 }, identifierChain: [{ name: 'testTable1' }] },
|
|
|
|
|
- {type: 'table', location: { first_line: 1, last_line: 1, first_column: 35, last_column: 41 }, identifierChain: [{ name: 'db1' }, { name: 'table2' }] }
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should handle "SELECT t1.foo FROM table1 t1 CROSS JOIN table2 LEFT OUTER JOIN table3 JOIN table4 t4 ON (t1.c1 = t2.c2); |"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT t1.foo FROM table1 t1 CROSS JOIN table2 LEFT OUTER JOIN table3 JOIN table4 t4 ON (t1.c1 = t2.c2); ',
|
|
|
|
|
- afterCursor: '',
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- containsKeywords: ['SELECT'],
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- locations: [
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 11, last_column: 14 }, identifierChain: [{ name: 'table1' }, { name: 'foo' }] },
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 20, last_column: 26 }, identifierChain: [{ name: 'table1' }]},
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 41, last_column: 47 }, identifierChain: [{ name: 'table2' }]},
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 64, last_column: 70 }, identifierChain: [{ name: 'table3' }]},
|
|
|
|
|
- { type: 'table', location: { first_line: 1, last_line: 1, first_column: 76, last_column: 82 }, identifierChain: [{ name: 'table4' }]},
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 93, last_column: 95 }, identifierChain: [{ name: 'table1' }, { name: 'c1'}]},
|
|
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 101, last_column: 103 }, identifierChain: [{ name: 't2' }, { name: 'c2'}]}
|
|
|
|
|
- ],
|
|
|
|
|
- lowerCase: false
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
it('should handle 100k rows before and after "SELECT * FROM foo WHERE (bar = \'bla\') AND (ble = 1);|"', function() {
|
|
it('should handle 100k rows before and after "SELECT * FROM foo WHERE (bar = \'bla\') AND (ble = 1);|"', function() {
|
|
|
var beforeCursor = '';
|
|
var beforeCursor = '';
|
|
|
var afterCursor = ';\n';
|
|
var afterCursor = ';\n';
|
|
@@ -621,88 +292,6 @@ define([
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
- it('should handle "SELECT * FROM foo WHERE bar IN (SELECT * FROM bla);|"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT * FROM foo WHERE bar IN (SELECT * FROM bla);',
|
|
|
|
|
- afterCursor: '',
|
|
|
|
|
- dialect: 'hive',
|
|
|
|
|
- containsKeywords: ['SELECT'],
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- locations: [
|
|
|
|
|
- {type: 'table', location: { first_line: 1, last_line: 1, first_column: 15, last_column: 18 }, identifierChain: [{ name: 'foo' }]},
|
|
|
|
|
- {type: 'column', location: { first_line: 1, last_line: 1, first_column: 25, last_column: 28 }, identifierChain:[{ name: 'foo' }, { name: 'bar'}]},
|
|
|
|
|
- {type: 'table', location: { first_line: 1, last_line: 1, first_column: 47, last_column: 50 }, identifierChain: [{ name: 'bla' }]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should handle "SELECT * FROM foo WHERE bar IN (1+1, 2+2);|"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT * FROM foo WHERE bar IN (1+1, 2+2);',
|
|
|
|
|
- afterCursor: '',
|
|
|
|
|
- noErrors: true,
|
|
|
|
|
- containsKeywords: ['SELECT'],
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- locations: [
|
|
|
|
|
- {type: 'table', location: { first_line: 1, last_line: 1, first_column: 15, last_column: 18 }, identifierChain: [{ name: 'foo' }]},
|
|
|
|
|
- {type: 'column', location: { first_line: 1, last_line: 1, first_column: 25, last_column: 28 }, identifierChain:[{ name: 'foo' }, { name: 'bar'}]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should handle "SELECT * FROM foo WHERE bar IN (id+1-1, id+1-2);|"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT * FROM foo WHERE bar IN (id+1-1, id+1-2);',
|
|
|
|
|
- afterCursor: '',
|
|
|
|
|
- noErrors: true,
|
|
|
|
|
- containsKeywords: ['SELECT'],
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- lowerCase: false,
|
|
|
|
|
- locations: [
|
|
|
|
|
- {type: 'table', location: { first_line: 1, last_line: 1, first_column: 15, last_column: 18 }, identifierChain: [{ name: 'foo' }]},
|
|
|
|
|
- {type: 'column', location: { first_line: 1, last_line: 1, first_column: 25, last_column: 28 }, identifierChain:[{ name: 'foo' }, { name: 'bar'}]},
|
|
|
|
|
- {type: 'column', location: { first_line: 1, last_line: 1, first_column: 33, last_column: 35 }, identifierChain: [{ name: 'foo' }, { name: 'id'}]},
|
|
|
|
|
- {type: 'column', location: { first_line: 1, last_line: 1, first_column: 41, last_column: 43 }, identifierChain: [{ name: 'foo' }, { name: 'id'}]}
|
|
|
|
|
- ]
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- it('should handle "SELECT CASE cos(boo.a) > baa.boo \\n' +
|
|
|
|
|
- '\\tWHEN baa.b THEN true \\n' +
|
|
|
|
|
- '\\tWHEN boo.c THEN false \\n' +
|
|
|
|
|
- '\\tWHEN baa.blue THEN boo.d \\n' +
|
|
|
|
|
- '\\tELSE baa.e END \\n' +
|
|
|
|
|
- '\\t FROM db1.foo boo, bar baa WHERE baa.bla IN (SELECT ble FROM bla);|"', function() {
|
|
|
|
|
- assertAutoComplete({
|
|
|
|
|
- beforeCursor: 'SELECT CASE cos(boo.a) > baa.boo \n\tWHEN baa.b THEN true \n\tWHEN boo.c THEN false \n\tWHEN baa.blue THEN boo.d \n\tELSE baa.e END \n\t FROM db1.foo boo, bar baa WHERE baa.bla IN (SELECT ble FROM bla);',
|
|
|
|
|
- afterCursor: '',
|
|
|
|
|
- containsKeywords: ['SELECT'],
|
|
|
|
|
- expectedResult: {
|
|
|
|
|
- locations: [
|
|
|
|
|
- {type: 'function', location: { first_line: 1, last_line: 1, first_column: 13, last_column: 15 }, function: 'cos'},
|
|
|
|
|
- {type: 'column', location: { first_line: 1, last_line: 1, first_column: 21, last_column: 22 }, identifierChain: [{ name: 'db1' }, { name: 'foo' }, { name: 'a' }]},
|
|
|
|
|
- {type: 'column', location: { first_line: 1, last_line: 1, first_column: 30, last_column: 33 }, identifierChain: [{ name: 'bar' }, { name: 'boo' }]},
|
|
|
|
|
- {type: 'column', location: { first_line: 2, last_line: 2, first_column: 11, last_column: 12 }, identifierChain: [{ name: 'bar' }, { name: 'b' }]},
|
|
|
|
|
- {type: 'column', location: { first_line: 3, last_line: 3, first_column: 11, last_column: 12 }, identifierChain: [{ name: 'db1' }, { name: 'foo' }, { name: 'c' }] },
|
|
|
|
|
- {type: 'column', location: { first_line: 4, last_line: 4, first_column: 11, last_column: 15 }, identifierChain: [{ name: 'bar' }, { name: 'blue' }] },
|
|
|
|
|
- {type: 'column', location: { first_line: 4, last_line: 4, first_column: 25, last_column: 26 }, identifierChain: [{ name: 'db1' }, { name: 'foo' }, { name: 'd'}] },
|
|
|
|
|
- {type: 'column', location: { first_line: 5, last_line: 5, first_column: 11, last_column: 12 }, identifierChain: [{ name: 'bar' }, { name: 'e' }] },
|
|
|
|
|
- {type: 'table', location: { first_line: 6, last_line: 6, first_column: 12, last_column: 15 }, identifierChain: [{ name: 'db1' }, { name: 'foo' }]},
|
|
|
|
|
- {type: 'table', location: { first_line: 6, last_line: 6, first_column: 21, last_column: 24 }, identifierChain: [{ name: 'bar' }]},
|
|
|
|
|
- {type: 'column', location: { first_line: 6, last_line: 6, first_column: 39, last_column: 42 }, identifierChain: [{ name: 'bar' }, { name: 'bla' }] },
|
|
|
|
|
- {type: 'column', location: { first_line: 6, last_line: 6, first_column: 54, last_column: 57 }, identifierChain: [{ name: 'bla' }, { name: 'ble' }] },
|
|
|
|
|
- {type: 'table', location: { first_line: 6, last_line: 6, first_column: 63, last_column: 66 }, identifierChain: [{ name: 'bla' }]}
|
|
|
|
|
- ],
|
|
|
|
|
- lowerCase: false
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
describe('Select List Completion', function() {
|
|
describe('Select List Completion', function() {
|
|
@@ -2209,7 +1798,7 @@ define([
|
|
|
{ name: 'COVAR_POP', dialect: 'hive' },
|
|
{ name: 'COVAR_POP', dialect: 'hive' },
|
|
|
{ name: 'COVAR_SAMP', dialect: 'hive' }
|
|
{ name: 'COVAR_SAMP', dialect: 'hive' }
|
|
|
];
|
|
];
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
binaryFunctions.forEach(function (binaryFunction) {
|
|
binaryFunctions.forEach(function (binaryFunction) {
|
|
|
assertAutoComplete({
|
|
assertAutoComplete({
|
|
|
beforeCursor: 'SELECT ' + binaryFunction.name + '(',
|
|
beforeCursor: 'SELECT ' + binaryFunction.name + '(',
|
|
@@ -3544,7 +3133,8 @@ define([
|
|
|
lowerCase: false,
|
|
lowerCase: false,
|
|
|
suggestColumns: { tables: [{ identifierChain: [{ name: 'testTable' }, { name: 'testArray' }] }] },
|
|
suggestColumns: { tables: [{ identifierChain: [{ name: 'testTable' }, { name: 'testArray' }] }] },
|
|
|
locations: [
|
|
locations: [
|
|
|
- { type: 'column', location: { first_line: 1, last_line: 1, first_column: 8, last_column: 10 }, identifierChain: [{ name: 'testTable' }, { name: 'testArray'}]},
|
|
|
|
|
|
|
+ // TODO: Add locations properly before *
|
|
|
|
|
+ // { type: 'column', location: { first_line: 1, last_line: 1, first_column: 8, last_column: 10 }, identifierChain: [{ name: 'testTable' }, { name: 'testArray'}]},
|
|
|
{ type: 'table', location: { first_line: 1, last_line: 1, first_column: 18, last_column: 27 }, identifierChain: [{ name: 'testTable' }]},
|
|
{ type: 'table', location: { first_line: 1, last_line: 1, first_column: 18, last_column: 27 }, identifierChain: [{ name: 'testTable' }]},
|
|
|
{ type: 'column', location: { first_line: 1, last_line: 1, first_column: 33, last_column: 42 }, identifierChain: [{ name: 'testTable' }, { name: 'testArray'}]}
|
|
{ type: 'column', location: { first_line: 1, last_line: 1, first_column: 33, last_column: 42 }, identifierChain: [{ name: 'testTable' }, { name: 'testArray'}]}
|
|
|
]
|
|
]
|