duckdb 0.3.1-dev413.0 → 0.3.1-dev440.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.3.1-dev413.0",
4
+ "version": "0.3.1-dev440.0",
5
5
  "description": "DuckDB node.js API",
6
6
  "gypfile": true,
7
7
  "dependencies": {
package/src/duckdb.cpp CHANGED
@@ -30403,39 +30403,41 @@ static void ComputeTies(data_ptr_t dataptr, const idx_t &count, const idx_t &col
30403
30403
  }
30404
30404
 
30405
30405
  //! Textbook LSD radix sort
30406
- static void RadixSort(BufferManager &buffer_manager, data_ptr_t dataptr, const idx_t &count, const idx_t &col_offset,
30407
- const idx_t &sorting_size, const SortLayout &sort_layout) {
30406
+ static void RadixSort(BufferManager &buffer_manager, const data_ptr_t &dataptr, const idx_t &count,
30407
+ const idx_t &col_offset, const idx_t &sorting_size, const SortLayout &sort_layout) {
30408
30408
  auto temp_block = buffer_manager.Allocate(MaxValue(count * sort_layout.entry_size, (idx_t)Storage::BLOCK_SIZE));
30409
- data_ptr_t temp = temp_block->Ptr();
30410
30409
  bool swap = false;
30411
30410
 
30412
30411
  idx_t counts[256];
30413
- uint8_t byte;
30414
- for (idx_t offset = col_offset + sorting_size - 1; offset + 1 > col_offset; offset--) {
30412
+ for (idx_t r = 1; r <= sorting_size; r++) {
30415
30413
  // Init counts to 0
30416
30414
  memset(counts, 0, sizeof(counts));
30415
+ // Const some values for convenience
30416
+ const data_ptr_t source_ptr = swap ? temp_block->Ptr() : dataptr;
30417
+ const data_ptr_t target_ptr = swap ? dataptr : temp_block->Ptr();
30418
+ const idx_t offset = col_offset + sorting_size - r;
30417
30419
  // Collect counts
30420
+ data_ptr_t offset_ptr = source_ptr + offset;
30418
30421
  for (idx_t i = 0; i < count; i++) {
30419
- byte = *(dataptr + i * sort_layout.entry_size + offset);
30420
- counts[byte]++;
30422
+ counts[*offset_ptr]++;
30423
+ offset_ptr += sort_layout.entry_size;
30421
30424
  }
30422
30425
  // Compute offsets from counts
30423
30426
  for (idx_t val = 1; val < 256; val++) {
30424
30427
  counts[val] = counts[val] + counts[val - 1];
30425
30428
  }
30426
30429
  // Re-order the data in temporary array
30427
- for (idx_t i = count; i > 0; i--) {
30428
- byte = *(dataptr + (i - 1) * sort_layout.entry_size + offset);
30429
- memcpy(temp + (counts[byte] - 1) * sort_layout.entry_size, dataptr + (i - 1) * sort_layout.entry_size,
30430
- sort_layout.entry_size);
30431
- counts[byte]--;
30430
+ data_ptr_t row_ptr = source_ptr + (count - 1) * sort_layout.entry_size;
30431
+ for (idx_t i = 0; i < count; i++) {
30432
+ idx_t &radix_offset = --counts[*(row_ptr + offset)];
30433
+ memcpy(target_ptr + radix_offset * sort_layout.entry_size, row_ptr, sort_layout.entry_size);
30434
+ row_ptr -= sort_layout.entry_size;
30432
30435
  }
30433
- std::swap(dataptr, temp);
30434
30436
  swap = !swap;
30435
30437
  }
30436
30438
  // Move data back to original buffer (if it was swapped)
30437
30439
  if (swap) {
30438
- memcpy(temp, dataptr, count * sort_layout.entry_size);
30440
+ memcpy(dataptr, temp_block->Ptr(), count * sort_layout.entry_size);
30439
30441
  }
30440
30442
  }
30441
30443
 
@@ -83838,6 +83840,10 @@ struct NextAfterFun {
83838
83840
  static void RegisterFunction(BuiltinFunctions &set);
83839
83841
  };
83840
83842
 
83843
+ struct EvenFun {
83844
+ static void RegisterFunction(BuiltinFunctions &set);
83845
+ };
83846
+
83841
83847
  } // namespace duckdb
83842
83848
 
83843
83849
 
@@ -84799,6 +84805,34 @@ void FactorialFun::RegisterFunction(BuiltinFunctions &set) {
84799
84805
  set.AddFunction({"factorial", "!__postfix"}, fun);
84800
84806
  }
84801
84807
 
84808
+ //===--------------------------------------------------------------------===//
84809
+ // even
84810
+ //===--------------------------------------------------------------------===//
84811
+ struct EvenOperator {
84812
+ template <class TA, class TR>
84813
+ static inline TR Operation(TA left) {
84814
+ double value;
84815
+ if (left >= 0) {
84816
+ value = std::ceil(left);
84817
+ } else {
84818
+ value = std::ceil(-left);
84819
+ value = -value;
84820
+ }
84821
+ if (std::floor(value / 2) * 2 != value) {
84822
+ if (left >= 0) {
84823
+ return value += 1;
84824
+ }
84825
+ return value -= 1;
84826
+ }
84827
+ return value;
84828
+ }
84829
+ };
84830
+
84831
+ void EvenFun::RegisterFunction(BuiltinFunctions &set) {
84832
+ set.AddFunction(ScalarFunction("even", {LogicalType::DOUBLE}, LogicalType::DOUBLE,
84833
+ UnaryDoubleFunctionWrapper<double, EvenOperator>));
84834
+ }
84835
+
84802
84836
  } // namespace duckdb
84803
84837
 
84804
84838
 
@@ -84934,6 +84968,8 @@ void BuiltinFunctions::RegisterMathFunctions() {
84934
84968
  Register<FactorialFun>();
84935
84969
 
84936
84970
  Register<NextAfterFun>();
84971
+
84972
+ Register<EvenFun>();
84937
84973
  }
84938
84974
 
84939
84975
  } // namespace duckdb
package/src/duckdb.hpp CHANGED
@@ -10,8 +10,8 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
10
10
 
11
11
  #pragma once
12
12
  #define DUCKDB_AMALGAMATION 1
13
- #define DUCKDB_SOURCE_ID "0dd6d2a8b"
14
- #define DUCKDB_VERSION "0.3.1-dev413"
13
+ #define DUCKDB_SOURCE_ID "f32f84305"
14
+ #define DUCKDB_VERSION "0.3.1-dev440"
15
15
  //===----------------------------------------------------------------------===//
16
16
  // DuckDB
17
17
  //