duckdb 0.7.2-dev717.0 → 0.7.2-dev865.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.gyp +2 -0
- package/lib/duckdb.d.ts +12 -1
- package/lib/duckdb.js +19 -0
- package/package.json +1 -1
- package/src/duckdb/extension/json/include/json_common.hpp +1 -0
- package/src/duckdb/extension/json/include/json_functions.hpp +1 -0
- package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
- package/src/duckdb/extension/json/json_functions.cpp +1 -0
- package/src/duckdb/extension/json/json_scan.cpp +2 -2
- package/src/duckdb/extension/json/json_serializer.cpp +217 -0
- package/src/duckdb/src/catalog/catalog.cpp +21 -5
- package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
- package/src/duckdb/src/common/enums/join_type.cpp +3 -22
- package/src/duckdb/src/common/exception.cpp +2 -2
- package/src/duckdb/src/common/serializer/enum_serializer.cpp +1172 -0
- package/src/duckdb/src/common/types/value.cpp +117 -93
- package/src/duckdb/src/common/types/vector.cpp +140 -1
- package/src/duckdb/src/common/types.cpp +166 -89
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +5 -8
- package/src/duckdb/src/function/scalar/date/date_part.cpp +2 -2
- package/src/duckdb/src/function/scalar/date/date_trunc.cpp +2 -2
- package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
- package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +4 -0
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +8 -8
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
- package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
- package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
- package/src/duckdb/src/function/table/arrow_conversion.cpp +7 -1
- package/src/duckdb/src/function/table/table_scan.cpp +1 -1
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/exception.hpp +40 -9
- package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +12 -0
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +2 -31
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types.hpp +8 -2
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +11 -1
- package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +9 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +9 -52
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +6 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -3
- package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +4 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +6 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +5 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +37 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +8 -1
- package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +271 -26
- package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
- package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
- package/src/duckdb/src/optimizer/filter_combiner.cpp +1 -1
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +3 -3
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +2 -2
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +1 -1
- package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
- package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
- package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
- package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/star_expression.cpp +20 -0
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
- package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
- package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
- package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
- package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
- package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
- package/src/duckdb/src/parser/query_node.cpp +50 -0
- package/src/duckdb/src/parser/result_modifier.cpp +78 -0
- package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
- package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
- package/src/duckdb/src/parser/tableref/joinref.cpp +25 -0
- package/src/duckdb/src/parser/tableref/pivotref.cpp +53 -0
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
- package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
- package/src/duckdb/src/parser/tableref.cpp +46 -0
- package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +22 -4
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +1 -1
- package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
- package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +3 -11
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +6 -0
- package/src/duckdb/src/storage/checkpoint_manager.cpp +1 -0
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +2 -2
- package/src/duckdb/src/storage/data_table.cpp +1 -1
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +145 -83
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
- package/src/duckdb/src/storage/storage_info.cpp +1 -1
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +1 -6
- package/src/duckdb/src/storage/table/column_data.cpp +29 -35
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +5 -5
- package/src/duckdb/src/storage/table/column_segment.cpp +8 -7
- package/src/duckdb/src/storage/table/list_column_data.cpp +2 -1
- package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
- package/src/duckdb/src/storage/table/row_group.cpp +9 -9
- package/src/duckdb/src/storage/table/row_group_collection.cpp +82 -66
- package/src/duckdb/src/storage/table/scan_state.cpp +22 -3
- package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -0
- package/src/duckdb/src/storage/table/struct_column_data.cpp +1 -0
- package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +11780 -11512
- package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
- package/src/duckdb/third_party/re2/re2/re2.h +2 -0
- package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
- package/src/duckdb/ub_src_common_serializer.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
- package/src/duckdb/ub_src_parser.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +2 -0
- package/src/duckdb/ub_src_storage_table.cpp +0 -2
- package/src/utils.cpp +12 -0
- package/test/extension.test.ts +44 -26
- package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -30,6 +30,9 @@
|
|
30
30
|
#include "duckdb/function/cast/cast_function_set.hpp"
|
31
31
|
#include "duckdb/main/error_manager.hpp"
|
32
32
|
|
33
|
+
#include "duckdb/common/serializer/format_serializer.hpp"
|
34
|
+
#include "duckdb/common/serializer/format_deserializer.hpp"
|
35
|
+
|
33
36
|
#include <utility>
|
34
37
|
#include <cmath>
|
35
38
|
|
@@ -1230,99 +1233,6 @@ interval_t Value::GetValueUnsafe() const {
|
|
1230
1233
|
return value_.interval;
|
1231
1234
|
}
|
1232
1235
|
|
1233
|
-
//===--------------------------------------------------------------------===//
|
1234
|
-
// GetReferenceUnsafe
|
1235
|
-
//===--------------------------------------------------------------------===//
|
1236
|
-
template <>
|
1237
|
-
int8_t &Value::GetReferenceUnsafe() {
|
1238
|
-
D_ASSERT(type_.InternalType() == PhysicalType::INT8 || type_.InternalType() == PhysicalType::BOOL);
|
1239
|
-
return value_.tinyint;
|
1240
|
-
}
|
1241
|
-
|
1242
|
-
template <>
|
1243
|
-
int16_t &Value::GetReferenceUnsafe() {
|
1244
|
-
D_ASSERT(type_.InternalType() == PhysicalType::INT16);
|
1245
|
-
return value_.smallint;
|
1246
|
-
}
|
1247
|
-
|
1248
|
-
template <>
|
1249
|
-
int32_t &Value::GetReferenceUnsafe() {
|
1250
|
-
D_ASSERT(type_.InternalType() == PhysicalType::INT32);
|
1251
|
-
return value_.integer;
|
1252
|
-
}
|
1253
|
-
|
1254
|
-
template <>
|
1255
|
-
int64_t &Value::GetReferenceUnsafe() {
|
1256
|
-
D_ASSERT(type_.InternalType() == PhysicalType::INT64);
|
1257
|
-
return value_.bigint;
|
1258
|
-
}
|
1259
|
-
|
1260
|
-
template <>
|
1261
|
-
hugeint_t &Value::GetReferenceUnsafe() {
|
1262
|
-
D_ASSERT(type_.InternalType() == PhysicalType::INT128);
|
1263
|
-
return value_.hugeint;
|
1264
|
-
}
|
1265
|
-
|
1266
|
-
template <>
|
1267
|
-
uint8_t &Value::GetReferenceUnsafe() {
|
1268
|
-
D_ASSERT(type_.InternalType() == PhysicalType::UINT8);
|
1269
|
-
return value_.utinyint;
|
1270
|
-
}
|
1271
|
-
|
1272
|
-
template <>
|
1273
|
-
uint16_t &Value::GetReferenceUnsafe() {
|
1274
|
-
D_ASSERT(type_.InternalType() == PhysicalType::UINT16);
|
1275
|
-
return value_.usmallint;
|
1276
|
-
}
|
1277
|
-
|
1278
|
-
template <>
|
1279
|
-
uint32_t &Value::GetReferenceUnsafe() {
|
1280
|
-
D_ASSERT(type_.InternalType() == PhysicalType::UINT32);
|
1281
|
-
return value_.uinteger;
|
1282
|
-
}
|
1283
|
-
|
1284
|
-
template <>
|
1285
|
-
uint64_t &Value::GetReferenceUnsafe() {
|
1286
|
-
D_ASSERT(type_.InternalType() == PhysicalType::UINT64);
|
1287
|
-
return value_.ubigint;
|
1288
|
-
}
|
1289
|
-
|
1290
|
-
template <>
|
1291
|
-
float &Value::GetReferenceUnsafe() {
|
1292
|
-
D_ASSERT(type_.InternalType() == PhysicalType::FLOAT);
|
1293
|
-
return value_.float_;
|
1294
|
-
}
|
1295
|
-
|
1296
|
-
template <>
|
1297
|
-
double &Value::GetReferenceUnsafe() {
|
1298
|
-
D_ASSERT(type_.InternalType() == PhysicalType::DOUBLE);
|
1299
|
-
return value_.double_;
|
1300
|
-
}
|
1301
|
-
|
1302
|
-
template <>
|
1303
|
-
date_t &Value::GetReferenceUnsafe() {
|
1304
|
-
D_ASSERT(type_.InternalType() == PhysicalType::INT32);
|
1305
|
-
return value_.date;
|
1306
|
-
}
|
1307
|
-
|
1308
|
-
template <>
|
1309
|
-
dtime_t &Value::GetReferenceUnsafe() {
|
1310
|
-
D_ASSERT(type_.InternalType() == PhysicalType::INT64);
|
1311
|
-
return value_.time;
|
1312
|
-
}
|
1313
|
-
|
1314
|
-
template <>
|
1315
|
-
timestamp_t &Value::GetReferenceUnsafe() {
|
1316
|
-
D_ASSERT(type_.InternalType() == PhysicalType::INT64);
|
1317
|
-
return value_.timestamp;
|
1318
|
-
}
|
1319
|
-
|
1320
|
-
template <>
|
1321
|
-
interval_t &Value::GetReferenceUnsafe() {
|
1322
|
-
D_ASSERT(type_.InternalType() == PhysicalType::INTERVAL);
|
1323
|
-
return value_.interval;
|
1324
|
-
}
|
1325
|
-
|
1326
1236
|
//===--------------------------------------------------------------------===//
|
1327
1237
|
// Hash
|
1328
1238
|
//===--------------------------------------------------------------------===//
|
@@ -1800,6 +1710,120 @@ Value Value::Deserialize(Deserializer &main_source) {
|
|
1800
1710
|
return new_value;
|
1801
1711
|
}
|
1802
1712
|
|
1713
|
+
void Value::FormatSerialize(FormatSerializer &serializer) const {
|
1714
|
+
serializer.WriteProperty("type", type_);
|
1715
|
+
serializer.WriteProperty("is_null", is_null);
|
1716
|
+
if (!IsNull()) {
|
1717
|
+
switch (type_.InternalType()) {
|
1718
|
+
case PhysicalType::BOOL:
|
1719
|
+
serializer.WriteProperty("value", value_.boolean);
|
1720
|
+
break;
|
1721
|
+
case PhysicalType::INT8:
|
1722
|
+
serializer.WriteProperty("value", value_.tinyint);
|
1723
|
+
break;
|
1724
|
+
case PhysicalType::INT16:
|
1725
|
+
serializer.WriteProperty("value", value_.smallint);
|
1726
|
+
break;
|
1727
|
+
case PhysicalType::INT32:
|
1728
|
+
serializer.WriteProperty("value", value_.integer);
|
1729
|
+
break;
|
1730
|
+
case PhysicalType::INT64:
|
1731
|
+
serializer.WriteProperty("value", value_.bigint);
|
1732
|
+
break;
|
1733
|
+
case PhysicalType::UINT8:
|
1734
|
+
serializer.WriteProperty("value", value_.utinyint);
|
1735
|
+
break;
|
1736
|
+
case PhysicalType::UINT16:
|
1737
|
+
serializer.WriteProperty("value", value_.usmallint);
|
1738
|
+
break;
|
1739
|
+
case PhysicalType::UINT32:
|
1740
|
+
serializer.WriteProperty("value", value_.uinteger);
|
1741
|
+
break;
|
1742
|
+
case PhysicalType::UINT64:
|
1743
|
+
serializer.WriteProperty("value", value_.ubigint);
|
1744
|
+
break;
|
1745
|
+
case PhysicalType::INT128:
|
1746
|
+
serializer.WriteProperty("value", value_.hugeint);
|
1747
|
+
break;
|
1748
|
+
case PhysicalType::FLOAT:
|
1749
|
+
serializer.WriteProperty("value", value_.float_);
|
1750
|
+
break;
|
1751
|
+
case PhysicalType::DOUBLE:
|
1752
|
+
serializer.WriteProperty("value", value_.double_);
|
1753
|
+
break;
|
1754
|
+
case PhysicalType::INTERVAL:
|
1755
|
+
serializer.WriteProperty("value", value_.interval);
|
1756
|
+
break;
|
1757
|
+
case PhysicalType::VARCHAR:
|
1758
|
+
serializer.WriteProperty("value", StringValue::Get(*this));
|
1759
|
+
break;
|
1760
|
+
default: {
|
1761
|
+
Vector v(*this);
|
1762
|
+
v.FormatSerialize(serializer, 1);
|
1763
|
+
break;
|
1764
|
+
}
|
1765
|
+
}
|
1766
|
+
}
|
1767
|
+
}
|
1768
|
+
|
1769
|
+
Value Value::FormatDeserialize(FormatDeserializer &deserializer) {
|
1770
|
+
auto type = deserializer.ReadProperty<LogicalType>("type");
|
1771
|
+
auto is_null = deserializer.ReadProperty<bool>("is_null");
|
1772
|
+
Value new_value = Value(type);
|
1773
|
+
if (is_null) {
|
1774
|
+
return new_value;
|
1775
|
+
}
|
1776
|
+
new_value.is_null = false;
|
1777
|
+
switch (type.InternalType()) {
|
1778
|
+
case PhysicalType::BOOL:
|
1779
|
+
new_value.value_.boolean = deserializer.ReadProperty<bool>("value");
|
1780
|
+
break;
|
1781
|
+
case PhysicalType::UINT8:
|
1782
|
+
new_value.value_.utinyint = deserializer.ReadProperty<uint8_t>("value");
|
1783
|
+
break;
|
1784
|
+
case PhysicalType::INT8:
|
1785
|
+
new_value.value_.tinyint = deserializer.ReadProperty<int8_t>("value");
|
1786
|
+
break;
|
1787
|
+
case PhysicalType::UINT16:
|
1788
|
+
new_value.value_.usmallint = deserializer.ReadProperty<uint16_t>("value");
|
1789
|
+
break;
|
1790
|
+
case PhysicalType::INT16:
|
1791
|
+
new_value.value_.smallint = deserializer.ReadProperty<int16_t>("value");
|
1792
|
+
break;
|
1793
|
+
case PhysicalType::UINT32:
|
1794
|
+
new_value.value_.uinteger = deserializer.ReadProperty<uint32_t>("value");
|
1795
|
+
break;
|
1796
|
+
case PhysicalType::INT32:
|
1797
|
+
new_value.value_.integer = deserializer.ReadProperty<int32_t>("value");
|
1798
|
+
break;
|
1799
|
+
case PhysicalType::UINT64:
|
1800
|
+
new_value.value_.ubigint = deserializer.ReadProperty<uint64_t>("value");
|
1801
|
+
break;
|
1802
|
+
case PhysicalType::INT64:
|
1803
|
+
new_value.value_.bigint = deserializer.ReadProperty<int64_t>("value");
|
1804
|
+
break;
|
1805
|
+
case PhysicalType::FLOAT:
|
1806
|
+
new_value.value_.float_ = deserializer.ReadProperty<float>("value");
|
1807
|
+
break;
|
1808
|
+
case PhysicalType::DOUBLE:
|
1809
|
+
new_value.value_.double_ = deserializer.ReadProperty<double>("value");
|
1810
|
+
break;
|
1811
|
+
case PhysicalType::INTERVAL:
|
1812
|
+
new_value.value_.interval = deserializer.ReadProperty<interval_t>("value");
|
1813
|
+
break;
|
1814
|
+
case PhysicalType::VARCHAR:
|
1815
|
+
new_value.value_info_ = make_shared<StringValueInfo>(deserializer.ReadProperty<string>("value"));
|
1816
|
+
break;
|
1817
|
+
default: {
|
1818
|
+
Vector v(type);
|
1819
|
+
v.FormatDeserialize(deserializer, 1);
|
1820
|
+
new_value = v.GetValue(0);
|
1821
|
+
break;
|
1822
|
+
}
|
1823
|
+
}
|
1824
|
+
return new_value;
|
1825
|
+
}
|
1826
|
+
|
1803
1827
|
void Value::Print() const {
|
1804
1828
|
Printer::Print(ToString());
|
1805
1829
|
}
|
@@ -18,6 +18,9 @@
|
|
18
18
|
#include "duckdb/common/fsst.hpp"
|
19
19
|
#include "fsst.h"
|
20
20
|
|
21
|
+
#include "duckdb/common/serializer/format_serializer.hpp"
|
22
|
+
#include "duckdb/common/serializer/format_deserializer.hpp"
|
23
|
+
|
21
24
|
#include <cstring> // strlen() on Solaris
|
22
25
|
|
23
26
|
namespace duckdb {
|
@@ -241,7 +244,8 @@ struct DataArrays {
|
|
241
244
|
idx_t type_size;
|
242
245
|
bool is_nested;
|
243
246
|
DataArrays(Vector &vec, data_ptr_t data, VectorBuffer *buffer, idx_t type_size, bool is_nested)
|
244
|
-
: vec(vec), data(data), buffer(buffer), type_size(type_size), is_nested(is_nested) {
|
247
|
+
: vec(vec), data(data), buffer(buffer), type_size(type_size), is_nested(is_nested) {
|
248
|
+
}
|
245
249
|
};
|
246
250
|
|
247
251
|
void FindChildren(std::vector<DataArrays> &to_resize, VectorBuffer &auxiliary) {
|
@@ -962,6 +966,141 @@ void Vector::Serialize(idx_t count, Serializer &serializer) {
|
|
962
966
|
}
|
963
967
|
}
|
964
968
|
|
969
|
+
void Vector::FormatSerialize(FormatSerializer &serializer, idx_t count) {
|
970
|
+
auto &type = GetType();
|
971
|
+
|
972
|
+
UnifiedVectorFormat vdata;
|
973
|
+
ToUnifiedFormat(count, vdata);
|
974
|
+
|
975
|
+
const auto write_validity = (count > 0) && !vdata.validity.AllValid();
|
976
|
+
serializer.WriteProperty("has_validity", write_validity);
|
977
|
+
if (write_validity) {
|
978
|
+
ValidityMask flat_mask(count);
|
979
|
+
for (idx_t i = 0; i < count; ++i) {
|
980
|
+
auto row_idx = vdata.sel->get_index(i);
|
981
|
+
flat_mask.Set(i, vdata.validity.RowIsValid(row_idx));
|
982
|
+
}
|
983
|
+
serializer.WriteProperty("validity_mask", (const_data_ptr_t)flat_mask.GetData(),
|
984
|
+
flat_mask.ValidityMaskSize(count));
|
985
|
+
}
|
986
|
+
if (TypeIsConstantSize(type.InternalType())) {
|
987
|
+
// constant size type: simple copy
|
988
|
+
idx_t write_size = GetTypeIdSize(type.InternalType()) * count;
|
989
|
+
auto ptr = unique_ptr<data_t[]>(new data_t[write_size]);
|
990
|
+
VectorOperations::WriteToStorage(*this, count, ptr.get());
|
991
|
+
serializer.WriteProperty("data", write_size);
|
992
|
+
} else {
|
993
|
+
switch (type.InternalType()) {
|
994
|
+
case PhysicalType::VARCHAR: {
|
995
|
+
auto strings = (string_t *)vdata.data;
|
996
|
+
for (idx_t i = 0; i < count; i++) {
|
997
|
+
auto idx = vdata.sel->get_index(i);
|
998
|
+
auto source = !vdata.validity.RowIsValid(idx) ? NullValue<string_t>() : strings[idx];
|
999
|
+
string_t str = string_t(source.GetDataUnsafe(), source.GetSize());
|
1000
|
+
serializer.WriteProperty("data", str);
|
1001
|
+
}
|
1002
|
+
break;
|
1003
|
+
}
|
1004
|
+
case PhysicalType::STRUCT: {
|
1005
|
+
Flatten(count);
|
1006
|
+
auto &entries = StructVector::GetEntries(*this);
|
1007
|
+
for (auto &entry : entries) {
|
1008
|
+
entry->FormatSerialize(serializer, count);
|
1009
|
+
}
|
1010
|
+
break;
|
1011
|
+
}
|
1012
|
+
case PhysicalType::LIST: {
|
1013
|
+
auto &child = ListVector::GetEntry(*this);
|
1014
|
+
auto list_size = ListVector::GetListSize(*this);
|
1015
|
+
|
1016
|
+
// serialize the list entries in a flat array
|
1017
|
+
auto data = unique_ptr<list_entry_t[]>(new list_entry_t[count]);
|
1018
|
+
auto source_array = (list_entry_t *)vdata.data;
|
1019
|
+
for (idx_t i = 0; i < count; i++) {
|
1020
|
+
auto idx = vdata.sel->get_index(i);
|
1021
|
+
auto source = source_array[idx];
|
1022
|
+
data[i].offset = source.offset;
|
1023
|
+
data[i].length = source.length;
|
1024
|
+
}
|
1025
|
+
|
1026
|
+
// write the list size
|
1027
|
+
serializer.WriteProperty("list_size", list_size);
|
1028
|
+
serializer.WriteProperty("data", (data_ptr_t)data.get(), count * sizeof(list_entry_t));
|
1029
|
+
child.FormatSerialize(serializer, list_size);
|
1030
|
+
break;
|
1031
|
+
}
|
1032
|
+
default:
|
1033
|
+
throw InternalException("Unimplemented variable width type for Vector::Serialize!");
|
1034
|
+
}
|
1035
|
+
}
|
1036
|
+
}
|
1037
|
+
|
1038
|
+
void Vector::FormatDeserialize(FormatDeserializer &deserializer, idx_t count) {
|
1039
|
+
/*
|
1040
|
+
auto &type = GetType();
|
1041
|
+
|
1042
|
+
auto &validity = FlatVector::Validity(*this);
|
1043
|
+
validity.Reset();
|
1044
|
+
const auto has_validity = deserializer.ReadProperty<bool>("has_validity");
|
1045
|
+
if (has_validity) {
|
1046
|
+
validity.Initialize(count);
|
1047
|
+
source.ReadData((data_ptr_t)validity.GetData(), validity.ValidityMaskSize(count));
|
1048
|
+
}
|
1049
|
+
|
1050
|
+
if (TypeIsConstantSize(type.InternalType())) {
|
1051
|
+
// constant size type: read fixed amount of data from
|
1052
|
+
auto column_size = GetTypeIdSize(type.InternalType()) * count;
|
1053
|
+
auto ptr = unique_ptr<data_t[]>(new data_t[column_size]);
|
1054
|
+
source.ReadData(ptr.get(), column_size);
|
1055
|
+
|
1056
|
+
VectorOperations::ReadFromStorage(ptr.get(), count, *this);
|
1057
|
+
} else {
|
1058
|
+
switch (type.InternalType()) {
|
1059
|
+
case PhysicalType::VARCHAR: {
|
1060
|
+
auto strings = FlatVector::GetData<string_t>(*this);
|
1061
|
+
for (idx_t i = 0; i < count; i++) {
|
1062
|
+
// read the strings
|
1063
|
+
auto str = source.Read<string>();
|
1064
|
+
// now add the string to the StringHeap of the vector
|
1065
|
+
// and write the pointer into the vector
|
1066
|
+
if (validity.RowIsValid(i)) {
|
1067
|
+
strings[i] = StringVector::AddStringOrBlob(*this, str);
|
1068
|
+
}
|
1069
|
+
}
|
1070
|
+
break;
|
1071
|
+
}
|
1072
|
+
case PhysicalType::STRUCT: {
|
1073
|
+
auto &entries = StructVector::GetEntries(*this);
|
1074
|
+
for (auto &entry : entries) {
|
1075
|
+
entry->FormatDeserialize(deserializer, count);
|
1076
|
+
}
|
1077
|
+
break;
|
1078
|
+
}
|
1079
|
+
case PhysicalType::LIST: {
|
1080
|
+
// read the list size
|
1081
|
+
auto list_size = deserializer.ReadProperty<idx_t>("list_size");
|
1082
|
+
ListVector::Reserve(*this, list_size);
|
1083
|
+
ListVector::SetListSize(*this, list_size);
|
1084
|
+
|
1085
|
+
// read the list entry
|
1086
|
+
auto list_entries = FlatVector::GetData(*this);
|
1087
|
+
source.ReadData(list_entries, count * sizeof(list_entry_t));
|
1088
|
+
|
1089
|
+
// deserialize the child vector
|
1090
|
+
auto &child = ListVector::GetEntry(*this);
|
1091
|
+
child.Deserialize(list_size, source);
|
1092
|
+
|
1093
|
+
break;
|
1094
|
+
}
|
1095
|
+
default:
|
1096
|
+
throw InternalException("Unimplemented variable width type for Vector::Deserialize!");
|
1097
|
+
}
|
1098
|
+
}
|
1099
|
+
*/
|
1100
|
+
|
1101
|
+
throw NotImplementedException("TODO: Implement deserialization for DuckDB Vectors");
|
1102
|
+
}
|
1103
|
+
|
965
1104
|
void Vector::Deserialize(idx_t count, Deserializer &source) {
|
966
1105
|
auto &type = GetType();
|
967
1106
|
|