taon-type-sql 21.0.21 → 21.0.22

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.
Files changed (174) hide show
  1. package/browser/package.json +1 -1
  2. package/browser-prod/package.json +1 -1
  3. package/lib/build-info._auto-generated_.d.ts +1 -1
  4. package/lib/build-info._auto-generated_.js +1 -1
  5. package/lib/package.json +1 -1
  6. package/lib-prod/build-info._auto-generated_.ts +27 -0
  7. package/lib-prod/builder/column/basic-column.ts +17 -0
  8. package/lib-prod/builder/column/boolean-column.ts +19 -0
  9. package/lib-prod/builder/column/comparable-column.ts +56 -0
  10. package/lib-prod/builder/column/date-column.ts +19 -0
  11. package/lib-prod/builder/column/number-column.ts +25 -0
  12. package/lib-prod/builder/column/query-column.ts +34 -0
  13. package/lib-prod/builder/column/string-column.ts +47 -0
  14. package/lib-prod/builder/column/value-column.ts +39 -0
  15. package/lib-prod/builder/condition/{query-column-condition.d.ts → query-column-condition.ts} +20 -5
  16. package/lib-prod/builder/condition/query-condition-chain.ts +42 -0
  17. package/lib-prod/builder/condition/{query-condition.d.ts → query-condition.ts} +8 -2
  18. package/lib-prod/builder/condition/{query-join-condition.d.ts → query-join-condition.ts} +19 -4
  19. package/lib-prod/builder/helpers/generics-helper.ts +2 -0
  20. package/lib-prod/builder/helpers/{internal-types.d.ts → internal-types.ts} +25 -9
  21. package/lib-prod/builder/join/joined-tables-chain.ts +17 -0
  22. package/lib-prod/builder/join/joined-tables.ts +28 -0
  23. package/lib-prod/builder/other/{query-ordering.d.ts → query-ordering.ts} +20 -4
  24. package/lib-prod/builder/query/select-query.ts +68 -0
  25. package/lib-prod/builder/query/table-condition-query.ts +35 -0
  26. package/lib-prod/builder/query/table-query.ts +72 -0
  27. package/lib-prod/builder/{query-source.d.ts → query-source.ts} +19 -8
  28. package/lib-prod/builder/query-table.ts +34 -0
  29. package/lib-prod/client/mysql.ts +9 -0
  30. package/lib-prod/client/pg.ts +9 -0
  31. package/lib-prod/client/query-processor.ts +89 -0
  32. package/lib-prod/converter/{param-converter.js → param-converter.ts} +8 -16
  33. package/lib-prod/converter/parameterized-converter.ts +20 -0
  34. package/lib-prod/converter/{query-converter.js → query-converter.ts} +113 -101
  35. package/lib-prod/converter/result-converter.ts +88 -0
  36. package/lib-prod/converter/sql-converter.ts +7 -0
  37. package/lib-prod/converter/type-converter.ts +29 -0
  38. package/lib-prod/converter/{types.d.ts → types.ts} +4 -3
  39. package/lib-prod/env/env.angular-node-app.ts +66 -0
  40. package/lib-prod/env/env.docs-webapp.ts +66 -0
  41. package/lib-prod/env/env.electron-app.ts +66 -0
  42. package/lib-prod/env/env.mobile-app.ts +66 -0
  43. package/lib-prod/env/env.npm-lib-and-cli-tool.ts +66 -0
  44. package/lib-prod/env/env.vscode-plugin.ts +66 -0
  45. package/lib-prod/{index._auto-generated_.js → index._auto-generated_.ts} +0 -1
  46. package/lib-prod/{index.d.ts → index.ts} +15 -3
  47. package/lib-prod/lib-info.md +8 -0
  48. package/lib-prod/migrations/index.ts +2 -0
  49. package/lib-prod/migrations/migrations-info.md +6 -0
  50. package/lib-prod/migrations/{migrations_index._auto-generated_.js → migrations_index._auto-generated_.ts} +2 -1
  51. package/lib-prod/package.json +1 -1
  52. package/package.json +1 -1
  53. package/websql/package.json +1 -1
  54. package/websql-prod/package.json +1 -1
  55. package/lib-prod/build-info._auto-generated_.d.ts +0 -24
  56. package/lib-prod/build-info._auto-generated_.js +0 -30
  57. package/lib-prod/build-info._auto-generated_.js.map +0 -1
  58. package/lib-prod/builder/column/basic-column.d.ts +0 -8
  59. package/lib-prod/builder/column/basic-column.js +0 -15
  60. package/lib-prod/builder/column/basic-column.js.map +0 -1
  61. package/lib-prod/builder/column/boolean-column.d.ts +0 -9
  62. package/lib-prod/builder/column/boolean-column.js +0 -15
  63. package/lib-prod/builder/column/boolean-column.js.map +0 -1
  64. package/lib-prod/builder/column/comparable-column.d.ts +0 -18
  65. package/lib-prod/builder/column/comparable-column.js +0 -42
  66. package/lib-prod/builder/column/comparable-column.js.map +0 -1
  67. package/lib-prod/builder/column/date-column.d.ts +0 -9
  68. package/lib-prod/builder/column/date-column.js +0 -15
  69. package/lib-prod/builder/column/date-column.js.map +0 -1
  70. package/lib-prod/builder/column/number-column.d.ts +0 -10
  71. package/lib-prod/builder/column/number-column.js +0 -20
  72. package/lib-prod/builder/column/number-column.js.map +0 -1
  73. package/lib-prod/builder/column/query-column.d.ts +0 -18
  74. package/lib-prod/builder/column/query-column.js +0 -26
  75. package/lib-prod/builder/column/query-column.js.map +0 -1
  76. package/lib-prod/builder/column/string-column.d.ts +0 -17
  77. package/lib-prod/builder/column/string-column.js +0 -37
  78. package/lib-prod/builder/column/string-column.js.map +0 -1
  79. package/lib-prod/builder/column/value-column.d.ts +0 -15
  80. package/lib-prod/builder/column/value-column.js +0 -30
  81. package/lib-prod/builder/column/value-column.js.map +0 -1
  82. package/lib-prod/builder/condition/query-column-condition.js +0 -23
  83. package/lib-prod/builder/condition/query-column-condition.js.map +0 -1
  84. package/lib-prod/builder/condition/query-condition-chain.d.ts +0 -17
  85. package/lib-prod/builder/condition/query-condition-chain.js +0 -34
  86. package/lib-prod/builder/condition/query-condition-chain.js.map +0 -1
  87. package/lib-prod/builder/condition/query-condition.js +0 -7
  88. package/lib-prod/builder/condition/query-condition.js.map +0 -1
  89. package/lib-prod/builder/condition/query-join-condition.js +0 -23
  90. package/lib-prod/builder/condition/query-join-condition.js.map +0 -1
  91. package/lib-prod/builder/helpers/generics-helper.d.ts +0 -2
  92. package/lib-prod/builder/helpers/generics-helper.js +0 -7
  93. package/lib-prod/builder/helpers/generics-helper.js.map +0 -1
  94. package/lib-prod/builder/helpers/internal-types.js +0 -4
  95. package/lib-prod/builder/helpers/internal-types.js.map +0 -1
  96. package/lib-prod/builder/join/joined-tables-chain.d.ts +0 -11
  97. package/lib-prod/builder/join/joined-tables-chain.js +0 -18
  98. package/lib-prod/builder/join/joined-tables-chain.js.map +0 -1
  99. package/lib-prod/builder/join/joined-tables.d.ts +0 -12
  100. package/lib-prod/builder/join/joined-tables.js +0 -25
  101. package/lib-prod/builder/join/joined-tables.js.map +0 -1
  102. package/lib-prod/builder/other/query-ordering.js +0 -21
  103. package/lib-prod/builder/other/query-ordering.js.map +0 -1
  104. package/lib-prod/builder/query/select-query.d.ts +0 -29
  105. package/lib-prod/builder/query/select-query.js +0 -54
  106. package/lib-prod/builder/query/select-query.js.map +0 -1
  107. package/lib-prod/builder/query/table-condition-query.d.ts +0 -16
  108. package/lib-prod/builder/query/table-condition-query.js +0 -31
  109. package/lib-prod/builder/query/table-condition-query.js.map +0 -1
  110. package/lib-prod/builder/query/table-query.d.ts +0 -23
  111. package/lib-prod/builder/query/table-query.js +0 -60
  112. package/lib-prod/builder/query/table-query.js.map +0 -1
  113. package/lib-prod/builder/query-source.js +0 -22
  114. package/lib-prod/builder/query-source.js.map +0 -1
  115. package/lib-prod/builder/query-table.d.ts +0 -15
  116. package/lib-prod/builder/query-table.js +0 -28
  117. package/lib-prod/builder/query-table.js.map +0 -1
  118. package/lib-prod/client/mysql.d.ts +0 -5
  119. package/lib-prod/client/mysql.js +0 -11
  120. package/lib-prod/client/mysql.js.map +0 -1
  121. package/lib-prod/client/pg.d.ts +0 -5
  122. package/lib-prod/client/pg.js +0 -11
  123. package/lib-prod/client/pg.js.map +0 -1
  124. package/lib-prod/client/query-processor.d.ts +0 -10
  125. package/lib-prod/client/query-processor.js +0 -73
  126. package/lib-prod/client/query-processor.js.map +0 -1
  127. package/lib-prod/converter/param-converter.d.ts +0 -2
  128. package/lib-prod/converter/param-converter.js.map +0 -1
  129. package/lib-prod/converter/parameterized-converter.d.ts +0 -5
  130. package/lib-prod/converter/parameterized-converter.js +0 -18
  131. package/lib-prod/converter/parameterized-converter.js.map +0 -1
  132. package/lib-prod/converter/query-converter.d.ts +0 -2
  133. package/lib-prod/converter/query-converter.js.map +0 -1
  134. package/lib-prod/converter/result-converter.d.ts +0 -2
  135. package/lib-prod/converter/result-converter.js +0 -89
  136. package/lib-prod/converter/result-converter.js.map +0 -1
  137. package/lib-prod/converter/sql-converter.d.ts +0 -2
  138. package/lib-prod/converter/sql-converter.js +0 -9
  139. package/lib-prod/converter/sql-converter.js.map +0 -1
  140. package/lib-prod/converter/type-converter.d.ts +0 -4
  141. package/lib-prod/converter/type-converter.js +0 -43
  142. package/lib-prod/converter/type-converter.js.map +0 -1
  143. package/lib-prod/converter/types.js +0 -3
  144. package/lib-prod/converter/types.js.map +0 -1
  145. package/lib-prod/env/env.angular-node-app.d.ts +0 -64
  146. package/lib-prod/env/env.angular-node-app.js +0 -71
  147. package/lib-prod/env/env.angular-node-app.js.map +0 -1
  148. package/lib-prod/env/env.docs-webapp.d.ts +0 -64
  149. package/lib-prod/env/env.docs-webapp.js +0 -71
  150. package/lib-prod/env/env.docs-webapp.js.map +0 -1
  151. package/lib-prod/env/env.electron-app.d.ts +0 -64
  152. package/lib-prod/env/env.electron-app.js +0 -71
  153. package/lib-prod/env/env.electron-app.js.map +0 -1
  154. package/lib-prod/env/env.mobile-app.d.ts +0 -64
  155. package/lib-prod/env/env.mobile-app.js +0 -71
  156. package/lib-prod/env/env.mobile-app.js.map +0 -1
  157. package/lib-prod/env/env.npm-lib-and-cli-tool.d.ts +0 -64
  158. package/lib-prod/env/env.npm-lib-and-cli-tool.js +0 -71
  159. package/lib-prod/env/env.npm-lib-and-cli-tool.js.map +0 -1
  160. package/lib-prod/env/env.vscode-plugin.d.ts +0 -64
  161. package/lib-prod/env/env.vscode-plugin.js +0 -71
  162. package/lib-prod/env/env.vscode-plugin.js.map +0 -1
  163. package/lib-prod/env/index.js +0 -23
  164. package/lib-prod/env/index.js.map +0 -1
  165. package/lib-prod/index._auto-generated_.d.ts +0 -0
  166. package/lib-prod/index._auto-generated_.js.map +0 -1
  167. package/lib-prod/index.js +0 -48
  168. package/lib-prod/index.js.map +0 -1
  169. package/lib-prod/migrations/index.d.ts +0 -1
  170. package/lib-prod/migrations/index.js +0 -19
  171. package/lib-prod/migrations/index.js.map +0 -1
  172. package/lib-prod/migrations/migrations_index._auto-generated_.d.ts +0 -0
  173. package/lib-prod/migrations/migrations_index._auto-generated_.js.map +0 -1
  174. /package/lib-prod/env/{index.d.ts → index.ts} +0 -0
@@ -0,0 +1,35 @@
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
+ }
@@ -0,0 +1,72 @@
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
+ }
@@ -3,12 +3,23 @@ import SelectQuery from './query/select-query';
3
3
  import { QueryProcessor } from "./helpers/internal-types";
4
4
  import JoinedTables from "./join/joined-tables";
5
5
  import TableQuery from "./query/table-query";
6
+
7
+
6
8
  export default class QuerySource {
7
- protected _queryProcessor: QueryProcessor;
8
- constructor(_queryProcessor: QueryProcessor);
9
- from<Entity, Table1 extends QueryTable<Entity, any>>(table1: Table1 & QueryTable<Entity, any>): SelectQuery<Entity, Table1>;
10
- from<Tables extends QueryTable<any, any>>(tables: JoinedTables<Tables>): SelectQuery<any, Tables>;
11
- from<Table1 extends QueryTable<any, any>, Table2 extends QueryTable<any, any>>(table1: Table1, table2: Table2): SelectQuery<any, Table1 | Table2>;
12
- 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>;
13
- table<Entity, Id, Table extends QueryTable<Entity, Id>>(table: Table & QueryTable<Entity, Id>): TableQuery<Entity, Id, Table>;
14
- }
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
+ }
@@ -0,0 +1,34 @@
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;
@@ -0,0 +1,9 @@
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
+ }
@@ -0,0 +1,9 @@
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
+ }
@@ -0,0 +1,89 @@
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,31 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertSubstitutionParam = convertSubstitutionParam;
4
- exports.convertEscapedParam = convertEscapedParam;
5
- function convertSubstitutionParam(param) {
6
- if (param == null)
7
- return 'NULL';
1
+ export function convertSubstitutionParam(param: any): string {
2
+ if (param == null) return 'NULL';
8
3
  if (typeof param === 'string' || param instanceof String) {
9
4
  return `'${String(param)}'`;
10
- }
11
- else if (typeof param === 'boolean' || param instanceof Boolean) {
5
+ } else if (typeof param === 'boolean' || param instanceof Boolean) {
12
6
  return String(param).toUpperCase();
13
- }
14
- else if (param instanceof Date) {
7
+ } else if (param instanceof Date) {
15
8
  return `'${param.toISOString()}'`;
16
- }
17
- else if (typeof param === 'number' || param instanceof Number) {
9
+ } else if (typeof param === 'number' || param instanceof Number) {
18
10
  return String(param);
19
11
  }
20
12
  return `'${JSON.stringify(param)}'`;
21
13
  }
14
+
22
15
  // node mysql doesn't have an typeCast equivalent solution for the other direction
23
16
  // node-postgres: https://github.com/brianc/node-postgres/issues/442
24
- function convertEscapedParam(param) {
17
+ export function convertEscapedParam(param: any) {
25
18
  if (typeof param === 'object' && !(param == null || param instanceof String || param instanceof Number ||
26
19
  param instanceof Boolean || param instanceof Date)) {
27
20
  return JSON.stringify(param);
28
21
  }
29
22
  return param;
30
- }
31
- //# sourceMappingURL=param-converter.js.map
23
+ }
@@ -0,0 +1,20 @@
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
+ }