File: test_temporary_tables.cpp

package info (click to toggle)
duckdb 1.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 299,196 kB
  • sloc: cpp: 865,414; ansic: 57,292; python: 18,871; sql: 12,663; lisp: 11,751; yacc: 7,412; lex: 1,682; sh: 747; makefile: 558
file content (79 lines) | stat: -rw-r--r-- 2,397 bytes parent folder | download | duplicates (3)
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"));
//	}
//}