drizzle-orm 0.9.9 → 0.9.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.
- package/builders/highLvlBuilders/abstractRequestBuilder.d.ts +3 -3
- package/builders/highLvlBuilders/deleteRequestBuilder.d.ts +2 -2
- package/builders/highLvlBuilders/deleteRequestBuilder.js +1 -8
- package/builders/highLvlBuilders/insertRequestBuilder.d.ts +2 -2
- package/builders/highLvlBuilders/insertRequestBuilder.js +1 -8
- package/builders/highLvlBuilders/selectRequestBuilder.d.ts +2 -2
- package/builders/highLvlBuilders/selectRequestBuilder.js +1 -8
- package/builders/highLvlBuilders/updateRequestBuilder.d.ts +2 -2
- package/builders/highLvlBuilders/updateRequestBuilder.js +1 -8
- package/builders/joinBuilders/builders/abstractJoinBuilder.d.ts +3 -3
- package/builders/joinBuilders/builders/abstractJoinBuilder.js +1 -8
- package/builders/joinBuilders/builders/selectWithFiveJoins.d.ts +2 -2
- package/builders/joinBuilders/builders/selectWithFourJoins.d.ts +2 -2
- package/builders/joinBuilders/builders/selectWithJoin.d.ts +2 -2
- package/builders/joinBuilders/builders/selectWithThreeJoins.d.ts +2 -2
- package/builders/joinBuilders/builders/selectWithTwoJoins.d.ts +2 -2
- package/builders/transaction/transaction.d.ts +2 -2
- package/columns/types/columnType.d.ts +1 -1
- package/columns/types/pgBigDecimal.d.ts +1 -1
- package/columns/types/pgBigDecimal.js +1 -1
- package/columns/types/pgBigInt.d.ts +1 -1
- package/columns/types/pgBigInt.js +1 -1
- package/columns/types/pgInteger.d.ts +1 -1
- package/columns/types/pgInteger.js +1 -1
- package/columns/types/pgSmallInt.d.ts +8 -0
- package/columns/types/pgSmallInt.js +15 -0
- package/db/db.d.ts +6 -7
- package/db/db.js +2 -3
- package/db/dbConnector.js +2 -1
- package/db/dbStringConnector.js +2 -1
- package/db/session.d.ts +5 -3
- package/db/session.js +9 -13
- package/docs/cases/simple_insert.js +3 -3
- package/docs/cases/simple_join.js +2 -2
- package/docs/tables/usersTable.d.ts +0 -1
- package/docs/tables/usersTable.js +1 -1
- package/index.d.ts +0 -4
- package/index.js +0 -8
- package/migrator/migrator.js +7 -13
- package/package.json +1 -1
- package/tables/abstractTable.d.ts +6 -0
- package/tables/abstractTable.js +5 -0
- package/tables/index.d.ts +1 -0
- package/test.js +30 -7
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { AbstractColumn } from '../../columns/column';
|
|
2
2
|
import ColumnType from '../../columns/types/columnType';
|
|
3
|
-
import
|
|
3
|
+
import { ISession } from '../../db/session';
|
|
4
4
|
import BaseLogger from '../../logger/abstractLogger';
|
|
5
5
|
import { AbstractTable } from '../../tables';
|
|
6
6
|
import { ExtractModel } from '../../tables/inferTypes';
|
|
7
7
|
export default abstract class TableRequestBuilder<TTable extends AbstractTable<TTable>> {
|
|
8
8
|
protected _table: TTable;
|
|
9
|
-
protected _session:
|
|
9
|
+
protected _session: ISession;
|
|
10
10
|
protected _mappedServiceToDb: {
|
|
11
11
|
[name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
|
|
12
12
|
};
|
|
13
13
|
protected _columns: AbstractColumn<ColumnType>[];
|
|
14
14
|
protected _logger?: BaseLogger;
|
|
15
|
-
constructor(table: AbstractTable<TTable>, session:
|
|
15
|
+
constructor(table: AbstractTable<TTable>, session: ISession, mappedServiceToDb: {
|
|
16
16
|
[name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
|
|
17
17
|
}, logger?: BaseLogger);
|
|
18
18
|
all: () => Promise<Array<ExtractModel<TTable> | undefined>>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AbstractColumn } from '../../columns/column';
|
|
2
2
|
import ColumnType from '../../columns/types/columnType';
|
|
3
|
-
import
|
|
3
|
+
import { ISession } from '../../db/session';
|
|
4
4
|
import BaseLogger from '../../logger/abstractLogger';
|
|
5
5
|
import { AbstractTable } from '../../tables';
|
|
6
6
|
import { ExtractModel } from '../../tables/inferTypes';
|
|
@@ -8,7 +8,7 @@ import Expr from '../requestBuilders/where/where';
|
|
|
8
8
|
import TableRequestBuilder from './abstractRequestBuilder';
|
|
9
9
|
export default class DeleteTRB<TTable extends AbstractTable<TTable>> extends TableRequestBuilder<TTable> {
|
|
10
10
|
private _filter;
|
|
11
|
-
constructor(table: AbstractTable<TTable>, session:
|
|
11
|
+
constructor(table: AbstractTable<TTable>, session: ISession, mappedServiceToDb: {
|
|
12
12
|
[name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
|
|
13
13
|
}, logger?: BaseLogger);
|
|
14
14
|
where: (expr: Expr) => DeleteTRB<TTable>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const builderError_1 = require("../../errors/builderError");
|
|
4
|
-
const dbErrors_1 = require("../../errors/dbErrors");
|
|
5
4
|
const responseMapper_1 = require("../../mappers/responseMapper");
|
|
6
5
|
const delete_1 = require("../lowLvlBuilders/delets/delete");
|
|
7
6
|
const abstractRequestBuilder_1 = require("./abstractRequestBuilder");
|
|
@@ -30,13 +29,7 @@ class DeleteTRB extends abstractRequestBuilder_1.default {
|
|
|
30
29
|
this._logger.info(`Deleting from ${this._table.tableName()} using query:\n ${query}`);
|
|
31
30
|
}
|
|
32
31
|
const result = await this._session.execute(query);
|
|
33
|
-
|
|
34
|
-
const { reason } = result.value;
|
|
35
|
-
throw new dbErrors_1.DatabaseDeleteError(this._table.tableName(), reason, query);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
return responseMapper_1.default.map(this._mappedServiceToDb, result.value);
|
|
39
|
-
}
|
|
32
|
+
return responseMapper_1.default.map(this._mappedServiceToDb, result);
|
|
40
33
|
};
|
|
41
34
|
}
|
|
42
35
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AbstractColumn } from '../../columns/column';
|
|
2
2
|
import ColumnType from '../../columns/types/columnType';
|
|
3
|
-
import
|
|
3
|
+
import { ISession } from '../../db/session';
|
|
4
4
|
import BaseLogger from '../../logger/abstractLogger';
|
|
5
5
|
import { AbstractTable } from '../../tables';
|
|
6
6
|
import { ExtractModel, Indexing } from '../../tables/inferTypes';
|
|
@@ -9,7 +9,7 @@ export default class InsertTRB<TTable extends AbstractTable<TTable>> extends Tab
|
|
|
9
9
|
private _values;
|
|
10
10
|
private _onConflict;
|
|
11
11
|
private _onConflictField;
|
|
12
|
-
constructor(values: ExtractModel<TTable>[], session:
|
|
12
|
+
constructor(values: ExtractModel<TTable>[], session: ISession, mappedServiceToDb: {
|
|
13
13
|
[name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
|
|
14
14
|
}, table: AbstractTable<TTable>, logger?: BaseLogger);
|
|
15
15
|
execute: () => Promise<void>;
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const __1 = require("..");
|
|
4
4
|
const builderError_1 = require("../../errors/builderError");
|
|
5
|
-
const dbErrors_1 = require("../../errors/dbErrors");
|
|
6
5
|
const responseMapper_1 = require("../../mappers/responseMapper");
|
|
7
6
|
const insert_1 = require("../lowLvlBuilders/inserts/insert");
|
|
8
7
|
const abstractRequestBuilder_1 = require("./abstractRequestBuilder");
|
|
@@ -40,13 +39,7 @@ class InsertTRB extends abstractRequestBuilder_1.default {
|
|
|
40
39
|
this._logger.info(`Inserting to ${this._table.tableName()} using query:\n ${query}`);
|
|
41
40
|
}
|
|
42
41
|
const result = await this._session.execute(query);
|
|
43
|
-
|
|
44
|
-
const { reason } = result.value;
|
|
45
|
-
throw new dbErrors_1.DatabaseInsertError(this._table.tableName(), reason, query);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
return responseMapper_1.default.map(this._mappedServiceToDb, result.value);
|
|
49
|
-
}
|
|
42
|
+
return responseMapper_1.default.map(this._mappedServiceToDb, result);
|
|
50
43
|
};
|
|
51
44
|
this._values = values;
|
|
52
45
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AbstractColumn } from '../../columns/column';
|
|
2
2
|
import ColumnType from '../../columns/types/columnType';
|
|
3
3
|
import DB from '../../db/db';
|
|
4
|
-
import
|
|
4
|
+
import { ISession } from '../../db/session';
|
|
5
5
|
import BaseLogger from '../../logger/abstractLogger';
|
|
6
6
|
import { AbstractTable } from '../../tables';
|
|
7
7
|
import { ExtractModel } from '../../tables/inferTypes';
|
|
@@ -16,7 +16,7 @@ export default class SelectTRB<TTable extends AbstractTable<TTable>> extends Tab
|
|
|
16
16
|
private __groupBy?;
|
|
17
17
|
private __order?;
|
|
18
18
|
private __distinct;
|
|
19
|
-
constructor(session:
|
|
19
|
+
constructor(session: ISession, mappedServiceToDb: {
|
|
20
20
|
[name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
|
|
21
21
|
}, props: {
|
|
22
22
|
limit?: number;
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
/* eslint-disable import/no-cycle */
|
|
4
4
|
const __1 = require("..");
|
|
5
5
|
const builderError_1 = require("../../errors/builderError");
|
|
6
|
-
const dbErrors_1 = require("../../errors/dbErrors");
|
|
7
6
|
const responseMapper_1 = require("../../mappers/responseMapper");
|
|
8
7
|
const selectWithJoin_1 = require("../joinBuilders/builders/selectWithJoin");
|
|
9
8
|
const join_1 = require("../joinBuilders/join");
|
|
@@ -43,13 +42,7 @@ class SelectTRB extends abstractRequestBuilder_1.default {
|
|
|
43
42
|
this._logger.info(`Selecting from ${this._table.tableName()} using query:\n ${query}`);
|
|
44
43
|
}
|
|
45
44
|
const result = await this._session.execute(query);
|
|
46
|
-
|
|
47
|
-
const { reason } = result.value;
|
|
48
|
-
throw new dbErrors_1.DatabaseSelectError(this._table.tableName(), reason, query);
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
return responseMapper_1.default.map(this._mappedServiceToDb, result.value);
|
|
52
|
-
}
|
|
45
|
+
return responseMapper_1.default.map(this._mappedServiceToDb, result);
|
|
53
46
|
};
|
|
54
47
|
this.props = props;
|
|
55
48
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AbstractColumn } from '../../columns/column';
|
|
2
2
|
import ColumnType from '../../columns/types/columnType';
|
|
3
|
-
import
|
|
3
|
+
import { ISession } from '../../db/session';
|
|
4
4
|
import BaseLogger from '../../logger/abstractLogger';
|
|
5
5
|
import { AbstractTable } from '../../tables';
|
|
6
6
|
import { ExtractModel, ExtractUpdateModel } from '../../tables/inferTypes';
|
|
@@ -10,7 +10,7 @@ export default class UpdateTRB<TTable extends AbstractTable<TTable>> extends Tab
|
|
|
10
10
|
private _filter;
|
|
11
11
|
private _update;
|
|
12
12
|
private _objToUpdate;
|
|
13
|
-
constructor(table: AbstractTable<TTable>, session:
|
|
13
|
+
constructor(table: AbstractTable<TTable>, session: ISession, mappedServiceToDb: {
|
|
14
14
|
[name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
|
|
15
15
|
}, logger?: BaseLogger);
|
|
16
16
|
where: (expr: Expr) => UpdateTRB<TTable>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const builderError_1 = require("../../errors/builderError");
|
|
4
|
-
const dbErrors_1 = require("../../errors/dbErrors");
|
|
5
4
|
const responseMapper_1 = require("../../mappers/responseMapper");
|
|
6
5
|
const update_1 = require("../lowLvlBuilders/updates/update");
|
|
7
6
|
const static_1 = require("../requestBuilders/updates/static");
|
|
@@ -48,13 +47,7 @@ class UpdateTRB extends abstractRequestBuilder_1.default {
|
|
|
48
47
|
this._logger.info(`Updating ${this._table.tableName()} using query:\n ${query}`);
|
|
49
48
|
}
|
|
50
49
|
const result = await this._session.execute(query);
|
|
51
|
-
|
|
52
|
-
const { reason } = result.value;
|
|
53
|
-
throw new dbErrors_1.DatabaseUpdateError(this._table.tableName(), reason, query);
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
return responseMapper_1.default.map(this._mappedServiceToDb, result.value);
|
|
57
|
-
}
|
|
50
|
+
return responseMapper_1.default.map(this._mappedServiceToDb, result);
|
|
58
51
|
};
|
|
59
52
|
}
|
|
60
53
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { QueryResult } from 'pg';
|
|
2
2
|
import { AbstractColumn } from '../../../columns/column';
|
|
3
3
|
import ColumnType from '../../../columns/types/columnType';
|
|
4
|
-
import
|
|
4
|
+
import { ISession } from '../../../db/session';
|
|
5
5
|
import { AbstractTable } from '../../../tables';
|
|
6
6
|
import Order from '../../highLvlBuilders/order';
|
|
7
7
|
import Expr from '../../requestBuilders/where/where';
|
|
8
8
|
import Join from '../join';
|
|
9
9
|
export default abstract class AbstractJoined<TTable extends AbstractTable<TTable>, TRes> {
|
|
10
10
|
protected _table: TTable;
|
|
11
|
-
protected _session:
|
|
11
|
+
protected _session: ISession;
|
|
12
12
|
protected _filter: Expr;
|
|
13
13
|
protected _distinct?: AbstractColumn<ColumnType, boolean, boolean>;
|
|
14
14
|
protected _props: {
|
|
@@ -17,7 +17,7 @@ export default abstract class AbstractJoined<TTable extends AbstractTable<TTable
|
|
|
17
17
|
};
|
|
18
18
|
protected _orderBy?: AbstractColumn<ColumnType, boolean, boolean>;
|
|
19
19
|
protected _order?: Order;
|
|
20
|
-
constructor(table: TTable, filter: Expr, session:
|
|
20
|
+
constructor(table: TTable, filter: Expr, session: ISession, props: {
|
|
21
21
|
limit?: number;
|
|
22
22
|
offset?: number;
|
|
23
23
|
}, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const builderError_1 = require("../../../errors/builderError");
|
|
4
|
-
const dbErrors_1 = require("../../../errors/dbErrors");
|
|
5
4
|
const select_1 = require("../../lowLvlBuilders/selects/select");
|
|
6
5
|
class AbstractJoined {
|
|
7
6
|
constructor(table, filter, session, props, orderBy, order, distinct) {
|
|
@@ -22,13 +21,7 @@ class AbstractJoined {
|
|
|
22
21
|
throw new builderError_1.default(builderError_1.BuilderType.JOINED_SELECT, this._table.tableName(), Object.values(this._table.mapServiceToDb()), e, this._filter);
|
|
23
22
|
}
|
|
24
23
|
const result = await this._session.execute(query);
|
|
25
|
-
|
|
26
|
-
const { reason } = result.value;
|
|
27
|
-
throw new dbErrors_1.DatabaseSelectError(this._table.tableName(), reason, query);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
return this.mapResponse(result.value);
|
|
31
|
-
}
|
|
24
|
+
return this.mapResponse(result);
|
|
32
25
|
};
|
|
33
26
|
this._table = table;
|
|
34
27
|
this._session = session;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { QueryResult } from 'pg';
|
|
2
2
|
import { AbstractColumn } from '../../../columns/column';
|
|
3
3
|
import ColumnType from '../../../columns/types/columnType';
|
|
4
|
-
import
|
|
4
|
+
import { ISession } from '../../../db/session';
|
|
5
5
|
import { AbstractTable } from '../../../tables';
|
|
6
6
|
import Order from '../../highLvlBuilders/order';
|
|
7
7
|
import Expr from '../../requestBuilders/where/where';
|
|
@@ -14,7 +14,7 @@ export default class SelectTRBWithFiveJoins<TTable extends AbstractTable<TTable>
|
|
|
14
14
|
private _join3;
|
|
15
15
|
private _join4;
|
|
16
16
|
private _join5;
|
|
17
|
-
constructor(table: TTable, session:
|
|
17
|
+
constructor(table: TTable, session: ISession, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, join3: Join<TTable3>, join4: Join<TTable4>, join5: Join<TTable5>, props: {
|
|
18
18
|
limit?: number;
|
|
19
19
|
offset?: number;
|
|
20
20
|
}, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
|
|
@@ -2,7 +2,7 @@ import { QueryResult } from 'pg';
|
|
|
2
2
|
import { AbstractColumn } from '../../../columns/column';
|
|
3
3
|
import ColumnType from '../../../columns/types/columnType';
|
|
4
4
|
import DB from '../../../db/db';
|
|
5
|
-
import
|
|
5
|
+
import { ISession } from '../../../db/session';
|
|
6
6
|
import { AbstractTable } from '../../../tables';
|
|
7
7
|
import Order from '../../highLvlBuilders/order';
|
|
8
8
|
import Expr from '../../requestBuilders/where/where';
|
|
@@ -15,7 +15,7 @@ export default class SelectTRBWithFourJoins<TTable extends AbstractTable<TTable>
|
|
|
15
15
|
private _join2;
|
|
16
16
|
private _join3;
|
|
17
17
|
private _join4;
|
|
18
|
-
constructor(table: TTable, session:
|
|
18
|
+
constructor(table: TTable, session: ISession, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, join3: Join<TTable3>, join4: Join<TTable4>, props: {
|
|
19
19
|
limit?: number;
|
|
20
20
|
offset?: number;
|
|
21
21
|
}, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
|
|
@@ -2,7 +2,7 @@ import { QueryResult } from 'pg';
|
|
|
2
2
|
import { AbstractColumn } from '../../../columns/column';
|
|
3
3
|
import ColumnType from '../../../columns/types/columnType';
|
|
4
4
|
import DB from '../../../db/db';
|
|
5
|
-
import
|
|
5
|
+
import { ISession } from '../../../db/session';
|
|
6
6
|
import AbstractTable from '../../../tables/abstractTable';
|
|
7
7
|
import Order from '../../highLvlBuilders/order';
|
|
8
8
|
import Expr from '../../requestBuilders/where/where';
|
|
@@ -12,7 +12,7 @@ import AbstractJoined from './abstractJoinBuilder';
|
|
|
12
12
|
import SelectTRBWithTwoJoins from './selectWithTwoJoins';
|
|
13
13
|
export default class SelectTRBWithJoin<TTable extends AbstractTable<TTable>, TTable1> extends AbstractJoined<TTable, SelectResponseJoin<TTable, TTable1>> {
|
|
14
14
|
private _join;
|
|
15
|
-
constructor(table: TTable, session:
|
|
15
|
+
constructor(table: TTable, session: ISession, filter: Expr, join: Join<TTable1>, props: {
|
|
16
16
|
limit?: number;
|
|
17
17
|
offset?: number;
|
|
18
18
|
}, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
|
|
@@ -2,7 +2,7 @@ import { QueryResult } from 'pg';
|
|
|
2
2
|
import { AbstractColumn } from '../../../columns/column';
|
|
3
3
|
import ColumnType from '../../../columns/types/columnType';
|
|
4
4
|
import DB from '../../../db/db';
|
|
5
|
-
import
|
|
5
|
+
import { ISession } from '../../../db/session';
|
|
6
6
|
import AbstractTable from '../../../tables/abstractTable';
|
|
7
7
|
import Order from '../../highLvlBuilders/order';
|
|
8
8
|
import Expr from '../../requestBuilders/where/where';
|
|
@@ -14,7 +14,7 @@ export default class SelectTRBWithThreeJoins<TTable extends AbstractTable<TTable
|
|
|
14
14
|
private _join1;
|
|
15
15
|
private _join2;
|
|
16
16
|
private _join3;
|
|
17
|
-
constructor(table: TTable, session:
|
|
17
|
+
constructor(table: TTable, session: ISession, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, join3: Join<TTable3>, props: {
|
|
18
18
|
limit?: number;
|
|
19
19
|
offset?: number;
|
|
20
20
|
}, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
|
|
@@ -2,7 +2,7 @@ import { QueryResult } from 'pg';
|
|
|
2
2
|
import { AbstractColumn } from '../../../columns/column';
|
|
3
3
|
import ColumnType from '../../../columns/types/columnType';
|
|
4
4
|
import DB from '../../../db/db';
|
|
5
|
-
import
|
|
5
|
+
import { ISession } from '../../../db/session';
|
|
6
6
|
import AbstractTable from '../../../tables/abstractTable';
|
|
7
7
|
import Order from '../../highLvlBuilders/order';
|
|
8
8
|
import Expr from '../../requestBuilders/where/where';
|
|
@@ -13,7 +13,7 @@ import SelectTRBWithThreeJoins from './selectWithThreeJoins';
|
|
|
13
13
|
export default class SelectTRBWithTwoJoins<TTable extends AbstractTable<TTable>, TTable1, TTable2> extends AbstractJoined<TTable, SelectResponseTwoJoins<TTable, TTable1, TTable2>> {
|
|
14
14
|
private _join1;
|
|
15
15
|
private _join2;
|
|
16
|
-
constructor(table: TTable, session:
|
|
16
|
+
constructor(table: TTable, session: ISession, filter: Expr, join1: Join<TTable1>, join2: Join<TTable2>, props: {
|
|
17
17
|
limit?: number;
|
|
18
18
|
offset?: number;
|
|
19
19
|
}, orderBy?: AbstractColumn<ColumnType, boolean, boolean>, order?: Order, distinct?: AbstractColumn<ColumnType, boolean, boolean>);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ISession } from '../../db/session';
|
|
2
2
|
export default class Transaction {
|
|
3
3
|
private session;
|
|
4
|
-
constructor(session:
|
|
4
|
+
constructor(session: ISession);
|
|
5
5
|
begin: () => Promise<Transaction>;
|
|
6
6
|
commit: () => Promise<Transaction>;
|
|
7
7
|
rollback: () => Promise<Transaction>;
|
|
@@ -3,5 +3,5 @@ export default abstract class ColumnType<TCodeType = {}> {
|
|
|
3
3
|
protected abstract dbName: string;
|
|
4
4
|
abstract getDbName(): string;
|
|
5
5
|
abstract insertStrategy(value: TCodeType): string;
|
|
6
|
-
abstract selectStrategy(value: any): TCodeType;
|
|
6
|
+
abstract selectStrategy(value: any): TCodeType | undefined;
|
|
7
7
|
}
|
|
@@ -6,5 +6,5 @@ export default class PgBigDecimal extends ColumnType<number> {
|
|
|
6
6
|
constructor(precision?: number, scale?: number);
|
|
7
7
|
getDbName: () => string;
|
|
8
8
|
insertStrategy: (value: number) => string;
|
|
9
|
-
selectStrategy(value: string): number;
|
|
9
|
+
selectStrategy(value: string): number | undefined;
|
|
10
10
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const columnType_1 = require("./columnType");
|
|
4
|
+
class PgSmallInt extends columnType_1.default {
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
this.getDbName = () => this.dbName;
|
|
8
|
+
this.insertStrategy = (value) => `${value}`;
|
|
9
|
+
this.dbName = 'SMALLINT';
|
|
10
|
+
}
|
|
11
|
+
selectStrategy(value) {
|
|
12
|
+
return value ? parseInt(value, 10) : undefined;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.default = PgSmallInt;
|
package/db/db.d.ts
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
import { Pool } from 'pg';
|
|
2
1
|
import BaseLogger from '../logger/abstractLogger';
|
|
3
2
|
import { AbstractTable } from '../tables';
|
|
4
|
-
import
|
|
3
|
+
import { ISession } from './session';
|
|
5
4
|
export declare type TableConstructor = {
|
|
6
5
|
new (db: DB): AbstractTable<any>;
|
|
7
6
|
};
|
|
8
7
|
export default class DB {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
constructor(
|
|
8
|
+
protected _session: ISession;
|
|
9
|
+
protected _logger?: BaseLogger;
|
|
10
|
+
protected _cache: Map<TableConstructor, AbstractTable<any>>;
|
|
11
|
+
constructor(session: ISession);
|
|
13
12
|
create<TTable extends AbstractTable<TTable>>(t: new (db: DB) => TTable): TTable;
|
|
14
13
|
useLogger: (logger: BaseLogger) => void;
|
|
15
14
|
cache: () => Map<TableConstructor, AbstractTable<any>>;
|
|
16
15
|
logger: () => BaseLogger | undefined;
|
|
17
|
-
session: () =>
|
|
16
|
+
session: () => ISession;
|
|
18
17
|
protected instanceFor<TTable extends AbstractTable<TTable>>(t: new (db: DB) => TTable): AbstractTable<any> | undefined;
|
|
19
18
|
}
|
package/db/db.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const session_1 = require("./session");
|
|
4
3
|
class DB {
|
|
5
|
-
constructor(
|
|
4
|
+
constructor(session) {
|
|
6
5
|
this._cache = new Map();
|
|
7
6
|
this.useLogger = (logger) => {
|
|
8
7
|
this._logger = logger;
|
|
@@ -10,7 +9,7 @@ class DB {
|
|
|
10
9
|
this.cache = () => this._cache;
|
|
11
10
|
this.logger = () => this._logger;
|
|
12
11
|
this.session = () => this._session;
|
|
13
|
-
this._session =
|
|
12
|
+
this._session = session;
|
|
14
13
|
}
|
|
15
14
|
create(t) {
|
|
16
15
|
if (!this._cache.has(t)) {
|
package/db/dbConnector.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const pg_1 = require("pg");
|
|
4
4
|
const db_1 = require("./db");
|
|
5
5
|
const dbStringConnector_1 = require("./dbStringConnector");
|
|
6
|
+
const session_1 = require("./session");
|
|
6
7
|
class DbConnector {
|
|
7
8
|
constructor() {
|
|
8
9
|
this.connectionString = (url) => new dbStringConnector_1.default(url);
|
|
@@ -16,7 +17,7 @@ class DbConnector {
|
|
|
16
17
|
await pool.connect();
|
|
17
18
|
// console.log('Db connected!');
|
|
18
19
|
// check if table structure is the same as in code
|
|
19
|
-
return new db_1.default(pool);
|
|
20
|
+
return new db_1.default(new session_1.default(pool));
|
|
20
21
|
}
|
|
21
22
|
catch (e) {
|
|
22
23
|
// console.log(`Connection error: ${e.message}`);
|
package/db/dbStringConnector.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const pg_1 = require("pg");
|
|
4
4
|
const db_1 = require("./db");
|
|
5
|
+
const session_1 = require("./session");
|
|
5
6
|
class DBStringConnector {
|
|
6
7
|
constructor(url) {
|
|
7
8
|
this.connect = async () => {
|
|
@@ -12,7 +13,7 @@ class DBStringConnector {
|
|
|
12
13
|
const pool = new pg_1.Pool(config);
|
|
13
14
|
await pool.connect();
|
|
14
15
|
// console.log('Db connected!');
|
|
15
|
-
return new db_1.default(pool);
|
|
16
|
+
return new db_1.default(new session_1.default(pool));
|
|
16
17
|
}
|
|
17
18
|
catch (e) {
|
|
18
19
|
// console.log(`Connection error: ${e.message}`);
|
package/db/session.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Pool, QueryResult } from 'pg';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
export declare abstract class ISession {
|
|
3
|
+
abstract execute(query: string): Promise<QueryResult<any>>;
|
|
4
|
+
}
|
|
5
|
+
export default class Session extends ISession {
|
|
4
6
|
private pool;
|
|
5
7
|
constructor(pool: Pool);
|
|
6
|
-
execute
|
|
8
|
+
execute(query: string): Promise<QueryResult<any>>;
|
|
7
9
|
}
|
package/db/session.js
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
class
|
|
3
|
+
exports.ISession = void 0;
|
|
4
|
+
class ISession {
|
|
5
|
+
}
|
|
6
|
+
exports.ISession = ISession;
|
|
7
|
+
class Session extends ISession {
|
|
5
8
|
constructor(pool) {
|
|
9
|
+
super();
|
|
6
10
|
this.pool = pool;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
catch (e) {
|
|
12
|
-
return baseError_1.left({
|
|
13
|
-
type: baseError_1.PgSessionError.PgQueryExecutionError,
|
|
14
|
-
reason: e,
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
};
|
|
11
|
+
}
|
|
12
|
+
execute(query) {
|
|
13
|
+
return this.pool.query(query);
|
|
18
14
|
}
|
|
19
15
|
}
|
|
20
16
|
exports.default = Session;
|
|
@@ -17,7 +17,7 @@ const usersTable_1 = require("../tables/usersTable");
|
|
|
17
17
|
await usersTable.insert({
|
|
18
18
|
decimalField: 12.4,
|
|
19
19
|
createdAt: new Date(),
|
|
20
|
-
role: 'guest',
|
|
20
|
+
// role: 'guest',
|
|
21
21
|
}).execute();
|
|
22
22
|
const insertedCities = await citiesTable.insert({
|
|
23
23
|
foundationDate: new Date(),
|
|
@@ -36,11 +36,11 @@ const usersTable_1 = require("../tables/usersTable");
|
|
|
36
36
|
const conflictInsertedUsers = await usersTable.insertMany([{
|
|
37
37
|
decimalField: 12.4,
|
|
38
38
|
createdAt: new Date(),
|
|
39
|
-
role: 'guest',
|
|
39
|
+
// role: 'guest',
|
|
40
40
|
}, {
|
|
41
41
|
decimalField: 32.4,
|
|
42
42
|
createdAt: new Date(),
|
|
43
|
-
role: 'admin',
|
|
43
|
+
// role: 'admin',
|
|
44
44
|
phone: '+1808',
|
|
45
45
|
}])
|
|
46
46
|
.onConflict((table) => table.phoneIndex, { isArchived: true }).all();
|
|
@@ -24,11 +24,11 @@ const usersToUserGroups_1 = require("../tables/usersToUserGroups");
|
|
|
24
24
|
const userRes = await usersTable.insertMany([{
|
|
25
25
|
decimalField: 4.2,
|
|
26
26
|
createdAt: new Date(),
|
|
27
|
-
role: 'guest',
|
|
27
|
+
// role: 'guest',
|
|
28
28
|
}, {
|
|
29
29
|
decimalField: 5.8,
|
|
30
30
|
createdAt: new Date(),
|
|
31
|
-
role: 'user',
|
|
31
|
+
// role: 'user',
|
|
32
32
|
}]).all();
|
|
33
33
|
const citiesRes = await citiesTable.insertMany([{
|
|
34
34
|
foundationDate: new Date(),
|
|
@@ -7,7 +7,6 @@ export default class UsersTable extends AbstractTable<UsersTable> {
|
|
|
7
7
|
media: import("../..").Column<import("../..").PgJsonb<string[]>, true, false>;
|
|
8
8
|
decimalField: import("../..").Column<import("../..").PgBigDecimal, false, false>;
|
|
9
9
|
bigIntField: import("../..").Column<import("../..").PgBigInt, true, false>;
|
|
10
|
-
role: import("../..").Column<import("../../columns/types/pgEnum").default<"user" | "guest" | "admin">, false, false>;
|
|
11
10
|
createdAt: import("../..").Column<import("../..").PgTimestamp, false, false>;
|
|
12
11
|
updatedAt: import("../..").Column<import("../..").PgTimestamp, true, false>;
|
|
13
12
|
isArchived: import("../..").Column<import("../..").PgBoolean, true, false>;
|
|
@@ -15,7 +15,7 @@ class UsersTable extends abstractTable_1.default {
|
|
|
15
15
|
this.media = this.jsonb('media');
|
|
16
16
|
this.decimalField = this.decimal('test', { notNull: true, precision: 100, scale: 2 });
|
|
17
17
|
this.bigIntField = this.bigint('test1');
|
|
18
|
-
|
|
18
|
+
// public role = this.type(rolesEnum, 'name_in_table', { notNull: true });
|
|
19
19
|
this.createdAt = this.timestamp('created_at', { notNull: true });
|
|
20
20
|
this.updatedAt = this.timestamp('updated_at');
|
|
21
21
|
this.isArchived = this.bool('is_archived').defaultValue(false);
|
package/index.d.ts
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import { ClientConfig } from 'pg';
|
|
2
2
|
import { DB } from './db';
|
|
3
|
-
import Migrator from './migrator/migrator';
|
|
4
|
-
import AbstractTable from './tables/abstractTable';
|
|
5
3
|
export * from './db';
|
|
6
4
|
export * from './builders';
|
|
7
5
|
export * from './columns';
|
|
8
6
|
export * from './tables';
|
|
9
7
|
export declare const drizzle: {
|
|
10
|
-
prepareCreateTable<TTable extends AbstractTable<TTable>>(table: AbstractTable<TTable>): string;
|
|
11
|
-
migrator(db: DB): Migrator;
|
|
12
8
|
connect(config: ClientConfig): Promise<DB>;
|
|
13
9
|
};
|
package/index.js
CHANGED
|
@@ -11,20 +11,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.drizzle = void 0;
|
|
14
|
-
const create_1 = require("./builders/lowLvlBuilders/create");
|
|
15
14
|
const db_1 = require("./db");
|
|
16
|
-
const migrator_1 = require("./migrator/migrator");
|
|
17
15
|
__exportStar(require("./db"), exports);
|
|
18
16
|
__exportStar(require("./builders"), exports);
|
|
19
17
|
__exportStar(require("./columns"), exports);
|
|
20
18
|
__exportStar(require("./tables"), exports);
|
|
21
19
|
exports.drizzle = {
|
|
22
|
-
prepareCreateTable(table) {
|
|
23
|
-
return create_1.default.table(table).build();
|
|
24
|
-
},
|
|
25
|
-
migrator(db) {
|
|
26
|
-
return new migrator_1.default(db);
|
|
27
|
-
},
|
|
28
20
|
async connect(config) {
|
|
29
21
|
const dbConnector = new db_1.DbConnector().params(config);
|
|
30
22
|
return dbConnector.connect();
|
package/migrator/migrator.js
CHANGED
|
@@ -56,19 +56,13 @@ class Migrator {
|
|
|
56
56
|
if (logger) {
|
|
57
57
|
logger.info(`Executing migration with tag ${key} with query:\n${value}`);
|
|
58
58
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
.insert({
|
|
67
|
-
version: key,
|
|
68
|
-
createdAt: new Date(),
|
|
69
|
-
hash: Buffer.from(value).toString('base64'),
|
|
70
|
-
}).execute();
|
|
71
|
-
}
|
|
59
|
+
await this._db.session().execute(value);
|
|
60
|
+
await migrationsTable
|
|
61
|
+
.insert({
|
|
62
|
+
version: key,
|
|
63
|
+
createdAt: new Date(),
|
|
64
|
+
hash: Buffer.from(value).toString('base64'),
|
|
65
|
+
}).execute();
|
|
72
66
|
}
|
|
73
67
|
catch (e) {
|
|
74
68
|
await transaction.rollback();
|
package/package.json
CHANGED
|
@@ -63,6 +63,12 @@ export default abstract class AbstractTable<TTable extends AbstractTable<TTable>
|
|
|
63
63
|
protected int(name: string, params: {
|
|
64
64
|
notNull: true;
|
|
65
65
|
}): Column<PgInteger, false>;
|
|
66
|
+
protected smallInt(name: string, params?: {
|
|
67
|
+
notNull: false;
|
|
68
|
+
}): Column<PgInteger, true>;
|
|
69
|
+
protected smallInt(name: string, params: {
|
|
70
|
+
notNull: true;
|
|
71
|
+
}): Column<PgInteger, false>;
|
|
66
72
|
protected timestamp(name: string, params?: {
|
|
67
73
|
notNull: false;
|
|
68
74
|
}): Column<PgTimestamp, true>;
|
package/tables/abstractTable.js
CHANGED
|
@@ -16,6 +16,7 @@ const pgBigInt_1 = require("../columns/types/pgBigInt");
|
|
|
16
16
|
const pgEnum_1 = require("../columns/types/pgEnum");
|
|
17
17
|
const column_1 = require("../columns/column");
|
|
18
18
|
const tableIndex_1 = require("../indexes/tableIndex");
|
|
19
|
+
const pgSmallInt_1 = require("../columns/types/pgSmallInt");
|
|
19
20
|
class AbstractTable {
|
|
20
21
|
constructor(db) {
|
|
21
22
|
this.withLogger = (logger) => {
|
|
@@ -79,6 +80,10 @@ class AbstractTable {
|
|
|
79
80
|
var _a;
|
|
80
81
|
return new column_1.Column(this, name, new pgInteger_1.default(), (_a = !(params === null || params === void 0 ? void 0 : params.notNull)) !== null && _a !== void 0 ? _a : false);
|
|
81
82
|
}
|
|
83
|
+
smallInt(name, params = {}) {
|
|
84
|
+
var _a;
|
|
85
|
+
return new column_1.Column(this, name, new pgSmallInt_1.default(), (_a = !(params === null || params === void 0 ? void 0 : params.notNull)) !== null && _a !== void 0 ? _a : false);
|
|
86
|
+
}
|
|
82
87
|
timestamp(name, params = {}) {
|
|
83
88
|
var _a;
|
|
84
89
|
return new column_1.Column(this, name, new pgTimestamp_1.default(), (_a = !(params === null || params === void 0 ? void 0 : params.notNull)) !== null && _a !== void 0 ? _a : false);
|
package/tables/index.d.ts
CHANGED
package/test.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const _1 = require(".");
|
|
4
3
|
// import { Pool } from 'pg';
|
|
5
4
|
// import { DB } from '.';
|
|
6
5
|
// import { DB, DbConnector } from '.';
|
|
@@ -17,14 +16,11 @@ const fromTypeFile = (filepath) => {
|
|
|
17
16
|
};
|
|
18
17
|
(async () => {
|
|
19
18
|
try {
|
|
20
|
-
const db = await new _1.DbConnector()
|
|
21
|
-
.connectionString('postgresql://postgres@127.0.0.1/migrator')
|
|
22
|
-
.connect();
|
|
23
19
|
// const ser = new MigrationSerializer();
|
|
24
20
|
// const d = db.create(UsersTable) as unknown as AbstractTable<any>;
|
|
25
21
|
// const f = ser.generate([d], []);
|
|
26
22
|
// console.log(JSON.stringify(f, null, 2));
|
|
27
|
-
await
|
|
23
|
+
// await drizzle.migrator(db).migrate('src/drizzle.config.yaml');
|
|
28
24
|
// drizzle.migrator(db).migrate({ migrationFolder: '' });
|
|
29
25
|
// const typesFileNames = fs.readdirSync('/Users/andrewsherman/IdeaProjects/datalayer-orm/src/examples/types');
|
|
30
26
|
// typesFileNames.forEach((filename) => {
|
|
@@ -38,9 +34,36 @@ const fromTypeFile = (filepath) => {
|
|
|
38
34
|
// const db = await new DbConnector()
|
|
39
35
|
// .connectionString('postgresql://postgres@127.0.0.1/drizzle')
|
|
40
36
|
// .connect();
|
|
41
|
-
// const
|
|
42
|
-
//
|
|
37
|
+
// const db = await new DbConnector()
|
|
38
|
+
// .connectionString('postgresql://postgres@127.0.0.1/migrator')
|
|
39
|
+
// .connect();
|
|
40
|
+
// const usersTable: UsersTable = new UsersTable(db);
|
|
41
|
+
// const knexInstance = knex.knex({
|
|
42
|
+
// client: 'pg',
|
|
43
|
+
// connection: 'postgresql://postgres@127.0.0.1/migrator',
|
|
44
|
+
// });
|
|
45
|
+
// const userTableForKnex: UsersTable = new UsersTable(knexDb);
|
|
46
|
+
// const users = await userTableForKnex.select().all();
|
|
47
|
+
// console.log(users[0]);
|
|
48
|
+
// const arr: AbstractColumn<ColumnType<any>, boolean, boolean>[] = [usersTable.id, usersTable.phone];
|
|
49
|
+
// const objectRes: {[name: string]: AbstractColumn<ColumnType, boolean, boolean>} = arr.reduce(
|
|
50
|
+
// (obj, item, index) => Object.assign(obj, { [Object.getOwnPropertyNames(item)[index]]: item }), {},
|
|
43
51
|
// );
|
|
52
|
+
// type f = ExtractModel<typeof objectRes1>;
|
|
53
|
+
// type d1 = ExtractModel<UsersTable>;
|
|
54
|
+
// const f = await usersTable.select()
|
|
55
|
+
// .fieldsv2({
|
|
56
|
+
// usersCount: count(usersTable.id),
|
|
57
|
+
// sumNumber: sum(usersTable.phone),
|
|
58
|
+
// role: usersTable.role,
|
|
59
|
+
// });
|
|
60
|
+
// const objectRes1 = {
|
|
61
|
+
// idid: usersTable.id,
|
|
62
|
+
// pisun: usersTable.phone,
|
|
63
|
+
// vau: usersTable.role,
|
|
64
|
+
// };
|
|
65
|
+
// type fd = ExtractModel<typeof objectRes1>;
|
|
66
|
+
// const g = await usersTable.select().execute();
|
|
44
67
|
// if (res.isLeft()) {
|
|
45
68
|
// console.log(res.value.reason);
|
|
46
69
|
// } else {
|