@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.
Files changed (231) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +286 -2
  3. package/package.json +96 -4
  4. package/src/bindings/api/appender.ts +288 -0
  5. package/src/bindings/api/data-chunk.ts +58 -0
  6. package/src/bindings/api/database.ts +232 -0
  7. package/src/bindings/api/datetime.ts +158 -0
  8. package/src/bindings/api/index.ts +13 -0
  9. package/src/bindings/api/logical-types.ts +227 -0
  10. package/src/bindings/api/query.ts +616 -0
  11. package/src/bindings/api/scalar-function.ts +274 -0
  12. package/src/bindings/api/table-function.ts +339 -0
  13. package/src/bindings/api/values.ts +546 -0
  14. package/src/bindings/api/vector.ts +266 -0
  15. package/src/bindings/generated/capi.ts +695 -0
  16. package/src/bindings/generated/contract.ts +162 -0
  17. package/src/bindings/index.ts +10 -0
  18. package/src/bindings/runtime/convert.ts +307 -0
  19. package/src/bindings/runtime/diagnostics.ts +45 -0
  20. package/src/bindings/runtime/dispatch.ts +213 -0
  21. package/src/bindings/runtime/exception.ts +103 -0
  22. package/src/bindings/runtime/flags.ts +19 -0
  23. package/src/bindings/runtime/handle.ts +217 -0
  24. package/src/bindings/runtime/kinds.ts +53 -0
  25. package/src/bindings/runtime/marshal.ts +190 -0
  26. package/src/bindings/runtime/native.ts +153 -0
  27. package/src/bindings/runtime/ring.ts +54 -0
  28. package/src/bindings/runtime/scope.ts +133 -0
  29. package/src/bindings/runtime/trace.ts +65 -0
  30. package/src/connection.ts +35 -0
  31. package/src/database.ts +27 -0
  32. package/src/errors.ts +30 -0
  33. package/src/file-assets.d.ts +10 -0
  34. package/src/index.ts +17 -0
  35. package/src/library.ts +83 -0
  36. package/src/neo.ts +16 -0
  37. package/src/reader.ts +47 -0
  38. package/src/statement.ts +61 -0
  39. package/src/types.ts +52 -0
  40. package/src/version.ts +6 -0
  41. package/vendor/node-api/LICENSE +7 -0
  42. package/vendor/node-api/PROVENANCE.md +54 -0
  43. package/vendor/node-api/node-bindings.d.ts +1669 -0
  44. package/vendor/node-api/src/DuckDBAppender.ts +237 -0
  45. package/vendor/node-api/src/DuckDBClientContext.ts +13 -0
  46. package/vendor/node-api/src/DuckDBConnection.ts +315 -0
  47. package/vendor/node-api/src/DuckDBDataChunk.ts +412 -0
  48. package/vendor/node-api/src/DuckDBDataChunkWriter.ts +144 -0
  49. package/vendor/node-api/src/DuckDBExtractedStatements.ts +37 -0
  50. package/vendor/node-api/src/DuckDBInstance.ts +35 -0
  51. package/vendor/node-api/src/DuckDBInstanceCache.ts +29 -0
  52. package/vendor/node-api/src/DuckDBLogicalType.ts +446 -0
  53. package/vendor/node-api/src/DuckDBMaterializedResult.ts +39 -0
  54. package/vendor/node-api/src/DuckDBPendingResult.ts +83 -0
  55. package/vendor/node-api/src/DuckDBPreparedStatement.ts +376 -0
  56. package/vendor/node-api/src/DuckDBPreparedStatementCollection.ts +5 -0
  57. package/vendor/node-api/src/DuckDBPreparedStatementWeakRefCollection.ts +31 -0
  58. package/vendor/node-api/src/DuckDBResult.ts +403 -0
  59. package/vendor/node-api/src/DuckDBResultReader.ts +283 -0
  60. package/vendor/node-api/src/DuckDBScalarFunction.ts +149 -0
  61. package/vendor/node-api/src/DuckDBScalarFunctionBindInfo.ts +34 -0
  62. package/vendor/node-api/src/DuckDBScalarFunctionInfo.ts +34 -0
  63. package/vendor/node-api/src/DuckDBScalarFunctionInitInfo.ts +35 -0
  64. package/vendor/node-api/src/DuckDBTableFunction.ts +149 -0
  65. package/vendor/node-api/src/DuckDBTableFunctionBindInfo.ts +56 -0
  66. package/vendor/node-api/src/DuckDBTableFunctionInfo.ts +36 -0
  67. package/vendor/node-api/src/DuckDBTableFunctionInitInfo.ts +52 -0
  68. package/vendor/node-api/src/DuckDBType.ts +1 -0
  69. package/vendor/node-api/src/DuckDBTypeId.ts +46 -0
  70. package/vendor/node-api/src/DuckDBValueConverter.ts +23 -0
  71. package/vendor/node-api/src/DuckDBValueConverters.ts +461 -0
  72. package/vendor/node-api/src/DuckDBVector.ts +1 -0
  73. package/vendor/node-api/src/JS.ts +11 -0
  74. package/vendor/node-api/src/JSDuckDBValueConverter.ts +85 -0
  75. package/vendor/node-api/src/JSInputTypeForTypeId.ts +101 -0
  76. package/vendor/node-api/src/JSToDuckDBValueConverter.ts +136 -0
  77. package/vendor/node-api/src/JSTypeForTypeId.ts +78 -0
  78. package/vendor/node-api/src/Json.ts +7 -0
  79. package/vendor/node-api/src/JsonDuckDBValueConverter.ts +72 -0
  80. package/vendor/node-api/src/JsonTypeForTypeId.ts +86 -0
  81. package/vendor/node-api/src/ToDuckDBValueConverter.ts +68 -0
  82. package/vendor/node-api/src/ToDuckDBValueConverters.ts +303 -0
  83. package/vendor/node-api/src/configurationOptionDescriptions.ts +13 -0
  84. package/vendor/node-api/src/conversion/bytesFromString.ts +5 -0
  85. package/vendor/node-api/src/conversion/dateTimeStringConversion.ts +343 -0
  86. package/vendor/node-api/src/conversion/displayStringForDuckDBValue.ts +12 -0
  87. package/vendor/node-api/src/conversion/stringFromBlob.ts +48 -0
  88. package/vendor/node-api/src/conversion/stringFromDecimal.ts +129 -0
  89. package/vendor/node-api/src/conversion/varintDecode.ts +42 -0
  90. package/vendor/node-api/src/convertColumnsFromChunks.ts +28 -0
  91. package/vendor/node-api/src/convertColumnsObjectFromChunks.ts +29 -0
  92. package/vendor/node-api/src/convertRowObjectsFromChunks.ts +21 -0
  93. package/vendor/node-api/src/convertRowsFromChunks.ts +16 -0
  94. package/vendor/node-api/src/createConfig.ts +14 -0
  95. package/vendor/node-api/src/createDuckDBValueConverter.ts +17 -0
  96. package/vendor/node-api/src/createResult.ts +15 -0
  97. package/vendor/node-api/src/createValue.ts +355 -0
  98. package/vendor/node-api/src/duckdb.ts +51 -0
  99. package/vendor/node-api/src/enums.ts +7 -0
  100. package/vendor/node-api/src/getColumnsFromChunks.ts +13 -0
  101. package/vendor/node-api/src/getColumnsObjectFromChunks.ts +16 -0
  102. package/vendor/node-api/src/getRowObjectsFromChunks.ts +13 -0
  103. package/vendor/node-api/src/getRowsFromChunks.ts +12 -0
  104. package/vendor/node-api/src/index.ts +3 -0
  105. package/vendor/node-api/src/readValue.ts +31 -0
  106. package/vendor/node-api/src/sleep.ts +5 -0
  107. package/vendor/node-api/src/sql.ts +7 -0
  108. package/vendor/node-api/src/tsconfig.json +7 -0
  109. package/vendor/node-api/src/typeForValue.ts +144 -0
  110. package/vendor/node-api/src/types/BaseDuckDBType.ts +31 -0
  111. package/vendor/node-api/src/types/DuckDBAnyType.ts +13 -0
  112. package/vendor/node-api/src/types/DuckDBArrayType.ts +43 -0
  113. package/vendor/node-api/src/types/DuckDBBigIntType.ts +21 -0
  114. package/vendor/node-api/src/types/DuckDBBigNumType.ts +21 -0
  115. package/vendor/node-api/src/types/DuckDBBitType.ts +13 -0
  116. package/vendor/node-api/src/types/DuckDBBlobType.ts +13 -0
  117. package/vendor/node-api/src/types/DuckDBBooleanType.ts +13 -0
  118. package/vendor/node-api/src/types/DuckDBDateType.ts +29 -0
  119. package/vendor/node-api/src/types/DuckDBDecimalType.ts +46 -0
  120. package/vendor/node-api/src/types/DuckDBDoubleType.ts +21 -0
  121. package/vendor/node-api/src/types/DuckDBEnumType.ts +111 -0
  122. package/vendor/node-api/src/types/DuckDBFloatType.ts +21 -0
  123. package/vendor/node-api/src/types/DuckDBGeometryType.ts +36 -0
  124. package/vendor/node-api/src/types/DuckDBHugeIntType.ts +21 -0
  125. package/vendor/node-api/src/types/DuckDBIntegerLiteralType.ts +13 -0
  126. package/vendor/node-api/src/types/DuckDBIntegerType.ts +21 -0
  127. package/vendor/node-api/src/types/DuckDBIntervalType.ts +13 -0
  128. package/vendor/node-api/src/types/DuckDBListType.ts +35 -0
  129. package/vendor/node-api/src/types/DuckDBMapType.ts +47 -0
  130. package/vendor/node-api/src/types/DuckDBSQLNullType.ts +17 -0
  131. package/vendor/node-api/src/types/DuckDBSmallIntType.ts +21 -0
  132. package/vendor/node-api/src/types/DuckDBStringLiteralType.ts +13 -0
  133. package/vendor/node-api/src/types/DuckDBStructType.ts +104 -0
  134. package/vendor/node-api/src/types/DuckDBTimeNSType.ts +20 -0
  135. package/vendor/node-api/src/types/DuckDBTimeTZType.ts +23 -0
  136. package/vendor/node-api/src/types/DuckDBTimeType.ts +20 -0
  137. package/vendor/node-api/src/types/DuckDBTimestampMillisecondsType.ts +29 -0
  138. package/vendor/node-api/src/types/DuckDBTimestampNanosecondsType.ts +29 -0
  139. package/vendor/node-api/src/types/DuckDBTimestampSecondsType.ts +29 -0
  140. package/vendor/node-api/src/types/DuckDBTimestampTZNanosecondsType.ts +32 -0
  141. package/vendor/node-api/src/types/DuckDBTimestampTZType.ts +32 -0
  142. package/vendor/node-api/src/types/DuckDBTimestampType.ts +32 -0
  143. package/vendor/node-api/src/types/DuckDBTinyIntType.ts +21 -0
  144. package/vendor/node-api/src/types/DuckDBType.ts +86 -0
  145. package/vendor/node-api/src/types/DuckDBUBigIntType.ts +21 -0
  146. package/vendor/node-api/src/types/DuckDBUHugeIntType.ts +21 -0
  147. package/vendor/node-api/src/types/DuckDBUIntegerType.ts +21 -0
  148. package/vendor/node-api/src/types/DuckDBUSmallIntType.ts +21 -0
  149. package/vendor/node-api/src/types/DuckDBUTinyIntType.ts +21 -0
  150. package/vendor/node-api/src/types/DuckDBUUIDType.ts +20 -0
  151. package/vendor/node-api/src/types/DuckDBUnionType.ts +74 -0
  152. package/vendor/node-api/src/types/DuckDBVarCharType.ts +13 -0
  153. package/vendor/node-api/src/types/DuckDBVariantType.ts +13 -0
  154. package/vendor/node-api/src/types/index.ts +44 -0
  155. package/vendor/node-api/src/values/DuckDBArrayValue.ts +18 -0
  156. package/vendor/node-api/src/values/DuckDBBitValue.ts +117 -0
  157. package/vendor/node-api/src/values/DuckDBBlobValue.ts +26 -0
  158. package/vendor/node-api/src/values/DuckDBDateValue.ts +43 -0
  159. package/vendor/node-api/src/values/DuckDBDecimalValue.ts +44 -0
  160. package/vendor/node-api/src/values/DuckDBGeometryValue.ts +30 -0
  161. package/vendor/node-api/src/values/DuckDBIntervalValue.ts +22 -0
  162. package/vendor/node-api/src/values/DuckDBListValue.ts +18 -0
  163. package/vendor/node-api/src/values/DuckDBMapValue.ts +25 -0
  164. package/vendor/node-api/src/values/DuckDBStructValue.ts +22 -0
  165. package/vendor/node-api/src/values/DuckDBTimeNSValue.ts +23 -0
  166. package/vendor/node-api/src/values/DuckDBTimeTZValue.ts +96 -0
  167. package/vendor/node-api/src/values/DuckDBTimeValue.ts +34 -0
  168. package/vendor/node-api/src/values/DuckDBTimestampMillisecondsValue.ts +29 -0
  169. package/vendor/node-api/src/values/DuckDBTimestampNanosecondsValue.ts +28 -0
  170. package/vendor/node-api/src/values/DuckDBTimestampSecondsValue.ts +28 -0
  171. package/vendor/node-api/src/values/DuckDBTimestampTZNanosecondsValue.ts +44 -0
  172. package/vendor/node-api/src/values/DuckDBTimestampTZValue.ts +54 -0
  173. package/vendor/node-api/src/values/DuckDBTimestampValue.ts +45 -0
  174. package/vendor/node-api/src/values/DuckDBTupleValue.ts +22 -0
  175. package/vendor/node-api/src/values/DuckDBUUIDValue.ts +48 -0
  176. package/vendor/node-api/src/values/DuckDBUnionValue.ts +22 -0
  177. package/vendor/node-api/src/values/DuckDBValue.ts +53 -0
  178. package/vendor/node-api/src/values/DuckDBVariantValue.ts +34 -0
  179. package/vendor/node-api/src/values/index.ts +24 -0
  180. package/vendor/node-api/src/vectors/DuckDBArrayVector.ts +107 -0
  181. package/vendor/node-api/src/vectors/DuckDBBigIntVector.ts +75 -0
  182. package/vendor/node-api/src/vectors/DuckDBBigNumVector.ts +98 -0
  183. package/vendor/node-api/src/vectors/DuckDBBitVector.ts +102 -0
  184. package/vendor/node-api/src/vectors/DuckDBBlobVector.ts +112 -0
  185. package/vendor/node-api/src/vectors/DuckDBBooleanVector.ts +84 -0
  186. package/vendor/node-api/src/vectors/DuckDBDateVector.ts +80 -0
  187. package/vendor/node-api/src/vectors/DuckDBDecimal128Vector.ts +107 -0
  188. package/vendor/node-api/src/vectors/DuckDBDecimal16Vector.ts +104 -0
  189. package/vendor/node-api/src/vectors/DuckDBDecimal32Vector.ts +104 -0
  190. package/vendor/node-api/src/vectors/DuckDBDecimal64Vector.ts +104 -0
  191. package/vendor/node-api/src/vectors/DuckDBDoubleVector.ts +68 -0
  192. package/vendor/node-api/src/vectors/DuckDBEnum16Vector.ts +75 -0
  193. package/vendor/node-api/src/vectors/DuckDBEnum32Vector.ts +75 -0
  194. package/vendor/node-api/src/vectors/DuckDBEnum8Vector.ts +75 -0
  195. package/vendor/node-api/src/vectors/DuckDBFloatVector.ts +68 -0
  196. package/vendor/node-api/src/vectors/DuckDBGeometryVector.ts +97 -0
  197. package/vendor/node-api/src/vectors/DuckDBHugeIntVector.ts +89 -0
  198. package/vendor/node-api/src/vectors/DuckDBIntegerVector.ts +75 -0
  199. package/vendor/node-api/src/vectors/DuckDBIntervalVector.ts +100 -0
  200. package/vendor/node-api/src/vectors/DuckDBListVector.ts +221 -0
  201. package/vendor/node-api/src/vectors/DuckDBMapVector.ts +88 -0
  202. package/vendor/node-api/src/vectors/DuckDBSQLNullVector.ts +53 -0
  203. package/vendor/node-api/src/vectors/DuckDBSmallIntVector.ts +75 -0
  204. package/vendor/node-api/src/vectors/DuckDBStructVector.ts +138 -0
  205. package/vendor/node-api/src/vectors/DuckDBTimeNSVector.ts +80 -0
  206. package/vendor/node-api/src/vectors/DuckDBTimeTZVector.ts +80 -0
  207. package/vendor/node-api/src/vectors/DuckDBTimeVector.ts +80 -0
  208. package/vendor/node-api/src/vectors/DuckDBTimestampMillisecondsVector.ts +88 -0
  209. package/vendor/node-api/src/vectors/DuckDBTimestampNanosecondsVector.ts +88 -0
  210. package/vendor/node-api/src/vectors/DuckDBTimestampSecondsVector.ts +88 -0
  211. package/vendor/node-api/src/vectors/DuckDBTimestampTZNanosecondsVector.ts +88 -0
  212. package/vendor/node-api/src/vectors/DuckDBTimestampTZVector.ts +86 -0
  213. package/vendor/node-api/src/vectors/DuckDBTimestampVector.ts +83 -0
  214. package/vendor/node-api/src/vectors/DuckDBTinyIntVector.ts +75 -0
  215. package/vendor/node-api/src/vectors/DuckDBTupleVector.ts +125 -0
  216. package/vendor/node-api/src/vectors/DuckDBUBigIntVector.ts +75 -0
  217. package/vendor/node-api/src/vectors/DuckDBUHugeIntVector.ts +89 -0
  218. package/vendor/node-api/src/vectors/DuckDBUIntegerVector.ts +75 -0
  219. package/vendor/node-api/src/vectors/DuckDBUSmallIntVector.ts +75 -0
  220. package/vendor/node-api/src/vectors/DuckDBUTinyIntVector.ts +75 -0
  221. package/vendor/node-api/src/vectors/DuckDBUUIDVector.ts +89 -0
  222. package/vendor/node-api/src/vectors/DuckDBUnionVector.ts +84 -0
  223. package/vendor/node-api/src/vectors/DuckDBValidity.ts +104 -0
  224. package/vendor/node-api/src/vectors/DuckDBVarCharVector.ts +100 -0
  225. package/vendor/node-api/src/vectors/DuckDBVariantVector.ts +609 -0
  226. package/vendor/node-api/src/vectors/DuckDBVector.ts +33 -0
  227. package/vendor/node-api/src/vectors/createVector.ts +269 -0
  228. package/vendor/node-api/src/vectors/dataAccessors.ts +387 -0
  229. package/vendor/node-api/src/vectors/index.ts +50 -0
  230. package/vendor/node-api/src/vectors/vectorRegistry.ts +24 -0
  231. 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
+ }