1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
#include "catch.hpp"
#include "duckdb/common/file_system.hpp"
#include "duckdb/storage/buffer_manager.hpp"
#include "duckdb/storage/storage_info.hpp"
#include "test_helpers.hpp"
#include "duckdb/main/client_context.hpp"
#include "duckdb/main/config.hpp"
#include "test_config.hpp"
using namespace duckdb;
using namespace std;
TEST_CASE("Test in-memory database scanning from tables", "[memoryleak]") {
if (!TestConfiguration::TestMemoryLeaks()) {
return;
}
DuckDB db;
Connection con(db);
REQUIRE_NO_FAIL(
con.Query("create table t1 as select i, concat('thisisalongstring', i) s from range(1000000) t(i);"));
while (true) {
REQUIRE_NO_FAIL(con.Query("SELECT * FROM t1"));
}
}
TEST_CASE("Rollback create table", "[memoryleak]") {
if (!TestConfiguration::TestMemoryLeaks()) {
return;
}
DBConfig config;
config.options.load_extensions = false;
DuckDB db(":memory:", &config);
Connection con(db);
while (true) {
REQUIRE_NO_FAIL(con.Query("BEGIN"));
REQUIRE_NO_FAIL(con.Query("CREATE TABLE t2(i INT);"));
REQUIRE_NO_FAIL(con.Query("ROLLBACK"));
}
}
TEST_CASE("DB temporary table insertion", "[memoryleak]") {
if (!TestConfiguration::TestMemoryLeaks()) {
return;
}
auto db_path = TestCreatePath("memory_leak_temp_table.db");
DeleteDatabase(db_path);
DuckDB db(db_path);
{
Connection con(db);
REQUIRE_NO_FAIL(con.Query("SET threads=8;"));
REQUIRE_NO_FAIL(con.Query("SET preserve_insertion_order=false;"));
REQUIRE_NO_FAIL(con.Query("SET force_compression='uncompressed';"));
REQUIRE_NO_FAIL(con.Query("create table t1 as select i from range(1000000) t(i);"));
}
Connection con(db);
while (true) {
REQUIRE_NO_FAIL(con.Query("BEGIN"));
REQUIRE_NO_FAIL(con.Query("CREATE OR REPLACE TEMPORARY TABLE t2(i int)"));
REQUIRE_NO_FAIL(con.Query("insert into t2 SELECT * FROM t1;"));
REQUIRE_NO_FAIL(con.Query("ROLLBACk"));
}
}
// FIXME: broken right now - we need to flush/merge deletes to fix this
// TEST_CASE("Insert and delete data repeatedly", "[memoryleak]") {
// if (!TestMemoryLeaks()) {
// return;
// }
// DBConfig config;
// config.options.load_extensions = false;
// DuckDB db(":memory:", &config);
// Connection con(db);
// REQUIRE_NO_FAIL(con.Query("CREATE TABLE t1(i INT);"));
// while (true) {
// REQUIRE_NO_FAIL(con.Query("INSERT INTO t1 SELECT * FROM range(100000)"));
// REQUIRE_NO_FAIL(con.Query("DELETE FROM t1"));
// }
//}
|