@neogroup/neorm 0.0.1 → 0.0.2
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 +1 -0
- package/dist/database/Connection.d.ts +10 -0
- package/dist/database/Connection.js +3 -0
- package/dist/database/Connection.js.map +1 -0
- package/dist/database/DB.d.ts +58 -0
- package/dist/database/DB.js +229 -0
- package/dist/database/DB.js.map +1 -0
- package/dist/database/DataConnection.d.ts +24 -0
- package/dist/database/DataConnection.js +99 -0
- package/dist/database/DataConnection.js.map +1 -0
- package/dist/database/DataSet.d.ts +3 -0
- package/dist/database/DataSet.js +3 -0
- package/dist/database/DataSet.js.map +1 -0
- package/dist/database/DataSource.d.ts +23 -0
- package/dist/database/DataSource.js +56 -0
- package/dist/database/DataSource.js.map +1 -0
- package/dist/database/DataTable.d.ts +19 -0
- package/dist/database/DataTable.js +75 -0
- package/dist/database/DataTable.js.map +1 -0
- package/dist/database/index.d.ts +7 -0
- package/dist/database/index.js +24 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/sources/index.d.ts +3 -0
- package/dist/database/sources/index.js +20 -0
- package/dist/database/sources/index.js.map +1 -0
- package/dist/database/sources/mysql/MysqlConnection.d.ts +14 -0
- package/dist/database/sources/mysql/MysqlConnection.js +36 -0
- package/dist/database/sources/mysql/MysqlConnection.js.map +1 -0
- package/dist/database/sources/mysql/MysqlDataSource.d.ts +24 -0
- package/dist/database/sources/mysql/MysqlDataSource.js +72 -0
- package/dist/database/sources/mysql/MysqlDataSource.js.map +1 -0
- package/dist/database/sources/mysql/MysqlQueryBuilder.d.ts +6 -0
- package/dist/database/sources/mysql/MysqlQueryBuilder.js +28 -0
- package/dist/database/sources/mysql/MysqlQueryBuilder.js.map +1 -0
- package/dist/database/sources/mysql/index.d.ts +3 -0
- package/dist/database/sources/mysql/index.js +20 -0
- package/dist/database/sources/mysql/index.js.map +1 -0
- package/dist/database/sources/postgres/PostgresConnection.d.ts +13 -0
- package/dist/database/sources/postgres/PostgresConnection.js +40 -0
- package/dist/database/sources/postgres/PostgresConnection.js.map +1 -0
- package/dist/database/sources/postgres/PostgresDataSource.d.ts +24 -0
- package/dist/database/sources/postgres/PostgresDataSource.js +73 -0
- package/dist/database/sources/postgres/PostgresDataSource.js.map +1 -0
- package/dist/database/sources/postgres/PostgresQueryBuilder.d.ts +5 -0
- package/dist/database/sources/postgres/PostgresQueryBuilder.js +13 -0
- package/dist/database/sources/postgres/PostgresQueryBuilder.js.map +1 -0
- package/dist/database/sources/postgres/index.d.ts +2 -0
- package/dist/database/sources/postgres/index.js +19 -0
- package/dist/database/sources/postgres/index.js.map +1 -0
- package/dist/database/sources/sqlite/SqliteConnection.d.ts +14 -0
- package/dist/database/sources/sqlite/SqliteConnection.js +37 -0
- package/dist/database/sources/sqlite/SqliteConnection.js.map +1 -0
- package/dist/database/sources/sqlite/SqliteDataSource.d.ts +11 -0
- package/dist/database/sources/sqlite/SqliteDataSource.js +34 -0
- package/dist/database/sources/sqlite/SqliteDataSource.js.map +1 -0
- package/dist/database/sources/sqlite/SqliteQueryBuilder.d.ts +6 -0
- package/dist/database/sources/sqlite/SqliteQueryBuilder.js +23 -0
- package/dist/database/sources/sqlite/SqliteQueryBuilder.js.map +1 -0
- package/dist/database/sources/sqlite/index.d.ts +3 -0
- package/dist/database/sources/sqlite/index.js +20 -0
- package/dist/database/sources/sqlite/index.js.map +1 -0
- package/dist/entities/CastType.d.ts +1 -0
- package/dist/entities/CastType.js +3 -0
- package/dist/entities/CastType.js.map +1 -0
- package/dist/entities/Entities.d.ts +14 -0
- package/dist/entities/Entities.js +85 -0
- package/dist/entities/Entities.js.map +1 -0
- package/dist/entities/EntityQuery.d.ts +60 -0
- package/dist/entities/EntityQuery.js +305 -0
- package/dist/entities/EntityQuery.js.map +1 -0
- package/dist/entities/RelationshipType.d.ts +1 -0
- package/dist/entities/RelationshipType.js +3 -0
- package/dist/entities/RelationshipType.js.map +1 -0
- package/dist/entities/decorators/BelongsTo.d.ts +2 -0
- package/dist/entities/decorators/BelongsTo.js +16 -0
- package/dist/entities/decorators/BelongsTo.js.map +1 -0
- package/dist/entities/decorators/Column.d.ts +13 -0
- package/dist/entities/decorators/Column.js +13 -0
- package/dist/entities/decorators/Column.js.map +1 -0
- package/dist/entities/decorators/Entity.d.ts +15 -0
- package/dist/entities/decorators/Entity.js +170 -0
- package/dist/entities/decorators/Entity.js.map +1 -0
- package/dist/entities/decorators/HasMany.d.ts +2 -0
- package/dist/entities/decorators/HasMany.js +16 -0
- package/dist/entities/decorators/HasMany.js.map +1 -0
- package/dist/entities/decorators/HasManyThrough.d.ts +2 -0
- package/dist/entities/decorators/HasManyThrough.js +24 -0
- package/dist/entities/decorators/HasManyThrough.js.map +1 -0
- package/dist/entities/decorators/HasOne.d.ts +2 -0
- package/dist/entities/decorators/HasOne.js +13 -0
- package/dist/entities/decorators/HasOne.js.map +1 -0
- package/dist/entities/decorators/HasOneThrough.d.ts +2 -0
- package/dist/entities/decorators/HasOneThrough.js +24 -0
- package/dist/entities/decorators/HasOneThrough.js.map +1 -0
- package/dist/entities/decorators/casts.d.ts +3 -0
- package/dist/entities/decorators/casts.js +39 -0
- package/dist/entities/decorators/casts.js.map +1 -0
- package/dist/entities/decorators/index.d.ts +7 -0
- package/dist/entities/decorators/index.js +24 -0
- package/dist/entities/decorators/index.js.map +1 -0
- package/dist/entities/decorators/metadata.d.ts +19 -0
- package/dist/entities/decorators/metadata.js +12 -0
- package/dist/entities/decorators/metadata.js.map +1 -0
- package/dist/entities/index.d.ts +5 -3
- package/dist/entities/index.js +5 -2
- package/dist/entities/index.js.map +1 -1
- package/dist/entities/relationship.d.ts +1 -6
- package/dist/entities/relationship.js +1 -22
- package/dist/entities/relationship.js.map +1 -1
- package/dist/index.d.ts +2 -9
- package/dist/index.js +2 -14
- package/dist/index.js.map +1 -1
- package/dist/query/DeleteQuery.d.ts +8 -0
- package/dist/query/DeleteQuery.js +17 -0
- package/dist/query/DeleteQuery.js.map +1 -0
- package/dist/query/InsertQuery.d.ts +8 -0
- package/dist/query/InsertQuery.js +17 -0
- package/dist/query/InsertQuery.js.map +1 -0
- package/dist/query/QueryTable.d.ts +7 -0
- package/dist/query/QueryTable.js +3 -0
- package/dist/query/QueryTable.js.map +1 -0
- package/dist/query/SelectQuery.d.ts +9 -0
- package/dist/query/SelectQuery.js +33 -0
- package/dist/query/SelectQuery.js.map +1 -0
- package/dist/query/UpdateQuery.d.ts +8 -0
- package/dist/query/UpdateQuery.js +17 -0
- package/dist/query/UpdateQuery.js.map +1 -0
- package/dist/query/builders/DefaultQueryBuilder.d.ts +87 -0
- package/dist/query/builders/DefaultQueryBuilder.js +524 -0
- package/dist/query/builders/DefaultQueryBuilder.js.map +1 -0
- package/dist/query/builders/QueryBuilder.d.ts +5 -0
- package/dist/query/builders/QueryBuilder.js +7 -0
- package/dist/query/builders/QueryBuilder.js.map +1 -0
- package/dist/query/builders/index.d.ts +2 -2
- package/dist/query/builders/index.js +2 -2
- package/dist/query/builders/index.js.map +1 -1
- package/dist/query/conditions/BasicCondition.d.ts +6 -0
- package/dist/query/conditions/BasicCondition.js +3 -0
- package/dist/query/conditions/BasicCondition.js.map +1 -0
- package/dist/query/conditions/ColumnCondition.d.ts +6 -0
- package/dist/query/conditions/ColumnCondition.js +3 -0
- package/dist/query/conditions/ColumnCondition.js.map +1 -0
- package/dist/query/conditions/Condition.d.ts +5 -0
- package/dist/query/conditions/Condition.js +3 -0
- package/dist/query/conditions/Condition.js.map +1 -0
- package/dist/query/conditions/ConditionConnector.d.ts +4 -0
- package/dist/query/conditions/ConditionConnector.js +9 -0
- package/dist/query/conditions/ConditionConnector.js.map +1 -0
- package/dist/query/conditions/ConditionGroup.d.ts +40 -0
- package/dist/query/conditions/ConditionGroup.js +138 -0
- package/dist/query/conditions/ConditionGroup.js.map +1 -0
- package/dist/query/conditions/ConnectedCondition.d.ts +6 -0
- package/dist/query/conditions/ConnectedCondition.js +3 -0
- package/dist/query/conditions/ConnectedCondition.js.map +1 -0
- package/dist/query/conditions/RawCondition.d.ts +4 -0
- package/dist/query/conditions/RawCondition.js +3 -0
- package/dist/query/conditions/RawCondition.js.map +1 -0
- package/dist/query/conditions/index.d.ts +7 -0
- package/dist/query/conditions/index.js +24 -0
- package/dist/query/conditions/index.js.map +1 -0
- package/dist/query/features/HasAlias.d.ts +6 -0
- package/dist/query/features/HasAlias.js +17 -0
- package/dist/query/features/HasAlias.js.map +1 -0
- package/dist/query/features/HasDistinct.d.ts +6 -0
- package/dist/query/features/HasDistinct.js +20 -0
- package/dist/query/features/HasDistinct.js.map +1 -0
- package/dist/query/features/HasFieldValues.d.ts +9 -0
- package/dist/query/features/HasFieldValues.js +27 -0
- package/dist/query/features/HasFieldValues.js.map +1 -0
- package/dist/query/features/HasGroupByFields.d.ts +7 -0
- package/dist/query/features/HasGroupByFields.js +21 -0
- package/dist/query/features/HasGroupByFields.js.map +1 -0
- package/dist/query/features/HasHavingConditions.d.ts +13 -0
- package/dist/query/features/HasHavingConditions.js +28 -0
- package/dist/query/features/HasHavingConditions.js.map +1 -0
- package/dist/query/features/HasJoins.d.ts +41 -0
- package/dist/query/features/HasJoins.js +66 -0
- package/dist/query/features/HasJoins.js.map +1 -0
- package/dist/query/features/HasLimit.d.ts +6 -0
- package/dist/query/features/HasLimit.js +20 -0
- package/dist/query/features/HasLimit.js.map +1 -0
- package/dist/query/features/HasOffset.d.ts +6 -0
- package/dist/query/features/HasOffset.js +20 -0
- package/dist/query/features/HasOffset.js.map +1 -0
- package/dist/query/features/HasOrderByFields.d.ts +15 -0
- package/dist/query/features/HasOrderByFields.js +38 -0
- package/dist/query/features/HasOrderByFields.js.map +1 -0
- package/dist/query/features/HasSelectFields.d.ts +11 -0
- package/dist/query/features/HasSelectFields.js +21 -0
- package/dist/query/features/HasSelectFields.js.map +1 -0
- package/dist/query/features/HasTable.d.ts +7 -0
- package/dist/query/features/HasTable.js +20 -0
- package/dist/query/features/HasTable.js.map +1 -0
- package/dist/query/features/HasUnions.d.ts +13 -0
- package/dist/query/features/HasUnions.js +21 -0
- package/dist/query/features/HasUnions.js.map +1 -0
- package/dist/query/features/HasWhen.d.ts +3 -0
- package/dist/query/features/HasWhen.js +13 -0
- package/dist/query/features/HasWhen.js.map +1 -0
- package/dist/query/features/HasWhereConditions.d.ts +35 -0
- package/dist/query/features/HasWhereConditions.js +92 -0
- package/dist/query/features/HasWhereConditions.js.map +1 -0
- package/dist/query/features/index.d.ts +14 -14
- package/dist/query/features/index.js +14 -14
- package/dist/query/features/index.js.map +1 -1
- package/dist/query/fields/BasicField.d.ts +5 -0
- package/dist/query/fields/BasicField.js +3 -0
- package/dist/query/fields/BasicField.js.map +1 -0
- package/dist/query/fields/Field.d.ts +3 -0
- package/dist/query/fields/Field.js +3 -0
- package/dist/query/fields/Field.js.map +1 -0
- package/dist/query/fields/RawField.d.ts +1 -0
- package/dist/query/fields/RawField.js +3 -0
- package/dist/query/fields/RawField.js.map +1 -0
- package/dist/query/fields/index.d.ts +3 -0
- package/dist/query/fields/index.js +20 -0
- package/dist/query/fields/index.js.map +1 -0
- package/dist/query/index.d.ts +7 -7
- package/dist/query/index.js +7 -7
- package/dist/query/index.js.map +1 -1
- package/dist/query/query.js +1 -1
- package/dist/query/query.js.map +1 -1
- package/dist/query/statement.js +1 -1
- package/dist/query/statement.js.map +1 -1
- package/package.json +14 -9
package/README.md
CHANGED
|
@@ -765,6 +765,7 @@ class Order {
|
|
|
765
765
|
|
|
766
766
|
| Option | Type | Description |
|
|
767
767
|
|-----------------|------------|-------------|
|
|
768
|
+
| `columnName` | `string` | Database column name. Defaults to the property name. |
|
|
768
769
|
| `cast` | `CastType` | Coerce the value when reading from the DB (see [Casts](#casts)). |
|
|
769
770
|
| `primaryKey` | `boolean` | Marks this column as the primary key. |
|
|
770
771
|
| `autoGenerated` | `boolean` | Column is DB-managed (e.g. `AUTOINCREMENT`). Excluded from INSERT/UPDATE; the generated value is written back to the instance after INSERT. |
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DataSet } from './DataSet';
|
|
2
|
+
export interface Connection {
|
|
3
|
+
query(sql: string, bindings?: Array<any>): Promise<Array<DataSet>>;
|
|
4
|
+
execute(sql: string, bindings?: Array<any>): Promise<number>;
|
|
5
|
+
lastInsertId(): Promise<number>;
|
|
6
|
+
beginTransaction(): Promise<void>;
|
|
7
|
+
rollbackTransaction(): Promise<void>;
|
|
8
|
+
commitTransaction(): Promise<void>;
|
|
9
|
+
close(): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Connection.js","sourceRoot":"","sources":["../../src/database/Connection.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ConditionGroup, DeleteQuery, InsertQuery, Query, QueryTable, SelectQuery, UpdateQuery } from '../query';
|
|
2
|
+
import { DataConnection } from './DataConnection';
|
|
3
|
+
import { DataSet } from './DataSet';
|
|
4
|
+
import { DataSource } from './DataSource';
|
|
5
|
+
import { DataTable } from './DataTable';
|
|
6
|
+
export declare abstract class DB {
|
|
7
|
+
private static get _sources();
|
|
8
|
+
private static get _activeSourceName();
|
|
9
|
+
private static set _activeSourceName(value);
|
|
10
|
+
static register(source: DataSource): void;
|
|
11
|
+
static register(sourceName: string, source: DataSource): void;
|
|
12
|
+
static setActiveSource(sourceName: string): void;
|
|
13
|
+
static source(sourceName: string): DataSource;
|
|
14
|
+
/**
|
|
15
|
+
* Reads environment variables and registers the corresponding data sources.
|
|
16
|
+
* Called automatically the first time a source is needed if none have been
|
|
17
|
+
* registered manually.
|
|
18
|
+
*
|
|
19
|
+
* Supported variables:
|
|
20
|
+
*
|
|
21
|
+
* Default source:
|
|
22
|
+
* DB_DRIVER sqlite | postgres | mysql (required)
|
|
23
|
+
* DB_FILE path to SQLite file (sqlite only, default: :memory:)
|
|
24
|
+
* DB_HOST database host (postgres / mysql)
|
|
25
|
+
* DB_PORT database port (postgres / mysql)
|
|
26
|
+
* DB_NAME database name (postgres / mysql)
|
|
27
|
+
* DB_USERNAME login username (postgres / mysql)
|
|
28
|
+
* DB_PASSWORD login password (postgres / mysql)
|
|
29
|
+
*
|
|
30
|
+
* Named source (replace <NAME> with the desired source name in upper-case):
|
|
31
|
+
* DB_<NAME>_DRIVER, DB_<NAME>_HOST, DB_<NAME>_PORT, DB_<NAME>_NAME,
|
|
32
|
+
* DB_<NAME>_USERNAME, DB_<NAME>_PASSWORD, DB_<NAME>_FILE
|
|
33
|
+
*
|
|
34
|
+
* Example:
|
|
35
|
+
* DB_DRIVER=postgres DB_HOST=localhost DB_NAME=app DB_USERNAME=user DB_PASSWORD=pass
|
|
36
|
+
* DB_REPORTING_DRIVER=sqlite DB_REPORTING_FILE=./reporting.db
|
|
37
|
+
*/
|
|
38
|
+
static configure(): void;
|
|
39
|
+
private static _buildSourceFromEnv;
|
|
40
|
+
private static _ensureConfigured;
|
|
41
|
+
static table(tableName: string): DataTable;
|
|
42
|
+
static conditionGroup(): ConditionGroup;
|
|
43
|
+
static selectQuery(table?: QueryTable): SelectQuery;
|
|
44
|
+
static updateQuery(table?: QueryTable): UpdateQuery;
|
|
45
|
+
static deleteQuery(table?: QueryTable): DeleteQuery;
|
|
46
|
+
static insertQuery(table?: QueryTable): InsertQuery;
|
|
47
|
+
static connection(): Promise<DataConnection>;
|
|
48
|
+
static query(sql: string, bindings?: Array<any>): Promise<Array<DataSet>>;
|
|
49
|
+
static query(query: Query): Promise<Array<DataSet>>;
|
|
50
|
+
static execute(sql: string, bindings?: Array<any>): Promise<number>;
|
|
51
|
+
static execute(query: Query): Promise<number>;
|
|
52
|
+
static beginTransaction(): Promise<void>;
|
|
53
|
+
static commitTransaction(): Promise<void>;
|
|
54
|
+
static rollbackTransaction(): Promise<void>;
|
|
55
|
+
static executeTransaction(callback: (connection: DataConnection) => Promise<void>): Promise<void>;
|
|
56
|
+
static getActiveSource(): DataSource;
|
|
57
|
+
private static get _activeSource();
|
|
58
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DB = void 0;
|
|
4
|
+
const query_1 = require("../query");
|
|
5
|
+
function getGlobalState() {
|
|
6
|
+
const g = globalThis;
|
|
7
|
+
if (!g.__neorm) {
|
|
8
|
+
g.__neorm = { sources: new Map() };
|
|
9
|
+
}
|
|
10
|
+
return g.__neorm;
|
|
11
|
+
}
|
|
12
|
+
// ── DB ────────────────────────────────────────────────────────────────────────
|
|
13
|
+
class DB {
|
|
14
|
+
static get _sources() {
|
|
15
|
+
return getGlobalState().sources;
|
|
16
|
+
}
|
|
17
|
+
static get _activeSourceName() {
|
|
18
|
+
return getGlobalState().activeSourceName;
|
|
19
|
+
}
|
|
20
|
+
static set _activeSourceName(value) {
|
|
21
|
+
getGlobalState().activeSourceName = value;
|
|
22
|
+
}
|
|
23
|
+
static register(sourceOrName, source) {
|
|
24
|
+
const sourceName = source ? sourceOrName : 'source' + (this._sources.size + 1);
|
|
25
|
+
const sourceToRegister = source !== null && source !== void 0 ? source : sourceOrName;
|
|
26
|
+
this._sources.set(sourceName, sourceToRegister);
|
|
27
|
+
if (!this._activeSourceName) {
|
|
28
|
+
this._activeSourceName = sourceName;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
static setActiveSource(sourceName) {
|
|
32
|
+
if (!this._sources.has(sourceName)) {
|
|
33
|
+
throw new Error(`No DataSource registered with the name "${sourceName}"`);
|
|
34
|
+
}
|
|
35
|
+
this._activeSourceName = sourceName;
|
|
36
|
+
}
|
|
37
|
+
static source(sourceName) {
|
|
38
|
+
this._ensureConfigured();
|
|
39
|
+
const source = this._sources.get(sourceName);
|
|
40
|
+
if (!source) {
|
|
41
|
+
throw new Error(`No DataSource registered with the name "${sourceName}"`);
|
|
42
|
+
}
|
|
43
|
+
return source;
|
|
44
|
+
}
|
|
45
|
+
// ── Environment-variable configuration ──────────────────────────────────────
|
|
46
|
+
/**
|
|
47
|
+
* Reads environment variables and registers the corresponding data sources.
|
|
48
|
+
* Called automatically the first time a source is needed if none have been
|
|
49
|
+
* registered manually.
|
|
50
|
+
*
|
|
51
|
+
* Supported variables:
|
|
52
|
+
*
|
|
53
|
+
* Default source:
|
|
54
|
+
* DB_DRIVER sqlite | postgres | mysql (required)
|
|
55
|
+
* DB_FILE path to SQLite file (sqlite only, default: :memory:)
|
|
56
|
+
* DB_HOST database host (postgres / mysql)
|
|
57
|
+
* DB_PORT database port (postgres / mysql)
|
|
58
|
+
* DB_NAME database name (postgres / mysql)
|
|
59
|
+
* DB_USERNAME login username (postgres / mysql)
|
|
60
|
+
* DB_PASSWORD login password (postgres / mysql)
|
|
61
|
+
*
|
|
62
|
+
* Named source (replace <NAME> with the desired source name in upper-case):
|
|
63
|
+
* DB_<NAME>_DRIVER, DB_<NAME>_HOST, DB_<NAME>_PORT, DB_<NAME>_NAME,
|
|
64
|
+
* DB_<NAME>_USERNAME, DB_<NAME>_PASSWORD, DB_<NAME>_FILE
|
|
65
|
+
*
|
|
66
|
+
* Example:
|
|
67
|
+
* DB_DRIVER=postgres DB_HOST=localhost DB_NAME=app DB_USERNAME=user DB_PASSWORD=pass
|
|
68
|
+
* DB_REPORTING_DRIVER=sqlite DB_REPORTING_FILE=./reporting.db
|
|
69
|
+
*/
|
|
70
|
+
static configure() {
|
|
71
|
+
if (this._sources.size > 0) {
|
|
72
|
+
return; // already configured — manual register() takes precedence
|
|
73
|
+
}
|
|
74
|
+
const env = process.env;
|
|
75
|
+
// 1. Default (unnamed) source — registered first so it becomes active
|
|
76
|
+
const defaultDriver = env['DB_DRIVER'];
|
|
77
|
+
if (defaultDriver) {
|
|
78
|
+
const get = (key) => env[`DB_${key}`];
|
|
79
|
+
this.register(this._buildSourceFromEnv(defaultDriver, get));
|
|
80
|
+
}
|
|
81
|
+
// 2. Named sources — DB_<NAME>_DRIVER pattern
|
|
82
|
+
for (const key of Object.keys(env).sort()) {
|
|
83
|
+
const match = key.match(/^DB_([A-Z][A-Z0-9_]*)_DRIVER$/);
|
|
84
|
+
if (!match) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const name = match[1].toLowerCase();
|
|
88
|
+
const prefix = `DB_${match[1]}_`;
|
|
89
|
+
const get = (k) => env[prefix + k];
|
|
90
|
+
this.register(name, this._buildSourceFromEnv(env[key], get));
|
|
91
|
+
}
|
|
92
|
+
if (this._sources.size === 0) {
|
|
93
|
+
throw new Error('No data source configured. ' +
|
|
94
|
+
'Call DB.register() or set the DB_DRIVER environment variable ' +
|
|
95
|
+
'(e.g. DB_DRIVER=sqlite, DB_DRIVER=postgres, DB_DRIVER=mysql).');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
static _buildSourceFromEnv(driver, get) {
|
|
99
|
+
var _a, _b, _c, _d, _e, _f;
|
|
100
|
+
switch (driver.toLowerCase()) {
|
|
101
|
+
case 'sqlite': {
|
|
102
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
103
|
+
const { SqliteDataSource } = require('./sources/sqlite');
|
|
104
|
+
const s = new SqliteDataSource();
|
|
105
|
+
const file = get('FILE');
|
|
106
|
+
if (file) {
|
|
107
|
+
s.setFilename(file);
|
|
108
|
+
}
|
|
109
|
+
return s;
|
|
110
|
+
}
|
|
111
|
+
case 'postgres':
|
|
112
|
+
case 'postgresql': {
|
|
113
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
114
|
+
const { PostgresDataSource } = require('./sources/postgres');
|
|
115
|
+
const s = new PostgresDataSource();
|
|
116
|
+
const host = get('HOST');
|
|
117
|
+
const port = get('PORT');
|
|
118
|
+
const name = (_a = get('NAME')) !== null && _a !== void 0 ? _a : get('DATABASE');
|
|
119
|
+
const username = (_b = get('USERNAME')) !== null && _b !== void 0 ? _b : get('USER');
|
|
120
|
+
const password = (_c = get('PASSWORD')) !== null && _c !== void 0 ? _c : get('PASS');
|
|
121
|
+
if (host) {
|
|
122
|
+
s.setHost(host);
|
|
123
|
+
}
|
|
124
|
+
if (port) {
|
|
125
|
+
s.setPort(Number(port));
|
|
126
|
+
}
|
|
127
|
+
if (name) {
|
|
128
|
+
s.setDatabaseName(name);
|
|
129
|
+
}
|
|
130
|
+
if (username) {
|
|
131
|
+
s.setUsername(username);
|
|
132
|
+
}
|
|
133
|
+
if (password) {
|
|
134
|
+
s.setPassword(password);
|
|
135
|
+
}
|
|
136
|
+
return s;
|
|
137
|
+
}
|
|
138
|
+
case 'mysql': {
|
|
139
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
140
|
+
const { MysqlDataSource } = require('./sources/mysql');
|
|
141
|
+
const s = new MysqlDataSource();
|
|
142
|
+
const host = get('HOST');
|
|
143
|
+
const port = get('PORT');
|
|
144
|
+
const name = (_d = get('NAME')) !== null && _d !== void 0 ? _d : get('DATABASE');
|
|
145
|
+
const username = (_e = get('USERNAME')) !== null && _e !== void 0 ? _e : get('USER');
|
|
146
|
+
const password = (_f = get('PASSWORD')) !== null && _f !== void 0 ? _f : get('PASS');
|
|
147
|
+
if (host) {
|
|
148
|
+
s.setHost(host);
|
|
149
|
+
}
|
|
150
|
+
if (port) {
|
|
151
|
+
s.setPort(Number(port));
|
|
152
|
+
}
|
|
153
|
+
if (name) {
|
|
154
|
+
s.setDatabaseName(name);
|
|
155
|
+
}
|
|
156
|
+
if (username) {
|
|
157
|
+
s.setUsername(username);
|
|
158
|
+
}
|
|
159
|
+
if (password) {
|
|
160
|
+
s.setPassword(password);
|
|
161
|
+
}
|
|
162
|
+
return s;
|
|
163
|
+
}
|
|
164
|
+
default:
|
|
165
|
+
throw new Error(`Unknown DB driver "${driver}". Supported drivers: sqlite, postgres, mysql.`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
static _ensureConfigured() {
|
|
169
|
+
if (this._sources.size === 0) {
|
|
170
|
+
this.configure();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// ── Query builder helpers ────────────────────────────────────────────────────
|
|
174
|
+
static table(tableName) {
|
|
175
|
+
return this._activeSource.table(tableName);
|
|
176
|
+
}
|
|
177
|
+
static conditionGroup() {
|
|
178
|
+
return new query_1.ConditionGroup();
|
|
179
|
+
}
|
|
180
|
+
static selectQuery(table) {
|
|
181
|
+
return new query_1.SelectQuery(table);
|
|
182
|
+
}
|
|
183
|
+
static updateQuery(table) {
|
|
184
|
+
return new query_1.UpdateQuery(table);
|
|
185
|
+
}
|
|
186
|
+
static deleteQuery(table) {
|
|
187
|
+
return new query_1.DeleteQuery(table);
|
|
188
|
+
}
|
|
189
|
+
static insertQuery(table) {
|
|
190
|
+
return new query_1.InsertQuery(table);
|
|
191
|
+
}
|
|
192
|
+
// ── Connection ──────────────────────────────────────────────────────────────
|
|
193
|
+
static connection() {
|
|
194
|
+
return this._activeSource.getConnection();
|
|
195
|
+
}
|
|
196
|
+
static async query() {
|
|
197
|
+
const conn = await this.connection();
|
|
198
|
+
// @ts-ignore
|
|
199
|
+
return conn.query(...arguments);
|
|
200
|
+
}
|
|
201
|
+
static async execute() {
|
|
202
|
+
const conn = await this.connection();
|
|
203
|
+
// @ts-ignore
|
|
204
|
+
return conn.execute(...arguments);
|
|
205
|
+
}
|
|
206
|
+
// ── Transactions ────────────────────────────────────────────────────────────
|
|
207
|
+
static async beginTransaction() {
|
|
208
|
+
return (await this.connection()).beginTransaction();
|
|
209
|
+
}
|
|
210
|
+
static async commitTransaction() {
|
|
211
|
+
return (await this.connection()).commitTransaction();
|
|
212
|
+
}
|
|
213
|
+
static async rollbackTransaction() {
|
|
214
|
+
return (await this.connection()).rollbackTransaction();
|
|
215
|
+
}
|
|
216
|
+
static async executeTransaction(callback) {
|
|
217
|
+
return (await this.connection()).executeTransaction(callback);
|
|
218
|
+
}
|
|
219
|
+
// ── Private helpers ─────────────────────────────────────────────────────────
|
|
220
|
+
static getActiveSource() {
|
|
221
|
+
return this._activeSource;
|
|
222
|
+
}
|
|
223
|
+
static get _activeSource() {
|
|
224
|
+
this._ensureConfigured();
|
|
225
|
+
return this._sources.get(this._activeSourceName);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
exports.DB = DB;
|
|
229
|
+
//# sourceMappingURL=DB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DB.js","sourceRoot":"","sources":["../../src/database/DB.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Query, QueryBuilder } from '../query';
|
|
2
|
+
import { Connection } from './Connection';
|
|
3
|
+
import { DataSet } from './DataSet';
|
|
4
|
+
export declare class DataConnection {
|
|
5
|
+
private connection;
|
|
6
|
+
private queryBuilder;
|
|
7
|
+
private debug;
|
|
8
|
+
private readonly;
|
|
9
|
+
constructor(connection: Connection, queryBuilder: QueryBuilder);
|
|
10
|
+
setDebugEnabled(debug: boolean): void;
|
|
11
|
+
isDebugEnabled(): boolean;
|
|
12
|
+
setReadonly(readonly: boolean): void;
|
|
13
|
+
isReadonly(): boolean;
|
|
14
|
+
beginTransaction(): Promise<void>;
|
|
15
|
+
rollbackTransaction(): Promise<void>;
|
|
16
|
+
commitTransaction(): Promise<void>;
|
|
17
|
+
lastInsertId(): Promise<number>;
|
|
18
|
+
close(): Promise<void>;
|
|
19
|
+
query(sql: string, bindings?: Array<any>): Promise<Array<DataSet>>;
|
|
20
|
+
query(query: Query): Promise<Array<DataSet>>;
|
|
21
|
+
execute(sql: string, bindings?: Array<any>): Promise<number>;
|
|
22
|
+
execute(query: Query): Promise<number>;
|
|
23
|
+
executeTransaction(transaction: (connection: DataConnection) => Promise<void>): Promise<void>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataConnection = void 0;
|
|
4
|
+
const query_1 = require("../query");
|
|
5
|
+
const utilities_1 = require("../utilities");
|
|
6
|
+
class DataConnection {
|
|
7
|
+
constructor(connection, queryBuilder) {
|
|
8
|
+
this.debug = false;
|
|
9
|
+
this.readonly = false;
|
|
10
|
+
this.connection = connection;
|
|
11
|
+
this.queryBuilder = queryBuilder;
|
|
12
|
+
}
|
|
13
|
+
setDebugEnabled(debug) {
|
|
14
|
+
this.debug = debug;
|
|
15
|
+
}
|
|
16
|
+
isDebugEnabled() {
|
|
17
|
+
return this.debug;
|
|
18
|
+
}
|
|
19
|
+
setReadonly(readonly) {
|
|
20
|
+
this.readonly = readonly;
|
|
21
|
+
}
|
|
22
|
+
isReadonly() {
|
|
23
|
+
return this.readonly;
|
|
24
|
+
}
|
|
25
|
+
async beginTransaction() {
|
|
26
|
+
if (this.debug) {
|
|
27
|
+
(0, utilities_1.debugLog)('[BEGIN TRANSACTION]');
|
|
28
|
+
}
|
|
29
|
+
if (!this.readonly) {
|
|
30
|
+
await this.connection.beginTransaction();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async rollbackTransaction() {
|
|
34
|
+
if (this.debug) {
|
|
35
|
+
(0, utilities_1.debugLog)('[ROLLBACK TRANSACTION]');
|
|
36
|
+
}
|
|
37
|
+
if (!this.readonly) {
|
|
38
|
+
await this.connection.rollbackTransaction();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async commitTransaction() {
|
|
42
|
+
if (this.debug) {
|
|
43
|
+
(0, utilities_1.debugLog)('[COMMIT TRANSACTION]');
|
|
44
|
+
}
|
|
45
|
+
if (!this.readonly) {
|
|
46
|
+
await this.connection.commitTransaction();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async lastInsertId() {
|
|
50
|
+
return this.connection.lastInsertId();
|
|
51
|
+
}
|
|
52
|
+
async close() {
|
|
53
|
+
await this.connection.close();
|
|
54
|
+
}
|
|
55
|
+
async query(sqlOrQuery, bindings) {
|
|
56
|
+
if (sqlOrQuery instanceof query_1.Query) {
|
|
57
|
+
const statement = this.queryBuilder.buildQuery(sqlOrQuery);
|
|
58
|
+
sqlOrQuery = statement.sql;
|
|
59
|
+
bindings = statement.bindings;
|
|
60
|
+
}
|
|
61
|
+
if (this.debug) {
|
|
62
|
+
(0, utilities_1.debugLog)('SQL: ' +
|
|
63
|
+
sqlOrQuery +
|
|
64
|
+
';' +
|
|
65
|
+
(bindings
|
|
66
|
+
? ' [' + bindings.map((value) => (typeof value === 'string' ? '"' + value + '"' : value)).join(', ') + ']'
|
|
67
|
+
: ''));
|
|
68
|
+
}
|
|
69
|
+
return await this.connection.query(sqlOrQuery, bindings);
|
|
70
|
+
}
|
|
71
|
+
async execute(sqlOrQuery, bindings) {
|
|
72
|
+
if (sqlOrQuery instanceof query_1.Query) {
|
|
73
|
+
const statement = this.queryBuilder.buildQuery(sqlOrQuery);
|
|
74
|
+
sqlOrQuery = statement.sql;
|
|
75
|
+
bindings = statement.bindings;
|
|
76
|
+
}
|
|
77
|
+
if (this.debug) {
|
|
78
|
+
(0, utilities_1.debugLog)('SQL: ' +
|
|
79
|
+
sqlOrQuery +
|
|
80
|
+
';' +
|
|
81
|
+
(bindings
|
|
82
|
+
? ' [' + bindings.map((value) => (typeof value === 'string' ? '"' + value + '"' : value)).join(', ') + ']'
|
|
83
|
+
: ''));
|
|
84
|
+
}
|
|
85
|
+
return this.readonly ? 0 : await this.connection.execute(sqlOrQuery, bindings);
|
|
86
|
+
}
|
|
87
|
+
async executeTransaction(transaction) {
|
|
88
|
+
await this.beginTransaction();
|
|
89
|
+
try {
|
|
90
|
+
await transaction(this);
|
|
91
|
+
await this.commitTransaction();
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
await this.rollbackTransaction();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.DataConnection = DataConnection;
|
|
99
|
+
//# sourceMappingURL=DataConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataConnection.js","sourceRoot":"","sources":["../../src/database/DataConnection.ts"],"names":[],"mappings":";;;AAAA,oCAA8C;AAC9C,4CAAuC;AAIvC,MAAa,cAAc;IAMzB,YAAY,UAAsB,EAAE,YAA0B;QAHtD,UAAK,GAAG,KAAK,CAAA;QACb,aAAQ,GAAG,KAAK,CAAA;QAGtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEM,eAAe,CAAC,KAAc;QACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAEM,WAAW,CAAC,QAAiB;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEM,UAAU;QACf,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAEM,KAAK,CAAC,gBAAgB;QAC3B,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAA,oBAAQ,EAAC,qBAAqB,CAAC,CAAA;SAChC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAA;SACzC;IACH,CAAC;IAEM,KAAK,CAAC,mBAAmB;QAC9B,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAA,oBAAQ,EAAC,wBAAwB,CAAC,CAAA;SACnC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAA;SAC5C;IACH,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAA,oBAAQ,EAAC,sBAAsB,CAAC,CAAA;SACjC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAA;SAC1C;IACH,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAA;IACvC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;IAC/B,CAAC;IAIM,KAAK,CAAC,KAAK,CAAC,UAA0B,EAAE,QAAqB;QAClE,IAAI,UAAU,YAAY,aAAK,EAAE;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;YAE1D,UAAU,GAAG,SAAS,CAAC,GAAG,CAAA;YAC1B,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAA;SAC9B;QAED,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAA,oBAAQ,EACN,OAAO;gBACL,UAAU;gBACV,GAAG;gBACH,CAAC,QAAQ;oBACP,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG;oBAC5G,CAAC,CAAC,EAAE,CAAC,CACV,CAAA;SACF;QAED,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAoB,EAAE,QAAQ,CAAC,CAAA;IACpE,CAAC;IAIM,KAAK,CAAC,OAAO,CAAC,UAA0B,EAAE,QAAqB;QACpE,IAAI,UAAU,YAAY,aAAK,EAAE;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;YAE1D,UAAU,GAAG,SAAS,CAAC,GAAG,CAAA;YAC1B,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAA;SAC9B;QAED,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAA,oBAAQ,EACN,OAAO;gBACL,UAAU;gBACV,GAAG;gBACH,CAAC,QAAQ;oBACP,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG;oBAC5G,CAAC,CAAC,EAAE,CAAC,CACV,CAAA;SACF;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAoB,EAAE,QAAQ,CAAC,CAAA;IAC1F,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,WAA0D;QACxF,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAE7B,IAAI;YACF,MAAM,WAAW,CAAC,IAAI,CAAC,CAAA;YACvB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;SAC/B;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAA;SACjC;IACH,CAAC;CACF;AA3HD,wCA2HC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataSet.js","sourceRoot":"","sources":["../../src/database/DataSet.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Query, QueryBuilder } from '../query';
|
|
2
|
+
import { Connection } from './Connection';
|
|
3
|
+
import { DataConnection } from './DataConnection';
|
|
4
|
+
import { DataSet } from './DataSet';
|
|
5
|
+
import { DataTable } from './DataTable';
|
|
6
|
+
export declare abstract class DataSource {
|
|
7
|
+
protected debug: boolean;
|
|
8
|
+
protected readonly: boolean;
|
|
9
|
+
protected queryBuilder: QueryBuilder;
|
|
10
|
+
constructor(queryBuilder?: QueryBuilder);
|
|
11
|
+
setDebugEnabled(debug: boolean): void;
|
|
12
|
+
isDebugEnabled(): boolean;
|
|
13
|
+
setReadonly(readonly: boolean): void;
|
|
14
|
+
isReadonly(): boolean;
|
|
15
|
+
table(tableName: string): DataTable;
|
|
16
|
+
getConnection(): Promise<DataConnection>;
|
|
17
|
+
query(sql: string, bindings?: Array<any>): Promise<Array<DataSet>>;
|
|
18
|
+
query(query: Query): Promise<Array<DataSet>>;
|
|
19
|
+
execute(sql: string, bindings?: Array<any>): Promise<number>;
|
|
20
|
+
execute(query: Query): Promise<number>;
|
|
21
|
+
protected abstract requestConnection(): Promise<Connection>;
|
|
22
|
+
abstract close(): Promise<void>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataSource = void 0;
|
|
4
|
+
const query_1 = require("../query");
|
|
5
|
+
const DataConnection_1 = require("./DataConnection");
|
|
6
|
+
const DataTable_1 = require("./DataTable");
|
|
7
|
+
class DataSource {
|
|
8
|
+
constructor(queryBuilder) {
|
|
9
|
+
this.debug = false;
|
|
10
|
+
this.readonly = false;
|
|
11
|
+
this.queryBuilder = queryBuilder !== null && queryBuilder !== void 0 ? queryBuilder : new query_1.DefaultQueryBuilder();
|
|
12
|
+
}
|
|
13
|
+
setDebugEnabled(debug) {
|
|
14
|
+
this.debug = debug;
|
|
15
|
+
}
|
|
16
|
+
isDebugEnabled() {
|
|
17
|
+
return this.debug;
|
|
18
|
+
}
|
|
19
|
+
setReadonly(readonly) {
|
|
20
|
+
this.readonly = readonly;
|
|
21
|
+
}
|
|
22
|
+
isReadonly() {
|
|
23
|
+
return this.readonly;
|
|
24
|
+
}
|
|
25
|
+
table(tableName) {
|
|
26
|
+
return new DataTable_1.DataTable(this, tableName);
|
|
27
|
+
}
|
|
28
|
+
async getConnection() {
|
|
29
|
+
const connection = new DataConnection_1.DataConnection(await this.requestConnection(), this.queryBuilder);
|
|
30
|
+
connection.setDebugEnabled(this.debug);
|
|
31
|
+
connection.setReadonly(this.readonly);
|
|
32
|
+
return connection;
|
|
33
|
+
}
|
|
34
|
+
async query() {
|
|
35
|
+
const connection = await this.getConnection();
|
|
36
|
+
try {
|
|
37
|
+
// @ts-ignore
|
|
38
|
+
return await connection.query(...arguments);
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
await connection.close();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async execute() {
|
|
45
|
+
const connection = await this.getConnection();
|
|
46
|
+
try {
|
|
47
|
+
// @ts-ignore
|
|
48
|
+
return await connection.execute(...arguments);
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
await connection.close();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.DataSource = DataSource;
|
|
56
|
+
//# sourceMappingURL=DataSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataSource.js","sourceRoot":"","sources":["../../src/database/DataSource.ts"],"names":[],"mappings":";;;AAAA,oCAAmE;AAEnE,qDAAiD;AAEjD,2CAAuC;AAEvC,MAAsB,UAAU;IAK9B,YAAY,YAA2B;QAJ7B,UAAK,GAAG,KAAK,CAAA;QACb,aAAQ,GAAG,KAAK,CAAA;QAIxB,IAAI,CAAC,YAAY,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,2BAAmB,EAAE,CAAA;IAC/D,CAAC;IAEM,eAAe,CAAC,KAAc;QACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAEM,WAAW,CAAC,QAAiB;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEM,UAAU;QACf,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAEM,KAAK,CAAC,SAAiB;QAC5B,OAAO,IAAI,qBAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACvC,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,UAAU,GAAG,IAAI,+BAAc,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QAExF,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACtC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAErC,OAAO,UAAU,CAAA;IACnB,CAAC;IAIM,KAAK,CAAC,KAAK;QAChB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;QAE7C,IAAI;YACF,aAAa;YACb,OAAO,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAA;SAC5C;gBAAS;YACR,MAAM,UAAU,CAAC,KAAK,EAAE,CAAA;SACzB;IACH,CAAC;IAIM,KAAK,CAAC,OAAO;QAClB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;QAE7C,IAAI;YACF,aAAa;YACb,OAAO,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAAA;SAC9C;gBAAS;YACR,MAAM,UAAU,CAAC,KAAK,EAAE,CAAA;SACzB;IACH,CAAC;CAIF;AAlED,gCAkEC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { HasAlias, HasDistinct, HasFieldValues, HasGroupByFields, HasHavingConditions, HasJoins, HasLimit, HasOffset, HasSelectFields, HasTable, HasWhen, HasWhereConditions } from '../query';
|
|
2
|
+
import { HasOrderByFields } from '../query/features/HasOrderByFields';
|
|
3
|
+
import { DataSet } from './DataSet';
|
|
4
|
+
import { DataSource } from './DataSource';
|
|
5
|
+
export declare class DataTable {
|
|
6
|
+
private source;
|
|
7
|
+
constructor(source: DataSource, name: string);
|
|
8
|
+
get(): Promise<Array<DataSet>>;
|
|
9
|
+
first(): Promise<DataSet | null>;
|
|
10
|
+
insert(fields?: DataSet): Promise<number>;
|
|
11
|
+
update(fields?: DataSet): Promise<number>;
|
|
12
|
+
delete(): Promise<number>;
|
|
13
|
+
private createSelectQuery;
|
|
14
|
+
private createInsertQuery;
|
|
15
|
+
private createUpdateQuery;
|
|
16
|
+
private createDeleteQuery;
|
|
17
|
+
}
|
|
18
|
+
export interface DataTable extends HasDistinct<DataTable>, HasLimit<DataTable>, HasOffset<DataTable>, HasOrderByFields<DataTable>, HasGroupByFields<DataTable>, HasFieldValues<DataTable>, HasSelectFields<DataTable>, HasTable<DataTable>, HasAlias<DataTable>, HasWhereConditions<DataTable>, HasHavingConditions<DataTable>, HasJoins<DataTable>, HasWhen<DataTable> {
|
|
19
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataTable = void 0;
|
|
4
|
+
const query_1 = require("../query");
|
|
5
|
+
const HasOrderByFields_1 = require("../query/features/HasOrderByFields");
|
|
6
|
+
const utilities_1 = require("../utilities");
|
|
7
|
+
class DataTable {
|
|
8
|
+
constructor(source, name) {
|
|
9
|
+
this.source = source;
|
|
10
|
+
this.setTable(name);
|
|
11
|
+
}
|
|
12
|
+
async get() {
|
|
13
|
+
return await this.source.query(this.createSelectQuery());
|
|
14
|
+
}
|
|
15
|
+
async first() {
|
|
16
|
+
const records = await this.source.query(this.createSelectQuery().setLimit(1));
|
|
17
|
+
return records && records.length > 0 ? records[0] : null;
|
|
18
|
+
}
|
|
19
|
+
async insert(fields) {
|
|
20
|
+
if (fields) {
|
|
21
|
+
this.setFields(fields);
|
|
22
|
+
}
|
|
23
|
+
return await this.source.execute(this.createInsertQuery());
|
|
24
|
+
}
|
|
25
|
+
async update(fields) {
|
|
26
|
+
if (fields) {
|
|
27
|
+
this.setFields(fields);
|
|
28
|
+
}
|
|
29
|
+
return await this.source.execute(this.createUpdateQuery());
|
|
30
|
+
}
|
|
31
|
+
async delete() {
|
|
32
|
+
return await this.source.execute(this.createDeleteQuery());
|
|
33
|
+
}
|
|
34
|
+
createSelectQuery() {
|
|
35
|
+
return new query_1.SelectQuery()
|
|
36
|
+
.setTable(this._table)
|
|
37
|
+
.setDistinct(this._distinct)
|
|
38
|
+
.setLimit(this._limit)
|
|
39
|
+
.setOffset(this._offset)
|
|
40
|
+
.setOrderByFields(this._orderByFields)
|
|
41
|
+
.setGroupByFields(this._groupByFields)
|
|
42
|
+
.setFields(this._fields)
|
|
43
|
+
.setSelectFields(this._selectFields)
|
|
44
|
+
.setAlias(this._alias)
|
|
45
|
+
.setWhereConditions(this._whereConditions)
|
|
46
|
+
.setHavingConditions(this._havingConditions)
|
|
47
|
+
.setJoins(this._joins);
|
|
48
|
+
}
|
|
49
|
+
createInsertQuery() {
|
|
50
|
+
return new query_1.InsertQuery().setTable(this._table).setFields(this._fields);
|
|
51
|
+
}
|
|
52
|
+
createUpdateQuery() {
|
|
53
|
+
return new query_1.UpdateQuery().setTable(this._table).setFields(this._fields).setWhereConditions(this._whereConditions);
|
|
54
|
+
}
|
|
55
|
+
createDeleteQuery() {
|
|
56
|
+
return new query_1.DeleteQuery().setTable(this._table).setWhereConditions(this._whereConditions);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.DataTable = DataTable;
|
|
60
|
+
(0, utilities_1.applyMixins)(DataTable, [
|
|
61
|
+
query_1.HasDistinct,
|
|
62
|
+
query_1.HasLimit,
|
|
63
|
+
query_1.HasOffset,
|
|
64
|
+
HasOrderByFields_1.HasOrderByFields,
|
|
65
|
+
query_1.HasGroupByFields,
|
|
66
|
+
query_1.HasFieldValues,
|
|
67
|
+
query_1.HasSelectFields,
|
|
68
|
+
query_1.HasTable,
|
|
69
|
+
query_1.HasAlias,
|
|
70
|
+
query_1.HasWhereConditions,
|
|
71
|
+
query_1.HasHavingConditions,
|
|
72
|
+
query_1.HasJoins,
|
|
73
|
+
query_1.HasWhen
|
|
74
|
+
]);
|
|
75
|
+
//# sourceMappingURL=DataTable.js.map
|