@avidian/duckdb-bun 0.0.0-stage → 1.0.1
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/LICENSE +22 -0
- package/README.md +286 -2
- package/package.json +96 -4
- package/src/bindings/api/appender.ts +288 -0
- package/src/bindings/api/data-chunk.ts +58 -0
- package/src/bindings/api/database.ts +232 -0
- package/src/bindings/api/datetime.ts +158 -0
- package/src/bindings/api/index.ts +13 -0
- package/src/bindings/api/logical-types.ts +227 -0
- package/src/bindings/api/query.ts +616 -0
- package/src/bindings/api/scalar-function.ts +274 -0
- package/src/bindings/api/table-function.ts +339 -0
- package/src/bindings/api/values.ts +546 -0
- package/src/bindings/api/vector.ts +266 -0
- package/src/bindings/generated/capi.ts +695 -0
- package/src/bindings/generated/contract.ts +162 -0
- package/src/bindings/index.ts +10 -0
- package/src/bindings/runtime/convert.ts +307 -0
- package/src/bindings/runtime/diagnostics.ts +45 -0
- package/src/bindings/runtime/dispatch.ts +213 -0
- package/src/bindings/runtime/exception.ts +103 -0
- package/src/bindings/runtime/flags.ts +19 -0
- package/src/bindings/runtime/handle.ts +217 -0
- package/src/bindings/runtime/kinds.ts +53 -0
- package/src/bindings/runtime/marshal.ts +190 -0
- package/src/bindings/runtime/native.ts +153 -0
- package/src/bindings/runtime/ring.ts +54 -0
- package/src/bindings/runtime/scope.ts +133 -0
- package/src/bindings/runtime/trace.ts +65 -0
- package/src/connection.ts +35 -0
- package/src/database.ts +27 -0
- package/src/errors.ts +30 -0
- package/src/file-assets.d.ts +10 -0
- package/src/index.ts +17 -0
- package/src/library.ts +83 -0
- package/src/neo.ts +16 -0
- package/src/reader.ts +47 -0
- package/src/statement.ts +61 -0
- package/src/types.ts +52 -0
- package/src/version.ts +6 -0
- package/vendor/node-api/LICENSE +7 -0
- package/vendor/node-api/PROVENANCE.md +54 -0
- package/vendor/node-api/node-bindings.d.ts +1669 -0
- package/vendor/node-api/src/DuckDBAppender.ts +237 -0
- package/vendor/node-api/src/DuckDBClientContext.ts +13 -0
- package/vendor/node-api/src/DuckDBConnection.ts +315 -0
- package/vendor/node-api/src/DuckDBDataChunk.ts +412 -0
- package/vendor/node-api/src/DuckDBDataChunkWriter.ts +144 -0
- package/vendor/node-api/src/DuckDBExtractedStatements.ts +37 -0
- package/vendor/node-api/src/DuckDBInstance.ts +35 -0
- package/vendor/node-api/src/DuckDBInstanceCache.ts +29 -0
- package/vendor/node-api/src/DuckDBLogicalType.ts +446 -0
- package/vendor/node-api/src/DuckDBMaterializedResult.ts +39 -0
- package/vendor/node-api/src/DuckDBPendingResult.ts +83 -0
- package/vendor/node-api/src/DuckDBPreparedStatement.ts +376 -0
- package/vendor/node-api/src/DuckDBPreparedStatementCollection.ts +5 -0
- package/vendor/node-api/src/DuckDBPreparedStatementWeakRefCollection.ts +31 -0
- package/vendor/node-api/src/DuckDBResult.ts +403 -0
- package/vendor/node-api/src/DuckDBResultReader.ts +283 -0
- package/vendor/node-api/src/DuckDBScalarFunction.ts +149 -0
- package/vendor/node-api/src/DuckDBScalarFunctionBindInfo.ts +34 -0
- package/vendor/node-api/src/DuckDBScalarFunctionInfo.ts +34 -0
- package/vendor/node-api/src/DuckDBScalarFunctionInitInfo.ts +35 -0
- package/vendor/node-api/src/DuckDBTableFunction.ts +149 -0
- package/vendor/node-api/src/DuckDBTableFunctionBindInfo.ts +56 -0
- package/vendor/node-api/src/DuckDBTableFunctionInfo.ts +36 -0
- package/vendor/node-api/src/DuckDBTableFunctionInitInfo.ts +52 -0
- package/vendor/node-api/src/DuckDBType.ts +1 -0
- package/vendor/node-api/src/DuckDBTypeId.ts +46 -0
- package/vendor/node-api/src/DuckDBValueConverter.ts +23 -0
- package/vendor/node-api/src/DuckDBValueConverters.ts +461 -0
- package/vendor/node-api/src/DuckDBVector.ts +1 -0
- package/vendor/node-api/src/JS.ts +11 -0
- package/vendor/node-api/src/JSDuckDBValueConverter.ts +85 -0
- package/vendor/node-api/src/JSInputTypeForTypeId.ts +101 -0
- package/vendor/node-api/src/JSToDuckDBValueConverter.ts +136 -0
- package/vendor/node-api/src/JSTypeForTypeId.ts +78 -0
- package/vendor/node-api/src/Json.ts +7 -0
- package/vendor/node-api/src/JsonDuckDBValueConverter.ts +72 -0
- package/vendor/node-api/src/JsonTypeForTypeId.ts +86 -0
- package/vendor/node-api/src/ToDuckDBValueConverter.ts +68 -0
- package/vendor/node-api/src/ToDuckDBValueConverters.ts +303 -0
- package/vendor/node-api/src/configurationOptionDescriptions.ts +13 -0
- package/vendor/node-api/src/conversion/bytesFromString.ts +5 -0
- package/vendor/node-api/src/conversion/dateTimeStringConversion.ts +343 -0
- package/vendor/node-api/src/conversion/displayStringForDuckDBValue.ts +12 -0
- package/vendor/node-api/src/conversion/stringFromBlob.ts +48 -0
- package/vendor/node-api/src/conversion/stringFromDecimal.ts +129 -0
- package/vendor/node-api/src/conversion/varintDecode.ts +42 -0
- package/vendor/node-api/src/convertColumnsFromChunks.ts +28 -0
- package/vendor/node-api/src/convertColumnsObjectFromChunks.ts +29 -0
- package/vendor/node-api/src/convertRowObjectsFromChunks.ts +21 -0
- package/vendor/node-api/src/convertRowsFromChunks.ts +16 -0
- package/vendor/node-api/src/createConfig.ts +14 -0
- package/vendor/node-api/src/createDuckDBValueConverter.ts +17 -0
- package/vendor/node-api/src/createResult.ts +15 -0
- package/vendor/node-api/src/createValue.ts +355 -0
- package/vendor/node-api/src/duckdb.ts +51 -0
- package/vendor/node-api/src/enums.ts +7 -0
- package/vendor/node-api/src/getColumnsFromChunks.ts +13 -0
- package/vendor/node-api/src/getColumnsObjectFromChunks.ts +16 -0
- package/vendor/node-api/src/getRowObjectsFromChunks.ts +13 -0
- package/vendor/node-api/src/getRowsFromChunks.ts +12 -0
- package/vendor/node-api/src/index.ts +3 -0
- package/vendor/node-api/src/readValue.ts +31 -0
- package/vendor/node-api/src/sleep.ts +5 -0
- package/vendor/node-api/src/sql.ts +7 -0
- package/vendor/node-api/src/tsconfig.json +7 -0
- package/vendor/node-api/src/typeForValue.ts +144 -0
- package/vendor/node-api/src/types/BaseDuckDBType.ts +31 -0
- package/vendor/node-api/src/types/DuckDBAnyType.ts +13 -0
- package/vendor/node-api/src/types/DuckDBArrayType.ts +43 -0
- package/vendor/node-api/src/types/DuckDBBigIntType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBBigNumType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBBitType.ts +13 -0
- package/vendor/node-api/src/types/DuckDBBlobType.ts +13 -0
- package/vendor/node-api/src/types/DuckDBBooleanType.ts +13 -0
- package/vendor/node-api/src/types/DuckDBDateType.ts +29 -0
- package/vendor/node-api/src/types/DuckDBDecimalType.ts +46 -0
- package/vendor/node-api/src/types/DuckDBDoubleType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBEnumType.ts +111 -0
- package/vendor/node-api/src/types/DuckDBFloatType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBGeometryType.ts +36 -0
- package/vendor/node-api/src/types/DuckDBHugeIntType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBIntegerLiteralType.ts +13 -0
- package/vendor/node-api/src/types/DuckDBIntegerType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBIntervalType.ts +13 -0
- package/vendor/node-api/src/types/DuckDBListType.ts +35 -0
- package/vendor/node-api/src/types/DuckDBMapType.ts +47 -0
- package/vendor/node-api/src/types/DuckDBSQLNullType.ts +17 -0
- package/vendor/node-api/src/types/DuckDBSmallIntType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBStringLiteralType.ts +13 -0
- package/vendor/node-api/src/types/DuckDBStructType.ts +104 -0
- package/vendor/node-api/src/types/DuckDBTimeNSType.ts +20 -0
- package/vendor/node-api/src/types/DuckDBTimeTZType.ts +23 -0
- package/vendor/node-api/src/types/DuckDBTimeType.ts +20 -0
- package/vendor/node-api/src/types/DuckDBTimestampMillisecondsType.ts +29 -0
- package/vendor/node-api/src/types/DuckDBTimestampNanosecondsType.ts +29 -0
- package/vendor/node-api/src/types/DuckDBTimestampSecondsType.ts +29 -0
- package/vendor/node-api/src/types/DuckDBTimestampTZNanosecondsType.ts +32 -0
- package/vendor/node-api/src/types/DuckDBTimestampTZType.ts +32 -0
- package/vendor/node-api/src/types/DuckDBTimestampType.ts +32 -0
- package/vendor/node-api/src/types/DuckDBTinyIntType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBType.ts +86 -0
- package/vendor/node-api/src/types/DuckDBUBigIntType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBUHugeIntType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBUIntegerType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBUSmallIntType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBUTinyIntType.ts +21 -0
- package/vendor/node-api/src/types/DuckDBUUIDType.ts +20 -0
- package/vendor/node-api/src/types/DuckDBUnionType.ts +74 -0
- package/vendor/node-api/src/types/DuckDBVarCharType.ts +13 -0
- package/vendor/node-api/src/types/DuckDBVariantType.ts +13 -0
- package/vendor/node-api/src/types/index.ts +44 -0
- package/vendor/node-api/src/values/DuckDBArrayValue.ts +18 -0
- package/vendor/node-api/src/values/DuckDBBitValue.ts +117 -0
- package/vendor/node-api/src/values/DuckDBBlobValue.ts +26 -0
- package/vendor/node-api/src/values/DuckDBDateValue.ts +43 -0
- package/vendor/node-api/src/values/DuckDBDecimalValue.ts +44 -0
- package/vendor/node-api/src/values/DuckDBGeometryValue.ts +30 -0
- package/vendor/node-api/src/values/DuckDBIntervalValue.ts +22 -0
- package/vendor/node-api/src/values/DuckDBListValue.ts +18 -0
- package/vendor/node-api/src/values/DuckDBMapValue.ts +25 -0
- package/vendor/node-api/src/values/DuckDBStructValue.ts +22 -0
- package/vendor/node-api/src/values/DuckDBTimeNSValue.ts +23 -0
- package/vendor/node-api/src/values/DuckDBTimeTZValue.ts +96 -0
- package/vendor/node-api/src/values/DuckDBTimeValue.ts +34 -0
- package/vendor/node-api/src/values/DuckDBTimestampMillisecondsValue.ts +29 -0
- package/vendor/node-api/src/values/DuckDBTimestampNanosecondsValue.ts +28 -0
- package/vendor/node-api/src/values/DuckDBTimestampSecondsValue.ts +28 -0
- package/vendor/node-api/src/values/DuckDBTimestampTZNanosecondsValue.ts +44 -0
- package/vendor/node-api/src/values/DuckDBTimestampTZValue.ts +54 -0
- package/vendor/node-api/src/values/DuckDBTimestampValue.ts +45 -0
- package/vendor/node-api/src/values/DuckDBTupleValue.ts +22 -0
- package/vendor/node-api/src/values/DuckDBUUIDValue.ts +48 -0
- package/vendor/node-api/src/values/DuckDBUnionValue.ts +22 -0
- package/vendor/node-api/src/values/DuckDBValue.ts +53 -0
- package/vendor/node-api/src/values/DuckDBVariantValue.ts +34 -0
- package/vendor/node-api/src/values/index.ts +24 -0
- package/vendor/node-api/src/vectors/DuckDBArrayVector.ts +107 -0
- package/vendor/node-api/src/vectors/DuckDBBigIntVector.ts +75 -0
- package/vendor/node-api/src/vectors/DuckDBBigNumVector.ts +98 -0
- package/vendor/node-api/src/vectors/DuckDBBitVector.ts +102 -0
- package/vendor/node-api/src/vectors/DuckDBBlobVector.ts +112 -0
- package/vendor/node-api/src/vectors/DuckDBBooleanVector.ts +84 -0
- package/vendor/node-api/src/vectors/DuckDBDateVector.ts +80 -0
- package/vendor/node-api/src/vectors/DuckDBDecimal128Vector.ts +107 -0
- package/vendor/node-api/src/vectors/DuckDBDecimal16Vector.ts +104 -0
- package/vendor/node-api/src/vectors/DuckDBDecimal32Vector.ts +104 -0
- package/vendor/node-api/src/vectors/DuckDBDecimal64Vector.ts +104 -0
- package/vendor/node-api/src/vectors/DuckDBDoubleVector.ts +68 -0
- package/vendor/node-api/src/vectors/DuckDBEnum16Vector.ts +75 -0
- package/vendor/node-api/src/vectors/DuckDBEnum32Vector.ts +75 -0
- package/vendor/node-api/src/vectors/DuckDBEnum8Vector.ts +75 -0
- package/vendor/node-api/src/vectors/DuckDBFloatVector.ts +68 -0
- package/vendor/node-api/src/vectors/DuckDBGeometryVector.ts +97 -0
- package/vendor/node-api/src/vectors/DuckDBHugeIntVector.ts +89 -0
- package/vendor/node-api/src/vectors/DuckDBIntegerVector.ts +75 -0
- package/vendor/node-api/src/vectors/DuckDBIntervalVector.ts +100 -0
- package/vendor/node-api/src/vectors/DuckDBListVector.ts +221 -0
- package/vendor/node-api/src/vectors/DuckDBMapVector.ts +88 -0
- package/vendor/node-api/src/vectors/DuckDBSQLNullVector.ts +53 -0
- package/vendor/node-api/src/vectors/DuckDBSmallIntVector.ts +75 -0
- package/vendor/node-api/src/vectors/DuckDBStructVector.ts +138 -0
- package/vendor/node-api/src/vectors/DuckDBTimeNSVector.ts +80 -0
- package/vendor/node-api/src/vectors/DuckDBTimeTZVector.ts +80 -0
- package/vendor/node-api/src/vectors/DuckDBTimeVector.ts +80 -0
- package/vendor/node-api/src/vectors/DuckDBTimestampMillisecondsVector.ts +88 -0
- package/vendor/node-api/src/vectors/DuckDBTimestampNanosecondsVector.ts +88 -0
- package/vendor/node-api/src/vectors/DuckDBTimestampSecondsVector.ts +88 -0
- package/vendor/node-api/src/vectors/DuckDBTimestampTZNanosecondsVector.ts +88 -0
- package/vendor/node-api/src/vectors/DuckDBTimestampTZVector.ts +86 -0
- package/vendor/node-api/src/vectors/DuckDBTimestampVector.ts +83 -0
- package/vendor/node-api/src/vectors/DuckDBTinyIntVector.ts +75 -0
- package/vendor/node-api/src/vectors/DuckDBTupleVector.ts +125 -0
- package/vendor/node-api/src/vectors/DuckDBUBigIntVector.ts +75 -0
- package/vendor/node-api/src/vectors/DuckDBUHugeIntVector.ts +89 -0
- package/vendor/node-api/src/vectors/DuckDBUIntegerVector.ts +75 -0
- package/vendor/node-api/src/vectors/DuckDBUSmallIntVector.ts +75 -0
- package/vendor/node-api/src/vectors/DuckDBUTinyIntVector.ts +75 -0
- package/vendor/node-api/src/vectors/DuckDBUUIDVector.ts +89 -0
- package/vendor/node-api/src/vectors/DuckDBUnionVector.ts +84 -0
- package/vendor/node-api/src/vectors/DuckDBValidity.ts +104 -0
- package/vendor/node-api/src/vectors/DuckDBVarCharVector.ts +100 -0
- package/vendor/node-api/src/vectors/DuckDBVariantVector.ts +609 -0
- package/vendor/node-api/src/vectors/DuckDBVector.ts +33 -0
- package/vendor/node-api/src/vectors/createVector.ts +269 -0
- package/vendor/node-api/src/vectors/dataAccessors.ts +387 -0
- package/vendor/node-api/src/vectors/index.ts +50 -0
- package/vendor/node-api/src/vectors/vectorRegistry.ts +24 -0
- package/vendor/node-api/src/version.ts +5 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import duckdb from "../../../../src/bindings/index.ts";
|
|
2
|
+
import {
|
|
3
|
+
DuckDBBitType,
|
|
4
|
+
} from '../DuckDBType';
|
|
5
|
+
import {
|
|
6
|
+
DuckDBBitValue,
|
|
7
|
+
} from '../values';
|
|
8
|
+
import { DuckDBVector } from './DuckDBVector';
|
|
9
|
+
import { DuckDBValidity } from './DuckDBValidity';
|
|
10
|
+
import {
|
|
11
|
+
getBuffer,
|
|
12
|
+
vectorData,
|
|
13
|
+
} from './dataAccessors';
|
|
14
|
+
|
|
15
|
+
export class DuckDBBitVector extends DuckDBVector<DuckDBBitValue> {
|
|
16
|
+
private readonly dataView: DataView;
|
|
17
|
+
private readonly validity: DuckDBValidity;
|
|
18
|
+
private readonly vector: duckdb.Vector;
|
|
19
|
+
private readonly itemOffset: number;
|
|
20
|
+
private readonly _itemCount: number;
|
|
21
|
+
private readonly itemCache: (DuckDBBitValue | null | undefined)[];
|
|
22
|
+
private readonly itemCacheDirty: boolean[];
|
|
23
|
+
constructor(
|
|
24
|
+
dataView: DataView,
|
|
25
|
+
validity: DuckDBValidity,
|
|
26
|
+
vector: duckdb.Vector,
|
|
27
|
+
itemOffset: number,
|
|
28
|
+
itemCount: number
|
|
29
|
+
) {
|
|
30
|
+
super();
|
|
31
|
+
this.dataView = dataView;
|
|
32
|
+
this.validity = validity;
|
|
33
|
+
this.vector = vector;
|
|
34
|
+
this.itemOffset = itemOffset;
|
|
35
|
+
this._itemCount = itemCount;
|
|
36
|
+
this.itemCache = [];
|
|
37
|
+
this.itemCacheDirty = [];
|
|
38
|
+
}
|
|
39
|
+
static fromRawVector(
|
|
40
|
+
vector: duckdb.Vector,
|
|
41
|
+
itemCount: number
|
|
42
|
+
): DuckDBBitVector {
|
|
43
|
+
const data = vectorData(vector, itemCount * 16);
|
|
44
|
+
const dataView = new DataView(
|
|
45
|
+
data.buffer,
|
|
46
|
+
data.byteOffset,
|
|
47
|
+
data.byteLength
|
|
48
|
+
);
|
|
49
|
+
const validity = DuckDBValidity.fromVector(vector, itemCount);
|
|
50
|
+
return new DuckDBBitVector(dataView, validity, vector, 0, itemCount);
|
|
51
|
+
}
|
|
52
|
+
public override get type(): DuckDBBitType {
|
|
53
|
+
return DuckDBBitType.instance;
|
|
54
|
+
}
|
|
55
|
+
public override get itemCount(): number {
|
|
56
|
+
return this._itemCount;
|
|
57
|
+
}
|
|
58
|
+
public override getItem(itemIndex: number): DuckDBBitValue | null {
|
|
59
|
+
if (!this.validity.itemValid(itemIndex)) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
// getBuffer rather than getStringBytes: the latter returns a view into the
|
|
63
|
+
// vector's memory for payloads of twelve bytes or fewer, and the value it is
|
|
64
|
+
// handed to keeps that reference, so it would dangle once the vector goes.
|
|
65
|
+
const bytes = getBuffer(this.dataView, itemIndex * 16);
|
|
66
|
+
return bytes ? new DuckDBBitValue(bytes) : null;
|
|
67
|
+
}
|
|
68
|
+
public override setItem(itemIndex: number, value: DuckDBBitValue | null) {
|
|
69
|
+
this.itemCache[itemIndex] = value;
|
|
70
|
+
this.validity.setItemValid(itemIndex, value != null);
|
|
71
|
+
this.itemCacheDirty[itemIndex] = true;
|
|
72
|
+
}
|
|
73
|
+
public override flush() {
|
|
74
|
+
for (let itemIndex = 0; itemIndex < this._itemCount; itemIndex++) {
|
|
75
|
+
if (this.itemCacheDirty[itemIndex]) {
|
|
76
|
+
const cachedItem = this.itemCache[itemIndex];
|
|
77
|
+
if (cachedItem !== undefined && cachedItem !== null) {
|
|
78
|
+
duckdb.vector_assign_string_element_len(
|
|
79
|
+
this.vector,
|
|
80
|
+
this.itemOffset + itemIndex,
|
|
81
|
+
cachedItem.data
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
this.itemCacheDirty[itemIndex] = false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
this.validity.flush(this.vector);
|
|
88
|
+
}
|
|
89
|
+
public override slice(offset: number, length: number): DuckDBBitVector {
|
|
90
|
+
return new DuckDBBitVector(
|
|
91
|
+
new DataView(
|
|
92
|
+
this.dataView.buffer,
|
|
93
|
+
this.dataView.byteOffset + offset * 16,
|
|
94
|
+
length * 16
|
|
95
|
+
),
|
|
96
|
+
this.validity.slice(offset, length),
|
|
97
|
+
this.vector,
|
|
98
|
+
offset,
|
|
99
|
+
length
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import duckdb from "../../../../src/bindings/index.ts";
|
|
2
|
+
import {
|
|
3
|
+
DuckDBBlobType,
|
|
4
|
+
} from '../DuckDBType';
|
|
5
|
+
import {
|
|
6
|
+
DuckDBBlobValue,
|
|
7
|
+
} from '../values';
|
|
8
|
+
import { DuckDBVector } from './DuckDBVector';
|
|
9
|
+
import { DuckDBValidity } from './DuckDBValidity';
|
|
10
|
+
import {
|
|
11
|
+
getBuffer,
|
|
12
|
+
getStringBytes,
|
|
13
|
+
vectorData,
|
|
14
|
+
} from './dataAccessors';
|
|
15
|
+
|
|
16
|
+
export class DuckDBBlobVector extends DuckDBVector<DuckDBBlobValue> {
|
|
17
|
+
private readonly dataView: DataView;
|
|
18
|
+
private readonly validity: DuckDBValidity;
|
|
19
|
+
private readonly vector: duckdb.Vector;
|
|
20
|
+
private readonly itemOffset: number;
|
|
21
|
+
private readonly _itemCount: number;
|
|
22
|
+
private readonly itemCache: (DuckDBBlobValue | null | undefined)[];
|
|
23
|
+
private readonly itemCacheDirty: boolean[];
|
|
24
|
+
constructor(
|
|
25
|
+
dataView: DataView,
|
|
26
|
+
validity: DuckDBValidity,
|
|
27
|
+
vector: duckdb.Vector,
|
|
28
|
+
itemOffset: number,
|
|
29
|
+
itemCount: number
|
|
30
|
+
) {
|
|
31
|
+
super();
|
|
32
|
+
this.dataView = dataView;
|
|
33
|
+
this.validity = validity;
|
|
34
|
+
this.vector = vector;
|
|
35
|
+
this.itemOffset = itemOffset;
|
|
36
|
+
this._itemCount = itemCount;
|
|
37
|
+
this.itemCache = [];
|
|
38
|
+
this.itemCacheDirty = [];
|
|
39
|
+
}
|
|
40
|
+
static fromRawVector(
|
|
41
|
+
vector: duckdb.Vector,
|
|
42
|
+
itemCount: number
|
|
43
|
+
): DuckDBBlobVector {
|
|
44
|
+
const data = vectorData(vector, itemCount * 16);
|
|
45
|
+
const dataView = new DataView(
|
|
46
|
+
data.buffer,
|
|
47
|
+
data.byteOffset,
|
|
48
|
+
data.byteLength
|
|
49
|
+
);
|
|
50
|
+
const validity = DuckDBValidity.fromVector(vector, itemCount);
|
|
51
|
+
return new DuckDBBlobVector(dataView, validity, vector, 0, itemCount);
|
|
52
|
+
}
|
|
53
|
+
public override get type(): DuckDBBlobType {
|
|
54
|
+
return DuckDBBlobType.instance;
|
|
55
|
+
}
|
|
56
|
+
public override get itemCount(): number {
|
|
57
|
+
return this._itemCount;
|
|
58
|
+
}
|
|
59
|
+
public override getItem(itemIndex: number): DuckDBBlobValue | null {
|
|
60
|
+
return this.validity.itemValid(itemIndex)
|
|
61
|
+
? new DuckDBBlobValue(getBuffer(this.dataView, itemIndex * 16))
|
|
62
|
+
: null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Returns the raw bytes for the item at `itemIndex`, or null if the item
|
|
66
|
+
* is SQL NULL. Avoids the `Buffer.from(...)` copy that `getItem` does.
|
|
67
|
+
*
|
|
68
|
+
* The returned `Uint8Array` is a view over the underlying string_t
|
|
69
|
+
* backing buffer for inline payloads (≤12 bytes); for larger payloads
|
|
70
|
+
* it's a fresh allocation returned by the native bindings. Treat the
|
|
71
|
+
* result as read-only either way.
|
|
72
|
+
*/
|
|
73
|
+
public getItemBytes(itemIndex: number): Uint8Array | null {
|
|
74
|
+
return this.validity.itemValid(itemIndex)
|
|
75
|
+
? getStringBytes(this.dataView, itemIndex * 16)
|
|
76
|
+
: null;
|
|
77
|
+
}
|
|
78
|
+
public override setItem(itemIndex: number, value: DuckDBBlobValue | null) {
|
|
79
|
+
this.itemCache[itemIndex] = value;
|
|
80
|
+
this.validity.setItemValid(itemIndex, value != null);
|
|
81
|
+
this.itemCacheDirty[itemIndex] = true;
|
|
82
|
+
}
|
|
83
|
+
public override flush() {
|
|
84
|
+
for (let itemIndex = 0; itemIndex < this._itemCount; itemIndex++) {
|
|
85
|
+
if (this.itemCacheDirty[itemIndex]) {
|
|
86
|
+
const cachedItem = this.itemCache[itemIndex];
|
|
87
|
+
if (cachedItem !== undefined && cachedItem !== null) {
|
|
88
|
+
duckdb.vector_assign_string_element_len(
|
|
89
|
+
this.vector,
|
|
90
|
+
this.itemOffset + itemIndex,
|
|
91
|
+
cachedItem.bytes
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
this.itemCacheDirty[itemIndex] = false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
this.validity.flush(this.vector);
|
|
98
|
+
}
|
|
99
|
+
public override slice(offset: number, length: number): DuckDBBlobVector {
|
|
100
|
+
return new DuckDBBlobVector(
|
|
101
|
+
new DataView(
|
|
102
|
+
this.dataView.buffer,
|
|
103
|
+
this.dataView.byteOffset + offset * 16,
|
|
104
|
+
length * 16
|
|
105
|
+
),
|
|
106
|
+
this.validity.slice(offset, length),
|
|
107
|
+
this.vector,
|
|
108
|
+
offset,
|
|
109
|
+
length
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import duckdb from "../../../../src/bindings/index.ts";
|
|
2
|
+
import {
|
|
3
|
+
DuckDBBooleanType,
|
|
4
|
+
} from '../DuckDBType';
|
|
5
|
+
import { DuckDBVector } from './DuckDBVector';
|
|
6
|
+
import { DuckDBValidity } from './DuckDBValidity';
|
|
7
|
+
import {
|
|
8
|
+
getBoolean,
|
|
9
|
+
setBoolean,
|
|
10
|
+
vectorData,
|
|
11
|
+
} from './dataAccessors';
|
|
12
|
+
|
|
13
|
+
export class DuckDBBooleanVector extends DuckDBVector<boolean> {
|
|
14
|
+
private readonly dataView: DataView;
|
|
15
|
+
private readonly validity: DuckDBValidity;
|
|
16
|
+
private readonly vector: duckdb.Vector;
|
|
17
|
+
private readonly _itemCount: number;
|
|
18
|
+
constructor(
|
|
19
|
+
dataView: DataView,
|
|
20
|
+
validity: DuckDBValidity,
|
|
21
|
+
vector: duckdb.Vector,
|
|
22
|
+
itemCount: number
|
|
23
|
+
) {
|
|
24
|
+
super();
|
|
25
|
+
this.dataView = dataView;
|
|
26
|
+
this.validity = validity;
|
|
27
|
+
this.vector = vector;
|
|
28
|
+
this._itemCount = itemCount;
|
|
29
|
+
}
|
|
30
|
+
static fromRawVector(
|
|
31
|
+
vector: duckdb.Vector,
|
|
32
|
+
itemCount: number
|
|
33
|
+
): DuckDBBooleanVector {
|
|
34
|
+
const data = vectorData(vector, itemCount * duckdb.sizeof_bool);
|
|
35
|
+
const dataView = new DataView(
|
|
36
|
+
data.buffer,
|
|
37
|
+
data.byteOffset,
|
|
38
|
+
data.byteLength
|
|
39
|
+
);
|
|
40
|
+
const validity = DuckDBValidity.fromVector(vector, itemCount);
|
|
41
|
+
return new DuckDBBooleanVector(dataView, validity, vector, itemCount);
|
|
42
|
+
}
|
|
43
|
+
public override get type(): DuckDBBooleanType {
|
|
44
|
+
return DuckDBBooleanType.instance;
|
|
45
|
+
}
|
|
46
|
+
public override get itemCount(): number {
|
|
47
|
+
return this._itemCount;
|
|
48
|
+
}
|
|
49
|
+
public override getItem(itemIndex: number): boolean | null {
|
|
50
|
+
return this.validity.itemValid(itemIndex)
|
|
51
|
+
? getBoolean(this.dataView, itemIndex * duckdb.sizeof_bool)
|
|
52
|
+
: null;
|
|
53
|
+
}
|
|
54
|
+
public override setItem(itemIndex: number, value: boolean | null) {
|
|
55
|
+
if (value != null) {
|
|
56
|
+
setBoolean(this.dataView, itemIndex * duckdb.sizeof_bool, value);
|
|
57
|
+
this.validity.setItemValid(itemIndex, true);
|
|
58
|
+
} else {
|
|
59
|
+
this.validity.setItemValid(itemIndex, false);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
public override flush() {
|
|
63
|
+
duckdb.copy_data_to_vector(
|
|
64
|
+
this.vector,
|
|
65
|
+
0,
|
|
66
|
+
this.dataView.buffer as ArrayBuffer,
|
|
67
|
+
this.dataView.byteOffset,
|
|
68
|
+
this.dataView.byteLength
|
|
69
|
+
);
|
|
70
|
+
this.validity.flush(this.vector);
|
|
71
|
+
}
|
|
72
|
+
public override slice(offset: number, length: number): DuckDBBooleanVector {
|
|
73
|
+
return new DuckDBBooleanVector(
|
|
74
|
+
new DataView(
|
|
75
|
+
this.dataView.buffer,
|
|
76
|
+
this.dataView.byteOffset + offset * duckdb.sizeof_bool,
|
|
77
|
+
length * duckdb.sizeof_bool
|
|
78
|
+
),
|
|
79
|
+
this.validity.slice(offset, length),
|
|
80
|
+
this.vector,
|
|
81
|
+
length
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import duckdb from "../../../../src/bindings/index.ts";
|
|
2
|
+
import {
|
|
3
|
+
DuckDBDateType,
|
|
4
|
+
} from '../DuckDBType';
|
|
5
|
+
import {
|
|
6
|
+
DuckDBDateValue,
|
|
7
|
+
} from '../values';
|
|
8
|
+
import { DuckDBVector } from './DuckDBVector';
|
|
9
|
+
import { DuckDBValidity } from './DuckDBValidity';
|
|
10
|
+
import {
|
|
11
|
+
vectorData,
|
|
12
|
+
} from './dataAccessors';
|
|
13
|
+
|
|
14
|
+
export class DuckDBDateVector extends DuckDBVector<DuckDBDateValue> {
|
|
15
|
+
private readonly items: Int32Array;
|
|
16
|
+
private readonly validity: DuckDBValidity;
|
|
17
|
+
private readonly vector: duckdb.Vector;
|
|
18
|
+
constructor(
|
|
19
|
+
items: Int32Array,
|
|
20
|
+
validity: DuckDBValidity,
|
|
21
|
+
vector: duckdb.Vector
|
|
22
|
+
) {
|
|
23
|
+
super();
|
|
24
|
+
this.items = items;
|
|
25
|
+
this.validity = validity;
|
|
26
|
+
this.vector = vector;
|
|
27
|
+
}
|
|
28
|
+
static fromRawVector(
|
|
29
|
+
vector: duckdb.Vector,
|
|
30
|
+
itemCount: number
|
|
31
|
+
): DuckDBDateVector {
|
|
32
|
+
const data = vectorData(vector, itemCount * Int32Array.BYTES_PER_ELEMENT);
|
|
33
|
+
const items = new Int32Array(data.buffer, data.byteOffset, itemCount);
|
|
34
|
+
const validity = DuckDBValidity.fromVector(vector, itemCount);
|
|
35
|
+
return new DuckDBDateVector(items, validity, vector);
|
|
36
|
+
}
|
|
37
|
+
public override get type(): DuckDBDateType {
|
|
38
|
+
return DuckDBDateType.instance;
|
|
39
|
+
}
|
|
40
|
+
public override get itemCount(): number {
|
|
41
|
+
return this.items.length;
|
|
42
|
+
}
|
|
43
|
+
public override getItem(itemIndex: number): DuckDBDateValue | null {
|
|
44
|
+
return this.validity.itemValid(itemIndex)
|
|
45
|
+
? new DuckDBDateValue(this.items[itemIndex])
|
|
46
|
+
: null;
|
|
47
|
+
}
|
|
48
|
+
public override setItem(itemIndex: number, value: DuckDBDateValue | null) {
|
|
49
|
+
if (value != null) {
|
|
50
|
+
// Checked inline for bulk-write throughput; see dataAccessors.ts.
|
|
51
|
+
if (!Number.isInteger(value.days)) {
|
|
52
|
+
throw new Error(`number is not an integer`);
|
|
53
|
+
}
|
|
54
|
+
if (value.days < -2147483648 || value.days > 2147483647) {
|
|
55
|
+
throw new Error(`number out of int32 range`);
|
|
56
|
+
}
|
|
57
|
+
this.items[itemIndex] = value.days;
|
|
58
|
+
this.validity.setItemValid(itemIndex, true);
|
|
59
|
+
} else {
|
|
60
|
+
this.validity.setItemValid(itemIndex, false);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
public override flush() {
|
|
64
|
+
duckdb.copy_data_to_vector(
|
|
65
|
+
this.vector,
|
|
66
|
+
0,
|
|
67
|
+
this.items.buffer as ArrayBuffer,
|
|
68
|
+
this.items.byteOffset,
|
|
69
|
+
this.items.byteLength
|
|
70
|
+
);
|
|
71
|
+
this.validity.flush(this.vector);
|
|
72
|
+
}
|
|
73
|
+
public override slice(offset: number, length: number): DuckDBDateVector {
|
|
74
|
+
return new DuckDBDateVector(
|
|
75
|
+
this.items.slice(offset, offset + length),
|
|
76
|
+
this.validity.slice(offset, length),
|
|
77
|
+
this.vector
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import duckdb from "../../../../src/bindings/index.ts";
|
|
2
|
+
import {
|
|
3
|
+
DuckDBDecimalType,
|
|
4
|
+
} from '../DuckDBType';
|
|
5
|
+
import {
|
|
6
|
+
DuckDBDecimalValue,
|
|
7
|
+
} from '../values';
|
|
8
|
+
import { DuckDBVector } from './DuckDBVector';
|
|
9
|
+
import { DuckDBValidity } from './DuckDBValidity';
|
|
10
|
+
import {
|
|
11
|
+
getDecimal128,
|
|
12
|
+
getInt128,
|
|
13
|
+
setInt128,
|
|
14
|
+
vectorData,
|
|
15
|
+
} from './dataAccessors';
|
|
16
|
+
|
|
17
|
+
export class DuckDBDecimal128Vector extends DuckDBVector<DuckDBDecimalValue> {
|
|
18
|
+
private readonly decimalType: DuckDBDecimalType;
|
|
19
|
+
private readonly dataView: DataView;
|
|
20
|
+
private readonly validity: DuckDBValidity;
|
|
21
|
+
private readonly vector: duckdb.Vector;
|
|
22
|
+
private readonly _itemCount: number;
|
|
23
|
+
constructor(
|
|
24
|
+
decimalType: DuckDBDecimalType,
|
|
25
|
+
dataView: DataView,
|
|
26
|
+
validity: DuckDBValidity,
|
|
27
|
+
vector: duckdb.Vector,
|
|
28
|
+
itemCount: number
|
|
29
|
+
) {
|
|
30
|
+
super();
|
|
31
|
+
this.decimalType = decimalType;
|
|
32
|
+
this.dataView = dataView;
|
|
33
|
+
this.validity = validity;
|
|
34
|
+
this.vector = vector;
|
|
35
|
+
this._itemCount = itemCount;
|
|
36
|
+
}
|
|
37
|
+
static fromRawVector(
|
|
38
|
+
decimalType: DuckDBDecimalType,
|
|
39
|
+
vector: duckdb.Vector,
|
|
40
|
+
itemCount: number
|
|
41
|
+
): DuckDBDecimal128Vector {
|
|
42
|
+
const data = vectorData(vector, itemCount * 16);
|
|
43
|
+
const dataView = new DataView(
|
|
44
|
+
data.buffer,
|
|
45
|
+
data.byteOffset,
|
|
46
|
+
data.byteLength
|
|
47
|
+
);
|
|
48
|
+
const validity = DuckDBValidity.fromVector(vector, itemCount);
|
|
49
|
+
return new DuckDBDecimal128Vector(
|
|
50
|
+
decimalType,
|
|
51
|
+
dataView,
|
|
52
|
+
validity,
|
|
53
|
+
vector,
|
|
54
|
+
itemCount
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
public override get type(): DuckDBDecimalType {
|
|
58
|
+
return this.decimalType;
|
|
59
|
+
}
|
|
60
|
+
public override get itemCount(): number {
|
|
61
|
+
return this._itemCount;
|
|
62
|
+
}
|
|
63
|
+
public override getItem(itemIndex: number): DuckDBDecimalValue | null {
|
|
64
|
+
return this.validity.itemValid(itemIndex)
|
|
65
|
+
? getDecimal128(this.dataView, itemIndex * 16, this.decimalType)
|
|
66
|
+
: null;
|
|
67
|
+
}
|
|
68
|
+
public getScaledValue(itemIndex: number): bigint | null {
|
|
69
|
+
return this.validity.itemValid(itemIndex)
|
|
70
|
+
? getInt128(this.dataView, itemIndex * 16)
|
|
71
|
+
: null;
|
|
72
|
+
}
|
|
73
|
+
public override setItem(itemIndex: number, value: DuckDBDecimalValue | null) {
|
|
74
|
+
if (value != null) {
|
|
75
|
+
setInt128(this.dataView, itemIndex * 16, value.value);
|
|
76
|
+
this.validity.setItemValid(itemIndex, true);
|
|
77
|
+
} else {
|
|
78
|
+
this.validity.setItemValid(itemIndex, false);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
public override flush() {
|
|
82
|
+
duckdb.copy_data_to_vector(
|
|
83
|
+
this.vector,
|
|
84
|
+
0,
|
|
85
|
+
this.dataView.buffer as ArrayBuffer,
|
|
86
|
+
this.dataView.byteOffset,
|
|
87
|
+
this.dataView.byteLength
|
|
88
|
+
);
|
|
89
|
+
this.validity.flush(this.vector);
|
|
90
|
+
}
|
|
91
|
+
public override slice(
|
|
92
|
+
offset: number,
|
|
93
|
+
length: number
|
|
94
|
+
): DuckDBDecimal128Vector {
|
|
95
|
+
return new DuckDBDecimal128Vector(
|
|
96
|
+
this.decimalType,
|
|
97
|
+
new DataView(
|
|
98
|
+
this.dataView.buffer,
|
|
99
|
+
this.dataView.byteOffset + offset * 16,
|
|
100
|
+
length * 16
|
|
101
|
+
),
|
|
102
|
+
this.validity.slice(offset, length),
|
|
103
|
+
this.vector,
|
|
104
|
+
length
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import duckdb from "../../../../src/bindings/index.ts";
|
|
2
|
+
import {
|
|
3
|
+
DuckDBDecimalType,
|
|
4
|
+
} from '../DuckDBType';
|
|
5
|
+
import {
|
|
6
|
+
DuckDBDecimalValue,
|
|
7
|
+
} from '../values';
|
|
8
|
+
import { DuckDBVector } from './DuckDBVector';
|
|
9
|
+
import { DuckDBValidity } from './DuckDBValidity';
|
|
10
|
+
import {
|
|
11
|
+
getDecimal16,
|
|
12
|
+
getInt16,
|
|
13
|
+
setInt16,
|
|
14
|
+
vectorData,
|
|
15
|
+
} from './dataAccessors';
|
|
16
|
+
|
|
17
|
+
export class DuckDBDecimal16Vector extends DuckDBVector<DuckDBDecimalValue> {
|
|
18
|
+
private readonly decimalType: DuckDBDecimalType;
|
|
19
|
+
private readonly dataView: DataView;
|
|
20
|
+
private readonly validity: DuckDBValidity;
|
|
21
|
+
private readonly vector: duckdb.Vector;
|
|
22
|
+
private readonly _itemCount: number;
|
|
23
|
+
constructor(
|
|
24
|
+
decimalType: DuckDBDecimalType,
|
|
25
|
+
dataView: DataView,
|
|
26
|
+
validity: DuckDBValidity,
|
|
27
|
+
vector: duckdb.Vector,
|
|
28
|
+
itemCount: number
|
|
29
|
+
) {
|
|
30
|
+
super();
|
|
31
|
+
this.decimalType = decimalType;
|
|
32
|
+
this.dataView = dataView;
|
|
33
|
+
this.validity = validity;
|
|
34
|
+
this.vector = vector;
|
|
35
|
+
this._itemCount = itemCount;
|
|
36
|
+
}
|
|
37
|
+
static fromRawVector(
|
|
38
|
+
decimalType: DuckDBDecimalType,
|
|
39
|
+
vector: duckdb.Vector,
|
|
40
|
+
itemCount: number
|
|
41
|
+
): DuckDBDecimal16Vector {
|
|
42
|
+
const data = vectorData(vector, itemCount * 2);
|
|
43
|
+
const dataView = new DataView(
|
|
44
|
+
data.buffer,
|
|
45
|
+
data.byteOffset,
|
|
46
|
+
data.byteLength
|
|
47
|
+
);
|
|
48
|
+
const validity = DuckDBValidity.fromVector(vector, itemCount);
|
|
49
|
+
return new DuckDBDecimal16Vector(
|
|
50
|
+
decimalType,
|
|
51
|
+
dataView,
|
|
52
|
+
validity,
|
|
53
|
+
vector,
|
|
54
|
+
itemCount
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
public override get type(): DuckDBDecimalType {
|
|
58
|
+
return this.decimalType;
|
|
59
|
+
}
|
|
60
|
+
public override get itemCount(): number {
|
|
61
|
+
return this._itemCount;
|
|
62
|
+
}
|
|
63
|
+
public override getItem(itemIndex: number): DuckDBDecimalValue | null {
|
|
64
|
+
return this.validity.itemValid(itemIndex)
|
|
65
|
+
? getDecimal16(this.dataView, itemIndex * 2, this.decimalType)
|
|
66
|
+
: null;
|
|
67
|
+
}
|
|
68
|
+
public getScaledValue(itemIndex: number): number | null {
|
|
69
|
+
return this.validity.itemValid(itemIndex)
|
|
70
|
+
? getInt16(this.dataView, itemIndex * 2)
|
|
71
|
+
: null;
|
|
72
|
+
}
|
|
73
|
+
public override setItem(itemIndex: number, value: DuckDBDecimalValue | null) {
|
|
74
|
+
if (value != null) {
|
|
75
|
+
setInt16(this.dataView, itemIndex * 2, Number(value.value));
|
|
76
|
+
this.validity.setItemValid(itemIndex, true);
|
|
77
|
+
} else {
|
|
78
|
+
this.validity.setItemValid(itemIndex, false);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
public override flush() {
|
|
82
|
+
duckdb.copy_data_to_vector(
|
|
83
|
+
this.vector,
|
|
84
|
+
0,
|
|
85
|
+
this.dataView.buffer as ArrayBuffer,
|
|
86
|
+
this.dataView.byteOffset,
|
|
87
|
+
this.dataView.byteLength
|
|
88
|
+
);
|
|
89
|
+
this.validity.flush(this.vector);
|
|
90
|
+
}
|
|
91
|
+
public override slice(offset: number, length: number): DuckDBDecimal16Vector {
|
|
92
|
+
return new DuckDBDecimal16Vector(
|
|
93
|
+
this.decimalType,
|
|
94
|
+
new DataView(
|
|
95
|
+
this.dataView.buffer,
|
|
96
|
+
this.dataView.byteOffset + offset * 2,
|
|
97
|
+
length * 2
|
|
98
|
+
),
|
|
99
|
+
this.validity.slice(offset, length),
|
|
100
|
+
this.vector,
|
|
101
|
+
length
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import duckdb from "../../../../src/bindings/index.ts";
|
|
2
|
+
import {
|
|
3
|
+
DuckDBDecimalType,
|
|
4
|
+
} from '../DuckDBType';
|
|
5
|
+
import {
|
|
6
|
+
DuckDBDecimalValue,
|
|
7
|
+
} from '../values';
|
|
8
|
+
import { DuckDBVector } from './DuckDBVector';
|
|
9
|
+
import { DuckDBValidity } from './DuckDBValidity';
|
|
10
|
+
import {
|
|
11
|
+
getDecimal32,
|
|
12
|
+
getInt32,
|
|
13
|
+
setInt32,
|
|
14
|
+
vectorData,
|
|
15
|
+
} from './dataAccessors';
|
|
16
|
+
|
|
17
|
+
export class DuckDBDecimal32Vector extends DuckDBVector<DuckDBDecimalValue> {
|
|
18
|
+
private readonly decimalType: DuckDBDecimalType;
|
|
19
|
+
private readonly dataView: DataView;
|
|
20
|
+
private readonly validity: DuckDBValidity;
|
|
21
|
+
private readonly vector: duckdb.Vector;
|
|
22
|
+
private readonly _itemCount: number;
|
|
23
|
+
constructor(
|
|
24
|
+
decimalType: DuckDBDecimalType,
|
|
25
|
+
dataView: DataView,
|
|
26
|
+
validity: DuckDBValidity,
|
|
27
|
+
vector: duckdb.Vector,
|
|
28
|
+
itemCount: number
|
|
29
|
+
) {
|
|
30
|
+
super();
|
|
31
|
+
this.decimalType = decimalType;
|
|
32
|
+
this.dataView = dataView;
|
|
33
|
+
this.validity = validity;
|
|
34
|
+
this.vector = vector;
|
|
35
|
+
this._itemCount = itemCount;
|
|
36
|
+
}
|
|
37
|
+
static fromRawVector(
|
|
38
|
+
decimalType: DuckDBDecimalType,
|
|
39
|
+
vector: duckdb.Vector,
|
|
40
|
+
itemCount: number
|
|
41
|
+
): DuckDBDecimal32Vector {
|
|
42
|
+
const data = vectorData(vector, itemCount * 4);
|
|
43
|
+
const dataView = new DataView(
|
|
44
|
+
data.buffer,
|
|
45
|
+
data.byteOffset,
|
|
46
|
+
data.byteLength
|
|
47
|
+
);
|
|
48
|
+
const validity = DuckDBValidity.fromVector(vector, itemCount);
|
|
49
|
+
return new DuckDBDecimal32Vector(
|
|
50
|
+
decimalType,
|
|
51
|
+
dataView,
|
|
52
|
+
validity,
|
|
53
|
+
vector,
|
|
54
|
+
itemCount
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
public override get type(): DuckDBDecimalType {
|
|
58
|
+
return this.decimalType;
|
|
59
|
+
}
|
|
60
|
+
public override get itemCount(): number {
|
|
61
|
+
return this._itemCount;
|
|
62
|
+
}
|
|
63
|
+
public override getItem(itemIndex: number): DuckDBDecimalValue | null {
|
|
64
|
+
return this.validity.itemValid(itemIndex)
|
|
65
|
+
? getDecimal32(this.dataView, itemIndex * 4, this.decimalType)
|
|
66
|
+
: null;
|
|
67
|
+
}
|
|
68
|
+
public getScaledValue(itemIndex: number): number | null {
|
|
69
|
+
return this.validity.itemValid(itemIndex)
|
|
70
|
+
? getInt32(this.dataView, itemIndex * 4)
|
|
71
|
+
: null;
|
|
72
|
+
}
|
|
73
|
+
public override setItem(itemIndex: number, value: DuckDBDecimalValue | null) {
|
|
74
|
+
if (value != null) {
|
|
75
|
+
setInt32(this.dataView, itemIndex * 4, Number(value.value));
|
|
76
|
+
this.validity.setItemValid(itemIndex, true);
|
|
77
|
+
} else {
|
|
78
|
+
this.validity.setItemValid(itemIndex, false);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
public override flush() {
|
|
82
|
+
duckdb.copy_data_to_vector(
|
|
83
|
+
this.vector,
|
|
84
|
+
0,
|
|
85
|
+
this.dataView.buffer as ArrayBuffer,
|
|
86
|
+
this.dataView.byteOffset,
|
|
87
|
+
this.dataView.byteLength
|
|
88
|
+
);
|
|
89
|
+
this.validity.flush(this.vector);
|
|
90
|
+
}
|
|
91
|
+
public override slice(offset: number, length: number): DuckDBDecimal32Vector {
|
|
92
|
+
return new DuckDBDecimal32Vector(
|
|
93
|
+
this.decimalType,
|
|
94
|
+
new DataView(
|
|
95
|
+
this.dataView.buffer,
|
|
96
|
+
this.dataView.byteOffset + offset * 4,
|
|
97
|
+
length * 4
|
|
98
|
+
),
|
|
99
|
+
this.validity.slice(offset, length),
|
|
100
|
+
this.vector,
|
|
101
|
+
length
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
}
|