@avidian/duckdb-bun 0.0.0-stage → 1.0.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.
Files changed (231) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +284 -2
  3. package/package.json +95 -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 +200 -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 +150 -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,75 @@
1
+ import duckdb from "../../../../src/bindings/index.ts";
2
+ import {
3
+ DuckDBUSmallIntType,
4
+ } from '../DuckDBType';
5
+ import { DuckDBVector } from './DuckDBVector';
6
+ import { DuckDBValidity } from './DuckDBValidity';
7
+ import {
8
+ vectorData,
9
+ } from './dataAccessors';
10
+
11
+ export class DuckDBUSmallIntVector extends DuckDBVector<number> {
12
+ private readonly items: Uint16Array;
13
+ private readonly validity: DuckDBValidity;
14
+ private readonly vector: duckdb.Vector;
15
+ constructor(
16
+ items: Uint16Array,
17
+ validity: DuckDBValidity,
18
+ vector: duckdb.Vector
19
+ ) {
20
+ super();
21
+ this.items = items;
22
+ this.validity = validity;
23
+ this.vector = vector;
24
+ }
25
+ static fromRawVector(
26
+ vector: duckdb.Vector,
27
+ itemCount: number
28
+ ): DuckDBUSmallIntVector {
29
+ const data = vectorData(vector, itemCount * Uint16Array.BYTES_PER_ELEMENT);
30
+ const items = new Uint16Array(data.buffer, data.byteOffset, itemCount);
31
+ const validity = DuckDBValidity.fromVector(vector, itemCount);
32
+ return new DuckDBUSmallIntVector(items, validity, vector);
33
+ }
34
+ public override get type(): DuckDBUSmallIntType {
35
+ return DuckDBUSmallIntType.instance;
36
+ }
37
+ public override get itemCount(): number {
38
+ return this.items.length;
39
+ }
40
+ public override getItem(itemIndex: number): number | null {
41
+ return this.validity.itemValid(itemIndex) ? this.items[itemIndex] : null;
42
+ }
43
+ public override setItem(itemIndex: number, value: number | null) {
44
+ if (value != null) {
45
+ // Checked inline for bulk-write throughput; see dataAccessors.ts.
46
+ if (!Number.isInteger(value)) {
47
+ throw new Error(`number is not an integer`);
48
+ }
49
+ if (value < 0 || value > 65535) {
50
+ throw new Error(`number out of uint16 range`);
51
+ }
52
+ this.items[itemIndex] = value;
53
+ this.validity.setItemValid(itemIndex, true);
54
+ } else {
55
+ this.validity.setItemValid(itemIndex, false);
56
+ }
57
+ }
58
+ public override flush() {
59
+ duckdb.copy_data_to_vector(
60
+ this.vector,
61
+ 0,
62
+ this.items.buffer as ArrayBuffer,
63
+ this.items.byteOffset,
64
+ this.items.byteLength
65
+ );
66
+ this.validity.flush(this.vector);
67
+ }
68
+ public override slice(offset: number, length: number): DuckDBUSmallIntVector {
69
+ return new DuckDBUSmallIntVector(
70
+ this.items.slice(offset, offset + length),
71
+ this.validity.slice(offset, length),
72
+ this.vector
73
+ );
74
+ }
75
+ }
@@ -0,0 +1,75 @@
1
+ import duckdb from "../../../../src/bindings/index.ts";
2
+ import {
3
+ DuckDBUTinyIntType,
4
+ } from '../DuckDBType';
5
+ import { DuckDBVector } from './DuckDBVector';
6
+ import { DuckDBValidity } from './DuckDBValidity';
7
+ import {
8
+ vectorData,
9
+ } from './dataAccessors';
10
+
11
+ export class DuckDBUTinyIntVector extends DuckDBVector<number> {
12
+ private readonly items: Uint8Array;
13
+ private readonly validity: DuckDBValidity;
14
+ private readonly vector: duckdb.Vector;
15
+ constructor(
16
+ items: Uint8Array,
17
+ validity: DuckDBValidity,
18
+ vector: duckdb.Vector
19
+ ) {
20
+ super();
21
+ this.items = items;
22
+ this.validity = validity;
23
+ this.vector = vector;
24
+ }
25
+ static fromRawVector(
26
+ vector: duckdb.Vector,
27
+ itemCount: number
28
+ ): DuckDBUTinyIntVector {
29
+ const data = vectorData(vector, itemCount * Uint8Array.BYTES_PER_ELEMENT);
30
+ const items = new Uint8Array(data.buffer, data.byteOffset, itemCount);
31
+ const validity = DuckDBValidity.fromVector(vector, itemCount);
32
+ return new DuckDBUTinyIntVector(items, validity, vector);
33
+ }
34
+ public override get type(): DuckDBUTinyIntType {
35
+ return DuckDBUTinyIntType.instance;
36
+ }
37
+ public override get itemCount(): number {
38
+ return this.items.length;
39
+ }
40
+ public override getItem(itemIndex: number): number | null {
41
+ return this.validity.itemValid(itemIndex) ? this.items[itemIndex] : null;
42
+ }
43
+ public override setItem(itemIndex: number, value: number | null) {
44
+ if (value != null) {
45
+ // Checked inline for bulk-write throughput; see dataAccessors.ts.
46
+ if (!Number.isInteger(value)) {
47
+ throw new Error(`number is not an integer`);
48
+ }
49
+ if (value < 0 || value > 255) {
50
+ throw new Error(`number out of uint8 range`);
51
+ }
52
+ this.items[itemIndex] = value;
53
+ this.validity.setItemValid(itemIndex, true);
54
+ } else {
55
+ this.validity.setItemValid(itemIndex, false);
56
+ }
57
+ }
58
+ public override flush() {
59
+ duckdb.copy_data_to_vector(
60
+ this.vector,
61
+ 0,
62
+ this.items.buffer as ArrayBuffer,
63
+ this.items.byteOffset,
64
+ this.items.byteLength
65
+ );
66
+ this.validity.flush(this.vector);
67
+ }
68
+ public override slice(offset: number, length: number): DuckDBUTinyIntVector {
69
+ return new DuckDBUTinyIntVector(
70
+ this.items.slice(offset, offset + length),
71
+ this.validity.slice(offset, length),
72
+ this.vector
73
+ );
74
+ }
75
+ }
@@ -0,0 +1,89 @@
1
+ import duckdb from "../../../../src/bindings/index.ts";
2
+ import {
3
+ DuckDBUUIDType,
4
+ } from '../DuckDBType';
5
+ import {
6
+ DuckDBUUIDValue,
7
+ } from '../values';
8
+ import { DuckDBVector } from './DuckDBVector';
9
+ import { DuckDBValidity } from './DuckDBValidity';
10
+ import {
11
+ getInt128,
12
+ setInt128,
13
+ vectorData,
14
+ } from './dataAccessors';
15
+
16
+ export class DuckDBUUIDVector extends DuckDBVector<DuckDBUUIDValue> {
17
+ private readonly dataView: DataView;
18
+ private readonly validity: DuckDBValidity;
19
+ private readonly vector: duckdb.Vector;
20
+ private readonly _itemCount: number;
21
+ constructor(
22
+ dataView: DataView,
23
+ validity: DuckDBValidity,
24
+ vector: duckdb.Vector,
25
+ itemCount: number
26
+ ) {
27
+ super();
28
+ this.dataView = dataView;
29
+ this.validity = validity;
30
+ this.vector = vector;
31
+ this._itemCount = itemCount;
32
+ }
33
+ static fromRawVector(
34
+ vector: duckdb.Vector,
35
+ itemCount: number
36
+ ): DuckDBUUIDVector {
37
+ const data = vectorData(vector, itemCount * 16);
38
+ const dataView = new DataView(
39
+ data.buffer,
40
+ data.byteOffset,
41
+ data.byteLength
42
+ );
43
+ const validity = DuckDBValidity.fromVector(vector, itemCount);
44
+ return new DuckDBUUIDVector(dataView, validity, vector, itemCount);
45
+ }
46
+ public override get type(): DuckDBUUIDType {
47
+ return DuckDBUUIDType.instance;
48
+ }
49
+ public override get itemCount(): number {
50
+ return this._itemCount;
51
+ }
52
+ public override getItem(itemIndex: number): DuckDBUUIDValue | null {
53
+ return this.validity.itemValid(itemIndex)
54
+ ? DuckDBUUIDValue.fromStoredHugeInt(
55
+ getInt128(this.dataView, itemIndex * 16)
56
+ )
57
+ : null;
58
+ }
59
+ public override setItem(itemIndex: number, value: DuckDBUUIDValue | null) {
60
+ if (value != null) {
61
+ setInt128(this.dataView, itemIndex * 16, value.hugeint);
62
+ this.validity.setItemValid(itemIndex, true);
63
+ } else {
64
+ this.validity.setItemValid(itemIndex, false);
65
+ }
66
+ }
67
+ public override flush() {
68
+ duckdb.copy_data_to_vector(
69
+ this.vector,
70
+ 0,
71
+ this.dataView.buffer as ArrayBuffer,
72
+ this.dataView.byteOffset,
73
+ this.dataView.byteLength
74
+ );
75
+ this.validity.flush(this.vector);
76
+ }
77
+ public override slice(offset: number, length: number): DuckDBUUIDVector {
78
+ return new DuckDBUUIDVector(
79
+ new DataView(
80
+ this.dataView.buffer,
81
+ this.dataView.byteOffset + offset * 16,
82
+ length * 16
83
+ ),
84
+ this.validity.slice(offset, length),
85
+ this.vector,
86
+ length
87
+ );
88
+ }
89
+ }
@@ -0,0 +1,84 @@
1
+ import duckdb from "../../../../src/bindings/index.ts";
2
+ import {
3
+ DuckDBStructType,
4
+ DuckDBType,
5
+ DuckDBUTinyIntType,
6
+ DuckDBUnionType,
7
+ } from '../DuckDBType';
8
+ import {
9
+ DuckDBUnionValue,
10
+ } from '../values';
11
+ import { DuckDBVector } from './DuckDBVector';
12
+ import { DuckDBStructVector } from './DuckDBStructVector';
13
+
14
+ // UNION = STRUCT with first entry named "tag"
15
+ export class DuckDBUnionVector extends DuckDBVector<DuckDBUnionValue> {
16
+ private readonly unionType: DuckDBUnionType;
17
+ private readonly structVector: DuckDBStructVector;
18
+ constructor(unionType: DuckDBUnionType, structVector: DuckDBStructVector) {
19
+ super();
20
+ this.unionType = unionType;
21
+ this.structVector = structVector;
22
+ }
23
+ static fromRawVector(
24
+ unionType: DuckDBUnionType,
25
+ vector: duckdb.Vector,
26
+ itemCount: number
27
+ ): DuckDBUnionVector {
28
+ const entryNames: string[] = ['tag'];
29
+ const entryTypes: DuckDBType[] = [DuckDBUTinyIntType.instance];
30
+ const memberCount = unionType.memberCount;
31
+ for (let i = 0; i < memberCount; i++) {
32
+ entryNames.push(unionType.memberTags[i]);
33
+ entryTypes.push(unionType.memberTypes[i]);
34
+ }
35
+ const structVectorType = new DuckDBStructType(entryNames, entryTypes);
36
+ return new DuckDBUnionVector(
37
+ unionType,
38
+ DuckDBStructVector.fromRawVector(structVectorType, vector, itemCount)
39
+ );
40
+ }
41
+ public override get type(): DuckDBUnionType {
42
+ return this.unionType;
43
+ }
44
+ public override get itemCount(): number {
45
+ return this.structVector.itemCount;
46
+ }
47
+ public override getItem(itemIndex: number): DuckDBUnionValue | null {
48
+ const tagValue = this.structVector.getItemValue(itemIndex, 0);
49
+ if (tagValue == null) {
50
+ return null;
51
+ }
52
+ const memberIndex = Number(tagValue);
53
+ const tag = this.unionType.memberTags[memberIndex];
54
+ const entryIndex = memberIndex + 1;
55
+ const value = this.structVector.getItemValue(itemIndex, entryIndex);
56
+ return new DuckDBUnionValue(tag, value);
57
+ }
58
+ public override setItem(itemIndex: number, value: DuckDBUnionValue | null) {
59
+ if (value != null) {
60
+ const memberIndex = this.unionType.memberIndexForTag(value.tag);
61
+ this.structVector.setItemValue(itemIndex, 0, memberIndex);
62
+ const entryIndex = memberIndex + 1;
63
+ this.structVector.setItemValue(itemIndex, entryIndex, value.value);
64
+ for (let i = 1; i <= this.unionType.memberCount; i++) {
65
+ if (i !== entryIndex) {
66
+ this.structVector.setItemValue(itemIndex, i, null);
67
+ }
68
+ }
69
+ } else {
70
+ for (let i = 0; i <= this.unionType.memberCount; i++) {
71
+ this.structVector.setItemValue(itemIndex, i, null);
72
+ }
73
+ }
74
+ }
75
+ public override flush() {
76
+ this.structVector.flush();
77
+ }
78
+ public override slice(offset: number, length: number): DuckDBUnionVector {
79
+ return new DuckDBUnionVector(
80
+ this.unionType,
81
+ this.structVector.slice(offset, length)
82
+ );
83
+ }
84
+ }
@@ -0,0 +1,104 @@
1
+ import duckdb from "../../../../src/bindings/index.ts";
2
+
3
+ // This version of DuckDBValidity is almost 10x slower.
4
+ // class DuckDBValidity {
5
+ // private readonly validity_pointer: ddb.uint64_pointer;
6
+ // private readonly offset: number;
7
+ // private constructor(validity_pointer: ddb.uint64_pointer, offset: number = 0) {
8
+ // this.validity_pointer = validity_pointer;
9
+ // this.offset = offset;
10
+ // }
11
+ // public static fromVector(vector: ddb.duckdb_vector, itemCount: number, offset: number = 0): DuckDBValidity {
12
+ // const validity_pointer = ddb.duckdb_vector_get_validity(vector);
13
+ // return new DuckDBValidity(validity_pointer, offset);
14
+ // }
15
+ // public itemValid(itemIndex: number): boolean {
16
+ // return ddb.duckdb_validity_row_is_valid(this.validity_pointer, this.offset + itemIndex);
17
+ // }
18
+ // public slice(offset: number): DuckDBValidity {
19
+ // return new DuckDBValidity(this.validity_pointer, this.offset + offset);
20
+ // }
21
+ // }
22
+
23
+ export class DuckDBValidity {
24
+ private data: BigUint64Array | null;
25
+ private readonly offset: number;
26
+ private readonly itemCount: number;
27
+ private constructor(
28
+ data: BigUint64Array | null,
29
+ offset: number,
30
+ itemCount: number
31
+ ) {
32
+ this.data = data;
33
+ this.offset = offset;
34
+ this.itemCount = itemCount;
35
+ }
36
+ public static fromVector(
37
+ vector: duckdb.Vector,
38
+ itemCount: number
39
+ ): DuckDBValidity {
40
+ const uint64Count = Math.ceil(itemCount / 64);
41
+ const bytes = duckdb.vector_get_validity(vector, uint64Count * 8);
42
+ if (!bytes) {
43
+ return new DuckDBValidity(null, 0, itemCount);
44
+ }
45
+ const bigints = new BigUint64Array(
46
+ bytes.buffer,
47
+ bytes.byteOffset,
48
+ uint64Count
49
+ );
50
+ return new DuckDBValidity(bigints, 0, itemCount);
51
+ }
52
+ public itemValid(itemIndex: number): boolean {
53
+ if (!this.data) {
54
+ return true;
55
+ }
56
+ const bit = this.offset + itemIndex;
57
+ return (
58
+ (this.data[Math.floor(bit / 64)] & (BigInt(1) << BigInt(bit % 64))) !==
59
+ BigInt(0)
60
+ );
61
+ }
62
+ public setItemValid(itemIndex: number, valid: boolean) {
63
+ if (!this.data && !valid) {
64
+ // An item is being set to invalid and we don't have a data buffer, so create it. If an item is being set to valid
65
+ // and we don't have a data buffer, then there's nothing to do; a null data buffer indicates all items are valid.
66
+ const uint64Count = Math.ceil(this.itemCount / 64);
67
+ const buffer = new ArrayBuffer(uint64Count * 8);
68
+ this.data = new BigUint64Array(buffer, 0, uint64Count);
69
+ // Initialize to all items to valid.
70
+ for (let i = 0; i < this.data.length; i++) {
71
+ this.data[i] = 0xffffffffffffffffn;
72
+ }
73
+ }
74
+ if (this.data) {
75
+ const bit = this.offset + itemIndex;
76
+ const uint64Index = Math.floor(bit / 64);
77
+ const uint64WithBitSet = BigInt(1) << BigInt(bit % 64);
78
+ if (valid) {
79
+ if ((this.data[uint64Index] & uint64WithBitSet) === 0n) {
80
+ this.data[uint64Index] |= uint64WithBitSet;
81
+ }
82
+ } else {
83
+ if ((this.data[uint64Index] & uint64WithBitSet) !== 0n) {
84
+ this.data[uint64Index] &= ~uint64WithBitSet;
85
+ }
86
+ }
87
+ }
88
+ }
89
+ public flush(vector: duckdb.Vector) {
90
+ if (this.data) {
91
+ duckdb.vector_ensure_validity_writable(vector);
92
+ duckdb.copy_data_to_vector_validity(
93
+ vector,
94
+ 0,
95
+ this.data.buffer as ArrayBuffer,
96
+ this.data.byteOffset,
97
+ this.data.byteLength
98
+ );
99
+ }
100
+ }
101
+ public slice(offset: number, itemCount: number): DuckDBValidity {
102
+ return new DuckDBValidity(this.data, this.offset + offset, itemCount);
103
+ }
104
+ }
@@ -0,0 +1,100 @@
1
+ import duckdb from "../../../../src/bindings/index.ts";
2
+ import {
3
+ DuckDBVarCharType,
4
+ } from '../DuckDBType';
5
+ import { DuckDBVector } from './DuckDBVector';
6
+ import { DuckDBValidity } from './DuckDBValidity';
7
+ import {
8
+ getString,
9
+ vectorData,
10
+ } from './dataAccessors';
11
+
12
+ export class DuckDBVarCharVector extends DuckDBVector<string> {
13
+ private readonly dataView: DataView;
14
+ private readonly validity: DuckDBValidity;
15
+ private readonly vector: duckdb.Vector;
16
+ private readonly itemOffset: number;
17
+ private readonly _itemCount: number;
18
+ private readonly itemCache: (string | null | undefined)[];
19
+ private readonly itemCacheDirty: boolean[];
20
+ constructor(
21
+ dataView: DataView,
22
+ validity: DuckDBValidity,
23
+ vector: duckdb.Vector,
24
+ itemOffset: number,
25
+ itemCount: number
26
+ ) {
27
+ super();
28
+ this.dataView = dataView;
29
+ this.validity = validity;
30
+ this.vector = vector;
31
+ this.itemOffset = itemOffset;
32
+ this._itemCount = itemCount;
33
+ this.itemCache = [];
34
+ this.itemCacheDirty = [];
35
+ }
36
+ static fromRawVector(
37
+ vector: duckdb.Vector,
38
+ itemCount: number
39
+ ): DuckDBVarCharVector {
40
+ const data = vectorData(vector, itemCount * 16);
41
+ const dataView = new DataView(
42
+ data.buffer,
43
+ data.byteOffset,
44
+ data.byteLength
45
+ );
46
+ const validity = DuckDBValidity.fromVector(vector, itemCount);
47
+ return new DuckDBVarCharVector(dataView, validity, vector, 0, itemCount);
48
+ }
49
+ public override get type(): DuckDBVarCharType {
50
+ return DuckDBVarCharType.instance;
51
+ }
52
+ public override get itemCount(): number {
53
+ return this._itemCount;
54
+ }
55
+ public override getItem(itemIndex: number): string | null {
56
+ const cachedItem = this.itemCache[itemIndex];
57
+ if (cachedItem !== undefined) {
58
+ return cachedItem;
59
+ }
60
+ const item = this.validity.itemValid(itemIndex)
61
+ ? getString(this.dataView, itemIndex * 16)
62
+ : null;
63
+ this.itemCache[itemIndex] = item;
64
+ return item;
65
+ }
66
+ public setItem(itemIndex: number, value: string | null) {
67
+ this.itemCache[itemIndex] = value;
68
+ this.validity.setItemValid(itemIndex, value != null);
69
+ this.itemCacheDirty[itemIndex] = true;
70
+ }
71
+ public flush() {
72
+ for (let itemIndex = 0; itemIndex < this._itemCount; itemIndex++) {
73
+ if (this.itemCacheDirty[itemIndex]) {
74
+ const cachedItem = this.itemCache[itemIndex];
75
+ if (cachedItem !== undefined && cachedItem !== null) {
76
+ duckdb.vector_assign_string_element(
77
+ this.vector,
78
+ this.itemOffset + itemIndex,
79
+ cachedItem
80
+ );
81
+ }
82
+ this.itemCacheDirty[itemIndex] = false;
83
+ }
84
+ }
85
+ this.validity.flush(this.vector);
86
+ }
87
+ public override slice(offset: number, length: number): DuckDBVarCharVector {
88
+ return new DuckDBVarCharVector(
89
+ new DataView(
90
+ this.dataView.buffer,
91
+ this.dataView.byteOffset + offset * 16,
92
+ length * 16
93
+ ),
94
+ this.validity.slice(offset, length),
95
+ this.vector,
96
+ offset,
97
+ length
98
+ );
99
+ }
100
+ }