@duckdb/duckdb-wasm 1.11.0 → 1.11.1-dev.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 (94) hide show
  1. package/README.md +81 -25
  2. package/dist/duckdb-browser-blocking.cjs +25 -0
  3. package/dist/duckdb-browser-blocking.cjs.map +7 -0
  4. package/dist/duckdb-browser-blocking.mjs +23 -31
  5. package/dist/duckdb-browser-blocking.mjs.map +4 -4
  6. package/dist/duckdb-browser-coi.pthread.worker.js +27 -0
  7. package/dist/duckdb-browser-coi.pthread.worker.js.map +7 -0
  8. package/dist/duckdb-browser-coi.worker.js +35 -0
  9. package/dist/duckdb-browser-coi.worker.js.map +7 -0
  10. package/dist/duckdb-browser-eh.worker.js +33 -0
  11. package/dist/duckdb-browser-eh.worker.js.map +7 -0
  12. package/dist/duckdb-browser-mvp.worker.js +33 -0
  13. package/dist/duckdb-browser-mvp.worker.js.map +7 -0
  14. package/dist/duckdb-browser.cjs +2 -0
  15. package/dist/duckdb-browser.cjs.map +7 -0
  16. package/dist/duckdb-browser.mjs +1 -31
  17. package/dist/duckdb-browser.mjs.map +4 -4
  18. package/dist/{duckdb-next-coi.wasm → duckdb-coi.wasm} +0 -0
  19. package/dist/{duckdb.wasm → duckdb-eh.wasm} +0 -0
  20. package/dist/duckdb-mvp.wasm +0 -0
  21. package/dist/duckdb-node-blocking.cjs +4 -4
  22. package/dist/duckdb-node-blocking.cjs.map +4 -4
  23. package/dist/duckdb-node-eh.worker.cjs +37 -0
  24. package/dist/duckdb-node-eh.worker.cjs.map +7 -0
  25. package/dist/duckdb-node-mvp.worker.cjs +36 -0
  26. package/dist/duckdb-node-mvp.worker.cjs.map +7 -0
  27. package/dist/duckdb-node.cjs +1 -1
  28. package/dist/duckdb-node.cjs.map +4 -4
  29. package/dist/img/duckdb.svg +6 -0
  30. package/dist/img/duckdb_version_badge.svg +1 -0
  31. package/dist/img/duckdb_wasm.svg +14 -0
  32. package/dist/tests-browser.js +18799 -17513
  33. package/dist/tests-browser.js.map +4 -4
  34. package/dist/tests-node.cjs +7816 -5401
  35. package/dist/tests-node.cjs.map +4 -4
  36. package/dist/types/src/bindings/bindings_base.d.ts +27 -8
  37. package/dist/types/src/bindings/{bindings_browser_next.d.ts → bindings_browser_coi.d.ts} +0 -0
  38. package/dist/types/src/bindings/{bindings_browser_next_coi.d.ts → bindings_browser_eh.d.ts} +0 -0
  39. package/dist/types/src/bindings/{bindings_browser.d.ts → bindings_browser_mvp.d.ts} +0 -0
  40. package/dist/types/src/bindings/bindings_interface.d.ts +11 -5
  41. package/dist/types/src/bindings/{bindings_node_next.d.ts → bindings_node_eh.d.ts} +0 -0
  42. package/dist/types/src/bindings/{bindings_node.d.ts → bindings_node_mvp.d.ts} +0 -0
  43. package/dist/types/src/bindings/config.d.ts +34 -7
  44. package/dist/types/src/bindings/connection.d.ts +7 -1
  45. package/dist/types/src/bindings/index.d.ts +1 -1
  46. package/dist/types/src/bindings/insert_options.d.ts +3 -3
  47. package/dist/types/src/bindings/progress.d.ts +9 -0
  48. package/dist/types/src/bindings/runtime.d.ts +36 -5
  49. package/dist/types/src/bindings/runtime_browser.d.ts +4 -2
  50. package/dist/types/src/bindings/runtime_node.d.ts +2 -1
  51. package/dist/types/src/bindings/udf_function.d.ts +14 -0
  52. package/dist/types/src/bindings/udf_runtime.d.ts +3 -0
  53. package/dist/types/src/bindings/web_file.d.ts +3 -6
  54. package/dist/types/src/index.d.ts +1 -0
  55. package/dist/types/src/json_typedef.d.ts +17 -0
  56. package/dist/types/src/log.d.ts +5 -2
  57. package/dist/types/src/parallel/async_bindings.d.ts +16 -6
  58. package/dist/types/src/parallel/async_bindings_interface.d.ts +6 -3
  59. package/dist/types/src/parallel/async_connection.d.ts +4 -0
  60. package/dist/types/src/parallel/worker_dispatcher.d.ts +2 -1
  61. package/dist/types/src/parallel/worker_request.d.ts +15 -7
  62. package/dist/types/src/platform.d.ts +6 -3
  63. package/dist/types/src/targets/duckdb-browser-blocking.d.ts +8 -2
  64. package/dist/types/src/targets/{duckdb-browser-next-coi.pthread.worker.d.ts → duckdb-browser-coi.pthread.worker.d.ts} +0 -0
  65. package/dist/types/src/targets/{duckdb-browser-next-coi.worker.d.ts → duckdb-browser-coi.worker.d.ts} +0 -0
  66. package/dist/types/src/targets/{duckdb-browser-next.worker.d.ts → duckdb-browser-eh.worker.d.ts} +0 -0
  67. package/dist/types/src/targets/{duckdb-browser.worker.d.ts → duckdb-browser-mvp.worker.d.ts} +0 -0
  68. package/dist/types/src/targets/duckdb-node-blocking.d.ts +9 -2
  69. package/dist/types/src/targets/{duckdb-node-next.worker.d.ts → duckdb-node-eh.worker.d.ts} +0 -0
  70. package/dist/types/src/targets/{duckdb-node.worker.d.ts → duckdb-node-mvp.worker.d.ts} +0 -0
  71. package/dist/types/src/targets/duckdb.d.ts +3 -0
  72. package/dist/types/src/utils/index.d.ts +1 -0
  73. package/dist/types/src/utils/s3_helper.d.ts +27 -0
  74. package/dist/types/src/worker.d.ts +1 -0
  75. package/package.json +60 -45
  76. package/dist/duckdb-browser-next-coi.d.ts +0 -1
  77. package/dist/duckdb-browser-next-coi.pthread.worker.js +0 -3
  78. package/dist/duckdb-browser-next-coi.pthread.worker.js.map +0 -7
  79. package/dist/duckdb-browser-next-coi.worker.js +0 -33
  80. package/dist/duckdb-browser-next-coi.worker.js.map +0 -7
  81. package/dist/duckdb-browser-next.d.ts +0 -1
  82. package/dist/duckdb-browser-next.worker.js +0 -33
  83. package/dist/duckdb-browser-next.worker.js.map +0 -7
  84. package/dist/duckdb-browser.worker.js +0 -33
  85. package/dist/duckdb-browser.worker.js.map +0 -7
  86. package/dist/duckdb-next.wasm +0 -0
  87. package/dist/duckdb-node-next-coi.d.ts +0 -1
  88. package/dist/duckdb-node-next.d.ts +0 -1
  89. package/dist/duckdb-node-next.worker.cjs +0 -37
  90. package/dist/duckdb-node-next.worker.cjs.map +0 -7
  91. package/dist/duckdb-node.worker.cjs +0 -36
  92. package/dist/duckdb-node.worker.cjs.map +0 -7
  93. package/dist/types/src/bindings/insert.d.ts +0 -7
  94. package/dist/types/src/flat_arrow.d.ts +0 -14
@@ -1,13 +1,15 @@
1
1
  import { DuckDBModule, PThread } from './duckdb_module';
2
2
  import { DuckDBConfig } from './config';
3
3
  import { Logger } from '../log';
4
+ import { InstantiationProgress } from './progress';
4
5
  import { DuckDBBindings } from './bindings_interface';
5
6
  import { DuckDBConnection } from './connection';
6
- import { DuckDBRuntime } from './runtime';
7
+ import { DuckDBRuntime, DuckDBDataProtocol } from './runtime';
7
8
  import { CSVInsertOptions, JSONInsertOptions, ArrowInsertOptions } from './insert_options';
8
9
  import { ScriptTokens } from './tokens';
9
10
  import { FileStatistics } from './file_stats';
10
11
  import { WebFile } from './web_file';
12
+ import * as arrow from 'apache-arrow';
11
13
  declare global {
12
14
  var DUCKDB_RUNTIME: any;
13
15
  }
@@ -31,6 +33,8 @@ export declare abstract class DuckDBBindingsBase implements DuckDBBindings {
31
33
  protected _initPromise: Promise<void> | null;
32
34
  /** The resolver for the open promise (called by onRuntimeInitialized) */
33
35
  protected _initPromiseResolver: () => void;
36
+ /** The next UDF id */
37
+ protected _nextUDFId: number;
34
38
  constructor(logger: Logger, runtime: DuckDBRuntime);
35
39
  /** Get the logger */
36
40
  get logger(): Logger;
@@ -40,9 +44,11 @@ export declare abstract class DuckDBBindingsBase implements DuckDBBindings {
40
44
  get pthread(): PThread | null;
41
45
  /** Instantiate the module */
42
46
  protected abstract instantiateImpl(moduleOverrides: Partial<DuckDBModule>): Promise<DuckDBModule>;
47
+ /** Instantiate the module */
48
+ protected onInstantiationProgress: ((p: InstantiationProgress) => void)[];
43
49
  /** Instantiate the database */
44
- instantiate(): Promise<this>;
45
- /** Open a database at a path */
50
+ instantiate(onProgress?: (progress: InstantiationProgress) => void): Promise<this>;
51
+ /** Open a database with a config */
46
52
  open(config: DuckDBConfig): void;
47
53
  /** Reset the database */
48
54
  reset(): void;
@@ -58,10 +64,23 @@ export declare abstract class DuckDBBindingsBase implements DuckDBBindings {
58
64
  disconnect(conn: number): void;
59
65
  /** Send a query and return the full result */
60
66
  runQuery(conn: number, text: string): Uint8Array;
61
- /** Send a query asynchronously. Results have to be fetched with `fetchQueryResults` */
62
- sendQuery(conn: number, text: string): Uint8Array;
67
+ /**
68
+ * Start a pending query asynchronously.
69
+ * This method returns either the arrow ipc schema or null.
70
+ * On null, the query has to be executed using `pollPendingQuery` until that returns != null.
71
+ * Results can then be fetched using `fetchQueryResults`
72
+ */
73
+ startPendingQuery(conn: number, text: string): Uint8Array | null;
74
+ /** Poll a pending query */
75
+ pollPendingQuery(conn: number): Uint8Array | null;
76
+ /** Cancel a pending query */
77
+ cancelPendingQuery(conn: number): boolean;
63
78
  /** Fetch query results */
64
79
  fetchQueryResults(conn: number): Uint8Array;
80
+ /** Get table names */
81
+ getTableNames(conn: number, text: string): string[];
82
+ /** Create a scalar function */
83
+ createScalarFunction(conn: number, name: string, returns: arrow.DataType, func: (...args: any[]) => void): void;
65
84
  /** Prepare a statement and return its identifier */
66
85
  createPrepared(conn: number, text: string): number;
67
86
  /** Close a prepared statement */
@@ -79,15 +98,15 @@ export declare abstract class DuckDBBindingsBase implements DuckDBBindings {
79
98
  /** Glob file infos */
80
99
  globFiles(path: string): WebFile[];
81
100
  /** Register a file object URL */
82
- registerFileURL(name: string, url?: string): void;
101
+ registerFileURL(name: string, url: string, proto: DuckDBDataProtocol, directIO?: boolean): void;
83
102
  /** Register file text */
84
103
  registerFileText(name: string, text: string): void;
85
104
  /** Register a file buffer */
86
105
  registerFileBuffer(name: string, buffer: Uint8Array): void;
87
106
  /** Register a file object URL */
88
- registerFileHandle<HandleType>(name: string, handle: HandleType): void;
107
+ registerFileHandle<HandleType>(name: string, handle: HandleType, protocol: DuckDBDataProtocol, directIO: boolean): void;
89
108
  /** Drop file */
90
- dropFile(name: string): boolean;
109
+ dropFile(name: string): void;
91
110
  /** Drop files */
92
111
  dropFiles(): void;
93
112
  /** Flush all files */
@@ -1,31 +1,37 @@
1
- import { DuckDBConfig, DuckDBConnection, FileStatistics } from '.';
1
+ import { DuckDBConfig, DuckDBConnection, DuckDBDataProtocol, FileStatistics, InstantiationProgress } from '.';
2
2
  import { CSVInsertOptions, JSONInsertOptions, ArrowInsertOptions } from './insert_options';
3
3
  import { ScriptTokens } from './tokens';
4
4
  import { WebFile } from './web_file';
5
+ import * as arrow from 'apache-arrow';
5
6
  export interface DuckDBBindings {
6
7
  open(config: DuckDBConfig): void;
7
8
  reset(): void;
9
+ instantiate(onProgress: (p: InstantiationProgress) => void): Promise<this>;
8
10
  getVersion(): string;
9
11
  getFeatureFlags(): number;
10
12
  tokenize(text: string): ScriptTokens;
11
13
  connect(): DuckDBConnection;
12
14
  disconnect(conn: number): void;
13
15
  runQuery(conn: number, text: string): Uint8Array;
14
- sendQuery(conn: number, text: string): Uint8Array;
16
+ startPendingQuery(conn: number, text: string): Uint8Array | null;
17
+ pollPendingQuery(conn: number): Uint8Array | null;
18
+ cancelPendingQuery(conn: number): boolean;
15
19
  fetchQueryResults(conn: number): Uint8Array;
20
+ getTableNames(conn: number, text: string): string[];
16
21
  createPrepared(conn: number, text: string): number;
17
22
  closePrepared(conn: number, statement: number): void;
18
23
  runPrepared(conn: number, statement: number, params: any[]): Uint8Array;
19
24
  sendPrepared(conn: number, statement: number, params: any[]): Uint8Array;
25
+ createScalarFunction(conn: number, name: string, returns: arrow.DataType, func: (...args: any[]) => void): void;
20
26
  insertArrowFromIPCStream(conn: number, buffer: Uint8Array, options?: ArrowInsertOptions): void;
21
27
  insertCSVFromPath(conn: number, path: string, options: CSVInsertOptions): void;
22
28
  insertJSONFromPath(conn: number, path: string, options: JSONInsertOptions): void;
23
- registerFileURL(name: string, url?: string): void;
29
+ registerFileURL(name: string, url: string, proto: DuckDBDataProtocol, directIO: boolean): void;
24
30
  registerFileText(name: string, text: string): void;
25
31
  registerFileBuffer(name: string, buffer: Uint8Array): void;
26
- registerFileHandle<HandleType>(name: string, handle: HandleType): void;
32
+ registerFileHandle<HandleType>(name: string, handle: HandleType, protocol: DuckDBDataProtocol, directIO: boolean): void;
27
33
  globFiles(path: string): WebFile[];
28
- dropFile(name: string): boolean;
34
+ dropFile(name: string): void;
29
35
  dropFiles(): void;
30
36
  flushFiles(): void;
31
37
  copyFileToPath(name: string, path: string): void;
@@ -1,20 +1,47 @@
1
- /** A DuckDB Config */
1
+ export interface DuckDBQueryConfig {
2
+ /**
3
+ * The polling interval for queries
4
+ */
5
+ queryPollingInterval?: number;
6
+ /**
7
+ * Cast BigInt to Double?
8
+ */
9
+ castBigIntToDouble?: boolean;
10
+ /**
11
+ * Cast Timestamp to Date64?
12
+ */
13
+ castTimestampToDate?: boolean;
14
+ /**
15
+ * Cast Timestamp to Date64?
16
+ */
17
+ castDurationToTime64?: boolean;
18
+ /**
19
+ * Cast Decimal to Double?
20
+ */
21
+ castDecimalToDouble?: boolean;
22
+ }
23
+ export interface DuckDBFilesystemConfig {
24
+ /**
25
+ * Allow falling back to full HTTP reads if the server does not support range requests.
26
+ */
27
+ allowFullHTTPReads?: boolean;
28
+ }
2
29
  export interface DuckDBConfig {
3
30
  /**
4
31
  * The database path
5
32
  */
6
33
  path?: string;
7
- /**
8
- * Emit BigInts?
9
- */
10
- emitBigInt?: boolean;
11
34
  /**
12
35
  * The maximum number of threads.
13
36
  * Note that this will only work with cross-origin isolated sites since it requires SharedArrayBuffers.
14
37
  */
15
38
  maximumThreads?: number;
16
39
  /**
17
- * Allow falling back to full HTTP reads if the server does not support range requests.
40
+ * The query config
18
41
  */
19
- allowFullHTTPReads?: boolean;
42
+ query?: DuckDBQueryConfig;
43
+ /**
44
+ * The filesystem config
45
+ */
46
+ filesystem?: DuckDBFilesystemConfig;
20
47
  }
@@ -20,11 +20,17 @@ export declare class DuckDBConnection {
20
20
  /** Send a query */
21
21
  send<T extends {
22
22
  [key: string]: arrow.DataType;
23
- } = any>(text: string): arrow.RecordBatchStreamReader<T>;
23
+ } = any>(text: string): Promise<arrow.RecordBatchStreamReader<T>>;
24
+ /** Cancel a query that was sent earlier */
25
+ cancelSent(): boolean;
26
+ /** Get table names */
27
+ getTableNames(query: string): string[];
24
28
  /** Create a prepared statement */
25
29
  prepare<T extends {
26
30
  [key: string]: arrow.DataType;
27
31
  } = any>(text: string): PreparedStatement;
32
+ /** Create a scalar function */
33
+ createScalarFunction(name: string, returns: arrow.DataType, func: (...args: any[]) => void): void;
28
34
  /** Insert an arrow table */
29
35
  insertArrowTable(table: arrow.Table, options: ArrowInsertOptions): void;
30
36
  /** Insert an arrow table from an ipc stream */
@@ -6,4 +6,4 @@ export * from './duckdb_module';
6
6
  export * from './file_stats';
7
7
  export * from './runtime';
8
8
  export * from './insert_options';
9
- export * from './insert';
9
+ export * from './progress';
@@ -1,5 +1,5 @@
1
1
  import * as arrow from 'apache-arrow';
2
- import { FlatArrowField } from '../flat_arrow';
2
+ import { SQLField } from '../json_typedef';
3
3
  export declare enum JSONTableShape {
4
4
  ROW_ARRAY = "row-array",
5
5
  COLUMN_OBJECT = "column-object"
@@ -12,7 +12,7 @@ export interface JSONInsertOptions {
12
12
  columns?: {
13
13
  [key: string]: arrow.DataType;
14
14
  };
15
- columnsFlat?: FlatArrowField[];
15
+ columnsFlat?: SQLField[];
16
16
  }
17
17
  export interface CSVInsertOptions {
18
18
  name: string;
@@ -29,7 +29,7 @@ export interface CSVInsertOptions {
29
29
  columns?: {
30
30
  [key: string]: arrow.DataType;
31
31
  };
32
- columnsFlat?: FlatArrowField[];
32
+ columnsFlat?: SQLField[];
33
33
  }
34
34
  export interface ArrowInsertOptions {
35
35
  name: string;
@@ -0,0 +1,9 @@
1
+ /** An instantiation progress */
2
+ export interface InstantiationProgress {
3
+ startedAt: Date;
4
+ updatedAt: Date;
5
+ bytesTotal: number;
6
+ bytesLoaded: number;
7
+ }
8
+ /** An instantiation progress handler */
9
+ export declare type InstantiationProgressHandler = (p: InstantiationProgress) => void;
@@ -1,7 +1,8 @@
1
1
  /// <reference types="emscripten" />
2
2
  import { DuckDBModule } from './duckdb_module';
3
+ import { UDFFunction } from './udf_function';
3
4
  /** Helper to decode text */
4
- export declare const decodeText: (input?: BufferSource | undefined) => string;
5
+ export declare const decodeText: (input?: BufferSource) => string;
5
6
  /** Copy a buffer */
6
7
  export declare function failWith(mod: DuckDBModule, msg: string): void;
7
8
  /** Copy a buffer */
@@ -11,17 +12,44 @@ export declare function readString(mod: DuckDBModule, begin: number, length: num
11
12
  /** The data protocol */
12
13
  export declare enum DuckDBDataProtocol {
13
14
  BUFFER = 0,
14
- NATIVE = 1,
15
- HTTP = 3
15
+ NODE_FS = 1,
16
+ BROWSER_FILEREADER = 2,
17
+ BROWSER_FSACCESS = 3,
18
+ HTTP = 4,
19
+ S3 = 5
20
+ }
21
+ /** File flags for opening files*/
22
+ export declare enum FileFlags {
23
+ FILE_FLAGS_READ = 1,
24
+ FILE_FLAGS_WRITE = 2,
25
+ FILE_FLAGS_DIRECT_IO = 4,
26
+ FILE_FLAGS_FILE_CREATE = 8,
27
+ FILE_FLAGS_FILE_CREATE_NEW = 16,
28
+ FILE_FLAGS_APPEND = 32
29
+ }
30
+ /** Configuration for the AWS S3 Filesystem */
31
+ export interface S3Config {
32
+ region?: string;
33
+ endpoint?: string;
34
+ accessKeyId?: string;
35
+ secretAccessKey?: string;
36
+ sessionToken?: string;
16
37
  }
17
38
  /** An info for a file registered with DuckDB */
18
39
  export interface DuckDBFileInfo {
40
+ cacheEpoch: number;
19
41
  fileId: number;
20
42
  fileName: string;
21
43
  dataProtocol: DuckDBDataProtocol;
22
44
  dataUrl: string | null;
23
- dataNativeFd: number | null;
24
45
  allowFullHttpReads?: boolean;
46
+ s3Config?: S3Config;
47
+ }
48
+ /** Global info for all files registered with DuckDB */
49
+ export interface DuckDBGlobalFileInfo {
50
+ cacheEpoch: number;
51
+ allowFullHttpReads?: boolean;
52
+ s3Config?: S3Config;
25
53
  }
26
54
  /** Call a function with packed response buffer */
27
55
  export declare function callSRet(mod: DuckDBModule, funcName: string, argTypes: Array<Emscripten.JSType>, args: Array<any>): [number, number, number];
@@ -30,8 +58,10 @@ export declare function dropResponseBuffers(mod: DuckDBModule): void;
30
58
  /** The duckdb runtime */
31
59
  export interface DuckDBRuntime {
32
60
  _files?: Map<string, any>;
61
+ _udfFunctions: Map<number, UDFFunction>;
33
62
  testPlatformFeature(mod: DuckDBModule, feature: number): boolean;
34
- openFile(mod: DuckDBModule, fileId: number): void;
63
+ getDefaultDataProtocol(mod: DuckDBModule): number;
64
+ openFile(mod: DuckDBModule, fileId: number, flags: FileFlags): void;
35
65
  syncFile(mod: DuckDBModule, fileId: number): void;
36
66
  closeFile(mod: DuckDBModule, fileId: number): void;
37
67
  getLastFileModificationTime(mod: DuckDBModule, fileId: number): number;
@@ -46,5 +76,6 @@ export interface DuckDBRuntime {
46
76
  moveFile(mod: DuckDBModule, fromPtr: number, fromLen: number, toPtr: number, toLen: number): void;
47
77
  checkFile(mod: DuckDBModule, pathPtr: number, pathLen: number): boolean;
48
78
  removeFile(mod: DuckDBModule, pathPtr: number, pathLen: number): void;
79
+ callScalarUDF(mod: DuckDBModule, response: number, funcId: number, descPtr: number, descSize: number, ptrsPtr: number, ptrsSize: number): void;
49
80
  }
50
81
  export declare const DEFAULT_RUNTIME: DuckDBRuntime;
@@ -1,7 +1,9 @@
1
- import { DuckDBRuntime, DuckDBFileInfo } from './runtime';
1
+ import { DuckDBFileInfo, DuckDBGlobalFileInfo, DuckDBRuntime } from './runtime';
2
2
  import { DuckDBModule } from './duckdb_module';
3
3
  export declare const BROWSER_RUNTIME: DuckDBRuntime & {
4
- fileInfoCache: Map<number, DuckDBFileInfo>;
4
+ _fileInfoCache: Map<number, DuckDBFileInfo>;
5
+ _globalFileInfo: DuckDBGlobalFileInfo | null;
5
6
  getFileInfo(mod: DuckDBModule, fileId: number): DuckDBFileInfo | null;
7
+ getGlobalFileInfo(mod: DuckDBModule): DuckDBGlobalFileInfo | null;
6
8
  };
7
9
  export default BROWSER_RUNTIME;
@@ -1,7 +1,8 @@
1
1
  import { DuckDBRuntime, DuckDBFileInfo } from './runtime';
2
2
  import { DuckDBModule } from './duckdb_module';
3
3
  export declare const NODE_RUNTIME: DuckDBRuntime & {
4
- fileInfoCache: Map<number, DuckDBFileInfo>;
4
+ _filesById: Map<number, any>;
5
+ _fileInfoCache: Map<number, DuckDBFileInfo>;
5
6
  resolveFileInfo(mod: DuckDBModule, fileId: number): DuckDBFileInfo | null;
6
7
  };
7
8
  export default NODE_RUNTIME;
@@ -0,0 +1,14 @@
1
+ import { SQLType } from '../json_typedef';
2
+ import * as arrow from 'apache-arrow';
3
+ export interface UDFFunctionDeclaration {
4
+ functionId: number;
5
+ name: string;
6
+ returnType: SQLType;
7
+ }
8
+ export interface UDFFunction {
9
+ functionId: number;
10
+ connectionId: number;
11
+ name: string;
12
+ returnType: arrow.DataType;
13
+ func: (...args: any[]) => any;
14
+ }
@@ -0,0 +1,3 @@
1
+ import { DuckDBRuntime } from './runtime';
2
+ import { DuckDBModule } from './duckdb_module';
3
+ export declare function callScalarUDF(runtime: DuckDBRuntime, mod: DuckDBModule, response: number, funcId: number, descPtr: number, descSize: number, ptrsPtr: number, ptrsSize: number): void;
@@ -1,14 +1,11 @@
1
- export declare enum DataProtocol {
2
- BUFFER = 0,
3
- NATIVE = 1,
4
- HTTP = 2
5
- }
1
+ import { DuckDBDataProtocol } from './runtime';
6
2
  export interface WebFile {
7
3
  fileName: string;
8
- dataProtocol: DataProtocol;
4
+ dataProtocol: DuckDBDataProtocol;
9
5
  fileId?: number;
10
6
  fileSize?: number;
11
7
  dataUrl?: string;
12
8
  dataNativeFd?: number;
9
+ collectStatistics?: boolean;
13
10
  allowFullHttpReads?: boolean;
14
11
  }
@@ -4,3 +4,4 @@ export * from './parallel';
4
4
  export * from './status';
5
5
  export * from './platform';
6
6
  export * from './version';
7
+ export * from './worker';
@@ -0,0 +1,17 @@
1
+ import * as arrow from 'apache-arrow';
2
+ export interface SQLType {
3
+ sqlType: string;
4
+ nullable?: boolean;
5
+ precision?: number;
6
+ scale?: number;
7
+ timezone?: string;
8
+ byteWidth?: number;
9
+ keyType?: SQLType;
10
+ valueType?: SQLType;
11
+ fields?: SQLField[];
12
+ }
13
+ export declare function arrowToSQLType(type: arrow.DataType): SQLType;
14
+ export declare type SQLField = SQLType & {
15
+ name: string;
16
+ };
17
+ export declare function arrowToSQLField(name: string, type: arrow.DataType): SQLField;
@@ -10,7 +10,8 @@ export declare enum LogTopic {
10
10
  CONNECT = 1,
11
11
  DISCONNECT = 2,
12
12
  OPEN = 3,
13
- QUERY = 4
13
+ QUERY = 4,
14
+ INSTANTIATE = 5
14
15
  }
15
16
  export declare enum LogEvent {
16
17
  NONE = 0,
@@ -35,7 +36,7 @@ export declare type LogEntry<O, T, E, V> = {
35
36
  readonly event: E;
36
37
  readonly value: V;
37
38
  };
38
- export declare type LogEntryVariant = LogEntry<LogOrigin.BINDINGS, LogTopic.QUERY, LogEvent.START, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.QUERY, LogEvent.OK, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.QUERY, LogEvent.ERROR, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.CONNECT, LogEvent.OK, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.CONNECT, LogEvent.ERROR, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.DISCONNECT, LogEvent.OK, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.DISCONNECT, LogEvent.ERROR, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.OPEN, LogEvent.START, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.OPEN, LogEvent.OK, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.OPEN, LogEvent.ERROR, void> | LogEntry<LogOrigin.ASYNC_DUCKDB, LogTopic.QUERY, LogEvent.RUN, string>;
39
+ export declare type LogEntryVariant = LogEntry<LogOrigin.BINDINGS, LogTopic.INSTANTIATE, LogEvent.ERROR, string> | LogEntry<LogOrigin.BINDINGS, LogTopic.QUERY, LogEvent.START, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.QUERY, LogEvent.OK, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.QUERY, LogEvent.ERROR, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.CONNECT, LogEvent.OK, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.CONNECT, LogEvent.ERROR, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.DISCONNECT, LogEvent.OK, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.DISCONNECT, LogEvent.ERROR, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.OPEN, LogEvent.START, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.OPEN, LogEvent.OK, void> | LogEntry<LogOrigin.BINDINGS, LogTopic.OPEN, LogEvent.ERROR, void> | LogEntry<LogOrigin.ASYNC_DUCKDB, LogTopic.QUERY, LogEvent.RUN, string>;
39
40
  export interface Logger {
40
41
  log(entry: LogEntryVariant): void;
41
42
  }
@@ -43,6 +44,8 @@ export declare class VoidLogger implements Logger {
43
44
  log(_entry: LogEntryVariant): void;
44
45
  }
45
46
  export declare class ConsoleLogger implements Logger {
47
+ protected level: LogLevel;
48
+ constructor(level?: LogLevel);
46
49
  log(entry: LogEntryVariant): void;
47
50
  }
48
51
  export declare function getLogLevelLabel(level: LogLevel): string;
@@ -6,7 +6,9 @@ import { CSVInsertOptions, JSONInsertOptions, ArrowInsertOptions } from '../bind
6
6
  import { ScriptTokens } from '../bindings/tokens';
7
7
  import { FileStatistics } from '../bindings/file_stats';
8
8
  import { DuckDBConfig } from '../bindings/config';
9
+ import { InstantiationProgress } from '../bindings/progress';
9
10
  import { WebFile } from '../bindings/web_file';
11
+ import { DuckDBDataProtocol } from '../bindings';
10
12
  export declare class AsyncDuckDB implements AsyncDuckDBBindings {
11
13
  /** The message handler */
12
14
  protected readonly _onMessageHandler: (event: MessageEvent) => void;
@@ -14,6 +16,8 @@ export declare class AsyncDuckDB implements AsyncDuckDBBindings {
14
16
  protected readonly _onErrorHandler: (event: ErrorEvent) => void;
15
17
  /** The close handler */
16
18
  protected readonly _onCloseHandler: () => void;
19
+ /** Instantiate the module */
20
+ protected _onInstantiationProgress: ((p: InstantiationProgress) => void)[];
17
21
  /** The logger */
18
22
  protected readonly _logger: Logger;
19
23
  /** The worker */
@@ -48,13 +52,13 @@ export declare class AsyncDuckDB implements AsyncDuckDBBindings {
48
52
  /** Ping the worker thread */
49
53
  ping(): Promise<any>;
50
54
  /** Try to drop a file */
51
- dropFile(name: string): Promise<boolean>;
55
+ dropFile(name: string): Promise<null>;
52
56
  /** Try to drop files */
53
57
  dropFiles(): Promise<null>;
54
58
  /** Flush all files */
55
59
  flushFiles(): Promise<null>;
56
60
  /** Open the database */
57
- instantiate(mainModuleURL: string, pthreadWorkerURL?: string | null): Promise<null>;
61
+ instantiate(mainModuleURL: string, pthreadWorkerURL?: string | null, progress?: (progress: InstantiationProgress) => void): Promise<null>;
58
62
  /** Get the version */
59
63
  getVersion(): Promise<string>;
60
64
  /** Get the feature flags */
@@ -71,10 +75,16 @@ export declare class AsyncDuckDB implements AsyncDuckDBBindings {
71
75
  disconnect(conn: ConnectionID): Promise<void>;
72
76
  /** Run a query */
73
77
  runQuery(conn: ConnectionID, text: string): Promise<Uint8Array>;
74
- /** Send a query */
75
- sendQuery(conn: ConnectionID, text: string): Promise<Uint8Array>;
78
+ /** Start a pending query */
79
+ startPendingQuery(conn: ConnectionID, text: string): Promise<Uint8Array | null>;
80
+ /** Poll a pending query */
81
+ pollPendingQuery(conn: ConnectionID): Promise<Uint8Array | null>;
82
+ /** Cancel a pending query */
83
+ cancelPendingQuery(conn: ConnectionID): Promise<boolean>;
76
84
  /** Fetch query results */
77
85
  fetchQueryResults(conn: ConnectionID): Promise<Uint8Array>;
86
+ /** Get table names */
87
+ getTableNames(conn: number, text: string): Promise<string[]>;
78
88
  /** Prepare a statement and return its identifier */
79
89
  createPrepared(conn: number, text: string): Promise<number>;
80
90
  /** Close a prepared statement */
@@ -88,13 +98,13 @@ export declare class AsyncDuckDB implements AsyncDuckDBBindings {
88
98
  /** Register file text */
89
99
  registerFileText(name: string, text: string): Promise<void>;
90
100
  /** Register a file path. */
91
- registerFileURL(name: string, url: string): Promise<void>;
101
+ registerFileURL(name: string, url: string, proto: DuckDBDataProtocol, directIO: boolean): Promise<void>;
92
102
  /** Register an empty file buffer. */
93
103
  registerEmptyFileBuffer(name: string): Promise<void>;
94
104
  /** Register a file buffer. */
95
105
  registerFileBuffer(name: string, buffer: Uint8Array): Promise<void>;
96
106
  /** Register a file handle. */
97
- registerFileHandle<HandleType>(name: string, handle: HandleType): Promise<void>;
107
+ registerFileHandle<HandleType>(name: string, handle: HandleType, protocol: DuckDBDataProtocol, directIO: boolean): Promise<void>;
98
108
  /** Enable file statistics */
99
109
  collectFileStatistics(name: string, enable: boolean): Promise<void>;
100
110
  /** Export file statistics */
@@ -1,16 +1,19 @@
1
1
  import { Logger } from '../log';
2
2
  import { CSVInsertOptions, JSONInsertOptions } from '../bindings/insert_options';
3
+ import { DuckDBDataProtocol } from '../bindings';
3
4
  /** An interface for the async DuckDB bindings */
4
5
  export interface AsyncDuckDBBindings {
5
6
  logger: Logger;
6
- registerFileURL(name: string, url: string, size: number): Promise<void>;
7
+ registerFileURL(name: string, url: string, proto: DuckDBDataProtocol, directIO: boolean): Promise<void>;
7
8
  registerFileBuffer(name: string, buffer: Uint8Array): Promise<void>;
8
- registerFileHandle<HandleType>(name: string, handle: HandleType): Promise<void>;
9
+ registerFileHandle<HandleType>(name: string, handle: HandleType, protocol: DuckDBDataProtocol, directIO: boolean): Promise<void>;
9
10
  copyFileToPath(name: string, out: string): Promise<void>;
10
11
  copyFileToBuffer(name: string): Promise<Uint8Array>;
11
12
  disconnect(conn: number): Promise<void>;
12
13
  runQuery(conn: number, text: string): Promise<Uint8Array>;
13
- sendQuery(conn: number, text: string): Promise<Uint8Array>;
14
+ startPendingQuery(conn: number, text: string): Promise<Uint8Array | null>;
15
+ pollPendingQuery(conn: number): Promise<Uint8Array | null>;
16
+ cancelPendingQuery(conn: number): Promise<boolean>;
14
17
  fetchQueryResults(conn: number): Promise<Uint8Array>;
15
18
  createPrepared(conn: number, text: string): Promise<number>;
16
19
  closePrepared(conn: number, statement: number): Promise<void>;
@@ -22,6 +22,10 @@ export declare class AsyncDuckDBConnection {
22
22
  send<T extends {
23
23
  [key: string]: arrow.DataType;
24
24
  } = any>(text: string): Promise<arrow.AsyncRecordBatchStreamReader<T>>;
25
+ /** Cancel a query that was sent earlier */
26
+ cancelSent(): Promise<boolean>;
27
+ /** Get table names */
28
+ getTableNames(query: string): Promise<string[]>;
25
29
  /** Create a prepared statement */
26
30
  prepare<T extends {
27
31
  [key: string]: arrow.DataType;
@@ -1,13 +1,14 @@
1
1
  import { DuckDBBindings } from '../bindings';
2
2
  import { WorkerResponseVariant, WorkerRequestVariant } from './worker_request';
3
3
  import { Logger, LogEntryVariant } from '../log';
4
+ import { InstantiationProgress } from '../bindings/progress';
4
5
  export declare abstract class AsyncDuckDBDispatcher implements Logger {
5
6
  /** The bindings */
6
7
  protected _bindings: DuckDBBindings | null;
7
8
  /** The next message id */
8
9
  protected _nextMessageId: number;
9
10
  /** Instantiate the wasm module */
10
- protected abstract instantiate(mainModule: string, pthreadWorker: string | null): Promise<DuckDBBindings>;
11
+ protected abstract instantiate(mainModule: string, pthreadWorker: string | null, progress: (p: InstantiationProgress) => void): Promise<DuckDBBindings>;
11
12
  /** Post a response to the main thread */
12
13
  protected abstract postMessage(response: WorkerResponseVariant, transfer: ArrayBuffer[]): void;
13
14
  /** Send log entry to the main thread */