Skip to content

Commit a350140

Browse files
committed
Code cleanup, split refresh-materialized-view
1 parent 8e54093 commit a350140

File tree

18 files changed

+210
-331
lines changed

18 files changed

+210
-331
lines changed

drizzle-orm/src/pg-core/async/db.ts

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,20 @@ import { SelectionProxyHandler } from '~/selection-proxy.ts';
1212
import { type ColumnsSelection, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';
1313
import { WithSubquery } from '~/subquery.ts';
1414
import type { DrizzleTypeError, NeonAuthToken } from '~/utils.ts';
15-
import { PgAsyncCountBuilder } from '../async/count.ts';
1615
import type { PgColumn } from '../columns/index.ts';
1716
import { _RelationalQueryBuilder } from '../query-builders/_query.ts';
1817
import { RelationalQueryBuilder } from '../query-builders/query.ts';
1918
import { PgRaw } from '../query-builders/raw.ts';
20-
import { PgRefreshMaterializedView } from '../query-builders/refresh-materialized-view.ts';
2119
import type { SelectedFields } from '../query-builders/select.types.ts';
2220
import type { PreparedQueryConfig } from '../session.ts';
2321
import type { WithBuilder } from '../subquery.ts';
2422
import type { PgViewBase } from '../view-base.ts';
2523
import type { PgMaterializedView } from '../view.ts';
24+
import { PgAsyncCountBuilder } from './count.ts';
2625
import { PgAsyncDeleteBase } from './delete.ts';
2726
import { PgAsyncInsertBase, type PgAsyncInsertHKT } from './insert.ts';
28-
import { PgAsyncSelectBase, type PgAsyncSelectInit } from './select.ts';
27+
import { PgAsyncRefreshMaterializedView } from './refresh-materialized-view.ts';
28+
import { PgAsyncSelectBase, type PgAsyncSelectBuilder } from './select.ts';
2929
import { PgAsyncUpdateBase, type PgAsyncUpdateHKT } from './update.ts';
3030

3131
export class PgAsyncDatabase<
@@ -242,11 +242,11 @@ export class PgAsyncDatabase<
242242
* .from(cars);
243243
* ```
244244
*/
245-
function select(): PgAsyncSelectInit<undefined>;
246-
function select<TSelection extends SelectedFields>(fields: TSelection): PgAsyncSelectInit<TSelection>;
245+
function select(): PgAsyncSelectBuilder<undefined>;
246+
function select<TSelection extends SelectedFields>(fields: TSelection): PgAsyncSelectBuilder<TSelection>;
247247
function select<TSelection extends SelectedFields>(
248248
fields?: TSelection,
249-
): PgAsyncSelectInit<TSelection | undefined> {
249+
): PgAsyncSelectBuilder<TSelection | undefined> {
250250
return new PgAsyncSelectBase({
251251
fields: fields ?? undefined,
252252
session: self.session,
@@ -279,13 +279,13 @@ export class PgAsyncDatabase<
279279
* .orderBy(cars.brand);
280280
* ```
281281
*/
282-
function selectDistinct(): PgAsyncSelectInit<undefined>;
282+
function selectDistinct(): PgAsyncSelectBuilder<undefined>;
283283
function selectDistinct<TSelection extends SelectedFields>(
284284
fields: TSelection,
285-
): PgAsyncSelectInit<TSelection>;
285+
): PgAsyncSelectBuilder<TSelection>;
286286
function selectDistinct<TSelection extends SelectedFields>(
287287
fields?: TSelection,
288-
): PgAsyncSelectInit<TSelection | undefined> {
288+
): PgAsyncSelectBuilder<TSelection | undefined> {
289289
return new PgAsyncSelectBase({
290290
fields: fields ?? undefined,
291291
session: self.session,
@@ -320,15 +320,15 @@ export class PgAsyncDatabase<
320320
* .orderBy(cars.brand, cars.color);
321321
* ```
322322
*/
323-
function selectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgAsyncSelectInit<undefined>;
323+
function selectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgAsyncSelectBuilder<undefined>;
324324
function selectDistinctOn<TSelection extends SelectedFields>(
325325
on: (PgColumn | SQLWrapper)[],
326326
fields: TSelection,
327-
): PgAsyncSelectInit<TSelection>;
327+
): PgAsyncSelectBuilder<TSelection>;
328328
function selectDistinctOn<TSelection extends SelectedFields>(
329329
on: (PgColumn | SQLWrapper)[],
330330
fields?: TSelection,
331-
): PgAsyncSelectInit<TSelection | undefined> {
331+
): PgAsyncSelectBuilder<TSelection | undefined> {
332332
return new PgAsyncSelectBase({
333333
fields: fields ?? undefined,
334334
session: self.session,
@@ -466,16 +466,16 @@ export class PgAsyncDatabase<
466466
* .from(cars);
467467
* ```
468468
*/
469-
select(): PgAsyncSelectInit<undefined>;
470-
select<TSelection extends SelectedFields>(fields: TSelection): PgAsyncSelectInit<TSelection>;
469+
select(): PgAsyncSelectBuilder<undefined>;
470+
select<TSelection extends SelectedFields>(fields: TSelection): PgAsyncSelectBuilder<TSelection>;
471471
select<TSelection extends SelectedFields | undefined>(
472472
fields?: TSelection,
473-
): PgAsyncSelectInit<TSelection> {
473+
): PgAsyncSelectBuilder<TSelection> {
474474
return new PgAsyncSelectBase({
475475
fields: fields ?? undefined,
476476
session: this.session,
477477
dialect: this.dialect,
478-
}) as PgAsyncSelectInit<TSelection>;
478+
}) as PgAsyncSelectBuilder<TSelection>;
479479
}
480480

481481
/**
@@ -502,11 +502,11 @@ export class PgAsyncDatabase<
502502
* .orderBy(cars.brand);
503503
* ```
504504
*/
505-
selectDistinct(): PgAsyncSelectInit<undefined>;
506-
selectDistinct<TSelection extends SelectedFields>(fields: TSelection): PgAsyncSelectInit<TSelection>;
505+
selectDistinct(): PgAsyncSelectBuilder<undefined>;
506+
selectDistinct<TSelection extends SelectedFields>(fields: TSelection): PgAsyncSelectBuilder<TSelection>;
507507
selectDistinct<TSelection extends SelectedFields | undefined>(
508508
fields?: TSelection,
509-
): PgAsyncSelectInit<TSelection | undefined> {
509+
): PgAsyncSelectBuilder<TSelection | undefined> {
510510
return new PgAsyncSelectBase({
511511
fields: fields ?? undefined,
512512
session: this.session,
@@ -540,15 +540,15 @@ export class PgAsyncDatabase<
540540
* .orderBy(cars.brand, cars.color);
541541
* ```
542542
*/
543-
selectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgAsyncSelectInit<undefined>;
543+
selectDistinctOn(on: (PgColumn | SQLWrapper)[]): PgAsyncSelectBuilder<undefined>;
544544
selectDistinctOn<TSelection extends SelectedFields>(
545545
on: (PgColumn | SQLWrapper)[],
546546
fields: TSelection,
547-
): PgAsyncSelectInit<TSelection>;
547+
): PgAsyncSelectBuilder<TSelection>;
548548
selectDistinctOn<TSelection extends SelectedFields | undefined>(
549549
on: (PgColumn | SQLWrapper)[],
550550
fields?: TSelection,
551-
): PgAsyncSelectInit<TSelection> {
551+
): PgAsyncSelectBuilder<TSelection> {
552552
return new PgAsyncSelectBase({
553553
fields: fields ?? undefined,
554554
session: this.session,
@@ -644,8 +644,8 @@ export class PgAsyncDatabase<
644644
return new PgAsyncDeleteBase(table, this.session, this.dialect);
645645
}
646646

647-
refreshMaterializedView<TView extends PgMaterializedView>(view: TView): PgRefreshMaterializedView<TQueryResult> {
648-
return new PgRefreshMaterializedView(view, this.session, this.dialect);
647+
refreshMaterializedView<TView extends PgMaterializedView>(view: TView): PgAsyncRefreshMaterializedView<TQueryResult> {
648+
return new PgAsyncRefreshMaterializedView(view, this.session, this.dialect);
649649
}
650650

651651
execute<TRow extends Record<string, unknown> = Record<string, unknown>>(

drizzle-orm/src/pg-core/async/delete.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import type { RunnableQuery } from '~/runnable-query.ts';
77
import type { ColumnsSelection, SQLWrapper } from '~/sql/sql.ts';
88
import { tracer } from '~/tracing.ts';
99
import { applyMixins, type Assume, type NeonAuthToken } from '~/utils.ts';
10-
import type { PgAsyncPreparedQuery, PgAsyncSession } from '../async/session.ts';
1110
import { PgDeleteBase, type PgDeleteHKTBase } from '../query-builders/delete.ts';
1211
import { extractUsedTable } from '../utils.ts';
12+
import type { PgAsyncPreparedQuery, PgAsyncSession } from './session.ts';
1313

1414
export type PgAsyncDelete<
1515
TTable extends PgTable = PgTable,
@@ -82,7 +82,7 @@ export class PgAsyncDeleteBase<
8282
>(this.dialect.sqlToQuery(this.getSQL()), this.config.returning, name, true, undefined, {
8383
type: 'delete',
8484
tables: extractUsedTable(this.config.table),
85-
}, this.cacheConfig);
85+
}, this.cacheConfig).setToken(this.authToken);
8686
});
8787
}
8888

@@ -100,7 +100,7 @@ export class PgAsyncDeleteBase<
100100

101101
execute: ReturnType<this['prepare']>['execute'] = (placeholderValues) => {
102102
return tracer.startActiveSpan('drizzle.operation', () => {
103-
return this._prepare().setToken(this.authToken).execute(placeholderValues);
103+
return this._prepare().execute(placeholderValues);
104104
});
105105
};
106106
}

drizzle-orm/src/pg-core/async/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export * from './count.ts';
22
export * from './db.ts';
33
export * from './delete.ts';
44
export * from './insert.ts';
5+
export * from './refresh-materialized-view.ts';
56
export * from './select.ts';
67
export * from './session.ts';
78
export * from './update.ts';

drizzle-orm/src/pg-core/async/insert.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ export class PgAsyncInsertBase<
8383
>(this.dialect.sqlToQuery(this.getSQL()), this.config.returning, name, true, undefined, {
8484
type: 'insert',
8585
tables: extractUsedTable(this.config.table),
86-
}, this.cacheConfig);
86+
}, this.cacheConfig).setToken(this.authToken);
8787
});
8888
}
8989

@@ -101,7 +101,7 @@ export class PgAsyncInsertBase<
101101

102102
execute: ReturnType<this['prepare']>['execute'] = (placeholderValues) => {
103103
return tracer.startActiveSpan('drizzle.operation', () => {
104-
return this._prepare().setToken(this.authToken).execute(placeholderValues);
104+
return this._prepare().execute(placeholderValues);
105105
});
106106
};
107107
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import { entityKind } from '~/entity.ts';
2+
import type { PgQueryResultHKT, PgQueryResultKind, PreparedQueryConfig } from '~/pg-core/session.ts';
3+
import { QueryPromise } from '~/query-promise.ts';
4+
import type { RunnableQuery } from '~/runnable-query.ts';
5+
import { tracer } from '~/tracing.ts';
6+
import { applyMixins, type NeonAuthToken } from '~/utils.ts';
7+
import { PgRefreshMaterializedView } from '../query-builders/refresh-materialized-view.ts';
8+
import type { PgAsyncPreparedQuery, PgAsyncSession } from './session.ts';
9+
10+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
11+
export interface PgAsyncRefreshMaterializedView<TQueryResult extends PgQueryResultHKT>
12+
extends QueryPromise<PgQueryResultKind<TQueryResult, never>>
13+
{}
14+
15+
export class PgAsyncRefreshMaterializedView<TQueryResult extends PgQueryResultHKT>
16+
extends PgRefreshMaterializedView<TQueryResult>
17+
implements RunnableQuery<PgQueryResultKind<TQueryResult, never>, 'pg'>
18+
{
19+
static override readonly [entityKind]: string = 'PgAsyncRefreshMaterializedView';
20+
21+
declare protected session: PgAsyncSession;
22+
23+
/** @internal */
24+
_prepare(name?: string): PgAsyncPreparedQuery<
25+
PreparedQueryConfig & {
26+
execute: PgQueryResultKind<TQueryResult, never>;
27+
}
28+
> {
29+
return tracer.startActiveSpan('drizzle.prepareQuery', () => {
30+
return this.session.prepareQuery(this.dialect.sqlToQuery(this.getSQL()), undefined, name, true).setToken(
31+
this.authToken,
32+
);
33+
});
34+
}
35+
36+
prepare(name: string): PgAsyncPreparedQuery<
37+
PreparedQueryConfig & {
38+
execute: PgQueryResultKind<TQueryResult, never>;
39+
}
40+
> {
41+
return this._prepare(name);
42+
}
43+
44+
/** @internal */
45+
private authToken?: NeonAuthToken;
46+
/** @internal */
47+
setToken(token: NeonAuthToken) {
48+
this.authToken = token;
49+
return this;
50+
}
51+
52+
execute: ReturnType<this['prepare']>['execute'] = (placeholderValues) => {
53+
return tracer.startActiveSpan('drizzle.operation', () => {
54+
return this._prepare().execute(placeholderValues);
55+
});
56+
};
57+
}
58+
59+
applyMixins(PgAsyncRefreshMaterializedView, [QueryPromise]);

drizzle-orm/src/pg-core/async/select.ts

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ import type {
66
SelectResult,
77
} from '~/query-builders/select.types.ts';
88
import { QueryPromise } from '~/query-promise.ts';
9-
import type { ColumnsSelection, SQLWrapper } from '~/sql/sql.ts';
10-
import type { Subquery } from '~/subquery.ts';
9+
import type { ColumnsSelection } from '~/sql/sql.ts';
1110
import { tracer } from '~/tracing.ts';
1211
import { applyMixins, type Assume, type NeonAuthToken, orderSelectedFields } from '~/utils.ts';
1312
import type { PgColumn } from '../columns/index.ts';
14-
import type { PgDialect } from '../dialect.ts';
1513
import { PgSelectBase, type PgSelectBuilder } from '../query-builders/select.ts';
1614
import type { PgSelectHKTBase, SelectedFields } from '../query-builders/select.types.ts';
1715
import type { PreparedQueryConfig } from '../session.ts';
@@ -23,7 +21,7 @@ export type PgAsyncSelectPrepare<T extends AnyPgAsyncSelect> = PgAsyncPreparedQu
2321
}
2422
>;
2523

26-
export type PgAsyncSelectInit<
24+
export type PgAsyncSelectBuilder<
2725
TSelection extends SelectedFields | undefined,
2826
> = PgSelectBuilder<TSelection, PgAsyncSelectHKT>;
2927

@@ -100,31 +98,13 @@ export class PgAsyncSelectBase<
10098
> {
10199
static override readonly [entityKind]: string = 'PgAsyncSelectQueryBuilder';
102100

103-
declare protected session: PgAsyncSession<any, any, any, any> | undefined;
104-
105-
constructor(
106-
config: {
107-
fields: TSelection;
108-
session: PgAsyncSession<any, any, any, any>;
109-
dialect: PgDialect;
110-
withList?: Subquery[];
111-
distinct?: boolean | {
112-
on: (PgColumn | SQLWrapper)[];
113-
};
114-
},
115-
) {
116-
super(config);
117-
}
101+
declare protected session: PgAsyncSession;
118102

119103
/** @internal */
120104
_prepare(
121105
name?: string,
122106
): PgAsyncSelectPrepare<this> {
123107
const { session, config, dialect, joinsNotNullableMap, authToken, cacheConfig, usedTables } = this;
124-
if (!session) {
125-
throw new Error('Cannot execute a query on a query builder. Please use a database instance instead.');
126-
}
127-
128108
const { fields } = config;
129109

130110
return tracer.startActiveSpan('drizzle.prepareQuery', () => {

drizzle-orm/src/pg-core/async/update.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import type { RunnableQuery } from '~/runnable-query.ts';
77
import type { ColumnsSelection, SQL } from '~/sql/sql.ts';
88
import type { Subquery } from '~/subquery.ts';
99
import { applyMixins, type Assume } from '~/utils.ts';
10-
import type { PgAsyncPreparedQuery, PgAsyncSession } from '../async/session.ts';
1110
import { type Join, PgUpdateBase } from '../query-builders/update.ts';
1211
import { extractUsedTable } from '../utils.ts';
1312
import type { PgViewBase } from '../view-base.ts';
13+
import type { PgAsyncPreparedQuery, PgAsyncSession } from './session.ts';
1414

1515
export type PgAsyncUpdatePrepare<T extends AnyPgAsyncUpdate> = PgAsyncPreparedQuery<
1616
PreparedQueryConfig & {

0 commit comments

Comments
 (0)