File: test_capi_to_decimal.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 (64 lines) | stat: -rw-r--r-- 2,173 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
#include "capi_tester.hpp"
#include "duckdb.h"

using namespace duckdb;
using namespace std;

int64_t Difference(int64_t left, int64_t right) {
	return abs(left - right);
}

void CompareDuckDBDecimal(const duckdb_decimal &left, const duckdb_decimal &right) {
	REQUIRE(left.scale == right.scale);
	REQUIRE(left.width == right.width);
	REQUIRE(left.value.upper == right.value.upper);
}

void TestFetchAsDecimal(CAPITester &tester, string query, string type_cast) {
	auto result = tester.Query(StringUtil::Format(query, type_cast));
	REQUIRE_NO_FAIL(*result);

	// (ANYTHING BUT DECIMAL) -> DECIMAL results in 0
	duckdb_decimal expected_res;
	expected_res.scale = 0;
	expected_res.width = 0;
	expected_res.value.lower = 0;
	expected_res.value.upper = 0;

	auto converted_res = result->Fetch<duckdb_decimal>(0, 0);
	CompareDuckDBDecimal(expected_res, converted_res);
}

TEST_CASE("Test CAPI duckdb_decimal_as_properties", "[capi]") {
	CAPITester tester;

	// open the database in in-memory mode
	REQUIRE(tester.OpenDatabase(nullptr));

	//! From DOUBLE
	TestFetchAsDecimal(tester, "SELECT CAST(123.45678 AS %s)", "DOUBLE");
	//! From FLOAT
	TestFetchAsDecimal(tester, "SELECT CAST(123.45678 AS %s)", "FLOAT");
	//! From HUGEINT
	TestFetchAsDecimal(tester, "SELECT CAST(123124 AS %s)", "HUGEINT");
	//! From UHUGEINT
	TestFetchAsDecimal(tester, "SELECT CAST(123124 AS %s)", "UHUGEINT");
	//! From BIGINT
	TestFetchAsDecimal(tester, "SELECT CAST(123124 AS %s)", "BIGINT");
	//! From UBIGINT
	TestFetchAsDecimal(tester, "SELECT CAST(123124 AS %s)", "UBIGINT");
	//! From INTEGER
	TestFetchAsDecimal(tester, "SELECT CAST(123124 AS %s)", "INTEGER");
	//! From UINTEGER
	TestFetchAsDecimal(tester, "SELECT CAST(123124 AS %s)", "UINTEGER");
	//! From SMALLINT
	TestFetchAsDecimal(tester, "SELECT CAST(12312 AS %s)", "SMALLINT");
	//! From USMALLINT
	TestFetchAsDecimal(tester, "SELECT CAST(12312 AS %s)", "USMALLINT");
	//! From TINYINT
	TestFetchAsDecimal(tester, "SELECT CAST(-123 AS %s)", "TINYINT");
	//! From UTINYINT
	TestFetchAsDecimal(tester, "SELECT CAST(255 AS %s)", "UTINYINT");
	//! From VARCHAR
	TestFetchAsDecimal(tester, "SELECT CAST(123124.2342 AS %s)", "VARCHAR");
}