Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
6097651
tmp
arthurpassos Oct 7, 2025
43e9459
tmp2 - just in case of disaster recovery
arthurpassos Oct 9, 2025
659b309
able to export partition using two different replicas and upload comm…
arthurpassos Oct 10, 2025
d3bb820
checkpoint
arthurpassos Oct 13, 2025
444e0ee
some changes
arthurpassos Oct 13, 2025
35c6cca
add a silly test
arthurpassos Oct 13, 2025
b884fd3
hold parts references to prevent deletion
arthurpassos Oct 13, 2025
c7493cb
fix a few tests
arthurpassos Oct 13, 2025
f4f9d52
try to fix integ test failure and fix failure handling
arthurpassos Oct 14, 2025
91c7ec2
a few fixes
arthurpassos Oct 14, 2025
69cd83f
make dest storage id part of the key
arthurpassos Oct 15, 2025
62cb51f
add system.replicated_partition_exports
arthurpassos Oct 16, 2025
54c2dfb
add exception to replicated systems table
arthurpassos Oct 17, 2025
7b3a7c9
add the replica that caused the exception
arthurpassos Oct 17, 2025
3f3983c
export_merge_tree_partition_force_export
arthurpassos Oct 17, 2025
b89cd5e
almost done with kill export partition
arthurpassos Oct 21, 2025
bb04fd9
working kill export, update next idx upon lock and lock as many parts…
arthurpassos Oct 22, 2025
55e7b94
fix conflicts
arthurpassos Oct 22, 2025
abe14f3
rmv from system.exports
arthurpassos Oct 23, 2025
e225798
add no fasttest
arthurpassos Oct 23, 2025
0ca5e28
some adjustments
arthurpassos Oct 23, 2025
63c48ce
silly change to force cicd rebuild
arthurpassos Oct 23, 2025
ee00ebb
remove kind of dead code
arthurpassos Oct 28, 2025
5c61bd6
small tweaks for demo
arthurpassos Oct 28, 2025
d609d04
todo comment
arthurpassos Oct 28, 2025
b571f5a
wip - refactor new design
arthurpassos Nov 3, 2025
4487431
looking good before ordering
arthurpassos Nov 4, 2025
f23ed2d
preserve order of tasks..
arthurpassos Nov 5, 2025
149a437
Merge branch 'antalya-25.8' into export_replicated_mt_partition_v2
arthurpassos Nov 5, 2025
fb2d7f7
increase some sleeps to try to make the test more stable?
arthurpassos Nov 5, 2025
ee2abd0
implement ttl that depends on cleanup, try to make tests more stable
arthurpassos Nov 5, 2025
d6e4226
improve ttl so it does not depend on cleanup, add test for ttl
arthurpassos Nov 5, 2025
c2b5d84
cleanup the code in updating task
arthurpassos Nov 5, 2025
601be4c
rmv useless change
arthurpassos Nov 5, 2025
d9796b4
Cancel background exports instead of waiting for them upon drop table
arthurpassos Nov 6, 2025
3f64bff
Merge branch 'antalya-25.8' into export_replicated_mt_partition_v2
arthurpassos Nov 6, 2025
26bd613
rmv bad ex log
arthurpassos Nov 6, 2025
803a91a
preserve some settings in export partition zk task
arthurpassos Nov 7, 2025
7a12b3a
make the zk structure a bit more flat
arthurpassos Nov 7, 2025
de9deb2
introduce file already exists policy setting
arthurpassos Nov 10, 2025
cf13ec2
use enum for statuses, remove status from completed part export, try …
arthurpassos Nov 10, 2025
0c0b85f
refactor kill so that it sets status instead of removing entry, adds …
arthurpassos Nov 12, 2025
4024b52
Merge branch 'antalya-25.8' into export_replicated_mt_partition_v2
arthurpassos Nov 12, 2025
6a8b390
Merge branch 'antalya-25.8' into export_replicated_mt_partition_v2
arthurpassos Nov 13, 2025
7e90b70
some logs
arthurpassos Nov 13, 2025
0c67f05
small changes
arthurpassos Nov 13, 2025
059467c
address a few minor comments
arthurpassos Nov 14, 2025
a8b9ce4
use existing raii construct for ephemeral nodes in zk
arthurpassos Nov 14, 2025
460f2f4
add a missing piece (I hope it was a missing piece)
arthurpassos Nov 14, 2025
522cfdb
do not mark part export as failed in case of cancelled export
arthurpassos Nov 14, 2025
147d21c
rmv super flaky test
arthurpassos Nov 14, 2025
bada40f
put the background threads, kill operation and system table behind se…
arthurpassos Nov 15, 2025
0486df2
try to prevent dangling reference access
arthurpassos Nov 15, 2025
6a5e2a2
rmv unrelated change
arthurpassos Nov 16, 2025
8602587
use the right config name
arthurpassos Nov 16, 2025
276dbf1
use settingsenum
arthurpassos Nov 16, 2025
1ec94fa
Enable experimental export merge tree partition
arthurpassos Nov 16, 2025
4135ff7
Update enable_experimental_export_merge_tree_partition.xml
arthurpassos Nov 16, 2025
a736a6c
fix privilege issue
arthurpassos Nov 17, 2025
37d50ec
generate transaction id instead of reusing the queryid
arthurpassos Nov 17, 2025
7c7f251
Merge branch 'antalya-25.8' into export_replicated_mt_partition_v2
arthurpassos Nov 17, 2025
3314f21
fix possible dangling ref
arthurpassos Nov 17, 2025
59cd727
use yet another tryget
arthurpassos Nov 17, 2025
6b9870a
Merge branch 'antalya-25.8' into export_replicated_mt_partition_v2
arthurpassos Nov 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/Access/Common/AccessType.h
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@ enum class AccessType : uint8_t
M(ALTER_SETTINGS, "ALTER SETTING, ALTER MODIFY SETTING, MODIFY SETTING, RESET SETTING", TABLE, ALTER_TABLE) /* allows to execute ALTER MODIFY SETTING */\
M(ALTER_MOVE_PARTITION, "ALTER MOVE PART, MOVE PARTITION, MOVE PART", TABLE, ALTER_TABLE) \
M(ALTER_EXPORT_PART, "ALTER EXPORT PART, EXPORT PART", TABLE, ALTER_TABLE) \
M(ALTER_EXPORT_PARTITION, "ALTER EXPORT PARTITION, EXPORT PARTITION", TABLE, ALTER_TABLE) \
M(ALTER_FETCH_PARTITION, "ALTER FETCH PART, FETCH PARTITION", TABLE, ALTER_TABLE) \
M(ALTER_FREEZE_PARTITION, "FREEZE PARTITION, UNFREEZE", TABLE, ALTER_TABLE) \
M(ALTER_UNLOCK_SNAPSHOT, "UNLOCK SNAPSHOT", TABLE, ALTER_TABLE) \
Expand Down
1 change: 1 addition & 0 deletions src/Core/ServerSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1144,6 +1144,7 @@ The policy on how to perform a scheduling of CPU slots specified by `concurrent_
DECLARE(UInt64, object_storage_list_objects_cache_max_entries, 1000, "Maximum size of ObjectStorage list objects cache in entries. Zero means disabled.", 0) \
DECLARE(UInt64, object_storage_list_objects_cache_ttl, 3600, "Time to live of records in ObjectStorage list objects cache in seconds. Zero means unlimited", 0) \
DECLARE(UInt64, input_format_parquet_metadata_cache_max_size, 500000000, "Maximum size of parquet file metadata cache", 0) \
DECLARE(Bool, enable_experimental_export_merge_tree_partition_feature, false, "Enable export replicated merge tree partition feature. It is experimental and not yet ready for production use.", 0) \
// clang-format on

/// If you add a setting which can be updated at runtime, please update 'changeable_settings' map in dumpToSystemServerSettingsColumns below
Expand Down
16 changes: 16 additions & 0 deletions src/Core/Settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6873,6 +6873,22 @@ Use roaring bitmap for iceberg positional deletes.
)", 0) \
DECLARE(Bool, export_merge_tree_part_overwrite_file_if_exists, false, R"(
Overwrite file if it already exists when exporting a merge tree part
)", 0) \
DECLARE(Bool, export_merge_tree_partition_force_export, false, R"(
Ignore existing partition export and overwrite the zookeeper entry
)", 0) \
DECLARE(UInt64, export_merge_tree_partition_max_retries, 3, R"(
Maximum number of retries for exporting a merge tree part in an export partition task
)", 0) \
DECLARE(UInt64, export_merge_tree_partition_manifest_ttl, 180, R"(
Determines how long the manifest will live in ZooKeeper. It prevents the same partition from being exported twice to the same destination.
This setting does not affect / delete in progress tasks. It'll only cleanup the completed ones.
)", 0) \
DECLARE(MergeTreePartExportFileAlreadyExistsPolicy, export_merge_tree_part_file_already_exists_policy, MergeTreePartExportFileAlreadyExistsPolicy::skip, R"(
Possible values:
- skip - Skip the file if it already exists.
- error - Throw an error if the file already exists.
- overwrite - Overwrite the file.
)", 0) \
DECLARE(Timezone, iceberg_timezone_for_timestamptz, "UTC", R"(
Timezone for Iceberg timestamptz field.
Expand Down
1 change: 1 addition & 0 deletions src/Core/Settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ class WriteBuffer;
M(CLASS_NAME, LogsLevel) \
M(CLASS_NAME, Map) \
M(CLASS_NAME, MaxThreads) \
M(CLASS_NAME, MergeTreePartExportFileAlreadyExistsPolicy) \
M(CLASS_NAME, Milliseconds) \
M(CLASS_NAME, MsgPackUUIDRepresentation) \
M(CLASS_NAME, MySQLDataTypesSupport) \
Expand Down
4 changes: 4 additions & 0 deletions src/Core/SettingsChangesHistory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ const VersionToSettingsChangesMap & getSettingsChangesHistory()
{"allow_retries_in_cluster_requests", false, false, "New setting"},
{"object_storage_remote_initiator", false, false, "New setting."},
{"allow_experimental_export_merge_tree_part", false, true, "Turned ON by default for Antalya."},
{"export_merge_tree_partition_force_export", false, false, "New setting."},
{"export_merge_tree_partition_max_retries", 3, 3, "New setting."},
{"export_merge_tree_partition_manifest_ttl", 180, 180, "New setting."},
{"export_merge_tree_part_file_already_exists_policy", "skip", "skip", "New setting."},
{"iceberg_timezone_for_timestamptz", "UTC", "UTC", "New setting."}
});
addSettingsChanges(settings_changes_history, "25.8",
Expand Down
2 changes: 2 additions & 0 deletions src/Core/SettingsEnums.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -370,4 +370,6 @@ IMPLEMENT_SETTING_ENUM(
{"manifest_list_entry", IcebergMetadataLogLevel::ManifestListEntry},
{"manifest_file_metadata", IcebergMetadataLogLevel::ManifestFileMetadata},
{"manifest_file_entry", IcebergMetadataLogLevel::ManifestFileEntry}})

IMPLEMENT_SETTING_AUTO_ENUM(MergeTreePartExportFileAlreadyExistsPolicy, ErrorCodes::BAD_ARGUMENTS);
}
10 changes: 10 additions & 0 deletions src/Core/SettingsEnums.h
Original file line number Diff line number Diff line change
Expand Up @@ -480,4 +480,14 @@ enum class IcebergMetadataLogLevel : uint8_t
};

DECLARE_SETTING_ENUM(IcebergMetadataLogLevel)

enum class MergeTreePartExportFileAlreadyExistsPolicy : uint8_t
{
skip,
error,
overwrite,
};

DECLARE_SETTING_ENUM(MergeTreePartExportFileAlreadyExistsPolicy)

}
5 changes: 5 additions & 0 deletions src/Functions/generateSnowflakeID.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,11 @@ uint64_t generateSnowflakeID()
return fromSnowflakeId(snowflake_id);
}

std::string generateSnowflakeIDString()
{
return std::to_string(generateSnowflakeID());
}

class FunctionGenerateSnowflakeID : public IFunction
{
public:
Expand Down
2 changes: 2 additions & 0 deletions src/Functions/generateSnowflakeID.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@ namespace DB

uint64_t generateSnowflakeID();

std::string generateSnowflakeIDString();

}
6 changes: 6 additions & 0 deletions src/Interpreters/InterpreterAlterQuery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,12 @@ AccessRightsElements InterpreterAlterQuery::getRequiredAccessForCommand(const AS
required_access.emplace_back(AccessType::INSERT, command.to_database, command.to_table);
break;
}
case ASTAlterCommand::EXPORT_PARTITION:
{
required_access.emplace_back(AccessType::ALTER_EXPORT_PARTITION, database, table);
required_access.emplace_back(AccessType::INSERT, command.to_database, command.to_table);
break;
}
case ASTAlterCommand::FETCH_PARTITION:
{
required_access.emplace_back(AccessType::ALTER_FETCH_PARTITION, database, table);
Expand Down
86 changes: 86 additions & 0 deletions src/Interpreters/InterpreterKillQueryQuery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <DataTypes/DataTypeString.h>
#include <Columns/ColumnsNumber.h>
#include <DataTypes/DataTypesNumber.h>
#include <Core/ServerSettings.h>
#include <Processors/Sources/SourceFromSingleChunk.h>
#include <Processors/ISource.h>
#include <Processors/Executors/PullingPipelineExecutor.h>
Expand All @@ -37,11 +38,17 @@ namespace Setting
extern const SettingsUInt64 max_parser_depth;
}

namespace ServerSetting
{
extern const ServerSettingsBool enable_experimental_export_merge_tree_partition_feature;
}

namespace ErrorCodes
{
extern const int LOGICAL_ERROR;
extern const int ACCESS_DENIED;
extern const int NOT_IMPLEMENTED;
extern const int SUPPORT_IS_DISABLED;
}


Expand Down Expand Up @@ -250,6 +257,82 @@ BlockIO InterpreterKillQueryQuery::execute()

break;
}
case ASTKillQueryQuery::Type::ExportPartition:
{
if (!getContext()->getServerSettings()[ServerSetting::enable_experimental_export_merge_tree_partition_feature])
{
throw Exception(ErrorCodes::SUPPORT_IS_DISABLED,
"Exporting merge tree partition is experimental. Set the server setting `enable_experimental_export_merge_tree_partition_feature` to enable it");
}

Block exports_block = getSelectResult(
"source_database, source_table, transaction_id, destination_database, destination_table, partition_id",
"system.replicated_partition_exports");
if (exports_block.empty())
return res_io;

const ColumnString & src_db_col = typeid_cast<const ColumnString &>(*exports_block.getByName("source_database").column);
const ColumnString & src_table_col = typeid_cast<const ColumnString &>(*exports_block.getByName("source_table").column);
const ColumnString & dst_db_col = typeid_cast<const ColumnString &>(*exports_block.getByName("destination_database").column);
const ColumnString & dst_table_col = typeid_cast<const ColumnString &>(*exports_block.getByName("destination_table").column);
const ColumnString & tx_col = typeid_cast<const ColumnString &>(*exports_block.getByName("transaction_id").column);

auto header = exports_block.cloneEmpty();
header.insert(0, {ColumnString::create(), std::make_shared<DataTypeString>(), "kill_status"});

MutableColumns res_columns = header.cloneEmptyColumns();
AccessRightsElements required_access_rights;
auto access = getContext()->getAccess();
bool access_denied = false;

for (size_t i = 0; i < exports_block.rows(); ++i)
{
const auto src_database = src_db_col.getDataAt(i).toString();
const auto src_table = src_table_col.getDataAt(i).toString();
const auto dst_database = dst_db_col.getDataAt(i).toView();
const auto dst_table = dst_table_col.getDataAt(i).toView();

const auto table_id = StorageID{src_database, src_table};
const auto transaction_id = tx_col.getDataAt(i).toString();

CancellationCode code = CancellationCode::Unknown;
if (!query.test)
{
auto storage = DatabaseCatalog::instance().tryGetTable(table_id, getContext());
if (!storage)
code = CancellationCode::NotFound;
else
{
ASTAlterCommand alter_command{};
alter_command.type = ASTAlterCommand::EXPORT_PARTITION;
alter_command.move_destination_type = DataDestinationType::TABLE;
alter_command.from_database = src_database;
alter_command.from_table = src_table;
alter_command.to_database = dst_database;
alter_command.to_table = dst_table;

required_access_rights = InterpreterAlterQuery::getRequiredAccessForCommand(
alter_command, table_id.database_name, table_id.table_name);
if (!access->isGranted(required_access_rights))
{
access_denied = true;
continue;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IDK, maybe code = CancelCannotBeSent, so the it appears in the res_columns ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is how it is implemented for all other kill operations. I don't know for sure which one makes more sense, but I would vote for keeping it consistent with the existing behavior

}
code = storage->killExportPartition(transaction_id);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is somewhat weird: KILL EXPORT PARTITION may fail to kill some of the exports, but will report an error only if it failed to kill ALL of the exports.

Do we assume that if user can't kill an export then it is not supposed to know about it in the first place?

}
}

insertResultRow(i, code, exports_block, header, res_columns);
}

if (res_columns[0]->empty() && access_denied)
throw Exception(ErrorCodes::ACCESS_DENIED, "Not allowed to kill export partition. "
"To execute this query, it's necessary to have the grant {}", required_access_rights.toString());

res_io.pipeline = QueryPipeline(Pipe(std::make_shared<SourceFromSingleChunk>(std::make_shared<const Block>(header.cloneWithColumns(std::move(res_columns))))));

break;
}
case ASTKillQueryQuery::Type::Mutation:
{
Block mutations_block = getSelectResult("database, table, mutation_id, command", "system.mutations");
Expand Down Expand Up @@ -462,6 +545,9 @@ AccessRightsElements InterpreterKillQueryQuery::getRequiredAccessForDDLOnCluster
| AccessType::ALTER_MATERIALIZE_COLUMN
| AccessType::ALTER_MATERIALIZE_TTL
);
/// todo arthur think about this
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks ok, rest of the KILL operations require ALTER_ access right, or what is it you need to think about?

else if (query.type == ASTKillQueryQuery::Type::ExportPartition)
required_access.emplace_back(AccessType::ALTER_EXPORT_PARTITION);
return required_access;
}

Expand Down
11 changes: 11 additions & 0 deletions src/Parsers/ASTAlterQuery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,17 @@ void ASTAlterCommand::formatImpl(WriteBuffer & ostr, const FormatSettings & sett
}

}
else if (type == ASTAlterCommand::EXPORT_PARTITION)
{
ostr << "EXPORT PARTITION ";
partition->format(ostr, settings, state, frame);
ostr << " TO TABLE ";
if (!to_database.empty())
{
ostr << backQuoteIfNeed(to_database) << ".";
}
ostr << backQuoteIfNeed(to_table);
}
else if (type == ASTAlterCommand::REPLACE_PARTITION)
{
ostr << (replace ? "REPLACE" : "ATTACH") << " PARTITION "
Expand Down
1 change: 1 addition & 0 deletions src/Parsers/ASTAlterQuery.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ class ASTAlterCommand : public IAST
UNFREEZE_PARTITION,
UNFREEZE_ALL,
EXPORT_PART,
EXPORT_PARTITION,

DELETE,
UPDATE,
Expand Down
3 changes: 3 additions & 0 deletions src/Parsers/ASTKillQueryQuery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ void ASTKillQueryQuery::formatQueryImpl(WriteBuffer & ostr, const FormatSettings
case Type::Transaction:
ostr << "TRANSACTION";
break;
case Type::ExportPartition:
ostr << "EXPORT PARTITION";
break;
}

formatOnCluster(ostr, settings);
Expand Down
1 change: 1 addition & 0 deletions src/Parsers/ASTKillQueryQuery.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class ASTKillQueryQuery : public ASTQueryWithOutput, public ASTQueryWithOnCluste
{
Query, /// KILL QUERY
Mutation, /// KILL MUTATION
ExportPartition, /// KILL EXPORT_PARTITION
PartMoveToShard, /// KILL PART_MOVE_TO_SHARD
Transaction, /// KILL TRANSACTION
};
Expand Down
1 change: 1 addition & 0 deletions src/Parsers/CommonParsers.h
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,7 @@ namespace DB
MR_MACROS(MOVE_PART, "MOVE PART") \
MR_MACROS(MOVE_PARTITION, "MOVE PARTITION") \
MR_MACROS(EXPORT_PART, "EXPORT PART") \
MR_MACROS(EXPORT_PARTITION, "EXPORT PARTITION") \
MR_MACROS(MOVE, "MOVE") \
MR_MACROS(MS, "MS") \
MR_MACROS(MUTATION, "MUTATION") \
Expand Down
17 changes: 17 additions & 0 deletions src/Parsers/ParserAlterQuery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ bool ParserAlterCommand::parseImpl(Pos & pos, ASTPtr & node, Expected & expected
ParserKeyword s_move_partition(Keyword::MOVE_PARTITION);
ParserKeyword s_move_part(Keyword::MOVE_PART);
ParserKeyword s_export_part(Keyword::EXPORT_PART);
ParserKeyword s_export_partition(Keyword::EXPORT_PARTITION);
ParserKeyword s_drop_detached_partition(Keyword::DROP_DETACHED_PARTITION);
ParserKeyword s_drop_detached_part(Keyword::DROP_DETACHED_PART);
ParserKeyword s_fetch_partition(Keyword::FETCH_PARTITION);
Expand Down Expand Up @@ -553,6 +554,22 @@ bool ParserAlterCommand::parseImpl(Pos & pos, ASTPtr & node, Expected & expected
return false;
command->move_destination_type = DataDestinationType::TABLE;
}
else if (s_export_partition.ignore(pos, expected))
{
if (!parser_partition.parse(pos, command_partition, expected))
return false;

command->type = ASTAlterCommand::EXPORT_PARTITION;

if (!s_to_table.ignore(pos, expected))
{
return false;
}

if (!parseDatabaseAndTableName(pos, expected, command->to_database, command->to_table))
return false;
command->move_destination_type = DataDestinationType::TABLE;
}
else if (s_move_partition.ignore(pos, expected))
{
if (!parser_partition.parse(pos, command_partition, expected))
Expand Down
3 changes: 3 additions & 0 deletions src/Parsers/ParserKillQueryQuery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ bool ParserKillQueryQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expect
ParserKeyword p_kill{Keyword::KILL};
ParserKeyword p_query{Keyword::QUERY};
ParserKeyword p_mutation{Keyword::MUTATION};
ParserKeyword p_export_partition{Keyword::EXPORT_PARTITION};
ParserKeyword p_part_move_to_shard{Keyword::PART_MOVE_TO_SHARD};
ParserKeyword p_transaction{Keyword::TRANSACTION};
ParserKeyword p_on{Keyword::ON};
Expand All @@ -33,6 +34,8 @@ bool ParserKillQueryQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expect
query->type = ASTKillQueryQuery::Type::Query;
else if (p_mutation.ignore(pos, expected))
query->type = ASTKillQueryQuery::Type::Mutation;
else if (p_export_partition.ignore(pos, expected))
query->type = ASTKillQueryQuery::Type::ExportPartition;
else if (p_part_move_to_shard.ignore(pos, expected))
query->type = ASTKillQueryQuery::Type::PartMoveToShard;
else if (p_transaction.ignore(pos, expected))
Expand Down
Loading
Loading