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:
nankaNULL
2023-02-27 19:03:32 +08:00
committed by GitHub
parent 11915b155d
commit 4f02f9aca0
17 changed files with 9354 additions and 5804 deletions

View 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);
});
});

View 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);
});
});

View File

@ -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 = `

View 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);
});
});

View 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);
});
});