@haybarn/node-api 1.5.3-rc2

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 (149) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +1224 -0
  3. package/lib/DuckDBAppender.d.ts +51 -0
  4. package/lib/DuckDBAppender.js +149 -0
  5. package/lib/DuckDBBindInfo.d.ts +12 -0
  6. package/lib/DuckDBBindInfo.js +33 -0
  7. package/lib/DuckDBClientContext.d.ts +6 -0
  8. package/lib/DuckDBClientContext.js +17 -0
  9. package/lib/DuckDBConnection.d.ts +49 -0
  10. package/lib/DuckDBConnection.js +208 -0
  11. package/lib/DuckDBDataChunk.d.ts +41 -0
  12. package/lib/DuckDBDataChunk.js +223 -0
  13. package/lib/DuckDBExtractedStatements.d.ts +12 -0
  14. package/lib/DuckDBExtractedStatements.js +31 -0
  15. package/lib/DuckDBFunctionInfo.d.ts +10 -0
  16. package/lib/DuckDBFunctionInfo.js +29 -0
  17. package/lib/DuckDBInstance.d.ts +10 -0
  18. package/lib/DuckDBInstance.js +30 -0
  19. package/lib/DuckDBInstanceCache.d.ts +8 -0
  20. package/lib/DuckDBInstanceCache.js +28 -0
  21. package/lib/DuckDBLogicalType.d.ts +66 -0
  22. package/lib/DuckDBLogicalType.js +328 -0
  23. package/lib/DuckDBMaterializedResult.d.ts +9 -0
  24. package/lib/DuckDBMaterializedResult.js +24 -0
  25. package/lib/DuckDBPendingResult.d.ts +18 -0
  26. package/lib/DuckDBPendingResult.js +60 -0
  27. package/lib/DuckDBPreparedStatement.d.ts +72 -0
  28. package/lib/DuckDBPreparedStatement.js +219 -0
  29. package/lib/DuckDBPreparedStatementCollection.d.ts +4 -0
  30. package/lib/DuckDBPreparedStatementCollection.js +2 -0
  31. package/lib/DuckDBPreparedStatementWeakRefCollection.d.ts +9 -0
  32. package/lib/DuckDBPreparedStatementWeakRefCollection.js +28 -0
  33. package/lib/DuckDBResult.d.ts +57 -0
  34. package/lib/DuckDBResult.js +229 -0
  35. package/lib/DuckDBResultReader.d.ts +68 -0
  36. package/lib/DuckDBResultReader.js +203 -0
  37. package/lib/DuckDBScalarFunction.d.ts +33 -0
  38. package/lib/DuckDBScalarFunction.js +83 -0
  39. package/lib/DuckDBType.d.ts +373 -0
  40. package/lib/DuckDBType.js +930 -0
  41. package/lib/DuckDBTypeId.d.ts +42 -0
  42. package/lib/DuckDBTypeId.js +47 -0
  43. package/lib/DuckDBValueConverter.d.ts +3 -0
  44. package/lib/DuckDBValueConverter.js +2 -0
  45. package/lib/DuckDBValueConverters.d.ts +47 -0
  46. package/lib/DuckDBValueConverters.js +214 -0
  47. package/lib/DuckDBVector.d.ts +596 -0
  48. package/lib/DuckDBVector.js +2525 -0
  49. package/lib/JS.d.ts +3 -0
  50. package/lib/JS.js +2 -0
  51. package/lib/JSDuckDBValueConverter.d.ts +3 -0
  52. package/lib/JSDuckDBValueConverter.js +49 -0
  53. package/lib/Json.d.ts +3 -0
  54. package/lib/Json.js +2 -0
  55. package/lib/JsonDuckDBValueConverter.d.ts +3 -0
  56. package/lib/JsonDuckDBValueConverter.js +49 -0
  57. package/lib/configurationOptionDescriptions.d.ts +1 -0
  58. package/lib/configurationOptionDescriptions.js +16 -0
  59. package/lib/conversion/bytesFromString.d.ts +1 -0
  60. package/lib/conversion/bytesFromString.js +7 -0
  61. package/lib/conversion/dateTimeStringConversion.d.ts +20 -0
  62. package/lib/conversion/dateTimeStringConversion.js +238 -0
  63. package/lib/conversion/displayStringForDuckDBValue.d.ts +2 -0
  64. package/lib/conversion/displayStringForDuckDBValue.js +13 -0
  65. package/lib/conversion/stringFromBlob.d.ts +4 -0
  66. package/lib/conversion/stringFromBlob.js +45 -0
  67. package/lib/conversion/stringFromDecimal.d.ts +18 -0
  68. package/lib/conversion/stringFromDecimal.js +80 -0
  69. package/lib/convertColumnsFromChunks.d.ts +3 -0
  70. package/lib/convertColumnsFromChunks.js +16 -0
  71. package/lib/convertColumnsObjectFromChunks.d.ts +3 -0
  72. package/lib/convertColumnsObjectFromChunks.js +19 -0
  73. package/lib/convertRowObjectsFromChunks.d.ts +3 -0
  74. package/lib/convertRowObjectsFromChunks.js +17 -0
  75. package/lib/convertRowsFromChunks.d.ts +3 -0
  76. package/lib/convertRowsFromChunks.js +13 -0
  77. package/lib/createConfig.d.ts +2 -0
  78. package/lib/createConfig.js +19 -0
  79. package/lib/createDuckDBValueConverter.d.ts +3 -0
  80. package/lib/createDuckDBValueConverter.js +15 -0
  81. package/lib/createResult.d.ts +3 -0
  82. package/lib/createResult.js +17 -0
  83. package/lib/createValue.d.ts +4 -0
  84. package/lib/createValue.js +222 -0
  85. package/lib/duckdb.d.ts +33 -0
  86. package/lib/duckdb.js +54 -0
  87. package/lib/enums.d.ts +5 -0
  88. package/lib/enums.js +9 -0
  89. package/lib/getColumnsFromChunks.d.ts +3 -0
  90. package/lib/getColumnsFromChunks.js +10 -0
  91. package/lib/getColumnsObjectFromChunks.d.ts +3 -0
  92. package/lib/getColumnsObjectFromChunks.js +10 -0
  93. package/lib/getRowObjectsFromChunks.d.ts +3 -0
  94. package/lib/getRowObjectsFromChunks.js +10 -0
  95. package/lib/getRowsFromChunks.d.ts +3 -0
  96. package/lib/getRowsFromChunks.js +10 -0
  97. package/lib/index.d.ts +3 -0
  98. package/lib/index.js +41 -0
  99. package/lib/sleep.d.ts +1 -0
  100. package/lib/sleep.js +8 -0
  101. package/lib/sql.d.ts +2 -0
  102. package/lib/sql.js +10 -0
  103. package/lib/typeForValue.d.ts +3 -0
  104. package/lib/typeForValue.js +91 -0
  105. package/lib/values/DuckDBArrayValue.d.ts +7 -0
  106. package/lib/values/DuckDBArrayValue.js +18 -0
  107. package/lib/values/DuckDBBitValue.d.ts +16 -0
  108. package/lib/values/DuckDBBitValue.js +103 -0
  109. package/lib/values/DuckDBBlobValue.d.ts +8 -0
  110. package/lib/values/DuckDBBlobValue.js +26 -0
  111. package/lib/values/DuckDBDateValue.d.ts +16 -0
  112. package/lib/values/DuckDBDateValue.js +39 -0
  113. package/lib/values/DuckDBDecimalValue.d.ts +19 -0
  114. package/lib/values/DuckDBDecimalValue.js +44 -0
  115. package/lib/values/DuckDBIntervalValue.d.ts +9 -0
  116. package/lib/values/DuckDBIntervalValue.js +22 -0
  117. package/lib/values/DuckDBListValue.d.ts +7 -0
  118. package/lib/values/DuckDBListValue.js +18 -0
  119. package/lib/values/DuckDBMapValue.d.ts +11 -0
  120. package/lib/values/DuckDBMapValue.js +18 -0
  121. package/lib/values/DuckDBStructValue.d.ts +7 -0
  122. package/lib/values/DuckDBStructValue.js +22 -0
  123. package/lib/values/DuckDBTimeNSValue.d.ts +9 -0
  124. package/lib/values/DuckDBTimeNSValue.js +20 -0
  125. package/lib/values/DuckDBTimeTZValue.d.ts +35 -0
  126. package/lib/values/DuckDBTimeTZValue.js +65 -0
  127. package/lib/values/DuckDBTimeValue.d.ts +12 -0
  128. package/lib/values/DuckDBTimeValue.js +33 -0
  129. package/lib/values/DuckDBTimestampMillisecondsValue.d.ts +13 -0
  130. package/lib/values/DuckDBTimestampMillisecondsValue.js +31 -0
  131. package/lib/values/DuckDBTimestampNanosecondsValue.d.ts +13 -0
  132. package/lib/values/DuckDBTimestampNanosecondsValue.js +30 -0
  133. package/lib/values/DuckDBTimestampSecondsValue.d.ts +13 -0
  134. package/lib/values/DuckDBTimestampSecondsValue.js +30 -0
  135. package/lib/values/DuckDBTimestampTZValue.d.ts +16 -0
  136. package/lib/values/DuckDBTimestampTZValue.js +41 -0
  137. package/lib/values/DuckDBTimestampValue.d.ts +18 -0
  138. package/lib/values/DuckDBTimestampValue.js +41 -0
  139. package/lib/values/DuckDBUUIDValue.d.ts +19 -0
  140. package/lib/values/DuckDBUUIDValue.js +40 -0
  141. package/lib/values/DuckDBUnionValue.d.ts +8 -0
  142. package/lib/values/DuckDBUnionValue.js +22 -0
  143. package/lib/values/DuckDBValue.d.ts +20 -0
  144. package/lib/values/DuckDBValue.js +2 -0
  145. package/lib/values/index.d.ts +20 -0
  146. package/lib/values/index.js +36 -0
  147. package/lib/version.d.ts +1 -0
  148. package/lib/version.js +10 -0
  149. package/package.json +15 -0
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DuckDBDataChunk = void 0;
7
+ const node_bindings_1 = __importDefault(require("@haybarn/node-bindings"));
8
+ const DuckDBVector_1 = require("./DuckDBVector");
9
+ class DuckDBDataChunk {
10
+ chunk;
11
+ vectors = [];
12
+ constructor(chunk) {
13
+ this.chunk = chunk;
14
+ }
15
+ static create(types, rowCount) {
16
+ const chunk = new DuckDBDataChunk(node_bindings_1.default.create_data_chunk(types.map((t) => t.toLogicalType().logical_type)));
17
+ if (rowCount != undefined) {
18
+ chunk.rowCount = rowCount;
19
+ }
20
+ return chunk;
21
+ }
22
+ reset() {
23
+ node_bindings_1.default.data_chunk_reset(this.chunk);
24
+ }
25
+ get columnCount() {
26
+ return node_bindings_1.default.data_chunk_get_column_count(this.chunk);
27
+ }
28
+ get rowCount() {
29
+ return node_bindings_1.default.data_chunk_get_size(this.chunk);
30
+ }
31
+ set rowCount(count) {
32
+ const maxRowCount = node_bindings_1.default.vector_size();
33
+ if (count > maxRowCount) {
34
+ throw new Error(`A data chunk cannot have more than ${maxRowCount} rows`);
35
+ }
36
+ node_bindings_1.default.data_chunk_set_size(this.chunk, count);
37
+ }
38
+ getColumnVector(columnIndex) {
39
+ if (this.vectors[columnIndex]) {
40
+ return this.vectors[columnIndex];
41
+ }
42
+ const vector = DuckDBVector_1.DuckDBVector.create(node_bindings_1.default.data_chunk_get_vector(this.chunk, columnIndex), this.rowCount);
43
+ this.vectors[columnIndex] = vector;
44
+ return vector;
45
+ }
46
+ visitColumnValues(columnIndex, visitValue) {
47
+ const vector = this.getColumnVector(columnIndex);
48
+ const type = vector.type;
49
+ for (let rowIndex = 0; rowIndex < vector.itemCount; rowIndex++) {
50
+ visitValue(vector.getItem(rowIndex), rowIndex, columnIndex, type);
51
+ }
52
+ }
53
+ appendColumnValues(columnIndex, values) {
54
+ this.visitColumnValues(columnIndex, (value) => values.push(value));
55
+ }
56
+ getColumnValues(columnIndex) {
57
+ const values = [];
58
+ this.appendColumnValues(columnIndex, values);
59
+ return values;
60
+ }
61
+ convertColumnValues(columnIndex, converter) {
62
+ const convertedValues = [];
63
+ this.visitColumnValues(columnIndex, (value, _r, _c, type) => convertedValues.push(converter(value, type, converter)));
64
+ return convertedValues;
65
+ }
66
+ setColumnValues(columnIndex, values) {
67
+ const vector = this.getColumnVector(columnIndex);
68
+ if (vector.itemCount !== values.length) {
69
+ throw new Error(`number of values must equal chunk row count`);
70
+ }
71
+ for (let i = 0; i < values.length; i++) {
72
+ vector.setItem(i, values[i]);
73
+ }
74
+ vector.flush();
75
+ }
76
+ visitColumns(visitColumn) {
77
+ const columnCount = this.columnCount;
78
+ for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {
79
+ visitColumn(this.getColumnValues(columnIndex), columnIndex, this.getColumnVector(columnIndex).type);
80
+ }
81
+ }
82
+ appendToColumns(columns) {
83
+ const columnCount = this.columnCount;
84
+ for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {
85
+ let column = columns[columnIndex];
86
+ if (!column) {
87
+ column = [];
88
+ columns[columnIndex] = column;
89
+ }
90
+ this.appendColumnValues(columnIndex, column);
91
+ }
92
+ }
93
+ getColumns() {
94
+ const columns = [];
95
+ this.visitColumns((column) => columns.push(column));
96
+ return columns;
97
+ }
98
+ convertColumns(converter) {
99
+ const convertedColumns = [];
100
+ const columnCount = this.columnCount;
101
+ for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {
102
+ convertedColumns.push(this.convertColumnValues(columnIndex, converter));
103
+ }
104
+ return convertedColumns;
105
+ }
106
+ setColumns(columns) {
107
+ if (columns.length > 0) {
108
+ this.rowCount = columns[0].length;
109
+ }
110
+ for (let columnIndex = 0; columnIndex < columns.length; columnIndex++) {
111
+ this.setColumnValues(columnIndex, columns[columnIndex]);
112
+ }
113
+ }
114
+ appendToColumnsObject(columnNames, columnsObject) {
115
+ const columnCount = this.columnCount;
116
+ if (columnNames.length !== columnCount) {
117
+ throw new Error(`Provided number of column names (${columnNames.length}) does not match column count (${this.columnCount})`);
118
+ }
119
+ for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {
120
+ const columnName = columnNames[columnIndex];
121
+ let columnValues = columnsObject[columnName];
122
+ if (!columnValues) {
123
+ columnValues = [];
124
+ columnsObject[columnName] = columnValues;
125
+ }
126
+ this.appendColumnValues(columnIndex, columnValues);
127
+ }
128
+ }
129
+ getColumnsObject(columnNames) {
130
+ const columnsObject = {};
131
+ this.appendToColumnsObject(columnNames, columnsObject);
132
+ return columnsObject;
133
+ }
134
+ visitColumnMajor(visitValue) {
135
+ const columnCount = this.columnCount;
136
+ for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {
137
+ this.visitColumnValues(columnIndex, visitValue);
138
+ }
139
+ }
140
+ visitRowValues(rowIndex, visitValue) {
141
+ const columnCount = this.columnCount;
142
+ for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {
143
+ const vector = this.getColumnVector(columnIndex);
144
+ visitValue(vector.getItem(rowIndex), rowIndex, columnIndex, vector.type);
145
+ }
146
+ }
147
+ appendRowValues(rowIndex, values) {
148
+ this.visitRowValues(rowIndex, (value) => values.push(value));
149
+ }
150
+ getRowValues(rowIndex) {
151
+ const values = [];
152
+ this.appendRowValues(rowIndex, values);
153
+ return values;
154
+ }
155
+ convertRowValues(rowIndex, converter) {
156
+ const convertedValues = [];
157
+ this.visitRowValues(rowIndex, (value, _, columnIndex) => convertedValues.push(converter(value, this.getColumnVector(columnIndex).type, converter)));
158
+ return convertedValues;
159
+ }
160
+ visitRows(visitRow) {
161
+ const rowCount = this.rowCount;
162
+ for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
163
+ visitRow(this.getRowValues(rowIndex), rowIndex);
164
+ }
165
+ }
166
+ appendToRows(rows) {
167
+ this.visitRows((row) => rows.push(row));
168
+ }
169
+ getRows() {
170
+ const rows = [];
171
+ this.appendToRows(rows);
172
+ return rows;
173
+ }
174
+ convertRows(converter) {
175
+ const convertedRows = [];
176
+ const rowCount = this.rowCount;
177
+ for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
178
+ convertedRows.push(this.convertRowValues(rowIndex, converter));
179
+ }
180
+ return convertedRows;
181
+ }
182
+ setRows(rows) {
183
+ this.rowCount = rows.length;
184
+ const columnCount = this.columnCount;
185
+ for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {
186
+ const vector = this.getColumnVector(columnIndex);
187
+ for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {
188
+ vector.setItem(rowIndex, rows[rowIndex][columnIndex]);
189
+ }
190
+ vector.flush();
191
+ }
192
+ }
193
+ appendToRowObjects(columnNames, rowObjects) {
194
+ const columnCount = this.columnCount;
195
+ if (columnNames.length !== columnCount) {
196
+ throw new Error(`Provided number of column names (${columnNames.length}) does not match column count (${this.columnCount})`);
197
+ }
198
+ const rowCount = this.rowCount;
199
+ for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
200
+ let rowObject = {};
201
+ this.visitRowValues(rowIndex, (value, _, columnIndex) => {
202
+ rowObject[columnNames[columnIndex]] = value;
203
+ });
204
+ rowObjects.push(rowObject);
205
+ }
206
+ }
207
+ getRowObjects(columnNames) {
208
+ const rowObjects = [];
209
+ this.appendToRowObjects(columnNames, rowObjects);
210
+ return rowObjects;
211
+ }
212
+ visitRowMajor(visitValue) {
213
+ const rowCount = this.rowCount;
214
+ const columnCount = this.columnCount;
215
+ for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
216
+ for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) {
217
+ const vector = this.getColumnVector(columnIndex);
218
+ visitValue(vector.getItem(rowIndex), rowIndex, columnIndex, vector.type);
219
+ }
220
+ }
221
+ }
222
+ }
223
+ exports.DuckDBDataChunk = DuckDBDataChunk;
@@ -0,0 +1,12 @@
1
+ import duckdb from '@haybarn/node-bindings';
2
+ import { DuckDBPreparedStatement } from './DuckDBPreparedStatement';
3
+ import { DuckDBPreparedStatementCollection } from './DuckDBPreparedStatementCollection';
4
+ export declare class DuckDBExtractedStatements {
5
+ private readonly connection;
6
+ private readonly extracted_statements;
7
+ private readonly statement_count;
8
+ private readonly preparedStatements?;
9
+ constructor(connection: duckdb.Connection, extracted_statements: duckdb.ExtractedStatements, statement_count: number, preparedStatements?: DuckDBPreparedStatementCollection);
10
+ get count(): number;
11
+ prepare(index: number): Promise<DuckDBPreparedStatement>;
12
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DuckDBExtractedStatements = void 0;
7
+ const node_bindings_1 = __importDefault(require("@haybarn/node-bindings"));
8
+ const DuckDBPreparedStatement_1 = require("./DuckDBPreparedStatement");
9
+ class DuckDBExtractedStatements {
10
+ connection;
11
+ extracted_statements;
12
+ statement_count;
13
+ preparedStatements;
14
+ constructor(connection, extracted_statements, statement_count, preparedStatements) {
15
+ this.connection = connection;
16
+ this.extracted_statements = extracted_statements;
17
+ this.statement_count = statement_count;
18
+ this.preparedStatements = preparedStatements;
19
+ }
20
+ get count() {
21
+ return this.statement_count;
22
+ }
23
+ async prepare(index) {
24
+ const prepared = new DuckDBPreparedStatement_1.DuckDBPreparedStatement(await node_bindings_1.default.prepare_extracted_statement(this.connection, this.extracted_statements, index));
25
+ if (this.preparedStatements) {
26
+ this.preparedStatements.add(prepared);
27
+ }
28
+ return prepared;
29
+ }
30
+ }
31
+ exports.DuckDBExtractedStatements = DuckDBExtractedStatements;
@@ -0,0 +1,10 @@
1
+ import duckdb from '@haybarn/node-bindings';
2
+ export declare class DuckDBFunctionInfo {
3
+ private readonly function_info;
4
+ constructor(function_info: duckdb.FunctionInfo);
5
+ get bindData(): object | undefined;
6
+ getBindData(): object | undefined;
7
+ get extraInfo(): object | undefined;
8
+ getExtraInfo(): object | undefined;
9
+ setError(error: string): void;
10
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DuckDBFunctionInfo = void 0;
7
+ const node_bindings_1 = __importDefault(require("@haybarn/node-bindings"));
8
+ class DuckDBFunctionInfo {
9
+ function_info;
10
+ constructor(function_info) {
11
+ this.function_info = function_info;
12
+ }
13
+ get bindData() {
14
+ return this.getBindData();
15
+ }
16
+ getBindData() {
17
+ return node_bindings_1.default.scalar_function_get_bind_data(this.function_info);
18
+ }
19
+ get extraInfo() {
20
+ return this.getExtraInfo();
21
+ }
22
+ getExtraInfo() {
23
+ return node_bindings_1.default.scalar_function_get_extra_info(this.function_info);
24
+ }
25
+ setError(error) {
26
+ node_bindings_1.default.scalar_function_set_error(this.function_info, error);
27
+ }
28
+ }
29
+ exports.DuckDBFunctionInfo = DuckDBFunctionInfo;
@@ -0,0 +1,10 @@
1
+ import duckdb from '@haybarn/node-bindings';
2
+ import { DuckDBConnection } from './DuckDBConnection';
3
+ export declare class DuckDBInstance {
4
+ private readonly db;
5
+ constructor(db: duckdb.Database);
6
+ static create(path?: string, options?: Record<string, string>): Promise<DuckDBInstance>;
7
+ static fromCache(path?: string, options?: Record<string, string>): Promise<DuckDBInstance>;
8
+ connect(): Promise<DuckDBConnection>;
9
+ closeSync(): void;
10
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DuckDBInstance = void 0;
7
+ const node_bindings_1 = __importDefault(require("@haybarn/node-bindings"));
8
+ const createConfig_1 = require("./createConfig");
9
+ const DuckDBConnection_1 = require("./DuckDBConnection");
10
+ const DuckDBInstanceCache_1 = require("./DuckDBInstanceCache");
11
+ class DuckDBInstance {
12
+ db;
13
+ constructor(db) {
14
+ this.db = db;
15
+ }
16
+ static async create(path, options) {
17
+ const config = (0, createConfig_1.createConfig)(options);
18
+ return new DuckDBInstance(await node_bindings_1.default.open(path, config));
19
+ }
20
+ static async fromCache(path, options) {
21
+ return DuckDBInstanceCache_1.DuckDBInstanceCache.singleton.getOrCreateInstance(path, options);
22
+ }
23
+ async connect() {
24
+ return new DuckDBConnection_1.DuckDBConnection(await node_bindings_1.default.connect(this.db));
25
+ }
26
+ closeSync() {
27
+ node_bindings_1.default.close_sync(this.db);
28
+ }
29
+ }
30
+ exports.DuckDBInstance = DuckDBInstance;
@@ -0,0 +1,8 @@
1
+ import { DuckDBInstance } from './DuckDBInstance';
2
+ export declare class DuckDBInstanceCache {
3
+ private readonly cache;
4
+ constructor();
5
+ getOrCreateInstance(path?: string, options?: Record<string, string>): Promise<DuckDBInstance>;
6
+ private static singletonInstance;
7
+ static get singleton(): DuckDBInstanceCache;
8
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DuckDBInstanceCache = void 0;
7
+ const node_bindings_1 = __importDefault(require("@haybarn/node-bindings"));
8
+ const DuckDBInstance_1 = require("./DuckDBInstance");
9
+ const createConfig_1 = require("./createConfig");
10
+ class DuckDBInstanceCache {
11
+ cache;
12
+ constructor() {
13
+ this.cache = node_bindings_1.default.create_instance_cache();
14
+ }
15
+ async getOrCreateInstance(path, options) {
16
+ const config = (0, createConfig_1.createConfig)(options);
17
+ const db = await node_bindings_1.default.get_or_create_from_cache(this.cache, path, config);
18
+ return new DuckDBInstance_1.DuckDBInstance(db);
19
+ }
20
+ static singletonInstance;
21
+ static get singleton() {
22
+ if (!DuckDBInstanceCache.singletonInstance) {
23
+ DuckDBInstanceCache.singletonInstance = new DuckDBInstanceCache();
24
+ }
25
+ return DuckDBInstanceCache.singletonInstance;
26
+ }
27
+ }
28
+ exports.DuckDBInstanceCache = DuckDBInstanceCache;
@@ -0,0 +1,66 @@
1
+ import duckdb from '@haybarn/node-bindings';
2
+ import { DuckDBArrayType, DuckDBDecimalType, DuckDBEnumType, DuckDBListType, DuckDBMapType, DuckDBStructType, DuckDBType, DuckDBUnionType } from './DuckDBType';
3
+ import { DuckDBTypeId } from './DuckDBTypeId';
4
+ export declare class DuckDBLogicalType {
5
+ readonly logical_type: duckdb.LogicalType;
6
+ protected constructor(logical_type: duckdb.LogicalType);
7
+ static create(logical_type: duckdb.LogicalType): DuckDBLogicalType;
8
+ static createDecimal(width: number, scale: number): DuckDBDecimalLogicalType;
9
+ static createEnum(member_names: readonly string[]): DuckDBEnumLogicalType;
10
+ static createList(valueType: DuckDBLogicalType): DuckDBListLogicalType;
11
+ static createStruct(entryNames: readonly string[], entryLogicalTypes: readonly DuckDBLogicalType[]): DuckDBStructLogicalType;
12
+ static createMap(keyType: DuckDBLogicalType, valueType: DuckDBLogicalType): DuckDBMapLogicalType;
13
+ static createArray(valueType: DuckDBLogicalType, length: number): DuckDBArrayLogicalType;
14
+ static createUnion(memberTags: readonly string[], memberLogicalTypes: readonly DuckDBLogicalType[]): DuckDBUnionLogicalType;
15
+ get typeId(): DuckDBTypeId;
16
+ get alias(): string | undefined;
17
+ set alias(newAlias: string | null | undefined);
18
+ asType(): DuckDBType;
19
+ }
20
+ export declare class DuckDBDecimalLogicalType extends DuckDBLogicalType {
21
+ get width(): number;
22
+ get scale(): number;
23
+ get internalTypeId(): DuckDBTypeId;
24
+ asType(): DuckDBDecimalType;
25
+ }
26
+ export declare class DuckDBEnumLogicalType extends DuckDBLogicalType {
27
+ get valueCount(): number;
28
+ value(index: number): string;
29
+ values(): readonly string[];
30
+ get internalTypeId(): DuckDBTypeId;
31
+ asType(): DuckDBEnumType;
32
+ }
33
+ export declare class DuckDBListLogicalType extends DuckDBLogicalType {
34
+ get valueType(): DuckDBLogicalType;
35
+ asType(): DuckDBListType;
36
+ }
37
+ export declare class DuckDBStructLogicalType extends DuckDBLogicalType {
38
+ get entryCount(): number;
39
+ entryName(index: number): string;
40
+ entryLogicalType(index: number): DuckDBLogicalType;
41
+ entryType(index: number): DuckDBType;
42
+ entryNames(): string[];
43
+ entryLogicalTypes(): DuckDBLogicalType[];
44
+ entryTypes(): DuckDBType[];
45
+ asType(): DuckDBStructType;
46
+ }
47
+ export declare class DuckDBMapLogicalType extends DuckDBLogicalType {
48
+ get keyType(): DuckDBLogicalType;
49
+ get valueType(): DuckDBLogicalType;
50
+ asType(): DuckDBMapType;
51
+ }
52
+ export declare class DuckDBArrayLogicalType extends DuckDBLogicalType {
53
+ get valueType(): DuckDBLogicalType;
54
+ get length(): number;
55
+ asType(): DuckDBArrayType;
56
+ }
57
+ export declare class DuckDBUnionLogicalType extends DuckDBLogicalType {
58
+ get memberCount(): number;
59
+ memberTag(index: number): string;
60
+ memberLogicalType(index: number): DuckDBLogicalType;
61
+ memberType(index: number): DuckDBType;
62
+ memberTags(): string[];
63
+ memberLogicalTypes(): DuckDBLogicalType[];
64
+ memberTypes(): DuckDBType[];
65
+ asType(): DuckDBUnionType;
66
+ }