support obcdc 4.3.0.1

This commit is contained in:
wangxiantong.wxt 2024-04-15 20:17:00 +08:00
parent 2d1e5030b8
commit 0be86e9311
16 changed files with 758 additions and 60 deletions

View File

@ -9,6 +9,7 @@ oceanbase_cdc_repo=https://mirrors.aliyun.com/oceanbase/community/stable/el/7/aa
oceanbase-ce-devel-3.1.5-100020022023091114.el7.aarch64.rpm oceanbase-ce-devel-3.1.5-100020022023091114.el7.aarch64.rpm
oceanbase-ce-cdc-4.2.1.4-104010022024031310.el7.aarch64.rpm oceanbase-ce-cdc-4.2.1.4-104010022024031310.el7.aarch64.rpm
oceanbase-ce-cdc-4.2.2.1-101000022024031310.el7.aarch64.rpm oceanbase-ce-cdc-4.2.2.1-101000022024031310.el7.aarch64.rpm
oceanbase-ce-cdc-4.3.0.1-101000042024032211.el7.aarch64.rpm
[tools] [tools]
obdevtools-gcc9-9.3.0-52022092914.el7.aarch64.rpm obdevtools-gcc9-9.3.0-52022092914.el7.aarch64.rpm

View File

@ -9,6 +9,7 @@ oceanbase_cdc_repo=https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x8
oceanbase-ce-devel-3.1.5-100020022023091114.el7.x86_64.rpm oceanbase-ce-devel-3.1.5-100020022023091114.el7.x86_64.rpm
oceanbase-ce-cdc-4.2.1.4-104010022024031310.el7.x86_64.rpm oceanbase-ce-cdc-4.2.1.4-104010022024031310.el7.x86_64.rpm
oceanbase-ce-cdc-4.2.2.1-101000022024031310.el7.x86_64.rpm oceanbase-ce-cdc-4.2.2.1-101000022024031310.el7.x86_64.rpm
oceanbase-ce-cdc-4.3.0.1-101000042024032211.el7.x86_64.rpm
[tools] [tools]
obdevtools-gcc9-9.3.0-52022092914.el7.x86_64.rpm obdevtools-gcc9-9.3.0-52022092914.el7.x86_64.rpm

View File

@ -9,6 +9,7 @@ oceanbase_cdc_repo=https://mirrors.aliyun.com/oceanbase/community/stable/el/8/aa
oceanbase-ce-devel-3.1.5-100020022023091114.el8.aarch64.rpm oceanbase-ce-devel-3.1.5-100020022023091114.el8.aarch64.rpm
oceanbase-ce-cdc-4.2.1.4-104010022024031310.el8.aarch64.rpm oceanbase-ce-cdc-4.2.1.4-104010022024031310.el8.aarch64.rpm
oceanbase-ce-cdc-4.2.2.1-101000022024031310.el8.aarch64.rpm oceanbase-ce-cdc-4.2.2.1-101000022024031310.el8.aarch64.rpm
oceanbase-ce-cdc-4.3.0.1-101000042024032211.el8.aarch64.rpm
[tools] [tools]
obdevtools-gcc9-9.3.0-52022092914.el8.aarch64.rpm obdevtools-gcc9-9.3.0-52022092914.el8.aarch64.rpm

View File

@ -9,6 +9,7 @@ oceanbase_cdc_repo=https://mirrors.aliyun.com/oceanbase/community/stable/el/8/x8
oceanbase-ce-devel-3.1.5-100020022023091114.el8.x86_64.rpm oceanbase-ce-devel-3.1.5-100020022023091114.el8.x86_64.rpm
oceanbase-ce-cdc-4.2.1.4-104010022024031310.el8.x86_64.rpm oceanbase-ce-cdc-4.2.1.4-104010022024031310.el8.x86_64.rpm
oceanbase-ce-cdc-4.2.2.1-101000022024031310.el8.x86_64.rpm oceanbase-ce-cdc-4.2.2.1-101000022024031310.el8.x86_64.rpm
oceanbase-ce-cdc-4.3.0.1-101000042024032211.el8.x86_64.rpm
[tools] [tools]
obdevtools-gcc9-9.3.0-52022092914.el8.x86_64.rpm obdevtools-gcc9-9.3.0-52022092914.el8.x86_64.rpm

View File

@ -9,6 +9,7 @@ oceanbase_cdc_repo=https://mirrors.aliyun.com/oceanbase/community/stable/el/8/aa
oceanbase-ce-devel-3.1.5-100020022023091114.el8.aarch64.rpm oceanbase-ce-devel-3.1.5-100020022023091114.el8.aarch64.rpm
oceanbase-ce-cdc-4.2.1.4-104010022024031310.el8.aarch64.rpm oceanbase-ce-cdc-4.2.1.4-104010022024031310.el8.aarch64.rpm
oceanbase-ce-cdc-4.2.2.1-101000022024031310.el8.aarch64.rpm oceanbase-ce-cdc-4.2.2.1-101000022024031310.el8.aarch64.rpm
oceanbase-ce-cdc-4.3.0.1-101000042024032211.el8.aarch64.rpm
[tools] [tools]
obdevtools-gcc9-9.3.0-52022092914.el8.aarch64.rpm obdevtools-gcc9-9.3.0-52022092914.el8.aarch64.rpm

View File

@ -9,6 +9,7 @@ oceanbase_cdc_repo=https://mirrors.aliyun.com/oceanbase/community/stable/el/8/x8
oceanbase-ce-devel-3.1.5-100020022023091114.el8.x86_64.rpm oceanbase-ce-devel-3.1.5-100020022023091114.el8.x86_64.rpm
oceanbase-ce-cdc-4.2.1.4-104010022024031310.el8.x86_64.rpm oceanbase-ce-cdc-4.2.1.4-104010022024031310.el8.x86_64.rpm
oceanbase-ce-cdc-4.2.2.1-101000022024031310.el8.x86_64.rpm oceanbase-ce-cdc-4.2.2.1-101000022024031310.el8.x86_64.rpm
oceanbase-ce-cdc-4.3.0.1-101000042024032211.el8.x86_64.rpm
[tools] [tools]
obdevtools-gcc9-9.3.0-52022092914.el8.x86_64.rpm obdevtools-gcc9-9.3.0-52022092914.el8.x86_64.rpm

View File

@ -257,7 +257,7 @@ size_t binary_to_hex(const std::string& binary, char* buff, int len)
{ {
size_t i = 0; size_t i = 0;
size_t index = 0; size_t index = 0;
std::bitset<64> bit_max(atoi(binary.c_str())); std::bitset<64> bit_max(std::stoull((binary.c_str())));
std::string real = bit_max.to_string().substr(64 - len * 8, len * 8); std::string real = bit_max.to_string().substr(64 - len * 8, len * 8);
for (; i < real.size(); i += 8) { for (; i < real.size(); i += 8) {
std::bitset<8> bit_set{real.substr(i, 8)}; std::bitset<8> bit_set{real.substr(i, 8)};
@ -1007,10 +1007,7 @@ int get_packed_integer(size_t val)
size_t int_two_complement(unsigned char* val, size_t len, const char* data) size_t int_two_complement(unsigned char* val, size_t len, const char* data)
{ {
auto num = atoll(data); auto num = std::stoull(data);
// if (num < 0) {
// num += pow(2, len);
// }
switch (len) { switch (len) {
case 1: case 1:
int1store(val, num); int1store(val, num);

View File

@ -146,26 +146,57 @@ TEST(DataType, short_type)
TEST(DataType, long_type) TEST(DataType, long_type)
{ {
IColMeta col_meta; {
std::string val = "-2222"; IColMeta col_meta;
uint8_t result[4] = {82, 247, 255, 255}; std::string val = "-2222";
col_meta.setType(OB_TYPE_LONG); uint8_t result[4] = {82, 247, 255, 255};
MsgBuf msg_buf; col_meta.setType(OB_TYPE_LONG);
get_column_val_bytes(col_meta, val.size(), val.data(), msg_buf, std::string()); MsgBuf msg_buf;
ASSERT_EQ(true, memcmp(result, msg_buf.begin()->buffer(), sizeof(result)) == 0); get_column_val_bytes(col_meta, val.size(), val.data(), msg_buf, std::string());
ASSERT_EQ(true, memcmp(result, msg_buf.begin()->buffer(), sizeof(result)) == 0);
}
{
IColMeta col_meta;
std::string val = "18446744073709551615";
uint8_t result[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
col_meta.setType(OB_TYPE_LONGLONG);
MsgBuf msg_buf;
size_t len = get_column_val_bytes(col_meta, val.size(), val.data(), msg_buf, std::string());
for (int i = 0; i < len; ++i) {
printf("\\%02hhx", (unsigned char)msg_buf.begin()->buffer()[i]);
}
ASSERT_EQ(true, memcmp(result, msg_buf.begin()->buffer(), sizeof(result)) == 0);
}
} }
TEST(DataType, bit_type) TEST(DataType, bit_type)
{ {
IColMeta col_meta; {
std::string val = "6"; IColMeta col_meta;
col_meta.setType(OB_TYPE_BIT); std::string val = "6";
col_meta.setPrecision(5); col_meta.setType(OB_TYPE_BIT);
MsgBuf msg_buf; col_meta.setPrecision(5);
get_column_val_bytes(col_meta, val.size(), val.data(), msg_buf, std::string()); MsgBuf msg_buf;
get_column_val_bytes(col_meta, val.size(), val.data(), msg_buf, std::string());
uint8_t result[1] = {6}; uint8_t result[1] = {6};
ASSERT_EQ(true, memcmp(result, msg_buf.begin()->buffer(), sizeof(result)) == 0); ASSERT_EQ(true, memcmp(result, msg_buf.begin()->buffer(), sizeof(result)) == 0);
}
{
IColMeta col_meta;
std::string val = "8608372198138972245";
col_meta.setType(OB_TYPE_BIT);
col_meta.setPrecision(64);
MsgBuf msg_buf;
size_t len = get_column_val_bytes(col_meta, val.size(), val.data(), msg_buf, std::string());
for (int i = 0; i < len; ++i) {
printf("\\%02hhx", (unsigned char)msg_buf.begin()->buffer()[i]);
}
uint8_t result[8] = {0x77, 0x77, 0x14, 0xe7, 0xb4, 0x6c, 0x08, 0x55};
ASSERT_EQ(true, memcmp(result, msg_buf.begin()->buffer(), sizeof(result)) == 0);
}
} }
TEST(DataType, date_type) TEST(DataType, date_type)

View File

@ -1,4 +1,7 @@
lexer grammar OBLexer; lexer grammar OBLexer;
@members {
bool inRangeOperator = false;
}
ACCESS ACCESS
: ( A C C E S S ) : ( A C C E S S )
@ -434,6 +437,10 @@ INSERT
: ( I N S E R T ) : ( I N S E R T )
; ;
ORDINALITY
: O R D I N A L I T Y
;
INTO INTO
: ( I N T O ) : ( I N T O )
; ;
@ -534,6 +541,10 @@ LONG
: ( L O N G ) : ( L O N G )
; ;
UNLIMITED
: U N L I M I T E D
;
LONGBLOB LONGBLOB
: ( L O N G B L O B ) : ( L O N G B L O B )
; ;
@ -912,6 +923,10 @@ UNLOCK
: ( U N L O C K ) : ( U N L O C K )
; ;
LINE_DELIMITER
: L I N E '_' D E L I M I T E R
;
UNSIGNED UNSIGNED
: ( U N S I G N E D ) : ( U N S I G N E D )
; ;
@ -924,6 +939,10 @@ USAGE
: ( U S A G E ) : ( U S A G E )
; ;
GEOMCOLLECTION
: G E O M C O L L E C T I O N
;
USE USE
: ( U S E ) : ( U S E )
; ;
@ -1014,30 +1033,38 @@ SESSION_ALIAS
| ('@''@' L O C A L ) | ('@''@' L O C A L )
; ;
UnderlineUTF8 UNDER_LINE_UTF8
: ('_' U T F '8') : ('_' U T F '8')
; ;
UnderlineUTF8MB4 UNDER_LINE_UTF8MB4
: ('_' U T F '8' M B '4') : ('_' U T F '8' M B '4')
; ;
UnderlineGBK UNDER_LINE_GBK
: ('_' G B K ) : ('_' G B K )
; ;
UnderlineGB18030 UNDER_LINE_GB18030
: ('_' G B '1''8''0''3''0') : ('_' G B '1''8''0''3''0')
; ;
UnderlineBINARY UNDER_LINE_BINARY
: ('_' B I N A R Y ) : ('_' B I N A R Y )
; ;
UnderlineUTF16 UNDER_LINE_UTF16
: ('_' U T F '1''6') : ('_' U T F '1''6')
; ;
UNDER_LINE_LATIN1
: ('_' L A T I N '1')
;
UNDER_LINE_GB18030_2022
: ('_' G B '1''8''0''3''0''_''2''0''2''2')
;
STRONG STRONG
: ( S T R O N G ) : ( S T R O N G )
; ;
@ -1046,6 +1073,10 @@ WEAK
: ( W E A K ) : ( W E A K )
; ;
CONNECT
: C O N N E C T
;
FROZEN FROZEN
: ( F R O Z E N ) : ( F R O Z E N )
; ;
@ -1094,6 +1125,10 @@ NO_PUSH_LIMIT
: N O '_' P U S H '_' L I M I T : N O '_' P U S H '_' L I M I T
; ;
EMPTY_FIELD_AS_NULL
: E M P T Y '_' F I E L D '_' A S '_' N U L L
;
UNINSTALL UNINSTALL
: U N I N S T A L L : U N I N S T A L L
; ;
@ -1482,6 +1517,10 @@ EVERY
: E V E R Y : E V E R Y
; ;
SHARDING
: S H A R D I N G
;
BYTE BYTE
: B Y T E : B Y T E
; ;
@ -1496,6 +1535,7 @@ MIN_ROWS
ERROR_P ERROR_P
: E R R O R : E R R O R
| E R R O R '_' P
; ;
MAX_USER_CONNECTIONS MAX_USER_CONNECTIONS
@ -1574,6 +1614,10 @@ SQL_TSI_MONTH
: S Q L '_' T S I '_' M O N T H : S Q L '_' T S I '_' M O N T H
; ;
ARBITRATION
: A R B I T R A T I O N
;
IGNORE IGNORE
: I G N O R E : I G N O R E
; ;
@ -1634,6 +1678,10 @@ SIMPLIFY_LIMIT
: S I M P L I F Y '_' L I M I T : S I M P L I F Y '_' L I M I T
; ;
FIELD_OPTIONALLY_ENCLOSED_BY
: F I E L D '_' O P T I O N A L L Y '_' E N C L O S E D '_' B Y
;
DES_KEY_FILE DES_KEY_FILE
: D E S '_' K E Y '_' F I L E : D E S '_' K E Y '_' F I L E
; ;
@ -1791,7 +1839,7 @@ CHUNK
; ;
FILEX FILEX
: F I L E : F I L E X
; ;
BACKUPSET BACKUPSET
@ -1806,6 +1854,10 @@ UNIT
: U N I T : U N I T
; ;
NATIONAL_LITERAL
: N A T I O N A L '_' L I T E R A L
;
PRIVILEGES PRIVILEGES
: P R I V I L E G E S : P R I V I L E G E S
; ;
@ -1874,6 +1926,10 @@ DUMP
: D U M P : D U M P
; ;
EXTERNAL
: E X T E R N A L
;
APPROX_COUNT_DISTINCT_SYNOPSIS APPROX_COUNT_DISTINCT_SYNOPSIS
: A P P R O X '_' C O U N T '_' D I S T I N C T '_' S Y N O P S I S : A P P R O X '_' C O U N T '_' D I S T I N C T '_' S Y N O P S I S
; ;
@ -1890,6 +1946,10 @@ SLOG
: S L O G : S L O G
; ;
OJ
: O J
;
ARCHIVELOG ARCHIVELOG
: A R C H I V E L O G : A R C H I V E L O G
; ;
@ -1898,6 +1958,10 @@ MAX_CONNECTIONS_PER_HOUR
: M A X '_' C O N N E C T I O N S '_' P E R '_' H O U R : M A X '_' C O N N E C T I O N S '_' P E R '_' H O U R
; ;
ENCODING
: E N C O D I N G
;
SECOND SECOND
: S E C O N D : S E C O N D
; ;
@ -2310,6 +2374,10 @@ DATA_TABLE_ID
: D A T A '_' T A B L E '_' I D : D A T A '_' T A B L E '_' I D
; ;
SEQUENCES
: S E Q U E N C E S
;
VALID VALID
: V A L I D : V A L I D
; ;
@ -2410,6 +2478,10 @@ NAMES
: N A M E S : N A M E S
; ;
MY_NAME
: M Y '_' N A M E
;
CHAR CHAR
: C H A R : C H A R
; ;
@ -2534,6 +2606,10 @@ BACKED
: B A C K E D : B A C K E D
; ;
SERVICE
: S E R V I C E
;
TEMPLATE TEMPLATE
: T E M P L A T E : T E M P L A T E
; ;
@ -2586,6 +2662,10 @@ COALESCE_SQ
: C O A L E S C E '_' S Q : C O A L E S C E '_' S Q
; ;
TRIM_SPACE
: T R I M '_' S P A C E
;
INNER_PARSE INNER_PARSE
: I N N E R '_' P A R S E : I N N E R '_' P A R S E
; ;
@ -2670,6 +2750,10 @@ ELIMINATE_JOIN
: E L I M I N A T E '_' J O I N : E L I M I N A T E '_' J O I N
; ;
PATH
: P A T H
;
IPC IPC
: I P C : I P C
; ;
@ -2838,7 +2922,7 @@ SIMPLE
: S I M P L E : S I M P L E
; ;
BEGI BEGIN
: B E G I N : B E G I N
; ;
@ -2878,6 +2962,10 @@ INFO
: I N F O : I N F O
; ;
SKIP_HEADER
: S K I P '_' H E A D E R
;
SQL_THREAD SQL_THREAD
: S Q L '_' T H R E A D : S Q L '_' T H R E A D
; ;
@ -2958,6 +3046,10 @@ INDEX_TABLE_ID
: I N D E X '_' T A B L E '_' I D : I N D E X '_' T A B L E '_' I D
; ;
PATTERN
: P A T T E R N
;
RECOVERY_WINDOW RECOVERY_WINDOW
: R E C O V E R Y '_' W I N D O W : R E C O V E R Y '_' W I N D O W
; ;
@ -3050,6 +3142,10 @@ SLAVE
: S L A V E : S L A V E
; ;
SKIP_BLANK_LINES
: S K I P '_' B L A N K '_' L I N E S
;
GTS GTS
: G T S : G T S
; ;
@ -3446,6 +3542,10 @@ MAX_MEMORY
: M A X '_' M E M O R Y : M A X '_' M E M O R Y
; ;
NESTED
: N E S T E D
;
CLEAN CLEAN
: C L E A N : C L E A N
; ;
@ -4062,6 +4162,10 @@ GROUP_CONCAT
: G R O U P '_' C O N C A T : G R O U P '_' C O N C A T
; ;
JSON_TABLE
: J S O N '_' T A B L E
;
LEAD LEAD
: L E A D : L E A D
; ;
@ -4102,6 +4206,10 @@ NTILE
: N T I L E : N T I L E
; ;
NULL_IF_EXETERNAL
: N U L L '_' I F '_' E X E T E R N A L
;
BUCKETS BUCKETS
: B U C K E T S : B U C K E T S
; ;
@ -4178,6 +4286,10 @@ REDO_TRANSPORT_OPTIONS
: R E D O '_' T R A N S P O R T '_' O P T I O N S : R E D O '_' T R A N S P O R T '_' O P T I O N S
; ;
FIELD_DELIMITER
: F I E L D '_' D E L I M I T E R
;
MASTER_HOST MASTER_HOST
: M A S T E R '_' H O S T : M A S T E R '_' H O S T
; ;
@ -4222,6 +4334,14 @@ WEEK
: W E E K : W E E K
; ;
LINK
: L I N K
;
STATEMENT_ID
: S T A T E M E N T '_' I D
;
NULLS NULLS
: N U L L S : N U L L S
; ;
@ -4238,6 +4358,10 @@ PLUGIN
: P L U G I N : P L U G I N
; ;
ENCRYPTED
: E N C R Y P T E D
;
TENANT TENANT
: T E N A N T : T E N A N T
; ;
@ -4370,6 +4494,22 @@ BROADCAST : B R O A D C A S T;
HINT_HINT_BEGIN : H I N T '_' H I N T '_' B E G I N; HINT_HINT_BEGIN : H I N T '_' H I N T '_' B E G I N;
LOG_RESTORE_SOURCE
: L O G '_' R E S T O R E '_' S O U R C E
;
ENABLE_ARBITRATION_SERVICE
: E N A B L E '_' A R B I T R A T I O N '_' S E R V I C E
;
LEFT_BRACE
: '{'
;
RIGHT_BRACE
: '}'
;
Comma Comma
: [,] : [,]
; ;
@ -4568,6 +4708,10 @@ ANTLR_SKIP
: '--'[ \t]* .*? '\n' -> channel(1) : '--'[ \t]* .*? '\n' -> channel(1)
; ;
COMMENT_SKIP
: '#' .*? '\n' -> channel(1)
;
Blank Blank
: [ \t\r\n] -> channel(1) ; : [ \t\r\n] -> channel(1) ;

View File

@ -1,7 +1,15 @@
parser grammar OBParser; parser grammar OBParser;
options { tokenVocab=OBLexer; } options { tokenVocab=OBLexer; }
@parser::members {
bool is_pl_parse_ = false;
bool is_pl_parse_expr_ = false;
}
// start rule: sql_stmt // start rule: sql_stmt
sql_stmt sql_stmt
@ -21,6 +29,8 @@ stmt
| create_table_stmt | create_table_stmt
| create_function_stmt | create_function_stmt
| drop_function_stmt | drop_function_stmt
| drop_procedure_stmt
| drop_trigger_stmt
| create_table_like_stmt | create_table_like_stmt
| create_database_stmt | create_database_stmt
| drop_database_stmt | drop_database_stmt
@ -62,6 +72,7 @@ stmt
| help_stmt | help_stmt
| create_view_stmt | create_view_stmt
| create_tenant_stmt | create_tenant_stmt
| create_standby_tenant_stmt
| alter_tenant_stmt | alter_tenant_stmt
| drop_tenant_stmt | drop_tenant_stmt
| create_restore_point_stmt | create_restore_point_stmt
@ -86,6 +97,8 @@ stmt
| purge_stmt | purge_stmt
| analyze_stmt | analyze_stmt
| load_data_stmt | load_data_stmt
| create_dblink_stmt
| drop_dblink_stmt
| create_sequence_stmt | create_sequence_stmt
| alter_sequence_stmt | alter_sequence_stmt
| drop_sequence_stmt | drop_sequence_stmt
@ -94,18 +107,34 @@ stmt
| xa_prepare_stmt | xa_prepare_stmt
| xa_commit_stmt | xa_commit_stmt
| xa_rollback_stmt | xa_rollback_stmt
| switchover_cluster_stmt
| disconnect_cluster_stmt
| alter_cluster_stmt
| optimize_stmt | optimize_stmt
| dump_memory_stmt | dump_memory_stmt
| protection_mode_stmt
| get_diagnostics_stmt | get_diagnostics_stmt
| pl_expr_stmt | pl_expr_stmt
| method_opt | method_opt
| switchover_tenant_stmt | switchover_tenant_stmt
| recover_tenant_stmt
; ;
pl_expr_stmt pl_expr_stmt
: DO expr : DO expr
; ;
recover_tenant_stmt
: ALTER SYSTEM RECOVER STANDBY tenant_name? recover_point_clause?
;
recover_point_clause
: UNTIL TIME COMP_EQ STRING_VALUE
| UNTIL SCN COMP_EQ INTNUM
| UNTIL UNLIMITED
| CANCEL
;
expr_list expr_list
: expr (Comma expr)* : expr (Comma expr)*
; ;
@ -134,15 +163,18 @@ complex_string_literal
| charset_introducer HEX_STRING_VALUE | charset_introducer HEX_STRING_VALUE
| charset_introducer PARSER_SYNTAX_ERROR | charset_introducer PARSER_SYNTAX_ERROR
| STRING_VALUE string_val_list | STRING_VALUE string_val_list
| NATIONAL_LITERAL
; ;
charset_introducer charset_introducer
: UnderlineUTF8 : UNDER_LINE_UTF8
| UnderlineUTF8MB4 | UNDER_LINE_UTF8MB4
| UnderlineBINARY | UNDER_LINE_BINARY
| UnderlineGBK | UNDER_LINE_GBK
| UnderlineGB18030 | UNDER_LINE_LATIN1
| UnderlineUTF16 | UNDER_LINE_GB18030
| UNDER_LINE_GB18030_2022
| UNDER_LINE_UTF16
; ;
literal literal
@ -242,8 +274,10 @@ simple_expr
| case_expr | case_expr
| func_expr | func_expr
| window_function | window_function
| LEFT_BRACE relation_name expr RIGHT_BRACE
| USER_VARIABLE | USER_VARIABLE
| column_definition_ref (JSON_EXTRACT|JSON_EXTRACT_UNQUOTED) complex_string_literal | column_definition_ref (JSON_EXTRACT|JSON_EXTRACT_UNQUOTED) complex_string_literal
| relation_name Dot relation_name (Dot relation_name)? USER_VARIABLE
; ;
expr expr
@ -251,6 +285,7 @@ expr
| bool_pri IS not? (BOOL_VALUE|UNKNOWN) | bool_pri IS not? (BOOL_VALUE|UNKNOWN)
| bool_pri | bool_pri
| expr (AND|AND_OP|CNNOP|OR|XOR) expr | expr (AND|AND_OP|CNNOP|OR|XOR) expr
| LeftParen expr RightParen
; ;
not not
@ -592,6 +627,10 @@ ws_level_flag_reverse
; ;
delete_stmt delete_stmt
: with_clause? delete_basic_stmt
;
delete_basic_stmt
: delete_with_opt_hint FROM tbl_name (WHERE opt_hint_value expr)? order_by? limit_clause? : delete_with_opt_hint FROM tbl_name (WHERE opt_hint_value expr)? order_by? limit_clause?
| delete_with_opt_hint multi_delete_table (WHERE opt_hint_value expr)? | delete_with_opt_hint multi_delete_table (WHERE opt_hint_value expr)?
; ;
@ -602,6 +641,10 @@ multi_delete_table
; ;
update_stmt update_stmt
: with_clause? update_basic_stmt
;
update_basic_stmt
: update_with_opt_hint IGNORE? table_references SET update_asgn_list (WHERE opt_hint_value expr)? order_by? limit_clause? : update_with_opt_hint IGNORE? table_references SET update_asgn_list (WHERE opt_hint_value expr)? order_by? limit_clause?
; ;
@ -610,7 +653,7 @@ update_asgn_list
; ;
update_asgn_factor update_asgn_factor
: no_param_column_ref COMP_EQ expr_or_default : column_definition_ref COMP_EQ expr_or_default
; ;
create_resource_stmt create_resource_stmt
@ -637,7 +680,7 @@ resource_unit_option
opt_create_resource_pool_option_list opt_create_resource_pool_option_list
: create_resource_pool_option : create_resource_pool_option
| empty | empty
| opt_create_resource_pool_option_list Comma create_resource_pool_option | create_resource_pool_option (Comma create_resource_pool_option)*
; ;
create_resource_pool_option create_resource_pool_option
@ -678,6 +721,14 @@ create_tenant_stmt
: create_with_opt_hint TENANT (IF not EXISTS)? relation_name (tenant_option | (opt_tenant_option_list Comma tenant_option))? ((SET sys_var_and_val_list) | (SET VARIABLES sys_var_and_val_list) | (VARIABLES sys_var_and_val_list))? : create_with_opt_hint TENANT (IF not EXISTS)? relation_name (tenant_option | (opt_tenant_option_list Comma tenant_option))? ((SET sys_var_and_val_list) | (SET VARIABLES sys_var_and_val_list) | (VARIABLES sys_var_and_val_list))?
; ;
create_standby_tenant_stmt
: CREATE STANDBY TENANT (IF not EXISTS)? relation_name log_restore_source_option? (tenant_option | (opt_tenant_option_list Comma tenant_option))?
;
log_restore_source_option
: LOG_RESTORE_SOURCE COMP_EQ? conf_const
;
opt_tenant_option_list opt_tenant_option_list
: tenant_option : tenant_option
| empty | empty
@ -690,6 +741,7 @@ tenant_option
| REPLICA_NUM COMP_EQ? INTNUM | REPLICA_NUM COMP_EQ? INTNUM
| PRIMARY_ZONE COMP_EQ? primary_zone_name | PRIMARY_ZONE COMP_EQ? primary_zone_name
| RESOURCE_POOL_LIST COMP_EQ? LeftParen resource_pool_list RightParen | RESOURCE_POOL_LIST COMP_EQ? LeftParen resource_pool_list RightParen
| ENABLE_ARBITRATION_SERVICE COMP_EQ? BOOL_VALUE
| ZONE_LIST COMP_EQ? LeftParen zone_list RightParen | ZONE_LIST COMP_EQ? LeftParen zone_list RightParen
| charset_key COMP_EQ? charset_name | charset_key COMP_EQ? charset_name
| COLLATE COMP_EQ? collation_name | COLLATE COMP_EQ? collation_name
@ -757,6 +809,7 @@ database_option
: DEFAULT? charset_key COMP_EQ? charset_name : DEFAULT? charset_key COMP_EQ? charset_name
| DEFAULT? COLLATE COMP_EQ? collation_name | DEFAULT? COLLATE COMP_EQ? collation_name
| REPLICA_NUM COMP_EQ? INTNUM | REPLICA_NUM COMP_EQ? INTNUM
| PRIMARY_ZONE COMP_EQ? primary_zone_name
| read_only_or_write | read_only_or_write
| default_tablegroup | default_tablegroup
| DATABASE_ID COMP_EQ? INTNUM | DATABASE_ID COMP_EQ? INTNUM
@ -821,7 +874,7 @@ use_database_stmt
; ;
temporary_option temporary_option
: TEMPORARY? : (TEMPORARY | EXTERNAL)?
; ;
create_table_like_stmt create_table_like_stmt
@ -852,7 +905,15 @@ create_function_stmt
; ;
drop_function_stmt drop_function_stmt
: DROP FUNCTION (IF EXISTS)? NAME_OB : DROP FUNCTION (IF EXISTS)? relation_factor
;
drop_procedure_stmt
: DROP PROCEDURE (IF EXISTS)? relation_factor
;
drop_trigger_stmt
: DROP TRIGGER (IF EXISTS)? relation_factor
; ;
table_element_list table_element_list
@ -914,6 +975,7 @@ opt_generated_option_list
opt_generated_column_attribute_list opt_generated_column_attribute_list
: opt_generated_column_attribute_list generated_column_attribute : opt_generated_column_attribute_list generated_column_attribute
| generated_column_attribute
| empty | empty
; ;
@ -926,6 +988,7 @@ generated_column_attribute
| COMMENT STRING_VALUE | COMMENT STRING_VALUE
| ID INTNUM | ID INTNUM
| constraint_definition | constraint_definition
| SRID INTNUM
; ;
column_definition_ref column_definition_ref
@ -1087,6 +1150,7 @@ collation
opt_column_attribute_list opt_column_attribute_list
: opt_column_attribute_list column_attribute : opt_column_attribute_list column_attribute
| column_attribute
| empty | empty
; ;
@ -1104,6 +1168,7 @@ column_attribute
| ID INTNUM | ID INTNUM
| constraint_definition | constraint_definition
| SRID INTNUM | SRID INTNUM
| COLLATE collation_name
; ;
now_or_signed_literal now_or_signed_literal
@ -1178,6 +1243,9 @@ table_option
| CHECKSUM COMP_EQ? INTNUM | CHECKSUM COMP_EQ? INTNUM
| AUTO_INCREMENT_MODE COMP_EQ? STRING_VALUE | AUTO_INCREMENT_MODE COMP_EQ? STRING_VALUE
| ENABLE_EXTENDED_ROWID COMP_EQ? BOOL_VALUE | ENABLE_EXTENDED_ROWID COMP_EQ? BOOL_VALUE
| LOCATION COMP_EQ? STRING_VALUE
| FORMAT COMP_EQ? LeftParen external_file_format_list RightParen
| PATTERN COMP_EQ? STRING_VALUE
; ;
parallel_option parallel_option
@ -1439,6 +1507,18 @@ row_format_option
| DEFAULT | DEFAULT
; ;
external_file_format_list
: external_file_format (Comma? external_file_format)*
;
external_file_format
: format_key=(ENCODING|TYPE) COMP_EQ STRING_VALUE
| format_key=(ESCAPE|FIELD_OPTIONALLY_ENCLOSED_BY|FIELD_DELIMITER|LINE_DELIMITER) COMP_EQ expr
| format_key=SKIP_HEADER COMP_EQ INTNUM
| format_key=(SKIP_BLANK_LINES|TRIM_SPACE|EMPTY_FIELD_AS_NULL) COMP_EQ BOOL_VALUE
| format_key=NULL_IF_EXETERNAL COMP_EQ LeftParen expr_list RightParen
;
create_tablegroup_stmt create_tablegroup_stmt
: create_with_opt_hint TABLEGROUP (IF not EXISTS)? relation_name tablegroup_option_list? (tg_hash_partition_option | tg_key_partition_option | tg_range_partition_option | tg_list_partition_option)? : create_with_opt_hint TABLEGROUP (IF not EXISTS)? relation_name tablegroup_option_list? (tg_hash_partition_option | tg_key_partition_option | tg_range_partition_option | tg_list_partition_option)?
; ;
@ -1468,6 +1548,7 @@ tablegroup_option
| TABLEGROUP_ID COMP_EQ? INTNUM | TABLEGROUP_ID COMP_EQ? INTNUM
| BINDING COMP_EQ? BOOL_VALUE | BINDING COMP_EQ? BOOL_VALUE
| MAX_USED_PART_ID COMP_EQ? INTNUM | MAX_USED_PART_ID COMP_EQ? INTNUM
| SHARDING COMP_EQ? STRING_VALUE
; ;
alter_tablegroup_actions alter_tablegroup_actions
@ -1539,6 +1620,7 @@ sort_column_list
sort_column_key sort_column_key
: column_name (LeftParen INTNUM RightParen)? (ASC | DESC)? (ID INTNUM)? : column_name (LeftParen INTNUM RightParen)? (ASC | DESC)? (ID INTNUM)?
| LeftParen expr RightParen (ASC | DESC)? (ID INTNUM)?
; ;
opt_index_options opt_index_options
@ -1680,6 +1762,8 @@ select_clause
| simple_select | simple_select
| simple_select_with_order_and_limit | simple_select_with_order_and_limit
| select_with_parens_with_order_and_limit | select_with_parens_with_order_and_limit
| table_values_clause
| table_values_clause_with_order_by_and_limit
; ;
select_clause_set_with_order_and_limit select_clause_set_with_order_and_limit
@ -1698,6 +1782,7 @@ select_clause_set_right
: no_table_select : no_table_select
| simple_select | simple_select
| select_with_parens | select_with_parens
| table_values_clause
; ;
select_clause_set_left select_clause_set_left
@ -2019,6 +2104,7 @@ use_plan_cache_type
distribute_method distribute_method
: MATCH_ALL : MATCH_ALL
| ALL
| NONE | NONE
| PARTITION | PARTITION
| RANDOM | RANDOM
@ -2027,6 +2113,8 @@ distribute_method
| BROADCAST | BROADCAST
| LOCAL | LOCAL
| BC2HOST | BC2HOST
| RANGE
| LIST_
; ;
limit_expr limit_expr
@ -2035,6 +2123,14 @@ limit_expr
| column_ref | column_ref
; ;
for_update_clause
: FOR UPDATE opt_for_update_wait
;
opt_lock_in_share_mode
: LOCK_ IN SHARE MODE
;
opt_for_update_wait opt_for_update_wait
: empty : empty
| WAIT DECIMAL_VAL | WAIT DECIMAL_VAL
@ -2104,6 +2200,13 @@ from_list
table_references table_references
: table_reference (Comma table_reference)* : table_reference (Comma table_reference)*
| table_references_paren (Comma table_references_paren)*
;
table_references_paren
: table_reference (Comma table_reference)*
| LeftParen table_reference (Comma table_reference)* RightParen
| LeftParen table_references_paren (Comma table_reference)* RightParen
; ;
table_reference table_reference
@ -2116,6 +2219,9 @@ table_factor
| table_subquery | table_subquery
| select_with_parens use_flashback? | select_with_parens use_flashback?
| LeftParen table_references RightParen | LeftParen table_references RightParen
| TABLE LeftParen simple_expr RightParen (AS relation_name|relation_name?)
| LEFT_BRACE OJ table_reference RIGHT_BRACE
| json_table_expr (AS? relation_name)?
; ;
tbl_name tbl_name
@ -2143,7 +2249,12 @@ sample_clause
; ;
table_subquery table_subquery
: select_with_parens use_flashback? AS? relation_name : select_with_parens use_flashback? AS? table_subquery_alias
;
table_subquery_alias
: relation_name
| relation_name LeftParen alias_name_list RightParen
; ;
use_partition use_partition
@ -2250,6 +2361,10 @@ intnum_list
: INTNUM (relation_sep_option intnum_list)? : INTNUM (relation_sep_option intnum_list)?
; ;
tracing_num_list
: INTNUM (relation_sep_option tracing_num_list)?
;
join_condition join_condition
: ON expr : ON expr
| USING LeftParen column_list RightParen | USING LeftParen column_list RightParen
@ -2282,6 +2397,7 @@ natural_join_type
inner_join_type inner_join_type
: INNER? JOIN : INNER? JOIN
| CROSS JOIN | CROSS JOIN
| STRAIGHT_JOIN
; ;
outer_join_type outer_join_type
@ -2321,6 +2437,23 @@ column_alias_name
: column_name : column_name
; ;
table_values_clause
: VALUES values_row_list
;
table_values_clause_with_order_by_and_limit
: table_values_clause order_by
| table_values_clause order_by? limit_clause
;
values_row_list
: row_value (Comma row_value)*
;
row_value
: ROW LeftParen insert_vals RightParen
;
analyze_stmt analyze_stmt
: ANALYZE TABLE relation_factor UPDATE HISTOGRAM ON column_name_list WITH INTNUM BUCKETS : ANALYZE TABLE relation_factor UPDATE HISTOGRAM ON column_name_list WITH INTNUM BUCKETS
| ANALYZE TABLE relation_factor DROP HISTOGRAM ON column_name_list | ANALYZE TABLE relation_factor DROP HISTOGRAM ON column_name_list
@ -2383,6 +2516,9 @@ explain_stmt
| explain_or_desc PARTITIONS explainable_stmt | explain_or_desc PARTITIONS explainable_stmt
| explain_or_desc PARTITIONS PRETTY explainable_stmt | explain_or_desc PARTITIONS PRETTY explainable_stmt
| explain_or_desc PARTITIONS PRETTY_COLOR explainable_stmt | explain_or_desc PARTITIONS PRETTY_COLOR explainable_stmt
| explain_or_desc SET STATEMENT_ID COMP_EQ literal explainable_stmt
| explain_or_desc INTO relation_name explainable_stmt
| explain_or_desc INTO relation_name SET STATEMENT_ID COMP_EQ literal explainable_stmt
| explain_or_desc FORMAT COMP_EQ format_name explainable_stmt | explain_or_desc FORMAT COMP_EQ format_name explainable_stmt
; ;
@ -2410,7 +2546,7 @@ get_diagnostics_stmt
; ;
get_condition_diagnostics_stmt get_condition_diagnostics_stmt
: GET (CURRENT?|STACKED) DIAGNOSTICS CONDITION condition_arg condition_information_item_list : GET (CURRENT|STACKED)? DIAGNOSTICS CONDITION condition_arg condition_information_item_list
; ;
condition_arg condition_arg
@ -2712,7 +2848,7 @@ lock_type
; ;
create_sequence_stmt create_sequence_stmt
: create_with_opt_hint SEQUENCE relation_factor sequence_option_list? : create_with_opt_hint SEQUENCE (IF not EXISTS)? relation_factor sequence_option_list?
; ;
sequence_option_list sequence_option_list
@ -2741,20 +2877,28 @@ simple_num
; ;
drop_sequence_stmt drop_sequence_stmt
: DROP SEQUENCE relation_factor : DROP SEQUENCE (IF EXISTS)? relation_factor
; ;
alter_sequence_stmt alter_sequence_stmt
: ALTER SEQUENCE relation_factor sequence_option_list? : ALTER SEQUENCE relation_factor sequence_option_list?
; ;
create_dblink_stmt
: CREATE DATABASE LINK (IF not EXISTS)? relation_name CONNECT TO user USER_VARIABLE DATABASE database_factor IDENTIFIED BY password ip_port (CLUSTER STRING_VALUE)?
;
drop_dblink_stmt
: DROP DATABASE LINK (IF EXISTS)? relation_name
;
begin_stmt begin_stmt
: BEGI WORK? : BEGIN HINT_VALUE? WORK?
| START TRANSACTION ((WITH CONSISTENT SNAPSHOT) | transaction_access_mode | (WITH CONSISTENT SNAPSHOT Comma transaction_access_mode) | (transaction_access_mode Comma WITH CONSISTENT SNAPSHOT))? | START HINT_VALUE? TRANSACTION ((WITH CONSISTENT SNAPSHOT) | transaction_access_mode | (WITH CONSISTENT SNAPSHOT Comma transaction_access_mode) | (transaction_access_mode Comma WITH CONSISTENT SNAPSHOT))?
; ;
xa_begin_stmt xa_begin_stmt
: XA (BEGI|START) STRING_VALUE : XA (BEGIN|START) STRING_VALUE
; ;
xa_end_stmt xa_end_stmt
@ -2774,11 +2918,12 @@ xa_rollback_stmt
; ;
commit_stmt commit_stmt
: COMMIT WORK? : COMMIT HINT_VALUE? WORK?
; ;
rollback_stmt rollback_stmt
: ROLLBACK WORK? : ROLLBACK WORK?
| ROLLBACK HINT_VALUE WORK?
; ;
kill_stmt kill_stmt
@ -2802,7 +2947,7 @@ priv_type
: ALTER TENANT? : ALTER TENANT?
| create_with_opt_hint (RESOURCE POOL|USER?) | create_with_opt_hint (RESOURCE POOL|USER?)
| DELETE | DELETE
| DROP | DROP (DATABASE LINK)?
| GRANT OPTION | GRANT OPTION
| INSERT | INSERT
| UPDATE | UPDATE
@ -2818,6 +2963,7 @@ priv_type
| ALTER SYSTEM | ALTER SYSTEM
| REPLICATION SLAVE | REPLICATION SLAVE
| REPLICATION CLIENT | REPLICATION CLIENT
| CREATE DATABASE LINK
; ;
priv_level priv_level
@ -3016,7 +3162,7 @@ rename_table_action
; ;
alter_table_stmt alter_table_stmt
: ALTER TABLE relation_factor alter_table_actions : ALTER EXTERNAL? TABLE relation_factor alter_table_actions
; ;
alter_table_actions alter_table_actions
@ -3036,12 +3182,14 @@ alter_table_action
| alter_constraint_option | alter_constraint_option
| alter_foreign_key_action | alter_foreign_key_action
| DROP CONSTRAINT constraint_name | DROP CONSTRAINT constraint_name
| REFRESH
; ;
alter_constraint_option alter_constraint_option
: DROP (CHECK|CONSTRAINT) LeftParen name_list RightParen : DROP (CHECK|CONSTRAINT) LeftParen name_list RightParen
| DROP CHECK constraint_name | DROP CHECK constraint_name
| ADD constraint_definition | ADD constraint_definition
| ALTER (CHECK | CONSTRAINT) constraint_name check_state
; ;
alter_partition_option alter_partition_option
@ -3121,6 +3269,7 @@ alter_column_option
| CHANGE column_definition_ref column_definition | CHANGE column_definition_ref column_definition
| MODIFY COLUMN column_definition | MODIFY COLUMN column_definition
| MODIFY column_definition | MODIFY column_definition
| RENAME COLUMN column_definition_ref TO column_definition_ref
; ;
alter_tablegroup_option alter_tablegroup_option
@ -3158,20 +3307,28 @@ dump_memory_stmt
; ;
alter_system_stmt alter_system_stmt
: ALTER SYSTEM BOOTSTRAP server_info_list : ALTER SYSTEM BOOTSTRAP (CLUSTER cluster_role)? server_info_list (PRIMARY_CLUSTER_ID INTNUM PRIMARY_ROOTSERVICE_LIST STRING_VALUE)?
| ALTER SYSTEM FLUSH cache_type CACHE namespace_expr? sql_id_expr? databases_expr? (TENANT COMP_EQ tenant_name_list)? flush_scope | ALTER SYSTEM FLUSH cache_type CACHE sql_id_expr? databases_expr? (TENANT COMP_EQ tenant_name_list)? flush_scope
| ALTER SYSTEM FLUSH SQL cache_type (TENANT COMP_EQ tenant_name_list)? flush_scope | ALTER SYSTEM FLUSH SQL cache_type (TENANT COMP_EQ tenant_name_list)? flush_scope
| ALTER SYSTEM FLUSH KVCACHE tenant_name? cache_name? | ALTER SYSTEM FLUSH KVCACHE tenant_name? cache_name?
| ALTER SYSTEM FLUSH DAG WARNINGS | ALTER SYSTEM FLUSH DAG WARNINGS
| ALTER SYSTEM FLUSH ILOGCACHE file_id? | ALTER SYSTEM FLUSH ILOGCACHE file_id?
| ALTER SYSTEM ALTER PLAN BASELINE tenant_name? sql_id_expr? baseline_id_expr? SET baseline_asgn_factor
| ALTER SYSTEM LOAD PLAN BASELINE FROM PLAN CACHE (TENANT COMP_EQ tenant_name_list)? sql_id_expr?
| ALTER SYSTEM SWITCH REPLICA ls_role ls_server_or_server_or_zone_or_tenant | ALTER SYSTEM SWITCH REPLICA ls_role ls_server_or_server_or_zone_or_tenant
| ALTER SYSTEM SWITCH ROOTSERVICE partition_role server_or_zone | ALTER SYSTEM SWITCH ROOTSERVICE partition_role server_or_zone
| ALTER SYSTEM alter_or_change_or_modify REPLICA partition_id_desc ip_port alter_or_change_or_modify change_actions FORCE?
| ALTER SYSTEM DROP REPLICA partition_id_desc ip_port (CREATE_TIMESTAMP opt_equal_mark INTNUM)? zone_desc? FORCE?
| ALTER SYSTEM migrate_action REPLICA partition_id_desc SOURCE COMP_EQ? STRING_VALUE DESTINATION COMP_EQ? STRING_VALUE FORCE?
| ALTER SYSTEM REPORT REPLICA server_or_zone? | ALTER SYSTEM REPORT REPLICA server_or_zone?
| ALTER SYSTEM RECYCLE REPLICA server_or_zone? | ALTER SYSTEM RECYCLE REPLICA server_or_zone?
| ALTER SYSTEM START MERGE zone_desc | ALTER SYSTEM START MERGE zone_desc
| ALTER SYSTEM suspend_or_resume MERGE tenant_list_tuple? | ALTER SYSTEM suspend_or_resume MERGE tenant_list_tuple?
| ALTER SYSTEM suspend_or_resume RECOVERY zone_desc? | ALTER SYSTEM suspend_or_resume RECOVERY zone_desc?
| ALTER SYSTEM CLEAR MERGE ERROR_P tenant_list_tuple? | ALTER SYSTEM CLEAR MERGE ERROR_P tenant_list_tuple?
| ALTER SYSTEM ADD ARBITRATION SERVICE STRING_VALUE
| ALTER SYSTEM REMOVE ARBITRATION SERVICE STRING_VALUE
| ALTER SYSTEM REPLACE ARBITRATION SERVICE STRING_VALUE WITH STRING_VALUE
| ALTER SYSTEM CANCEL cancel_task_type TASK STRING_VALUE | ALTER SYSTEM CANCEL cancel_task_type TASK STRING_VALUE
| ALTER SYSTEM MAJOR FREEZE tenant_list_tuple? | ALTER SYSTEM MAJOR FREEZE tenant_list_tuple?
| ALTER SYSTEM CHECKPOINT | ALTER SYSTEM CHECKPOINT
@ -3199,7 +3356,7 @@ alter_system_stmt
| ALTER SYSTEM UPGRADE VIRTUAL SCHEMA | ALTER SYSTEM UPGRADE VIRTUAL SCHEMA
| ALTER SYSTEM RUN JOB STRING_VALUE server_or_zone? | ALTER SYSTEM RUN JOB STRING_VALUE server_or_zone?
| ALTER SYSTEM upgrade_action UPGRADE | ALTER SYSTEM upgrade_action UPGRADE
| ALTER SYSTEM RUN UPGRADE JOB STRING_VALUE | ALTER SYSTEM RUN UPGRADE JOB STRING_VALUE tenant_list_tuple?
| ALTER SYSTEM STOP UPGRADE JOB | ALTER SYSTEM STOP UPGRADE JOB
| ALTER SYSTEM upgrade_action ROLLING UPGRADE | ALTER SYSTEM upgrade_action ROLLING UPGRADE
| ALTER SYSTEM REFRESH TIME_ZONE_INFO | ALTER SYSTEM REFRESH TIME_ZONE_INFO
@ -3209,8 +3366,9 @@ alter_system_stmt
| ALTER SYSTEM SET NETWORK BANDWIDTH REGION relation_name_or_string TO relation_name_or_string conf_const | ALTER SYSTEM SET NETWORK BANDWIDTH REGION relation_name_or_string TO relation_name_or_string conf_const
| ALTER SYSTEM ADD RESTORE SOURCE STRING_VALUE | ALTER SYSTEM ADD RESTORE SOURCE STRING_VALUE
| ALTER SYSTEM CLEAR RESTORE SOURCE | ALTER SYSTEM CLEAR RESTORE SOURCE
| ALTER SYSTEM RESTORE table_list FOR relation_name (FROM STRING_VALUE)? ((UNTIL TIME opt_equal_mark STRING_VALUE) | (UNTIL SCN opt_equal_mark INTNUM))? WITH STRING_VALUE (DESCRIPTION opt_equal_mark STRING_VALUE)? | ALTER SYSTEM RESTORE tenant_name FROM STRING_VALUE
| ALTER SYSTEM RESTORE relation_name (FROM STRING_VALUE)? ((UNTIL TIME opt_equal_mark STRING_VALUE) | (UNTIL SCN opt_equal_mark INTNUM))? WITH STRING_VALUE (DESCRIPTION opt_equal_mark STRING_VALUE)? PREVIEW? | ALTER SYSTEM RESTORE table_list FOR relation_name (FROM STRING_VALUE)? ((UNTIL TIME COMP_EQ STRING_VALUE) | (UNTIL SCN COMP_EQ INTNUM))? WITH STRING_VALUE (ENCRYPTED BY STRING_VALUE)? (WITH KEY FROM STRING_VALUE opt_encrypt_key)? (DESCRIPTION opt_equal_mark STRING_VALUE)?
| ALTER SYSTEM RESTORE relation_name (FROM STRING_VALUE)? ((UNTIL TIME COMP_EQ STRING_VALUE) | (UNTIL SCN COMP_EQ INTNUM))? WITH STRING_VALUE (ENCRYPTED BY STRING_VALUE)? (WITH KEY FROM STRING_VALUE opt_encrypt_key)? (DESCRIPTION opt_equal_mark STRING_VALUE)? PREVIEW?
| ALTER SYSTEM CHANGE TENANT change_tenant_name_or_tenant_id | ALTER SYSTEM CHANGE TENANT change_tenant_name_or_tenant_id
| ALTER SYSTEM DROP TABLES IN SESSION INTNUM | ALTER SYSTEM DROP TABLES IN SESSION INTNUM
| ALTER SYSTEM REFRESH TABLES IN SESSION INTNUM | ALTER SYSTEM REFRESH TABLES IN SESSION INTNUM
@ -3226,14 +3384,23 @@ alter_system_stmt
| ALTER SYSTEM BACKUP INCREMENTAL DATABASE (TO opt_equal_mark STRING_VALUE)? PLUS ARCHIVELOG (DESCRIPTION opt_equal_mark STRING_VALUE)? | ALTER SYSTEM BACKUP INCREMENTAL DATABASE (TO opt_equal_mark STRING_VALUE)? PLUS ARCHIVELOG (DESCRIPTION opt_equal_mark STRING_VALUE)?
| ALTER SYSTEM BACKUP (TENANT opt_equal_mark tenant_name_list)? (TO opt_equal_mark STRING_VALUE)? PLUS ARCHIVELOG (DESCRIPTION opt_equal_mark STRING_VALUE)? | ALTER SYSTEM BACKUP (TENANT opt_equal_mark tenant_name_list)? (TO opt_equal_mark STRING_VALUE)? PLUS ARCHIVELOG (DESCRIPTION opt_equal_mark STRING_VALUE)?
| ALTER SYSTEM BACKUP INCREMENTAL (TENANT opt_equal_mark tenant_name_list)? (TO opt_equal_mark STRING_VALUE)? PLUS ARCHIVELOG (DESCRIPTION opt_equal_mark STRING_VALUE)? | ALTER SYSTEM BACKUP INCREMENTAL (TENANT opt_equal_mark tenant_name_list)? (TO opt_equal_mark STRING_VALUE)? PLUS ARCHIVELOG (DESCRIPTION opt_equal_mark STRING_VALUE)?
| ALTER SYSTEM BACKUP KEY (TO opt_equal_mark STRING_VALUE)? (ENCRYPTED BY STRING_VALUE)?
| ALTER SYSTEM BACKUP KEY tenant_list_tuple (TO opt_equal_mark STRING_VALUE)? (ENCRYPTED BY STRING_VALUE)?
| ALTER SYSTEM CANCEL BACKUP (TENANT opt_equal_mark tenant_name_list)? | ALTER SYSTEM CANCEL BACKUP (TENANT opt_equal_mark tenant_name_list)?
| ALTER SYSTEM CANCEL RESTORE relation_name
| ALTER SYSTEM SUSPEND BACKUP | ALTER SYSTEM SUSPEND BACKUP
| ALTER SYSTEM RESUME BACKUP | ALTER SYSTEM RESUME BACKUP
| ALTER SYSTEM DELETE EXPIRED BACKUP (COPY INTNUM)?
| ALTER SYSTEM DELETE BACKUPSET INTNUM (COPY INTNUM)?
| ALTER SYSTEM VALIDATE DATABASE (COPY INTNUM)? | ALTER SYSTEM VALIDATE DATABASE (COPY INTNUM)?
| ALTER SYSTEM VALIDATE BACKUPSET INTNUM (COPY INTNUM)? | ALTER SYSTEM VALIDATE BACKUPSET INTNUM (COPY INTNUM)?
| ALTER SYSTEM CANCEL VALIDATE INTNUM (COPY INTNUM)? | ALTER SYSTEM CANCEL VALIDATE INTNUM (COPY INTNUM)?
| ALTER SYSTEM DELETE OBSOLETE BACKUP
| ALTER SYSTEM CANCEL DELETE BACKUP
| ALTER SYSTEM CANCEL BACKUP BACKUPSET | ALTER SYSTEM CANCEL BACKUP BACKUPSET
| ALTER SYSTEM DELETE BACKUPPIECE INTNUM (COPY INTNUM)?
| ALTER SYSTEM CANCEL BACKUP BACKUPPIECE | ALTER SYSTEM CANCEL BACKUP BACKUPPIECE
| ALTER SYSTEM DELETE BACKUPROUND INTNUM (COPY INTNUM)?
| ALTER SYSTEM CANCEL ALL BACKUP FORCE | ALTER SYSTEM CANCEL ALL BACKUP FORCE
| ALTER SYSTEM DELETE BACKUPSET INTNUM (COPY INTNUM)? (TENANT opt_equal_mark tenant_name_list)? (DESCRIPTION opt_equal_mark STRING_VALUE)? | ALTER SYSTEM DELETE BACKUPSET INTNUM (COPY INTNUM)? (TENANT opt_equal_mark tenant_name_list)? (DESCRIPTION opt_equal_mark STRING_VALUE)?
| ALTER SYSTEM DELETE BACKUPPIECE INTNUM (COPY INTNUM)? (TENANT opt_equal_mark tenant_name_list)? (DESCRIPTION opt_equal_mark STRING_VALUE)? | ALTER SYSTEM DELETE BACKUPPIECE INTNUM (COPY INTNUM)? (TENANT opt_equal_mark tenant_name_list)? (DESCRIPTION opt_equal_mark STRING_VALUE)?
@ -3251,6 +3418,7 @@ alter_system_stmt
| ALTER SYSTEM BACKUP BACKUPPIECE ALL NOT BACKED UP INTNUM TIMES (WITH ACTIVE)? ((TENANT_ID opt_equal_mark INTNUM) | (TENANT opt_equal_mark relation_name_or_string))? (BACKUP_BACKUP_DEST opt_equal_mark STRING_VALUE)? | ALTER SYSTEM BACKUP BACKUPPIECE ALL NOT BACKED UP INTNUM TIMES (WITH ACTIVE)? ((TENANT_ID opt_equal_mark INTNUM) | (TENANT opt_equal_mark relation_name_or_string))? (BACKUP_BACKUP_DEST opt_equal_mark STRING_VALUE)?
| SET ENCRYPTION ON IDENTIFIED BY STRING_VALUE ONLY | SET ENCRYPTION ON IDENTIFIED BY STRING_VALUE ONLY
| SET DECRYPTION IDENTIFIED BY string_list | SET DECRYPTION IDENTIFIED BY string_list
| ALTER SYSTEM BACKUP TENANT backup_tenant_name_list TO STRING_VALUE
; ;
opt_sql_throttle_using_cond opt_sql_throttle_using_cond
@ -3296,13 +3464,18 @@ balance_task_type
; ;
tenant_list_tuple tenant_list_tuple
: TENANT COMP_EQ? tenant_name_list : TENANT COMP_EQ? LeftParen tenant_name_list RightParen
| TENANT COMP_EQ? tenant_name_list
; ;
tenant_name_list tenant_name_list
: relation_name_or_string (Comma relation_name_or_string)* : relation_name_or_string (Comma relation_name_or_string)*
; ;
backup_tenant_name_list
: COMP_EQ? tenant_name_list
;
flush_scope flush_scope
: GLOBAL? : GLOBAL?
; ;
@ -3337,6 +3510,7 @@ zone_action
ip_port ip_port
: SERVER COMP_EQ? STRING_VALUE : SERVER COMP_EQ? STRING_VALUE
| HOST STRING_VALUE
; ;
zone_desc zone_desc
@ -3370,6 +3544,10 @@ alter_or_change_or_modify
| MODIFY | MODIFY
; ;
partition_id_desc
: PARTITION_ID COMP_EQ? STRING_VALUE
;
ls ls
: LS COMP_EQ? INTNUM : LS COMP_EQ? INTNUM
; ;
@ -3385,11 +3563,37 @@ ls_server_or_server_or_zone_or_tenant
| zone_desc tenant_name? | zone_desc tenant_name?
; ;
migrate_action
: MOVE
| COPY
;
change_actions
: change_action change_actions?
;
change_action
: replica_type
| memstore_percent
;
replica_type
: REPLICA_TYPE COMP_EQ? STRING_VALUE
;
memstore_percent
: MEMSTORE_PERCENT COMP_EQ? INTNUM
;
suspend_or_resume suspend_or_resume
: SUSPEND : SUSPEND
| RESUME | RESUME
; ;
baseline_id_expr
: BASELINE_ID COMP_EQ? INTNUM
;
sql_id_expr sql_id_expr
: SQL_ID COMP_EQ? STRING_VALUE : SQL_ID COMP_EQ? STRING_VALUE
; ;
@ -3398,6 +3602,10 @@ namespace_expr
: NAMESPACE COMP_EQ? STRING_VALUE : NAMESPACE COMP_EQ? STRING_VALUE
; ;
baseline_asgn_factor
: column_name COMP_EQ literal
;
tenant_name tenant_name
: TENANT COMP_EQ? relation_name_or_string : TENANT COMP_EQ? relation_name_or_string
; ;
@ -3426,6 +3634,8 @@ alter_system_set_parameter_action
| ROOTSERVICE_LIST COMP_EQ STRING_VALUE (COMMENT STRING_VALUE)? ((SCOPE COMP_EQ MEMORY) | (SCOPE COMP_EQ SPFILE) | (SCOPE COMP_EQ BOTH))? server_or_zone? tenant_name? | ROOTSERVICE_LIST COMP_EQ STRING_VALUE (COMMENT STRING_VALUE)? ((SCOPE COMP_EQ MEMORY) | (SCOPE COMP_EQ SPFILE) | (SCOPE COMP_EQ BOTH))? server_or_zone? tenant_name?
| BACKUP_BACKUP_DEST COMP_EQ STRING_VALUE (COMMENT STRING_VALUE)? ((SCOPE COMP_EQ MEMORY) | (SCOPE COMP_EQ SPFILE) | (SCOPE COMP_EQ BOTH))? server_or_zone? tenant_name? | BACKUP_BACKUP_DEST COMP_EQ STRING_VALUE (COMMENT STRING_VALUE)? ((SCOPE COMP_EQ MEMORY) | (SCOPE COMP_EQ SPFILE) | (SCOPE COMP_EQ BOTH))? server_or_zone? tenant_name?
| OBCONFIG_URL COMP_EQ STRING_VALUE (COMMENT STRING_VALUE)? ((SCOPE COMP_EQ MEMORY) | (SCOPE COMP_EQ SPFILE) | (SCOPE COMP_EQ BOTH))? server_or_zone? tenant_name? | OBCONFIG_URL COMP_EQ STRING_VALUE (COMMENT STRING_VALUE)? ((SCOPE COMP_EQ MEMORY) | (SCOPE COMP_EQ SPFILE) | (SCOPE COMP_EQ BOTH))? server_or_zone? tenant_name?
| LOG_DISK_SIZE COMP_EQ STRING_VALUE (COMMENT STRING_VALUE)? ((SCOPE COMP_EQ MEMORY) | (SCOPE COMP_EQ SPFILE) | (SCOPE COMP_EQ BOTH))? server_or_zone? tenant_name?
| LOG_RESTORE_SOURCE COMP_EQ STRING_VALUE (COMMENT STRING_VALUE)? ((SCOPE COMP_EQ MEMORY) | (SCOPE COMP_EQ SPFILE) | (SCOPE COMP_EQ BOTH))? server_or_zone? tenant_name?
; ;
alter_system_settp_actions alter_system_settp_actions
@ -3440,6 +3650,12 @@ settp_option
| OCCUR COMP_EQ? INTNUM | OCCUR COMP_EQ? INTNUM
| FREQUENCY COMP_EQ? INTNUM | FREQUENCY COMP_EQ? INTNUM
| ERROR_CODE COMP_EQ? INTNUM | ERROR_CODE COMP_EQ? INTNUM
| MATCH COMP_EQ? INTNUM
;
cluster_role
: PRIMARY
| STANDBY
; ;
partition_role partition_role
@ -3454,7 +3670,7 @@ ls_role
; ;
upgrade_action upgrade_action
: BEGI : BEGIN
| END | END
; ;
@ -3536,6 +3752,11 @@ isolation_level
| SERIALIZABLE | SERIALIZABLE
; ;
opt_encrypt_key
: empty
| ENCRYPTED BY STRING_VALUE
;
create_savepoint_stmt create_savepoint_stmt
: SAVEPOINT var_name : SAVEPOINT var_name
; ;
@ -3553,10 +3774,66 @@ switchover_tenant_stmt
: ALTER SYSTEM switchover_clause : ALTER SYSTEM switchover_clause
; ;
alter_cluster_stmt
: ALTER SYSTEM cluster_action VERIFY
| ALTER SYSTEM cluster_action cluster_define FORCE?
| ALTER SYSTEM alter_or_change_or_modify CLUSTER cluster_define SET? cluster_option_list
;
cluster_define
: cluster_name CLUSTER_ID COMP_EQ? conf_const
;
cluster_option_list
: cluster_option (Comma cluster_option_list)?
;
cluster_option
: ROOTSERVICE_LIST COMP_EQ? STRING_VALUE
| REDO_TRANSPORT_OPTIONS COMP_EQ? relation_name_or_string
;
cluster_action
: ADD CLUSTER
| REMOVE CLUSTER
| (DISABLE|ENABLE) CLUSTER SYNCHRONIZATION
;
switchover_cluster_stmt
: ALTER SYSTEM commit_switchover_clause FORCE?
;
switchover_clause switchover_clause
: ACTIVATE STANDBY tenant_name? : ACTIVATE STANDBY tenant_name?
; ;
commit_switchover_clause
: COMMIT TO SWITCHOVER TO PRIMARY (WITH SESSION SHUTDOWN)?
| COMMIT TO SWITCHOVER TO PHYSICAL STANDBY (WITH SESSION SHUTDOWN)?
| ACTIVATE PHYSICAL STANDBY CLUSTER
| CONVERT TO PHYSICAL STANDBY
| FAILOVER TO cluster_define
;
protection_mode_stmt
: ALTER SYSTEM SET STANDBY CLUSTER TO MAXIMIZE protection_mode_option
;
protection_mode_option
: AVAILABILITY
| PERFORMANCE
| PROTECTION
;
cluster_name
: relation_name
| STRING_VALUE
;
disconnect_cluster_stmt
: ALTER SYSTEM DISCONNECT STANDBY CLUSTER cluster_define SET CLUSTER_NAME cluster_name (OBCONFIG_URL STRING_VALUE)? FORCE? VERIFY?
;
var_name var_name
: NAME_OB : NAME_OB
| unreserved_keyword_normal | unreserved_keyword_normal
@ -3584,6 +3861,7 @@ relation_name
function_name function_name
: NAME_OB : NAME_OB
| RANDOM
| DUMP | DUMP
| CHARSET | CHARSET
| COLLATION | COLLATION
@ -3602,6 +3880,7 @@ function_name
| REPLACE | REPLACE
| TRUNCATE | TRUNCATE
| FORMAT | FORMAT
| NORMAL
; ;
column_label column_label
@ -3632,8 +3911,49 @@ date_unit
| YEAR_MONTH | YEAR_MONTH
; ;
json_table_expr
: JSON_TABLE LeftParen simple_expr Comma literal COLUMNS LeftParen jt_column_list RightParen RightParen
;
jt_column_list
: json_table_column_def (Comma json_table_column_def)*
;
json_table_column_def
: json_table_ordinality_column_def
| json_table_exists_column_def
| json_table_value_column_def
| json_table_nested_column_def
;
json_table_ordinality_column_def
: column_name FOR ORDINALITY
;
json_table_exists_column_def
: column_name data_type collation? EXISTS PATH literal
;
json_table_value_column_def
: column_name data_type collation? PATH literal opt_value_on_empty_or_error_or_mismatch
;
json_table_nested_column_def
: NESTED PATH? literal COLUMNS LeftParen jt_column_list RightParen
;
opt_value_on_empty_or_error_or_mismatch
: opt_on_empty_or_error
;
json_value_expr json_value_expr
: JSON_VALUE LeftParen simple_expr Comma complex_string_literal (RETURNING cast_data_type)? (on_empty | on_error | (on_empty on_error))? RightParen : JSON_VALUE LeftParen simple_expr Comma complex_string_literal (RETURNING cast_data_type)? TRUNCATE? ASCII? (on_empty | on_error | (on_empty on_error))? RightParen
;
opt_on_empty_or_error
: empty
| on_empty on_error?
| on_error
; ;
on_empty on_empty
@ -3672,6 +3992,7 @@ unreserved_keyword_normal
| APPROX_COUNT_DISTINCT_SYNOPSIS | APPROX_COUNT_DISTINCT_SYNOPSIS
| APPROX_COUNT_DISTINCT_SYNOPSIS_MERGE | APPROX_COUNT_DISTINCT_SYNOPSIS_MERGE
| ARCHIVELOG | ARCHIVELOG
| ARBITRATION
| ASCII | ASCII
| AT | AT
| AUDIT | AUDIT
@ -3692,7 +4013,7 @@ unreserved_keyword_normal
| BASIC | BASIC
| BALANCE | BALANCE
| BANDWIDTH | BANDWIDTH
| BEGI | BEGIN
| BINDING | BINDING
| BINLOG | BINLOG
| BIT | BIT
@ -3813,8 +4134,12 @@ unreserved_keyword_normal
| DEFAULT_TABLEGROUP | DEFAULT_TABLEGROUP
| EFFECTIVE | EFFECTIVE
| EMPTY | EMPTY
| EMPTY_FIELD_AS_NULL
| ENABLE | ENABLE
| ENABLE_ARBITRATION_SERVICE
| ENABLE_EXTENDED_ROWID | ENABLE_EXTENDED_ROWID
| ENCODING
| ENCRYPTED
| ENCRYPTION | ENCRYPTION
| END | END
| ENDS | ENDS
@ -3842,12 +4167,15 @@ unreserved_keyword_normal
| EXTENDED | EXTENDED
| EXTENDED_NOADDR | EXTENDED_NOADDR
| EXTENT_SIZE | EXTENT_SIZE
| EXTERNAL
| FAILOVER | FAILOVER
| EXTRACT | EXTRACT
| FAST | FAST
| FAULTS | FAULTS
| FLASHBACK | FLASHBACK
| FIELDS | FIELDS
| FIELD_DELIMITER
| FIELD_OPTIONALLY_ENCLOSED_BY
| FILEX | FILEX
| FILE_ID | FILE_ID
| FINAL_COUNT | FINAL_COUNT
@ -3867,6 +4195,7 @@ unreserved_keyword_normal
| FULL | FULL
| GENERAL | GENERAL
| GEOMETRY | GEOMETRY
| GEOMCOLLECTION
| GEOMETRYCOLLECTION | GEOMETRYCOLLECTION
| GET_FORMAT | GET_FORMAT
| GLOBAL | GLOBAL
@ -3929,6 +4258,7 @@ unreserved_keyword_normal
| LEAVES | LEAVES
| LESS | LESS
| LEVEL | LEVEL
| LINE_DELIMITER
| LINESTRING | LINESTRING
| LIST_ | LIST_
| LISTAGG | LISTAGG
@ -3941,6 +4271,7 @@ unreserved_keyword_normal
| LOGFILE | LOGFILE
| LOGONLY_REPLICA_NUM | LOGONLY_REPLICA_NUM
| LOGS | LOGS
| LOG_RESTORE_SOURCE
| MAJOR | MAJOR
| MANUAL | MANUAL
| MASTER | MASTER
@ -4030,6 +4361,7 @@ unreserved_keyword_normal
| NTILE | NTILE
| NTH_VALUE | NTH_VALUE
| NUMBER | NUMBER
| NULL_IF_EXETERNAL
| NULLS | NULLS
| NVARCHAR | NVARCHAR
| OCCUR | OCCUR
@ -4039,6 +4371,7 @@ unreserved_keyword_normal
| OLD | OLD
| OLD_PASSWORD | OLD_PASSWORD
| OLD_KEY | OLD_KEY
| OJ
| OVER | OVER
| OBCONFIG_URL | OBCONFIG_URL
| ONE | ONE
@ -4060,6 +4393,7 @@ unreserved_keyword_normal
| LS | LS
| PARTITIONING | PARTITIONING
| PARTITIONS | PARTITIONS
| PATTERN
| PERCENT_RANK | PERCENT_RANK
| PAUSE | PAUSE
| PERCENTAGE | PERCENTAGE
@ -4169,22 +4503,27 @@ unreserved_keyword_normal
| SECURITY | SECURITY
| SEED | SEED
| SEQUENCE | SEQUENCE
| SEQUENCES
| SERIAL | SERIAL
| SERIALIZABLE | SERIALIZABLE
| SERVER | SERVER
| SERVER_IP | SERVER_IP
| SERVER_PORT | SERVER_PORT
| SERVER_TYPE | SERVER_TYPE
| SERVICE
| SESSION | SESSION
| SESSION_USER | SESSION_USER
| SET_MASTER_CLUSTER | SET_MASTER_CLUSTER
| SET_SLAVE_CLUSTER | SET_SLAVE_CLUSTER
| SET_TP | SET_TP
| SHARDING
| SHARE | SHARE
| SHUTDOWN | SHUTDOWN
| SIGNED | SIGNED
| SIZE | SIZE
| SIMPLE | SIMPLE
| SKIP_BLANK_LINES
| SKIP_HEADER
| SLAVE | SLAVE
| SLOW | SLOW
| SNAPSHOT | SNAPSHOT
@ -4211,6 +4550,7 @@ unreserved_keyword_normal
| SQL_TSI_SECOND | SQL_TSI_SECOND
| SQL_TSI_WEEK | SQL_TSI_WEEK
| SQL_TSI_YEAR | SQL_TSI_YEAR
| SRID
| STACKED | STACKED
| STANDBY | STANDBY
| START | START
@ -4282,6 +4622,7 @@ unreserved_keyword_normal
| TRADITIONAL | TRADITIONAL
| TRIGGERS | TRIGGERS
| TRIM | TRIM
| TRIM_SPACE
| TRUNCATE | TRUNCATE
| TYPE | TYPE
| TYPES | TYPES
@ -4306,6 +4647,7 @@ unreserved_keyword_normal
| USER | USER
| USER_RESOURCES | USER_RESOURCES
| UNBOUNDED | UNBOUNDED
| UNLIMITED
| VALID | VALID
| VALIDATE | VALIDATE
| VALUE | VALUE
@ -4364,6 +4706,10 @@ unreserved_keyword_normal
| BACKED | BACKED
| NAMESPACE | NAMESPACE
| LIB | LIB
| LINK
| MY_NAME
| CONNECT
| STATEMENT_ID
; ;
unreserved_keyword_special unreserved_keyword_special

View File

@ -0,0 +1,42 @@
/**
* Copyright (c) 2024 OceanBase
* OceanBase Migration Service LogProxy is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#pragma once
#include "object/object.h"
namespace etransfer {
namespace object {
class RenameTableColumnObject : public Object {
private:
RawConstant origin_column_name_;
RawConstant current_column_name_;
public:
RenameTableColumnObject(const Catalog& catalog, const RawConstant& object_name,
const std::string& raw_ddl,
const RawConstant& origin_column_name,
const RawConstant& current_column_name)
: Object(catalog, object_name, raw_ddl, ObjectType::RENAME_TABLE_COLUMN_OBJECT),
origin_column_name_(origin_column_name),
current_column_name_(current_column_name) {}
std::string GetCurrentColumnName() {
return Util::RawConstantValue(current_column_name_);
}
std::string GetOriginColumnName() {
return Util::RawConstantValue(origin_column_name_);
}
};
}
}

View File

@ -28,6 +28,7 @@
#include "sink/drop_table_object_builder.h" #include "sink/drop_table_object_builder.h"
#include "sink/drop_table_partition_object_builder.h" #include "sink/drop_table_partition_object_builder.h"
#include "sink/rename_index_object_builder.h" #include "sink/rename_index_object_builder.h"
#include "sink/rename_table_column_object_builder.h"
#include "sink/rename_table_object_builder.h" #include "sink/rename_table_object_builder.h"
#include "sink/truncate_table_object_builder.h" #include "sink/truncate_table_object_builder.h"
#include "sink/truncate_table_partition_object_builder.h" #include "sink/truncate_table_partition_object_builder.h"
@ -73,6 +74,8 @@ BuilderMap ObjectBuilderMapper::InitMapper() {
std::make_shared<AlterTablePartitionObjectBuilder>(); std::make_shared<AlterTablePartitionObjectBuilder>();
mapper[common::ObjectType::TABLE_REFERENCE_CONSTRAINT_OBJECT] = mapper[common::ObjectType::TABLE_REFERENCE_CONSTRAINT_OBJECT] =
std::make_shared<AddTableReferenceConstraintObjectBuilder>(); std::make_shared<AddTableReferenceConstraintObjectBuilder>();
mapper[common::ObjectType::RENAME_TABLE_COLUMN_OBJECT] =
std::make_shared<RenameTableColumnObjectBuilder>();
return mapper; return mapper;
} }
const BuilderMap ObjectBuilderMapper::mysql_object_builder_mapper = const BuilderMap ObjectBuilderMapper::mysql_object_builder_mapper =

View File

@ -0,0 +1,37 @@
/**
* Copyright (c) 2024 OceanBase
* OceanBase Migration Service LogProxy is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#include "sink/rename_table_column_object_builder.h"
#include "object/rename_table_column_object.h"
#include "sink/sql_builder_util.h"
namespace etransfer {
namespace sink {
Strings RenameTableColumnObjectBuilder::RealBuildSql(
ObjectPtr db_object, ObjectPtr parent_object,
std::shared_ptr<BuildContext> sql_builder_context) {
std::shared_ptr<RenameTableColumnObject> rename_table_column_object =
std::dynamic_pointer_cast<RenameTableColumnObject>(db_object);
Strings res;
std::string line;
line.append("RENAME COLUMN ");
line.append(SqlBuilderUtil::EscapeNormalObjectName(
rename_table_column_object->GetOriginColumnName(), sql_builder_context))
.append(" TO ");
line.append(SqlBuilderUtil::EscapeNormalObjectName(
rename_table_column_object->GetCurrentColumnName(), sql_builder_context));
res.push_back(line);
return res;
}
} // namespace sink
} // namespace etransfer

View File

@ -0,0 +1,25 @@
/**
* Copyright (c) 2024 OceanBase
* OceanBase Migration Service LogProxy is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#pragma once
#include "sink/object_builder.h"
namespace etransfer {
namespace sink {
class RenameTableColumnObjectBuilder : public ObjectBuilder {
public:
Strings RealBuildSql(ObjectPtr db_object, ObjectPtr parent_object,
std::shared_ptr<BuildContext> sql_builder_context);
};
} // namespace sink
} // namespace etransfer

View File

@ -27,6 +27,7 @@
#include "object/drop_table_object.h" #include "object/drop_table_object.h"
#include "object/partition_object.h" #include "object/partition_object.h"
#include "object/rename_index_object.h" #include "object/rename_index_object.h"
#include "object/rename_table_column_object.h"
#include "object/rename_table_object.h" #include "object/rename_table_object.h"
#include "object/table_column_object.h" #include "object/table_column_object.h"
#include "object/table_constraint_object.h" #include "object/table_constraint_object.h"
@ -1504,7 +1505,7 @@ void OBMySQLObjectParser::ProcessAlterTableAlterColumnAction(
} }
} else if (ctx->DROP() != nullptr) { } else if (ctx->DROP() != nullptr) {
RawConstant column_name_to_drop = RawConstant column_name_to_drop =
GetColumnName(ctx->column_definition_ref()); GetColumnName(ctx->column_definition_ref(0));
Strings drop_option; Strings drop_option;
if (nullptr != ctx->CASCADE()) { if (nullptr != ctx->CASCADE()) {
drop_option.push_back(ctx->CASCADE()->getText()); drop_option.push_back(ctx->CASCADE()->getText());
@ -1517,7 +1518,7 @@ void OBMySQLObjectParser::ProcessAlterTableAlterColumnAction(
drop_option)); drop_option));
} else if (ctx->ALTER() != nullptr) { } else if (ctx->ALTER() != nullptr) {
RawConstant column_name_to_drop = RawConstant column_name_to_drop =
GetColumnName(ctx->column_definition_ref()); GetColumnName(ctx->column_definition_ref(0));
if (ctx->alter_column_behavior() != nullptr) { if (ctx->alter_column_behavior() != nullptr) {
std::shared_ptr<ColumnAttributes> attributes = std::shared_ptr<ColumnAttributes> attributes =
std::make_shared<ColumnAttributes>(); std::make_shared<ColumnAttributes>();
@ -1567,8 +1568,12 @@ void OBMySQLObjectParser::ProcessAlterTableAlterColumnAction(
ProcessColumnDefinition(ctx->column_definition(), alter_column_types); ProcessColumnDefinition(ctx->column_definition(), alter_column_types);
actions.push_back(std::make_shared<AlterTableColumnObject>( actions.push_back(std::make_shared<AlterTableColumnObject>(
catalog, table_name, Util::GetCtxString(ctx), catalog, table_name, Util::GetCtxString(ctx),
GetColumnName(ctx->column_definition_ref()), table_column_object, GetColumnName(ctx->column_definition_ref(0)), table_column_object,
alter_column_types)); alter_column_types));
} else if (ctx->RENAME() != nullptr) {
RawConstant old_col_name = GetColumnName(ctx->column_definition_ref(0));
RawConstant new_col_name = GetColumnName(ctx->column_definition_ref(1));
actions.push_back(std::make_shared<RenameTableColumnObject>(catalog, table_name, Util::GetCtxString(ctx), old_col_name, new_col_name));
} else { } else {
ddl_parse_context->SetErrMsg("unsupported " + Util::GetCtxString(ctx)); ddl_parse_context->SetErrMsg("unsupported " + Util::GetCtxString(ctx));
} }

View File

@ -3038,4 +3038,66 @@ TEST(PARSER_WITH_CONTEXT, CONTEXT_7) {
ASSERT_EQ(etransfer::tool::ConvertTool::ParseWithContext(source, parse_context, builder_context, dest, err_msg), 0); ASSERT_EQ(etransfer::tool::ConvertTool::ParseWithContext(source, parse_context, builder_context, dest, err_msg), 0);
std::cout << err_msg << std::endl; std::cout << err_msg << std::endl;
EXPECT_STREQ(expect.c_str(), dest.c_str()); EXPECT_STREQ(expect.c_str(), dest.c_str());
}
TEST(RENAME_COLUMN, RENAME_COLUMN_1) {
std::string source = "ALTER TABLE t RENAME COLUMN d TO g;";
std::string expect = "ALTER TABLE `t`\n\tRENAME COLUMN `d` TO `g`\n";
std::string dest;
std::string err_msg;
std::shared_ptr<ParseContext> parse_context = std::make_shared<ParseContext>(source, "test", false);
std::shared_ptr<BuildContext> builder_context = std::make_shared<BuildContext>();
ASSERT_EQ(etransfer::tool::ConvertTool::ParseWithContext(source, parse_context, builder_context, dest, err_msg), 0);
std::cout << err_msg << std::endl;
EXPECT_STREQ(expect.c_str(), dest.c_str());
}
TEST(COMMENT, COMMENT_1) {
std::string source = "--单行注释\ncreate table t(c1 int);";
std::string expect = "CREATE TABLE `t`(\n"
"\t`c1` INTEGER\n"
")";
std::string dest;
std::string err_msg;
std::shared_ptr<ParseContext> parse_context = std::make_shared<ParseContext>(source, "test", false);
std::shared_ptr<BuildContext> builder_context = std::make_shared<BuildContext>();
ASSERT_EQ(etransfer::tool::ConvertTool::ParseWithContext(source, parse_context, builder_context, dest, err_msg), 0);
std::cout << err_msg << std::endl;
EXPECT_STREQ(expect.c_str(), dest.c_str());
}
TEST(COMMENT, COMMENT_2) {
std::string source = "/* 多行\n"
"注释*/ create table t(c1 int);";
std::string expect = "CREATE TABLE `t`(\n"
"\t`c1` INTEGER\n"
")";
std::string dest;
std::string err_msg;
std::shared_ptr<ParseContext> parse_context = std::make_shared<ParseContext>(source, "test", false);
std::shared_ptr<BuildContext> builder_context = std::make_shared<BuildContext>();
ASSERT_EQ(etransfer::tool::ConvertTool::ParseWithContext(source, parse_context, builder_context, dest, err_msg), 0);
std::cout << err_msg << std::endl;
EXPECT_STREQ(expect.c_str(), dest.c_str());
}
TEST(COMMENT, COMMENT_3) {
std::string source = "-- 注释\n"
"create table test(c1 int, -- 注释\n"
"-- 注释\n"
"-- 注释\n"
"c2 int, #注释2\n"
"c3 int /*注释3*/); ";
std::string expect = "CREATE TABLE `test`(\n"
"\t`c1` INTEGER,\n"
"\t`c2` INTEGER,\n"
"\t`c3` INTEGER\n"
")";
std::string dest;
std::string err_msg;
std::shared_ptr<ParseContext> parse_context = std::make_shared<ParseContext>(source, "test", false);
std::shared_ptr<BuildContext> builder_context = std::make_shared<BuildContext>();
ASSERT_EQ(etransfer::tool::ConvertTool::ParseWithContext(source, parse_context, builder_context, dest, err_msg), 0);
std::cout << err_msg << std::endl;
EXPECT_STREQ(expect.c_str(), dest.c_str());
} }