drizzle-orm 0.10.2 → 0.10.6
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/README.md +12 -2
- package/builders/aggregators/deleteAggregator.d.ts +5 -1
- package/builders/aggregators/deleteAggregator.js +5 -2
- package/builders/aggregators/insertAggregator.d.ts +5 -1
- package/builders/aggregators/insertAggregator.js +18 -9
- package/builders/aggregators/selectAggregator.d.ts +6 -1
- package/builders/aggregators/selectAggregator.js +10 -6
- package/builders/aggregators/updateAggregator.d.ts +5 -1
- package/builders/aggregators/updateAggregator.js +9 -3
- package/builders/highLvlBuilders/deleteRequestBuilder.js +5 -2
- package/builders/highLvlBuilders/insertRequestBuilder.js +5 -2
- package/builders/highLvlBuilders/selectRequestBuilder.js +7 -2
- package/builders/highLvlBuilders/updateRequestBuilder.js +6 -2
- package/builders/joinBuilders/builders/abstractJoinBuilder.js +7 -3
- package/builders/lowLvlBuilders/delets/deleteFilter.d.ts +4 -1
- package/builders/lowLvlBuilders/delets/deleteFrom.d.ts +4 -1
- package/builders/lowLvlBuilders/inserts/insertInto.d.ts +4 -1
- package/builders/lowLvlBuilders/inserts/onConflictInsert.d.ts +4 -1
- package/builders/lowLvlBuilders/inserts/valuesInsert.d.ts +4 -1
- package/builders/lowLvlBuilders/selects/selectFrom.d.ts +4 -1
- package/builders/lowLvlBuilders/selects/selectJoined.d.ts +4 -1
- package/builders/lowLvlBuilders/selects/whereSelect.d.ts +4 -1
- package/builders/lowLvlBuilders/updates/updateIn.d.ts +4 -1
- package/builders/lowLvlBuilders/updates/whereSelect.d.ts +4 -1
- package/builders/lowLvlBuilders/updates/whereSet.d.ts +4 -1
- package/builders/requestBuilders/updates/combine.d.ts +4 -1
- package/builders/requestBuilders/updates/combine.js +8 -3
- package/builders/requestBuilders/updates/increment.d.ts +4 -1
- package/builders/requestBuilders/updates/increment.js +4 -1
- package/builders/requestBuilders/updates/setObjects.d.ts +4 -1
- package/builders/requestBuilders/updates/setObjects.js +5 -1
- package/builders/requestBuilders/updates/updates.d.ts +4 -1
- package/builders/requestBuilders/where/and.d.ts +6 -1
- package/builders/requestBuilders/where/and.js +9 -3
- package/builders/requestBuilders/where/const.d.ts +4 -1
- package/builders/requestBuilders/where/const.js +6 -4
- package/builders/requestBuilders/where/constArray.d.ts +4 -1
- package/builders/requestBuilders/where/constArray.js +11 -5
- package/builders/requestBuilders/where/eqWhere.d.ts +6 -1
- package/builders/requestBuilders/where/eqWhere.js +6 -1
- package/builders/requestBuilders/where/greater.d.ts +6 -1
- package/builders/requestBuilders/where/greater.js +6 -1
- package/builders/requestBuilders/where/greaterEq.d.ts +6 -1
- package/builders/requestBuilders/where/greaterEq.js +6 -1
- package/builders/requestBuilders/where/in.d.ts +6 -1
- package/builders/requestBuilders/where/in.js +6 -1
- package/builders/requestBuilders/where/isNull.d.ts +6 -1
- package/builders/requestBuilders/where/isNull.js +5 -1
- package/builders/requestBuilders/where/less.d.ts +6 -1
- package/builders/requestBuilders/where/less.js +6 -1
- package/builders/requestBuilders/where/lessEq.d.ts +6 -1
- package/builders/requestBuilders/where/lessEq.js +6 -1
- package/builders/requestBuilders/where/like.d.ts +6 -1
- package/builders/requestBuilders/where/like.js +6 -1
- package/builders/requestBuilders/where/notEqWhere.d.ts +6 -1
- package/builders/requestBuilders/where/notEqWhere.js +6 -1
- package/builders/requestBuilders/where/or.d.ts +6 -1
- package/builders/requestBuilders/where/or.js +9 -3
- package/builders/requestBuilders/where/rawWhere.d.ts +4 -1
- package/builders/requestBuilders/where/rawWhere.js +2 -1
- package/builders/requestBuilders/where/var.d.ts +6 -1
- package/builders/requestBuilders/where/var.js +4 -1
- package/builders/requestBuilders/where/where.d.ts +6 -1
- package/builders/requestBuilders/where/where.js +1 -0
- package/columns/types/pgEnum.js +1 -1
- package/columns/types/pgInteger.d.ts +1 -1
- package/columns/types/pgInteger.js +1 -1
- package/columns/types/pgJsonb.js +3 -1
- package/columns/types/pgSerial.d.ts +1 -1
- package/columns/types/pgSerial.js +1 -1
- package/columns/types/pgSmallInt.d.ts +1 -1
- package/columns/types/pgSmallInt.js +1 -1
- package/columns/types/pgText.js +1 -1
- package/columns/types/pgTimestamp.js +1 -1
- package/columns/types/pgTimestamptz.js +1 -1
- package/columns/types/pgVarChar.js +1 -1
- package/data/tables/citiesTable.d.ts +14 -0
- package/data/tables/citiesTable.js +17 -0
- package/data/tables/userGroupsTable.d.ts +7 -0
- package/data/tables/userGroupsTable.js +15 -0
- package/data/tables/usersTable.d.ts +16 -0
- package/data/tables/usersTable.js +31 -0
- package/data/tables/usersToUserGroups.d.ts +7 -0
- package/data/tables/usersToUserGroups.js +17 -0
- package/data/types/rolesType.d.ts +1 -0
- package/data/types/rolesType.js +6 -0
- package/db/session.d.ts +2 -2
- package/db/session.js +2 -2
- package/docs/cases/simple_delete.js +5 -3
- package/docs/cases/simple_insert.js +7 -9
- package/docs/cases/simple_join.js +9 -7
- package/docs/cases/simple_select.js +4 -2
- package/docs/cases/simple_update.js +5 -2
- package/docs/tables/usersTable.d.ts +11 -10
- package/docs/tables/usersTable.js +5 -4
- package/mappers/responseMapper.js +2 -2
- package/migrator/migrator.js +10 -2
- package/package.json +1 -1
- package/tables/abstractTable.d.ts +2 -1
- package/test.js +104 -9
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import AbstractTable from '../../tables/abstractTable';
|
|
2
|
+
interface CityMeta {
|
|
3
|
+
population: number;
|
|
4
|
+
connection: string;
|
|
5
|
+
}
|
|
6
|
+
export default class CitiesTable extends AbstractTable<CitiesTable> {
|
|
7
|
+
id: import("../..").Column<import("../../columns/types/pgSerial").default, true, true, this>;
|
|
8
|
+
foundationDate: import("../..").Column<import("../..").PgTimestamp, false, false, this>;
|
|
9
|
+
location: import("../..").Column<import("../..").PgVarChar, true, false, this>;
|
|
10
|
+
userId: import("../..").Column<import("../..").PgInteger, true, false, this>;
|
|
11
|
+
metadata: import("../..").Column<import("../..").PgJsonb<CityMeta>, true, false, this>;
|
|
12
|
+
tableName(): string;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const abstractTable_1 = require("../../tables/abstractTable");
|
|
4
|
+
class CitiesTable extends abstractTable_1.default {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this.id = this.serial('id').primaryKey();
|
|
8
|
+
this.foundationDate = this.timestamp('name').notNull();
|
|
9
|
+
this.location = this.varchar('page', { size: 256 });
|
|
10
|
+
this.userId = this.int('user_id').foreignKey(CitiesTable, (table) => table.id, { onUpdate: 'CASCADE' });
|
|
11
|
+
this.metadata = this.jsonb('metadata');
|
|
12
|
+
}
|
|
13
|
+
tableName() {
|
|
14
|
+
return 'cities';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.default = CitiesTable;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import AbstractTable from '../../tables/abstractTable';
|
|
2
|
+
export default class UserGroupsTable extends AbstractTable<UserGroupsTable> {
|
|
3
|
+
id: import("../..").Column<import("../../columns/types/pgSerial").default, true, true, this>;
|
|
4
|
+
name: import("../..").Column<import("../..").PgVarChar, true, false, this>;
|
|
5
|
+
description: import("../..").Column<import("../..").PgVarChar, true, false, this>;
|
|
6
|
+
tableName(): string;
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const abstractTable_1 = require("../../tables/abstractTable");
|
|
4
|
+
class UserGroupsTable extends abstractTable_1.default {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this.id = this.serial('id').primaryKey();
|
|
8
|
+
this.name = this.varchar('name');
|
|
9
|
+
this.description = this.varchar('description');
|
|
10
|
+
}
|
|
11
|
+
tableName() {
|
|
12
|
+
return 'user_groups';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.default = UserGroupsTable;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import AbstractTable from '../../tables/abstractTable';
|
|
2
|
+
export declare const rolesEnum: import("../../types/type").default<"user" | "guest" | "admin">;
|
|
3
|
+
export default class UsersTable extends AbstractTable<UsersTable> {
|
|
4
|
+
id: import("../..").Column<import("../../columns/types/pgSerial").default, true, true, this>;
|
|
5
|
+
fullName: import("../..").Column<import("../..").PgText, true, false, this>;
|
|
6
|
+
phone: import("../..").Column<import("../..").PgVarChar, true, false, this>;
|
|
7
|
+
media: import("../..").Column<import("../..").PgJsonb<string[]>, true, false, this>;
|
|
8
|
+
decimalField: import("../..").Column<import("../..").PgBigDecimal, false, false, this>;
|
|
9
|
+
bigIntField: import("../..").Column<import("../..").PgBigInt, true, true, this>;
|
|
10
|
+
createdAt: import("../..").Column<import("../..").PgTimestamp, false, false, this>;
|
|
11
|
+
createdAtWithTimezone: import("../..").Column<import("../../columns/types/pgTimestamptz").default, true, false, this>;
|
|
12
|
+
isArchived: import("../..").Column<import("../..").PgBoolean, true, false, this>;
|
|
13
|
+
phoneFullNameIndex: import("../../indexes/tableIndex").default;
|
|
14
|
+
phoneIndex: import("../../indexes/tableIndex").default;
|
|
15
|
+
tableName(): string;
|
|
16
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rolesEnum = void 0;
|
|
4
|
+
/* eslint-disable max-classes-per-file */
|
|
5
|
+
// import { Defaults } from '../../columns/column';
|
|
6
|
+
const abstractTable_1 = require("../../tables/abstractTable");
|
|
7
|
+
const type_1 = require("../../types/type");
|
|
8
|
+
// import { rolesEnum } from '../types/rolesType';
|
|
9
|
+
exports.rolesEnum = type_1.createEnum({ alias: 'test-enum', values: ['user', 'guest', 'admin'] });
|
|
10
|
+
class UsersTable extends abstractTable_1.default {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.id = this.serial('id').primaryKey();
|
|
14
|
+
this.fullName = this.text('full_name');
|
|
15
|
+
this.phone = this.varchar('phone', { size: 256 });
|
|
16
|
+
this.media = this.jsonb('media');
|
|
17
|
+
this.decimalField = this.decimal('test', { precision: 100, scale: 2 }).notNull();
|
|
18
|
+
this.bigIntField = this.bigint('test1', 'max_bytes_53');
|
|
19
|
+
// public role = this.type(rolesEnum, 'name_in_table', { notNull: true });
|
|
20
|
+
this.createdAt = this.timestamp('created_at').notNull();
|
|
21
|
+
this.createdAtWithTimezone = this.timestamptz('created_at_time_zone');
|
|
22
|
+
// public updatedAt = this.timestamp('updated_at').defaultValue(Defaults.CURRENT_TIMESTAMP);
|
|
23
|
+
this.isArchived = this.bool('is_archived').defaultValue(false);
|
|
24
|
+
this.phoneFullNameIndex = this.index([this.phone, this.fullName]);
|
|
25
|
+
this.phoneIndex = this.uniqueIndex(this.phone);
|
|
26
|
+
}
|
|
27
|
+
tableName() {
|
|
28
|
+
return 'users';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.default = UsersTable;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import AbstractTable from '../../tables/abstractTable';
|
|
2
|
+
export default class UsersToUserGroupsTable extends AbstractTable<UsersToUserGroupsTable> {
|
|
3
|
+
groupId: import("../..").Column<import("../..").PgInteger, true, false, this>;
|
|
4
|
+
userId: import("../..").Column<import("../..").PgInteger, true, false, this>;
|
|
5
|
+
manyToManyIndex: import("../../indexes/tableIndex").default;
|
|
6
|
+
tableName(): string;
|
|
7
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const abstractTable_1 = require("../../tables/abstractTable");
|
|
4
|
+
const userGroupsTable_1 = require("./userGroupsTable");
|
|
5
|
+
const usersTable_1 = require("./usersTable");
|
|
6
|
+
class UsersToUserGroupsTable extends abstractTable_1.default {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
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' });
|
|
11
|
+
this.manyToManyIndex = this.index([this.groupId, this.userId]);
|
|
12
|
+
}
|
|
13
|
+
tableName() {
|
|
14
|
+
return 'users_to_user_groups';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.default = UsersToUserGroupsTable;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const rolesEnum: import("../../types/type").default<"foo" | "bar" | "baz">;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rolesEnum = void 0;
|
|
4
|
+
const type_1 = require("../../types/type");
|
|
5
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
6
|
+
exports.rolesEnum = type_1.createEnum({ alias: 'test-enum', values: ['foo', 'bar', 'baz'] });
|
package/db/session.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Pool, QueryResult } from 'pg';
|
|
2
2
|
export declare abstract class ISession {
|
|
3
|
-
abstract execute(query: string): Promise<QueryResult<any>>;
|
|
3
|
+
abstract execute(query: string, values?: Array<any>): Promise<QueryResult<any>>;
|
|
4
4
|
}
|
|
5
5
|
export default class Session extends ISession {
|
|
6
6
|
private pool;
|
|
7
7
|
constructor(pool: Pool);
|
|
8
|
-
execute(query: string): Promise<QueryResult<any>>;
|
|
8
|
+
execute(query: string, values?: Array<any>): Promise<QueryResult<any>>;
|
|
9
9
|
}
|
package/db/session.js
CHANGED
|
@@ -3,22 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
4
4
|
const __1 = require("../..");
|
|
5
5
|
const builders_1 = require("../../builders");
|
|
6
|
+
const consoleLogger_1 = require("../../logger/consoleLogger");
|
|
6
7
|
const citiesTable_1 = require("../tables/citiesTable");
|
|
7
8
|
const userGroupsTable_1 = require("../tables/userGroupsTable");
|
|
8
9
|
const usersTable_1 = require("../tables/usersTable");
|
|
9
10
|
(async () => {
|
|
10
11
|
try {
|
|
11
12
|
const db = await new __1.DbConnector()
|
|
12
|
-
.connectionString('postgresql://postgres@127.0.0.1/
|
|
13
|
+
.connectionString('postgresql://postgres@127.0.0.1/migrator')
|
|
13
14
|
.connect();
|
|
15
|
+
db.useLogger(new consoleLogger_1.default());
|
|
14
16
|
const usersTable = new usersTable_1.default(db);
|
|
15
17
|
const citiesTable = new citiesTable_1.default(db);
|
|
16
18
|
const userGroupsTable = new userGroupsTable_1.default(db);
|
|
17
19
|
await usersTable.delete()
|
|
18
|
-
.where(builders_1.eq(usersTable.id,
|
|
20
|
+
.where(builders_1.eq(usersTable.id, 6))
|
|
19
21
|
.execute();
|
|
20
22
|
const deletedCities = await citiesTable.delete()
|
|
21
|
-
.where(builders_1.eq(citiesTable.id,
|
|
23
|
+
.where(builders_1.eq(citiesTable.id, 7))
|
|
22
24
|
.all();
|
|
23
25
|
const deletedUserGroup = await userGroupsTable.delete()
|
|
24
26
|
.where(builders_1.eq(userGroupsTable.id, 3))
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
4
|
-
const create_1 = require("../../builders/lowLvlBuilders/create");
|
|
5
3
|
const dbConnector_1 = require("../../db/dbConnector");
|
|
6
4
|
const consoleLogger_1 = require("../../logger/consoleLogger");
|
|
7
5
|
const citiesTable_1 = require("../tables/citiesTable");
|
|
@@ -10,19 +8,19 @@ const usersTable_1 = require("../tables/usersTable");
|
|
|
10
8
|
(async () => {
|
|
11
9
|
try {
|
|
12
10
|
const db = await new dbConnector_1.default()
|
|
13
|
-
.connectionString('postgresql://postgres@127.0.0.1/
|
|
11
|
+
.connectionString('postgresql://postgres@127.0.0.1/migrator')
|
|
14
12
|
.connect();
|
|
15
13
|
const usersTable = new usersTable_1.default(db);
|
|
16
14
|
const citiesTable = new citiesTable_1.default(db);
|
|
17
15
|
const userGroupsTable = new userGroupsTable_1.default(db);
|
|
18
|
-
await db.session().execute(
|
|
19
|
-
await db.session().execute(
|
|
20
|
-
await db.session().execute(
|
|
16
|
+
// await db.session().execute(Create.table(usersTable).build());
|
|
17
|
+
// await db.session().execute(Create.table(citiesTable).build());
|
|
18
|
+
// await db.session().execute(Create.table(userGroupsTable).build());
|
|
21
19
|
db.useLogger(new consoleLogger_1.default());
|
|
22
20
|
await usersTable.insert({
|
|
23
21
|
decimalField: 12.4,
|
|
24
22
|
createdAt: new Date(),
|
|
25
|
-
|
|
23
|
+
role: 'foo',
|
|
26
24
|
}).execute();
|
|
27
25
|
const insertedCities = await citiesTable.insert({
|
|
28
26
|
foundationDate: new Date(),
|
|
@@ -41,11 +39,11 @@ const usersTable_1 = require("../tables/usersTable");
|
|
|
41
39
|
const conflictInsertedUsers = await usersTable.insertMany([{
|
|
42
40
|
decimalField: 12.4,
|
|
43
41
|
createdAt: new Date(),
|
|
44
|
-
|
|
42
|
+
role: 'foo',
|
|
45
43
|
}, {
|
|
46
44
|
decimalField: 32.4,
|
|
47
45
|
createdAt: new Date(),
|
|
48
|
-
|
|
46
|
+
role: 'foo',
|
|
49
47
|
phone: '+1808',
|
|
50
48
|
}])
|
|
51
49
|
.onConflict((table) => table.phoneIndex, { isArchived: true }).all();
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
5
5
|
const __1 = require("../..");
|
|
6
6
|
const builders_1 = require("../../builders");
|
|
7
|
+
const consoleLogger_1 = require("../../logger/consoleLogger");
|
|
7
8
|
const citiesTable_1 = require("../tables/citiesTable");
|
|
8
9
|
const userGroupsTable_1 = require("../tables/userGroupsTable");
|
|
9
10
|
const usersTable_1 = require("../tables/usersTable");
|
|
@@ -12,24 +13,25 @@ const usersToUserGroups_1 = require("../tables/usersToUserGroups");
|
|
|
12
13
|
var _a, _b, _c, _d, _e, _f;
|
|
13
14
|
try {
|
|
14
15
|
const db = await new __1.DbConnector()
|
|
15
|
-
.connectionString('postgresql://postgres@127.0.0.1/
|
|
16
|
+
.connectionString('postgresql://postgres@127.0.0.1/migrator')
|
|
16
17
|
.connect();
|
|
18
|
+
db.useLogger(new consoleLogger_1.default());
|
|
17
19
|
const usersTable = new usersTable_1.default(db);
|
|
18
20
|
const citiesTable = new citiesTable_1.default(db);
|
|
19
21
|
const usersToUserGroupsTable = new usersToUserGroups_1.default(db);
|
|
20
22
|
const userGroupsTable = new userGroupsTable_1.default(db);
|
|
21
|
-
await db.session().execute(
|
|
22
|
-
await db.session().execute(
|
|
23
|
-
await db.session().execute(
|
|
24
|
-
await db.session().execute(
|
|
23
|
+
// await db.session().execute(Create.table(usersTable).build());
|
|
24
|
+
// await db.session().execute(Create.table(citiesTable).build());
|
|
25
|
+
// await db.session().execute(Create.table(userGroupsTable).build());
|
|
26
|
+
// await db.session().execute(Create.table(usersToUserGroupsTable).build());
|
|
25
27
|
const userRes = await usersTable.insertMany([{
|
|
26
28
|
decimalField: 4.2,
|
|
27
29
|
createdAt: new Date(),
|
|
28
|
-
|
|
30
|
+
role: 'foo',
|
|
29
31
|
}, {
|
|
30
32
|
decimalField: 5.8,
|
|
31
33
|
createdAt: new Date(),
|
|
32
|
-
|
|
34
|
+
role: 'foo',
|
|
33
35
|
}]).all();
|
|
34
36
|
const citiesRes = await citiesTable.insertMany([{
|
|
35
37
|
foundationDate: new Date(),
|
|
@@ -5,17 +5,19 @@ const __1 = require("../..");
|
|
|
5
5
|
const builders_1 = require("../../builders");
|
|
6
6
|
const order_1 = require("../../builders/highLvlBuilders/order");
|
|
7
7
|
const static_1 = require("../../builders/requestBuilders/where/static");
|
|
8
|
+
const consoleLogger_1 = require("../../logger/consoleLogger");
|
|
8
9
|
const usersTable_1 = require("../tables/usersTable");
|
|
9
10
|
(async () => {
|
|
10
11
|
try {
|
|
11
12
|
const db = await new __1.DbConnector()
|
|
12
|
-
.connectionString('postgresql://postgres@127.0.0.1/
|
|
13
|
+
.connectionString('postgresql://postgres@127.0.0.1/migrator')
|
|
13
14
|
.connect();
|
|
14
15
|
const usersTable = new usersTable_1.default(db);
|
|
16
|
+
db.useLogger(new consoleLogger_1.default());
|
|
15
17
|
// select all
|
|
16
18
|
const allSelect = await usersTable.select().all();
|
|
17
19
|
// select first
|
|
18
|
-
const firstSelect = await usersTable.select().
|
|
20
|
+
const firstSelect = await usersTable.select().all();
|
|
19
21
|
// select using filters
|
|
20
22
|
const eqSelect = await usersTable.select().where(builders_1.eq(usersTable.phone, 'hello')).all();
|
|
21
23
|
const andSelect = await usersTable.select().where(builders_1.and([builders_1.eq(usersTable.phone, 'hello')])).all();
|
|
@@ -3,14 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
4
4
|
const __1 = require("../..");
|
|
5
5
|
const builders_1 = require("../../builders");
|
|
6
|
+
const consoleLogger_1 = require("../../logger/consoleLogger");
|
|
6
7
|
const citiesTable_1 = require("../tables/citiesTable");
|
|
7
8
|
const userGroupsTable_1 = require("../tables/userGroupsTable");
|
|
8
9
|
const usersTable_1 = require("../tables/usersTable");
|
|
9
10
|
(async () => {
|
|
10
11
|
try {
|
|
11
12
|
const db = await new __1.DbConnector()
|
|
12
|
-
.connectionString('postgresql://postgres@127.0.0.1/
|
|
13
|
+
.connectionString('postgresql://postgres@127.0.0.1/migrator')
|
|
13
14
|
.connect();
|
|
15
|
+
db.useLogger(new consoleLogger_1.default());
|
|
14
16
|
const usersTable = new usersTable_1.default(db);
|
|
15
17
|
const citiesTable = new citiesTable_1.default(db);
|
|
16
18
|
const userGroupsTable = new userGroupsTable_1.default(db);
|
|
@@ -22,10 +24,11 @@ const usersTable_1 = require("../tables/usersTable");
|
|
|
22
24
|
.where(builders_1.eq(citiesTable.location, 'USA'))
|
|
23
25
|
.set({ metadata: { population: 1, connection: 'first' } })
|
|
24
26
|
.all();
|
|
27
|
+
console.log(updatedCities);
|
|
25
28
|
const updatedUserGroup = await userGroupsTable.update()
|
|
26
29
|
.where(builders_1.eq(userGroupsTable.id, 1))
|
|
27
30
|
.set({ description: 'updated description' })
|
|
28
|
-
.
|
|
31
|
+
.all();
|
|
29
32
|
}
|
|
30
33
|
catch (e) {
|
|
31
34
|
console.log(e);
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import AbstractTable from '../../tables/abstractTable';
|
|
2
|
-
export declare const rolesEnum: import("../../types/type").default<"
|
|
2
|
+
export declare const rolesEnum: import("../../types/type").default<"foo" | "bar" | "baz">;
|
|
3
3
|
export default class UsersTable extends AbstractTable<UsersTable> {
|
|
4
|
-
id: import("
|
|
5
|
-
fullName: import("
|
|
6
|
-
phone: import("
|
|
7
|
-
media: import("
|
|
8
|
-
decimalField: import("
|
|
9
|
-
bigIntField: import("
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
id: import("../../columns/column").Column<import("../../columns/types/pgSerial").default, true, true, this>;
|
|
5
|
+
fullName: import("../../columns/column").Column<import("../..").PgText, true, false, this>;
|
|
6
|
+
phone: import("../../columns/column").Column<import("../..").PgVarChar, true, false, this>;
|
|
7
|
+
media: import("../../columns/column").Column<import("../..").PgJsonb<string[]>, true, false, this>;
|
|
8
|
+
decimalField: import("../../columns/column").Column<import("../..").PgBigDecimal, false, false, this>;
|
|
9
|
+
bigIntField: import("../../columns/column").Column<import("../..").PgBigInt, true, true, this>;
|
|
10
|
+
role: import("../../columns/column").Column<import("../../columns/types/pgEnum").default<"foo" | "bar" | "baz">, false, false, this>;
|
|
11
|
+
createdAt: import("../../columns/column").Column<import("../..").PgTimestamp, false, false, this>;
|
|
12
|
+
updatedAt: import("../../columns/column").Column<import("../..").PgTimestamp, true, false, this>;
|
|
13
|
+
isArchived: import("../../columns/column").Column<import("../..").PgBoolean, true, false, this>;
|
|
13
14
|
phoneFullNameIndex: import("../../indexes/tableIndex").default;
|
|
14
15
|
phoneIndex: import("../../indexes/tableIndex").default;
|
|
15
16
|
tableName(): string;
|
|
@@ -3,10 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.rolesEnum = void 0;
|
|
4
4
|
/* eslint-disable max-classes-per-file */
|
|
5
5
|
// import { Defaults } from '../../columns/column';
|
|
6
|
+
const column_1 = require("../../columns/column");
|
|
6
7
|
const abstractTable_1 = require("../../tables/abstractTable");
|
|
7
8
|
const type_1 = require("../../types/type");
|
|
8
9
|
// import { rolesEnum } from '../types/rolesType';
|
|
9
|
-
exports.rolesEnum = type_1.createEnum({ alias: 'test-enum', values: ['
|
|
10
|
+
exports.rolesEnum = type_1.createEnum({ alias: 'test-enum', values: ['foo', 'bar', 'baz'] });
|
|
10
11
|
class UsersTable extends abstractTable_1.default {
|
|
11
12
|
constructor() {
|
|
12
13
|
super(...arguments);
|
|
@@ -16,10 +17,10 @@ class UsersTable extends abstractTable_1.default {
|
|
|
16
17
|
this.media = this.jsonb('media');
|
|
17
18
|
this.decimalField = this.decimal('test', { precision: 100, scale: 2 }).notNull();
|
|
18
19
|
this.bigIntField = this.bigint('test1', 'max_bytes_53');
|
|
19
|
-
|
|
20
|
+
this.role = this.type(exports.rolesEnum, 'name_in_table').notNull();
|
|
20
21
|
this.createdAt = this.timestamp('created_at').notNull();
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
// public createdAtWithTimezone = this.timestamptz('created_at');
|
|
23
|
+
this.updatedAt = this.timestamp('updated_at').defaultValue(column_1.Defaults.CURRENT_TIMESTAMP);
|
|
23
24
|
this.isArchived = this.bool('is_archived').defaultValue(false);
|
|
24
25
|
this.phoneFullNameIndex = this.index([this.phone, this.fullName]);
|
|
25
26
|
this.phoneIndex = this.uniqueIndex(this.phone);
|
|
@@ -13,7 +13,7 @@ QueryResponseMapper.map = (mappedServiceToDb, queryResult, joinId) => {
|
|
|
13
13
|
const column = mappedServiceToDb[key];
|
|
14
14
|
const alias = `${column.getAlias()}${joinId ? `_${joinId}` : ''}`;
|
|
15
15
|
const value = column.getColumnType().selectStrategy(row[alias]);
|
|
16
|
-
mappedRow[key] = value;
|
|
16
|
+
mappedRow[key] = value === null ? undefined : value;
|
|
17
17
|
});
|
|
18
18
|
response.push(mappedRow);
|
|
19
19
|
});
|
|
@@ -27,7 +27,7 @@ QueryResponseMapper.partialMap = (partial, queryResult, joinId) => {
|
|
|
27
27
|
const column = partial[key];
|
|
28
28
|
const alias = `${column.getAlias()}${joinId ? `_${joinId}` : ''}`;
|
|
29
29
|
const value = column.getColumnType().selectStrategy(row[alias]);
|
|
30
|
-
mappedRow[key] = value;
|
|
30
|
+
mappedRow[key] = value === null ? undefined : value;
|
|
31
31
|
});
|
|
32
32
|
response.push(mappedRow);
|
|
33
33
|
});
|
package/migrator/migrator.js
CHANGED
|
@@ -22,7 +22,7 @@ class Migrator {
|
|
|
22
22
|
const entry = split.trim().split(':');
|
|
23
23
|
const key = entry[0];
|
|
24
24
|
const value = entry[1].trim().replace(/['"]+/g, '');
|
|
25
|
-
if (key === '
|
|
25
|
+
if (key === 'migrationRootFolder') {
|
|
26
26
|
// proceed value
|
|
27
27
|
migrationFolderTo = value;
|
|
28
28
|
}
|
|
@@ -48,7 +48,15 @@ class Migrator {
|
|
|
48
48
|
const migrationFiles = fs.readdirSync(`${migrationFolderTo}/${migrationFolder}`);
|
|
49
49
|
const migrationFile = migrationFiles.filter((file) => file === 'migration.sql')[0];
|
|
50
50
|
const query = fs.readFileSync(`${migrationFolderTo}/${migrationFolder}/${migrationFile}`).toString();
|
|
51
|
-
const
|
|
51
|
+
const year = Number(migrationFolder.slice(0, 4));
|
|
52
|
+
// second param for Date() is month index, that started from 0, so we need
|
|
53
|
+
// to decrement a value for month
|
|
54
|
+
const month = Number(migrationFolder.slice(4, 6)) - 1;
|
|
55
|
+
const day = Number(migrationFolder.slice(6, 8));
|
|
56
|
+
const hour = Number(migrationFolder.slice(8, 10));
|
|
57
|
+
const min = Number(migrationFolder.slice(10, 12));
|
|
58
|
+
const sec = Number(migrationFolder.slice(12, 14));
|
|
59
|
+
const folderAsMillis = new Date(year, month, day, hour, min, sec).getTime();
|
|
52
60
|
if (!lastDbMigration || lastDbMigration.createdAt < folderAsMillis) {
|
|
53
61
|
await this.db.session().execute(query);
|
|
54
62
|
await migrationTable.insert({
|
package/package.json
CHANGED
|
@@ -19,6 +19,7 @@ import { AbstractColumn, Column } from '../columns/column';
|
|
|
19
19
|
import TableIndex from '../indexes/tableIndex';
|
|
20
20
|
import { ExtractModel } from './inferTypes';
|
|
21
21
|
import Enum, { ExtractEnumValues } from '../types/type';
|
|
22
|
+
import PgSmallInt from '../columns/types/pgSmallInt';
|
|
22
23
|
import PgSerial from '../columns/types/pgSerial';
|
|
23
24
|
import PgTimestamptz from '../columns/types/pgTimestamptz';
|
|
24
25
|
import PgBigSerial53, { PgBigSerial64 } from '../columns/types/pgBigSerial';
|
|
@@ -47,7 +48,7 @@ export default abstract class AbstractTable<TTable extends AbstractTable<TTable>
|
|
|
47
48
|
size?: number;
|
|
48
49
|
}): Column<PgVarChar, true, false, this>;
|
|
49
50
|
protected int(name: string): Column<PgInteger, true, false, this>;
|
|
50
|
-
protected smallInt(name: string): Column<
|
|
51
|
+
protected smallInt(name: string): Column<PgSmallInt, true, false, this>;
|
|
51
52
|
protected serial(name: string): Column<PgSerial, true, true, this>;
|
|
52
53
|
protected bigSerial(name: string, maxBytes: 'max_bytes_53'): Column<PgBigSerial53, true, true, this>;
|
|
53
54
|
protected bigSerial(name: string, maxBytes: 'max_bytes_64'): Column<PgBigSerial64, true, true, this>;
|
package/test.js
CHANGED
|
@@ -3,9 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const _1 = require(".");
|
|
4
4
|
const citiesTable_1 = require("./docs/tables/citiesTable");
|
|
5
5
|
const usersTable_1 = require("./docs/tables/usersTable");
|
|
6
|
-
const usersToUserGroups_1 = require("./docs/tables/usersToUserGroups");
|
|
7
6
|
const consoleLogger_1 = require("./logger/consoleLogger");
|
|
8
|
-
const serializer_1 = require("./serializer/serializer");
|
|
9
7
|
// import { Pool } from 'pg';
|
|
10
8
|
// import { DB } from '.';
|
|
11
9
|
// import { DB, DbConnector } from '.';
|
|
@@ -23,21 +21,118 @@ const fromTypeFile = (filepath) => {
|
|
|
23
21
|
(async () => {
|
|
24
22
|
try {
|
|
25
23
|
const db = await new _1.DbConnector()
|
|
26
|
-
.connectionString('postgresql://postgres@127.0.0.1/
|
|
24
|
+
.connectionString('postgresql://postgres@127.0.0.1/drizzle-docs')
|
|
27
25
|
.connect();
|
|
28
26
|
db.useLogger(new consoleLogger_1.default());
|
|
29
27
|
const table = new usersTable_1.default(db);
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
const citiesTable = new citiesTable_1.default(db);
|
|
29
|
+
// const res = await table.insert({
|
|
30
|
+
// decimalField: 12.4,
|
|
31
|
+
// createdAt: new Date(),
|
|
32
|
+
// }).all();
|
|
33
|
+
// console.log(res);
|
|
34
|
+
const res1 = await citiesTable.select().leftJoin(usersTable_1.default, (cities) => cities.userId, (users) => users.id).execute();
|
|
35
|
+
// const res: QueryResult<any> = await db.session().execute('SELECT * FROM users');
|
|
36
|
+
// eslint-disable-next-line array-callback-return
|
|
37
|
+
res1.map((city, user) => {
|
|
38
|
+
console.log(city);
|
|
39
|
+
console.log(user.decimalField);
|
|
40
|
+
});
|
|
41
|
+
// const res = await db.session().execute('SELECT * FROM users WHERE user.id = $1', [1]);
|
|
42
|
+
// await table.update()
|
|
43
|
+
// .where({
|
|
44
|
+
// id: eq(1),
|
|
45
|
+
// })
|
|
46
|
+
// .set({
|
|
47
|
+
// phone: 'hello'
|
|
48
|
+
// })
|
|
49
|
+
// .all();
|
|
50
|
+
// await table.select()
|
|
51
|
+
// .where({
|
|
52
|
+
// and: {
|
|
53
|
+
// id: {
|
|
54
|
+
// eq: 1,
|
|
55
|
+
// },
|
|
56
|
+
// phone: {
|
|
57
|
+
// notEq: 'hello',
|
|
58
|
+
// },
|
|
59
|
+
// },
|
|
60
|
+
// })
|
|
61
|
+
// .all();
|
|
62
|
+
// await table.select()
|
|
63
|
+
// .where({
|
|
64
|
+
// and: {
|
|
65
|
+
// id: eq(1),
|
|
66
|
+
// phone: notEq('hello'),
|
|
67
|
+
// },
|
|
68
|
+
// })
|
|
69
|
+
// .all();
|
|
70
|
+
// await table.select()
|
|
71
|
+
// .where(and([
|
|
72
|
+
// eq(table.id, 1),
|
|
73
|
+
// notEq(table.phone, 'hello'),
|
|
74
|
+
// ]))
|
|
75
|
+
// .all();
|
|
76
|
+
// await table.insertMany([{
|
|
77
|
+
// decimalField: 12.4,
|
|
78
|
+
// createdAt: new Date(),
|
|
79
|
+
// role: 'foo',
|
|
80
|
+
// },
|
|
81
|
+
// {
|
|
82
|
+
// decimalField: 13.4,
|
|
83
|
+
// createdAt: new Date(),
|
|
84
|
+
// role: 'foo',
|
|
85
|
+
// }]).all();
|
|
86
|
+
// const d = await table.update().where(and([
|
|
87
|
+
// or([
|
|
88
|
+
// notEq(table.id, 1),
|
|
89
|
+
// eq(table.bigIntField, 1)]),
|
|
90
|
+
// or([notEq(table.id, 2),
|
|
91
|
+
// eq(table.bigIntField, 1),
|
|
92
|
+
// and([notEq(table.id, 1),
|
|
93
|
+
// eq(table.isArchived, true),
|
|
94
|
+
// ]),
|
|
95
|
+
// ])])).set({
|
|
96
|
+
// // phone: 'updated',
|
|
97
|
+
// bigIntField: 1,
|
|
98
|
+
// decimalField: 1.2,
|
|
99
|
+
// }).all();
|
|
100
|
+
// console.log(d);
|
|
101
|
+
// await table.delete().where(eq(table.id, 4)).all();
|
|
102
|
+
// const cities = new CitiesTable(db);
|
|
103
|
+
// const d = new UsersToUserGroupsTable(db);
|
|
104
|
+
// SELECT * FROM users WHERE id = $1 and name = $2
|
|
105
|
+
// const res = notEq(table.id, 1).toQuery();
|
|
106
|
+
// const res1 = and([notEq(table.id, 1), like(table.phone, 'phone')]).toQuery();
|
|
107
|
+
// const res2 = and([
|
|
108
|
+
// or([
|
|
109
|
+
// notEq(table.id, 1),
|
|
110
|
+
// like(table.phone, 'phone')]),
|
|
111
|
+
// or([notEq(table.id, 2),
|
|
112
|
+
// like(table.phone, 'phone2'),
|
|
113
|
+
// and([notEq(table.id, 1),
|
|
114
|
+
// eq(table.isArchived, true),
|
|
115
|
+
// ]),
|
|
116
|
+
// ]),
|
|
117
|
+
// ]).toQuery();
|
|
118
|
+
// const res3 = and([notEq(table.id, 2),
|
|
119
|
+
// like(table.phone, 'phone2'),
|
|
120
|
+
// or([
|
|
121
|
+
// notEq(table.id, 1),
|
|
122
|
+
// like(table.phone, 'phone')]),
|
|
123
|
+
// ]).toQuery();
|
|
124
|
+
// // console.log(res);
|
|
125
|
+
// console.log(res2);
|
|
126
|
+
// console.log(res3);
|
|
127
|
+
// const serializer = new MigrationSerializer();
|
|
128
|
+
// const res = serializer.generate([table], []);
|
|
129
|
+
// console.log(JSON.stringify(res, null, 2));
|
|
35
130
|
// fs.writeFileSync('introspected.json', JSON.stringify(res, null, 2), 'utf8');
|
|
36
131
|
// const ser = new MigrationSerializer();
|
|
37
132
|
// const d = db.create(UsersTable) as unknown as AbstractTable<any>;
|
|
38
133
|
// const f = ser.generate([d], []);
|
|
39
134
|
// console.log(JSON.stringify(f, null, 2));
|
|
40
|
-
// await drizzle.migrator(db).
|
|
135
|
+
// await drizzle.migrator(db).smigrate('drizzle.config.yml');
|
|
41
136
|
// await drizzle.migrator(db).migrate({ migrationFolder: 'drizzle' });
|
|
42
137
|
// const typesFileNames = fs.readdirSync('/Users/andrewsherman/IdeaProjects/datalayer-orm/src/examples/types');
|
|
43
138
|
// typesFileNames.forEach((filename) => {
|