feat: add generic and plsql basic parser file
This commit is contained in:
12
test/parser/generic/lexer.test.ts
Normal file
12
test/parser/generic/lexer.test.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import SQLParser from '../../../src/parser/generic';
|
||||
|
||||
describe('GenericSQL Lexer tests', () => {
|
||||
const mysqlParser = new SQLParser();
|
||||
|
||||
const sql = 'select id,name,sex from user1;';
|
||||
const tokens = mysqlParser.getAllTokens(sql);
|
||||
|
||||
test('token counts', () => {
|
||||
expect(tokens.length).toBe(12);
|
||||
});
|
||||
});
|
22
test/parser/generic/listener.test.ts
Normal file
22
test/parser/generic/listener.test.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import SQLParser, { SqlParserListener } from '../../../src/parser/generic';
|
||||
|
||||
describe('Generic SQL Listener Tests', () => {
|
||||
const expectTableName = 'user1';
|
||||
const sql = `select id,name,sex from ${expectTableName};`;
|
||||
const parser = new SQLParser();
|
||||
|
||||
const parserTree = parser.parse(sql);
|
||||
|
||||
test('Listener enterTableName', async () => {
|
||||
let result = '';
|
||||
class MyListener extends SqlParserListener {
|
||||
enterTableName(ctx): void {
|
||||
result = ctx.getText().toLowerCase();
|
||||
}
|
||||
}
|
||||
const listenTableName: any = new MyListener();
|
||||
|
||||
await parser.listen(listenTableName, parserTree);
|
||||
expect(result).toBe(expectTableName);
|
||||
});
|
||||
});
|
18
test/parser/generic/syntax.test.ts
Normal file
18
test/parser/generic/syntax.test.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import SQLParser from '../../../src/parser/generic';
|
||||
|
||||
describe('Generic SQL Syntax Tests', () => {
|
||||
const parser = new SQLParser();
|
||||
|
||||
test('Select Statement', () => {
|
||||
const sql = 'select id,name from user1;';
|
||||
const result = parser.validate(sql);
|
||||
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
|
||||
test('Select 1+1', () => {
|
||||
const sql = 'SELECT 1+1;';
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
});
|
27
test/parser/generic/visitor.test.ts
Normal file
27
test/parser/generic/visitor.test.ts
Normal file
@ -0,0 +1,27 @@
|
||||
import SQLParser, { SqlParserVisitor } from '../../../src/parser/generic';
|
||||
|
||||
describe('Generic SQL Visitor Tests', () => {
|
||||
const expectTableName = 'user1';
|
||||
const sql = `select id,name,sex from ${expectTableName};`;
|
||||
const parser = new SQLParser();
|
||||
|
||||
const parserTree = parser.parse(sql, (error) => {
|
||||
console.log('Parse error:', error);
|
||||
});
|
||||
|
||||
console.log('Parser tree string:', parser.toString(parserTree));
|
||||
|
||||
test('Visitor visitTableName', () => {
|
||||
let result = '';
|
||||
class MyVisitor extends SqlParserVisitor {
|
||||
visitTableName(ctx): void {
|
||||
result = ctx.getText().toLowerCase();
|
||||
super.visitTableName(ctx);
|
||||
}
|
||||
}
|
||||
const visitor: any = new MyVisitor();
|
||||
visitor.visit(parserTree);
|
||||
|
||||
expect(result).toBe(expectTableName);
|
||||
});
|
||||
});
|
12
test/parser/hive/lexer.test.ts
Normal file
12
test/parser/hive/lexer.test.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import SQLParser from '../../../src/parser/hive';
|
||||
|
||||
describe('HiveSQL Lexer tests', () => {
|
||||
const parser = new SQLParser();
|
||||
// select id,name,sex from user1;
|
||||
const sql = 'SELECT * FROM t1';
|
||||
const tokens = parser.getAllTokens(sql);
|
||||
|
||||
test('token counts', () => {
|
||||
expect(tokens.length).toBe(12);
|
||||
});
|
||||
});
|
22
test/parser/hive/listener.test.ts
Normal file
22
test/parser/hive/listener.test.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import SQLParser, { HiveSqlListener } from '../../../src/parser/hive';
|
||||
|
||||
describe('Hive SQL Listener Tests', () => {
|
||||
const expectTableName = 'user1';
|
||||
const sql = `select id,name,sex from ${expectTableName};`;
|
||||
const parser = new SQLParser();
|
||||
|
||||
const parserTree = parser.parse(sql);
|
||||
|
||||
test('Listener enterTableName', async () => {
|
||||
let result = '';
|
||||
class MyListener extends HiveSqlListener {
|
||||
enterTableName(ctx): void {
|
||||
result = ctx.getText().toLowerCase();
|
||||
}
|
||||
}
|
||||
const listenTableName: any = new MyListener();
|
||||
|
||||
await parser.listen(listenTableName, parserTree);
|
||||
expect(result).toBe(expectTableName);
|
||||
});
|
||||
});
|
18
test/parser/hive/syntax.test.ts
Normal file
18
test/parser/hive/syntax.test.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import SQLParser from '../../../src/parser/hive';
|
||||
|
||||
describe('Hive SQL Syntax Tests', () => {
|
||||
const parser = new SQLParser();
|
||||
|
||||
test('Select Statement', () => {
|
||||
const sql = 'SELECT * FROM employee WHERE salary>30000;';
|
||||
const result = parser.validate(sql);
|
||||
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
|
||||
test('Select 1+1', () => {
|
||||
const sql = 'SELECT 1+1;';
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
});
|
27
test/parser/hive/visitor.test.ts
Normal file
27
test/parser/hive/visitor.test.ts
Normal file
@ -0,0 +1,27 @@
|
||||
import SQLParser, { HiveSqlVisitor } from '../../../src/parser/hive';
|
||||
|
||||
describe('Generic SQL Visitor Tests', () => {
|
||||
const expectTableName = 'user1';
|
||||
const sql = `select id,name,sex from ${expectTableName};`;
|
||||
const parser = new SQLParser();
|
||||
|
||||
const parserTree = parser.parse(sql, (error) => {
|
||||
console.log('Parse error:', error);
|
||||
});
|
||||
|
||||
console.log('Parser tree string:', parser.toString(parserTree));
|
||||
|
||||
test('Visitor visitTableName', () => {
|
||||
let result = '';
|
||||
class MyVisitor extends HiveSqlVisitor {
|
||||
visitTable_name(ctx): void {
|
||||
result = ctx.getText().toLowerCase();
|
||||
super.visitTable_name(ctx);
|
||||
}
|
||||
}
|
||||
const visitor: any = new MyVisitor();
|
||||
visitor.visit(parserTree);
|
||||
|
||||
expect(result).toBe(expectTableName);
|
||||
});
|
||||
});
|
12
test/parser/plsql/lexer.test.ts
Normal file
12
test/parser/plsql/lexer.test.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import SQLParser from '../../../src/parser/plsql';
|
||||
|
||||
describe('PLSQL Lexer tests', () => {
|
||||
const parser = new SQLParser();
|
||||
|
||||
const sql = 'select id,name,sex from user1;';
|
||||
const tokens = parser.getAllTokens(sql);
|
||||
|
||||
test('token counts', () => {
|
||||
expect(tokens.length).toBe(12);
|
||||
});
|
||||
});
|
22
test/parser/plsql/listener.test.ts
Normal file
22
test/parser/plsql/listener.test.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import SQLParser, { PlSqlParserListener } from '../../../src/parser/plsql';
|
||||
|
||||
describe('PLSQL Listener Tests', () => {
|
||||
const expectTableName = 'user1';
|
||||
const sql = `select id,name,sex from ${expectTableName};`;
|
||||
const parser = new SQLParser();
|
||||
|
||||
const parserTree = parser.parse(sql);
|
||||
|
||||
test('Listener enterTableName', async () => {
|
||||
let result = '';
|
||||
class MyListener extends PlSqlParserListener {
|
||||
enterTable_ref_list(ctx): void {
|
||||
result = ctx.getText().toLowerCase();
|
||||
}
|
||||
}
|
||||
const listenTableName: any = new MyListener();
|
||||
|
||||
await parser.listen(listenTableName, parserTree);
|
||||
expect(result).toBe(expectTableName);
|
||||
});
|
||||
});
|
23
test/parser/plsql/syntax.test.ts
Normal file
23
test/parser/plsql/syntax.test.ts
Normal file
@ -0,0 +1,23 @@
|
||||
import SQLParser from '../../../src/parser/plsql';
|
||||
|
||||
describe('PLSQL Syntax Tests', () => {
|
||||
const parser = new SQLParser();
|
||||
|
||||
test('Test simple select Statement', () => {
|
||||
const sql = 'select id,name from user1;';
|
||||
const result = parser.validate(sql);
|
||||
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
|
||||
test(`Test select, where, order by`, () => {
|
||||
const sql = `
|
||||
select eid, emp_last, mgr_id, reportlevel
|
||||
from reports_to_101 r, auto a
|
||||
where r.c1 = a.c2
|
||||
order by reportlevel, eid
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
});
|
23
test/parser/plsql/visitor.test.ts
Normal file
23
test/parser/plsql/visitor.test.ts
Normal file
@ -0,0 +1,23 @@
|
||||
import SQLParser, { PlSqlParserVisitor } from '../../../src/parser/plsql';
|
||||
|
||||
describe('PLSQL Visitor Tests', () => {
|
||||
const expectTableName = 'user1';
|
||||
const sql = `select id,name,sex from ${expectTableName};`;
|
||||
const parser = new SQLParser();
|
||||
|
||||
const parserTree = parser.parse(sql);
|
||||
|
||||
test('Visitor visitTable_ref_list', () => {
|
||||
let result = '';
|
||||
class MyVisitor extends PlSqlParserVisitor {
|
||||
visitTable_ref_list(ctx): void {
|
||||
result = ctx.getText().toLowerCase();
|
||||
super.visitTable_ref_list(ctx);
|
||||
}
|
||||
}
|
||||
const visitor: any = new MyVisitor();
|
||||
visitor.visit(parserTree);
|
||||
|
||||
expect(result).toBe(expectTableName);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user