@sqlrooms/duckdb 0.29.0-rc.0 → 0.29.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +2 -1
- package/README.md +84 -4
- package/dist/DuckDbSlice.d.ts +56 -14
- package/dist/DuckDbSlice.d.ts.map +1 -1
- package/dist/DuckDbSlice.js +299 -164
- package/dist/DuckDbSlice.js.map +1 -1
- package/dist/connectors/WasmDuckDbConnector.d.ts.map +1 -1
- package/dist/connectors/WasmDuckDbConnector.js +27 -0
- package/dist/connectors/WasmDuckDbConnector.js.map +1 -1
- package/dist/connectors/WebSocketDuckDbConnector.d.ts +23 -0
- package/dist/connectors/WebSocketDuckDbConnector.d.ts.map +1 -1
- package/dist/connectors/WebSocketDuckDbConnector.js +62 -0
- package/dist/connectors/WebSocketDuckDbConnector.js.map +1 -1
- package/dist/connectors/createDuckDbConnector.d.ts +1 -1
- package/dist/connectors/createDuckDbConnector.d.ts.map +1 -1
- package/dist/connectors/createDuckDbConnector.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/loadTableSchemas.d.ts +40 -0
- package/dist/loadTableSchemas.d.ts.map +1 -0
- package/dist/loadTableSchemas.js +260 -0
- package/dist/loadTableSchemas.js.map +1 -0
- package/dist/use-copy-as-tsv.d.ts +13 -0
- package/dist/use-copy-as-tsv.d.ts.map +1 -0
- package/dist/use-copy-as-tsv.js +68 -0
- package/dist/use-copy-as-tsv.js.map +1 -0
- package/dist/use-export-to-csv.d.ts +5 -0
- package/dist/use-export-to-csv.d.ts.map +1 -0
- package/dist/{exportToCsv.js → use-export-to-csv.js} +1 -1
- package/dist/use-export-to-csv.js.map +1 -0
- package/dist/useDataTable.d.ts +14 -0
- package/dist/useDataTable.d.ts.map +1 -0
- package/dist/useDataTable.js +21 -0
- package/dist/useDataTable.js.map +1 -0
- package/package.json +27 -27
- package/dist/exportToCsv.d.ts +0 -4
- package/dist/exportToCsv.d.ts.map +0 -1
- package/dist/exportToCsv.js.map +0 -1
package/LICENSE.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright
|
|
3
|
+
Copyright 2024-2026 SQLRooms Contributors
|
|
4
|
+
Copyright Vis.gl contributors
|
|
4
5
|
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
7
|
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ A powerful wrapper around DuckDB-WASM that provides React hooks and utilities fo
|
|
|
4
4
|
|
|
5
5
|
### React Integration & Type Safety
|
|
6
6
|
|
|
7
|
-
- **React Hooks**: Seamless integration with React applications via `useSql`
|
|
7
|
+
- **React Hooks**: Seamless integration with React applications via `useSql` and `useDataTable`
|
|
8
8
|
- **Runtime Validation**: Optional Zod schema validation for query results with type transformations
|
|
9
9
|
- **Typed Row Accessors**: Type-safe row access with validation and multiple iteration methods
|
|
10
10
|
|
|
@@ -57,6 +57,55 @@ function UserList() {
|
|
|
57
57
|
|
|
58
58
|
For more information and examples on using the `useSql` hook, see the [useSql API documentation](/api/duckdb/functions/useSql).
|
|
59
59
|
|
|
60
|
+
### Monitoring WebSocket DuckDB Connections
|
|
61
|
+
|
|
62
|
+
`createWebSocketDuckDbConnector()` exposes the persistent WebSocket lifecycle
|
|
63
|
+
through `connectionStatus`, `subscribeConnectionStatus()`, and the optional
|
|
64
|
+
`onConnectionStatusChange` callback. Use this for live UI affordances such as
|
|
65
|
+
lost-connection dialogs. Call `reconnect()` to reopen the socket and rerun the
|
|
66
|
+
connector initialization SQL without destroying the connector instance.
|
|
67
|
+
|
|
68
|
+
```tsx
|
|
69
|
+
import {createWebSocketDuckDbConnector} from '@sqlrooms/duckdb';
|
|
70
|
+
|
|
71
|
+
const connector = createWebSocketDuckDbConnector({
|
|
72
|
+
wsUrl: 'ws://localhost:4000',
|
|
73
|
+
onConnectionStatusChange: (status) => {
|
|
74
|
+
console.log('DuckDB WebSocket status:', status);
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
const unsubscribe = connector.subscribeConnectionStatus((status) => {
|
|
79
|
+
if (status === 'disconnected') {
|
|
80
|
+
console.warn('DuckDB WebSocket disconnected');
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
await connector.reconnect();
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Looking up Table Metadata
|
|
88
|
+
|
|
89
|
+
Use `useDataTable()` in React components or `db.findTable()` from the room
|
|
90
|
+
store. String references are parsed like SQL identifiers, so use quotes for
|
|
91
|
+
literal dots in table names.
|
|
92
|
+
|
|
93
|
+
```tsx
|
|
94
|
+
import {useDataTable} from '@sqlrooms/duckdb';
|
|
95
|
+
|
|
96
|
+
function TableColumns() {
|
|
97
|
+
const table = useDataTable('"memory"."main"."earthquakes"');
|
|
98
|
+
|
|
99
|
+
return (
|
|
100
|
+
<ul>
|
|
101
|
+
{table?.columns.map((column) => (
|
|
102
|
+
<li key={column.name}>{column.name}</li>
|
|
103
|
+
))}
|
|
104
|
+
</ul>
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
60
109
|
### Using Zod for Runtime Validation
|
|
61
110
|
|
|
62
111
|
```tsx
|
|
@@ -207,11 +256,12 @@ function DatabaseManager() {
|
|
|
207
256
|
### Working with Qualified Table Names
|
|
208
257
|
|
|
209
258
|
```tsx
|
|
210
|
-
import {
|
|
259
|
+
import {quoteTableReference, resolveTableReference} from '@sqlrooms/duckdb';
|
|
211
260
|
import {useRoomStore} from './store';
|
|
212
261
|
import {Button} from '@sqlrooms/ui';
|
|
213
262
|
|
|
214
263
|
function QualifiedTableOps() {
|
|
264
|
+
const qualifyTableName = useRoomStore((state) => state.db.qualifyTableName);
|
|
215
265
|
const createTableFromQuery = useRoomStore(
|
|
216
266
|
(state) => state.db.createTableFromQuery,
|
|
217
267
|
);
|
|
@@ -219,14 +269,21 @@ function QualifiedTableOps() {
|
|
|
219
269
|
const checkTableExists = useRoomStore((state) => state.db.checkTableExists);
|
|
220
270
|
|
|
221
271
|
const run = async () => {
|
|
222
|
-
//
|
|
223
|
-
const qualifiedTable =
|
|
272
|
+
// Store-aware qualification knows which database is the default.
|
|
273
|
+
const qualifiedTable = qualifyTableName({
|
|
224
274
|
database: 'mydb',
|
|
225
275
|
schema: 'public',
|
|
226
276
|
table: 'users',
|
|
227
277
|
});
|
|
278
|
+
// toString() is the canonical portable table ID; toFullString() includes
|
|
279
|
+
// the database when explicit catalog qualification is needed.
|
|
280
|
+
const tableSql = quoteTableReference(qualifiedTable.toString());
|
|
281
|
+
const resolved = resolveTableReference([{table: qualifiedTable}], 'users');
|
|
228
282
|
|
|
229
283
|
await createTableFromQuery(qualifiedTable, 'SELECT * FROM source_table');
|
|
284
|
+
console.log('Quoted table reference:', tableSql);
|
|
285
|
+
console.log('Fully qualified reference:', qualifiedTable.toFullString());
|
|
286
|
+
console.log('Resolved table:', resolved.table?.table.toString());
|
|
230
287
|
const tableExists = await checkTableExists(qualifiedTable);
|
|
231
288
|
console.log('Table exists after create:', tableExists);
|
|
232
289
|
await dropTable(qualifiedTable);
|
|
@@ -236,6 +293,29 @@ function QualifiedTableOps() {
|
|
|
236
293
|
}
|
|
237
294
|
```
|
|
238
295
|
|
|
296
|
+
### Loading the Schema Catalog
|
|
297
|
+
|
|
298
|
+
Use `loadSchemaCatalog()` when you need the database/schema/table hierarchy,
|
|
299
|
+
including empty schemas and attached databases whose `main` schema has no
|
|
300
|
+
tables yet. The catalog filter receives typed entries for databases, schemas,
|
|
301
|
+
and tables, so schema visibility does not depend on fake table names.
|
|
302
|
+
Related option and filter types are exported for callers that wrap these
|
|
303
|
+
helpers in their own APIs.
|
|
304
|
+
|
|
305
|
+
```ts
|
|
306
|
+
import {
|
|
307
|
+
defaultLoadSchemaCatalogFilter,
|
|
308
|
+
loadSchemaCatalog,
|
|
309
|
+
} from '@sqlrooms/duckdb';
|
|
310
|
+
|
|
311
|
+
const catalog = await loadSchemaCatalog(connector, {
|
|
312
|
+
filterFunction: (entry) =>
|
|
313
|
+
entry.type === 'schema' && entry.schema === 'scratch'
|
|
314
|
+
? false
|
|
315
|
+
: defaultLoadSchemaCatalogFilter(entry),
|
|
316
|
+
});
|
|
317
|
+
```
|
|
318
|
+
|
|
239
319
|
## Loading Data from Files
|
|
240
320
|
|
|
241
321
|
### Using Load Functions Directly
|
package/dist/DuckDbSlice.d.ts
CHANGED
|
@@ -2,10 +2,23 @@ import { DataTable, DbSchemaNode, DuckDbConnector, QualifiedTableName, QueryHand
|
|
|
2
2
|
import { BaseRoomStoreState } from '@sqlrooms/room-store';
|
|
3
3
|
import * as arrow from 'apache-arrow';
|
|
4
4
|
import { StateCreator } from 'zustand';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
import { LoadSchemaCatalogFilterFunction, LoadTableSchemasFilter, LoadTableSchemasFilterFunction } from './loadTableSchemas';
|
|
6
|
+
/**
|
|
7
|
+
* Default predicate: which tables/schemas/databases appear in the data source panel.
|
|
8
|
+
* Hides `__sqlrooms_*` names and DuckDB's `temp` database.
|
|
9
|
+
*/
|
|
10
|
+
export declare const defaultLoadTableSchemasFilter: LoadTableSchemasFilterFunction;
|
|
11
|
+
/**
|
|
12
|
+
* Factory returning {@link defaultLoadTableSchemasFilter}.
|
|
13
|
+
* Hides `__sqlrooms_*` names and DuckDB's `temp` database.
|
|
14
|
+
* Apps can pass {@link CreateDuckDbSliceProps.loadTableSchemasFilter} to add more rules.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createDefaultLoadTableSchemasFilter(): LoadTableSchemasFilterFunction;
|
|
17
|
+
/**
|
|
18
|
+
* Default catalog visibility predicate for the data source panel.
|
|
19
|
+
* Hides SQLRooms internal objects and DuckDB's temporary database catalog.
|
|
20
|
+
*/
|
|
21
|
+
export declare const defaultLoadSchemaCatalogFilter: LoadSchemaCatalogFilterFunction;
|
|
9
22
|
/**
|
|
10
23
|
* State and actions for the DuckDB slice
|
|
11
24
|
*/
|
|
@@ -21,6 +34,13 @@ export type DuckDbSliceState = {
|
|
|
21
34
|
schema: string;
|
|
22
35
|
currentSchema: string | undefined;
|
|
23
36
|
currentDatabase: string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Create a context-aware qualified table name.
|
|
39
|
+
*
|
|
40
|
+
* String inputs are treated as table identifier names, not SQL references;
|
|
41
|
+
* use findTable() when resolving an existing table reference.
|
|
42
|
+
*/
|
|
43
|
+
qualifyTableName(tableName: string | QualifiedTableNameInput): QualifiedTableName;
|
|
24
44
|
/**
|
|
25
45
|
* Cache of refreshed table schemas
|
|
26
46
|
*/
|
|
@@ -69,11 +89,9 @@ export type DuckDbSliceState = {
|
|
|
69
89
|
/**
|
|
70
90
|
* Load the schemas of the tables in the database.
|
|
71
91
|
*/
|
|
72
|
-
loadTableSchemas(filter?:
|
|
73
|
-
table?: string;
|
|
74
|
-
}): Promise<DataTable[]>;
|
|
92
|
+
loadTableSchemas(filter?: LoadTableSchemasFilter): Promise<DataTable[]>;
|
|
75
93
|
/**
|
|
76
|
-
* @deprecated Use
|
|
94
|
+
* @deprecated Use findTable instead
|
|
77
95
|
*/
|
|
78
96
|
getTable(tableName: string): DataTable | undefined;
|
|
79
97
|
/**
|
|
@@ -81,12 +99,18 @@ export type DuckDbSliceState = {
|
|
|
81
99
|
*/
|
|
82
100
|
setTableRowCount(tableName: string | QualifiedTableName, rowCount: number): void;
|
|
83
101
|
/**
|
|
84
|
-
* Find a table by
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
102
|
+
* Find a table by reference in the last refreshed table schemas.
|
|
103
|
+
* String references are parsed as SQL identifiers, so dots separate
|
|
104
|
+
* database/schema/table segments unless quoted. If no schema or database is
|
|
105
|
+
* provided, the table is resolved in the current schema and database from
|
|
106
|
+
* the last schema refresh.
|
|
107
|
+
* @param tableName - The table reference to find.
|
|
88
108
|
* @returns The table or undefined if not found.
|
|
89
109
|
*/
|
|
110
|
+
findTable(tableName: string | QualifiedTableName): DataTable | undefined;
|
|
111
|
+
/**
|
|
112
|
+
* @deprecated Use findTable instead
|
|
113
|
+
*/
|
|
90
114
|
findTableByName(tableName: string | QualifiedTableName): DataTable | undefined;
|
|
91
115
|
/**
|
|
92
116
|
* Refresh table schemas from the database.
|
|
@@ -128,7 +152,12 @@ export type DuckDbSliceState = {
|
|
|
128
152
|
*/
|
|
129
153
|
checkTableExists: (tableName: string | QualifiedTableName) => Promise<boolean>;
|
|
130
154
|
/**
|
|
131
|
-
* Delete a table with optional schema and database
|
|
155
|
+
* Delete a table or view with optional schema and database.
|
|
156
|
+
* @param tableName - The name of the relation to delete (qualified or plain)
|
|
157
|
+
*/
|
|
158
|
+
dropRelation: (tableName: string | QualifiedTableName) => Promise<void>;
|
|
159
|
+
/**
|
|
160
|
+
* Delete a table with optional schema and database.
|
|
132
161
|
* @param tableName - The name of the table to delete (qualified or plain)
|
|
133
162
|
*/
|
|
134
163
|
dropTable: (tableName: string | QualifiedTableName) => Promise<void>;
|
|
@@ -176,13 +205,25 @@ export type DuckDbSliceState = {
|
|
|
176
205
|
}>;
|
|
177
206
|
};
|
|
178
207
|
};
|
|
208
|
+
type QualifiedTableNameInput = Pick<QualifiedTableName, 'database' | 'schema' | 'table' | 'defaultDatabase'>;
|
|
179
209
|
export type CreateDuckDbSliceProps = {
|
|
180
210
|
connector?: DuckDbConnector;
|
|
211
|
+
/**
|
|
212
|
+
* Optional table visibility filter.
|
|
213
|
+
* Defaults to {@link createDefaultLoadTableSchemasFilter}.
|
|
214
|
+
*/
|
|
215
|
+
loadTableSchemasFilter?: LoadTableSchemasFilterFunction | null;
|
|
216
|
+
/**
|
|
217
|
+
* Optional catalog visibility filter for the data source panel.
|
|
218
|
+
* Defaults to {@link defaultLoadSchemaCatalogFilter}. When omitted, custom
|
|
219
|
+
* table filters still apply to table entries while schemas/databases use the default.
|
|
220
|
+
*/
|
|
221
|
+
loadSchemaCatalogFilter?: LoadSchemaCatalogFilterFunction | null;
|
|
181
222
|
};
|
|
182
223
|
/**
|
|
183
224
|
* Create a DuckDB slice for managing the connector
|
|
184
225
|
*/
|
|
185
|
-
export declare function createDuckDbSlice({ connector, }?: CreateDuckDbSliceProps): StateCreator<DuckDbSliceState>;
|
|
226
|
+
export declare function createDuckDbSlice({ connector, loadTableSchemasFilter, loadSchemaCatalogFilter, }?: CreateDuckDbSliceProps): StateCreator<DuckDbSliceState>;
|
|
186
227
|
/**
|
|
187
228
|
* @internal
|
|
188
229
|
* Select values from the room store that includes the DuckDB slice.
|
|
@@ -195,4 +236,5 @@ export declare function createDuckDbSlice({ connector, }?: CreateDuckDbSliceProp
|
|
|
195
236
|
* @returns The selected value of type `T`
|
|
196
237
|
*/
|
|
197
238
|
export declare function useStoreWithDuckDb<T>(selector: (state: BaseRoomStoreState & DuckDbSliceState) => T): T;
|
|
239
|
+
export {};
|
|
198
240
|
//# sourceMappingURL=DuckDbSlice.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DuckDbSlice.d.ts","sourceRoot":"","sources":["../src/DuckDbSlice.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EACT,YAAY,EACZ,eAAe,
|
|
1
|
+
{"version":3,"file":"DuckDbSlice.d.ts","sourceRoot":"","sources":["../src/DuckDbSlice.ts"],"names":[],"mappings":"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"}
|