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,18 @@
1
+ export * from './alias.ts';
2
+ export * from './columns/index.ts';
3
+ export * from './db.ts';
4
+ export * from './dialect.ts';
5
+ export * from './indexes.ts';
6
+ export * from './primary-keys.ts';
7
+ export * from './query-builders/count.ts';
8
+ export * from './query-builders/index.ts';
9
+ export * from './query-builders/query.ts';
10
+ export * from './query-builders/raw.ts';
11
+ export * from './schema.ts';
12
+ export * from './session.ts';
13
+ export * from './subquery.ts';
14
+ export * from './table.ts';
15
+ export * from './utils.ts';
16
+ export * from './view.ts';
17
+ export * from './view-base.ts';
18
+ export * from './view-common.ts';
@@ -0,0 +1,67 @@
1
+ import { entityKind, is } from 'drizzle-orm/entity';
2
+ import { SQL } from 'drizzle-orm/sql/sql';
3
+ import { IndexedColumn } from './columns/common.ts';
4
+
5
+ export class IndexBuilderOn {
6
+ static readonly [entityKind]: string = 'DatabendIndexBuilderOn';
7
+
8
+ constructor(private unique: boolean, private name?: string) {}
9
+
10
+ on(...columns: any[]) {
11
+ return new IndexBuilder(
12
+ columns.map((it: any) => {
13
+ if (is(it, SQL)) {
14
+ return it;
15
+ }
16
+ const clonedIndexedColumn = new IndexedColumn(it.name, !!it.keyAsName, it.columnType, it.indexConfig);
17
+ it.indexConfig = JSON.parse(JSON.stringify(it.defaultConfig));
18
+ return clonedIndexedColumn;
19
+ }),
20
+ this.unique,
21
+ this.name
22
+ );
23
+ }
24
+ }
25
+
26
+ export class IndexBuilder {
27
+ static readonly [entityKind]: string = 'DatabendIndexBuilder';
28
+
29
+ /** @internal */
30
+ config: any;
31
+
32
+ constructor(columns: any[], unique: boolean, name?: string) {
33
+ this.config = {
34
+ name,
35
+ columns,
36
+ unique,
37
+ };
38
+ }
39
+
40
+ where(condition: any) {
41
+ this.config.where = condition;
42
+ return this;
43
+ }
44
+
45
+ /** @internal */
46
+ build(table: any) {
47
+ return new Index(this.config, table);
48
+ }
49
+ }
50
+
51
+ export class Index {
52
+ static readonly [entityKind]: string = 'DatabendIndex';
53
+
54
+ config: any;
55
+
56
+ constructor(config: any, table: any) {
57
+ this.config = { ...config, table };
58
+ }
59
+ }
60
+
61
+ export function index(name?: string) {
62
+ return new IndexBuilderOn(false, name);
63
+ }
64
+
65
+ export function uniqueIndex(name?: string) {
66
+ return new IndexBuilderOn(true, name);
67
+ }
@@ -0,0 +1,48 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { DatabendTable } from './table.ts';
3
+
4
+ export function primaryKey(...config: any[]): PrimaryKeyBuilder {
5
+ if (config[0].columns) {
6
+ return new PrimaryKeyBuilder(config[0].columns, config[0].name);
7
+ }
8
+ return new PrimaryKeyBuilder(config);
9
+ }
10
+
11
+ export class PrimaryKeyBuilder {
12
+ static readonly [entityKind]: string = 'DatabendPrimaryKeyBuilder';
13
+
14
+ /** @internal */
15
+ columns: any[];
16
+ /** @internal */
17
+ name?: string;
18
+
19
+ constructor(columns: any[], name?: string) {
20
+ this.columns = columns;
21
+ this.name = name;
22
+ }
23
+
24
+ /** @internal */
25
+ build(table: any) {
26
+ return new PrimaryKey(table, this.columns, this.name);
27
+ }
28
+ }
29
+
30
+ export class PrimaryKey {
31
+ static readonly [entityKind]: string = 'DatabendPrimaryKey';
32
+
33
+ columns: any[];
34
+ name?: string;
35
+
36
+ constructor(
37
+ public table: any,
38
+ columns: any[],
39
+ name?: string
40
+ ) {
41
+ this.columns = columns;
42
+ this.name = name;
43
+ }
44
+
45
+ getName() {
46
+ return this.name ?? `${this.table[DatabendTable.Symbol.Name]}_${this.columns.map((column: any) => column.name).join('_')}_pk`;
47
+ }
48
+ }
@@ -0,0 +1,47 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { SQL, sql } from 'drizzle-orm/sql/sql';
3
+
4
+ export class DatabendCountBuilder extends SQL {
5
+ static override readonly [entityKind]: string = 'DatabendCountBuilder';
6
+ readonly [Symbol.toStringTag] = 'DatabendCountBuilder';
7
+
8
+ private sql: SQL;
9
+ private session: any;
10
+
11
+ constructor(params: { source: any; filters?: any; session: any }) {
12
+ super(DatabendCountBuilder.buildEmbeddedCount(params.source, params.filters).queryChunks);
13
+ this.mapWith(Number);
14
+ this.session = params.session;
15
+ this.sql = DatabendCountBuilder.buildCount(params.source, params.filters);
16
+ }
17
+
18
+ private static buildEmbeddedCount(source: any, filters?: any) {
19
+ return sql`(select count(*) from ${source}${sql.raw(' where ').if(filters)}${filters})`;
20
+ }
21
+
22
+ private static buildCount(source: any, filters?: any) {
23
+ return sql`select count(*) as count from ${source}${sql.raw(' where ').if(filters)}${filters};`;
24
+ }
25
+
26
+ // biome-ignore lint/suspicious/noThenProperty: Promise-like interface required for await support
27
+ then(onfulfilled?: any, onrejected?: any) {
28
+ return Promise.resolve(this.session.count(this.sql)).then(onfulfilled, onrejected);
29
+ }
30
+
31
+ catch(onRejected?: any) {
32
+ return this.then(undefined, onRejected);
33
+ }
34
+
35
+ finally(onFinally?: any) {
36
+ return this.then(
37
+ (value: any) => {
38
+ onFinally?.();
39
+ return value;
40
+ },
41
+ (reason: any) => {
42
+ onFinally?.();
43
+ throw reason;
44
+ }
45
+ );
46
+ }
47
+ }
@@ -0,0 +1,56 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { QueryPromise } from 'drizzle-orm/query-promise';
3
+ // @ts-expect-error - tracer is exported at runtime but not in .d.ts
4
+ import { tracer } from 'drizzle-orm/tracing';
5
+
6
+ export class DatabendDeleteBase extends QueryPromise<any> {
7
+ static readonly [entityKind]: string = 'DatabendDelete';
8
+
9
+ config: any;
10
+
11
+ constructor(
12
+ table: any,
13
+ private session: any,
14
+ private dialect: any,
15
+ withList?: any[]
16
+ ) {
17
+ super();
18
+ this.config = { table, withList };
19
+ }
20
+
21
+ where(where: any) {
22
+ this.config.where = where;
23
+ return this;
24
+ }
25
+
26
+ /** @internal */
27
+ getSQL() {
28
+ return this.dialect.buildDeleteQuery(this.config);
29
+ }
30
+
31
+ toSQL() {
32
+ const { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());
33
+ return rest;
34
+ }
35
+
36
+ /** @internal */
37
+ _prepare(name?: string) {
38
+ return tracer.startActiveSpan('drizzle.prepareQuery', () => {
39
+ return this.session.prepareQuery(this.dialect.sqlToQuery(this.getSQL()), undefined, name, true);
40
+ });
41
+ }
42
+
43
+ prepare(name: string) {
44
+ return this._prepare(name);
45
+ }
46
+
47
+ execute = (placeholderValues?: any) => {
48
+ return tracer.startActiveSpan('drizzle.operation', () => {
49
+ return this._prepare().execute(placeholderValues);
50
+ });
51
+ };
52
+
53
+ $dynamic() {
54
+ return this;
55
+ }
56
+ }
@@ -0,0 +1,5 @@
1
+ export * from './delete.ts';
2
+ export * from './insert.ts';
3
+ export * from './query-builder.ts';
4
+ export * from './select.ts';
5
+ export * from './update.ts';
@@ -0,0 +1,105 @@
1
+ import { entityKind, is } from 'drizzle-orm/entity';
2
+ import { QueryPromise } from 'drizzle-orm/query-promise';
3
+ import { Param, SQL } from 'drizzle-orm/sql/sql';
4
+ import { Table } from 'drizzle-orm/table';
5
+ // @ts-expect-error - tracer is exported at runtime but not in .d.ts
6
+ import { tracer } from 'drizzle-orm/tracing';
7
+ import { haveSameKeys } from 'drizzle-orm/utils';
8
+ import { QueryBuilder } from './query-builder.ts';
9
+
10
+ export class DatabendInsertBuilder {
11
+ static readonly [entityKind]: string = 'DatabendInsertBuilder';
12
+
13
+ constructor(
14
+ private table: any,
15
+ private session: any,
16
+ private dialect: any,
17
+ private withList?: any[]
18
+ ) {}
19
+
20
+ values(values: any) {
21
+ values = Array.isArray(values) ? values : [values];
22
+ if (values.length === 0) {
23
+ throw new Error('values() must be called with at least one value');
24
+ }
25
+ const mappedValues = values.map((entry: any) => {
26
+ const result: any = {};
27
+ const cols = this.table[(Table as any).Symbol.Columns];
28
+ for (const colKey of Object.keys(entry)) {
29
+ const colValue = entry[colKey];
30
+ result[colKey] = is(colValue, SQL) ? colValue : new Param(colValue, cols[colKey]);
31
+ }
32
+ return result;
33
+ });
34
+
35
+ return new DatabendInsertBase(
36
+ this.table,
37
+ mappedValues,
38
+ this.session,
39
+ this.dialect,
40
+ this.withList,
41
+ false
42
+ );
43
+ }
44
+
45
+ select(selectQuery: any) {
46
+ const select = typeof selectQuery === 'function' ? selectQuery(new QueryBuilder()) : selectQuery;
47
+
48
+ if (!is(select, SQL) && !haveSameKeys(this.table[(Table as any).Symbol.Columns], select._.selectedFields)) {
49
+ throw new Error(
50
+ 'Insert select error: selected fields are not the same or are in a different order compared to the table definition'
51
+ );
52
+ }
53
+
54
+ return new DatabendInsertBase(this.table, select, this.session, this.dialect, this.withList, true);
55
+ }
56
+ }
57
+
58
+ export class DatabendInsertBase extends QueryPromise<any> {
59
+ static readonly [entityKind]: string = 'DatabendInsert';
60
+
61
+ config: any;
62
+
63
+ constructor(
64
+ table: any,
65
+ values: any,
66
+ private session: any,
67
+ private dialect: any,
68
+ withList?: any[],
69
+ select?: boolean
70
+ ) {
71
+ super();
72
+ this.config = { table, values, withList, select };
73
+ }
74
+
75
+ /** @internal */
76
+ getSQL() {
77
+ return this.dialect.buildInsertQuery(this.config);
78
+ }
79
+
80
+ toSQL() {
81
+ const { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());
82
+ return rest;
83
+ }
84
+
85
+ /** @internal */
86
+ _prepare(name?: string) {
87
+ return tracer.startActiveSpan('drizzle.prepareQuery', () => {
88
+ return this.session.prepareQuery(this.dialect.sqlToQuery(this.getSQL()), undefined, name, true);
89
+ });
90
+ }
91
+
92
+ prepare(name: string) {
93
+ return this._prepare(name);
94
+ }
95
+
96
+ execute = (placeholderValues?: any) => {
97
+ return tracer.startActiveSpan('drizzle.operation', () => {
98
+ return this._prepare().execute(placeholderValues);
99
+ });
100
+ };
101
+
102
+ $dynamic() {
103
+ return this;
104
+ }
105
+ }
@@ -0,0 +1,77 @@
1
+ import { entityKind, is } from 'drizzle-orm/entity';
2
+ import { SelectionProxyHandler } from 'drizzle-orm/selection-proxy';
3
+ import { WithSubquery } from 'drizzle-orm/subquery';
4
+ import { DatabendDialect } from '../dialect.ts';
5
+ import { DatabendSelectBuilder } from './select.ts';
6
+
7
+ export class QueryBuilder {
8
+ static readonly [entityKind]: string = 'DatabendQueryBuilder';
9
+
10
+ dialect: any;
11
+ dialectConfig: any;
12
+
13
+ constructor(dialect?: any) {
14
+ this.dialect = is(dialect, DatabendDialect) ? dialect : undefined;
15
+ this.dialectConfig = is(dialect, DatabendDialect) ? undefined : dialect;
16
+ }
17
+
18
+ $with(alias: string) {
19
+ const queryBuilder = this;
20
+ return {
21
+ as(qb: any) {
22
+ if (typeof qb === 'function') {
23
+ qb = qb(queryBuilder);
24
+ }
25
+ return new Proxy(
26
+ new WithSubquery(qb.getSQL(), qb.getSelectedFields(), alias, true),
27
+ new SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' })
28
+ );
29
+ },
30
+ };
31
+ }
32
+
33
+ with(...queries: any[]) {
34
+ const self = this;
35
+ function select(fields?: any) {
36
+ return new DatabendSelectBuilder({
37
+ fields: fields ?? undefined,
38
+ session: undefined,
39
+ dialect: self.getDialect(),
40
+ withList: queries,
41
+ });
42
+ }
43
+ function selectDistinct(fields?: any) {
44
+ return new DatabendSelectBuilder({
45
+ fields: fields ?? undefined,
46
+ session: undefined,
47
+ dialect: self.getDialect(),
48
+ distinct: true,
49
+ });
50
+ }
51
+ return { select, selectDistinct };
52
+ }
53
+
54
+ select(fields?: any) {
55
+ return new DatabendSelectBuilder({
56
+ fields: fields ?? undefined,
57
+ session: undefined,
58
+ dialect: this.getDialect(),
59
+ });
60
+ }
61
+
62
+ selectDistinct(fields?: any) {
63
+ return new DatabendSelectBuilder({
64
+ fields: fields ?? undefined,
65
+ session: undefined,
66
+ dialect: this.getDialect(),
67
+ distinct: true,
68
+ });
69
+ }
70
+
71
+ private getDialect() {
72
+ if (!this.dialect) {
73
+ this.dialect = new DatabendDialect(this.dialectConfig);
74
+ }
75
+ return this.dialect;
76
+ }
77
+ }
@@ -0,0 +1,124 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { QueryPromise } from 'drizzle-orm/query-promise';
3
+ import { mapRelationalRow } from 'drizzle-orm/relations';
4
+ // @ts-expect-error - tracer is exported at runtime but not in .d.ts
5
+ import { tracer } from 'drizzle-orm/tracing';
6
+
7
+ export class RelationalQueryBuilder {
8
+ static readonly [entityKind]: string = 'DatabendRelationalQueryBuilder';
9
+
10
+ constructor(
11
+ private fullSchema: any,
12
+ private schema: any,
13
+ private tableNamesMap: any,
14
+ private table: any,
15
+ private tableConfig: any,
16
+ private dialect: any,
17
+ private session: any
18
+ ) {}
19
+
20
+ findMany(config?: any) {
21
+ return new DatabendRelationalQuery(
22
+ this.fullSchema,
23
+ this.schema,
24
+ this.tableNamesMap,
25
+ this.table,
26
+ this.tableConfig,
27
+ this.dialect,
28
+ this.session,
29
+ config ? config : {},
30
+ 'many'
31
+ );
32
+ }
33
+
34
+ findFirst(config?: any) {
35
+ return new DatabendRelationalQuery(
36
+ this.fullSchema,
37
+ this.schema,
38
+ this.tableNamesMap,
39
+ this.table,
40
+ this.tableConfig,
41
+ this.dialect,
42
+ this.session,
43
+ config ? { ...config, limit: 1 } : { limit: 1 },
44
+ 'first'
45
+ );
46
+ }
47
+ }
48
+
49
+ export class DatabendRelationalQuery extends QueryPromise<any> {
50
+ static readonly [entityKind]: string = 'DatabendRelationalQuery';
51
+
52
+ constructor(
53
+ private fullSchema: any,
54
+ private schema: any,
55
+ private tableNamesMap: any,
56
+ private table: any,
57
+ private tableConfig: any,
58
+ private dialect: any,
59
+ private session: any,
60
+ private config: any,
61
+ private mode: 'many' | 'first'
62
+ ) {
63
+ super();
64
+ }
65
+
66
+ /** @internal */
67
+ _prepare(name?: string) {
68
+ return tracer.startActiveSpan('drizzle.prepareQuery', () => {
69
+ const { query, builtQuery } = this._toSQL();
70
+ return this.session.prepareQuery(
71
+ builtQuery,
72
+ undefined,
73
+ name,
74
+ true,
75
+ (rawRows: any, mapColumnValue: any) => {
76
+ const rows = rawRows.map(
77
+ (row: any) => mapRelationalRow(this.schema, this.tableConfig, row, query.selection, mapColumnValue)
78
+ );
79
+ if (this.mode === 'first') {
80
+ return rows[0];
81
+ }
82
+ return rows;
83
+ }
84
+ );
85
+ });
86
+ }
87
+
88
+ prepare(name: string) {
89
+ return this._prepare(name);
90
+ }
91
+
92
+ private _getQuery() {
93
+ return this.dialect.buildRelationalQueryWithoutPK({
94
+ fullSchema: this.fullSchema,
95
+ schema: this.schema,
96
+ tableNamesMap: this.tableNamesMap,
97
+ table: this.table,
98
+ tableConfig: this.tableConfig,
99
+ queryConfig: this.config,
100
+ tableAlias: this.tableConfig.tsName,
101
+ });
102
+ }
103
+
104
+ /** @internal */
105
+ getSQL() {
106
+ return this._getQuery().sql;
107
+ }
108
+
109
+ private _toSQL() {
110
+ const query = this._getQuery();
111
+ const builtQuery = this.dialect.sqlToQuery(query.sql);
112
+ return { query, builtQuery };
113
+ }
114
+
115
+ toSQL() {
116
+ return this._toSQL().builtQuery;
117
+ }
118
+
119
+ execute() {
120
+ return tracer.startActiveSpan('drizzle.operation', () => {
121
+ return this._prepare().execute(undefined);
122
+ });
123
+ }
124
+ }
@@ -0,0 +1,37 @@
1
+ import { entityKind } from 'drizzle-orm/entity';
2
+ import { QueryPromise } from 'drizzle-orm/query-promise';
3
+
4
+ export class DatabendRaw extends QueryPromise<any> {
5
+ static readonly [entityKind]: string = 'DatabendRaw';
6
+
7
+ constructor(
8
+ public execute: () => Promise<any>,
9
+ public sql: any,
10
+ public query: any,
11
+ public mapBatchResult: (result: any) => any
12
+ ) {
13
+ super();
14
+ }
15
+
16
+ /** @internal */
17
+ getSQL() {
18
+ return this.sql;
19
+ }
20
+
21
+ getQuery() {
22
+ return this.query;
23
+ }
24
+
25
+ mapResult(result: any, isFromBatch: boolean) {
26
+ return isFromBatch ? this.mapBatchResult(result) : result;
27
+ }
28
+
29
+ _prepare() {
30
+ return this;
31
+ }
32
+
33
+ /** @internal */
34
+ isResponseInArrayMode() {
35
+ return false;
36
+ }
37
+ }