drizzle-databend 0.1.11 → 0.1.13
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/dist/columns.d.ts +25 -37
- package/dist/databend-core/alias.d.ts +1 -0
- package/dist/databend-core/columns/all.d.ts +35 -0
- package/dist/databend-core/columns/array.d.ts +16 -0
- package/dist/databend-core/columns/bigint.d.ts +24 -0
- package/dist/databend-core/columns/binary.d.ts +13 -0
- package/dist/databend-core/columns/bitmap.d.ts +13 -0
- package/dist/databend-core/columns/boolean.d.ts +13 -0
- package/dist/databend-core/columns/common.d.ts +45 -0
- package/dist/databend-core/columns/custom.d.ts +33 -0
- package/dist/databend-core/columns/date.d.ts +16 -0
- package/dist/databend-core/columns/decimal.d.ts +19 -0
- package/dist/databend-core/columns/double.d.ts +14 -0
- package/dist/databend-core/columns/float.d.ts +14 -0
- package/dist/databend-core/columns/index.d.ts +21 -0
- package/dist/databend-core/columns/integer.d.ts +13 -0
- package/dist/databend-core/columns/map.d.ts +17 -0
- package/dist/databend-core/columns/smallint.d.ts +13 -0
- package/dist/databend-core/columns/text.d.ts +13 -0
- package/dist/databend-core/columns/timestamp.d.ts +16 -0
- package/dist/databend-core/columns/tinyint.d.ts +13 -0
- package/dist/databend-core/columns/tuple.d.ts +16 -0
- package/dist/databend-core/columns/varchar.d.ts +17 -0
- package/dist/databend-core/columns/variant.d.ts +15 -0
- package/dist/databend-core/db.d.ts +31 -0
- package/dist/databend-core/dialect.d.ts +29 -0
- package/dist/databend-core/index.d.ts +18 -0
- package/dist/databend-core/indexes.d.ts +24 -0
- package/dist/databend-core/primary-keys.d.ts +20 -0
- package/dist/databend-core/query-builders/count.d.ts +18 -0
- package/dist/databend-core/query-builders/delete.d.ts +18 -0
- package/dist/databend-core/query-builders/index.d.ts +5 -0
- package/dist/databend-core/query-builders/insert.d.ts +27 -0
- package/dist/databend-core/query-builders/query-builder.d.ts +19 -0
- package/dist/databend-core/query-builders/query.d.ts +37 -0
- package/dist/databend-core/query-builders/raw.d.ts +17 -0
- package/dist/databend-core/query-builders/select.d.ts +66 -0
- package/dist/databend-core/query-builders/update.d.ts +27 -0
- package/dist/databend-core/schema.d.ts +12 -0
- package/dist/databend-core/session.d.ts +28 -0
- package/dist/databend-core/subquery.d.ts +1 -0
- package/dist/databend-core/table.d.ts +12 -0
- package/dist/databend-core/utils.d.ts +7 -0
- package/dist/databend-core/view-base.d.ts +5 -0
- package/dist/databend-core/view-common.d.ts +1 -0
- package/dist/databend-core/view.d.ts +30 -0
- package/dist/dialect.d.ts +1 -10
- package/dist/driver.d.ts +4 -4
- package/dist/index.d.ts +10 -0
- package/dist/index.mjs +2611 -205
- package/dist/session.d.ts +22 -19
- package/dist/sql/result-mapper.d.ts +2 -3
- package/dist/sql/selection.d.ts +2 -1
- package/package.json +4 -4
- package/src/columns.ts +8 -7
- package/src/databend-core/alias.ts +5 -0
- package/src/databend-core/columns/all.ts +38 -0
- package/src/databend-core/columns/array.ts +46 -0
- package/src/databend-core/columns/bigint.ts +52 -0
- package/src/databend-core/columns/binary.ts +27 -0
- package/src/databend-core/columns/bitmap.ts +27 -0
- package/src/databend-core/columns/boolean.ts +27 -0
- package/src/databend-core/columns/common.ts +97 -0
- package/src/databend-core/columns/custom.ts +86 -0
- package/src/databend-core/columns/date.ts +49 -0
- package/src/databend-core/columns/decimal.ts +44 -0
- package/src/databend-core/columns/double.ts +34 -0
- package/src/databend-core/columns/float.ts +31 -0
- package/src/databend-core/columns/index.ts +21 -0
- package/src/databend-core/columns/integer.ts +27 -0
- package/src/databend-core/columns/map.ts +49 -0
- package/src/databend-core/columns/smallint.ts +27 -0
- package/src/databend-core/columns/text.ts +27 -0
- package/src/databend-core/columns/timestamp.ts +51 -0
- package/src/databend-core/columns/tinyint.ts +27 -0
- package/src/databend-core/columns/tuple.ts +46 -0
- package/src/databend-core/columns/varchar.ts +35 -0
- package/src/databend-core/columns/variant.ts +45 -0
- package/src/databend-core/db.ts +153 -0
- package/src/databend-core/dialect.ts +725 -0
- package/src/databend-core/index.ts +18 -0
- package/src/databend-core/indexes.ts +67 -0
- package/src/databend-core/primary-keys.ts +48 -0
- package/src/databend-core/query-builders/count.ts +47 -0
- package/src/databend-core/query-builders/delete.ts +56 -0
- package/src/databend-core/query-builders/index.ts +5 -0
- package/src/databend-core/query-builders/insert.ts +105 -0
- package/src/databend-core/query-builders/query-builder.ts +77 -0
- package/src/databend-core/query-builders/query.ts +124 -0
- package/src/databend-core/query-builders/raw.ts +37 -0
- package/src/databend-core/query-builders/select.ts +412 -0
- package/src/databend-core/query-builders/update.ts +82 -0
- package/src/databend-core/schema.ts +29 -0
- package/src/databend-core/session.ts +85 -0
- package/src/databend-core/subquery.ts +1 -0
- package/src/databend-core/table.ts +67 -0
- package/src/databend-core/utils.ts +34 -0
- package/src/databend-core/view-base.ts +6 -0
- package/src/databend-core/view-common.ts +1 -0
- package/src/databend-core/view.ts +127 -0
- package/src/dialect.ts +3 -119
- package/src/driver.ts +6 -7
- package/src/index.ts +27 -0
- package/src/migrator.ts +1 -2
- package/src/session.ts +42 -57
- package/src/sql/result-mapper.ts +12 -54
- package/src/sql/selection.ts +2 -1
package/dist/session.d.ts
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { entityKind } from 'drizzle-orm/entity';
|
|
2
2
|
import type { Logger } from 'drizzle-orm/logger';
|
|
3
|
-
import { PgTransaction } from 'drizzle-orm/pg-core';
|
|
4
|
-
import type { SelectedFieldsOrdered } from 'drizzle-orm/pg-core/query-builders/select.types';
|
|
5
|
-
import type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from 'drizzle-orm/pg-core/session';
|
|
6
|
-
import { PgPreparedQuery, PgSession } from 'drizzle-orm/pg-core/session';
|
|
7
3
|
import type { RelationalSchemaConfig, TablesRelationalConfig } from 'drizzle-orm/relations';
|
|
8
4
|
import { type Query, type QueryTypingsValue, type SQL } from 'drizzle-orm/sql/sql';
|
|
9
5
|
import type { Assume } from 'drizzle-orm/utils';
|
|
10
6
|
import type { DatabendClientLike, RowData } from './client.ts';
|
|
11
|
-
import type { DatabendDialect } from './dialect.ts';
|
|
7
|
+
import type { DatabendDialect } from './databend-core/dialect.ts';
|
|
8
|
+
import { DatabendPreparedQuery as DatabendPreparedQueryBase, DatabendSession as DatabendSessionBase, DatabendTransaction as DatabendTransactionBase } from './databend-core/session.ts';
|
|
12
9
|
export type { DatabendClientLike, RowData } from './client.ts';
|
|
13
|
-
export
|
|
10
|
+
export interface DatabendQueryResultHKT {
|
|
11
|
+
readonly row: RowData;
|
|
12
|
+
type: GenericTableData<Assume<this['row'], RowData>>;
|
|
13
|
+
}
|
|
14
|
+
export declare class DatabendPreparedQuery extends DatabendPreparedQueryBase {
|
|
14
15
|
private client;
|
|
15
16
|
private queryString;
|
|
16
17
|
private params;
|
|
@@ -20,37 +21,39 @@ export declare class DatabendPreparedQuery<T extends PreparedQueryConfig> extend
|
|
|
20
21
|
private customResultMapper;
|
|
21
22
|
private typings?;
|
|
22
23
|
static readonly [entityKind]: string;
|
|
23
|
-
constructor(client: DatabendClientLike, queryString: string, params: unknown[], logger: Logger, fields:
|
|
24
|
-
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<
|
|
25
|
-
all(placeholderValues?: Record<string, unknown> | undefined): Promise<
|
|
24
|
+
constructor(client: DatabendClientLike, queryString: string, params: unknown[], logger: Logger, fields: any[] | undefined, _isResponseInArrayMode: boolean, customResultMapper: ((rows: unknown[][]) => any) | undefined, typings?: QueryTypingsValue[] | undefined);
|
|
25
|
+
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<any>;
|
|
26
|
+
all(placeholderValues?: Record<string, unknown> | undefined): Promise<any>;
|
|
26
27
|
isResponseInArrayMode(): boolean;
|
|
27
28
|
}
|
|
28
29
|
export interface DatabendSessionOptions {
|
|
29
30
|
logger?: Logger;
|
|
30
31
|
}
|
|
31
|
-
export declare class DatabendSession<TFullSchema extends Record<string, unknown> = Record<string, never>, TSchema extends TablesRelationalConfig = Record<string, never>> extends
|
|
32
|
+
export declare class DatabendSession<TFullSchema extends Record<string, unknown> = Record<string, never>, TSchema extends TablesRelationalConfig = Record<string, never>> extends DatabendSessionBase {
|
|
32
33
|
private client;
|
|
33
34
|
private schema;
|
|
34
35
|
private options;
|
|
35
36
|
static readonly [entityKind]: string;
|
|
36
|
-
|
|
37
|
+
dialect: DatabendDialect;
|
|
37
38
|
private logger;
|
|
38
39
|
private rollbackOnly;
|
|
39
40
|
constructor(client: DatabendClientLike, dialect: DatabendDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: DatabendSessionOptions);
|
|
40
|
-
prepareQuery
|
|
41
|
-
transaction<T>(transaction: (tx: DatabendTransaction<TFullSchema, TSchema>) => Promise<T>, config?:
|
|
41
|
+
prepareQuery(query: Query, fields: any[] | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => any): DatabendPreparedQuery;
|
|
42
|
+
transaction<T>(transaction: (tx: DatabendTransaction<TFullSchema, TSchema>) => Promise<T>, config?: DatabendTransactionConfig): Promise<T>;
|
|
42
43
|
markRollbackOnly(): void;
|
|
43
44
|
isRollbackOnly(): boolean;
|
|
44
45
|
}
|
|
45
|
-
export
|
|
46
|
+
export interface DatabendTransactionConfig {
|
|
47
|
+
isolationLevel?: string;
|
|
48
|
+
accessMode?: string;
|
|
49
|
+
}
|
|
50
|
+
export declare class DatabendTransaction<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends DatabendTransactionBase {
|
|
46
51
|
static readonly [entityKind]: string;
|
|
52
|
+
schema: any;
|
|
47
53
|
rollback(): never;
|
|
48
|
-
getTransactionConfigSQL(config:
|
|
49
|
-
setTransaction(config:
|
|
54
|
+
getTransactionConfigSQL(config: DatabendTransactionConfig): SQL;
|
|
55
|
+
setTransaction(config: DatabendTransactionConfig): Promise<void>;
|
|
50
56
|
transaction<T>(transaction: (tx: DatabendTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T>;
|
|
51
57
|
}
|
|
52
58
|
export type GenericRowData<T extends RowData = RowData> = T;
|
|
53
59
|
export type GenericTableData<T = RowData> = T[];
|
|
54
|
-
export interface DatabendQueryResultHKT extends PgQueryResultHKT {
|
|
55
|
-
type: GenericTableData<Assume<this['row'], RowData>>;
|
|
56
|
-
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { type AnyColumn, type SelectedFieldsOrdered } from 'drizzle-orm';
|
|
2
|
-
export declare function normalizeTimestampString(value: unknown,
|
|
3
|
-
export declare function normalizeTimestamp(value: unknown,
|
|
2
|
+
export declare function normalizeTimestampString(value: unknown, _withTimezone: boolean): string | unknown;
|
|
3
|
+
export declare function normalizeTimestamp(value: unknown, _withTimezone: boolean): Date | unknown;
|
|
4
4
|
export declare function normalizeDateString(value: unknown): string | unknown;
|
|
5
5
|
export declare function normalizeDateValue(value: unknown): Date | unknown;
|
|
6
|
-
export declare function normalizeTime(value: unknown): string | unknown;
|
|
7
6
|
export declare function mapResultRow<TResult>(columns: SelectedFieldsOrdered<AnyColumn>, row: unknown[], joinsNotNullableMap: Record<string, boolean> | undefined): TResult;
|
package/dist/sql/selection.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
"module": "./dist/index.mjs",
|
|
4
4
|
"main": "./dist/index.mjs",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
|
-
"version": "0.1.
|
|
6
|
+
"version": "0.1.13",
|
|
7
7
|
"description": "A drizzle ORM driver for use with Databend. Based on drizzle's Postgres driver surface.",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"build": "esbuild src/index.ts --bundle --format=esm --platform=node --packages=external --outfile=dist/index.mjs && npm run build:declarations",
|
|
11
11
|
"build:declarations": "tsc --emitDeclarationOnly --project tsconfig.types.json",
|
|
12
12
|
"test": "vitest run",
|
|
13
|
-
"db:
|
|
14
|
-
"db:
|
|
15
|
-
"db:
|
|
13
|
+
"db:up": "docker-compose up -d --wait",
|
|
14
|
+
"db:down": "docker-compose down",
|
|
15
|
+
"db:destroy": "docker-compose down -v",
|
|
16
16
|
"lint": "biome check src/ test/",
|
|
17
17
|
"typecheck": "tsc --noEmit"
|
|
18
18
|
},
|
package/src/columns.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
import { customType } from 'drizzle-orm/pg-core';
|
|
1
|
+
import { customType } from './databend-core/columns/custom.ts';
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
4
|
* Databend VARIANT column type.
|
|
6
5
|
* Stores semi-structured JSON-like data. Maps to `unknown` in TypeScript.
|
|
7
6
|
*/
|
|
8
7
|
export const databendVariant = <TData = unknown>(name: string) =>
|
|
9
|
-
customType<{ data: TData; driverData: string | TData }>({
|
|
8
|
+
customType<{ data: TData; driverData: string | TData; notNull: boolean; default: boolean }>({
|
|
10
9
|
dataType() {
|
|
11
10
|
return 'VARIANT';
|
|
12
11
|
},
|
|
@@ -36,7 +35,7 @@ export const databendArray = <TData = unknown>(
|
|
|
36
35
|
name: string,
|
|
37
36
|
elementType: string
|
|
38
37
|
) =>
|
|
39
|
-
customType<{ data: TData[]; driverData: TData[] | string }>({
|
|
38
|
+
customType<{ data: TData[]; driverData: TData[] | string; notNull: boolean; default: boolean }>({
|
|
40
39
|
dataType() {
|
|
41
40
|
return `ARRAY(${elementType})`;
|
|
42
41
|
},
|
|
@@ -63,7 +62,7 @@ export const databendTuple = <TData extends unknown[]>(
|
|
|
63
62
|
name: string,
|
|
64
63
|
types: string[]
|
|
65
64
|
) =>
|
|
66
|
-
customType<{ data: TData; driverData: TData | string }>({
|
|
65
|
+
customType<{ data: TData; driverData: TData | string; notNull: boolean; default: boolean }>({
|
|
67
66
|
dataType() {
|
|
68
67
|
return `TUPLE(${types.join(', ')})`;
|
|
69
68
|
},
|
|
@@ -91,7 +90,7 @@ export const databendMap = <TData extends Record<string, any>>(
|
|
|
91
90
|
keyType: string,
|
|
92
91
|
valueType: string
|
|
93
92
|
) =>
|
|
94
|
-
customType<{ data: TData; driverData: TData | string }>({
|
|
93
|
+
customType<{ data: TData; driverData: TData | string; notNull: boolean; default: boolean }>({
|
|
95
94
|
dataType() {
|
|
96
95
|
return `MAP(${keyType}, ${valueType})`;
|
|
97
96
|
},
|
|
@@ -117,6 +116,8 @@ export const databendTimestamp = (name: string) =>
|
|
|
117
116
|
customType<{
|
|
118
117
|
data: Date | string;
|
|
119
118
|
driverData: string | Date;
|
|
119
|
+
notNull: boolean;
|
|
120
|
+
default: boolean;
|
|
120
121
|
}>({
|
|
121
122
|
dataType() {
|
|
122
123
|
return 'TIMESTAMP';
|
|
@@ -145,7 +146,7 @@ export const databendTimestamp = (name: string) =>
|
|
|
145
146
|
* Databend DATE column type.
|
|
146
147
|
*/
|
|
147
148
|
export const databendDate = (name: string) =>
|
|
148
|
-
customType<{ data: string | Date; driverData: string | Date }>({
|
|
149
|
+
customType<{ data: string | Date; driverData: string | Date; notNull: boolean; default: boolean }>({
|
|
149
150
|
dataType() {
|
|
150
151
|
return 'DATE';
|
|
151
152
|
},
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { bigint } from './bigint.ts';
|
|
2
|
+
import { binary } from './binary.ts';
|
|
3
|
+
import { bitmap } from './bitmap.ts';
|
|
4
|
+
import { boolean } from './boolean.ts';
|
|
5
|
+
import { customType } from './custom.ts';
|
|
6
|
+
import { date } from './date.ts';
|
|
7
|
+
import { decimal } from './decimal.ts';
|
|
8
|
+
import { doublePrecision } from './double.ts';
|
|
9
|
+
import { float, real } from './float.ts';
|
|
10
|
+
import { integer } from './integer.ts';
|
|
11
|
+
import { smallint } from './smallint.ts';
|
|
12
|
+
import { text } from './text.ts';
|
|
13
|
+
import { timestamp } from './timestamp.ts';
|
|
14
|
+
import { tinyint } from './tinyint.ts';
|
|
15
|
+
import { varchar } from './varchar.ts';
|
|
16
|
+
import { variant } from './variant.ts';
|
|
17
|
+
|
|
18
|
+
export function getDatabendColumnBuilders() {
|
|
19
|
+
return {
|
|
20
|
+
bigint,
|
|
21
|
+
binary,
|
|
22
|
+
bitmap,
|
|
23
|
+
boolean,
|
|
24
|
+
customType,
|
|
25
|
+
date,
|
|
26
|
+
decimal,
|
|
27
|
+
doublePrecision,
|
|
28
|
+
float,
|
|
29
|
+
integer,
|
|
30
|
+
real,
|
|
31
|
+
smallint,
|
|
32
|
+
text,
|
|
33
|
+
timestamp,
|
|
34
|
+
tinyint,
|
|
35
|
+
varchar,
|
|
36
|
+
variant,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { entityKind } from 'drizzle-orm/entity';
|
|
2
|
+
import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
|
|
3
|
+
|
|
4
|
+
export class DatabendArrayBuilder extends DatabendColumnBuilder {
|
|
5
|
+
static readonly [entityKind]: string = 'DatabendArrayBuilder';
|
|
6
|
+
|
|
7
|
+
constructor(name: string, elementType: string) {
|
|
8
|
+
super(name, 'json', 'DatabendArray');
|
|
9
|
+
(this.config as any).elementType = elementType;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** @internal */
|
|
13
|
+
build(table: any): DatabendArray {
|
|
14
|
+
return new DatabendArray(table, this.config);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class DatabendArray extends DatabendColumn {
|
|
19
|
+
static readonly [entityKind]: string = 'DatabendArray';
|
|
20
|
+
|
|
21
|
+
elementType: string;
|
|
22
|
+
|
|
23
|
+
constructor(table: any, config: any) {
|
|
24
|
+
super(table, config);
|
|
25
|
+
this.elementType = config.elementType;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getSQLType(): string {
|
|
29
|
+
return `array(${this.elementType})`;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
override mapFromDriverValue(value: any): unknown[] {
|
|
33
|
+
if (typeof value === 'string') {
|
|
34
|
+
try {
|
|
35
|
+
return JSON.parse(value);
|
|
36
|
+
} catch {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return value ?? [];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function array(name: string, elementType: string) {
|
|
45
|
+
return new DatabendArrayBuilder(name, elementType);
|
|
46
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { entityKind } from 'drizzle-orm/entity';
|
|
2
|
+
import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
|
|
3
|
+
|
|
4
|
+
export class DatabendBigInt53Builder extends DatabendColumnBuilder {
|
|
5
|
+
static readonly [entityKind]: string = 'DatabendBigInt53Builder';
|
|
6
|
+
|
|
7
|
+
constructor(name: string) {
|
|
8
|
+
super(name, 'number', 'DatabendBigInt53');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** @internal */
|
|
12
|
+
build(table: any): DatabendBigInt53 {
|
|
13
|
+
return new DatabendBigInt53(table, this.config);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class DatabendBigInt53 extends DatabendColumn {
|
|
18
|
+
static readonly [entityKind]: string = 'DatabendBigInt53';
|
|
19
|
+
|
|
20
|
+
getSQLType(): string {
|
|
21
|
+
return 'bigint';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export class DatabendBigInt64Builder extends DatabendColumnBuilder {
|
|
26
|
+
static readonly [entityKind]: string = 'DatabendBigInt64Builder';
|
|
27
|
+
|
|
28
|
+
constructor(name: string) {
|
|
29
|
+
super(name, 'bigint', 'DatabendBigInt64');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** @internal */
|
|
33
|
+
build(table: any): DatabendBigInt64 {
|
|
34
|
+
return new DatabendBigInt64(table, this.config);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export class DatabendBigInt64 extends DatabendColumn {
|
|
39
|
+
static readonly [entityKind]: string = 'DatabendBigInt64';
|
|
40
|
+
|
|
41
|
+
getSQLType(): string {
|
|
42
|
+
return 'bigint';
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
mapFromDriverValue(value: any): bigint {
|
|
46
|
+
return BigInt(value);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function bigint(name?: string) {
|
|
51
|
+
return new DatabendBigInt53Builder(name ?? '');
|
|
52
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { entityKind } from 'drizzle-orm/entity';
|
|
2
|
+
import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
|
|
3
|
+
|
|
4
|
+
export class DatabendBinaryBuilder extends DatabendColumnBuilder {
|
|
5
|
+
static readonly [entityKind]: string = 'DatabendBinaryBuilder';
|
|
6
|
+
|
|
7
|
+
constructor(name: string) {
|
|
8
|
+
super(name, 'string', 'DatabendBinary');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** @internal */
|
|
12
|
+
build(table: any): DatabendBinary {
|
|
13
|
+
return new DatabendBinary(table, this.config);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class DatabendBinary extends DatabendColumn {
|
|
18
|
+
static readonly [entityKind]: string = 'DatabendBinary';
|
|
19
|
+
|
|
20
|
+
getSQLType(): string {
|
|
21
|
+
return 'binary';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function binary(name?: string) {
|
|
26
|
+
return new DatabendBinaryBuilder(name ?? '');
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { entityKind } from 'drizzle-orm/entity';
|
|
2
|
+
import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
|
|
3
|
+
|
|
4
|
+
export class DatabendBitmapBuilder extends DatabendColumnBuilder {
|
|
5
|
+
static readonly [entityKind]: string = 'DatabendBitmapBuilder';
|
|
6
|
+
|
|
7
|
+
constructor(name: string) {
|
|
8
|
+
super(name, 'string', 'DatabendBitmap');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** @internal */
|
|
12
|
+
build(table: any): DatabendBitmap {
|
|
13
|
+
return new DatabendBitmap(table, this.config);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class DatabendBitmap extends DatabendColumn {
|
|
18
|
+
static readonly [entityKind]: string = 'DatabendBitmap';
|
|
19
|
+
|
|
20
|
+
getSQLType(): string {
|
|
21
|
+
return 'bitmap';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function bitmap(name?: string) {
|
|
26
|
+
return new DatabendBitmapBuilder(name ?? '');
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { entityKind } from 'drizzle-orm/entity';
|
|
2
|
+
import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
|
|
3
|
+
|
|
4
|
+
export class DatabendBooleanBuilder extends DatabendColumnBuilder {
|
|
5
|
+
static readonly [entityKind]: string = 'DatabendBooleanBuilder';
|
|
6
|
+
|
|
7
|
+
constructor(name: string) {
|
|
8
|
+
super(name, 'boolean', 'DatabendBoolean');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** @internal */
|
|
12
|
+
build(table: any): DatabendBoolean {
|
|
13
|
+
return new DatabendBoolean(table, this.config);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class DatabendBoolean extends DatabendColumn {
|
|
18
|
+
static readonly [entityKind]: string = 'DatabendBoolean';
|
|
19
|
+
|
|
20
|
+
getSQLType(): string {
|
|
21
|
+
return 'boolean';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function boolean(name?: string) {
|
|
26
|
+
return new DatabendBooleanBuilder(name ?? '');
|
|
27
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Column } from 'drizzle-orm/column';
|
|
2
|
+
import { ColumnBuilder } from 'drizzle-orm/column-builder';
|
|
3
|
+
import { entityKind } from 'drizzle-orm/entity';
|
|
4
|
+
|
|
5
|
+
export class DatabendColumnBuilder extends ColumnBuilder {
|
|
6
|
+
static readonly [entityKind]: string = 'DatabendColumnBuilder';
|
|
7
|
+
|
|
8
|
+
generatedAlwaysAs(as: any, _config?: any): any {
|
|
9
|
+
(this as any).config.generated = { as, type: 'always', mode: 'stored' };
|
|
10
|
+
return this;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
unique(name?: string, config?: { nulls?: string }): this {
|
|
14
|
+
this.config.isUnique = true;
|
|
15
|
+
this.config.uniqueName = name;
|
|
16
|
+
this.config.uniqueType = config?.nulls;
|
|
17
|
+
return this;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** @internal */
|
|
21
|
+
buildForeignKeys(_column: any, _table: any): any[] {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** @internal */
|
|
26
|
+
buildExtraConfigColumn(table: any): DatabendExtraConfigColumn {
|
|
27
|
+
return new DatabendExtraConfigColumn(table, this.config);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export class DatabendColumn extends Column {
|
|
32
|
+
static readonly [entityKind]: string = 'DatabendColumn';
|
|
33
|
+
|
|
34
|
+
constructor(table: any, config: any) {
|
|
35
|
+
super(table, config);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
getSQLType(): string {
|
|
39
|
+
return '';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export class DatabendExtraConfigColumn extends DatabendColumn {
|
|
44
|
+
static readonly [entityKind]: string = 'DatabendExtraConfigColumn';
|
|
45
|
+
|
|
46
|
+
getSQLType(): string {
|
|
47
|
+
return this.getSQLType();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
indexConfig = {
|
|
51
|
+
order: (this as any).config.order ?? 'asc',
|
|
52
|
+
nulls: (this as any).config.nulls ?? 'last',
|
|
53
|
+
opClass: (this as any).config.opClass,
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
defaultConfig = {
|
|
57
|
+
order: 'asc' as const,
|
|
58
|
+
nulls: 'last' as const,
|
|
59
|
+
opClass: undefined,
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
asc(): this {
|
|
63
|
+
this.indexConfig.order = 'asc';
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
desc(): this {
|
|
68
|
+
this.indexConfig.order = 'desc';
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
nullsFirst(): this {
|
|
73
|
+
this.indexConfig.nulls = 'first';
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
nullsLast(): this {
|
|
78
|
+
this.indexConfig.nulls = 'last';
|
|
79
|
+
return this;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export class IndexedColumn {
|
|
84
|
+
static readonly [entityKind]: string = 'IndexedColumn';
|
|
85
|
+
|
|
86
|
+
name: string;
|
|
87
|
+
keyAsName: boolean;
|
|
88
|
+
type: string;
|
|
89
|
+
indexConfig: any;
|
|
90
|
+
|
|
91
|
+
constructor(name: string, keyAsName: boolean, type: string, indexConfig: any) {
|
|
92
|
+
this.name = name;
|
|
93
|
+
this.keyAsName = keyAsName;
|
|
94
|
+
this.type = type;
|
|
95
|
+
this.indexConfig = indexConfig;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { entityKind } from 'drizzle-orm/entity';
|
|
2
|
+
import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
|
|
3
|
+
|
|
4
|
+
export interface CustomTypeValues {
|
|
5
|
+
data: unknown;
|
|
6
|
+
driverData?: unknown;
|
|
7
|
+
notNull: boolean;
|
|
8
|
+
default: boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface CustomTypeParams<T extends CustomTypeValues> {
|
|
12
|
+
dataType: (config: any) => string;
|
|
13
|
+
toDriver?: (value: T['data']) => T['driverData'] | undefined;
|
|
14
|
+
fromDriver?: (value: T['driverData']) => T['data'];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class DatabendCustomColumnBuilder<T extends CustomTypeValues> extends DatabendColumnBuilder {
|
|
18
|
+
static readonly [entityKind]: string = 'DatabendCustomColumnBuilder';
|
|
19
|
+
|
|
20
|
+
private sqlDataType: string;
|
|
21
|
+
private mapTo?: (value: T['data']) => T['driverData'];
|
|
22
|
+
private mapFrom?: (value: T['driverData']) => T['data'];
|
|
23
|
+
|
|
24
|
+
constructor(
|
|
25
|
+
name: string,
|
|
26
|
+
fieldConfig: any,
|
|
27
|
+
customTypeParams: CustomTypeParams<T>
|
|
28
|
+
) {
|
|
29
|
+
super(name, 'custom', 'DatabendCustomColumn');
|
|
30
|
+
this.sqlDataType = customTypeParams.dataType(fieldConfig);
|
|
31
|
+
this.mapTo = customTypeParams.toDriver;
|
|
32
|
+
this.mapFrom = customTypeParams.fromDriver;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** @internal */
|
|
36
|
+
build(table: any): DatabendCustomColumn<T> {
|
|
37
|
+
return new DatabendCustomColumn<T>(
|
|
38
|
+
table,
|
|
39
|
+
this.config,
|
|
40
|
+
this.sqlDataType,
|
|
41
|
+
this.mapTo,
|
|
42
|
+
this.mapFrom
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export class DatabendCustomColumn<T extends CustomTypeValues> extends DatabendColumn {
|
|
48
|
+
static readonly [entityKind]: string = 'DatabendCustomColumn';
|
|
49
|
+
|
|
50
|
+
private sqlDataType: string;
|
|
51
|
+
private mapTo?: (value: T['data']) => T['driverData'];
|
|
52
|
+
private mapFrom?: (value: T['driverData']) => T['data'];
|
|
53
|
+
|
|
54
|
+
constructor(
|
|
55
|
+
table: any,
|
|
56
|
+
config: any,
|
|
57
|
+
sqlDataType: string,
|
|
58
|
+
mapTo?: (value: T['data']) => T['driverData'],
|
|
59
|
+
mapFrom?: (value: T['driverData']) => T['data']
|
|
60
|
+
) {
|
|
61
|
+
super(table, config);
|
|
62
|
+
this.sqlDataType = sqlDataType;
|
|
63
|
+
this.mapTo = mapTo;
|
|
64
|
+
this.mapFrom = mapFrom;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
getSQLType(): string {
|
|
68
|
+
return this.sqlDataType;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
override mapFromDriverValue(value: any): T['data'] {
|
|
72
|
+
return this.mapFrom ? this.mapFrom(value) : value;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
override mapToDriverValue(value: T['data']): T['driverData'] {
|
|
76
|
+
return this.mapTo ? this.mapTo(value) : value;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function customType<T extends CustomTypeValues>(
|
|
81
|
+
customTypeParams: CustomTypeParams<T>
|
|
82
|
+
): (dbName: string, fieldConfig?: any) => DatabendCustomColumnBuilder<T> {
|
|
83
|
+
return (dbName: string, fieldConfig?: any) => {
|
|
84
|
+
return new DatabendCustomColumnBuilder(dbName, fieldConfig, customTypeParams);
|
|
85
|
+
};
|
|
86
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { entityKind } from 'drizzle-orm/entity';
|
|
2
|
+
import { sql } from 'drizzle-orm/sql/sql';
|
|
3
|
+
import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
|
|
4
|
+
|
|
5
|
+
export class DatabendDateBuilder extends DatabendColumnBuilder {
|
|
6
|
+
static readonly [entityKind]: string = 'DatabendDateBuilder';
|
|
7
|
+
|
|
8
|
+
constructor(name: string) {
|
|
9
|
+
super(name, 'string', 'DatabendDate');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
defaultNow() {
|
|
13
|
+
return this.default(sql`now()`);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** @internal */
|
|
17
|
+
build(table: any): DatabendDate {
|
|
18
|
+
return new DatabendDate(table, this.config);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class DatabendDate extends DatabendColumn {
|
|
23
|
+
static readonly [entityKind]: string = 'DatabendDate';
|
|
24
|
+
|
|
25
|
+
getSQLType(): string {
|
|
26
|
+
return 'date';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
override mapFromDriverValue(value: any): string {
|
|
30
|
+
if (value instanceof Date) {
|
|
31
|
+
return value.toISOString().slice(0, 10);
|
|
32
|
+
}
|
|
33
|
+
if (typeof value === 'string') {
|
|
34
|
+
return value.slice(0, 10);
|
|
35
|
+
}
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
override mapToDriverValue(value: string | Date): string {
|
|
40
|
+
if (value instanceof Date) {
|
|
41
|
+
return value.toISOString().slice(0, 10);
|
|
42
|
+
}
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function date(name?: string) {
|
|
48
|
+
return new DatabendDateBuilder(name ?? '');
|
|
49
|
+
}
|