duckdb 0.5.2-dev2245.0 → 0.5.2-dev2256.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
@@ -2,7 +2,7 @@
2
2
  "name": "duckdb",
3
3
  "main": "./lib/duckdb.js",
4
4
  "types": "./lib/duckdb.d.ts",
5
- "version": "0.5.2-dev2245.0",
5
+ "version": "0.5.2-dev2256.0",
6
6
  "description": "DuckDB node.js API",
7
7
  "gypfile": true,
8
8
  "dependencies": {
package/src/duckdb.cpp CHANGED
@@ -9120,8 +9120,8 @@ void BoxRenderer::RenderRowCount(string row_count_str, string shown_str, const s
9120
9120
  }
9121
9121
  auto minimum_length = row_count_str.size() + column_count_str.size() + 6;
9122
9122
  bool render_rows_and_columns = total_length >= minimum_length &&
9123
- ((has_hidden_columns && row_count > 0) || (row_count > 1 && column_count > 1));
9124
- bool render_rows = total_length >= minimum_row_length && row_count != 1;
9123
+ ((has_hidden_columns && row_count > 0) || (row_count >= 10 && column_count > 1));
9124
+ bool render_rows = total_length >= minimum_row_length && (row_count == 0 || row_count >= 10);
9125
9125
  bool render_anything = true;
9126
9126
  if (!render_rows && !render_rows_and_columns) {
9127
9127
  render_anything = false;
@@ -81718,6 +81718,16 @@ bool ParallelCSVReader::SetPosition(DataChunk &insert_chunk) {
81718
81718
  if (buffer->buffer->IsCSVFileFirstBuffer() && start_buffer == position_buffer &&
81719
81719
  start_buffer == buffer->buffer->GetStart()) {
81720
81720
  // First buffer doesn't need any setting
81721
+ // Unless we have a header
81722
+ if (options.header && options.auto_detect) {
81723
+ for (; position_buffer < end_buffer; position_buffer++) {
81724
+ if (StringUtil::CharacterIsNewline((*buffer)[position_buffer])) {
81725
+ position_buffer++;
81726
+ return true;
81727
+ }
81728
+ }
81729
+ return false;
81730
+ }
81721
81731
  return true;
81722
81732
  }
81723
81733
 
@@ -81841,8 +81851,9 @@ normal : {
81841
81851
  goto add_value;
81842
81852
  } else if (StringUtil::CharacterIsNewline(c)) {
81843
81853
  // newline: add row
81844
- D_ASSERT(try_add_line || column == insert_chunk.ColumnCount() - 1);
81845
- goto add_row;
81854
+ if (column > 0 || try_add_line) {
81855
+ goto add_row;
81856
+ }
81846
81857
  }
81847
81858
  }
81848
81859
  if (!BufferRemainder()) {
@@ -82016,9 +82027,8 @@ final_state : {
82016
82027
  }
82017
82028
  // If this is the last buffer, we have to read the last value
82018
82029
  if (buffer->buffer->IsCSVFileLastBuffer() || (buffer->next_buffer->IsCSVFileLastBuffer())) {
82019
- if (column > 0 || position_buffer > start_buffer) {
82030
+ if (column > 0 || try_add_line) {
82020
82031
  // remaining values to be added to the chunk
82021
- D_ASSERT(column == insert_chunk.ColumnCount() - 1);
82022
82032
  AddValue(buffer->GetValue(start_buffer, position_buffer, offset), column, escape_positions, has_quotes);
82023
82033
  if (try_add_line) {
82024
82034
  bool success = column == sql_types.size();
@@ -86768,6 +86778,7 @@ public:
86768
86778
  vector<ColumnBinding> GetColumnBindings() override;
86769
86779
  void Serialize(FieldWriter &writer) const override;
86770
86780
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
86781
+ idx_t EstimateCardinality(ClientContext &context) override;
86771
86782
 
86772
86783
  protected:
86773
86784
  void ResolveTypes() override;
@@ -87387,6 +87398,7 @@ public:
87387
87398
  public:
87388
87399
  void Serialize(FieldWriter &writer) const override;
87389
87400
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
87401
+ idx_t EstimateCardinality(ClientContext &context) override;
87390
87402
 
87391
87403
  protected:
87392
87404
  void ResolveTypes() override {
@@ -87453,6 +87465,7 @@ public:
87453
87465
  public:
87454
87466
  void Serialize(FieldWriter &writer) const override;
87455
87467
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
87468
+ idx_t EstimateCardinality(ClientContext &context) override;
87456
87469
 
87457
87470
  protected:
87458
87471
  void ResolveTypes() override {
@@ -87590,6 +87603,7 @@ public:
87590
87603
  public:
87591
87604
  void Serialize(FieldWriter &writer) const override;
87592
87605
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
87606
+ idx_t EstimateCardinality(ClientContext &context) override;
87593
87607
 
87594
87608
  protected:
87595
87609
  void ResolveTypes() override {
@@ -87729,6 +87743,7 @@ public:
87729
87743
  public:
87730
87744
  void Serialize(FieldWriter &writer) const override;
87731
87745
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
87746
+ idx_t EstimateCardinality(ClientContext &context) override;
87732
87747
 
87733
87748
  protected:
87734
87749
  vector<ColumnBinding> GetColumnBindings() override {
@@ -88099,6 +88114,9 @@ public:
88099
88114
  }
88100
88115
  void Serialize(FieldWriter &writer) const override;
88101
88116
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
88117
+ idx_t EstimateCardinality(ClientContext &context) override {
88118
+ return 0;
88119
+ }
88102
88120
 
88103
88121
  protected:
88104
88122
  void ResolveTypes() override {
@@ -88245,6 +88263,9 @@ public:
88245
88263
  public:
88246
88264
  void Serialize(FieldWriter &writer) const override;
88247
88265
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
88266
+ idx_t EstimateCardinality(ClientContext &context) override {
88267
+ return 3;
88268
+ }
88248
88269
 
88249
88270
  protected:
88250
88271
  void ResolveTypes() override {
@@ -88419,6 +88440,9 @@ public:
88419
88440
  }
88420
88441
  void Serialize(FieldWriter &writer) const override;
88421
88442
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
88443
+ idx_t EstimateCardinality(ClientContext &context) override {
88444
+ return expressions.size();
88445
+ }
88422
88446
 
88423
88447
  protected:
88424
88448
  void ResolveTypes() override {
@@ -89126,6 +89150,8 @@ protected:
89126
89150
  types.emplace_back(LogicalType::BIGINT);
89127
89151
  }
89128
89152
  }
89153
+
89154
+ idx_t EstimateCardinality(ClientContext &context) override;
89129
89155
  };
89130
89156
  } // namespace duckdb
89131
89157
 
@@ -89419,6 +89445,7 @@ public:
89419
89445
  public:
89420
89446
  void Serialize(FieldWriter &writer) const override;
89421
89447
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
89448
+ idx_t EstimateCardinality(ClientContext &context) override;
89422
89449
 
89423
89450
  protected:
89424
89451
  void ResolveTypes() override {
@@ -89472,6 +89499,7 @@ public:
89472
89499
  public:
89473
89500
  void Serialize(FieldWriter &writer) const override;
89474
89501
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
89502
+ idx_t EstimateCardinality(ClientContext &context) override;
89475
89503
 
89476
89504
  protected:
89477
89505
  void ResolveTypes() override {
@@ -89818,6 +89846,7 @@ public:
89818
89846
  public:
89819
89847
  void Serialize(FieldWriter &writer) const override;
89820
89848
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
89849
+ idx_t EstimateCardinality(ClientContext &context) override;
89821
89850
 
89822
89851
  protected:
89823
89852
  void ResolveTypes() override {
@@ -90054,6 +90083,7 @@ public:
90054
90083
  public:
90055
90084
  void Serialize(FieldWriter &writer) const override;
90056
90085
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
90086
+ idx_t EstimateCardinality(ClientContext &context) override;
90057
90087
 
90058
90088
  protected:
90059
90089
  void ResolveTypes() override {
@@ -90128,6 +90158,7 @@ public:
90128
90158
  }
90129
90159
  void Serialize(FieldWriter &writer) const override;
90130
90160
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
90161
+ idx_t EstimateCardinality(ClientContext &context) override;
90131
90162
 
90132
90163
  protected:
90133
90164
  void ResolveTypes() override {
@@ -90236,6 +90267,7 @@ public:
90236
90267
  public:
90237
90268
  void Serialize(FieldWriter &writer) const override;
90238
90269
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
90270
+ idx_t EstimateCardinality(ClientContext &context) override;
90239
90271
 
90240
90272
  protected:
90241
90273
  vector<ColumnBinding> GetColumnBindings() override {
@@ -126385,13 +126417,10 @@ static unique_ptr<GlobalTableFunctionState> ParallelCSVInitGlobal(ClientContext
126385
126417
  return make_unique<ParallelCSVGlobalState>();
126386
126418
  }
126387
126419
  unique_ptr<CSVFileHandle> file_handle;
126388
- if (bind_data.initial_reader) {
126389
- file_handle = move(bind_data.initial_reader->file_handle);
126390
- bind_data.initial_reader.reset();
126391
- } else {
126392
- bind_data.options.file_path = bind_data.files[0];
126393
- file_handle = ReadCSV::OpenCSV(bind_data.options, context);
126394
- }
126420
+
126421
+ bind_data.options.file_path = bind_data.files[0];
126422
+ file_handle = ReadCSV::OpenCSV(bind_data.options, context);
126423
+
126395
126424
  idx_t rows_to_skip = bind_data.options.skip_rows + (bind_data.options.has_header ? 1 : 0);
126396
126425
  return make_unique<ParallelCSVGlobalState>(context, move(file_handle), bind_data.files,
126397
126426
  context.db->NumberOfThreads(), bind_data.options.buffer_size,
@@ -126663,6 +126692,19 @@ void CSVComplexFilterPushdown(ClientContext &context, LogicalGet &get, FunctionD
126663
126692
  }
126664
126693
  }
126665
126694
 
126695
+ unique_ptr<NodeStatistics> CSVReaderCardinality(ClientContext &context, const FunctionData *bind_data_p) {
126696
+ auto &bind_data = (ReadCSVData &)*bind_data_p;
126697
+ idx_t per_file_cardinality = 0;
126698
+ if (bind_data.initial_reader && bind_data.initial_reader->file_handle) {
126699
+ auto estimated_row_width = (bind_data.sql_types.size() * 5);
126700
+ per_file_cardinality = bind_data.initial_reader->file_handle->FileSize() / estimated_row_width;
126701
+ } else {
126702
+ // determined through the scientific method as the average amount of rows in a CSV file
126703
+ per_file_cardinality = 42;
126704
+ }
126705
+ return make_unique<NodeStatistics>(bind_data.files.size() * per_file_cardinality);
126706
+ }
126707
+
126666
126708
  void BufferedCSVReaderOptions::Serialize(FieldWriter &writer) const {
126667
126709
  // common options
126668
126710
  writer.WriteField<bool>(has_delimiter);
@@ -126757,6 +126799,7 @@ TableFunction ReadCSVTableFunction::GetFunction(bool list_parameter) {
126757
126799
  read_csv.serialize = CSVReaderSerialize;
126758
126800
  read_csv.deserialize = CSVReaderDeserialize;
126759
126801
  read_csv.get_batch_index = CSVReaderGetBatchIndex;
126802
+ read_csv.cardinality = CSVReaderCardinality;
126760
126803
  ReadCSVAddNamedParameters(read_csv);
126761
126804
  return read_csv;
126762
126805
  }
@@ -126770,6 +126813,7 @@ TableFunction ReadCSVTableFunction::GetAutoFunction(bool list_parameter) {
126770
126813
  read_csv_auto.serialize = CSVReaderSerialize;
126771
126814
  read_csv_auto.deserialize = CSVReaderDeserialize;
126772
126815
  read_csv_auto.get_batch_index = CSVReaderGetBatchIndex;
126816
+ read_csv_auto.cardinality = CSVReaderCardinality;
126773
126817
  ReadCSVAddNamedParameters(read_csv_auto);
126774
126818
  return read_csv_auto;
126775
126819
  }
@@ -198594,6 +198638,14 @@ unique_ptr<LogicalOperator> LogicalAggregate::Deserialize(LogicalDeserialization
198594
198638
  return move(result);
198595
198639
  }
198596
198640
 
198641
+ idx_t LogicalAggregate::EstimateCardinality(ClientContext &context) {
198642
+ if (groups.empty()) {
198643
+ // ungrouped aggregate
198644
+ return 1;
198645
+ }
198646
+ return LogicalOperator::EstimateCardinality(context);
198647
+ }
198648
+
198597
198649
  } // namespace duckdb
198598
198650
 
198599
198651
 
@@ -198762,6 +198814,10 @@ unique_ptr<LogicalOperator> LogicalCopyToFile::Deserialize(LogicalDeserializatio
198762
198814
  return move(result);
198763
198815
  }
198764
198816
 
198817
+ idx_t LogicalCopyToFile::EstimateCardinality(ClientContext &context) {
198818
+ return 1;
198819
+ }
198820
+
198765
198821
  } // namespace duckdb
198766
198822
 
198767
198823
 
@@ -198782,6 +198838,10 @@ unique_ptr<LogicalOperator> LogicalCreate::Deserialize(LogicalDeserializationSta
198782
198838
  return make_unique<LogicalCreate>(state.type, move(info), schema_catalog_entry);
198783
198839
  }
198784
198840
 
198841
+ idx_t LogicalCreate::EstimateCardinality(ClientContext &context) {
198842
+ return 1;
198843
+ }
198844
+
198785
198845
  } // namespace duckdb
198786
198846
 
198787
198847
 
@@ -198846,6 +198906,10 @@ unique_ptr<LogicalOperator> LogicalCreateTable::Deserialize(LogicalDeserializati
198846
198906
  return make_unique<LogicalCreateTable>(schema, move(info));
198847
198907
  }
198848
198908
 
198909
+ idx_t LogicalCreateTable::EstimateCardinality(ClientContext &context) {
198910
+ return 1;
198911
+ }
198912
+
198849
198913
  } // namespace duckdb
198850
198914
 
198851
198915
 
@@ -198938,6 +199002,10 @@ unique_ptr<LogicalOperator> LogicalDelete::Deserialize(LogicalDeserializationSta
198938
199002
  return move(result);
198939
199003
  }
198940
199004
 
199005
+ idx_t LogicalDelete::EstimateCardinality(ClientContext &context) {
199006
+ return return_chunk ? LogicalOperator::EstimateCardinality(context) : 1;
199007
+ }
199008
+
198941
199009
  } // namespace duckdb
198942
199010
 
198943
199011
 
@@ -199424,6 +199492,10 @@ unique_ptr<LogicalOperator> LogicalInsert::Deserialize(LogicalDeserializationSta
199424
199492
  return move(result);
199425
199493
  }
199426
199494
 
199495
+ idx_t LogicalInsert::EstimateCardinality(ClientContext &context) {
199496
+ return return_chunk ? LogicalOperator::EstimateCardinality(context) : 1;
199497
+ }
199498
+
199427
199499
  } // namespace duckdb
199428
199500
 
199429
199501
 
@@ -199544,6 +199616,7 @@ unique_ptr<LogicalOperator> LogicalLimit::Deserialize(LogicalDeserializationStat
199544
199616
  auto offset = reader.ReadOptional<Expression>(nullptr, state.gstate);
199545
199617
  return make_unique<LogicalLimit>(limit_val, offset_val, move(limit), move(offset));
199546
199618
  }
199619
+
199547
199620
  } // namespace duckdb
199548
199621
 
199549
199622
 
@@ -199564,6 +199637,15 @@ unique_ptr<LogicalOperator> LogicalLimitPercent::Deserialize(LogicalDeserializat
199564
199637
  auto offset = reader.ReadOptional<Expression>(nullptr, state.gstate);
199565
199638
  return make_unique<LogicalLimitPercent>(limit_percent, offset_val, move(limit), move(offset));
199566
199639
  }
199640
+
199641
+ idx_t LogicalLimitPercent::EstimateCardinality(ClientContext &context) {
199642
+ auto child_cardinality = LogicalOperator::EstimateCardinality(context);
199643
+ if (limit_percent < 0 || limit_percent > 100) {
199644
+ return child_cardinality;
199645
+ }
199646
+ return idx_t(child_cardinality * (limit_percent / 100.0));
199647
+ }
199648
+
199567
199649
  } // namespace duckdb
199568
199650
 
199569
199651
 
@@ -199597,6 +199679,10 @@ unique_ptr<LogicalOperator> LogicalPragma::Deserialize(LogicalDeserializationSta
199597
199679
  throw NotImplementedException(LogicalOperatorToString(state.type));
199598
199680
  }
199599
199681
 
199682
+ idx_t LogicalPragma::EstimateCardinality(ClientContext &context) {
199683
+ return 1;
199684
+ }
199685
+
199600
199686
  } // namespace duckdb
199601
199687
 
199602
199688
 
@@ -199610,6 +199696,10 @@ unique_ptr<LogicalOperator> LogicalPrepare::Deserialize(LogicalDeserializationSt
199610
199696
  throw NotImplementedException(LogicalOperatorToString(state.type));
199611
199697
  }
199612
199698
 
199699
+ idx_t LogicalPrepare::EstimateCardinality(ClientContext &context) {
199700
+ return 1;
199701
+ }
199702
+
199613
199703
  } // namespace duckdb
199614
199704
 
199615
199705
 
@@ -199722,6 +199812,10 @@ unique_ptr<LogicalOperator> LogicalSet::Deserialize(LogicalDeserializationState
199722
199812
  return make_unique<LogicalSet>(name, value, scope);
199723
199813
  }
199724
199814
 
199815
+ idx_t LogicalSet::EstimateCardinality(ClientContext &context) {
199816
+ return 1;
199817
+ }
199818
+
199725
199819
  } // namespace duckdb
199726
199820
 
199727
199821
 
@@ -199773,6 +199867,10 @@ unique_ptr<LogicalOperator> LogicalSimple::Deserialize(LogicalDeserializationSta
199773
199867
  throw NotImplementedException(LogicalOperatorToString(state.type));
199774
199868
  }
199775
199869
 
199870
+ idx_t LogicalSimple::EstimateCardinality(ClientContext &context) {
199871
+ return 1;
199872
+ }
199873
+
199776
199874
  } // namespace duckdb
199777
199875
 
199778
199876
 
@@ -199791,6 +199889,15 @@ unique_ptr<LogicalOperator> LogicalTopN::Deserialize(LogicalDeserializationState
199791
199889
  auto limit = reader.ReadRequired<idx_t>();
199792
199890
  return make_unique<LogicalTopN>(move(orders), limit, offset);
199793
199891
  }
199892
+
199893
+ idx_t LogicalTopN::EstimateCardinality(ClientContext &context) {
199894
+ auto child_cardinality = LogicalOperator::EstimateCardinality(context);
199895
+ if (limit >= 0 && child_cardinality < idx_t(limit)) {
199896
+ return limit;
199897
+ }
199898
+ return child_cardinality;
199899
+ }
199900
+
199794
199901
  } // namespace duckdb
199795
199902
 
199796
199903
 
@@ -199861,6 +199968,10 @@ unique_ptr<LogicalOperator> LogicalUpdate::Deserialize(LogicalDeserializationSta
199861
199968
  return move(result);
199862
199969
  }
199863
199970
 
199971
+ idx_t LogicalUpdate::EstimateCardinality(ClientContext &context) {
199972
+ return return_chunk ? LogicalOperator::EstimateCardinality(context) : 1;
199973
+ }
199974
+
199864
199975
  } // namespace duckdb
199865
199976
 
199866
199977
 
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 "5fde799851"
15
- #define DUCKDB_VERSION "v0.5.2-dev2245"
14
+ #define DUCKDB_SOURCE_ID "47bb125a91"
15
+ #define DUCKDB_VERSION "v0.5.2-dev2256"
16
16
  //===----------------------------------------------------------------------===//
17
17
  // DuckDB
18
18
  //
@@ -16880,6 +16880,7 @@ public:
16880
16880
 
16881
16881
  void Serialize(FieldWriter &writer) const override;
16882
16882
  static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
16883
+ idx_t EstimateCardinality(ClientContext &context) override;
16883
16884
 
16884
16885
  protected:
16885
16886
  void ResolveTypes() override {