Feat/flink grammar (#73)
* feat: complete flink sql insert statement * feat: complete flink sql drop statement * feat: complete flink sql alert statement * feat: complete flink sql create statement, remove console log * feat: complete flink sql describe, show, explain, use statement * feat(flinksql): add statement, such as set, load * fix(flinksql): fix insert, add temporary table
This commit is contained in:
38
test/parser/flinksql/syntax/alterStatement.test.ts
Normal file
38
test/parser/flinksql/syntax/alterStatement.test.ts
Normal file
@ -0,0 +1,38 @@
|
||||
import { FlinkSQL } from '../../../../src';
|
||||
|
||||
describe('FlinkSQL Create Table Syntax Tests', () => {
|
||||
const parser = new FlinkSQL();
|
||||
// Alter statements
|
||||
test('Test simple alter table Statement', () => {
|
||||
const sql = `
|
||||
ALTER TABLE Orders RENAME TO NewOrders;
|
||||
ALTER TABLE sample_table SET ('key1'='value2');
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test simple alter view Statement', () => {
|
||||
const sql = `
|
||||
ALTER VIEW v1 RENAME TO v2;
|
||||
ALTER VIEW v1 AS SELECT c1, c2 FROM tbl;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test simple alter database Statement', () => {
|
||||
const sql = `ALTER DATABASE tempDB SET ("key1"="value1");`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test simple alter function Statement', () => {
|
||||
const sql = `
|
||||
ALTER FUNCTION tempFunction AS 'SimpleUdf';
|
||||
ALTER TEMPORARY FUNCTION IF EXISTS tempFunction AS 'SimpleUdf';
|
||||
ALTER TEMPORARY SYSTEM FUNCTION IF EXISTS tempFunction AS 'SimpleUdf';
|
||||
ALTER FUNCTION myudf AS 'com.example.MyUdf' LANGUAGE PYTHON;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
});
|
||||
|
43
test/parser/flinksql/syntax/createStatement.test.ts
Normal file
43
test/parser/flinksql/syntax/createStatement.test.ts
Normal file
@ -0,0 +1,43 @@
|
||||
import { FlinkSQL } from '../../../../src';
|
||||
|
||||
describe('FlinkSQL Create Table Syntax Tests', () => {
|
||||
const parser = new FlinkSQL();
|
||||
// Create statements
|
||||
test('Test Create Catalog Statement', () => {
|
||||
const sql = `
|
||||
CREATE CATALOG c1
|
||||
WITH (
|
||||
'key1'='value1',
|
||||
'key2'='value2'
|
||||
)
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test simple Create Database Statement', () => {
|
||||
const sql = `
|
||||
CREATE DATABASE IF NOT EXISTS dataApi
|
||||
WITH (
|
||||
"owner" = "admin"
|
||||
);
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test simple Create View Statement', () => {
|
||||
const sql = `
|
||||
CREATE TEMPORARY VIEW IF NOT EXISTS tempView
|
||||
AS SELECT product, amount FROM Orders;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test simple Create Function Statement', () => {
|
||||
const sql = `
|
||||
CREATE FUNCTION IF NOT EXISTS tempFunction AS 'SimpleUdf';
|
||||
CREATE TEMPORARY FUNCTION function1 AS 'org.apache.fink.function.function1' LANGUAGE JAVA USING JAR 'file:///path/to/test.jar', JAR 'hdfs:///path/to/test2.jar';
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
});
|
@ -4,7 +4,7 @@ describe('FlinkSQL Create Table Syntax Tests', () => {
|
||||
const parser = new FlinkSQL();
|
||||
|
||||
// simple create table statement
|
||||
test('Test simple CreateTable Statement', () => {
|
||||
test('Test simple Create Table Statement', () => {
|
||||
const sql = `
|
||||
CREATE TABLE MyTable (
|
||||
'user_id' BIGINT,
|
||||
@ -16,6 +16,19 @@ describe('FlinkSQL Create Table Syntax Tests', () => {
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
// create temporary table statement
|
||||
test('Test Temporary Create Table Statement', () => {
|
||||
const sql = `
|
||||
CREATE TEMPORARY TABLE MyTable (
|
||||
'user_id' BIGINT,
|
||||
'name' STRING
|
||||
) WITH (
|
||||
'connector'='oracle-x'
|
||||
);
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
// Metadata Columns statement
|
||||
test('Test Metadata Columns Statement', () => {
|
||||
const sql = `
|
||||
@ -114,6 +127,19 @@ describe('FlinkSQL Create Table Syntax Tests', () => {
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
// AS select_statement
|
||||
test('Test As Select Statement', () => {
|
||||
const sql = `
|
||||
CREATE TABLE my_ctas_table
|
||||
WITH (
|
||||
'connector' = 'kafka'
|
||||
)
|
||||
AS SELECT id, name, age FROM source_table WHERE mod(id, 10) = 0;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
|
||||
// create catalog table
|
||||
test('Test Create Catalog Table Statement', () => {
|
||||
const sql = `
|
||||
|
49
test/parser/flinksql/syntax/dropStatement.test.ts
Normal file
49
test/parser/flinksql/syntax/dropStatement.test.ts
Normal file
@ -0,0 +1,49 @@
|
||||
import { FlinkSQL } from '../../../../src';
|
||||
|
||||
describe('FlinkSQL Create Table Syntax Tests', () => {
|
||||
const parser = new FlinkSQL();
|
||||
// Drop statements
|
||||
test('Test Simple Drop Catalog Statement', () => {
|
||||
const sql = `
|
||||
DROP CATALOG catalog1;
|
||||
DROP CATALOG IF EXISTS catalog2;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test Simple Drop Table Statement', () => {
|
||||
const sql = `
|
||||
DROP TABLE Orders;
|
||||
DROP TABLE IF EXISTS Orders;
|
||||
DROP TEMPORARY TABLE IF EXISTS Orders;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test Simple Drop Database Statement', () => {
|
||||
const sql = `
|
||||
DROP DATABASE Orders;
|
||||
DROP DATABASE IF EXISTS Orders RESTRICT;
|
||||
DROP DATABASE IF EXISTS Orders CASCADE;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test Simple Drop View Statement', () => {
|
||||
const sql = `
|
||||
DROP VIEW Orders;
|
||||
DROP TEMPORARY VIEW IF EXISTS Orders;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test Simple Drop Function Statement', () => {
|
||||
const sql = `
|
||||
DROP FUNCTION Orders;
|
||||
DROP TEMPORARY FUNCTION IF EXISTS Orders;
|
||||
DROP TEMPORARY SYSTEM FUNCTION IF EXISTS Orders;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
});
|
83
test/parser/flinksql/syntax/insertStatement.test.ts
Normal file
83
test/parser/flinksql/syntax/insertStatement.test.ts
Normal file
@ -0,0 +1,83 @@
|
||||
import { FlinkSQL } from '../../../../src';
|
||||
|
||||
describe('FlinkSQL Create Table Syntax Tests', () => {
|
||||
const parser = new FlinkSQL();
|
||||
// insert statements
|
||||
test('Test one simple Insert Statement', () => {
|
||||
const sql = `
|
||||
INSERT INTO country_page_view
|
||||
SELECT user, cnt FROM page_view_source;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test Insert Overwrite Statement', () => {
|
||||
const sql = `
|
||||
INSERT OVERWRITE country_page_view PARTITION (date='2019-8-30', country='China')
|
||||
SELECT user, cnt FROM page_view_source;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test execute Statement', () => {
|
||||
const sql = `
|
||||
EXECUTE INSERT INTO country_page_view PARTITION (date='2019-8-30', country='China')
|
||||
SELECT user, cnt FROM page_view_source;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test Partition Clause Statement', () => {
|
||||
const sql = `
|
||||
INSERT INTO country_page_view PARTITION (date='2019-8-30', country='China')
|
||||
SELECT user, cnt FROM page_view_source;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test Column List Statement', () => {
|
||||
const sql = `
|
||||
INSERT INTO emps PARTITION (x='ab', y='bc') (x, y) SELECT * FROM emps;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test Insert Values Statement', () => {
|
||||
const sql = `
|
||||
INSERT INTO students
|
||||
VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test insert into multiple tables Statement for 1.14', () => {
|
||||
const sql = `
|
||||
BEGIN STATEMENT SET;
|
||||
|
||||
INSERT INTO pageviews
|
||||
SELECT page_id, count(1)
|
||||
FROM pageviews
|
||||
GROUP BY page_id;
|
||||
|
||||
INSERT INTO uniqueview
|
||||
SELECT page_id, count(distinct user_id)
|
||||
FROM pageviews
|
||||
GROUP BY page_id;
|
||||
|
||||
END;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
test('Test insert into multiple tables Statement for 1.15', () => {
|
||||
const sql = `
|
||||
EXECUTE STATEMENT SET
|
||||
BEGIN
|
||||
INSERT INTO students VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
|
||||
INSERT INTO students VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
|
||||
END;
|
||||
`;
|
||||
const result = parser.validate(sql);
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user