mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 08:40:50 +00:00
to fix issue 42856 and MaterializedMySQL improvement
This commit is contained in:
parent
404a9a0135
commit
eeb9c57c59
@ -116,9 +116,10 @@ namespace MySQLReplication
|
||||
if (!query.starts_with("XA COMMIT"))
|
||||
transaction_complete = false;
|
||||
}
|
||||
else if (query.starts_with("SAVEPOINT"))
|
||||
else if (query.starts_with("SAVEPOINT") || query.starts_with("ROLLBACK")
|
||||
|| query.starts_with("RELEASE SAVEPOINT"))
|
||||
{
|
||||
throw ReplicationError("ParseQueryEvent: Unsupported query event:" + query, ErrorCodes::LOGICAL_ERROR);
|
||||
typ = QUERY_EVENT_OTHER;
|
||||
}
|
||||
}
|
||||
|
||||
@ -941,6 +942,8 @@ namespace MySQLReplication
|
||||
{
|
||||
case QUERY_EVENT_MULTI_TXN_FLAG:
|
||||
case QUERY_EVENT_XA:
|
||||
/// Ignore queries that have no impact on the data
|
||||
case QUERY_EVENT_OTHER:
|
||||
{
|
||||
event = std::make_shared<DryRunEvent>(std::move(query->header));
|
||||
break;
|
||||
|
@ -368,7 +368,8 @@ namespace MySQLReplication
|
||||
{
|
||||
QUERY_EVENT_DDL = 0,
|
||||
QUERY_EVENT_MULTI_TXN_FLAG = 1,
|
||||
QUERY_EVENT_XA = 2
|
||||
QUERY_EVENT_XA = 2,
|
||||
QUERY_EVENT_OTHER = 3
|
||||
};
|
||||
|
||||
class QueryEvent : public EventBase
|
||||
|
@ -55,7 +55,7 @@ DataTypePtr convertMySQLDataType(MultiEnum<MySQLDataTypesSupport> type_support,
|
||||
else
|
||||
res = std::make_shared<DataTypeInt16>();
|
||||
}
|
||||
else if (type_name == "int" || type_name == "mediumint")
|
||||
else if (type_name == "int" || type_name == "mediumint" || type_name == "integer")
|
||||
{
|
||||
if (is_unsigned)
|
||||
res = std::make_shared<DataTypeUInt32>();
|
||||
|
@ -267,7 +267,12 @@ static inline bool parseRenameCommand(IParser::Pos & pos, ASTPtr & node, Expecte
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
if (!ParserCompoundIdentifier(true).parse(pos, new_name, expected))
|
||||
return false;
|
||||
auto new_table_id = new_name->as<ASTTableIdentifier>()->getTableId();
|
||||
alter_command->type = ASTAlterCommand::RENAME_TABLE;
|
||||
alter_command->new_table_name = new_table_id.table_name;
|
||||
alter_command->new_database_name = new_table_id.database_name;
|
||||
}
|
||||
|
||||
node = alter_command;
|
||||
@ -306,6 +311,7 @@ static inline bool parseOtherCommand(IParser::Pos & pos, ASTPtr & node, Expected
|
||||
OptionDescribe("CONVERT TO CHARACTER SET", "charset", std::make_shared<ParserCharsetOrCollateName>()),
|
||||
OptionDescribe("CHARACTER SET", "charset", std::make_shared<ParserCharsetOrCollateName>()),
|
||||
OptionDescribe("DEFAULT CHARACTER SET", "charset", std::make_shared<ParserCharsetOrCollateName>()),
|
||||
OptionDescribe("COMMENT", "", std::make_shared<ParserIdentifier>()),
|
||||
OptionDescribe("LOCK", "lock", std::make_shared<ParserIdentifier>())
|
||||
}
|
||||
};
|
||||
|
@ -52,6 +52,7 @@ static inline bool parseColumnDeclareOptions(IParser::Pos & pos, ASTPtr & node,
|
||||
OptionDescribe("KEY", "primary_key", std::make_unique<ParserAlwaysTrue>()),
|
||||
OptionDescribe("COMMENT", "comment", std::make_unique<ParserStringLiteral>()),
|
||||
OptionDescribe("CHARACTER SET", "charset_name", std::make_unique<ParserCharsetOrCollateName>()),
|
||||
OptionDescribe("CHARSET", "charset", std::make_unique<ParserCharsetOrCollateName>()),
|
||||
OptionDescribe("COLLATE", "collate", std::make_unique<ParserCharsetOrCollateName>()),
|
||||
OptionDescribe("COLUMN_FORMAT", "column_format", std::make_unique<ParserIdentifier>()),
|
||||
OptionDescribe("STORAGE", "storage", std::make_unique<ParserIdentifier>()),
|
||||
@ -59,6 +60,7 @@ static inline bool parseColumnDeclareOptions(IParser::Pos & pos, ASTPtr & node,
|
||||
OptionDescribe("GENERATED ALWAYS AS", "generated", std::make_unique<ParserExpression>()),
|
||||
OptionDescribe("STORED", "is_stored", std::make_unique<ParserAlwaysTrue>()),
|
||||
OptionDescribe("VIRTUAL", "is_stored", std::make_unique<ParserAlwaysFalse>()),
|
||||
OptionDescribe("INVISIBLE", "", std::make_unique<ParserAlwaysTrue>()),
|
||||
OptionDescribe("", "reference", std::make_unique<ParserDeclareReference>()),
|
||||
OptionDescribe("", "constraint", std::make_unique<ParserDeclareConstraint>()),
|
||||
}
|
||||
|
@ -875,6 +875,16 @@ def alter_rename_table_with_materialized_mysql_database(
|
||||
"1\n2\n3\n4\n5\n",
|
||||
)
|
||||
|
||||
mysql_node.query("ALTER TABLE test_database_rename_table.test_table_4 RENAME test_database_rename_table.test_table_5")
|
||||
mysql_node.query("ALTER TABLE test_database_rename_table.test_table_5 RENAME TO test_database_rename_table.test_table_6")
|
||||
mysql_node.query("ALTER TABLE test_database_rename_table.test_table_6 RENAME AS test_database_rename_table.test_table_7")
|
||||
|
||||
check_query(
|
||||
clickhouse_node,
|
||||
"SELECT * FROM test_database_rename_table.test_table_7 ORDER BY id FORMAT TSV",
|
||||
"1\n2\n3\n4\n5\n",
|
||||
)
|
||||
|
||||
clickhouse_node.query("DROP DATABASE test_database_rename_table")
|
||||
mysql_node.query("DROP DATABASE test_database_rename_table")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user