File: bulkupdate.cpp

package info (click to toggle)
duckdb 1.5.1-3
  • 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: 564
file content (86 lines) | stat: -rw-r--r-- 2,561 bytes parent folder | download | duplicates (4)
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
80
81
82
83
84
85
86
#include "benchmark_runner.hpp"
#include "duckdb_benchmark_macro.hpp"
#include "duckdb/main/appender.hpp"

#include <random>

using namespace duckdb;

#define GROUP_ROW_COUNT 1000000
#define GROUP_COUNT     5

DUCKDB_BENCHMARK(BulkUpdate, "[bulkupdate]")
int64_t sum = 0;
int64_t count = 0;
void Load(DuckDBBenchmarkState *state) override {
	state->conn.Query("CREATE TABLE integers(i INTEGER);");
	Appender appender(state->conn, "integers");
	// insert the elements into the database
	for (size_t i = 0; i < GROUP_ROW_COUNT; i++) {
		appender.BeginRow();
		appender.Append<int32_t>(i % GROUP_COUNT);
		appender.EndRow();

		sum += i % GROUP_COUNT;
		count++;
	}
}

void RunBenchmark(DuckDBBenchmarkState *state) override {
	state->conn.Query("BEGIN TRANSACTION");
	state->conn.Query("UPDATE integers SET i = i + 1");
	state->result = state->conn.Query("SELECT SUM(i) FROM integers");
	state->conn.Query("ROLLBACK");
}

string VerifyResult(QueryResult *result) override {
	auto &materialized = (MaterializedQueryResult &)*result;
	Value val = materialized.GetValue(0, 0);
	if (val != Value::BIGINT(sum + count)) {
		return string("Value " + val.ToString() + " does not match expected value " + std::to_string(sum + count));
	}
	return string();
}
string BenchmarkInfo() override {
	return "Run a bulk update followed by an aggregate";
}
FINISH_BENCHMARK(BulkUpdate)

DUCKDB_BENCHMARK(BulkDelete, "[bulkupdate]")
int64_t sum = 0;
int64_t count = 0;
void Load(DuckDBBenchmarkState *state) override {
	state->conn.Query("CREATE TABLE integers(i INTEGER);");
	Appender appender(state->conn, "integers");
	// insert the elements into the database
	for (size_t i = 0; i < GROUP_ROW_COUNT; i++) {
		appender.BeginRow();
		appender.Append<int32_t>(i % GROUP_COUNT);
		appender.EndRow();

		sum += i % GROUP_COUNT;
		if ((i % GROUP_COUNT) == 1) {
			count++;
		}
	}
}

void RunBenchmark(DuckDBBenchmarkState *state) override {
	state->conn.Query("BEGIN TRANSACTION");
	state->conn.Query("DELETE FROM integers WHERE i=1");
	state->result = state->conn.Query("SELECT SUM(i) FROM integers");
	state->conn.Query("ROLLBACK");
}

string VerifyResult(QueryResult *result) override {
	auto &materialized = (MaterializedQueryResult &)*result;
	Value val = materialized.GetValue(0, 0);
	if (val != Value::BIGINT(sum - count)) {
		return string("Value " + val.ToString() + " does not match expected value " + std::to_string(sum - count));
	}
	return string();
}
string BenchmarkInfo() override {
	return "Run a bulk delete followed by an aggregate";
}
FINISH_BENCHMARK(BulkDelete)