diff --git a/storage/duckdb/ha_duckdb.cc b/storage/duckdb/ha_duckdb.cc index 4242378ecc0b2..8423cf653f510 100644 --- a/storage/duckdb/ha_duckdb.cc +++ b/storage/duckdb/ha_duckdb.cc @@ -102,6 +102,15 @@ static int duckdb_prepare(handlerton *hton, THD *thd, bool all) return 0; } +#if MYSQL_VERSION_ID >= 110800 +static int duckdb_recover(XID *, uint) +#else +static int duckdb_recover(handlerton *, XID *, uint) +#endif +{ + return 0; +} + static void push_duckdb_query_error(const std::string &err) { if (err.find("Parser Error") != std::string::npos || @@ -231,6 +240,7 @@ static int duckdb_init_func(void *p) duckdb_hton->create= duckdb_create_handler; duckdb_hton->flags= HTON_TEMPORARY_NOT_SUPPORTED | HTON_NO_PARTITION; duckdb_hton->prepare= duckdb_prepare; + duckdb_hton->recover= duckdb_recover; duckdb_hton->commit= duckdb_commit; duckdb_hton->rollback= duckdb_rollback; duckdb_hton->close_connection= duckdb_close_connection; diff --git a/storage/duckdb/mysql-test/duckdb/r/mdev_40818.result b/storage/duckdb/mysql-test/duckdb/r/mdev_40818.result new file mode 100644 index 0000000000000..79393cab4d1cb --- /dev/null +++ b/storage/duckdb/mysql-test/duckdb/r/mdev_40818.result @@ -0,0 +1,6 @@ +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=DuckDB; +INSERT INTO t1 VALUES (1); +SELECT * FROM t1; +id +1 +DROP TABLE t1; diff --git a/storage/duckdb/mysql-test/duckdb/t/mdev_40818.test b/storage/duckdb/mysql-test/duckdb/t/mdev_40818.test new file mode 100644 index 0000000000000..aa40f536b5101 --- /dev/null +++ b/storage/duckdb/mysql-test/duckdb/t/mdev_40818.test @@ -0,0 +1,12 @@ +--source ../include/have_duckdb.inc +--source include/have_log_bin.inc +--disable_warnings + +# +# MDEV-40818 INSERT into ENGINE=DuckDB crashes when binary logging is enabled +# + +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=DuckDB; +INSERT INTO t1 VALUES (1); +SELECT * FROM t1; +DROP TABLE t1;