drizzle-orm 0.9.6 → 0.9.10
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/builders/aggregators/insertAggregator.d.ts +1 -1
- package/builders/aggregators/updateAggregator.d.ts +1 -1
- package/builders/highLvlBuilders/updateRequestBuilder.d.ts +2 -2
- package/builders/highLvlBuilders/updateRequestBuilder.js +8 -1
- package/builders/lowLvlBuilders/inserts/onConflictInsert.d.ts +1 -1
- package/builders/lowLvlBuilders/inserts/valuesInsert.d.ts +1 -1
- package/builders/lowLvlBuilders/updates/updateIn.d.ts +1 -1
- package/builders/lowLvlBuilders/updates/whereSet.d.ts +1 -1
- package/builders/requestBuilders/updates/combine.d.ts +1 -1
- package/builders/requestBuilders/updates/combine.js +1 -1
- package/builders/requestBuilders/updates/increment.d.ts +10 -0
- package/builders/requestBuilders/updates/increment.js +15 -0
- package/builders/requestBuilders/updates/setObjects.d.ts +1 -1
- package/builders/requestBuilders/updates/setObjects.js +1 -1
- package/builders/requestBuilders/updates/static.d.ts +2 -1
- package/builders/requestBuilders/updates/static.js +4 -1
- package/builders/requestBuilders/updates/updates.d.ts +4 -1
- package/builders/requestBuilders/updates/updates.js +6 -1
- package/columns/column.d.ts +12 -3
- package/columns/column.js +6 -6
- package/docs/tables/citiesTable.d.ts +4 -4
- package/docs/tables/citiesTable.js +1 -2
- package/docs/tables/usersToUserGroups.d.ts +2 -2
- package/docs/tables/usersToUserGroups.js +2 -3
- package/package.json +1 -1
- package/serializer/serializer.js +2 -3
- package/tables/abstractTable.d.ts +24 -4
- package/tables/inferTypes.d.ts +6 -0
- package/test.js +7 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AbstractTable } from '../../tables';
|
|
2
2
|
import { Indexing } from '../../tables/inferTypes';
|
|
3
|
-
import UpdateExpr from '../requestBuilders/updates/updates';
|
|
3
|
+
import { UpdateExpr } from '../requestBuilders/updates/updates';
|
|
4
4
|
import Aggregator from './abstractAggregator';
|
|
5
5
|
export default class InsertAggregator extends Aggregator {
|
|
6
6
|
private _onConflict;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AbstractTable } from '../../tables';
|
|
2
|
-
import UpdateExpr from '../requestBuilders/updates/updates';
|
|
2
|
+
import { UpdateExpr } from '../requestBuilders/updates/updates';
|
|
3
3
|
import Expr from '../requestBuilders/where/where';
|
|
4
4
|
import Aggregator from './abstractAggregator';
|
|
5
5
|
export default class UpdateAggregator extends Aggregator {
|
|
@@ -3,7 +3,7 @@ import ColumnType from '../../columns/types/columnType';
|
|
|
3
3
|
import Session from '../../db/session';
|
|
4
4
|
import BaseLogger from '../../logger/abstractLogger';
|
|
5
5
|
import { AbstractTable } from '../../tables';
|
|
6
|
-
import { ExtractModel } from '../../tables/inferTypes';
|
|
6
|
+
import { ExtractModel, ExtractUpdateModel } from '../../tables/inferTypes';
|
|
7
7
|
import Expr from '../requestBuilders/where/where';
|
|
8
8
|
import TableRequestBuilder from './abstractRequestBuilder';
|
|
9
9
|
export default class UpdateTRB<TTable extends AbstractTable<TTable>> extends TableRequestBuilder<TTable> {
|
|
@@ -14,7 +14,7 @@ export default class UpdateTRB<TTable extends AbstractTable<TTable>> extends Tab
|
|
|
14
14
|
[name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
|
|
15
15
|
}, logger?: BaseLogger);
|
|
16
16
|
where: (expr: Expr) => UpdateTRB<TTable>;
|
|
17
|
-
set: (expr: Partial<
|
|
17
|
+
set: (expr: Partial<ExtractUpdateModel<TTable>>) => UpdateTRB<TTable>;
|
|
18
18
|
execute: () => Promise<void>;
|
|
19
19
|
protected _execute: () => Promise<Array<ExtractModel<TTable> | undefined>>;
|
|
20
20
|
}
|
|
@@ -5,6 +5,7 @@ const dbErrors_1 = require("../../errors/dbErrors");
|
|
|
5
5
|
const responseMapper_1 = require("../../mappers/responseMapper");
|
|
6
6
|
const update_1 = require("../lowLvlBuilders/updates/update");
|
|
7
7
|
const static_1 = require("../requestBuilders/updates/static");
|
|
8
|
+
const updates_1 = require("../requestBuilders/updates/updates");
|
|
8
9
|
const abstractRequestBuilder_1 = require("./abstractRequestBuilder");
|
|
9
10
|
class UpdateTRB extends abstractRequestBuilder_1.default {
|
|
10
11
|
constructor(table, session, mappedServiceToDb, logger) {
|
|
@@ -17,7 +18,13 @@ class UpdateTRB extends abstractRequestBuilder_1.default {
|
|
|
17
18
|
const updates = [];
|
|
18
19
|
Object.entries(expr).forEach(([key, value]) => {
|
|
19
20
|
const column = this._mappedServiceToDb[key];
|
|
20
|
-
|
|
21
|
+
if (value instanceof updates_1.UpdateCustomExpr) {
|
|
22
|
+
value.setColumn(column);
|
|
23
|
+
updates.push(value);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
updates.push(static_1.set(column, value));
|
|
27
|
+
}
|
|
21
28
|
});
|
|
22
29
|
this._update = static_1.combine(updates);
|
|
23
30
|
return this;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Indexing } from '../../../tables/inferTypes';
|
|
2
2
|
import InsertAggregator from '../../aggregators/insertAggregator';
|
|
3
|
-
import UpdateExpr from '../../requestBuilders/updates/updates';
|
|
3
|
+
import { UpdateExpr } from '../../requestBuilders/updates/updates';
|
|
4
4
|
export default class OnConflictInsert {
|
|
5
5
|
private _aggregator;
|
|
6
6
|
constructor(aggregator: InsertAggregator);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Indexing } from '../../../tables/inferTypes';
|
|
2
2
|
import InsertAggregator from '../../aggregators/insertAggregator';
|
|
3
|
-
import UpdateExpr from '../../requestBuilders/updates/updates';
|
|
3
|
+
import { UpdateExpr } from '../../requestBuilders/updates/updates';
|
|
4
4
|
import OnConflictInsert from './onConflictInsert';
|
|
5
5
|
export default class ValuesInsert {
|
|
6
6
|
private _aggregator;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import UpdateAggregator from '../../aggregators/updateAggregator';
|
|
2
|
-
import UpdateExpr from '../../requestBuilders/updates/updates';
|
|
2
|
+
import { UpdateExpr } from '../../requestBuilders/updates/updates';
|
|
3
3
|
import WhereSet from './whereSet';
|
|
4
4
|
export default class UpdateIn {
|
|
5
5
|
private _aggregator;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import UpdateAggregator from '../../aggregators/updateAggregator';
|
|
2
|
-
import UpdateExpr from '../../requestBuilders/updates/updates';
|
|
2
|
+
import { UpdateExpr } from '../../requestBuilders/updates/updates';
|
|
3
3
|
import Expr from '../../requestBuilders/where/where';
|
|
4
4
|
import WhereSelect from './whereSelect';
|
|
5
5
|
export default class WhereSet<SERVICE, DB> {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const updates_1 = require("./updates");
|
|
4
|
-
class Combine extends updates_1.
|
|
4
|
+
class Combine extends updates_1.UpdateExpr {
|
|
5
5
|
constructor(setters) {
|
|
6
6
|
super();
|
|
7
7
|
this.toQuery = () => {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AbstractColumn } from '../../../columns/column';
|
|
2
|
+
import ColumnType from '../../../columns/types/columnType';
|
|
3
|
+
import { UpdateCustomExpr } from './updates';
|
|
4
|
+
export default class Increment<T extends AbstractColumn<ColumnType<any>, boolean, boolean>> extends UpdateCustomExpr<T> {
|
|
5
|
+
private _column;
|
|
6
|
+
private _value;
|
|
7
|
+
constructor(value: number);
|
|
8
|
+
setColumn: (column: T) => UpdateCustomExpr<T>;
|
|
9
|
+
toQuery: () => string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const updates_1 = require("./updates");
|
|
4
|
+
class Increment extends updates_1.UpdateCustomExpr {
|
|
5
|
+
constructor(value) {
|
|
6
|
+
super();
|
|
7
|
+
this.setColumn = (column) => {
|
|
8
|
+
this._column = column;
|
|
9
|
+
return this;
|
|
10
|
+
};
|
|
11
|
+
this.toQuery = () => `${this._column.getColumnName()} = ${this._column.getColumnName()} + ${this._value}`;
|
|
12
|
+
this._value = value;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.default = Increment;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AbstractColumn } from '../../../columns/column';
|
|
2
2
|
import ColumnType from '../../../columns/types/columnType';
|
|
3
|
-
import UpdateExpr from './updates';
|
|
3
|
+
import { UpdateExpr } from './updates';
|
|
4
4
|
export default class SetObject<T extends AbstractColumn<ColumnType<any>, boolean, boolean>> extends UpdateExpr {
|
|
5
5
|
private _column;
|
|
6
6
|
private _value;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const updates_1 = require("./updates");
|
|
4
|
-
class SetObject extends updates_1.
|
|
4
|
+
class SetObject extends updates_1.UpdateExpr {
|
|
5
5
|
constructor(column, value) {
|
|
6
6
|
super();
|
|
7
7
|
this.toQuery = () => `"${this._column.getColumnName()}"=${this._value === null || this._value === undefined ? 'null' : this._column.getColumnType().insertStrategy(this._value)}`;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AbstractColumn } from '../../../columns/column';
|
|
2
2
|
import ColumnType from '../../../columns/types/columnType';
|
|
3
3
|
import { ExtractCodeType } from '../../../tables/inferTypes';
|
|
4
|
-
import UpdateExpr from './updates';
|
|
4
|
+
import { UpdateCustomExpr, UpdateExpr } from './updates';
|
|
5
5
|
export declare const set: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(column: T, value: ExtractCodeType<T>) => UpdateExpr;
|
|
6
|
+
export declare const incrementBy: <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(value: number) => UpdateCustomExpr<T>;
|
|
6
7
|
export declare const combine: (updates: Array<UpdateExpr>) => UpdateExpr;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.combine = exports.set = void 0;
|
|
3
|
+
exports.combine = exports.incrementBy = exports.set = void 0;
|
|
4
4
|
const combine_1 = require("./combine");
|
|
5
|
+
const increment_1 = require("./increment");
|
|
5
6
|
const setObjects_1 = require("./setObjects");
|
|
6
7
|
const set = (column, value) => new setObjects_1.default(column, value);
|
|
7
8
|
exports.set = set;
|
|
9
|
+
const incrementBy = (value) => new increment_1.default(value);
|
|
10
|
+
exports.incrementBy = incrementBy;
|
|
8
11
|
const combine = (updates) => new combine_1.default(updates);
|
|
9
12
|
exports.combine = combine;
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UpdateCustomExpr = exports.UpdateExpr = void 0;
|
|
4
|
+
/* eslint-disable max-classes-per-file */
|
|
3
5
|
class UpdateExpr {
|
|
4
6
|
}
|
|
5
|
-
exports.
|
|
7
|
+
exports.UpdateExpr = UpdateExpr;
|
|
8
|
+
class UpdateCustomExpr extends UpdateExpr {
|
|
9
|
+
}
|
|
10
|
+
exports.UpdateCustomExpr = UpdateCustomExpr;
|
package/columns/column.d.ts
CHANGED
|
@@ -32,7 +32,10 @@ export declare abstract class AbstractColumn<T extends ColumnType, TNullable ext
|
|
|
32
32
|
getParentName: () => string;
|
|
33
33
|
abstract foreignKey<ITable extends AbstractTable<ITable>>(table: {
|
|
34
34
|
new (db: DB): ITable;
|
|
35
|
-
}, callback: (table: ITable) => AbstractColumn<T, boolean, boolean>,
|
|
35
|
+
}, callback: (table: ITable) => AbstractColumn<T, boolean, boolean>, onConstraint: {
|
|
36
|
+
onDelete?: 'CASCADE' | 'RESTRICT';
|
|
37
|
+
onUpdate?: 'CASCADE' | 'RESTRICT';
|
|
38
|
+
}): AbstractColumn<T, TNullable, TAutoIncrement>;
|
|
36
39
|
defaultValue: (value: ExtractColumnType<T>) => this;
|
|
37
40
|
abstract autoIncrement(): AbstractColumn<T, boolean, boolean>;
|
|
38
41
|
abstract primaryKey(): AbstractColumn<T, boolean, boolean>;
|
|
@@ -48,14 +51,20 @@ export declare class Column<T extends ColumnType, TNullable extends boolean = tr
|
|
|
48
51
|
constructor(parent: AbstractTable<any>, columnName: string, columnType: T, nullable: TNullable);
|
|
49
52
|
serial(): Column<T, false, true>;
|
|
50
53
|
primaryKey(): Column<T, TAutoIncrement extends true ? true : false, TAutoIncrement>;
|
|
51
|
-
foreignKey<ITable extends AbstractTable<ITable>>(table: new (db: DB) => ITable, callback: (table: ITable) => Column<T, boolean, boolean>,
|
|
54
|
+
foreignKey<ITable extends AbstractTable<ITable>>(table: new (db: DB) => ITable, callback: (table: ITable) => Column<T, boolean, boolean>, onConstraint?: {
|
|
55
|
+
onDelete?: 'CASCADE' | 'RESTRICT';
|
|
56
|
+
onUpdate?: 'CASCADE' | 'RESTRICT';
|
|
57
|
+
}): Column<T, TNullable, TAutoIncrement>;
|
|
52
58
|
autoIncrement(): IndexedColumn<T, true, true>;
|
|
53
59
|
}
|
|
54
60
|
export declare class IndexedColumn<T extends ColumnType, TNullable extends boolean = true, TAutoIncrement extends boolean = false> extends AbstractColumn<T, TNullable, TAutoIncrement> {
|
|
55
61
|
constructor(parent: AbstractTable<any>, columnName: string, columnType: T, nullable: TNullable);
|
|
56
62
|
serial(): IndexedColumn<T, false, true>;
|
|
57
63
|
primaryKey(): IndexedColumn<T, TAutoIncrement extends true ? true : false, TAutoIncrement>;
|
|
58
|
-
foreignKey<ITable extends AbstractTable<ITable>>(table: new (db: DB) => ITable, callback: (table: ITable) => IndexedColumn<T, boolean, boolean>,
|
|
64
|
+
foreignKey<ITable extends AbstractTable<ITable>>(table: new (db: DB) => ITable, callback: (table: ITable) => IndexedColumn<T, boolean, boolean>, onConstraint?: {
|
|
65
|
+
onDelete?: 'CASCADE' | 'RESTRICT';
|
|
66
|
+
onUpdate?: 'CASCADE' | 'RESTRICT';
|
|
67
|
+
}): IndexedColumn<T, TNullable, TAutoIncrement>;
|
|
59
68
|
autoIncrement(): IndexedColumn<T, true, true>;
|
|
60
69
|
}
|
|
61
70
|
export {};
|
package/columns/column.js
CHANGED
|
@@ -56,11 +56,11 @@ class Column extends AbstractColumn {
|
|
|
56
56
|
// eslint-disable-next-line max-len
|
|
57
57
|
return this;
|
|
58
58
|
}
|
|
59
|
-
foreignKey(table, callback,
|
|
59
|
+
foreignKey(table, callback, onConstraint) {
|
|
60
60
|
const tableInstance = this.getParent().db.create(table);
|
|
61
61
|
this.referenced = callback(tableInstance);
|
|
62
|
-
this.onDelete = onDelete;
|
|
63
|
-
this.onUpdate = onUpdate;
|
|
62
|
+
this.onDelete = (onConstraint === null || onConstraint === void 0 ? void 0 : onConstraint.onDelete) ? `ON DELETE ${onConstraint.onDelete}` : undefined;
|
|
63
|
+
this.onUpdate = (onConstraint === null || onConstraint === void 0 ? void 0 : onConstraint.onUpdate) ? `ON UPDATE ${onConstraint.onUpdate}` : undefined;
|
|
64
64
|
return this;
|
|
65
65
|
}
|
|
66
66
|
autoIncrement() {
|
|
@@ -83,11 +83,11 @@ class IndexedColumn extends AbstractColumn {
|
|
|
83
83
|
// eslint-disable-next-line max-len
|
|
84
84
|
return this;
|
|
85
85
|
}
|
|
86
|
-
foreignKey(table, callback,
|
|
86
|
+
foreignKey(table, callback, onConstraint) {
|
|
87
87
|
// eslint-disable-next-line new-cap
|
|
88
88
|
this.referenced = callback(this.getParent().db.create(table));
|
|
89
|
-
this.onDelete = onDelete;
|
|
90
|
-
this.onUpdate = onUpdate;
|
|
89
|
+
this.onDelete = (onConstraint === null || onConstraint === void 0 ? void 0 : onConstraint.onDelete) ? `ON DELETE ${onConstraint.onDelete}` : undefined;
|
|
90
|
+
this.onUpdate = (onConstraint === null || onConstraint === void 0 ? void 0 : onConstraint.onUpdate) ? `ON UPDATE ${onConstraint.onUpdate}` : undefined;
|
|
91
91
|
return this;
|
|
92
92
|
}
|
|
93
93
|
autoIncrement() {
|
|
@@ -5,10 +5,10 @@ interface CityMeta {
|
|
|
5
5
|
}
|
|
6
6
|
export default class CitiesTable extends AbstractTable<CitiesTable> {
|
|
7
7
|
id: import("../../columns/column").IndexedColumn<import("../..").PgInteger, true, true>;
|
|
8
|
-
foundationDate: import("
|
|
9
|
-
location: import("
|
|
10
|
-
userId: import("
|
|
11
|
-
metadata: import("
|
|
8
|
+
foundationDate: import("../..").Column<import("../..").PgTimestamp, false, false>;
|
|
9
|
+
location: import("../..").Column<import("../..").PgVarChar, true, false>;
|
|
10
|
+
userId: import("../..").Column<import("../..").PgInteger, true, false>;
|
|
11
|
+
metadata: import("../..").Column<import("../..").PgJsonb<CityMeta>, true, false>;
|
|
12
12
|
tableName(): string;
|
|
13
13
|
}
|
|
14
14
|
export {};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const column_1 = require("../../columns/column");
|
|
4
3
|
const abstractTable_1 = require("../../tables/abstractTable");
|
|
5
4
|
const usersTable_1 = require("./usersTable");
|
|
6
5
|
class CitiesTable extends abstractTable_1.default {
|
|
@@ -9,7 +8,7 @@ class CitiesTable extends abstractTable_1.default {
|
|
|
9
8
|
this.id = this.int('id').autoIncrement().primaryKey();
|
|
10
9
|
this.foundationDate = this.timestamp('name', { notNull: true });
|
|
11
10
|
this.location = this.varchar('page', { size: 256 });
|
|
12
|
-
this.userId = this.int('user_id').foreignKey(usersTable_1.default, (table) => table.id,
|
|
11
|
+
this.userId = this.int('user_id').foreignKey(usersTable_1.default, (table) => table.id, { onUpdate: 'CASCADE' });
|
|
13
12
|
this.metadata = this.jsonb('metadata');
|
|
14
13
|
}
|
|
15
14
|
tableName() {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import AbstractTable from '../../tables/abstractTable';
|
|
2
2
|
export default class UsersToUserGroupsTable extends AbstractTable<UsersToUserGroupsTable> {
|
|
3
|
-
groupId: import("
|
|
4
|
-
userId: import("
|
|
3
|
+
groupId: import("../..").Column<import("../..").PgInteger, true, false>;
|
|
4
|
+
userId: import("../..").Column<import("../..").PgInteger, true, false>;
|
|
5
5
|
manyToManyIndex: import("../../indexes/tableIndex").default;
|
|
6
6
|
tableName(): string;
|
|
7
7
|
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const column_1 = require("../../columns/column");
|
|
4
3
|
const abstractTable_1 = require("../../tables/abstractTable");
|
|
5
4
|
const userGroupsTable_1 = require("./userGroupsTable");
|
|
6
5
|
const usersTable_1 = require("./usersTable");
|
|
7
6
|
class UsersToUserGroupsTable extends abstractTable_1.default {
|
|
8
7
|
constructor() {
|
|
9
8
|
super(...arguments);
|
|
10
|
-
this.groupId = this.int('city_id').foreignKey(userGroupsTable_1.default, (table) => table.id,
|
|
11
|
-
this.userId = this.int('user_id').foreignKey(usersTable_1.default, (table) => table.id,
|
|
9
|
+
this.groupId = this.int('city_id').foreignKey(userGroupsTable_1.default, (table) => table.id, { onDelete: 'CASCADE' });
|
|
10
|
+
this.userId = this.int('user_id').foreignKey(usersTable_1.default, (table) => table.id, { onDelete: 'CASCADE' });
|
|
12
11
|
this.manyToManyIndex = this.index([this.groupId, this.userId]);
|
|
13
12
|
}
|
|
14
13
|
tableName() {
|
package/package.json
CHANGED
package/serializer/serializer.js
CHANGED
|
@@ -15,7 +15,6 @@ class MigrationSerializer {
|
|
|
15
15
|
const columnToReturn = {};
|
|
16
16
|
const indexToReturn = {};
|
|
17
17
|
for (const properties of tableEntries) {
|
|
18
|
-
const key = properties[0];
|
|
19
18
|
const value = properties[1];
|
|
20
19
|
if (value instanceof tableIndex_1.default) {
|
|
21
20
|
const columns = value.getColumns();
|
|
@@ -33,7 +32,7 @@ class MigrationSerializer {
|
|
|
33
32
|
};
|
|
34
33
|
}
|
|
35
34
|
if (value instanceof columns_1.Column) {
|
|
36
|
-
columnToReturn[
|
|
35
|
+
columnToReturn[value.getColumnName()] = {
|
|
37
36
|
name: value.getColumnName(),
|
|
38
37
|
type: value.isAutoIncrement() ? 'serial' : value.getColumnType().getDbName(),
|
|
39
38
|
primaryKey: !!value.primaryKeyName,
|
|
@@ -43,7 +42,7 @@ class MigrationSerializer {
|
|
|
43
42
|
};
|
|
44
43
|
const referenced = value.getReferenced();
|
|
45
44
|
if (referenced) {
|
|
46
|
-
columnToReturn[
|
|
45
|
+
columnToReturn[value.getColumnName()].references = {
|
|
47
46
|
foreignKeyName: `${value.getParent().tableName()}_${value.getColumnName()}_fk`,
|
|
48
47
|
table: referenced.getParentName(),
|
|
49
48
|
column: referenced.getColumnName(),
|
|
@@ -82,14 +82,34 @@ export default abstract class AbstractTable<TTable extends AbstractTable<TTable>
|
|
|
82
82
|
notNull: true;
|
|
83
83
|
}): Column<PgEnum<ExtractEnumValues<Enum<ETtype>>>, false>;
|
|
84
84
|
protected decimal(name: string, params?: {
|
|
85
|
-
|
|
86
|
-
precision: number;
|
|
85
|
+
precision?: number;
|
|
87
86
|
scale: number;
|
|
87
|
+
notNull?: false;
|
|
88
88
|
}): Column<PgBigDecimal, true>;
|
|
89
89
|
protected decimal(name: string, params: {
|
|
90
|
-
|
|
91
|
-
precision: number;
|
|
90
|
+
precision?: number;
|
|
92
91
|
scale: number;
|
|
92
|
+
notNull?: true;
|
|
93
|
+
}): Column<PgBigDecimal, false>;
|
|
94
|
+
protected decimal(name: string, params?: {
|
|
95
|
+
precision: number;
|
|
96
|
+
scale?: number;
|
|
97
|
+
notNull?: false;
|
|
98
|
+
}): Column<PgBigDecimal, true>;
|
|
99
|
+
protected decimal(name: string, params: {
|
|
100
|
+
precision: number;
|
|
101
|
+
scale?: number;
|
|
102
|
+
notNull?: true;
|
|
103
|
+
}): Column<PgBigDecimal, false>;
|
|
104
|
+
protected decimal(name: string, params?: {
|
|
105
|
+
precision?: number;
|
|
106
|
+
scale?: number;
|
|
107
|
+
notNull?: false;
|
|
108
|
+
}): Column<PgBigDecimal, true>;
|
|
109
|
+
protected decimal(name: string, params: {
|
|
110
|
+
precision?: number;
|
|
111
|
+
scale?: number;
|
|
112
|
+
notNull?: true;
|
|
93
113
|
}): Column<PgBigDecimal, false>;
|
|
94
114
|
protected time(name: string, params?: {
|
|
95
115
|
notNull: false;
|
package/tables/inferTypes.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { UpdateCustomExpr } from '../builders/requestBuilders/updates/updates';
|
|
1
2
|
import { AbstractColumn, Column, IndexedColumn } from '../columns/column';
|
|
2
3
|
import ColumnType from '../columns/types/columnType';
|
|
3
4
|
import TableIndex from '../indexes/tableIndex';
|
|
@@ -13,6 +14,11 @@ export declare type ExtractModel<TTable> = {
|
|
|
13
14
|
} & {
|
|
14
15
|
[Key in ExtractOptionalFieldNames<TTable>]?: ExtractCodeType<TTable[Key]>;
|
|
15
16
|
};
|
|
17
|
+
export declare type ExtractUpdateModel<TTable> = {
|
|
18
|
+
[Key in ExtractFieldNames<TTable>]: ExtractCodeType<TTable[Key]> | UpdateCustomExpr<TTable[Key]>;
|
|
19
|
+
} & {
|
|
20
|
+
[Key in ExtractOptionalFieldNames<TTable>]?: ExtractCodeType<TTable[Key]> | UpdateCustomExpr<TTable[Key]>;
|
|
21
|
+
};
|
|
16
22
|
export declare type ExtractCodeType<T extends AbstractColumn<ColumnType<any>, boolean, boolean>> = T extends AbstractColumn<ColumnType<infer TCodeType>, infer TNullable, infer TAutoIncrement> ? TCodeType : never;
|
|
17
23
|
export declare type ExtractTypeEnum<T extends Type<any>> = T extends Type<infer TEnum> ? TEnum : never;
|
|
18
24
|
export declare type Indexing = IndexedColumn<ColumnType, boolean, boolean> | TableIndex;
|
package/test.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const _1 = require(".");
|
|
4
|
-
const usersTable_1 = require("./docs/tables/usersTable");
|
|
5
|
-
const serializer_1 = require("./serializer/serializer");
|
|
6
4
|
// import { Pool } from 'pg';
|
|
7
5
|
// import { DB } from '.';
|
|
8
6
|
// import { DB, DbConnector } from '.';
|
|
@@ -20,12 +18,14 @@ const fromTypeFile = (filepath) => {
|
|
|
20
18
|
(async () => {
|
|
21
19
|
try {
|
|
22
20
|
const db = await new _1.DbConnector()
|
|
23
|
-
.connectionString('postgresql://postgres@127.0.0.1/
|
|
21
|
+
.connectionString('postgresql://postgres@127.0.0.1/migrator')
|
|
24
22
|
.connect();
|
|
25
|
-
const ser = new
|
|
26
|
-
const d = db.create(
|
|
27
|
-
const f = ser.generate([d], []);
|
|
28
|
-
console.log(JSON.stringify(f, null, 2));
|
|
23
|
+
// const ser = new MigrationSerializer();
|
|
24
|
+
// const d = db.create(UsersTable) as unknown as AbstractTable<any>;
|
|
25
|
+
// const f = ser.generate([d], []);
|
|
26
|
+
// console.log(JSON.stringify(f, null, 2));
|
|
27
|
+
// await drizzle.migrator(db).migrate('src/drizzle.config.yaml');
|
|
28
|
+
// drizzle.migrator(db).migrate({ migrationFolder: '' });
|
|
29
29
|
// const typesFileNames = fs.readdirSync('/Users/andrewsherman/IdeaProjects/datalayer-orm/src/examples/types');
|
|
30
30
|
// typesFileNames.forEach((filename) => {
|
|
31
31
|
// const types = fromTypeFile(`./examples/types/${filename.split('.')[0]}`);
|