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-cdc-4.2.1.4-104010022024031310.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]
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-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.3.0.1-101000042024032211.el7.x86_64.rpm
[tools]
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-cdc-4.2.1.4-104010022024031310.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]
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-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.3.0.1-101000042024032211.el8.x86_64.rpm
[tools]
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-cdc-4.2.1.4-104010022024031310.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]
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-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.3.0.1-101000042024032211.el8.x86_64.rpm
[tools]
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 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);
for (; i < real.size(); 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)
{
auto num = atoll(data);
// if (num < 0) {
// num += pow(2, len);
// }
auto num = std::stoull(data);
switch (len) {
case 1:
int1store(val, num);

View File

@ -146,6 +146,7 @@ TEST(DataType, short_type)
TEST(DataType, long_type)
{
{
IColMeta col_meta;
std::string val = "-2222";
uint8_t result[4] = {82, 247, 255, 255};
@ -153,10 +154,25 @@ TEST(DataType, long_type)
MsgBuf msg_buf;
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)
{
{
IColMeta col_meta;
std::string val = "6";
col_meta.setType(OB_TYPE_BIT);
@ -166,6 +182,21 @@ TEST(DataType, bit_type)
uint8_t result[1] = {6};
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)

View File

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

View File

@ -1,7 +1,15 @@
parser grammar OBParser;
options { tokenVocab=OBLexer; }
@parser::members {
bool is_pl_parse_ = false;
bool is_pl_parse_expr_ = false;
}
// start rule: sql_stmt
sql_stmt
@ -21,6 +29,8 @@ stmt
| create_table_stmt
| create_function_stmt
| drop_function_stmt
| drop_procedure_stmt
| drop_trigger_stmt
| create_table_like_stmt
| create_database_stmt
| drop_database_stmt
@ -62,6 +72,7 @@ stmt
| help_stmt
| create_view_stmt
| create_tenant_stmt
| create_standby_tenant_stmt
| alter_tenant_stmt
| drop_tenant_stmt
| create_restore_point_stmt
@ -86,6 +97,8 @@ stmt
| purge_stmt
| analyze_stmt
| load_data_stmt
| create_dblink_stmt
| drop_dblink_stmt
| create_sequence_stmt
| alter_sequence_stmt
| drop_sequence_stmt
@ -94,18 +107,34 @@ stmt
| xa_prepare_stmt
| xa_commit_stmt
| xa_rollback_stmt
| switchover_cluster_stmt
| disconnect_cluster_stmt
| alter_cluster_stmt
| optimize_stmt
| dump_memory_stmt
| protection_mode_stmt
| get_diagnostics_stmt
| pl_expr_stmt
| method_opt
| switchover_tenant_stmt
| recover_tenant_stmt
;
pl_expr_stmt
: 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 (Comma expr)*
;
@ -134,15 +163,18 @@ complex_string_literal
| charset_introducer HEX_STRING_VALUE
| charset_introducer PARSER_SYNTAX_ERROR
| STRING_VALUE string_val_list
| NATIONAL_LITERAL
;
charset_introducer
: UnderlineUTF8
| UnderlineUTF8MB4
| UnderlineBINARY
| UnderlineGBK
| UnderlineGB18030
| UnderlineUTF16
: UNDER_LINE_UTF8
| UNDER_LINE_UTF8MB4
| UNDER_LINE_BINARY
| UNDER_LINE_GBK
| UNDER_LINE_LATIN1
| UNDER_LINE_GB18030
| UNDER_LINE_GB18030_2022
| UNDER_LINE_UTF16
;
literal
@ -242,8 +274,10 @@ simple_expr
| case_expr
| func_expr
| window_function
| LEFT_BRACE relation_name expr RIGHT_BRACE
| USER_VARIABLE
| column_definition_ref (JSON_EXTRACT|JSON_EXTRACT_UNQUOTED) complex_string_literal
| relation_name Dot relation_name (Dot relation_name)? USER_VARIABLE
;
expr
@ -251,6 +285,7 @@ expr
| bool_pri IS not? (BOOL_VALUE|UNKNOWN)
| bool_pri
| expr (AND|AND_OP|CNNOP|OR|XOR) expr
| LeftParen expr RightParen
;
not
@ -592,6 +627,10 @@ ws_level_flag_reverse
;
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 multi_delete_table (WHERE opt_hint_value expr)?
;
@ -602,6 +641,10 @@ multi_delete_table
;
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?
;
@ -610,7 +653,7 @@ update_asgn_list
;
update_asgn_factor
: no_param_column_ref COMP_EQ expr_or_default
: column_definition_ref COMP_EQ expr_or_default
;
create_resource_stmt
@ -637,7 +680,7 @@ resource_unit_option
opt_create_resource_pool_option_list
: create_resource_pool_option
| 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
@ -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_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
: tenant_option
| empty
@ -690,6 +741,7 @@ tenant_option
| REPLICA_NUM COMP_EQ? INTNUM
| PRIMARY_ZONE COMP_EQ? primary_zone_name
| 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
| charset_key COMP_EQ? charset_name
| COLLATE COMP_EQ? collation_name
@ -757,6 +809,7 @@ database_option
: DEFAULT? charset_key COMP_EQ? charset_name
| DEFAULT? COLLATE COMP_EQ? collation_name
| REPLICA_NUM COMP_EQ? INTNUM
| PRIMARY_ZONE COMP_EQ? primary_zone_name
| read_only_or_write
| default_tablegroup
| DATABASE_ID COMP_EQ? INTNUM
@ -821,7 +874,7 @@ use_database_stmt
;
temporary_option
: TEMPORARY?
: (TEMPORARY | EXTERNAL)?
;
create_table_like_stmt
@ -852,7 +905,15 @@ create_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
@ -914,6 +975,7 @@ opt_generated_option_list
opt_generated_column_attribute_list
: opt_generated_column_attribute_list generated_column_attribute
| generated_column_attribute
| empty
;
@ -926,6 +988,7 @@ generated_column_attribute
| COMMENT STRING_VALUE
| ID INTNUM
| constraint_definition
| SRID INTNUM
;
column_definition_ref
@ -1087,6 +1150,7 @@ collation
opt_column_attribute_list
: opt_column_attribute_list column_attribute
| column_attribute
| empty
;
@ -1104,6 +1168,7 @@ column_attribute
| ID INTNUM
| constraint_definition
| SRID INTNUM
| COLLATE collation_name
;
now_or_signed_literal
@ -1178,6 +1243,9 @@ table_option
| CHECKSUM COMP_EQ? INTNUM
| AUTO_INCREMENT_MODE COMP_EQ? STRING_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
@ -1439,6 +1507,18 @@ row_format_option
| 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_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
| BINDING COMP_EQ? BOOL_VALUE
| MAX_USED_PART_ID COMP_EQ? INTNUM
| SHARDING COMP_EQ? STRING_VALUE
;
alter_tablegroup_actions
@ -1539,6 +1620,7 @@ sort_column_list
sort_column_key
: column_name (LeftParen INTNUM RightParen)? (ASC | DESC)? (ID INTNUM)?
| LeftParen expr RightParen (ASC | DESC)? (ID INTNUM)?
;
opt_index_options
@ -1680,6 +1762,8 @@ select_clause
| simple_select
| simple_select_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
@ -1698,6 +1782,7 @@ select_clause_set_right
: no_table_select
| simple_select
| select_with_parens
| table_values_clause
;
select_clause_set_left
@ -2019,6 +2104,7 @@ use_plan_cache_type
distribute_method
: MATCH_ALL
| ALL
| NONE
| PARTITION
| RANDOM
@ -2027,6 +2113,8 @@ distribute_method
| BROADCAST
| LOCAL
| BC2HOST
| RANGE
| LIST_
;
limit_expr
@ -2035,6 +2123,14 @@ limit_expr
| column_ref
;
for_update_clause
: FOR UPDATE opt_for_update_wait
;
opt_lock_in_share_mode
: LOCK_ IN SHARE MODE
;
opt_for_update_wait
: empty
| WAIT DECIMAL_VAL
@ -2104,6 +2200,13 @@ from_list
table_references
: 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
@ -2116,6 +2219,9 @@ table_factor
| table_subquery
| select_with_parens use_flashback?
| 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
@ -2143,7 +2249,12 @@ sample_clause
;
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
@ -2250,6 +2361,10 @@ intnum_list
: INTNUM (relation_sep_option intnum_list)?
;
tracing_num_list
: INTNUM (relation_sep_option tracing_num_list)?
;
join_condition
: ON expr
| USING LeftParen column_list RightParen
@ -2282,6 +2397,7 @@ natural_join_type
inner_join_type
: INNER? JOIN
| CROSS JOIN
| STRAIGHT_JOIN
;
outer_join_type
@ -2321,6 +2437,23 @@ column_alias_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 TABLE relation_factor UPDATE HISTOGRAM ON column_name_list WITH INTNUM BUCKETS
| 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 PRETTY 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
;
@ -2410,7 +2546,7 @@ get_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
@ -2712,7 +2848,7 @@ lock_type
;
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
@ -2741,20 +2877,28 @@ simple_num
;
drop_sequence_stmt
: DROP SEQUENCE relation_factor
: DROP SEQUENCE (IF EXISTS)? relation_factor
;
alter_sequence_stmt
: 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
: BEGI WORK?
| START TRANSACTION ((WITH CONSISTENT SNAPSHOT) | transaction_access_mode | (WITH CONSISTENT SNAPSHOT Comma transaction_access_mode) | (transaction_access_mode Comma WITH CONSISTENT SNAPSHOT))?
: BEGIN HINT_VALUE? WORK?
| 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 (BEGI|START) STRING_VALUE
: XA (BEGIN|START) STRING_VALUE
;
xa_end_stmt
@ -2774,11 +2918,12 @@ xa_rollback_stmt
;
commit_stmt
: COMMIT WORK?
: COMMIT HINT_VALUE? WORK?
;
rollback_stmt
: ROLLBACK WORK?
| ROLLBACK HINT_VALUE WORK?
;
kill_stmt
@ -2802,7 +2947,7 @@ priv_type
: ALTER TENANT?
| create_with_opt_hint (RESOURCE POOL|USER?)
| DELETE
| DROP
| DROP (DATABASE LINK)?
| GRANT OPTION
| INSERT
| UPDATE
@ -2818,6 +2963,7 @@ priv_type
| ALTER SYSTEM
| REPLICATION SLAVE
| REPLICATION CLIENT
| CREATE DATABASE LINK
;
priv_level
@ -3016,7 +3162,7 @@ rename_table_action
;
alter_table_stmt
: ALTER TABLE relation_factor alter_table_actions
: ALTER EXTERNAL? TABLE relation_factor alter_table_actions
;
alter_table_actions
@ -3036,12 +3182,14 @@ alter_table_action
| alter_constraint_option
| alter_foreign_key_action
| DROP CONSTRAINT constraint_name
| REFRESH
;
alter_constraint_option
: DROP (CHECK|CONSTRAINT) LeftParen name_list RightParen
| DROP CHECK constraint_name
| ADD constraint_definition
| ALTER (CHECK | CONSTRAINT) constraint_name check_state
;
alter_partition_option
@ -3121,6 +3269,7 @@ alter_column_option
| CHANGE column_definition_ref column_definition
| MODIFY COLUMN column_definition
| MODIFY column_definition
| RENAME COLUMN column_definition_ref TO column_definition_ref
;
alter_tablegroup_option
@ -3158,20 +3307,28 @@ dump_memory_stmt
;
alter_system_stmt
: ALTER SYSTEM BOOTSTRAP server_info_list
| ALTER SYSTEM FLUSH cache_type CACHE namespace_expr? sql_id_expr? databases_expr? (TENANT COMP_EQ tenant_name_list)? flush_scope
: ALTER SYSTEM BOOTSTRAP (CLUSTER cluster_role)? server_info_list (PRIMARY_CLUSTER_ID INTNUM PRIMARY_ROOTSERVICE_LIST STRING_VALUE)?
| 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 KVCACHE tenant_name? cache_name?
| ALTER SYSTEM FLUSH DAG WARNINGS
| 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 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 RECYCLE REPLICA server_or_zone?
| ALTER SYSTEM START MERGE zone_desc
| ALTER SYSTEM suspend_or_resume MERGE tenant_list_tuple?
| ALTER SYSTEM suspend_or_resume RECOVERY zone_desc?
| 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 MAJOR FREEZE tenant_list_tuple?
| ALTER SYSTEM CHECKPOINT
@ -3199,7 +3356,7 @@ alter_system_stmt
| ALTER SYSTEM UPGRADE VIRTUAL SCHEMA
| ALTER SYSTEM RUN JOB STRING_VALUE server_or_zone?
| 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 upgrade_action ROLLING UPGRADE
| 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 ADD RESTORE SOURCE STRING_VALUE
| 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 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 tenant_name FROM STRING_VALUE
| 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 DROP 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 (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 RESTORE relation_name
| ALTER SYSTEM SUSPEND 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 BACKUPSET 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 DELETE BACKUPPIECE INTNUM (COPY INTNUM)?
| ALTER SYSTEM CANCEL BACKUP BACKUPPIECE
| ALTER SYSTEM DELETE BACKUPROUND INTNUM (COPY INTNUM)?
| 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 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)?
| SET ENCRYPTION ON IDENTIFIED BY STRING_VALUE ONLY
| SET DECRYPTION IDENTIFIED BY string_list
| ALTER SYSTEM BACKUP TENANT backup_tenant_name_list TO STRING_VALUE
;
opt_sql_throttle_using_cond
@ -3296,13 +3464,18 @@ balance_task_type
;
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
: relation_name_or_string (Comma relation_name_or_string)*
;
backup_tenant_name_list
: COMP_EQ? tenant_name_list
;
flush_scope
: GLOBAL?
;
@ -3337,6 +3510,7 @@ zone_action
ip_port
: SERVER COMP_EQ? STRING_VALUE
| HOST STRING_VALUE
;
zone_desc
@ -3370,6 +3544,10 @@ alter_or_change_or_modify
| MODIFY
;
partition_id_desc
: PARTITION_ID COMP_EQ? STRING_VALUE
;
ls
: LS COMP_EQ? INTNUM
;
@ -3385,11 +3563,37 @@ ls_server_or_server_or_zone_or_tenant
| 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
| RESUME
;
baseline_id_expr
: BASELINE_ID COMP_EQ? INTNUM
;
sql_id_expr
: SQL_ID COMP_EQ? STRING_VALUE
;
@ -3398,6 +3602,10 @@ namespace_expr
: NAMESPACE COMP_EQ? STRING_VALUE
;
baseline_asgn_factor
: column_name COMP_EQ literal
;
tenant_name
: 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?
| 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?
| 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
@ -3440,6 +3650,12 @@ settp_option
| OCCUR COMP_EQ? INTNUM
| FREQUENCY COMP_EQ? INTNUM
| ERROR_CODE COMP_EQ? INTNUM
| MATCH COMP_EQ? INTNUM
;
cluster_role
: PRIMARY
| STANDBY
;
partition_role
@ -3454,7 +3670,7 @@ ls_role
;
upgrade_action
: BEGI
: BEGIN
| END
;
@ -3536,6 +3752,11 @@ isolation_level
| SERIALIZABLE
;
opt_encrypt_key
: empty
| ENCRYPTED BY STRING_VALUE
;
create_savepoint_stmt
: SAVEPOINT var_name
;
@ -3553,10 +3774,66 @@ switchover_tenant_stmt
: 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
: 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
: NAME_OB
| unreserved_keyword_normal
@ -3584,6 +3861,7 @@ relation_name
function_name
: NAME_OB
| RANDOM
| DUMP
| CHARSET
| COLLATION
@ -3602,6 +3880,7 @@ function_name
| REPLACE
| TRUNCATE
| FORMAT
| NORMAL
;
column_label
@ -3632,8 +3911,49 @@ date_unit
| 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 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
@ -3672,6 +3992,7 @@ unreserved_keyword_normal
| APPROX_COUNT_DISTINCT_SYNOPSIS
| APPROX_COUNT_DISTINCT_SYNOPSIS_MERGE
| ARCHIVELOG
| ARBITRATION
| ASCII
| AT
| AUDIT
@ -3692,7 +4013,7 @@ unreserved_keyword_normal
| BASIC
| BALANCE
| BANDWIDTH
| BEGI
| BEGIN
| BINDING
| BINLOG
| BIT
@ -3813,8 +4134,12 @@ unreserved_keyword_normal
| DEFAULT_TABLEGROUP
| EFFECTIVE
| EMPTY
| EMPTY_FIELD_AS_NULL
| ENABLE
| ENABLE_ARBITRATION_SERVICE
| ENABLE_EXTENDED_ROWID
| ENCODING
| ENCRYPTED
| ENCRYPTION
| END
| ENDS
@ -3842,12 +4167,15 @@ unreserved_keyword_normal
| EXTENDED
| EXTENDED_NOADDR
| EXTENT_SIZE
| EXTERNAL
| FAILOVER
| EXTRACT
| FAST
| FAULTS
| FLASHBACK
| FIELDS
| FIELD_DELIMITER
| FIELD_OPTIONALLY_ENCLOSED_BY
| FILEX
| FILE_ID
| FINAL_COUNT
@ -3867,6 +4195,7 @@ unreserved_keyword_normal
| FULL
| GENERAL
| GEOMETRY
| GEOMCOLLECTION
| GEOMETRYCOLLECTION
| GET_FORMAT
| GLOBAL
@ -3929,6 +4258,7 @@ unreserved_keyword_normal
| LEAVES
| LESS
| LEVEL
| LINE_DELIMITER
| LINESTRING
| LIST_
| LISTAGG
@ -3941,6 +4271,7 @@ unreserved_keyword_normal
| LOGFILE
| LOGONLY_REPLICA_NUM
| LOGS
| LOG_RESTORE_SOURCE
| MAJOR
| MANUAL
| MASTER
@ -4030,6 +4361,7 @@ unreserved_keyword_normal
| NTILE
| NTH_VALUE
| NUMBER
| NULL_IF_EXETERNAL
| NULLS
| NVARCHAR
| OCCUR
@ -4039,6 +4371,7 @@ unreserved_keyword_normal
| OLD
| OLD_PASSWORD
| OLD_KEY
| OJ
| OVER
| OBCONFIG_URL
| ONE
@ -4060,6 +4393,7 @@ unreserved_keyword_normal
| LS
| PARTITIONING
| PARTITIONS
| PATTERN
| PERCENT_RANK
| PAUSE
| PERCENTAGE
@ -4169,22 +4503,27 @@ unreserved_keyword_normal
| SECURITY
| SEED
| SEQUENCE
| SEQUENCES
| SERIAL
| SERIALIZABLE
| SERVER
| SERVER_IP
| SERVER_PORT
| SERVER_TYPE
| SERVICE
| SESSION
| SESSION_USER
| SET_MASTER_CLUSTER
| SET_SLAVE_CLUSTER
| SET_TP
| SHARDING
| SHARE
| SHUTDOWN
| SIGNED
| SIZE
| SIMPLE
| SKIP_BLANK_LINES
| SKIP_HEADER
| SLAVE
| SLOW
| SNAPSHOT
@ -4211,6 +4550,7 @@ unreserved_keyword_normal
| SQL_TSI_SECOND
| SQL_TSI_WEEK
| SQL_TSI_YEAR
| SRID
| STACKED
| STANDBY
| START
@ -4282,6 +4622,7 @@ unreserved_keyword_normal
| TRADITIONAL
| TRIGGERS
| TRIM
| TRIM_SPACE
| TRUNCATE
| TYPE
| TYPES
@ -4306,6 +4647,7 @@ unreserved_keyword_normal
| USER
| USER_RESOURCES
| UNBOUNDED
| UNLIMITED
| VALID
| VALIDATE
| VALUE
@ -4364,6 +4706,10 @@ unreserved_keyword_normal
| BACKED
| NAMESPACE
| LIB
| LINK
| MY_NAME
| CONNECT
| STATEMENT_ID
;
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_partition_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/truncate_table_object_builder.h"
#include "sink/truncate_table_partition_object_builder.h"
@ -73,6 +74,8 @@ BuilderMap ObjectBuilderMapper::InitMapper() {
std::make_shared<AlterTablePartitionObjectBuilder>();
mapper[common::ObjectType::TABLE_REFERENCE_CONSTRAINT_OBJECT] =
std::make_shared<AddTableReferenceConstraintObjectBuilder>();
mapper[common::ObjectType::RENAME_TABLE_COLUMN_OBJECT] =
std::make_shared<RenameTableColumnObjectBuilder>();
return 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/partition_object.h"
#include "object/rename_index_object.h"
#include "object/rename_table_column_object.h"
#include "object/rename_table_object.h"
#include "object/table_column_object.h"
#include "object/table_constraint_object.h"
@ -1504,7 +1505,7 @@ void OBMySQLObjectParser::ProcessAlterTableAlterColumnAction(
}
} else if (ctx->DROP() != nullptr) {
RawConstant column_name_to_drop =
GetColumnName(ctx->column_definition_ref());
GetColumnName(ctx->column_definition_ref(0));
Strings drop_option;
if (nullptr != ctx->CASCADE()) {
drop_option.push_back(ctx->CASCADE()->getText());
@ -1517,7 +1518,7 @@ void OBMySQLObjectParser::ProcessAlterTableAlterColumnAction(
drop_option));
} else if (ctx->ALTER() != nullptr) {
RawConstant column_name_to_drop =
GetColumnName(ctx->column_definition_ref());
GetColumnName(ctx->column_definition_ref(0));
if (ctx->alter_column_behavior() != nullptr) {
std::shared_ptr<ColumnAttributes> attributes =
std::make_shared<ColumnAttributes>();
@ -1567,8 +1568,12 @@ void OBMySQLObjectParser::ProcessAlterTableAlterColumnAction(
ProcessColumnDefinition(ctx->column_definition(), alter_column_types);
actions.push_back(std::make_shared<AlterTableColumnObject>(
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));
} 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 {
ddl_parse_context->SetErrMsg("unsupported " + Util::GetCtxString(ctx));
}

View File

@ -3039,3 +3039,65 @@ TEST(PARSER_WITH_CONTEXT, CONTEXT_7) {
std::cout << err_msg << std::endl;
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());
}