You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-30 19:23:07 +03:00
MCOL-1482 An UPDATE operation on a non-ColumnStore table involving a
cross-engine join with a ColumnStore table errors out. ColumnStore cannot directly update a foreign table. We detect whether a multi-table UPDATE operation is performed on a foreign table, if so, do not create the select_handler and let the server execute the UPDATE operation instead.
This commit is contained in:
@ -498,6 +498,13 @@ create_columnstore_derived_handler(THD* thd, TABLE_LIST *table_ptr)
|
||||
if (thd->stmt_arena && thd->stmt_arena->is_stmt_execute())
|
||||
return handler;
|
||||
|
||||
// MCOL-1482 Disable derived_handler if the multi-table update
|
||||
// statement contains a non-columnstore table.
|
||||
if (cal_impl_if::isUpdateHasForeignTable(thd))
|
||||
{
|
||||
return handler;
|
||||
}
|
||||
|
||||
SELECT_LEX_UNIT *unit = table_ptr->derived;
|
||||
SELECT_LEX *sl = unit->first_select();
|
||||
|
||||
@ -754,6 +761,14 @@ create_columnstore_select_handler(THD* thd, SELECT_LEX* select_lex)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// MCOL-1482 Disable select_handler for a multi-table update
|
||||
// with a non-columnstore table as the target table of the update
|
||||
// operation.
|
||||
if (cal_impl_if::isForeignTableUpdate(thd))
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// Flag to indicate if this is a prepared statement
|
||||
bool isPS = thd->stmt_arena && thd->stmt_arena->is_stmt_execute();
|
||||
|
||||
|
Reference in New Issue
Block a user