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 +1 -1
- package/src/duckdb.cpp +50 -14
- package/src/duckdb.hpp +2 -2
package/package.json
CHANGED
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,
|
|
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
|
-
|
|
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
|
-
|
|
30420
|
-
|
|
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
|
-
|
|
30428
|
-
|
|
30429
|
-
|
|
30430
|
-
|
|
30431
|
-
|
|
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(
|
|
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 "
|
|
14
|
-
#define DUCKDB_VERSION "0.3.1-
|
|
13
|
+
#define DUCKDB_SOURCE_ID "f32f84305"
|
|
14
|
+
#define DUCKDB_VERSION "0.3.1-dev440"
|
|
15
15
|
//===----------------------------------------------------------------------===//
|
|
16
16
|
// DuckDB
|
|
17
17
|
//
|