duckdb 0.7.2-dev16.0 → 0.7.2-dev314.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/package.json +1 -1
- package/src/duckdb/extension/icu/icu-extension.cpp +2 -0
- package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
- package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +5 -6
- package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
- package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
- package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
- package/src/duckdb/extension/parquet/parquet-extension.cpp +11 -2
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
- package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
- package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
- package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
- package/src/duckdb/src/common/types/bit.cpp +95 -58
- package/src/duckdb/src/common/types/value.cpp +149 -53
- package/src/duckdb/src/common/types/vector.cpp +13 -10
- package/src/duckdb/src/execution/column_binding_resolver.cpp +6 -0
- package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +1 -1
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +2 -3
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +32 -6
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +15 -15
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +18 -12
- package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
- package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
- package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +254 -0
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +2 -4
- package/src/duckdb/src/function/aggregate/distributive/sum.cpp +11 -16
- package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +16 -5
- package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
- package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
- package/src/duckdb/src/function/scalar/bit/bitstring.cpp +99 -0
- package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_part.cpp +17 -25
- package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
- package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
- package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +3 -8
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_value.cpp +5 -9
- package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
- package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
- package/src/duckdb/src/function/scalar/math/numeric.cpp +14 -17
- package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
- package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
- package/src/duckdb/src/function/scalar/operators/multiply.cpp +0 -6
- package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
- package/src/duckdb/src/function/scalar/string_functions.cpp +1 -0
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +4 -9
- package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +10 -13
- package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +5 -6
- package/src/duckdb/src/function/table/read_csv.cpp +9 -0
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/function/table_function.cpp +19 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
- package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +5 -1
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +2 -8
- package/src/duckdb/src/include/duckdb/common/types.hpp +1 -2
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +12 -3
- package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +12 -0
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +76 -0
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +28 -0
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +8 -0
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +5 -2
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
- package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +6 -6
- package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +157 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
- package/src/duckdb/src/include/duckdb.h +49 -1
- package/src/duckdb/src/include/duckdb.hpp +0 -1
- package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
- package/src/duckdb/src/main/capi/result-c.cpp +27 -1
- package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
- package/src/duckdb/src/main/client_context.cpp +8 -1
- package/src/duckdb/src/main/config.cpp +66 -1
- package/src/duckdb/src/main/database.cpp +10 -2
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +98 -67
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +16 -3
- package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
- package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
- package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
- package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
- package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +28 -31
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +4 -5
- package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +1 -1
- package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
- package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
- package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
- package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
- package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +8 -0
- package/src/duckdb/src/parser/query_node.cpp +1 -1
- package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
- package/src/duckdb/src/parser/tableref/pivotref.cpp +296 -0
- package/src/duckdb/src/parser/tableref.cpp +3 -0
- package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +150 -0
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +1 -1
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +4 -0
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +105 -0
- package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
- package/src/duckdb/src/parser/transformer.cpp +15 -3
- package/src/duckdb/src/planner/bind_context.cpp +16 -0
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +11 -3
- package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +0 -1
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +9 -0
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +365 -0
- package/src/duckdb/src/planner/binder.cpp +7 -1
- package/src/duckdb/src/planner/bound_result_modifier.cpp +1 -1
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
- package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
- package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
- package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
- package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +1 -4
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +4 -4
- package/src/duckdb/src/storage/compression/bitpacking.cpp +28 -24
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +43 -45
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +9 -10
- package/src/duckdb/src/storage/compression/patas.cpp +1 -1
- package/src/duckdb/src/storage/compression/rle.cpp +19 -15
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +5 -5
- package/src/duckdb/src/storage/data_table.cpp +4 -6
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +58 -3
- package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +4 -9
- package/src/duckdb/src/storage/statistics/list_stats.cpp +117 -0
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +529 -0
- package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
- package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
- package/src/duckdb/src/storage/statistics/struct_stats.cpp +131 -0
- package/src/duckdb/src/storage/storage_info.cpp +1 -1
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +3 -4
- package/src/duckdb/src/storage/table/column_data.cpp +16 -11
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +2 -3
- package/src/duckdb/src/storage/table/column_segment.cpp +6 -8
- package/src/duckdb/src/storage/table/list_column_data.cpp +39 -58
- package/src/duckdb/src/storage/table/row_group.cpp +24 -23
- package/src/duckdb/src/storage/table/row_group_collection.cpp +12 -12
- package/src/duckdb/src/storage/table/standard_column_data.cpp +6 -6
- package/src/duckdb/src/storage/table/struct_column_data.cpp +15 -16
- package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
- package/src/duckdb/src/storage/table/update_segment.cpp +10 -12
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +3 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +34 -1
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1020 -530
- package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +7 -0
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +23560 -22737
- package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
- package/src/duckdb/ub_src_main_capi.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
- package/src/duckdb/ub_src_parser_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +4 -6
- package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
- package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
- package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
- package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
- package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
- package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
- package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
- package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
- package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
@@ -40,6 +40,7 @@ struct ExtractStatementsWrapper {
|
|
40
40
|
|
41
41
|
struct PendingStatementWrapper {
|
42
42
|
unique_ptr<PendingQueryResult> statement;
|
43
|
+
bool allow_streaming;
|
43
44
|
};
|
44
45
|
|
45
46
|
struct ArrowResultWrapper {
|
@@ -56,6 +57,7 @@ struct AppenderWrapper {
|
|
56
57
|
enum class CAPIResultSetType : uint8_t {
|
57
58
|
CAPI_RESULT_TYPE_NONE = 0,
|
58
59
|
CAPI_RESULT_TYPE_MATERIALIZED,
|
60
|
+
CAPI_RESULT_TYPE_STREAMING,
|
59
61
|
CAPI_RESULT_TYPE_DEPRECATED
|
60
62
|
};
|
61
63
|
|
@@ -30,6 +30,7 @@
|
|
30
30
|
#include "duckdb/planner/operator_extension.hpp"
|
31
31
|
|
32
32
|
namespace duckdb {
|
33
|
+
class BufferPool;
|
33
34
|
class CastFunctionSet;
|
34
35
|
class ClientContext;
|
35
36
|
class ErrorManager;
|
@@ -186,6 +187,8 @@ public:
|
|
186
187
|
vector<std::unique_ptr<OperatorExtension>> operator_extensions;
|
187
188
|
//! Extensions made to storage
|
188
189
|
case_insensitive_map_t<std::unique_ptr<StorageExtension>> storage_extensions;
|
190
|
+
//! A buffer pool can be shared across multiple databases (if desired).
|
191
|
+
shared_ptr<BufferPool> buffer_pool;
|
189
192
|
|
190
193
|
public:
|
191
194
|
DUCKDB_API static DBConfig &GetConfig(ClientContext &context);
|
@@ -106,7 +106,7 @@ private:
|
|
106
106
|
//! If there are multiple equivalence sets, they are merged.
|
107
107
|
void AddToEquivalenceSets(FilterInfo *filter_info, vector<idx_t> matching_equivalent_sets);
|
108
108
|
|
109
|
-
TableFilterSet *GetTableFilters(LogicalOperator *op);
|
109
|
+
TableFilterSet *GetTableFilters(LogicalOperator *op, idx_t table_index);
|
110
110
|
|
111
111
|
void AddRelationTdom(FilterInfo *filter_info);
|
112
112
|
bool EmptyFilter(FilterInfo *filter_info);
|
@@ -115,7 +115,7 @@ private:
|
|
115
115
|
unique_ptr<BaseStatistics> base_stats);
|
116
116
|
idx_t InspectConjunctionOR(idx_t cardinality, idx_t column_index, ConjunctionOrFilter *fil,
|
117
117
|
unique_ptr<BaseStatistics> base_stats);
|
118
|
-
idx_t InspectTableFilters(idx_t cardinality, LogicalOperator *op, TableFilterSet *table_filters);
|
118
|
+
idx_t InspectTableFilters(idx_t cardinality, LogicalOperator *op, TableFilterSet *table_filters, idx_t table_index);
|
119
119
|
};
|
120
120
|
|
121
121
|
} // namespace duckdb
|
@@ -1,29 +1,29 @@
|
|
1
1
|
//===----------------------------------------------------------------------===//
|
2
2
|
// DuckDB
|
3
3
|
//
|
4
|
-
// duckdb/parser/parsed_data/
|
4
|
+
// duckdb/parser/parsed_data/alter_scalar_function_info.hpp
|
5
5
|
//
|
6
6
|
//
|
7
7
|
//===----------------------------------------------------------------------===//
|
8
8
|
|
9
9
|
#pragma once
|
10
10
|
|
11
|
-
#include "duckdb/parser/parsed_data/alter_info.hpp"
|
12
|
-
#include "duckdb/function/scalar_function.hpp"
|
13
11
|
#include "duckdb/function/function_set.hpp"
|
12
|
+
#include "duckdb/function/scalar_function.hpp"
|
13
|
+
#include "duckdb/parser/parsed_data/alter_info.hpp"
|
14
14
|
|
15
15
|
namespace duckdb {
|
16
16
|
|
17
17
|
//===--------------------------------------------------------------------===//
|
18
|
-
// Alter
|
18
|
+
// Alter Scalar Function
|
19
19
|
//===--------------------------------------------------------------------===//
|
20
|
-
enum class
|
20
|
+
enum class AlterScalarFunctionType : uint8_t { INVALID = 0, ADD_FUNCTION_OVERLOADS = 1 };
|
21
21
|
|
22
|
-
struct
|
23
|
-
|
24
|
-
virtual ~
|
22
|
+
struct AlterScalarFunctionInfo : public AlterInfo {
|
23
|
+
AlterScalarFunctionInfo(AlterScalarFunctionType type, AlterEntryData data);
|
24
|
+
virtual ~AlterScalarFunctionInfo() override;
|
25
25
|
|
26
|
-
|
26
|
+
AlterScalarFunctionType alter_scalar_function_type;
|
27
27
|
|
28
28
|
public:
|
29
29
|
CatalogType GetCatalogType() const override;
|
@@ -32,11 +32,11 @@ public:
|
|
32
32
|
};
|
33
33
|
|
34
34
|
//===--------------------------------------------------------------------===//
|
35
|
-
//
|
35
|
+
// AddScalarFunctionOverloadInfo
|
36
36
|
//===--------------------------------------------------------------------===//
|
37
|
-
struct
|
38
|
-
|
39
|
-
~
|
37
|
+
struct AddScalarFunctionOverloadInfo : public AlterScalarFunctionInfo {
|
38
|
+
AddScalarFunctionOverloadInfo(AlterEntryData data, ScalarFunctionSet new_overloads);
|
39
|
+
~AddScalarFunctionOverloadInfo() override;
|
40
40
|
|
41
41
|
ScalarFunctionSet new_overloads;
|
42
42
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
2
|
+
// DuckDB
|
3
|
+
//
|
4
|
+
// duckdb/parser/parsed_data/alter_scalar_function_info.hpp
|
5
|
+
//
|
6
|
+
//
|
7
|
+
//===----------------------------------------------------------------------===//
|
8
|
+
|
9
|
+
#pragma once
|
10
|
+
|
11
|
+
#include "duckdb/function/function_set.hpp"
|
12
|
+
#include "duckdb/function/table_function.hpp"
|
13
|
+
#include "duckdb/parser/parsed_data/alter_info.hpp"
|
14
|
+
|
15
|
+
namespace duckdb {
|
16
|
+
|
17
|
+
//===--------------------------------------------------------------------===//
|
18
|
+
// Alter Table Function
|
19
|
+
//===--------------------------------------------------------------------===//
|
20
|
+
enum class AlterTableFunctionType : uint8_t { INVALID = 0, ADD_FUNCTION_OVERLOADS = 1 };
|
21
|
+
|
22
|
+
struct AlterTableFunctionInfo : public AlterInfo {
|
23
|
+
AlterTableFunctionInfo(AlterTableFunctionType type, AlterEntryData data);
|
24
|
+
virtual ~AlterTableFunctionInfo() override;
|
25
|
+
|
26
|
+
AlterTableFunctionType alter_table_function_type;
|
27
|
+
|
28
|
+
public:
|
29
|
+
CatalogType GetCatalogType() const override;
|
30
|
+
void Serialize(FieldWriter &writer) const override;
|
31
|
+
static unique_ptr<AlterInfo> Deserialize(FieldReader &reader);
|
32
|
+
};
|
33
|
+
|
34
|
+
//===--------------------------------------------------------------------===//
|
35
|
+
// AddTableFunctionOverloadInfo
|
36
|
+
//===--------------------------------------------------------------------===//
|
37
|
+
struct AddTableFunctionOverloadInfo : public AlterTableFunctionInfo {
|
38
|
+
AddTableFunctionOverloadInfo(AlterEntryData data, TableFunctionSet new_overloads);
|
39
|
+
~AddTableFunctionOverloadInfo() override;
|
40
|
+
|
41
|
+
TableFunctionSet new_overloads;
|
42
|
+
|
43
|
+
public:
|
44
|
+
unique_ptr<AlterInfo> Copy() const override;
|
45
|
+
};
|
46
|
+
|
47
|
+
} // namespace duckdb
|
@@ -21,7 +21,8 @@ struct CreateTableFunctionInfo : public CreateFunctionInfo {
|
|
21
21
|
TableFunctionSet functions;
|
22
22
|
|
23
23
|
public:
|
24
|
-
DUCKDB_API unique_ptr<CreateInfo> Copy() const;
|
24
|
+
DUCKDB_API unique_ptr<CreateInfo> Copy() const override;
|
25
|
+
DUCKDB_API unique_ptr<AlterInfo> GetAlterInfo() const override;
|
25
26
|
};
|
26
27
|
|
27
28
|
} // namespace duckdb
|
@@ -13,6 +13,7 @@
|
|
13
13
|
#include "duckdb/parser/parsed_expression.hpp"
|
14
14
|
#include "duckdb/parser/result_modifier.hpp"
|
15
15
|
#include "duckdb/parser/common_table_expression_info.hpp"
|
16
|
+
#include "duckdb/common/case_insensitive_map.hpp"
|
16
17
|
|
17
18
|
namespace duckdb {
|
18
19
|
|
@@ -29,7 +30,7 @@ class CommonTableExpressionMap {
|
|
29
30
|
public:
|
30
31
|
CommonTableExpressionMap();
|
31
32
|
|
32
|
-
|
33
|
+
case_insensitive_map_t<unique_ptr<CommonTableExpressionInfo>> map;
|
33
34
|
|
34
35
|
public:
|
35
36
|
string ToString() const;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
2
|
+
// DuckDB
|
3
|
+
//
|
4
|
+
// duckdb/parser/statement/multi_statement.hpp
|
5
|
+
//
|
6
|
+
//
|
7
|
+
//===----------------------------------------------------------------------===//
|
8
|
+
|
9
|
+
#pragma once
|
10
|
+
|
11
|
+
#include "duckdb/parser/sql_statement.hpp"
|
12
|
+
|
13
|
+
namespace duckdb {
|
14
|
+
|
15
|
+
class MultiStatement : public SQLStatement {
|
16
|
+
public:
|
17
|
+
MultiStatement();
|
18
|
+
|
19
|
+
vector<unique_ptr<SQLStatement>> statements;
|
20
|
+
|
21
|
+
protected:
|
22
|
+
MultiStatement(const MultiStatement &other);
|
23
|
+
|
24
|
+
public:
|
25
|
+
unique_ptr<SQLStatement> Copy() const override;
|
26
|
+
};
|
27
|
+
|
28
|
+
} // namespace duckdb
|
@@ -2,5 +2,6 @@
|
|
2
2
|
#include "duckdb/parser/tableref/emptytableref.hpp"
|
3
3
|
#include "duckdb/parser/tableref/expressionlistref.hpp"
|
4
4
|
#include "duckdb/parser/tableref/joinref.hpp"
|
5
|
+
#include "duckdb/parser/tableref/pivotref.hpp"
|
5
6
|
#include "duckdb/parser/tableref/subqueryref.hpp"
|
6
7
|
#include "duckdb/parser/tableref/table_function_ref.hpp"
|
@@ -0,0 +1,76 @@
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
2
|
+
// DuckDB
|
3
|
+
//
|
4
|
+
// duckdb/parser/tableref/pivotref.hpp
|
5
|
+
//
|
6
|
+
//
|
7
|
+
//===----------------------------------------------------------------------===//
|
8
|
+
|
9
|
+
#pragma once
|
10
|
+
|
11
|
+
#include "duckdb/parser/tableref.hpp"
|
12
|
+
|
13
|
+
namespace duckdb {
|
14
|
+
|
15
|
+
struct PivotColumnEntry {
|
16
|
+
//! The set of values to match on
|
17
|
+
vector<Value> values;
|
18
|
+
//! The star expression (UNPIVOT only)
|
19
|
+
unique_ptr<ParsedExpression> star_expr;
|
20
|
+
//! The alias of the pivot column entry
|
21
|
+
string alias;
|
22
|
+
|
23
|
+
bool Equals(const PivotColumnEntry &other) const;
|
24
|
+
void Serialize(Serializer &serializer) const;
|
25
|
+
PivotColumnEntry Copy() const;
|
26
|
+
static PivotColumnEntry Deserialize(Deserializer &source);
|
27
|
+
};
|
28
|
+
|
29
|
+
struct PivotColumn {
|
30
|
+
//! The column names to (un)pivot
|
31
|
+
vector<string> names;
|
32
|
+
//! The set of values to pivot on
|
33
|
+
vector<PivotColumnEntry> entries;
|
34
|
+
//! The enum to read pivot values from (if any)
|
35
|
+
string pivot_enum;
|
36
|
+
|
37
|
+
string ToString() const;
|
38
|
+
bool Equals(const PivotColumn &other) const;
|
39
|
+
void Serialize(Serializer &serializer) const;
|
40
|
+
PivotColumn Copy() const;
|
41
|
+
static PivotColumn Deserialize(Deserializer &source);
|
42
|
+
};
|
43
|
+
|
44
|
+
//! Represents a PIVOT or UNPIVOT expression
|
45
|
+
class PivotRef : public TableRef {
|
46
|
+
public:
|
47
|
+
explicit PivotRef() : TableRef(TableReferenceType::PIVOT), include_nulls(false) {
|
48
|
+
}
|
49
|
+
|
50
|
+
//! The source table of the pivot
|
51
|
+
unique_ptr<TableRef> source;
|
52
|
+
//! The aggregates to compute over the pivot (PIVOT only)
|
53
|
+
vector<unique_ptr<ParsedExpression>> aggregates;
|
54
|
+
//! The names of the unpivot expressions (UNPIVOT only)
|
55
|
+
vector<string> unpivot_names;
|
56
|
+
//! The set of pivots
|
57
|
+
vector<PivotColumn> pivots;
|
58
|
+
//! The groups to pivot over. If none are specified all columns not included in the pivots/aggregate are chosen.
|
59
|
+
vector<string> groups;
|
60
|
+
//! Aliases for the column names
|
61
|
+
vector<string> column_name_alias;
|
62
|
+
//! Whether or not to include nulls in the result (UNPIVOT only)
|
63
|
+
bool include_nulls;
|
64
|
+
|
65
|
+
public:
|
66
|
+
string ToString() const override;
|
67
|
+
bool Equals(const TableRef *other_p) const override;
|
68
|
+
|
69
|
+
unique_ptr<TableRef> Copy() override;
|
70
|
+
|
71
|
+
//! Serializes a blob into a JoinRef
|
72
|
+
void Serialize(FieldWriter &serializer) const override;
|
73
|
+
//! Deserializes a blob back into a JoinRef
|
74
|
+
static unique_ptr<TableRef> Deserialize(FieldReader &source);
|
75
|
+
};
|
76
|
+
} // namespace duckdb
|
@@ -41,6 +41,7 @@ class SetVariableStatement;
|
|
41
41
|
class ResetVariableStatement;
|
42
42
|
class LoadStatement;
|
43
43
|
class LogicalPlanStatement;
|
44
|
+
class MultiStatement;
|
44
45
|
|
45
46
|
//===--------------------------------------------------------------------===//
|
46
47
|
// Query Node
|
@@ -94,6 +95,7 @@ class SubqueryRef;
|
|
94
95
|
class TableFunctionRef;
|
95
96
|
class EmptyTableRef;
|
96
97
|
class ExpressionListRef;
|
98
|
+
class PivotRef;
|
97
99
|
|
98
100
|
//===--------------------------------------------------------------------===//
|
99
101
|
// Other
|
@@ -32,15 +32,23 @@ struct CommonTableExpressionInfo;
|
|
32
32
|
struct GroupingExpressionMap;
|
33
33
|
class OnConflictInfo;
|
34
34
|
class UpdateSetInfo;
|
35
|
+
struct PivotColumn;
|
35
36
|
|
36
37
|
//! The transformer class is responsible for transforming the internal Postgres
|
37
38
|
//! parser representation into the DuckDB representation
|
38
39
|
class Transformer {
|
39
40
|
friend class StackChecker;
|
40
41
|
|
42
|
+
struct CreatePivotEntry {
|
43
|
+
string enum_name;
|
44
|
+
unique_ptr<SelectNode> base;
|
45
|
+
string column_name;
|
46
|
+
};
|
47
|
+
|
41
48
|
public:
|
42
49
|
explicit Transformer(idx_t max_expression_depth_p);
|
43
50
|
explicit Transformer(Transformer *parent);
|
51
|
+
~Transformer();
|
44
52
|
|
45
53
|
//! Transforms a Postgres parse tree into a set of SQL Statements
|
46
54
|
bool TransformParseTree(duckdb_libpgquery::PGList *tree, vector<unique_ptr<SQLStatement>> &statements);
|
@@ -59,6 +67,12 @@ private:
|
|
59
67
|
case_insensitive_map_t<idx_t> named_param_map;
|
60
68
|
//! Holds window expressions defined by name. We need those when transforming the expressions referring to them.
|
61
69
|
unordered_map<string, duckdb_libpgquery::PGWindowDef *> window_clauses;
|
70
|
+
//! The set of pivot entries to create
|
71
|
+
vector<unique_ptr<CreatePivotEntry>> pivot_entries;
|
72
|
+
//! Sets of stored CTEs, if any
|
73
|
+
vector<CommonTableExpressionMap *> stored_cte_map;
|
74
|
+
|
75
|
+
void Clear();
|
62
76
|
|
63
77
|
void SetParamCount(idx_t new_count) {
|
64
78
|
if (parent) {
|
@@ -91,6 +105,12 @@ private:
|
|
91
105
|
return parent ? parent->HasNamedParameters() : !named_param_map.empty();
|
92
106
|
}
|
93
107
|
|
108
|
+
void AddPivotEntry(string enum_name, unique_ptr<SelectNode> source, string column_name);
|
109
|
+
unique_ptr<SQLStatement> GenerateCreateEnumStmt(unique_ptr<CreatePivotEntry> entry);
|
110
|
+
bool HasPivotEntries();
|
111
|
+
idx_t PivotEntryCount();
|
112
|
+
void ExtractCTEsRecursive(CommonTableExpressionMap &cte_map);
|
113
|
+
|
94
114
|
private:
|
95
115
|
//! Transforms a Postgres statement into a single SQL statement
|
96
116
|
unique_ptr<SQLStatement> TransformStatement(duckdb_libpgquery::PGNode *stmt);
|
@@ -163,6 +183,10 @@ private:
|
|
163
183
|
unique_ptr<ExecuteStatement> TransformExecute(duckdb_libpgquery::PGNode *node);
|
164
184
|
unique_ptr<CallStatement> TransformCall(duckdb_libpgquery::PGNode *node);
|
165
185
|
unique_ptr<DropStatement> TransformDeallocate(duckdb_libpgquery::PGNode *node);
|
186
|
+
unique_ptr<QueryNode> TransformPivotStatement(duckdb_libpgquery::PGSelectStmt *stmt);
|
187
|
+
unique_ptr<SQLStatement> CreatePivotStatement(unique_ptr<SQLStatement> statement);
|
188
|
+
PivotColumn TransformPivotColumn(duckdb_libpgquery::PGPivot *pivot);
|
189
|
+
vector<PivotColumn> TransformPivotList(duckdb_libpgquery::PGList *list);
|
166
190
|
|
167
191
|
//===--------------------------------------------------------------------===//
|
168
192
|
// SetStatement Transform
|
@@ -179,6 +203,7 @@ private:
|
|
179
203
|
//===--------------------------------------------------------------------===//
|
180
204
|
//! Transform a Postgres duckdb_libpgquery::T_PGSelectStmt node into a QueryNode
|
181
205
|
unique_ptr<QueryNode> TransformSelectNode(duckdb_libpgquery::PGSelectStmt *node);
|
206
|
+
unique_ptr<QueryNode> TransformSelectInternal(duckdb_libpgquery::PGSelectStmt *node);
|
182
207
|
|
183
208
|
//===--------------------------------------------------------------------===//
|
184
209
|
// Expression Transform
|
@@ -256,6 +281,7 @@ private:
|
|
256
281
|
//===--------------------------------------------------------------------===//
|
257
282
|
OnCreateConflict TransformOnConflict(duckdb_libpgquery::PGOnCreateConflict conflict);
|
258
283
|
string TransformAlias(duckdb_libpgquery::PGAlias *root, vector<string> &column_name_alias);
|
284
|
+
vector<string> TransformStringList(duckdb_libpgquery::PGList *list);
|
259
285
|
void TransformCTE(duckdb_libpgquery::PGWithClause *de_with_clause, CommonTableExpressionMap &cte_map);
|
260
286
|
unique_ptr<SelectStatement> TransformRecursiveCTE(duckdb_libpgquery::PGCommonTableExpr *node,
|
261
287
|
CommonTableExpressionInfo &info);
|
@@ -276,6 +302,8 @@ private:
|
|
276
302
|
unique_ptr<TableRef> TransformRangeFunction(duckdb_libpgquery::PGRangeFunction *root);
|
277
303
|
//! Transform a Postgres join node into a TableRef
|
278
304
|
unique_ptr<TableRef> TransformJoin(duckdb_libpgquery::PGJoinExpr *root);
|
305
|
+
//! Transform a Postgres pivot node into a TableRef
|
306
|
+
unique_ptr<TableRef> TransformPivot(duckdb_libpgquery::PGPivotExpr *root);
|
279
307
|
//! Transform a table producing subquery into a TableRef
|
280
308
|
unique_ptr<TableRef> TransformRangeSubselect(duckdb_libpgquery::PGRangeSubselect *root);
|
281
309
|
//! Transform a VALUES list into a set of expressions
|
@@ -141,6 +141,8 @@ public:
|
|
141
141
|
|
142
142
|
//! Add all the bindings from a BindContext to this BindContext. The other BindContext is destroyed in the process.
|
143
143
|
void AddContext(BindContext other);
|
144
|
+
//! For semi and anti joins we remove the binding context of the right table after binding the condition.
|
145
|
+
void RemoveContext(vector<std::pair<string, duckdb::Binding *>> &other_bindings_list);
|
144
146
|
|
145
147
|
//! Gets a binding of the specified name. Returns a nullptr and sets the out_error if the binding could not be
|
146
148
|
//! found.
|
@@ -275,6 +275,12 @@ private:
|
|
275
275
|
unique_ptr<BoundTableRef> Bind(TableFunctionRef &ref);
|
276
276
|
unique_ptr<BoundTableRef> Bind(EmptyTableRef &ref);
|
277
277
|
unique_ptr<BoundTableRef> Bind(ExpressionListRef &ref);
|
278
|
+
unique_ptr<BoundTableRef> Bind(PivotRef &expr);
|
279
|
+
|
280
|
+
unique_ptr<SelectNode> BindPivot(PivotRef &expr, vector<unique_ptr<ParsedExpression>> all_columns);
|
281
|
+
unique_ptr<SelectNode> BindUnpivot(Binder &child_binder, PivotRef &expr,
|
282
|
+
vector<unique_ptr<ParsedExpression>> all_columns,
|
283
|
+
unique_ptr<ParsedExpression> &where_clause);
|
278
284
|
|
279
285
|
bool BindTableFunctionParameters(TableFunctionCatalogEntry &table_function,
|
280
286
|
vector<unique_ptr<ParsedExpression>> &expressions, vector<LogicalType> &arguments,
|
@@ -340,6 +346,8 @@ private:
|
|
340
346
|
void BindSchemaOrCatalog(string &catalog_name, string &schema_name);
|
341
347
|
SchemaCatalogEntry *BindCreateSchema(CreateInfo &info);
|
342
348
|
|
349
|
+
unique_ptr<BoundQueryNode> BindSelectNode(SelectNode &statement, unique_ptr<BoundTableRef> from_table);
|
350
|
+
|
343
351
|
public:
|
344
352
|
// This should really be a private constructor, but make_shared does not allow it...
|
345
353
|
// If you are thinking about calling this, you should probably call Binder::CreateBinder
|
@@ -17,6 +17,7 @@ namespace duckdb {
|
|
17
17
|
class BlockManager;
|
18
18
|
class BufferHandle;
|
19
19
|
class BufferManager;
|
20
|
+
class BufferPool;
|
20
21
|
class DatabaseInstance;
|
21
22
|
class FileBuffer;
|
22
23
|
|
@@ -55,6 +56,7 @@ class BlockHandle {
|
|
55
56
|
friend struct BufferEvictionNode;
|
56
57
|
friend class BufferHandle;
|
57
58
|
friend class BufferManager;
|
59
|
+
friend class BufferPool;
|
58
60
|
|
59
61
|
public:
|
60
62
|
BlockHandle(BlockManager &block_manager, block_id_t block_id);
|