@duckdbfan/drizzle-duckdb 0.0.6 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +344 -62
  2. package/dist/bin/duckdb-introspect.d.ts +2 -0
  3. package/dist/client.d.ts +42 -0
  4. package/dist/columns.d.ts +142 -0
  5. package/dist/dialect.d.ts +27 -2
  6. package/dist/driver.d.ts +53 -37
  7. package/dist/duckdb-introspect.mjs +2890 -0
  8. package/dist/helpers.d.ts +1 -0
  9. package/dist/helpers.mjs +360 -0
  10. package/dist/index.d.ts +7 -0
  11. package/dist/index.mjs +3071 -209
  12. package/dist/introspect.d.ts +74 -0
  13. package/dist/migrator.d.ts +3 -2
  14. package/dist/olap.d.ts +46 -0
  15. package/dist/operators.d.ts +8 -0
  16. package/dist/options.d.ts +7 -0
  17. package/dist/pool.d.ts +30 -0
  18. package/dist/select-builder.d.ts +31 -0
  19. package/dist/session.d.ts +33 -8
  20. package/dist/sql/ast-transformer.d.ts +33 -0
  21. package/dist/sql/result-mapper.d.ts +9 -0
  22. package/dist/sql/selection.d.ts +2 -0
  23. package/dist/sql/visitors/array-operators.d.ts +5 -0
  24. package/dist/sql/visitors/column-qualifier.d.ts +10 -0
  25. package/dist/sql/visitors/generate-series-alias.d.ts +13 -0
  26. package/dist/sql/visitors/union-with-hoister.d.ts +11 -0
  27. package/dist/utils.d.ts +2 -5
  28. package/dist/value-wrappers-core.d.ts +42 -0
  29. package/dist/value-wrappers.d.ts +8 -0
  30. package/package.json +53 -16
  31. package/src/bin/duckdb-introspect.ts +181 -0
  32. package/src/client.ts +528 -0
  33. package/src/columns.ts +510 -1
  34. package/src/dialect.ts +111 -15
  35. package/src/driver.ts +266 -180
  36. package/src/helpers.ts +18 -0
  37. package/src/index.ts +8 -1
  38. package/src/introspect.ts +935 -0
  39. package/src/migrator.ts +10 -5
  40. package/src/olap.ts +190 -0
  41. package/src/operators.ts +27 -0
  42. package/src/options.ts +25 -0
  43. package/src/pool.ts +274 -0
  44. package/src/select-builder.ts +110 -0
  45. package/src/session.ts +306 -66
  46. package/src/sql/ast-transformer.ts +170 -0
  47. package/src/sql/result-mapper.ts +303 -0
  48. package/src/sql/selection.ts +60 -0
  49. package/src/sql/visitors/array-operators.ts +214 -0
  50. package/src/sql/visitors/column-qualifier.ts +586 -0
  51. package/src/sql/visitors/generate-series-alias.ts +291 -0
  52. package/src/sql/visitors/union-with-hoister.ts +106 -0
  53. package/src/utils.ts +2 -216
  54. package/src/value-wrappers-core.ts +168 -0
  55. package/src/value-wrappers.ts +165 -0
package/dist/driver.d.ts CHANGED
@@ -1,59 +1,75 @@
1
+ import { DuckDBInstance } from '@duckdb/node-api';
1
2
  import { entityKind } from 'drizzle-orm/entity';
2
3
  import type { Logger } from 'drizzle-orm/logger';
3
4
  import { PgDatabase } from 'drizzle-orm/pg-core/db';
4
- import { PgDialect } from 'drizzle-orm/pg-core/dialect';
5
+ import type { SelectedFields } from 'drizzle-orm/pg-core/query-builders';
5
6
  import { type ExtractTablesWithRelations, type RelationalSchemaConfig, type TablesRelationalConfig } from 'drizzle-orm/relations';
6
- import { type DrizzleConfig, type DrizzleTypeError } from 'drizzle-orm/utils';
7
- import type { DuckDBClient, DuckDBQueryResultHKT, DuckDBTransaction } from './session';
7
+ import { type DrizzleConfig } from 'drizzle-orm/utils';
8
+ import type { SQL } from 'drizzle-orm/sql/sql';
9
+ import type { DuckDBClientLike, DuckDBQueryResultHKT, DuckDBTransaction } from './session.ts';
8
10
  import { DuckDBSession } from './session.ts';
9
11
  import { DuckDBDialect } from './dialect.ts';
10
- import { PgSelectBuilder, type CreatePgSelectFromBuilderMode, type SelectedFields, type TableLikeHasEmptySelection } from 'drizzle-orm/pg-core/query-builders';
11
- import { PgColumn, PgTable, type PgSession } from 'drizzle-orm/pg-core';
12
- import { SQL, type ColumnsSelection } from 'drizzle-orm/sql/sql';
13
- import { Subquery, ViewBaseConfig, type SQLWrapper } from 'drizzle-orm';
14
- import { PgViewBase } from 'drizzle-orm/pg-core/view-base';
15
- import type { GetSelectTableName, GetSelectTableSelection } from 'drizzle-orm/query-builders/select.types';
12
+ import { DuckDBSelectBuilder } from './select-builder.ts';
13
+ import type { ExecuteBatchesRawChunk, ExecuteInBatchesOptions, RowData } from './client.ts';
14
+ import { type DuckDBPoolConfig, type PoolPreset } from './pool.ts';
15
+ import { type PreparedStatementCacheConfig, type PrepareCacheOption } from './options.ts';
16
16
  export interface PgDriverOptions {
17
17
  logger?: Logger;
18
+ rejectStringArrayLiterals?: boolean;
19
+ prepareCache?: PreparedStatementCacheConfig;
18
20
  }
19
21
  export declare class DuckDBDriver {
20
22
  private client;
21
23
  private dialect;
22
24
  private options;
23
25
  static readonly [entityKind]: string;
24
- constructor(client: DuckDBClient, dialect: DuckDBDialect, options?: PgDriverOptions);
26
+ constructor(client: DuckDBClientLike, dialect: DuckDBDialect, options?: PgDriverOptions);
25
27
  createSession(schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined): DuckDBSession<Record<string, unknown>, TablesRelationalConfig>;
26
28
  }
27
- export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(client: DuckDBClient, config?: DrizzleConfig<TSchema>): DuckDBDatabase<TSchema, ExtractTablesWithRelations<TSchema>>;
29
+ /** Connection configuration when using path-based connection */
30
+ export interface DuckDBConnectionConfig {
31
+ /** Database path: ':memory:', './file.duckdb', 'md:', 'md:database' */
32
+ path: string;
33
+ /** DuckDB instance options (e.g., motherduck_token) */
34
+ options?: Record<string, string>;
35
+ }
36
+ export interface DuckDBDrizzleConfig<TSchema extends Record<string, unknown> = Record<string, never>> extends DrizzleConfig<TSchema> {
37
+ rejectStringArrayLiterals?: boolean;
38
+ prepareCache?: PrepareCacheOption;
39
+ /** Pool configuration. Use preset name, size config, or false to disable. */
40
+ pool?: DuckDBPoolConfig | PoolPreset | false;
41
+ }
42
+ export interface DuckDBDrizzleConfigWithConnection<TSchema extends Record<string, unknown> = Record<string, never>> extends DuckDBDrizzleConfig<TSchema> {
43
+ /** Connection string or config object */
44
+ connection: string | DuckDBConnectionConfig;
45
+ }
46
+ export interface DuckDBDrizzleConfigWithClient<TSchema extends Record<string, unknown> = Record<string, never>> extends DuckDBDrizzleConfig<TSchema> {
47
+ /** Explicit client (connection or pool) */
48
+ client: DuckDBClientLike;
49
+ }
50
+ export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(connectionString: string): Promise<DuckDBDatabase<TSchema, ExtractTablesWithRelations<TSchema>>>;
51
+ export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(connectionString: string, config: DuckDBDrizzleConfig<TSchema>): Promise<DuckDBDatabase<TSchema, ExtractTablesWithRelations<TSchema>>>;
52
+ export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(config: DuckDBDrizzleConfigWithConnection<TSchema>): Promise<DuckDBDatabase<TSchema, ExtractTablesWithRelations<TSchema>>>;
53
+ export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(config: DuckDBDrizzleConfigWithClient<TSchema>): DuckDBDatabase<TSchema, ExtractTablesWithRelations<TSchema>>;
54
+ export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(client: DuckDBClientLike, config?: DuckDBDrizzleConfig<TSchema>): DuckDBDatabase<TSchema, ExtractTablesWithRelations<TSchema>>;
28
55
  export declare class DuckDBDatabase<TFullSchema extends Record<string, unknown> = Record<string, never>, TSchema extends TablesRelationalConfig = ExtractTablesWithRelations<TFullSchema>> extends PgDatabase<DuckDBQueryResultHKT, TFullSchema, TSchema> {
29
56
  readonly dialect: DuckDBDialect;
30
57
  readonly session: DuckDBSession<TFullSchema, TSchema>;
31
58
  static readonly [entityKind]: string;
32
- constructor(dialect: DuckDBDialect, session: DuckDBSession<TFullSchema, TSchema>, schema: RelationalSchemaConfig<TSchema> | undefined);
33
- select(): PgSelectBuilder<undefined>;
34
- select<TSelection extends SelectedFields>(fields: TSelection): PgSelectBuilder<TSelection>;
59
+ /** The underlying connection or pool */
60
+ readonly $client: DuckDBClientLike;
61
+ /** The DuckDB instance (when created from connection string) */
62
+ readonly $instance?: DuckDBInstance;
63
+ constructor(dialect: DuckDBDialect, session: DuckDBSession<TFullSchema, TSchema>, schema: RelationalSchemaConfig<TSchema> | undefined, client: DuckDBClientLike, instance?: DuckDBInstance);
64
+ /**
65
+ * Close the database connection pool and instance.
66
+ * Should be called when shutting down the application.
67
+ */
68
+ close(): Promise<void>;
69
+ select(): DuckDBSelectBuilder<undefined>;
70
+ select<TSelection extends SelectedFields>(fields: TSelection): DuckDBSelectBuilder<TSelection>;
71
+ executeBatches<T extends RowData = RowData>(query: SQL, options?: ExecuteInBatchesOptions): AsyncGenerator<T[], void, void>;
72
+ executeBatchesRaw(query: SQL, options?: ExecuteInBatchesOptions): AsyncGenerator<ExecuteBatchesRawChunk, void, void>;
73
+ executeArrow(query: SQL): Promise<unknown>;
35
74
  transaction<T>(transaction: (tx: DuckDBTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T>;
36
75
  }
37
- interface PgViewBaseInternal<TName extends string = string, TExisting extends boolean = boolean, TSelectedFields extends ColumnsSelection = ColumnsSelection> extends PgViewBase<TName, TExisting, TSelectedFields> {
38
- [ViewBaseConfig]?: {
39
- selectedFields: SelectedFields;
40
- };
41
- }
42
- export declare class DuckDBSelectBuilder<TSelection extends SelectedFields | undefined, TBuilderMode extends 'db' | 'qb' = 'db'> extends PgSelectBuilder<TSelection, TBuilderMode> {
43
- private _fields;
44
- private _session;
45
- private _dialect;
46
- private _withList;
47
- private _distinct;
48
- constructor(config: {
49
- fields: TSelection;
50
- session: PgSession | undefined;
51
- dialect: PgDialect;
52
- withList?: Subquery[];
53
- distinct?: boolean | {
54
- on: (PgColumn | SQLWrapper)[];
55
- };
56
- });
57
- from<TFrom extends PgTable | Subquery | PgViewBaseInternal | SQL>(source: TableLikeHasEmptySelection<TFrom> extends true ? DrizzleTypeError<"Cannot reference a data-modifying statement subquery if it doesn't contain a `returning` clause"> : TFrom): CreatePgSelectFromBuilderMode<TBuilderMode, GetSelectTableName<TFrom>, TSelection extends undefined ? GetSelectTableSelection<TFrom> : TSelection, TSelection extends undefined ? 'single' : 'partial'>;
58
- }
59
- export {};