oak-db 3.3.2 → 3.3.4
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/lib/MySQL/connector.d.ts +15 -15
- package/lib/MySQL/connector.js +77 -77
- package/lib/MySQL/store.d.ts +1 -1
- package/lib/MySQL/store.js +2 -2
- package/lib/MySQL/translator.d.ts +107 -107
- package/lib/MySQL/translator.js +11 -11
- package/lib/MySQL/types/Configuration.d.ts +12 -12
- package/lib/MySQL/types/Configuration.js +2 -2
- package/lib/index.d.ts +2 -2
- package/lib/index.js +4 -4
- package/lib/sqlTranslator.d.ts +55 -55
- package/lib/types/Translator.d.ts +3 -3
- package/lib/types/Translator.js +2 -2
- package/package.json +3 -3
package/lib/MySQL/connector.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import mysql, { Pool } from 'mysql2/promise';
|
|
2
|
-
import { TxnOption } from 'oak-domain/lib/types';
|
|
3
|
-
import { MySQLConfiguration } from './types/Configuration';
|
|
4
|
-
export declare class MySqlConnector {
|
|
5
|
-
pool: Pool;
|
|
6
|
-
configuration: MySQLConfiguration;
|
|
7
|
-
txnDict: Record<string, mysql.PoolConnection>;
|
|
8
|
-
constructor(configuration: MySQLConfiguration);
|
|
9
|
-
connect(): void;
|
|
10
|
-
disconnect(): Promise<void>;
|
|
11
|
-
startTransaction(option?: TxnOption): Promise<string>;
|
|
12
|
-
exec(sql: string, txn?: string): Promise<any>;
|
|
13
|
-
commitTransaction(txn: string): Promise<void>;
|
|
14
|
-
rollbackTransaction(txn: string): Promise<void>;
|
|
15
|
-
}
|
|
1
|
+
import mysql, { Pool } from 'mysql2/promise';
|
|
2
|
+
import { TxnOption } from 'oak-domain/lib/types';
|
|
3
|
+
import { MySQLConfiguration } from './types/Configuration';
|
|
4
|
+
export declare class MySqlConnector {
|
|
5
|
+
pool: Pool;
|
|
6
|
+
configuration: MySQLConfiguration;
|
|
7
|
+
txnDict: Record<string, mysql.PoolConnection>;
|
|
8
|
+
constructor(configuration: MySQLConfiguration);
|
|
9
|
+
connect(): void;
|
|
10
|
+
disconnect(): Promise<void>;
|
|
11
|
+
startTransaction(option?: TxnOption): Promise<string>;
|
|
12
|
+
exec(sql: string, txn?: string): Promise<any>;
|
|
13
|
+
commitTransaction(txn: string): Promise<void>;
|
|
14
|
+
rollbackTransaction(txn: string): Promise<void>;
|
|
15
|
+
}
|
package/lib/MySQL/connector.js
CHANGED
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MySqlConnector = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const promise_1 = tslib_1.__importDefault(require("mysql2/promise"));
|
|
6
|
-
const uuid_1 = require("uuid");
|
|
7
|
-
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
8
|
-
class MySqlConnector {
|
|
9
|
-
pool;
|
|
10
|
-
configuration;
|
|
11
|
-
txnDict;
|
|
12
|
-
constructor(configuration) {
|
|
13
|
-
this.configuration = configuration;
|
|
14
|
-
this.txnDict = {};
|
|
15
|
-
this.pool = promise_1.default.createPool(this.configuration);
|
|
16
|
-
}
|
|
17
|
-
connect() {
|
|
18
|
-
}
|
|
19
|
-
disconnect() {
|
|
20
|
-
return this.pool.end();
|
|
21
|
-
}
|
|
22
|
-
async startTransaction(option) {
|
|
23
|
-
// 防止用户配置connection可复用
|
|
24
|
-
const startInner = async () => {
|
|
25
|
-
const connection = await this.pool.getConnection();
|
|
26
|
-
// 分配出来的connection不能被别的事务占据
|
|
27
|
-
for (const txn2 in this.txnDict) {
|
|
28
|
-
if (this.txnDict[txn2] === connection) {
|
|
29
|
-
return new Promise((resolve) => {
|
|
30
|
-
this.pool.on('release', () => resolve(startInner()));
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
await connection.beginTransaction();
|
|
35
|
-
const id = (0, uuid_1.v4)();
|
|
36
|
-
// console.log('start_txn', id, connection.threadId);
|
|
37
|
-
this.txnDict[id] = connection;
|
|
38
|
-
if (option?.isolationLevel) {
|
|
39
|
-
await connection.query(`SET TRANSACTION ISOLATION LEVEL ${option.isolationLevel};`);
|
|
40
|
-
}
|
|
41
|
-
return id;
|
|
42
|
-
};
|
|
43
|
-
return startInner();
|
|
44
|
-
}
|
|
45
|
-
async exec(sql, txn) {
|
|
46
|
-
if (process.env.NODE_ENV === 'development') {
|
|
47
|
-
// console.log(sql);
|
|
48
|
-
}
|
|
49
|
-
if (txn) {
|
|
50
|
-
const connection = this.txnDict[txn];
|
|
51
|
-
(0, assert_1.default)(connection);
|
|
52
|
-
const result = await connection.query(sql);
|
|
53
|
-
return result;
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
const result = await this.pool.query(sql);
|
|
57
|
-
return result;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
async commitTransaction(txn) {
|
|
61
|
-
const connection = this.txnDict[txn];
|
|
62
|
-
(0, assert_1.default)(connection);
|
|
63
|
-
delete this.txnDict[txn];
|
|
64
|
-
// console.log('commit_txn', txn, connection.threadId);
|
|
65
|
-
await connection.commit();
|
|
66
|
-
connection.release();
|
|
67
|
-
}
|
|
68
|
-
async rollbackTransaction(txn) {
|
|
69
|
-
const connection = this.txnDict[txn];
|
|
70
|
-
(0, assert_1.default)(connection);
|
|
71
|
-
// console.log('rollback_txn', txn, connection.threadId);
|
|
72
|
-
await connection.rollback();
|
|
73
|
-
delete this.txnDict[txn];
|
|
74
|
-
connection.release();
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
exports.MySqlConnector = MySqlConnector;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MySqlConnector = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const promise_1 = tslib_1.__importDefault(require("mysql2/promise"));
|
|
6
|
+
const uuid_1 = require("uuid");
|
|
7
|
+
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
8
|
+
class MySqlConnector {
|
|
9
|
+
pool;
|
|
10
|
+
configuration;
|
|
11
|
+
txnDict;
|
|
12
|
+
constructor(configuration) {
|
|
13
|
+
this.configuration = configuration;
|
|
14
|
+
this.txnDict = {};
|
|
15
|
+
this.pool = promise_1.default.createPool(this.configuration);
|
|
16
|
+
}
|
|
17
|
+
connect() {
|
|
18
|
+
}
|
|
19
|
+
disconnect() {
|
|
20
|
+
return this.pool.end();
|
|
21
|
+
}
|
|
22
|
+
async startTransaction(option) {
|
|
23
|
+
// 防止用户配置connection可复用
|
|
24
|
+
const startInner = async () => {
|
|
25
|
+
const connection = await this.pool.getConnection();
|
|
26
|
+
// 分配出来的connection不能被别的事务占据
|
|
27
|
+
for (const txn2 in this.txnDict) {
|
|
28
|
+
if (this.txnDict[txn2] === connection) {
|
|
29
|
+
return new Promise((resolve) => {
|
|
30
|
+
this.pool.on('release', () => resolve(startInner()));
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
await connection.beginTransaction();
|
|
35
|
+
const id = (0, uuid_1.v4)();
|
|
36
|
+
// console.log('start_txn', id, connection.threadId);
|
|
37
|
+
this.txnDict[id] = connection;
|
|
38
|
+
if (option?.isolationLevel) {
|
|
39
|
+
await connection.query(`SET TRANSACTION ISOLATION LEVEL ${option.isolationLevel};`);
|
|
40
|
+
}
|
|
41
|
+
return id;
|
|
42
|
+
};
|
|
43
|
+
return startInner();
|
|
44
|
+
}
|
|
45
|
+
async exec(sql, txn) {
|
|
46
|
+
if (process.env.NODE_ENV === 'development') {
|
|
47
|
+
// console.log(sql);
|
|
48
|
+
}
|
|
49
|
+
if (txn) {
|
|
50
|
+
const connection = this.txnDict[txn];
|
|
51
|
+
(0, assert_1.default)(connection);
|
|
52
|
+
const result = await connection.query(sql);
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const result = await this.pool.query(sql);
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async commitTransaction(txn) {
|
|
61
|
+
const connection = this.txnDict[txn];
|
|
62
|
+
(0, assert_1.default)(connection);
|
|
63
|
+
delete this.txnDict[txn];
|
|
64
|
+
// console.log('commit_txn', txn, connection.threadId);
|
|
65
|
+
await connection.commit();
|
|
66
|
+
connection.release();
|
|
67
|
+
}
|
|
68
|
+
async rollbackTransaction(txn) {
|
|
69
|
+
const connection = this.txnDict[txn];
|
|
70
|
+
(0, assert_1.default)(connection);
|
|
71
|
+
// console.log('rollback_txn', txn, connection.threadId);
|
|
72
|
+
await connection.rollback();
|
|
73
|
+
delete this.txnDict[txn];
|
|
74
|
+
connection.release();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.MySqlConnector = MySqlConnector;
|
package/lib/MySQL/store.d.ts
CHANGED
|
@@ -31,6 +31,6 @@ export declare class MysqlStore<ED extends EntityDict & BaseEntityDict, Cxt exte
|
|
|
31
31
|
commit(txnId: string): Promise<void>;
|
|
32
32
|
rollback(txnId: string): Promise<void>;
|
|
33
33
|
connect(): void;
|
|
34
|
-
disconnect(): void
|
|
34
|
+
disconnect(): Promise<void>;
|
|
35
35
|
initialize(option: CreateEntityOption): Promise<void>;
|
|
36
36
|
}
|
package/lib/MySQL/store.js
CHANGED
|
@@ -288,8 +288,8 @@ class MysqlStore extends CascadeStore_1.CascadeStore {
|
|
|
288
288
|
connect() {
|
|
289
289
|
this.connector.connect();
|
|
290
290
|
}
|
|
291
|
-
disconnect() {
|
|
292
|
-
this.connector.disconnect();
|
|
291
|
+
async disconnect() {
|
|
292
|
+
await this.connector.disconnect();
|
|
293
293
|
}
|
|
294
294
|
async initialize(option) {
|
|
295
295
|
const schema = this.getSchema();
|
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
import { EntityDict, Q_FullTextValue, RefOrExpression, Ref, StorageSchema } from "oak-domain/lib/types";
|
|
2
|
-
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
|
|
3
|
-
import { DataType } from "oak-domain/lib/types/schema/DataTypes";
|
|
4
|
-
import { SqlOperateOption, SqlSelectOption, SqlTranslator } from "../sqlTranslator";
|
|
5
|
-
import { CreateEntityOption } from '../types/Translator';
|
|
6
|
-
export interface MySqlSelectOption extends SqlSelectOption {
|
|
7
|
-
}
|
|
8
|
-
export interface MysqlOperateOption extends SqlOperateOption {
|
|
9
|
-
}
|
|
10
|
-
export declare class MySqlTranslator<ED extends EntityDict & BaseEntityDict> extends SqlTranslator<ED> {
|
|
11
|
-
protected getDefaultSelectFilter(alias: string, option?: MySqlSelectOption): string;
|
|
12
|
-
private makeUpSchema;
|
|
13
|
-
constructor(schema: StorageSchema<ED>);
|
|
14
|
-
static supportedDataTypes: DataType[];
|
|
15
|
-
static spatialTypes: DataType[];
|
|
16
|
-
static withLengthDataTypes: DataType[];
|
|
17
|
-
static withPrecisionDataTypes: DataType[];
|
|
18
|
-
static withScaleDataTypes: DataType[];
|
|
19
|
-
static unsignedAndZerofillTypes: DataType[];
|
|
20
|
-
static withWidthDataTypes: DataType[];
|
|
21
|
-
static dataTypeDefaults: {
|
|
22
|
-
varchar: {
|
|
23
|
-
length: number;
|
|
24
|
-
};
|
|
25
|
-
nvarchar: {
|
|
26
|
-
length: number;
|
|
27
|
-
};
|
|
28
|
-
"national varchar": {
|
|
29
|
-
length: number;
|
|
30
|
-
};
|
|
31
|
-
char: {
|
|
32
|
-
length: number;
|
|
33
|
-
};
|
|
34
|
-
binary: {
|
|
35
|
-
length: number;
|
|
36
|
-
};
|
|
37
|
-
varbinary: {
|
|
38
|
-
length: number;
|
|
39
|
-
};
|
|
40
|
-
decimal: {
|
|
41
|
-
precision: number;
|
|
42
|
-
scale: number;
|
|
43
|
-
};
|
|
44
|
-
dec: {
|
|
45
|
-
precision: number;
|
|
46
|
-
scale: number;
|
|
47
|
-
};
|
|
48
|
-
numeric: {
|
|
49
|
-
precision: number;
|
|
50
|
-
scale: number;
|
|
51
|
-
};
|
|
52
|
-
fixed: {
|
|
53
|
-
precision: number;
|
|
54
|
-
scale: number;
|
|
55
|
-
};
|
|
56
|
-
float: {
|
|
57
|
-
precision: number;
|
|
58
|
-
};
|
|
59
|
-
double: {
|
|
60
|
-
precision: number;
|
|
61
|
-
};
|
|
62
|
-
time: {
|
|
63
|
-
precision: number;
|
|
64
|
-
};
|
|
65
|
-
datetime: {
|
|
66
|
-
precision: number;
|
|
67
|
-
};
|
|
68
|
-
timestamp: {
|
|
69
|
-
precision: number;
|
|
70
|
-
};
|
|
71
|
-
bit: {
|
|
72
|
-
width: number;
|
|
73
|
-
};
|
|
74
|
-
int: {
|
|
75
|
-
width: number;
|
|
76
|
-
};
|
|
77
|
-
integer: {
|
|
78
|
-
width: number;
|
|
79
|
-
};
|
|
80
|
-
tinyint: {
|
|
81
|
-
width: number;
|
|
82
|
-
};
|
|
83
|
-
smallint: {
|
|
84
|
-
width: number;
|
|
85
|
-
};
|
|
86
|
-
mediumint: {
|
|
87
|
-
width: number;
|
|
88
|
-
};
|
|
89
|
-
bigint: {
|
|
90
|
-
width: number;
|
|
91
|
-
};
|
|
92
|
-
};
|
|
93
|
-
maxAliasLength: number;
|
|
94
|
-
private populateDataTypeDef;
|
|
95
|
-
protected translateAttrProjection(dataType: DataType, alias: string, attr: string): string;
|
|
96
|
-
protected translateObjectPredicate(predicate: Record<string, any>, alias: string, attr: string): string;
|
|
97
|
-
protected translateObjectProjection(projection: Record<string, any>, alias: string, attr: string, prefix: string): string;
|
|
98
|
-
protected translateAttrValue(dataType: DataType | Ref, value: any): string;
|
|
99
|
-
protected translateFullTextSearch<T extends keyof ED>(value: Q_FullTextValue, entity: T, alias: string): string;
|
|
100
|
-
translateCreateEntity<T extends keyof ED>(entity: T, options?: CreateEntityOption): string[];
|
|
101
|
-
private translateFnName;
|
|
102
|
-
private translateAttrInExpression;
|
|
103
|
-
protected translateExpression<T extends keyof ED>(entity: T, alias: string, expression: RefOrExpression<keyof ED[T]["OpSchema"]>, refDict: Record<string, [string, keyof ED]>): string;
|
|
104
|
-
protected populateSelectStmt<T extends keyof ED>(projectionText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, groupByText?: string, indexFrom?: number, count?: number, option?: MySqlSelectOption): string;
|
|
105
|
-
protected populateUpdateStmt(updateText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, indexFrom?: number, count?: number, option?: MysqlOperateOption): string;
|
|
106
|
-
protected populateRemoveStmt(updateText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, indexFrom?: number, count?: number, option?: MysqlOperateOption): string;
|
|
107
|
-
}
|
|
1
|
+
import { EntityDict, Q_FullTextValue, RefOrExpression, Ref, StorageSchema } from "oak-domain/lib/types";
|
|
2
|
+
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
|
|
3
|
+
import { DataType } from "oak-domain/lib/types/schema/DataTypes";
|
|
4
|
+
import { SqlOperateOption, SqlSelectOption, SqlTranslator } from "../sqlTranslator";
|
|
5
|
+
import { CreateEntityOption } from '../types/Translator';
|
|
6
|
+
export interface MySqlSelectOption extends SqlSelectOption {
|
|
7
|
+
}
|
|
8
|
+
export interface MysqlOperateOption extends SqlOperateOption {
|
|
9
|
+
}
|
|
10
|
+
export declare class MySqlTranslator<ED extends EntityDict & BaseEntityDict> extends SqlTranslator<ED> {
|
|
11
|
+
protected getDefaultSelectFilter(alias: string, option?: MySqlSelectOption): string;
|
|
12
|
+
private makeUpSchema;
|
|
13
|
+
constructor(schema: StorageSchema<ED>);
|
|
14
|
+
static supportedDataTypes: DataType[];
|
|
15
|
+
static spatialTypes: DataType[];
|
|
16
|
+
static withLengthDataTypes: DataType[];
|
|
17
|
+
static withPrecisionDataTypes: DataType[];
|
|
18
|
+
static withScaleDataTypes: DataType[];
|
|
19
|
+
static unsignedAndZerofillTypes: DataType[];
|
|
20
|
+
static withWidthDataTypes: DataType[];
|
|
21
|
+
static dataTypeDefaults: {
|
|
22
|
+
varchar: {
|
|
23
|
+
length: number;
|
|
24
|
+
};
|
|
25
|
+
nvarchar: {
|
|
26
|
+
length: number;
|
|
27
|
+
};
|
|
28
|
+
"national varchar": {
|
|
29
|
+
length: number;
|
|
30
|
+
};
|
|
31
|
+
char: {
|
|
32
|
+
length: number;
|
|
33
|
+
};
|
|
34
|
+
binary: {
|
|
35
|
+
length: number;
|
|
36
|
+
};
|
|
37
|
+
varbinary: {
|
|
38
|
+
length: number;
|
|
39
|
+
};
|
|
40
|
+
decimal: {
|
|
41
|
+
precision: number;
|
|
42
|
+
scale: number;
|
|
43
|
+
};
|
|
44
|
+
dec: {
|
|
45
|
+
precision: number;
|
|
46
|
+
scale: number;
|
|
47
|
+
};
|
|
48
|
+
numeric: {
|
|
49
|
+
precision: number;
|
|
50
|
+
scale: number;
|
|
51
|
+
};
|
|
52
|
+
fixed: {
|
|
53
|
+
precision: number;
|
|
54
|
+
scale: number;
|
|
55
|
+
};
|
|
56
|
+
float: {
|
|
57
|
+
precision: number;
|
|
58
|
+
};
|
|
59
|
+
double: {
|
|
60
|
+
precision: number;
|
|
61
|
+
};
|
|
62
|
+
time: {
|
|
63
|
+
precision: number;
|
|
64
|
+
};
|
|
65
|
+
datetime: {
|
|
66
|
+
precision: number;
|
|
67
|
+
};
|
|
68
|
+
timestamp: {
|
|
69
|
+
precision: number;
|
|
70
|
+
};
|
|
71
|
+
bit: {
|
|
72
|
+
width: number;
|
|
73
|
+
};
|
|
74
|
+
int: {
|
|
75
|
+
width: number;
|
|
76
|
+
};
|
|
77
|
+
integer: {
|
|
78
|
+
width: number;
|
|
79
|
+
};
|
|
80
|
+
tinyint: {
|
|
81
|
+
width: number;
|
|
82
|
+
};
|
|
83
|
+
smallint: {
|
|
84
|
+
width: number;
|
|
85
|
+
};
|
|
86
|
+
mediumint: {
|
|
87
|
+
width: number;
|
|
88
|
+
};
|
|
89
|
+
bigint: {
|
|
90
|
+
width: number;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
maxAliasLength: number;
|
|
94
|
+
private populateDataTypeDef;
|
|
95
|
+
protected translateAttrProjection(dataType: DataType, alias: string, attr: string): string;
|
|
96
|
+
protected translateObjectPredicate(predicate: Record<string, any>, alias: string, attr: string): string;
|
|
97
|
+
protected translateObjectProjection(projection: Record<string, any>, alias: string, attr: string, prefix: string): string;
|
|
98
|
+
protected translateAttrValue(dataType: DataType | Ref, value: any): string;
|
|
99
|
+
protected translateFullTextSearch<T extends keyof ED>(value: Q_FullTextValue, entity: T, alias: string): string;
|
|
100
|
+
translateCreateEntity<T extends keyof ED>(entity: T, options?: CreateEntityOption): string[];
|
|
101
|
+
private translateFnName;
|
|
102
|
+
private translateAttrInExpression;
|
|
103
|
+
protected translateExpression<T extends keyof ED>(entity: T, alias: string, expression: RefOrExpression<keyof ED[T]["OpSchema"]>, refDict: Record<string, [string, keyof ED]>): string;
|
|
104
|
+
protected populateSelectStmt<T extends keyof ED>(projectionText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, groupByText?: string, indexFrom?: number, count?: number, option?: MySqlSelectOption): string;
|
|
105
|
+
protected populateUpdateStmt(updateText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, indexFrom?: number, count?: number, option?: MysqlOperateOption): string;
|
|
106
|
+
protected populateRemoveStmt(updateText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, indexFrom?: number, count?: number, option?: MysqlOperateOption): string;
|
|
107
|
+
}
|
package/lib/MySQL/translator.js
CHANGED
|
@@ -119,21 +119,21 @@ class MySqlTranslator extends sqlTranslator_1.SqlTranslator {
|
|
|
119
119
|
// numeric types
|
|
120
120
|
"bit",
|
|
121
121
|
"int",
|
|
122
|
-
"integer",
|
|
122
|
+
"integer", // synonym for int
|
|
123
123
|
"tinyint",
|
|
124
124
|
"smallint",
|
|
125
125
|
"mediumint",
|
|
126
126
|
"bigint",
|
|
127
127
|
"float",
|
|
128
128
|
"double",
|
|
129
|
-
"double precision",
|
|
130
|
-
"real",
|
|
129
|
+
"double precision", // synonym for double
|
|
130
|
+
"real", // synonym for double
|
|
131
131
|
"decimal",
|
|
132
|
-
"dec",
|
|
133
|
-
"numeric",
|
|
134
|
-
"fixed",
|
|
135
|
-
"bool",
|
|
136
|
-
"boolean",
|
|
132
|
+
"dec", // synonym for decimal
|
|
133
|
+
"numeric", // synonym for decimal
|
|
134
|
+
"fixed", // synonym for decimal
|
|
135
|
+
"bool", // synonym for tinyint
|
|
136
|
+
"boolean", // synonym for tinyint
|
|
137
137
|
// date and time types
|
|
138
138
|
"date",
|
|
139
139
|
"datetime",
|
|
@@ -142,10 +142,10 @@ class MySqlTranslator extends sqlTranslator_1.SqlTranslator {
|
|
|
142
142
|
"year",
|
|
143
143
|
// string types
|
|
144
144
|
"char",
|
|
145
|
-
"nchar",
|
|
145
|
+
"nchar", // synonym for national char
|
|
146
146
|
"national char",
|
|
147
147
|
"varchar",
|
|
148
|
-
"nvarchar",
|
|
148
|
+
"nvarchar", // synonym for national varchar
|
|
149
149
|
"national varchar",
|
|
150
150
|
"blob",
|
|
151
151
|
"text",
|
|
@@ -617,7 +617,7 @@ class MySqlTranslator extends sqlTranslator_1.SqlTranslator {
|
|
|
617
617
|
}
|
|
618
618
|
});
|
|
619
619
|
if (!includeDeleteAt && !type) {
|
|
620
|
-
sql += ',
|
|
620
|
+
sql += ', `$$deleteAt$$`'; // 在mysql80+之后,需要给属性加上``包裹,否则会报错
|
|
621
621
|
}
|
|
622
622
|
sql += ')';
|
|
623
623
|
if (parser) {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export type MySQLConfiguration = {
|
|
2
|
-
host: string;
|
|
3
|
-
user: string;
|
|
4
|
-
password: string;
|
|
5
|
-
database: string;
|
|
6
|
-
charset: 'utf8mb4_general_ci';
|
|
7
|
-
connectionLimit: number;
|
|
8
|
-
port?: number;
|
|
9
|
-
};
|
|
10
|
-
export type Configuration = {
|
|
11
|
-
mysql: MySQLConfiguration;
|
|
12
|
-
};
|
|
1
|
+
export type MySQLConfiguration = {
|
|
2
|
+
host: string;
|
|
3
|
+
user: string;
|
|
4
|
+
password: string;
|
|
5
|
+
database: string;
|
|
6
|
+
charset: 'utf8mb4_general_ci';
|
|
7
|
+
connectionLimit: number;
|
|
8
|
+
port?: number;
|
|
9
|
+
};
|
|
10
|
+
export type Configuration = {
|
|
11
|
+
mysql: MySQLConfiguration;
|
|
12
|
+
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
package/lib/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './MySQL/store';
|
|
2
|
-
export { MySqlSelectOption, MysqlOperateOption } from './MySQL/translator';
|
|
1
|
+
export * from './MySQL/store';
|
|
2
|
+
export { MySqlSelectOption, MysqlOperateOption } from './MySQL/translator';
|
package/lib/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
tslib_1.__exportStar(require("./MySQL/store"), exports);
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./MySQL/store"), exports);
|
package/lib/sqlTranslator.d.ts
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
import { EntityDict, OperateOption, Q_FullTextValue, Ref, RefOrExpression, SelectOption, StorageSchema } from "oak-domain/lib/types";
|
|
2
|
-
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
|
|
3
|
-
import { DataType } from "oak-domain/lib/types/schema/DataTypes";
|
|
4
|
-
import { CreateEntityOption } from './types/Translator';
|
|
5
|
-
export interface SqlSelectOption extends SelectOption {
|
|
6
|
-
}
|
|
7
|
-
export interface SqlOperateOption extends OperateOption {
|
|
8
|
-
}
|
|
9
|
-
export declare abstract class SqlTranslator<ED extends EntityDict & BaseEntityDict> {
|
|
10
|
-
readonly schema: StorageSchema<ED>;
|
|
11
|
-
constructor(schema: StorageSchema<ED>);
|
|
12
|
-
private makeFullSchema;
|
|
13
|
-
protected abstract getDefaultSelectFilter<OP extends SqlSelectOption>(alias: string, option?: OP): string;
|
|
14
|
-
protected abstract translateAttrProjection(dataType: DataType, alias: string, attr: string): string;
|
|
15
|
-
protected abstract translateObjectProjection(projection: Record<string, any>, alias: string, attr: string, prefix: string): string;
|
|
16
|
-
protected abstract translateAttrValue(dataType: DataType | Ref, value: any): string;
|
|
17
|
-
protected abstract translateFullTextSearch<T extends keyof ED>(value: Q_FullTextValue, entity: T, alias: string): string;
|
|
18
|
-
abstract translateCreateEntity<T extends keyof ED>(entity: T, option: CreateEntityOption): string[];
|
|
19
|
-
protected abstract translateObjectPredicate(predicate: Record<string, any>, alias: string, attr: string): string;
|
|
20
|
-
protected abstract populateSelectStmt<T extends keyof ED, OP extends SqlSelectOption>(projectionText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, groupByText?: string, indexFrom?: number, count?: number, option?: OP, selection?: ED[T]['Selection'], aggregation?: ED[T]['Aggregation']): string;
|
|
21
|
-
protected abstract populateUpdateStmt<OP extends SqlOperateOption>(updateText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, indexFrom?: number, count?: number, option?: OP): string;
|
|
22
|
-
protected abstract populateRemoveStmt<OP extends SqlOperateOption>(updateText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, indexFrom?: number, count?: number, option?: OP): string;
|
|
23
|
-
protected abstract translateExpression<T extends keyof ED>(entity: T, alias: string, expression: RefOrExpression<keyof ED[T]['OpSchema']>, refDict: Record<string, [string, keyof ED]>): string;
|
|
24
|
-
private getStorageName;
|
|
25
|
-
translateInsert<T extends keyof ED>(entity: T, data: ED[T]['CreateMulti']['data']): string;
|
|
26
|
-
/**
|
|
27
|
-
* analyze the join relations in projection/query/sort
|
|
28
|
-
* 所有的层次关系都当成left join处理,如果有内表为空的情况,请手动处理
|
|
29
|
-
* {
|
|
30
|
-
* b: {
|
|
31
|
-
* name: {
|
|
32
|
-
* $exists: false,
|
|
33
|
-
* }
|
|
34
|
-
* }
|
|
35
|
-
* }
|
|
36
|
-
* 这样的query会把内表为空的行也返回
|
|
37
|
-
* @param param0
|
|
38
|
-
*/
|
|
39
|
-
private analyzeJoin;
|
|
40
|
-
private translateComparison;
|
|
41
|
-
private translateEvaluation;
|
|
42
|
-
protected translatePredicate(predicate: string, value: any, type?: DataType | Ref): string;
|
|
43
|
-
private translateFilter;
|
|
44
|
-
private translateSorter;
|
|
45
|
-
private translateProjection;
|
|
46
|
-
private translateSelectInner;
|
|
47
|
-
translateSelect<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: ED[T]['Selection'], option?: OP): string;
|
|
48
|
-
translateWhere<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: ED[T]['Selection'], option?: OP): string;
|
|
49
|
-
translateAggregate<T extends keyof ED, OP extends SqlSelectOption>(entity: T, aggregation: ED[T]['Aggregation'], option?: OP): string;
|
|
50
|
-
translateCount<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: Pick<ED[T]['Selection'], 'filter' | 'count'>, option?: OP): string;
|
|
51
|
-
translateRemove<T extends keyof ED, OP extends SqlOperateOption>(entity: T, operation: ED[T]['Remove'], option?: OP): string;
|
|
52
|
-
translateUpdate<T extends keyof ED, OP extends SqlOperateOption>(entity: T, operation: ED[T]['Update'], option?: OP): string;
|
|
53
|
-
translateDestroyEntity(entity: string, truncate?: boolean): string;
|
|
54
|
-
escapeStringValue(value: string): string;
|
|
55
|
-
}
|
|
1
|
+
import { EntityDict, OperateOption, Q_FullTextValue, Ref, RefOrExpression, SelectOption, StorageSchema } from "oak-domain/lib/types";
|
|
2
|
+
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
|
|
3
|
+
import { DataType } from "oak-domain/lib/types/schema/DataTypes";
|
|
4
|
+
import { CreateEntityOption } from './types/Translator';
|
|
5
|
+
export interface SqlSelectOption extends SelectOption {
|
|
6
|
+
}
|
|
7
|
+
export interface SqlOperateOption extends OperateOption {
|
|
8
|
+
}
|
|
9
|
+
export declare abstract class SqlTranslator<ED extends EntityDict & BaseEntityDict> {
|
|
10
|
+
readonly schema: StorageSchema<ED>;
|
|
11
|
+
constructor(schema: StorageSchema<ED>);
|
|
12
|
+
private makeFullSchema;
|
|
13
|
+
protected abstract getDefaultSelectFilter<OP extends SqlSelectOption>(alias: string, option?: OP): string;
|
|
14
|
+
protected abstract translateAttrProjection(dataType: DataType, alias: string, attr: string): string;
|
|
15
|
+
protected abstract translateObjectProjection(projection: Record<string, any>, alias: string, attr: string, prefix: string): string;
|
|
16
|
+
protected abstract translateAttrValue(dataType: DataType | Ref, value: any): string;
|
|
17
|
+
protected abstract translateFullTextSearch<T extends keyof ED>(value: Q_FullTextValue, entity: T, alias: string): string;
|
|
18
|
+
abstract translateCreateEntity<T extends keyof ED>(entity: T, option: CreateEntityOption): string[];
|
|
19
|
+
protected abstract translateObjectPredicate(predicate: Record<string, any>, alias: string, attr: string): string;
|
|
20
|
+
protected abstract populateSelectStmt<T extends keyof ED, OP extends SqlSelectOption>(projectionText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, groupByText?: string, indexFrom?: number, count?: number, option?: OP, selection?: ED[T]['Selection'], aggregation?: ED[T]['Aggregation']): string;
|
|
21
|
+
protected abstract populateUpdateStmt<OP extends SqlOperateOption>(updateText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, indexFrom?: number, count?: number, option?: OP): string;
|
|
22
|
+
protected abstract populateRemoveStmt<OP extends SqlOperateOption>(updateText: string, fromText: string, aliasDict: Record<string, string>, filterText: string, sorterText?: string, indexFrom?: number, count?: number, option?: OP): string;
|
|
23
|
+
protected abstract translateExpression<T extends keyof ED>(entity: T, alias: string, expression: RefOrExpression<keyof ED[T]['OpSchema']>, refDict: Record<string, [string, keyof ED]>): string;
|
|
24
|
+
private getStorageName;
|
|
25
|
+
translateInsert<T extends keyof ED>(entity: T, data: ED[T]['CreateMulti']['data']): string;
|
|
26
|
+
/**
|
|
27
|
+
* analyze the join relations in projection/query/sort
|
|
28
|
+
* 所有的层次关系都当成left join处理,如果有内表为空的情况,请手动处理
|
|
29
|
+
* {
|
|
30
|
+
* b: {
|
|
31
|
+
* name: {
|
|
32
|
+
* $exists: false,
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
* }
|
|
36
|
+
* 这样的query会把内表为空的行也返回
|
|
37
|
+
* @param param0
|
|
38
|
+
*/
|
|
39
|
+
private analyzeJoin;
|
|
40
|
+
private translateComparison;
|
|
41
|
+
private translateEvaluation;
|
|
42
|
+
protected translatePredicate(predicate: string, value: any, type?: DataType | Ref): string;
|
|
43
|
+
private translateFilter;
|
|
44
|
+
private translateSorter;
|
|
45
|
+
private translateProjection;
|
|
46
|
+
private translateSelectInner;
|
|
47
|
+
translateSelect<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: ED[T]['Selection'], option?: OP): string;
|
|
48
|
+
translateWhere<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: ED[T]['Selection'], option?: OP): string;
|
|
49
|
+
translateAggregate<T extends keyof ED, OP extends SqlSelectOption>(entity: T, aggregation: ED[T]['Aggregation'], option?: OP): string;
|
|
50
|
+
translateCount<T extends keyof ED, OP extends SqlSelectOption>(entity: T, selection: Pick<ED[T]['Selection'], 'filter' | 'count'>, option?: OP): string;
|
|
51
|
+
translateRemove<T extends keyof ED, OP extends SqlOperateOption>(entity: T, operation: ED[T]['Remove'], option?: OP): string;
|
|
52
|
+
translateUpdate<T extends keyof ED, OP extends SqlOperateOption>(entity: T, operation: ED[T]['Update'], option?: OP): string;
|
|
53
|
+
translateDestroyEntity(entity: string, truncate?: boolean): string;
|
|
54
|
+
escapeStringValue(value: string): string;
|
|
55
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type CreateEntityOption = {
|
|
2
|
-
ifExists?: 'drop' | 'omit' | 'dropIfNotStatic';
|
|
3
|
-
};
|
|
1
|
+
export type CreateEntityOption = {
|
|
2
|
+
ifExists?: 'drop' | 'omit' | 'dropIfNotStatic';
|
|
3
|
+
};
|
package/lib/types/Translator.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oak-db",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.4",
|
|
4
4
|
"description": "oak-db",
|
|
5
5
|
"main": "lib/index",
|
|
6
6
|
"author": {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"lodash": "^4.17.21",
|
|
19
19
|
"mysql": "^2.18.1",
|
|
20
20
|
"mysql2": "^2.3.3",
|
|
21
|
-
"oak-domain": "^5.1.
|
|
21
|
+
"oak-domain": "^5.1.13",
|
|
22
22
|
"uuid": "^8.3.2"
|
|
23
23
|
},
|
|
24
24
|
"license": "ISC",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@types/uuid": "^8.3.4",
|
|
32
32
|
"cross-env": "^7.0.3",
|
|
33
33
|
"mocha": "^10.2.0",
|
|
34
|
-
"oak-general-business": "~5.5.
|
|
34
|
+
"oak-general-business": "~5.5.0",
|
|
35
35
|
"ts-node": "^10.9.1",
|
|
36
36
|
"tslib": "^2.4.0",
|
|
37
37
|
"typescript": "^5.2.2"
|