duckdb 0.7.2-dev832.0 → 0.7.2-dev886.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.
Files changed (63) hide show
  1. package/package.json +1 -1
  2. package/src/duckdb/src/catalog/catalog.cpp +21 -5
  3. package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
  4. package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
  5. package/src/duckdb/src/common/box_renderer.cpp +109 -23
  6. package/src/duckdb/src/common/types/value.cpp +0 -93
  7. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  8. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +5 -8
  9. package/src/duckdb/src/function/scalar/date/date_part.cpp +2 -2
  10. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +2 -2
  11. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  12. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +4 -0
  13. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +8 -8
  14. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  15. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +3 -0
  16. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
  17. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
  18. package/src/duckdb/src/include/duckdb/common/types/value.hpp +0 -31
  19. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  20. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +9 -52
  21. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  22. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  23. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +6 -3
  24. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  25. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -3
  26. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +4 -1
  27. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +6 -3
  28. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +5 -3
  29. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +37 -0
  30. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +8 -1
  31. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +4 -3
  32. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +271 -26
  33. package/src/duckdb/src/optimizer/filter_pushdown.cpp +11 -7
  34. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +1 -10
  35. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +1 -1
  36. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  37. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  38. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +31 -6
  39. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +22 -4
  40. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +1 -1
  41. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +3 -11
  42. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +6 -0
  43. package/src/duckdb/src/storage/checkpoint_manager.cpp +1 -0
  44. package/src/duckdb/src/storage/compression/numeric_constant.cpp +2 -2
  45. package/src/duckdb/src/storage/data_table.cpp +1 -1
  46. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +145 -83
  47. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  48. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  49. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +1 -6
  50. package/src/duckdb/src/storage/table/column_data.cpp +29 -35
  51. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +5 -5
  52. package/src/duckdb/src/storage/table/column_segment.cpp +8 -7
  53. package/src/duckdb/src/storage/table/list_column_data.cpp +2 -1
  54. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  55. package/src/duckdb/src/storage/table/row_group.cpp +9 -9
  56. package/src/duckdb/src/storage/table/row_group_collection.cpp +82 -66
  57. package/src/duckdb/src/storage/table/scan_state.cpp +22 -3
  58. package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -0
  59. package/src/duckdb/src/storage/table/struct_column_data.cpp +1 -0
  60. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +11578 -11222
  61. package/src/duckdb/ub_src_storage_statistics.cpp +2 -0
  62. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  63. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -8,6 +8,8 @@
8
8
 
9
9
  #include "src/storage/statistics/numeric_stats.cpp"
10
10
 
11
+ #include "src/storage/statistics/numeric_stats_union.cpp"
12
+
11
13
  #include "src/storage/statistics/segment_statistics.cpp"
12
14
 
13
15
  #include "src/storage/statistics/string_stats.cpp"
@@ -14,8 +14,6 @@
14
14
 
15
15
  #include "src/storage/table/persistent_table_data.cpp"
16
16
 
17
- #include "src/storage/table/segment_tree.cpp"
18
-
19
17
  #include "src/storage/table/row_group.cpp"
20
18
 
21
19
  #include "src/storage/table/row_group_collection.cpp"
@@ -1,179 +0,0 @@
1
- #include "duckdb/storage/table/segment_tree.hpp"
2
- #include "duckdb/common/exception.hpp"
3
- #include "duckdb/common/string_util.hpp"
4
-
5
- namespace duckdb {
6
-
7
- SegmentLock SegmentTree::Lock() {
8
- return SegmentLock(node_lock);
9
- }
10
-
11
- bool SegmentTree::IsEmpty(SegmentLock &) {
12
- return nodes.empty();
13
- }
14
-
15
- SegmentBase *SegmentTree::GetRootSegment(SegmentLock &l) {
16
- return nodes.empty() ? nullptr : nodes[0].node.get();
17
- }
18
-
19
- vector<SegmentNode> SegmentTree::MoveSegments(SegmentLock &) {
20
- return std::move(nodes);
21
- }
22
-
23
- SegmentBase *SegmentTree::GetRootSegment() {
24
- auto l = Lock();
25
- return GetRootSegment(l);
26
- }
27
-
28
- SegmentBase *SegmentTree::GetSegmentByIndex(SegmentLock &, int64_t index) {
29
- if (index < 0) {
30
- index = nodes.size() + index;
31
- if (index < 0) {
32
- return nullptr;
33
- }
34
- return nodes[index].node.get();
35
- } else {
36
- if (idx_t(index) >= nodes.size()) {
37
- return nullptr;
38
- }
39
- return nodes[index].node.get();
40
- }
41
- }
42
- SegmentBase *SegmentTree::GetSegmentByIndex(int64_t index) {
43
- auto l = Lock();
44
- return GetSegmentByIndex(l, index);
45
- }
46
-
47
- SegmentBase *SegmentTree::GetLastSegment(SegmentLock &l) {
48
- if (nodes.empty()) {
49
- return nullptr;
50
- }
51
- return nodes.back().node.get();
52
- }
53
-
54
- SegmentBase *SegmentTree::GetLastSegment() {
55
- auto l = Lock();
56
- return GetLastSegment(l);
57
- }
58
-
59
- SegmentBase *SegmentTree::GetSegment(SegmentLock &l, idx_t row_number) {
60
- return nodes[GetSegmentIndex(l, row_number)].node.get();
61
- }
62
-
63
- SegmentBase *SegmentTree::GetSegment(idx_t row_number) {
64
- auto l = Lock();
65
- return GetSegment(l, row_number);
66
- }
67
-
68
- bool SegmentTree::TryGetSegmentIndex(SegmentLock &, idx_t row_number, idx_t &result) {
69
- if (nodes.empty()) {
70
- return false;
71
- }
72
- D_ASSERT(!nodes.empty());
73
- D_ASSERT(row_number >= nodes[0].row_start);
74
- D_ASSERT(row_number < nodes.back().row_start + nodes.back().node->count);
75
- idx_t lower = 0;
76
- idx_t upper = nodes.size() - 1;
77
- // binary search to find the node
78
- while (lower <= upper) {
79
- idx_t index = (lower + upper) / 2;
80
- D_ASSERT(index < nodes.size());
81
- auto &entry = nodes[index];
82
- D_ASSERT(entry.row_start == entry.node->start);
83
- if (row_number < entry.row_start) {
84
- upper = index - 1;
85
- } else if (row_number >= entry.row_start + entry.node->count) {
86
- lower = index + 1;
87
- } else {
88
- result = index;
89
- return true;
90
- }
91
- }
92
- return false;
93
- }
94
-
95
- idx_t SegmentTree::GetSegmentIndex(SegmentLock &l, idx_t row_number) {
96
- idx_t segment_index;
97
- if (TryGetSegmentIndex(l, row_number, segment_index)) {
98
- return segment_index;
99
- }
100
- string error;
101
- error = StringUtil::Format("Attempting to find row number \"%lld\" in %lld nodes\n", row_number, nodes.size());
102
- for (idx_t i = 0; i < nodes.size(); i++) {
103
- error +=
104
- StringUtil::Format("Node %lld: Start %lld, Count %lld", i, nodes[i].row_start, nodes[i].node->count.load());
105
- }
106
- throw InternalException("Could not find node in column segment tree!\n%s%s", error, Exception::GetStackTrace());
107
- }
108
-
109
- idx_t SegmentTree::GetSegmentIndex(idx_t row_number) {
110
- auto l = Lock();
111
- return GetSegmentIndex(l, row_number);
112
- }
113
-
114
- bool SegmentTree::HasSegment(SegmentLock &, SegmentBase *segment) {
115
- for (auto &node : nodes) {
116
- if (node.node.get() == segment) {
117
- return true;
118
- }
119
- }
120
- return false;
121
- }
122
-
123
- bool SegmentTree::HasSegment(SegmentBase *segment) {
124
- auto l = Lock();
125
- return HasSegment(l, segment);
126
- }
127
-
128
- void SegmentTree::AppendSegment(SegmentLock &, unique_ptr<SegmentBase> segment) {
129
- D_ASSERT(segment);
130
- // add the node to the list of nodes
131
- if (!nodes.empty()) {
132
- nodes.back().node->next = segment.get();
133
- }
134
- SegmentNode node;
135
- node.row_start = segment->start;
136
- node.node = std::move(segment);
137
- nodes.push_back(std::move(node));
138
- }
139
-
140
- void SegmentTree::AppendSegment(unique_ptr<SegmentBase> segment) {
141
- auto l = Lock();
142
- AppendSegment(l, std::move(segment));
143
- }
144
-
145
- void SegmentTree::EraseSegments(SegmentLock &, idx_t segment_start) {
146
- if (segment_start >= nodes.size() - 1) {
147
- return;
148
- }
149
- nodes.erase(nodes.begin() + segment_start + 1, nodes.end());
150
- }
151
-
152
- void SegmentTree::Replace(SegmentLock &, SegmentTree &other) {
153
- nodes = std::move(other.nodes);
154
- }
155
-
156
- void SegmentTree::Replace(SegmentTree &other) {
157
- auto l = Lock();
158
- Replace(l, other);
159
- }
160
-
161
- void SegmentTree::Verify(SegmentLock &) {
162
- #ifdef DEBUG
163
- idx_t base_start = nodes.empty() ? 0 : nodes[0].node->start;
164
- for (idx_t i = 0; i < nodes.size(); i++) {
165
- D_ASSERT(nodes[i].row_start == nodes[i].node->start);
166
- D_ASSERT(nodes[i].node->start == base_start);
167
- base_start += nodes[i].node->count;
168
- }
169
- #endif
170
- }
171
-
172
- void SegmentTree::Verify() {
173
- #ifdef DEBUG
174
- auto l = Lock();
175
- Verify(l);
176
- #endif
177
- }
178
-
179
- } // namespace duckdb