duckdb 0.5.1-dev13.0 → 0.5.1-dev25.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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "duckdb",
3
3
  "main": "./lib/duckdb.js",
4
- "version": "0.5.1-dev13.0",
4
+ "version": "0.5.1-dev25.0",
5
5
  "description": "DuckDB node.js API",
6
6
  "gypfile": true,
7
7
  "dependencies": {
package/src/duckdb.cpp CHANGED
@@ -151925,6 +151925,7 @@ unique_ptr<NodeStatistics> StatisticsPropagator::PropagateStatistics(LogicalGet
151925
151925
 
151926
151926
 
151927
151927
 
151928
+
151928
151929
  namespace duckdb {
151929
151930
 
151930
151931
  void StatisticsPropagator::PropagateStatistics(LogicalComparisonJoin &join, unique_ptr<LogicalOperator> *node_ptr) {
@@ -151954,10 +151955,15 @@ void StatisticsPropagator::PropagateStatistics(LogicalComparisonJoin &join, uniq
151954
151955
  // semi or inner join on false; entire node can be pruned
151955
151956
  ReplaceWithEmptyResult(*node_ptr);
151956
151957
  return;
151957
- case JoinType::ANTI:
151958
- // anti join: replace entire join with LHS
151959
- *node_ptr = move(join.children[0]);
151958
+ case JoinType::ANTI: {
151959
+ // when the right child has data, return the left child
151960
+ // when the right child has no data, return an empty set
151961
+ auto limit = make_unique<LogicalLimit>(1, 0, nullptr, nullptr);
151962
+ limit->AddChild(move(join.children[1]));
151963
+ auto cross_product = LogicalCrossProduct::Create(move(join.children[0]), move(limit));
151964
+ *node_ptr = move(cross_product);
151960
151965
  return;
151966
+ }
151961
151967
  case JoinType::LEFT:
151962
151968
  // anti/left outer join: replace right side with empty node
151963
151969
  ReplaceWithEmptyResult(join.children[1]);
@@ -151985,10 +151991,15 @@ void StatisticsPropagator::PropagateStatistics(LogicalComparisonJoin &join, uniq
151985
151991
  } else {
151986
151992
  // this is the only condition and it is always true: all conditions are true
151987
151993
  switch (join.join_type) {
151988
- case JoinType::SEMI:
151989
- // semi join on true: replace entire join with LHS
151990
- *node_ptr = move(join.children[0]);
151994
+ case JoinType::SEMI: {
151995
+ // when the right child has data, return the left child
151996
+ // when the right child has no data, return an empty set
151997
+ auto limit = make_unique<LogicalLimit>(1, 0, nullptr, nullptr);
151998
+ limit->AddChild(move(join.children[1]));
151999
+ auto cross_product = LogicalCrossProduct::Create(move(join.children[0]), move(limit));
152000
+ *node_ptr = move(cross_product);
151991
152001
  return;
152002
+ }
151992
152003
  case JoinType::INNER:
151993
152004
  case JoinType::LEFT:
151994
152005
  case JoinType::RIGHT:
@@ -152105,6 +152116,7 @@ unique_ptr<NodeStatistics> StatisticsPropagator::PropagateStatistics(LogicalJoin
152105
152116
  // then propagate into the join conditions
152106
152117
  switch (join.type) {
152107
152118
  case LogicalOperatorType::LOGICAL_COMPARISON_JOIN:
152119
+ case LogicalOperatorType::LOGICAL_DELIM_JOIN:
152108
152120
  PropagateStatistics((LogicalComparisonJoin &)join, node_ptr);
152109
152121
  break;
152110
152122
  case LogicalOperatorType::LOGICAL_ANY_JOIN:
@@ -181189,7 +181201,20 @@ BoundStatement Binder::Bind(VacuumStatement &stmt) {
181189
181201
  auto &get = (LogicalGet &)*ref->get;
181190
181202
  columns.insert(columns.end(), get.names.begin(), get.names.end());
181191
181203
  }
181204
+
181205
+ case_insensitive_set_t column_name_set;
181206
+ vector<string> non_generated_column_names;
181192
181207
  for (auto &col_name : columns) {
181208
+ if (column_name_set.count(col_name) > 0) {
181209
+ throw BinderException("Vacuum the same column twice(same name in column name list)");
181210
+ }
181211
+ column_name_set.insert(col_name);
181212
+ auto &col = ref->table->GetColumn(col_name);
181213
+ // ignore generated column
181214
+ if (col.Generated()) {
181215
+ continue;
181216
+ }
181217
+ non_generated_column_names.push_back(col_name);
181193
181218
  ColumnRefExpression colref(col_name, ref->table->name);
181194
181219
  auto result = bind_context.BindColumn(colref, 0);
181195
181220
  if (result.HasError()) {
@@ -181197,17 +181222,29 @@ BoundStatement Binder::Bind(VacuumStatement &stmt) {
181197
181222
  }
181198
181223
  select_list.push_back(move(result.expression));
181199
181224
  }
181200
- auto table_scan = CreatePlan(*ref);
181201
- D_ASSERT(table_scan->type == LogicalOperatorType::LOGICAL_GET);
181202
- auto &get = (LogicalGet &)*table_scan;
181203
- for (idx_t i = 0; i < get.column_ids.size(); i++) {
181204
- stmt.info->column_id_map[i] = get.column_ids[i];
181205
- }
181225
+ stmt.info->columns = move(non_generated_column_names);
181226
+ if (!select_list.empty()) {
181227
+ auto table_scan = CreatePlan(*ref);
181228
+ D_ASSERT(table_scan->type == LogicalOperatorType::LOGICAL_GET);
181206
181229
 
181207
- auto projection = make_unique<LogicalProjection>(GenerateTableIndex(), move(select_list));
181208
- projection->children.push_back(move(table_scan));
181230
+ auto &get = (LogicalGet &)*table_scan;
181209
181231
 
181210
- root = move(projection);
181232
+ D_ASSERT(select_list.size() == get.column_ids.size());
181233
+ D_ASSERT(stmt.info->columns.size() == get.column_ids.size());
181234
+ for (idx_t i = 0; i < get.column_ids.size(); i++) {
181235
+ stmt.info->column_id_map[i] = ref->table->columns[get.column_ids[i]].StorageOid();
181236
+ }
181237
+
181238
+ auto projection = make_unique<LogicalProjection>(GenerateTableIndex(), move(select_list));
181239
+ projection->children.push_back(move(table_scan));
181240
+
181241
+ root = move(projection);
181242
+ } else {
181243
+ // eg. CREATE TABLE test (x AS (1));
181244
+ // ANALYZE test;
181245
+ // Make it not a SINK so it doesn't have to do anything
181246
+ stmt.info->has_table = false;
181247
+ }
181211
181248
  }
181212
181249
  auto vacuum = make_unique<LogicalSimple>(LogicalOperatorType::LOGICAL_VACUUM, move(stmt.info));
181213
181250
  if (root) {
package/src/duckdb.hpp CHANGED
@@ -11,8 +11,8 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
11
11
  #pragma once
12
12
  #define DUCKDB_AMALGAMATION 1
13
13
  #define DUCKDB_AMALGAMATION_EXTENDED 1
14
- #define DUCKDB_SOURCE_ID "ee6470b68"
15
- #define DUCKDB_VERSION "v0.5.1-dev13"
14
+ #define DUCKDB_SOURCE_ID "7ebad2075"
15
+ #define DUCKDB_VERSION "v0.5.1-dev25"
16
16
  //===----------------------------------------------------------------------===//
17
17
  // DuckDB
18
18
  //