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.
Files changed (107) hide show
  1. package/dist/columns.d.ts +25 -37
  2. package/dist/databend-core/alias.d.ts +1 -0
  3. package/dist/databend-core/columns/all.d.ts +35 -0
  4. package/dist/databend-core/columns/array.d.ts +16 -0
  5. package/dist/databend-core/columns/bigint.d.ts +24 -0
  6. package/dist/databend-core/columns/binary.d.ts +13 -0
  7. package/dist/databend-core/columns/bitmap.d.ts +13 -0
  8. package/dist/databend-core/columns/boolean.d.ts +13 -0
  9. package/dist/databend-core/columns/common.d.ts +45 -0
  10. package/dist/databend-core/columns/custom.d.ts +33 -0
  11. package/dist/databend-core/columns/date.d.ts +16 -0
  12. package/dist/databend-core/columns/decimal.d.ts +19 -0
  13. package/dist/databend-core/columns/double.d.ts +14 -0
  14. package/dist/databend-core/columns/float.d.ts +14 -0
  15. package/dist/databend-core/columns/index.d.ts +21 -0
  16. package/dist/databend-core/columns/integer.d.ts +13 -0
  17. package/dist/databend-core/columns/map.d.ts +17 -0
  18. package/dist/databend-core/columns/smallint.d.ts +13 -0
  19. package/dist/databend-core/columns/text.d.ts +13 -0
  20. package/dist/databend-core/columns/timestamp.d.ts +16 -0
  21. package/dist/databend-core/columns/tinyint.d.ts +13 -0
  22. package/dist/databend-core/columns/tuple.d.ts +16 -0
  23. package/dist/databend-core/columns/varchar.d.ts +17 -0
  24. package/dist/databend-core/columns/variant.d.ts +15 -0
  25. package/dist/databend-core/db.d.ts +31 -0
  26. package/dist/databend-core/dialect.d.ts +29 -0
  27. package/dist/databend-core/index.d.ts +18 -0
  28. package/dist/databend-core/indexes.d.ts +24 -0
  29. package/dist/databend-core/primary-keys.d.ts +20 -0
  30. package/dist/databend-core/query-builders/count.d.ts +18 -0
  31. package/dist/databend-core/query-builders/delete.d.ts +18 -0
  32. package/dist/databend-core/query-builders/index.d.ts +5 -0
  33. package/dist/databend-core/query-builders/insert.d.ts +27 -0
  34. package/dist/databend-core/query-builders/query-builder.d.ts +19 -0
  35. package/dist/databend-core/query-builders/query.d.ts +37 -0
  36. package/dist/databend-core/query-builders/raw.d.ts +17 -0
  37. package/dist/databend-core/query-builders/select.d.ts +66 -0
  38. package/dist/databend-core/query-builders/update.d.ts +27 -0
  39. package/dist/databend-core/schema.d.ts +12 -0
  40. package/dist/databend-core/session.d.ts +28 -0
  41. package/dist/databend-core/subquery.d.ts +1 -0
  42. package/dist/databend-core/table.d.ts +12 -0
  43. package/dist/databend-core/utils.d.ts +7 -0
  44. package/dist/databend-core/view-base.d.ts +5 -0
  45. package/dist/databend-core/view-common.d.ts +1 -0
  46. package/dist/databend-core/view.d.ts +30 -0
  47. package/dist/dialect.d.ts +1 -10
  48. package/dist/driver.d.ts +4 -4
  49. package/dist/index.d.ts +10 -0
  50. package/dist/index.mjs +2611 -205
  51. package/dist/session.d.ts +22 -19
  52. package/dist/sql/result-mapper.d.ts +2 -3
  53. package/dist/sql/selection.d.ts +2 -1
  54. package/package.json +4 -4
  55. package/src/columns.ts +8 -7
  56. package/src/databend-core/alias.ts +5 -0
  57. package/src/databend-core/columns/all.ts +38 -0
  58. package/src/databend-core/columns/array.ts +46 -0
  59. package/src/databend-core/columns/bigint.ts +52 -0
  60. package/src/databend-core/columns/binary.ts +27 -0
  61. package/src/databend-core/columns/bitmap.ts +27 -0
  62. package/src/databend-core/columns/boolean.ts +27 -0
  63. package/src/databend-core/columns/common.ts +97 -0
  64. package/src/databend-core/columns/custom.ts +86 -0
  65. package/src/databend-core/columns/date.ts +49 -0
  66. package/src/databend-core/columns/decimal.ts +44 -0
  67. package/src/databend-core/columns/double.ts +34 -0
  68. package/src/databend-core/columns/float.ts +31 -0
  69. package/src/databend-core/columns/index.ts +21 -0
  70. package/src/databend-core/columns/integer.ts +27 -0
  71. package/src/databend-core/columns/map.ts +49 -0
  72. package/src/databend-core/columns/smallint.ts +27 -0
  73. package/src/databend-core/columns/text.ts +27 -0
  74. package/src/databend-core/columns/timestamp.ts +51 -0
  75. package/src/databend-core/columns/tinyint.ts +27 -0
  76. package/src/databend-core/columns/tuple.ts +46 -0
  77. package/src/databend-core/columns/varchar.ts +35 -0
  78. package/src/databend-core/columns/variant.ts +45 -0
  79. package/src/databend-core/db.ts +153 -0
  80. package/src/databend-core/dialect.ts +725 -0
  81. package/src/databend-core/index.ts +18 -0
  82. package/src/databend-core/indexes.ts +67 -0
  83. package/src/databend-core/primary-keys.ts +48 -0
  84. package/src/databend-core/query-builders/count.ts +47 -0
  85. package/src/databend-core/query-builders/delete.ts +56 -0
  86. package/src/databend-core/query-builders/index.ts +5 -0
  87. package/src/databend-core/query-builders/insert.ts +105 -0
  88. package/src/databend-core/query-builders/query-builder.ts +77 -0
  89. package/src/databend-core/query-builders/query.ts +124 -0
  90. package/src/databend-core/query-builders/raw.ts +37 -0
  91. package/src/databend-core/query-builders/select.ts +412 -0
  92. package/src/databend-core/query-builders/update.ts +82 -0
  93. package/src/databend-core/schema.ts +29 -0
  94. package/src/databend-core/session.ts +85 -0
  95. package/src/databend-core/subquery.ts +1 -0
  96. package/src/databend-core/table.ts +67 -0
  97. package/src/databend-core/utils.ts +34 -0
  98. package/src/databend-core/view-base.ts +6 -0
  99. package/src/databend-core/view-common.ts +1 -0
  100. package/src/databend-core/view.ts +127 -0
  101. package/src/dialect.ts +3 -119
  102. package/src/driver.ts +6 -7
  103. package/src/index.ts +27 -0
  104. package/src/migrator.ts +1 -2
  105. package/src/session.ts +42 -57
  106. package/src/sql/result-mapper.ts +12 -54
  107. package/src/sql/selection.ts +2 -1
@@ -0,0 +1,44 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
3
+
4
+ export class DatabendDecimalBuilder extends DatabendColumnBuilder {
5
+ static readonly [entityKind]: string = 'DatabendDecimalBuilder';
6
+
7
+ constructor(name: string, precision?: number, scale?: number) {
8
+ super(name, 'string', 'DatabendDecimal');
9
+ (this.config as any).precision = precision;
10
+ (this.config as any).scale = scale;
11
+ }
12
+
13
+ /** @internal */
14
+ build(table: any): DatabendDecimal {
15
+ return new DatabendDecimal(table, this.config);
16
+ }
17
+ }
18
+
19
+ export class DatabendDecimal extends DatabendColumn {
20
+ static readonly [entityKind]: string = 'DatabendDecimal';
21
+
22
+ precision: number | undefined;
23
+ scale: number | undefined;
24
+
25
+ constructor(table: any, config: any) {
26
+ super(table, config);
27
+ this.precision = config.precision;
28
+ this.scale = config.scale;
29
+ }
30
+
31
+ getSQLType(): string {
32
+ if (this.precision !== undefined && this.scale !== undefined) {
33
+ return `decimal(${this.precision}, ${this.scale})`;
34
+ }
35
+ if (this.precision !== undefined) {
36
+ return `decimal(${this.precision})`;
37
+ }
38
+ return 'decimal';
39
+ }
40
+ }
41
+
42
+ export function decimal(name?: string, config?: { precision?: number; scale?: number }) {
43
+ return new DatabendDecimalBuilder(name ?? '', config?.precision, config?.scale);
44
+ }
@@ -0,0 +1,34 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
3
+
4
+ export class DatabendDoublePrecisionBuilder extends DatabendColumnBuilder {
5
+ static readonly [entityKind]: string = 'DatabendDoublePrecisionBuilder';
6
+
7
+ constructor(name: string) {
8
+ super(name, 'number', 'DatabendDoublePrecision');
9
+ }
10
+
11
+ /** @internal */
12
+ build(table: any): DatabendDoublePrecision {
13
+ return new DatabendDoublePrecision(table, this.config);
14
+ }
15
+ }
16
+
17
+ export class DatabendDoublePrecision extends DatabendColumn {
18
+ static readonly [entityKind]: string = 'DatabendDoublePrecision';
19
+
20
+ getSQLType(): string {
21
+ return 'double';
22
+ }
23
+
24
+ mapFromDriverValue(value: any): number {
25
+ if (typeof value === 'string') {
26
+ return Number.parseFloat(value);
27
+ }
28
+ return value;
29
+ }
30
+ }
31
+
32
+ export function doublePrecision(name?: string) {
33
+ return new DatabendDoublePrecisionBuilder(name ?? '');
34
+ }
@@ -0,0 +1,31 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
3
+
4
+ export class DatabendRealBuilder extends DatabendColumnBuilder {
5
+ static readonly [entityKind]: string = 'DatabendRealBuilder';
6
+
7
+ constructor(name: string) {
8
+ super(name, 'number', 'DatabendReal');
9
+ }
10
+
11
+ /** @internal */
12
+ build(table: any): DatabendReal {
13
+ return new DatabendReal(table, this.config);
14
+ }
15
+ }
16
+
17
+ export class DatabendReal extends DatabendColumn {
18
+ static readonly [entityKind]: string = 'DatabendReal';
19
+
20
+ getSQLType(): string {
21
+ return 'real';
22
+ }
23
+ }
24
+
25
+ export function real(name?: string) {
26
+ return new DatabendRealBuilder(name ?? '');
27
+ }
28
+
29
+ export function float(name?: string) {
30
+ return new DatabendRealBuilder(name ?? '');
31
+ }
@@ -0,0 +1,21 @@
1
+ export * from './all.ts';
2
+ export * from './array.ts';
3
+ export * from './bigint.ts';
4
+ export * from './binary.ts';
5
+ export * from './bitmap.ts';
6
+ export * from './boolean.ts';
7
+ export * from './common.ts';
8
+ export * from './custom.ts';
9
+ export * from './date.ts';
10
+ export * from './decimal.ts';
11
+ export * from './double.ts';
12
+ export * from './float.ts';
13
+ export * from './integer.ts';
14
+ export * from './map.ts';
15
+ export * from './smallint.ts';
16
+ export * from './text.ts';
17
+ export * from './timestamp.ts';
18
+ export * from './tinyint.ts';
19
+ export * from './tuple.ts';
20
+ export * from './varchar.ts';
21
+ export * from './variant.ts';
@@ -0,0 +1,27 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
3
+
4
+ export class DatabendIntegerBuilder extends DatabendColumnBuilder {
5
+ static readonly [entityKind]: string = 'DatabendIntegerBuilder';
6
+
7
+ constructor(name: string) {
8
+ super(name, 'number', 'DatabendInteger');
9
+ }
10
+
11
+ /** @internal */
12
+ build(table: any): DatabendInteger {
13
+ return new DatabendInteger(table, this.config);
14
+ }
15
+ }
16
+
17
+ export class DatabendInteger extends DatabendColumn {
18
+ static readonly [entityKind]: string = 'DatabendInteger';
19
+
20
+ getSQLType(): string {
21
+ return 'integer';
22
+ }
23
+ }
24
+
25
+ export function integer(name?: string) {
26
+ return new DatabendIntegerBuilder(name ?? '');
27
+ }
@@ -0,0 +1,49 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
3
+
4
+ export class DatabendMapBuilder extends DatabendColumnBuilder {
5
+ static readonly [entityKind]: string = 'DatabendMapBuilder';
6
+
7
+ constructor(name: string, keyType: string, valueType: string) {
8
+ super(name, 'json', 'DatabendMap');
9
+ (this.config as any).keyType = keyType;
10
+ (this.config as any).valueType = valueType;
11
+ }
12
+
13
+ /** @internal */
14
+ build(table: any): DatabendMap {
15
+ return new DatabendMap(table, this.config);
16
+ }
17
+ }
18
+
19
+ export class DatabendMap extends DatabendColumn {
20
+ static readonly [entityKind]: string = 'DatabendMap';
21
+
22
+ keyType: string;
23
+ valueType: string;
24
+
25
+ constructor(table: any, config: any) {
26
+ super(table, config);
27
+ this.keyType = config.keyType;
28
+ this.valueType = config.valueType;
29
+ }
30
+
31
+ getSQLType(): string {
32
+ return `map(${this.keyType}, ${this.valueType})`;
33
+ }
34
+
35
+ override mapFromDriverValue(value: any): Record<string, unknown> {
36
+ if (typeof value === 'string') {
37
+ try {
38
+ return JSON.parse(value);
39
+ } catch {
40
+ return {};
41
+ }
42
+ }
43
+ return value ?? {};
44
+ }
45
+ }
46
+
47
+ export function map(name: string, keyType: string, valueType: string) {
48
+ return new DatabendMapBuilder(name, keyType, valueType);
49
+ }
@@ -0,0 +1,27 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
3
+
4
+ export class DatabendSmallIntBuilder extends DatabendColumnBuilder {
5
+ static readonly [entityKind]: string = 'DatabendSmallIntBuilder';
6
+
7
+ constructor(name: string) {
8
+ super(name, 'number', 'DatabendSmallInt');
9
+ }
10
+
11
+ /** @internal */
12
+ build(table: any): DatabendSmallInt {
13
+ return new DatabendSmallInt(table, this.config);
14
+ }
15
+ }
16
+
17
+ export class DatabendSmallInt extends DatabendColumn {
18
+ static readonly [entityKind]: string = 'DatabendSmallInt';
19
+
20
+ getSQLType(): string {
21
+ return 'smallint';
22
+ }
23
+ }
24
+
25
+ export function smallint(name?: string) {
26
+ return new DatabendSmallIntBuilder(name ?? '');
27
+ }
@@ -0,0 +1,27 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
3
+
4
+ export class DatabendTextBuilder extends DatabendColumnBuilder {
5
+ static readonly [entityKind]: string = 'DatabendTextBuilder';
6
+
7
+ constructor(name: string) {
8
+ super(name, 'string', 'DatabendText');
9
+ }
10
+
11
+ /** @internal */
12
+ build(table: any): DatabendText {
13
+ return new DatabendText(table, this.config);
14
+ }
15
+ }
16
+
17
+ export class DatabendText extends DatabendColumn {
18
+ static readonly [entityKind]: string = 'DatabendText';
19
+
20
+ getSQLType(): string {
21
+ return 'text';
22
+ }
23
+ }
24
+
25
+ export function text(name?: string) {
26
+ return new DatabendTextBuilder(name ?? '');
27
+ }
@@ -0,0 +1,51 @@
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 DatabendTimestampBuilder extends DatabendColumnBuilder {
6
+ static readonly [entityKind]: string = 'DatabendTimestampBuilder';
7
+
8
+ constructor(name: string) {
9
+ super(name, 'date', 'DatabendTimestamp');
10
+ }
11
+
12
+ defaultNow() {
13
+ return this.default(sql`now()`);
14
+ }
15
+
16
+ /** @internal */
17
+ build(table: any): DatabendTimestamp {
18
+ return new DatabendTimestamp(table, this.config);
19
+ }
20
+ }
21
+
22
+ export class DatabendTimestamp extends DatabendColumn {
23
+ static readonly [entityKind]: string = 'DatabendTimestamp';
24
+
25
+ getSQLType(): string {
26
+ return 'timestamp';
27
+ }
28
+
29
+ override mapFromDriverValue(value: any): Date {
30
+ if (value instanceof Date) {
31
+ return value;
32
+ }
33
+ const str = String(value);
34
+ const hasOffset = str.endsWith('Z') || /[+-]\d{2}:?\d{2}$/.test(str);
35
+ const normalized = hasOffset
36
+ ? str.replace(' ', 'T')
37
+ : `${str.replace(' ', 'T')}Z`;
38
+ return new Date(normalized);
39
+ }
40
+
41
+ override mapToDriverValue(value: Date | string): string {
42
+ if (value instanceof Date) {
43
+ return value.toISOString();
44
+ }
45
+ return value;
46
+ }
47
+ }
48
+
49
+ export function timestamp(name?: string) {
50
+ return new DatabendTimestampBuilder(name ?? '');
51
+ }
@@ -0,0 +1,27 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
3
+
4
+ export class DatabendTinyIntBuilder extends DatabendColumnBuilder {
5
+ static readonly [entityKind]: string = 'DatabendTinyIntBuilder';
6
+
7
+ constructor(name: string) {
8
+ super(name, 'number', 'DatabendTinyInt');
9
+ }
10
+
11
+ /** @internal */
12
+ build(table: any): DatabendTinyInt {
13
+ return new DatabendTinyInt(table, this.config);
14
+ }
15
+ }
16
+
17
+ export class DatabendTinyInt extends DatabendColumn {
18
+ static readonly [entityKind]: string = 'DatabendTinyInt';
19
+
20
+ getSQLType(): string {
21
+ return 'tinyint';
22
+ }
23
+ }
24
+
25
+ export function tinyint(name?: string) {
26
+ return new DatabendTinyIntBuilder(name ?? '');
27
+ }
@@ -0,0 +1,46 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
3
+
4
+ export class DatabendTupleBuilder extends DatabendColumnBuilder {
5
+ static readonly [entityKind]: string = 'DatabendTupleBuilder';
6
+
7
+ constructor(name: string, types: string[]) {
8
+ super(name, 'json', 'DatabendTuple');
9
+ (this.config as any).tupleTypes = types;
10
+ }
11
+
12
+ /** @internal */
13
+ build(table: any): DatabendTuple {
14
+ return new DatabendTuple(table, this.config);
15
+ }
16
+ }
17
+
18
+ export class DatabendTuple extends DatabendColumn {
19
+ static readonly [entityKind]: string = 'DatabendTuple';
20
+
21
+ tupleTypes: string[];
22
+
23
+ constructor(table: any, config: any) {
24
+ super(table, config);
25
+ this.tupleTypes = config.tupleTypes;
26
+ }
27
+
28
+ getSQLType(): string {
29
+ return `tuple(${this.tupleTypes.join(', ')})`;
30
+ }
31
+
32
+ override mapFromDriverValue(value: any): unknown {
33
+ if (typeof value === 'string') {
34
+ try {
35
+ return JSON.parse(value);
36
+ } catch {
37
+ return value;
38
+ }
39
+ }
40
+ return value;
41
+ }
42
+ }
43
+
44
+ export function tuple(name: string, types: string[]) {
45
+ return new DatabendTupleBuilder(name, types);
46
+ }
@@ -0,0 +1,35 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
3
+
4
+ export class DatabendVarcharBuilder extends DatabendColumnBuilder {
5
+ static readonly [entityKind]: string = 'DatabendVarcharBuilder';
6
+
7
+ constructor(name: string, length?: number) {
8
+ super(name, 'string', 'DatabendVarchar');
9
+ (this.config as any).length = length;
10
+ }
11
+
12
+ /** @internal */
13
+ build(table: any): DatabendVarchar {
14
+ return new DatabendVarchar(table, this.config);
15
+ }
16
+ }
17
+
18
+ export class DatabendVarchar extends DatabendColumn {
19
+ static readonly [entityKind]: string = 'DatabendVarchar';
20
+
21
+ length: number | undefined;
22
+
23
+ constructor(table: any, config: any) {
24
+ super(table, config);
25
+ this.length = config.length;
26
+ }
27
+
28
+ getSQLType(): string {
29
+ return this.length ? `varchar(${this.length})` : 'varchar';
30
+ }
31
+ }
32
+
33
+ export function varchar(name?: string, config?: { length?: number }) {
34
+ return new DatabendVarcharBuilder(name ?? '', config?.length);
35
+ }
@@ -0,0 +1,45 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { DatabendColumn, DatabendColumnBuilder } from './common.ts';
3
+
4
+ export class DatabendVariantBuilder extends DatabendColumnBuilder {
5
+ static readonly [entityKind]: string = 'DatabendVariantBuilder';
6
+
7
+ constructor(name: string) {
8
+ super(name, 'json', 'DatabendVariant');
9
+ }
10
+
11
+ /** @internal */
12
+ build(table: any): DatabendVariant {
13
+ return new DatabendVariant(table, this.config);
14
+ }
15
+ }
16
+
17
+ export class DatabendVariant extends DatabendColumn {
18
+ static readonly [entityKind]: string = 'DatabendVariant';
19
+
20
+ getSQLType(): string {
21
+ return 'variant';
22
+ }
23
+
24
+ override mapFromDriverValue(value: any): unknown {
25
+ if (typeof value === 'string') {
26
+ try {
27
+ return JSON.parse(value);
28
+ } catch {
29
+ return value;
30
+ }
31
+ }
32
+ return value;
33
+ }
34
+
35
+ override mapToDriverValue(value: unknown): string {
36
+ if (typeof value === 'string') {
37
+ return value;
38
+ }
39
+ return JSON.stringify(value);
40
+ }
41
+ }
42
+
43
+ export function variant(name?: string) {
44
+ return new DatabendVariantBuilder(name ?? '');
45
+ }
@@ -0,0 +1,153 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { SelectionProxyHandler } from 'drizzle-orm/selection-proxy';
3
+ import { sql } from 'drizzle-orm/sql/sql';
4
+ import { WithSubquery } from 'drizzle-orm/subquery';
5
+ import { DatabendCountBuilder } from './query-builders/count.ts';
6
+ import {
7
+ DatabendDeleteBase,
8
+ DatabendInsertBuilder,
9
+ DatabendSelectBuilder,
10
+ DatabendUpdateBuilder,
11
+ QueryBuilder,
12
+ } from './query-builders/index.ts';
13
+ import { RelationalQueryBuilder } from './query-builders/query.ts';
14
+ import { DatabendRaw } from './query-builders/raw.ts';
15
+
16
+ export class DatabendDatabase {
17
+ static readonly [entityKind]: string = 'DatabendDatabase';
18
+
19
+ _: any;
20
+ query: any;
21
+
22
+ constructor(
23
+ public dialect: any,
24
+ public session: any,
25
+ schema?: any
26
+ ) {
27
+ this._ = schema
28
+ ? {
29
+ schema: schema.schema,
30
+ fullSchema: schema.fullSchema,
31
+ tableNamesMap: schema.tableNamesMap,
32
+ session,
33
+ }
34
+ : {
35
+ schema: undefined,
36
+ fullSchema: {},
37
+ tableNamesMap: {},
38
+ session,
39
+ };
40
+
41
+ this.query = {};
42
+ if (this._.schema) {
43
+ for (const [tableName, columns] of Object.entries(this._.schema)) {
44
+ (this.query as any)[tableName] = new RelationalQueryBuilder(
45
+ schema.fullSchema,
46
+ this._.schema,
47
+ this._.tableNamesMap,
48
+ schema.fullSchema[tableName],
49
+ columns,
50
+ dialect,
51
+ session
52
+ );
53
+ }
54
+ }
55
+ }
56
+
57
+ $with(alias: string) {
58
+ const self = this;
59
+ return {
60
+ as(qb: any) {
61
+ if (typeof qb === 'function') {
62
+ qb = qb(new QueryBuilder(self.dialect));
63
+ }
64
+ const sqlObj = typeof qb.getSQL === 'function' ? qb.getSQL() : qb;
65
+ const fields = typeof qb.getSelectedFields === 'function' ? qb.getSelectedFields() : {};
66
+ return new Proxy(
67
+ new WithSubquery(sqlObj, fields, alias, true),
68
+ new SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' })
69
+ );
70
+ },
71
+ };
72
+ }
73
+
74
+ $count(source: any, filters?: any) {
75
+ return new DatabendCountBuilder({ source, filters, session: this.session });
76
+ }
77
+
78
+ with(...queries: any[]) {
79
+ const self = this;
80
+ function select(fields?: any) {
81
+ return new DatabendSelectBuilder({
82
+ fields: fields ?? undefined,
83
+ session: self.session,
84
+ dialect: self.dialect,
85
+ withList: queries,
86
+ });
87
+ }
88
+ function selectDistinct(fields?: any) {
89
+ return new DatabendSelectBuilder({
90
+ fields: fields ?? undefined,
91
+ session: self.session,
92
+ dialect: self.dialect,
93
+ withList: queries,
94
+ distinct: true,
95
+ });
96
+ }
97
+ function update(table: any) {
98
+ return new DatabendUpdateBuilder(table, self.session, self.dialect, queries);
99
+ }
100
+ function insert(table: any) {
101
+ return new DatabendInsertBuilder(table, self.session, self.dialect, queries);
102
+ }
103
+ function delete_(table: any) {
104
+ return new DatabendDeleteBase(table, self.session, self.dialect, queries);
105
+ }
106
+ return { select, selectDistinct, update, insert, delete: delete_ };
107
+ }
108
+
109
+ select(fields?: any) {
110
+ return new DatabendSelectBuilder({
111
+ fields: fields ?? undefined,
112
+ session: this.session,
113
+ dialect: this.dialect,
114
+ });
115
+ }
116
+
117
+ selectDistinct(fields?: any) {
118
+ return new DatabendSelectBuilder({
119
+ fields: fields ?? undefined,
120
+ session: this.session,
121
+ dialect: this.dialect,
122
+ distinct: true,
123
+ });
124
+ }
125
+
126
+ update(table: any) {
127
+ return new DatabendUpdateBuilder(table, this.session, this.dialect);
128
+ }
129
+
130
+ insert(table: any) {
131
+ return new DatabendInsertBuilder(table, this.session, this.dialect);
132
+ }
133
+
134
+ delete(table: any) {
135
+ return new DatabendDeleteBase(table, this.session, this.dialect);
136
+ }
137
+
138
+ execute(query: any) {
139
+ const sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();
140
+ const builtQuery = this.dialect.sqlToQuery(sequel);
141
+ const prepared = this.session.prepareQuery(builtQuery, undefined, undefined, false);
142
+ return new DatabendRaw(
143
+ () => prepared.execute(undefined),
144
+ sequel,
145
+ builtQuery,
146
+ (result: any) => prepared.mapResult(result, true)
147
+ );
148
+ }
149
+
150
+ transaction(transaction: any) {
151
+ return this.session.transaction(transaction);
152
+ }
153
+ }