Skip to content

Commit a9f85b8

Browse files
committed
[PlSql] Introduce support for annotations_clause
1 parent 41d0744 commit a9f85b8

File tree

4 files changed

+42
-73
lines changed

4 files changed

+42
-73
lines changed

sql/plsql/PlSqlLexer.g4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ ANCESTOR : 'ANCESTOR';
8181
ANCILLARY : 'ANCILLARY';
8282
AND : 'AND';
8383
AND_EQUAL : 'AND_EQUAL';
84+
ANNOTATIONS : 'ANNOTATIONS';
8485
ANOMALY : 'ANOMALY';
8586
ANSI_REARCH : 'ANSI_REARCH';
8687
ANTIJOIN : 'ANTIJOIN';

sql/plsql/PlSqlParser.g4

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3453,7 +3453,7 @@ table_properties
34533453
logical_replication_clause? flashback_archive_clause? physical_properties? (ROW ARCHIVAL)? (
34543454
AS select_only_statement
34553455
| FOR EXCHANGE WITH TABLE (schema_name '.')? table_name
3456-
)?
3456+
)? annotations_clause?
34573457
;
34583458

34593459
read_only_clause
@@ -4914,6 +4914,7 @@ alter_table_properties
49144914
| READ ONLY
49154915
| READ WRITE
49164916
| REKEY CHAR_STRING
4917+
| annotations_clause
49174918
;
49184919

49194920
alter_table_partitioning
@@ -5188,7 +5189,7 @@ modify_column_clauses
51885189
;
51895190

51905191
modify_col_properties
5191-
: column_name datatype? (DEFAULT (ON NULL_)? expression)? (ENCRYPT encryption_spec | DECRYPT)? inline_constraint* lob_storage_clause?
5192+
: column_name datatype? (DEFAULT (ON NULL_)? expression)? (ENCRYPT encryption_spec | DECRYPT)? inline_constraint* lob_storage_clause? annotations_clause?
51925193
//TODO alter_xmlschema_clause
51935194
;
51945195

@@ -5360,7 +5361,7 @@ column_definition
53605361
)? (DEFAULT (ON NULL_)? expression | identity_clause)? (ENCRYPT encryption_spec)? (
53615362
inline_constraint+
53625363
| inline_ref_constraint
5363-
)?
5364+
)? annotations_clause?
53645365
;
53655366

53665367
column_collation_name
@@ -7005,6 +7006,24 @@ xmlserialize_param_ident_part
70057006
| INDENT (SIZE '=' concatenation)?
70067007
;
70077008

7009+
// Annotations
7010+
7011+
annotations_clause
7012+
: ANNOTATIONS '(' annotations_list ')'
7013+
;
7014+
7015+
annotations_list
7016+
: (
7017+
ADD (IF NOT EXISTS | OR REPLACE)?
7018+
| DROP (IF EXISTS)?
7019+
| REPLACE
7020+
)? annotation (',' annotations_list)*
7021+
;
7022+
7023+
annotation
7024+
: identifier CHAR_STRING?
7025+
;
7026+
70087027
// SqlPlus
70097028

70107029
sql_plus_command_no_semicolon

sql/plsql/examples/alter_table.sql

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
11
ALTER TABLE test1 SPLIT PARTITION p_MAXV
22
AT (TO_DATE('01/01/2030', 'DD/MM/YYYY'))
3-
INTO (partition p_2029 TABLESPACE users, partition p_MAXV) ONLINE;
3+
INTO (partition p_2029 TABLESPACE users, partition p_MAXV) ONLINE;
4+
5+
ALTER TABLE fruit ANNOTATIONS (Visibility 'Everyone');
6+
7+
ALTER TABLE fruit ANNOTATIONS (drop Visibility);
8+
9+
ALTER TABLE fruit ANNOTATIONS (add Visibility 'Everyone');
10+
11+
ALTER TABLE fruit MODIFY (id ANNOTATIONS (Visibility 'Hidden'));
12+
13+
ALTER TABLE fruit MODIFY (id ANNOTATIONS (drop Visibility));
14+
15+
ALTER TABLE fruit MODIFY (id ANNOTATIONS (add Visibility 'Hidden'));

sql/plsql/examples/create_table.sql

Lines changed: 6 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -24,73 +24,10 @@ CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth IN
2424
ACCESS PARAMETERS ( FIELDS RTRIM (first_name (1:15) CHAR(15), last_name (*:+20), year_of_birth (36:39), phone (40:52), area_code (*-12: +3), exchange (*+1: +3), extension (*+1: +4)))
2525
LOCATION ('info.dat'));
2626

27-
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4))
28-
ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir
29-
ACCESS PARAMETERS ( FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '(' and ')' LRTRIM )
30-
LOCATION ('info.dat'));
31-
32-
CREATE TABLE xtab (recno varchar2(2000))
33-
ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY data_dir
34-
ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE
35-
PREPROCESSOR execdir:'zcat'
36-
LOGFILE 'deptxt1.log'
37-
BADFILE 'deptXT.bad'
38-
FIELDS TERMINATED BY ',' MISSING FIELD VALUES ARE NULL (recno char(2000)))
39-
LOCATION ('foo.dat.gz')) REJECT LIMIT UNLIMITED;
40-
41-
CREATE TABLE deptxt1 ( deptno number(2), dname varchar2(14), loc varchar2(13))
42-
ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY dpump_dir
43-
ACCESS PARAMETERS ( EXTERNAL VARIABLE DATA
44-
LOGFILE 'deptxt1.log'
45-
READSIZE=10000
46-
PREPROCESSOR execdir:'uncompress.sh' )
47-
LOCATION ('deptxt1.dmp')) REJECT LIMIT UNLIMITED;
48-
49-
CREATE TABLE "T_XT" ("C0" VARCHAR2(2000))
50-
ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY DMPDIR
51-
ACCESS PARAMETERS ( RECORDS XMLTAG ("home address", "work address", "home phone")
52-
READSIZE 1024
53-
SKIP 0
54-
FIELDS NOTRIM MISSING FIELD VALUES ARE NULL)
55-
LOCATION ('t.dat')) REJECT LIMIT UNLIMITED;
56-
57-
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4))
58-
ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir
59-
ACCESS PARAMETERS ( RECORDS DELIMITED BY '|' FIELDS TERMINATED BY ','
60-
( first_name CHAR(7), last_name CHAR(8), year_of_birth CHAR(4)))
61-
LOCATION ('info.dat'));
62-
63-
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4))
64-
ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir
65-
ACCESS PARAMETERS (RECORDS FIXED 20 FIELDS (first_name CHAR(7), last_name CHAR(8), year_of_birth CHAR(4)))
66-
LOCATION ('info.dat'));
67-
68-
CREATE TABLE CUSTOMER_TABLE (cust_num VARCHAR2(10), order_num VARCHAR2(20), order_date DATE, item_cnt NUMBER, description VARCHAR2(100), order_total NUMBER(8,2))
69-
ORGANIZATION EXTERNAL ( TYPE ORACLE_HIVE
70-
ACCESS PARAMETERS (
71-
com.oracle.bigdata.tableName: order_db.order_summary
72-
com.oracle.bigdata.colMap: {"col":"ITEM_CNT", "field":"order_line_item_count"}
73-
com.oracle.bigdata.overflow: {"action":"ERROR", "col":"DESCRIPTION"}
74-
com.oracle.bigdata.errorOpt: [{"action":"replace", "value":"INV_NUM" , "col":["CUST_NUM","ORDER_NUM"]} , {"action":"reject", "col":"ORDER_TOTAL"}]
75-
));
27+
CREATE TABLE fruit (
28+
id NUMERIC(9,0) PRIMARY KEY ANNOTATIONS (Visibility 'Everyone'));
7629

77-
CREATE TABLE "MASTERBILL"."ET$03D5D0AD0001" ("USER#", "NAME")
78-
ORGANIZATION EXTERNAL (
79-
TYPE ORACLE_DATAPUMP
80-
DEFAULT DIRECTORY "DBEXPORT"
81-
ACCESS PARAMETERS (
82-
DEBUG = (0 , 0)
83-
DATAPUMP INTERNAL TABLE "SYS"."KU$_USER_MAPPING_VIEW"
84-
TEMPLATE_TABLE "KU$_USER_MAPPING_VIEW_TBL"
85-
JOB ( "MASTERBILL","SYS_EXPORT_FULL_01",2)
86-
WORKERID 1
87-
PARALLEL 1
88-
VERSION '19.3.0.0.0'
89-
ENCRYPTPASSWORDISNULL
90-
COMPRESSION DISABLED
91-
ENCRYPTION DISABLED )
92-
LOCATION ('bogus.dat')
93-
)
94-
PARALLEL 1
95-
REJECT LIMIT UNLIMITED
96-
AS SELECT X FROM "SYS"."KU$_USER_MAPPING_VIEW" KU$;
30+
CREATE TABLE fruit (
31+
id NUMERIC(9,0) PRIMARY KEY,
32+
data varchar2(50))
33+
ANNOTATIONS (Visibility 'Everyone');

0 commit comments

Comments
 (0)