taon-type-sql 21.0.22 → 21.0.23
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/browser/package.json +1 -1
- package/browser-prod/package.json +1 -1
- package/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib/build-info._auto-generated_.js +1 -1
- package/lib/package.json +1 -1
- package/lib-prod/build-info._auto-generated_.js +14 -0
- package/lib-prod/builder/column/basic-column.js +13 -0
- package/lib-prod/builder/column/boolean-column.js +14 -0
- package/lib-prod/builder/column/comparable-column.js +42 -0
- package/lib-prod/builder/column/date-column.js +14 -0
- package/lib-prod/builder/column/number-column.js +19 -0
- package/lib-prod/builder/column/query-column.js +24 -0
- package/lib-prod/builder/column/string-column.js +36 -0
- package/lib-prod/builder/column/value-column.js +29 -0
- package/lib-prod/builder/condition/query-column-condition.js +22 -0
- package/lib-prod/builder/condition/query-condition-chain.js +33 -0
- package/lib-prod/builder/condition/query-condition.js +6 -0
- package/lib-prod/builder/condition/query-join-condition.js +22 -0
- package/lib-prod/builder/helpers/generics-helper.js +5 -0
- package/lib-prod/builder/helpers/internal-types.js +0 -0
- package/lib-prod/builder/join/joined-tables-chain.js +14 -0
- package/lib-prod/builder/join/joined-tables.js +22 -0
- package/lib-prod/builder/other/query-ordering.js +20 -0
- package/lib-prod/builder/query/select-query.js +51 -0
- package/lib-prod/builder/query/table-condition-query.js +27 -0
- package/lib-prod/builder/query/table-query.js +54 -0
- package/lib-prod/builder/query-source.js +18 -0
- package/lib-prod/builder/query-table.js +27 -0
- package/lib-prod/client/mysql.js +10 -0
- package/lib-prod/client/pg.js +10 -0
- package/lib-prod/client/query-processor.js +44 -0
- package/lib-prod/converter/param-converter.js +23 -0
- package/lib-prod/converter/parameterized-converter.js +17 -0
- package/lib-prod/converter/query-converter.js +268 -0
- package/lib-prod/converter/result-converter.js +77 -0
- package/lib-prod/converter/sql-converter.js +8 -0
- package/lib-prod/converter/type-converter.js +32 -0
- package/lib-prod/converter/types.js +0 -0
- package/lib-prod/env/env.angular-node-app.js +130 -0
- package/lib-prod/env/env.docs-webapp.js +130 -0
- package/lib-prod/env/env.electron-app.js +130 -0
- package/lib-prod/env/env.mobile-app.js +130 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.js +130 -0
- package/lib-prod/env/env.vscode-plugin.js +130 -0
- package/lib-prod/env/index.js +6 -0
- package/lib-prod/index._auto-generated_.js +0 -0
- package/lib-prod/index.js +46 -0
- package/lib-prod/migrations/index.js +1 -0
- package/lib-prod/migrations/migrations_index._auto-generated_.js +0 -0
- package/lib-prod/package.json +1 -1
- package/package.json +1 -1
- package/websql/package.json +1 -1
- package/websql-prod/package.json +1 -1
- package/lib-prod/build-info._auto-generated_.ts +0 -27
- package/lib-prod/builder/column/basic-column.ts +0 -17
- package/lib-prod/builder/column/boolean-column.ts +0 -19
- package/lib-prod/builder/column/comparable-column.ts +0 -56
- package/lib-prod/builder/column/date-column.ts +0 -19
- package/lib-prod/builder/column/number-column.ts +0 -25
- package/lib-prod/builder/column/query-column.ts +0 -34
- package/lib-prod/builder/column/string-column.ts +0 -47
- package/lib-prod/builder/column/value-column.ts +0 -39
- package/lib-prod/builder/condition/query-column-condition.ts +0 -28
- package/lib-prod/builder/condition/query-condition-chain.ts +0 -42
- package/lib-prod/builder/condition/query-condition.ts +0 -13
- package/lib-prod/builder/condition/query-join-condition.ts +0 -27
- package/lib-prod/builder/helpers/generics-helper.ts +0 -2
- package/lib-prod/builder/helpers/internal-types.ts +0 -31
- package/lib-prod/builder/join/joined-tables-chain.ts +0 -17
- package/lib-prod/builder/join/joined-tables.ts +0 -28
- package/lib-prod/builder/other/query-ordering.ts +0 -26
- package/lib-prod/builder/query/select-query.ts +0 -68
- package/lib-prod/builder/query/table-condition-query.ts +0 -35
- package/lib-prod/builder/query/table-query.ts +0 -72
- package/lib-prod/builder/query-source.ts +0 -25
- package/lib-prod/builder/query-table.ts +0 -34
- package/lib-prod/client/mysql.ts +0 -9
- package/lib-prod/client/pg.ts +0 -9
- package/lib-prod/client/query-processor.ts +0 -89
- package/lib-prod/converter/param-converter.ts +0 -23
- package/lib-prod/converter/parameterized-converter.ts +0 -20
- package/lib-prod/converter/query-converter.ts +0 -296
- package/lib-prod/converter/result-converter.ts +0 -88
- package/lib-prod/converter/sql-converter.ts +0 -7
- package/lib-prod/converter/type-converter.ts +0 -29
- package/lib-prod/converter/types.ts +0 -6
- package/lib-prod/env/env.angular-node-app.ts +0 -66
- package/lib-prod/env/env.docs-webapp.ts +0 -66
- package/lib-prod/env/env.electron-app.ts +0 -66
- package/lib-prod/env/env.mobile-app.ts +0 -66
- package/lib-prod/env/env.npm-lib-and-cli-tool.ts +0 -66
- package/lib-prod/env/env.vscode-plugin.ts +0 -66
- package/lib-prod/env/index.ts +0 -6
- package/lib-prod/index._auto-generated_.ts +0 -5
- package/lib-prod/index.ts +0 -37
- package/lib-prod/lib-info.md +0 -8
- package/lib-prod/migrations/index.ts +0 -2
- package/lib-prod/migrations/migrations-info.md +0 -6
- package/lib-prod/migrations/migrations_index._auto-generated_.ts +0 -5
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import QueryCondition from "../condition/query-condition";
|
|
2
|
-
import QueryOrdering from "../other/query-ordering";
|
|
3
|
-
import QueryTable from "../query-table";
|
|
4
|
-
import QueryColumn from "../column/query-column";
|
|
5
|
-
import { QueryProcessor, QueryAction } from "../helpers/internal-types";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export default class SelectQuery<Entity, Table extends QueryTable<Entity, any>> {
|
|
9
|
-
|
|
10
|
-
constructor(
|
|
11
|
-
protected _queryProcessor: QueryProcessor,
|
|
12
|
-
protected _tables: Table[]
|
|
13
|
-
) {}
|
|
14
|
-
|
|
15
|
-
protected _distinct = false;
|
|
16
|
-
protected _offset: number;
|
|
17
|
-
protected _limit: number;
|
|
18
|
-
protected _conditions: QueryCondition<Table>[] = [];
|
|
19
|
-
protected _groupBy: QueryColumn<Table, any>[] = [];
|
|
20
|
-
protected _having: QueryCondition<Table>[] = [];
|
|
21
|
-
protected _orderings: (QueryColumn<Table, any> | QueryOrdering<Table>)[] = [];
|
|
22
|
-
protected _columns: QueryColumn<Table, any>[] = [];
|
|
23
|
-
protected _action: QueryAction;
|
|
24
|
-
|
|
25
|
-
offset(offset: number): this {
|
|
26
|
-
this._offset = offset;
|
|
27
|
-
return this;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
limit(limit: number): this {
|
|
31
|
-
this._limit = limit;
|
|
32
|
-
return this;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
distinct(): this {
|
|
36
|
-
this._distinct = true;
|
|
37
|
-
return this;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
where(...conditions: QueryCondition<Table>[]): this {
|
|
41
|
-
this._conditions = conditions;
|
|
42
|
-
return this;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
groupBy(...columns: QueryColumn<Table, any>[]): this {
|
|
46
|
-
this._groupBy = columns;
|
|
47
|
-
return this;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
having(...conditions: QueryCondition<Table>[]): this {
|
|
51
|
-
this._having = conditions;
|
|
52
|
-
return this;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
orderBy(...orderings: (QueryColumn<Table, any> | QueryOrdering<Table>)[]): this {
|
|
56
|
-
this._orderings = orderings;
|
|
57
|
-
return this;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
select(): Promise<Entity[]>
|
|
61
|
-
select<T>(column: QueryColumn<Table, T>): Promise<T[]>
|
|
62
|
-
select(...columns: QueryColumn<Table, any>[]): Promise<any[]>
|
|
63
|
-
select(...columns: QueryColumn<Table, any>[]): Promise<any[]> {
|
|
64
|
-
this._columns = columns;
|
|
65
|
-
this._action = 'select';
|
|
66
|
-
return this._queryProcessor(this);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import QueryTable from "../query-table";
|
|
2
|
-
import QueryCondition from "../condition/query-condition";
|
|
3
|
-
import QueryColumn from "../column/query-column";
|
|
4
|
-
import { QueryProcessor, QueryAction } from "../helpers/internal-types";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export default class TableConditionQuery<Entity, Table extends QueryTable<Entity, any>> {
|
|
8
|
-
|
|
9
|
-
constructor(
|
|
10
|
-
protected _queryProcessor: QueryProcessor,
|
|
11
|
-
protected _table: Table,
|
|
12
|
-
protected _conditions: QueryCondition<Table>[]
|
|
13
|
-
) {}
|
|
14
|
-
|
|
15
|
-
protected _columns: QueryColumn<Table, any>[] = [];
|
|
16
|
-
protected _action: QueryAction;
|
|
17
|
-
protected _entity: Entity | Partial<Entity>;
|
|
18
|
-
|
|
19
|
-
update(entity: Partial<Entity>): Promise<number> {
|
|
20
|
-
this._entity = entity;
|
|
21
|
-
this._action = 'update';
|
|
22
|
-
return this._queryProcessor(this);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
delete(): Promise<number> {
|
|
26
|
-
this._action = 'delete';
|
|
27
|
-
return this._queryProcessor(this);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
count(): Promise<number> {
|
|
31
|
-
this._columns = [this._table.$all.count()];
|
|
32
|
-
this._action = 'select';
|
|
33
|
-
return this._queryProcessor(this).then((rows: number[]) => rows[0]);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import QueryTable from "../query-table";
|
|
2
|
-
import TableConditionQuery from "./table-condition-query";
|
|
3
|
-
import QueryCondition from "../condition/query-condition";
|
|
4
|
-
import ValueColumn from "../column/value-column";
|
|
5
|
-
import QueryColumn from "../column/query-column";
|
|
6
|
-
import { QueryProcessor, QueryAction } from "../helpers/internal-types";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export default class TableQuery<Entity, Id, Table extends QueryTable<Entity, Id>> {
|
|
10
|
-
|
|
11
|
-
constructor(
|
|
12
|
-
protected _queryProcessor: QueryProcessor,
|
|
13
|
-
protected _table: Table
|
|
14
|
-
) {}
|
|
15
|
-
|
|
16
|
-
protected _entity: Entity | Entity[] | Partial<Entity>;
|
|
17
|
-
protected _action: QueryAction;
|
|
18
|
-
protected _columns: QueryColumn<Table, any>[] = [];
|
|
19
|
-
|
|
20
|
-
where(...conditions: QueryCondition<Table>[]) {
|
|
21
|
-
return new TableConditionQuery<Entity, Table>(this._queryProcessor, this._table, conditions);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
insert(entity: Entity): Promise<any> // returns the generated ID, but not other kinds of IDs, so the type is unknown (mysql limitations)
|
|
25
|
-
insert(entities: Entity[]): Promise<void>
|
|
26
|
-
insert(param: any): Promise<any> {
|
|
27
|
-
this._entity = param;
|
|
28
|
-
this._action = 'insert';
|
|
29
|
-
return this._queryProcessor(this);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
deleteAll(): Promise<number> {
|
|
33
|
-
this._action = 'delete';
|
|
34
|
-
return this._queryProcessor(this);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
updateAll(entity: Partial<Entity>): Promise<number> {
|
|
38
|
-
this._entity = entity;
|
|
39
|
-
this._action = 'update';
|
|
40
|
-
return this._queryProcessor(this);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
countAll(): Promise<number> {
|
|
44
|
-
this._columns = [this._table.$all.count()];
|
|
45
|
-
this._action = 'select';
|
|
46
|
-
return this._queryProcessor(this).then((rows: any[]) => rows[0]);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
delete(id: Id): Promise<boolean> {
|
|
50
|
-
return this._whereId(id).delete().then(count => count > 0);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
update(id: Id, entity: Partial<Entity>): Promise<boolean> {
|
|
54
|
-
return this._whereId(id).update(entity).then(count => count > 0);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
get(id: Id): Promise<Entity | undefined> {
|
|
58
|
-
let query = this._whereId(id);
|
|
59
|
-
return this._queryProcessor({ _action: 'select', ...query })
|
|
60
|
-
.then((rows: Entity[]) => rows[0]);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
_whereId(id: Id): TableConditionQuery<Entity, Table> {
|
|
64
|
-
// TODO remove assertions if $id typing is fixed
|
|
65
|
-
let $id = (this._table as any).$id;
|
|
66
|
-
if ($id instanceof ValueColumn) {
|
|
67
|
-
return this.where($id.eq(id));
|
|
68
|
-
} else {
|
|
69
|
-
return this.where(...Object.keys($id).map(key => ((this._table as any)[key] as ValueColumn<Table, any>).eq((id as any)[key] as any)));
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import QueryTable from './query-table';
|
|
2
|
-
import SelectQuery from './query/select-query';
|
|
3
|
-
import { QueryProcessor } from "./helpers/internal-types";
|
|
4
|
-
import JoinedTables from "./join/joined-tables";
|
|
5
|
-
import TableQuery from "./query/table-query";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export default class QuerySource {
|
|
9
|
-
|
|
10
|
-
constructor(protected _queryProcessor: QueryProcessor) {}
|
|
11
|
-
|
|
12
|
-
from<Entity, Table1 extends QueryTable<Entity, any>>(table1: Table1 & QueryTable<Entity, any>): SelectQuery<Entity, Table1>
|
|
13
|
-
from<Tables extends QueryTable<any, any>>(tables: JoinedTables<Tables>): SelectQuery<any, Tables>
|
|
14
|
-
from<Table1 extends QueryTable<any, any>, Table2 extends QueryTable<any, any>>(table1: Table1, table2: Table2): SelectQuery<any, Table1 | Table2>
|
|
15
|
-
from<Table1 extends QueryTable<any, any>, Table2 extends QueryTable<any, any>, Table3 extends QueryTable<any, any>>(table1: Table1, table2: Table2, table3: Table3): SelectQuery<any, Table1 | Table2 | Table3>
|
|
16
|
-
from<Entity, Table1 extends QueryTable<any, any>, Table2 extends QueryTable<any, any>, Table3 extends QueryTable<any, any>>(table1: any, table2?: any, table3?: any) {
|
|
17
|
-
if (table3 != null) return new SelectQuery<any, Table1 | Table2 | Table3>(this._queryProcessor, [table1, table2, table3]);
|
|
18
|
-
else if (table2 != null) return new SelectQuery<any, Table1 | Table2>(this._queryProcessor, [table1, table2]);
|
|
19
|
-
return new SelectQuery<Entity, Table1>(this._queryProcessor, [table1]);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
table<Entity, Id, Table extends QueryTable<Entity, Id>>(table: Table & QueryTable<Entity, Id>): TableQuery<Entity, Id, Table> {
|
|
23
|
-
return new TableQuery<Entity, Id, Table>(this._queryProcessor, table);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import BasicColumn from "./column/basic-column";
|
|
2
|
-
import GenericsHelper from "./helpers/generics-helper";
|
|
3
|
-
import JoinedTablesChain from "./join/joined-tables-chain";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
abstract class QueryTable<Entity, Id> {
|
|
7
|
-
|
|
8
|
-
constructor(protected _$name: string) {}
|
|
9
|
-
|
|
10
|
-
protected _$type: GenericsHelper<Entity>;
|
|
11
|
-
protected _$idType: GenericsHelper<Id>;
|
|
12
|
-
|
|
13
|
-
// abstract readonly $id; // FIXME I got a dozen incomprehensible type errors
|
|
14
|
-
|
|
15
|
-
$all = new BasicColumn<this, Entity>(this, '*');
|
|
16
|
-
|
|
17
|
-
innerJoin<JoinTable extends QueryTable<any, any>>(table: JoinTable): JoinedTablesChain<this | JoinTable> {
|
|
18
|
-
return new JoinedTablesChain<this | JoinTable>(table, 'inner', this);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
leftJoin<JoinTable extends QueryTable<any, any>>(table: JoinTable): JoinedTablesChain<this | JoinTable> {
|
|
22
|
-
return new JoinedTablesChain<this | JoinTable>(table, 'left', this);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
rightJoin<JoinTable extends QueryTable<any, any>>(table: JoinTable): JoinedTablesChain<this | JoinTable> {
|
|
26
|
-
return new JoinedTablesChain<this | JoinTable>(table, 'right', this);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
fullJoin<JoinTable extends QueryTable<any, any>>(table: JoinTable): JoinedTablesChain<this | JoinTable> {
|
|
30
|
-
return new JoinedTablesChain<this | JoinTable>(table, 'full', this);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export default QueryTable;
|
package/lib-prod/client/mysql.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import QuerySource from "../builder/query-source";
|
|
2
|
-
import {QueryProcessorOptions, createQueryProcessor} from "./query-processor";
|
|
3
|
-
|
|
4
|
-
export default class MySqlQuerySource extends QuerySource {
|
|
5
|
-
|
|
6
|
-
constructor(client: any, options: QueryProcessorOptions = {}) {
|
|
7
|
-
super(createQueryProcessor(client, options, 'mysql'));
|
|
8
|
-
}
|
|
9
|
-
}
|
package/lib-prod/client/pg.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import QuerySource from "../builder/query-source";
|
|
2
|
-
import {QueryProcessorOptions, createQueryProcessor} from "./query-processor";
|
|
3
|
-
|
|
4
|
-
export default class PgQuerySource extends QuerySource {
|
|
5
|
-
|
|
6
|
-
constructor(client: any, options: QueryProcessorOptions = {}) {
|
|
7
|
-
super(createQueryProcessor(client, options, 'pg'));
|
|
8
|
-
}
|
|
9
|
-
}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { Log, Level } from 'ng2-logger/lib-prod';
|
|
2
|
-
import { convertQueryToParameterizedSQL } from '../converter/parameterized-converter';
|
|
3
|
-
import { convertQueryToSQL } from '../converter/sql-converter';
|
|
4
|
-
import { convertResult } from "../converter/result-converter";
|
|
5
|
-
import { QueryEngine, ConverterOptions } from '../converter/types';
|
|
6
|
-
import { QueryProcessor } from '../builder/helpers/internal-types';
|
|
7
|
-
import { Helpers__NS___fixCommand, Helpers__NS__bigMaxBuffer, Helpers__NS__checkProcess, Helpers__NS__cleanExit, Helpers__NS__clearConsole, Helpers__NS__command, Helpers__NS__commandOutputAsString, Helpers__NS__commandOutputAsStringAsync, Helpers__NS__compilationWrapper, Helpers__NS__contain, Helpers__NS__createFolder, Helpers__NS__createSymLink, Helpers__NS__error, Helpers__NS__execute, Helpers__NS__exists, Helpers__NS__filesFrom, Helpers__NS__foldersFrom, Helpers__NS__getFilesFrom, Helpers__NS__getFoldersFrom, Helpers__NS__getIsBrowser, Helpers__NS__getIsElectron, Helpers__NS__getIsNode, Helpers__NS__getIsRunningInGitBash, Helpers__NS__getIsSupportedTaonTerminal, Helpers__NS__getIsVerboseMode, Helpers__NS__getIsWebSQL, Helpers__NS__getIsWsl, Helpers__NS__getStdio, Helpers__NS__hideNodeWarnings, Helpers__NS__info, Helpers__NS__isBlob, Helpers__NS__isBuffer, Helpers__NS__isClass, Helpers__NS__isExistedSymlink, Helpers__NS__isFile, Helpers__NS__isFolder, Helpers__NS__isRunningInDocker, Helpers__NS__isRunningInLinuxGraphicsCapableEnvironment, Helpers__NS__isSymlinkFileExitedOrUnexisted, Helpers__NS__isSymlinkThatMatchesUrl, Helpers__NS__isUnexistedLink, Helpers__NS__killOnPort, Helpers__NS__killProcess, Helpers__NS__killProcessByPort, Helpers__NS__linksToFolderFrom, Helpers__NS__linksToFoldersFrom, Helpers__NS__log, Helpers__NS__logError, Helpers__NS__logInfo, Helpers__NS__logProc, Helpers__NS__logSuccess, Helpers__NS__logWarn, Helpers__NS__mediaTypeFromSrc, Helpers__NS__mkdirp, Helpers__NS__modifyLineByLine, Helpers__NS__msgCacheClear, Helpers__NS__openFolderInFileExplorer, Helpers__NS__parse, Helpers__NS__pathContainLink, Helpers__NS__questionYesNo, Helpers__NS__readFile, Helpers__NS__readJson, Helpers__NS__readJson5, Helpers__NS__readJsonC, Helpers__NS__relative, Helpers__NS__remove, Helpers__NS__removeEmptyLineFromString, Helpers__NS__removeFileIfExists, Helpers__NS__removeFolderIfExists, Helpers__NS__removeIfExists, Helpers__NS__removeSlashAtBegin, Helpers__NS__removeSlashAtEnd, Helpers__NS__removeSymlinks, Helpers__NS__renderError, Helpers__NS__replaceLinesInFile, Helpers__NS__run, Helpers__NS__runAsyncIn, Helpers__NS__runSyncIn, Helpers__NS__runSyncOrAsync, Helpers__NS__sleep, Helpers__NS__stopApplication, Helpers__NS__stringify, Helpers__NS__success, Helpers__NS__taskDone, Helpers__NS__taskStarted, Helpers__NS__throwError, Helpers__NS__timeout, Helpers__NS__tryCatchError, Helpers__NS__tryReadFile, Helpers__NS__tryRemoveDir, Helpers__NS__values, Helpers__NS__wait, Helpers__NS__warn, Helpers__NS__writeFile, Helpers__NS__writeJson, Helpers__NS__writeJson5, Helpers__NS__writeJsonC } from 'tnp-core/lib-prod';
|
|
8
|
-
|
|
9
|
-
const log = Log.create('query processor',
|
|
10
|
-
// Level.__NOTHING
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
export interface QueryProcessorOptions {
|
|
14
|
-
lineBreaks?: boolean,
|
|
15
|
-
parameterized?: boolean,
|
|
16
|
-
logging?: boolean,
|
|
17
|
-
logger?: (sql: string, params?: any[]) => void,
|
|
18
|
-
identifierQuote?: string
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const DEFAULT_OPTIONS: QueryProcessorOptions = {
|
|
22
|
-
lineBreaks: false,
|
|
23
|
-
parameterized: true,
|
|
24
|
-
logging: true,
|
|
25
|
-
identifierQuote: '"'
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
function mySqlTypeCast(field: any, next: any) {
|
|
29
|
-
if (field.type == 'TINY' && field.length == 1) { // Boolean
|
|
30
|
-
let value = field.string();
|
|
31
|
-
if (value == '1') return true;
|
|
32
|
-
if (value == '0') return false;
|
|
33
|
-
return null;
|
|
34
|
-
} else if (field.type == 'JSON') {
|
|
35
|
-
let value = field.string();
|
|
36
|
-
return value == null ? null : JSON.parse(value);
|
|
37
|
-
}
|
|
38
|
-
return next();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export function createQueryProcessor(client: any, _options: QueryProcessorOptions = {}, engine: QueryEngine = 'pg'): QueryProcessor {
|
|
42
|
-
|
|
43
|
-
let options: QueryProcessorOptions = Object.assign({}, DEFAULT_OPTIONS, _options);
|
|
44
|
-
|
|
45
|
-
let queryOptions: ConverterOptions = {
|
|
46
|
-
lineBreak: options.lineBreaks ? '\n' : ' ',
|
|
47
|
-
nameEscape: _options.identifierQuote || (engine === 'mysql' ? '`' : '"')
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
// function processSql(query: any, sql: string, params: any[] | undefined, callback: any): Promise<any> {
|
|
51
|
-
// if (options.logging) log.i(sql);
|
|
52
|
-
// if (options.logger) options.logger(sql, params);
|
|
53
|
-
|
|
54
|
-
// return new Promise((resolve, reject) => {
|
|
55
|
-
// callback(sql, params, (err: any, result: any) => {
|
|
56
|
-
// if (err) reject(err);
|
|
57
|
-
// else resolve(convertResult(query, result, engine));
|
|
58
|
-
// });
|
|
59
|
-
// });
|
|
60
|
-
// }
|
|
61
|
-
|
|
62
|
-
// function executeSql(sql: string, params: any[] | undefined, cb: any) {
|
|
63
|
-
// if (engine === 'pg') {
|
|
64
|
-
// client.query(sql, params || cb, params ? cb : undefined);
|
|
65
|
-
// } else if (engine === 'mysql') {
|
|
66
|
-
// client.query({
|
|
67
|
-
// sql,
|
|
68
|
-
// values: params,
|
|
69
|
-
// typeCast: mySqlTypeCast
|
|
70
|
-
// }, cb);
|
|
71
|
-
// } else throw new Error('Unknown DB engine: ' + engine);
|
|
72
|
-
// }
|
|
73
|
-
|
|
74
|
-
return (query: any) => {
|
|
75
|
-
if (options.parameterized) {
|
|
76
|
-
let { sql, params } = convertQueryToParameterizedSQL(query, queryOptions, engine);
|
|
77
|
-
// if (Helpers.isWebSQL || Helpers.isNode) {
|
|
78
|
-
return client.query(sql, params);
|
|
79
|
-
// }
|
|
80
|
-
// return processSql(query, sql, params, (sql: string, params: any[], cb: any) => executeSql(sql, params, cb));
|
|
81
|
-
} else {
|
|
82
|
-
let sql = convertQueryToSQL(query, queryOptions, engine);
|
|
83
|
-
// if (Helpers.isWebSQL || Helpers.isNode) {
|
|
84
|
-
return client.query(sql, undefined);
|
|
85
|
-
// }
|
|
86
|
-
// return processSql(query, sql, undefined, (sql: string, params: undefined, cb: any) => executeSql(sql, undefined, cb));
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export function convertSubstitutionParam(param: any): string {
|
|
2
|
-
if (param == null) return 'NULL';
|
|
3
|
-
if (typeof param === 'string' || param instanceof String) {
|
|
4
|
-
return `'${String(param)}'`;
|
|
5
|
-
} else if (typeof param === 'boolean' || param instanceof Boolean) {
|
|
6
|
-
return String(param).toUpperCase();
|
|
7
|
-
} else if (param instanceof Date) {
|
|
8
|
-
return `'${param.toISOString()}'`;
|
|
9
|
-
} else if (typeof param === 'number' || param instanceof Number) {
|
|
10
|
-
return String(param);
|
|
11
|
-
}
|
|
12
|
-
return `'${JSON.stringify(param)}'`;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// node mysql doesn't have an typeCast equivalent solution for the other direction
|
|
16
|
-
// node-postgres: https://github.com/brianc/node-postgres/issues/442
|
|
17
|
-
export function convertEscapedParam(param: any) {
|
|
18
|
-
if (typeof param === 'object' && !(param == null || param instanceof String || param instanceof Number ||
|
|
19
|
-
param instanceof Boolean || param instanceof Date)) {
|
|
20
|
-
return JSON.stringify(param);
|
|
21
|
-
}
|
|
22
|
-
return param;
|
|
23
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import {createQueryConverter} from "./query-converter";
|
|
2
|
-
import {convertEscapedParam} from './param-converter';
|
|
3
|
-
import {QueryEngine, ConverterOptions} from "./types";
|
|
4
|
-
|
|
5
|
-
let pgParamConverter = (index: number) => '$' + index;
|
|
6
|
-
let mySqlParamConverter = (index: number) => '?';
|
|
7
|
-
|
|
8
|
-
function convertSingleParam(param: any, params: any[], paramConverter: (param: any) => string): string {
|
|
9
|
-
params.push(convertEscapedParam(param));
|
|
10
|
-
return paramConverter(params.length);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function convertQueryToParameterizedSQL(query: any, options: ConverterOptions, engine: QueryEngine) {
|
|
14
|
-
let params: any[] = [];
|
|
15
|
-
|
|
16
|
-
let paramConverter = engine === 'mysql' ? mySqlParamConverter : pgParamConverter;
|
|
17
|
-
let sql = createQueryConverter((param: any) => convertSingleParam(param, params, paramConverter), options, engine)(query);
|
|
18
|
-
|
|
19
|
-
return { sql, params };
|
|
20
|
-
}
|