oak-db 3.2.0 → 3.2.1
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/LICENSE +232 -0
- package/README.md +3 -37
- package/lib/MySQL/connector.d.ts +15 -15
- package/lib/MySQL/connector.js +78 -117
- package/lib/MySQL/store.d.ts +36 -35
- package/lib/MySQL/store.js +304 -304
- package/lib/MySQL/translator.d.ts +107 -108
- package/lib/MySQL/translator.js +8 -5
- package/lib/MySQL/types/Configuration.d.ts +11 -11
- 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 -56
- package/lib/sqlTranslator.js +982 -982
- package/lib/types/Translator.d.ts +3 -0
- package/lib/types/Translator.js +2 -1
- package/package.json +3 -3
|
@@ -1,108 +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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
static
|
|
15
|
-
static
|
|
16
|
-
static
|
|
17
|
-
static
|
|
18
|
-
static
|
|
19
|
-
static
|
|
20
|
-
static
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
protected
|
|
96
|
-
protected
|
|
97
|
-
protected
|
|
98
|
-
protected
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
private
|
|
103
|
-
|
|
104
|
-
protected
|
|
105
|
-
protected
|
|
106
|
-
protected
|
|
107
|
-
|
|
108
|
-
}
|
|
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
|
@@ -527,14 +527,17 @@ class MySqlTranslator extends sqlTranslator_1.SqlTranslator {
|
|
|
527
527
|
return ` match(${columns2.join(',')}) against ('${$search}' in natural language mode)`;
|
|
528
528
|
}
|
|
529
529
|
translateCreateEntity(entity, options) {
|
|
530
|
-
const
|
|
530
|
+
const ifExists = options?.ifExists;
|
|
531
531
|
const { schema } = this;
|
|
532
532
|
const entityDef = schema[entity];
|
|
533
|
-
const { storageName, attributes, indexes, view } = entityDef;
|
|
533
|
+
const { storageName, attributes, indexes, view, static: _static } = entityDef;
|
|
534
534
|
let hasSequence = false;
|
|
535
535
|
// todo view暂还不支持
|
|
536
536
|
const entityType = view ? 'view' : 'table';
|
|
537
537
|
let sql = `create ${entityType} `;
|
|
538
|
+
if (ifExists === 'omit' || (_static && ifExists === 'dropIfNotStatic')) {
|
|
539
|
+
sql += ' if not exists';
|
|
540
|
+
}
|
|
538
541
|
if (storageName) {
|
|
539
542
|
sql += `\`${storageName}\` `;
|
|
540
543
|
}
|
|
@@ -629,10 +632,10 @@ class MySqlTranslator extends sqlTranslator_1.SqlTranslator {
|
|
|
629
632
|
if (typeof hasSequence === 'number') {
|
|
630
633
|
sql += `auto_increment = ${hasSequence}`;
|
|
631
634
|
}
|
|
632
|
-
if (!
|
|
633
|
-
return [sql];
|
|
635
|
+
if (ifExists === 'drop' || (!_static && ifExists === 'dropIfNotStatic')) {
|
|
636
|
+
return [`drop ${entityType} if exists \`${storageName || entity}\`;`, sql];
|
|
634
637
|
}
|
|
635
|
-
return [
|
|
638
|
+
return [sql];
|
|
636
639
|
}
|
|
637
640
|
translateFnName(fnName, argumentNumber) {
|
|
638
641
|
switch (fnName) {
|
|
@@ -1,11 +1,11 @@
|
|
|
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
|
-
};
|
|
9
|
-
export type Configuration = {
|
|
10
|
-
mysql: MySQLConfiguration;
|
|
11
|
-
};
|
|
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
|
+
};
|
|
9
|
+
export type Configuration = {
|
|
10
|
+
mysql: MySQLConfiguration;
|
|
11
|
+
};
|
|
@@ -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,56 +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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
protected abstract
|
|
14
|
-
protected abstract
|
|
15
|
-
protected abstract
|
|
16
|
-
protected abstract
|
|
17
|
-
abstract
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
protected abstract
|
|
21
|
-
protected abstract
|
|
22
|
-
protected abstract
|
|
23
|
-
protected abstract
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* {
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
private
|
|
41
|
-
private
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
private
|
|
45
|
-
private
|
|
46
|
-
private
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
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
|
+
}
|