From 6f7a59775cbfb4e44ff297f0b3532cdb038d9dae Mon Sep 17 00:00:00 2001 From: hayden Date: Fri, 7 Jul 2023 17:04:37 +0800 Subject: [PATCH] test: hivesql alter syntax unit tests --- .../parser/hive/syntax/alterStatement.test.ts | 36 +++++ .../hive/syntax/fixtures/alterConnector.sql | 7 + .../hive/syntax/fixtures/alterDatabase.sql | 19 +++ .../hive/syntax/fixtures/alterTable.sql | 123 ++++++++++++++++++ .../parser/hive/syntax/fixtures/alterView.sql | 9 ++ 5 files changed, 194 insertions(+) create mode 100644 test/parser/hive/syntax/fixtures/alterConnector.sql create mode 100644 test/parser/hive/syntax/fixtures/alterDatabase.sql create mode 100644 test/parser/hive/syntax/fixtures/alterTable.sql create mode 100644 test/parser/hive/syntax/fixtures/alterView.sql diff --git a/test/parser/hive/syntax/alterStatement.test.ts b/test/parser/hive/syntax/alterStatement.test.ts index eb81e3e..ca5599a 100644 --- a/test/parser/hive/syntax/alterStatement.test.ts +++ b/test/parser/hive/syntax/alterStatement.test.ts @@ -4,10 +4,38 @@ import { readSQL } from '../../../helper'; const parser = new HiveSQL(); const features = { + databases: readSQL(__dirname, 'alterDatabase.sql'), + connectors: readSQL(__dirname, 'alterConnector.sql'), + tables: readSQL(__dirname, 'alterTable.sql'), indexes: readSQL(__dirname, 'alterIndex.sql'), + views: readSQL(__dirname, 'alterView.sql'), }; describe('Hive Alter Syntax Tests', () => { + describe('ALTER DATABASE', () => { + features.databases.forEach((db) => { + it(db, () => { + expect(parser.validate(db).length).toBe(0); + }); + }); + }); + + describe('ALTER CONNECTOR', () => { + features.connectors.forEach((ctors) => { + it(ctors, () => { + expect(parser.validate(ctors).length).toBe(0); + }); + }); + }); + + describe('ALTER TABLE', () => { + features.tables.forEach((tb) => { + it(tb, () => { + expect(parser.validate(tb).length).toBe(0); + }); + }); + }); + describe('ALTER INDEX', () => { features.indexes.forEach((index) => { it(index, () => { @@ -15,4 +43,12 @@ describe('Hive Alter Syntax Tests', () => { }); }); }); + + describe('ALTER VIEW', () => { + features.views.forEach((view) => { + it(view, () => { + expect(parser.validate(view).length).toBe(0); + }); + }); + }); }); diff --git a/test/parser/hive/syntax/fixtures/alterConnector.sql b/test/parser/hive/syntax/fixtures/alterConnector.sql new file mode 100644 index 0000000..45dd85e --- /dev/null +++ b/test/parser/hive/syntax/fixtures/alterConnector.sql @@ -0,0 +1,7 @@ +ALTER CONNECTOR mysql_local SET DCPROPERTIES ('creator'='hayden','date'='2023-07-07'); + +ALTER CONNECTOR pg_local SET URL 'jdbc:postgresql://localhost:5400'; + +ALTER CONNECTOR hbase_local SET OWNER USER `hayden`; + +ALTER CONNECTOR hbase_local SET OWNER ROLE `admin`; \ No newline at end of file diff --git a/test/parser/hive/syntax/fixtures/alterDatabase.sql b/test/parser/hive/syntax/fixtures/alterDatabase.sql new file mode 100644 index 0000000..cdba438 --- /dev/null +++ b/test/parser/hive/syntax/fixtures/alterDatabase.sql @@ -0,0 +1,19 @@ +ALTER DATABASE mydb1 SET DBPROPERTIES ('creator'='hayden','date'='2023-07-07'); + +ALTER SCHEMA myschema1 SET DBPROPERTIES ('creator'='hayden','date'='2023-07-07'); + +ALTER DATABASE database_name SET OWNER USER hayden; + +ALTER SCHEMA database_name SET OWNER ROLE `admin`; + +ALTER DATABASE database_name SET OWNER USER jack; + +ALTER SCHEMA database_name SET OWNER ROLE ddladmin; + +ALTER DATABASE database_name SET LOCATION '/myhive/mydb'; + +ALTER SCHEMA database_name SET LOCATION '/myhive/myschema'; + +ALTER DATABASE database_name SET MANAGEDLOCATION '/myhive/myinnerdb'; + +ALTER SCHEMA database_name SET MANAGEDLOCATION '/myhive/myinnerschema'; \ No newline at end of file diff --git a/test/parser/hive/syntax/fixtures/alterTable.sql b/test/parser/hive/syntax/fixtures/alterTable.sql new file mode 100644 index 0000000..92a4fbe --- /dev/null +++ b/test/parser/hive/syntax/fixtures/alterTable.sql @@ -0,0 +1,123 @@ +-- Rename Table +ALTER TABLE tbl1 RENAME TO tbl2; + +-- Alter Table Properties +ALTER TABLE mydb.tb22 SET TBLPROPERTIES ('creator'='hayden'); + +-- Alter Table Comment +ALTER TABLE mydb.tb22 SET TBLPROPERTIES ('comment' = 'This is a new comment!'); + +-- Add SerDe Properties +ALTER TABLE employee_tb SET SERDE 'com.dt.test'; + +ALTER TABLE employee_tb +SET SERDE 'com.dt.test' +WITH SERDEPROPERTIES ('field.delim' = ','); + +ALTER TABLE sale_rbl +PARTITION ( + `pt1`='1' +) +SET SERDEPROPERTIES ('field.delim' = ','); + +-- Remove SerDe Properties +ALTER TABLE sale_rbl UNSET SERDEPROPERTIES ('field.delim'); + +-- Alter Table Storage Properties +ALTER TABLE students +CLUSTERED BY (id, `name`, age) +SORTED BY (age) +INTO 2 BUCKETS; + +-- Alter Table Skewed or Stored as Directories +ALTER TABLE dt_shop +SKEWED BY (id, cost) +ON (('id',1), ('cost', 1000)); + +ALTER TABLE dt_shop +SKEWED BY (id, cost) +ON (('id',1), ('cost', 1000)) +STORED AS DIRECTORIES; + +-- Alter Table Not Skewed +ALTER TABLE dt_shop NOT SKEWED; + +-- Alter Table Not Stored as Directories +ALTER TABLE dt_shop NOT STORED AS DIRECTORIES; + +-- Alter Table Set Skewed Location +ALTER TABLE dt_shop SET SKEWED LOCATION ('id'='location1', "cost"="loaction2" ); + +-- Alter Table Constraints +ALTER TABLE tbl1 +ADD CONSTRAINT const1 +PRIMARY KEY (id) +DISABLE NOVALIDATE; + +ALTER TABLE tbl2 +ADD CONSTRAINT const2 +FOREIGN KEY (id, `name`) +REFERENCES refer_tb(rid, rname) +DISABLE NOVALIDATE RELY; + +ALTER TABLE tbl3 +ADD CONSTRAINT const3 +UNIQUE (`name`, `age`) +DISABLE NOVALIDATE; + +ALTER TABLE tbl4 +CHANGE COLUMN `col1` `col2` STRING CONSTRAINT const4 +NOT NULL ENABLE; + +ALTER TABLE tbl5 +CHANGE COLUMN `col3` `col4` INT CONSTRAINT const5 +DEFAULT 998 ENABLE; + +ALTER TABLE tbl6 +CHANGE COLUMN col5 col6 MAP CONSTRAINT const6 +CHECK (1) ENABLE; + +ALTER TABLE tbl7 DROP CONSTRAINT remove_const; + +-- Alter Partition +ALTER TABLE add_par_tbl +ADD IF NOT EXISTS +PARTITION (`pt1` = 1) LOCATION '/pat/loc' +PARTITION (`pt2` = 2, `pt3`=3) LOCATION '/pat/loc' + +-- Rename Partition +ALTER TABLE ren_par_tbl +PARTITION (`pt1`=1) +RENAME TO PARTITION (`pt2`=2) ; + +-- Exchange Partition +ALTER TABLE ex_part_tbl2 +EXCHANGE PARTITION (`pt1`=1) +WITH TABLE ex_part_tbl1; + +-- Recover Partitions +MSCK TABLE rec_tbl; + +MSCK REPAIR TABLE rec_tbl SYNC PARTITIONS; + +-- Drop Partitions +ALTER TABLE dr_tbl1 DROP PARTITION (`pt1`=1); + +ALTER TABLE dr_tbl2 DROP IF EXISTS PARTITION (`pt2`=2) PURGE; + +-- ALTER TABLE dr_tbl2 DROP IF EXISTS PARTITION (`pt2`=2) IGNORE PROTECTION PURGE; + +-- Archive Partition +ALTER TABLE arch_pt_tbl1 ARCHIVE PARTITION (`pt1`=1); + +ALTER TABLE arch_pt_tbl2 UNARCHIVE PARTITION (`pt2`=2) ; + +-- Add/Replace Columns +ALTER TABLE rp_col_tbl1 ADD COLUMNS (`col1` INT); + +ALTER TABLE rp_col_tbl2 REPLACE COLUMNS (`col2` INT); + +ALTER TABLE rp_col_tbl2 +PARTITION (`pt1`=1) +ADD COLUMNS (`col3` INT COMMENT 'a new col') +CASCADE; diff --git a/test/parser/hive/syntax/fixtures/alterView.sql b/test/parser/hive/syntax/fixtures/alterView.sql new file mode 100644 index 0000000..b71a418 --- /dev/null +++ b/test/parser/hive/syntax/fixtures/alterView.sql @@ -0,0 +1,9 @@ +ALTER VIEW mydb.view1 SET TBLPROPERTIES ('author'='hayden','date'='2023-07-07') + +ALTER VIEW view2 +AS SELECT DISTINCT id, `name`, runtime + FROM task_tbl + WHERE type='hour'; + +ALTER MATERIALIZED VIEW myschema1.materialized_view_1 +ENABLE REWRITE; \ No newline at end of file