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
|
#include "catch.hpp"
#include "duckdb/main/appender.hpp"
#include "test_helpers.hpp"
#include <vector>
using namespace duckdb;
using namespace std;
TEST_CASE("Test appender with lists", "[appender]") {
duckdb::unique_ptr<QueryResult> result;
DuckDB db(nullptr);
Connection con(db);
REQUIRE_NO_FAIL(con.Query("CREATE TABLE lists(i INTEGER[])"));
// append a value to the table
Appender appender(con, "lists");
auto list_value = Value::LIST(LogicalType::INTEGER, {Value::INTEGER(3)});
auto empty_list_value = Value::LIST(LogicalType::INTEGER, duckdb::vector<Value>());
appender.AppendRow(list_value);
appender.AppendRow(empty_list_value);
appender.Close();
// we can select the value now
result = con.Query("SELECT * FROM lists");
REQUIRE(CHECK_COLUMN(result, 0, {list_value, empty_list_value}));
}
TEST_CASE("Test appender with nested lists", "[appender]") {
duckdb::unique_ptr<QueryResult> result;
DuckDB db(nullptr);
Connection con(db);
REQUIRE_NO_FAIL(con.Query("CREATE TABLE lists(i INTEGER[][])"));
// append a value to the table
Appender appender(con, "lists");
auto int_list_type = LogicalType::LIST(LogicalType::INTEGER);
auto nested_int_list_type = LogicalType::LIST(int_list_type);
auto list_value =
Value::LIST(int_list_type, {Value::LIST(LogicalType::INTEGER, {Value::INTEGER(1)}),
Value::LIST(LogicalType::INTEGER, {Value::INTEGER(2), Value::INTEGER(3)})});
auto empty_list_value = Value::LIST(int_list_type, duckdb::vector<Value>());
auto null_list_value = Value(nested_int_list_type);
appender.AppendRow(list_value);
appender.AppendRow(empty_list_value);
appender.AppendRow(null_list_value);
appender.Close();
// we can select the value now
result = con.Query("SELECT * FROM lists");
REQUIRE(CHECK_COLUMN(result, 0, {list_value, empty_list_value, null_list_value}));
}
|