@l-v-yonsama/multi-platform-database-drivers 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/build/__tests__/db/drivers/AwsS3Driver.test.d.ts +1 -0
  2. package/build/__tests__/db/drivers/AwsS3Driver.test.js +83 -0
  3. package/build/__tests__/db/drivers/AwsS3Driver.test.js.map +1 -0
  4. package/build/__tests__/db/drivers/MySQLDriver.test.d.ts +1 -0
  5. package/build/__tests__/db/drivers/MySQLDriver.test.js +115 -0
  6. package/build/__tests__/db/drivers/MySQLDriver.test.js.map +1 -0
  7. package/build/__tests__/db/drivers/PostgresDriver.test.d.ts +1 -0
  8. package/build/__tests__/db/drivers/PostgresDriver.test.js +112 -0
  9. package/build/__tests__/db/drivers/PostgresDriver.test.js.map +1 -0
  10. package/build/__tests__/db/drivers/RedisDriver.test.d.ts +1 -0
  11. package/build/__tests__/db/drivers/RedisDriver.test.js +106 -0
  12. package/build/__tests__/db/drivers/RedisDriver.test.js.map +1 -0
  13. package/build/src/db/DBError.d.ts +7 -0
  14. package/build/src/db/DBError.js +20 -0
  15. package/build/src/db/DBError.js.map +1 -0
  16. package/build/src/db/drivers/AwsS3Driver.d.ts +38 -0
  17. package/build/src/db/drivers/AwsS3Driver.js +457 -0
  18. package/build/src/db/drivers/AwsS3Driver.js.map +1 -0
  19. package/build/src/db/drivers/BaseDriver.d.ts +40 -0
  20. package/build/src/db/drivers/BaseDriver.js +209 -0
  21. package/build/src/db/drivers/BaseDriver.js.map +1 -0
  22. package/build/src/db/drivers/MySQLDriver.d.ts +20 -0
  23. package/build/src/db/drivers/MySQLDriver.js +254 -0
  24. package/build/src/db/drivers/MySQLDriver.js.map +1 -0
  25. package/build/src/db/drivers/PostgresDriver.d.ts +22 -0
  26. package/build/src/db/drivers/PostgresDriver.js +297 -0
  27. package/build/src/db/drivers/PostgresDriver.js.map +1 -0
  28. package/build/src/db/drivers/RedisDriver.d.ts +23 -0
  29. package/build/src/db/drivers/RedisDriver.js +231 -0
  30. package/build/src/db/drivers/RedisDriver.js.map +1 -0
  31. package/build/src/db/manager.d.ts +8 -0
  32. package/build/src/db/manager.js +87 -0
  33. package/build/src/db/manager.js.map +1 -0
  34. package/build/src/db/resource/DbResource.d.ts +188 -0
  35. package/build/src/db/resource/DbResource.js +420 -0
  36. package/build/src/db/resource/DbResource.js.map +1 -0
  37. package/build/src/db/resource/MultipleResultSetDataHolder.d.ts +29 -0
  38. package/build/src/db/resource/MultipleResultSetDataHolder.js +106 -0
  39. package/build/src/db/resource/MultipleResultSetDataHolder.js.map +1 -0
  40. package/build/src/db/resource/ResourceUtil.d.ts +39 -0
  41. package/build/src/db/resource/ResourceUtil.js +337 -0
  42. package/build/src/db/resource/ResourceUtil.js.map +1 -0
  43. package/build/src/db/resource/ResultSetDataHolder.d.ts +126 -0
  44. package/build/src/db/resource/ResultSetDataHolder.js +722 -0
  45. package/build/src/db/resource/ResultSetDataHolder.js.map +1 -0
  46. package/build/src/db/resource/types/DBType.d.ts +18 -0
  47. package/build/src/db/resource/types/DBType.js +52 -0
  48. package/build/src/db/resource/types/DBType.js.map +1 -0
  49. package/build/src/db/resource/types/GeneralColumnType.d.ts +75 -0
  50. package/build/src/db/resource/types/GeneralColumnType.js +332 -0
  51. package/build/src/db/resource/types/GeneralColumnType.js.map +1 -0
  52. package/build/src/db/resource/types/MySQLColumnType.d.ts +42 -0
  53. package/build/src/db/resource/types/MySQLColumnType.js +142 -0
  54. package/build/src/db/resource/types/MySQLColumnType.js.map +1 -0
  55. package/build/src/db/resource/types/ODBCVendorType.d.ts +3 -0
  56. package/build/src/db/resource/types/ODBCVendorType.js +8 -0
  57. package/build/src/db/resource/types/ODBCVendorType.js.map +1 -0
  58. package/build/src/db/resource/types/PostgresColumnType.d.ts +53 -0
  59. package/build/src/db/resource/types/PostgresColumnType.js +105 -0
  60. package/build/src/db/resource/types/PostgresColumnType.js.map +1 -0
  61. package/build/src/db/resource/types/RedisKeyType.d.ts +12 -0
  62. package/build/src/db/resource/types/RedisKeyType.js +55 -0
  63. package/build/src/db/resource/types/RedisKeyType.js.map +1 -0
  64. package/build/src/db/resource/types/ResourceType.d.ts +10 -0
  65. package/build/src/db/resource/types/ResourceType.js +15 -0
  66. package/build/src/db/resource/types/ResourceType.js.map +1 -0
  67. package/build/src/main.d.ts +0 -0
  68. package/build/src/main.js +3 -0
  69. package/build/src/main.js.map +1 -0
  70. package/build/src/service/request/general_db_request.d.ts +18 -0
  71. package/build/src/service/request/general_db_request.js +14 -0
  72. package/build/src/service/request/general_db_request.js.map +1 -0
  73. package/{src/service/request/redis_request.ts → build/src/service/request/redis_request.d.ts} +8 -11
  74. package/build/src/service/request/redis_request.js +14 -0
  75. package/build/src/service/request/redis_request.js.map +1 -0
  76. package/build/src/service/request/s3_request.d.ts +14 -0
  77. package/build/src/service/request/s3_request.js +12 -0
  78. package/build/src/service/request/s3_request.js.map +1 -0
  79. package/build/src/service/response/GeneralReponse.d.ts +6 -0
  80. package/build/src/service/response/GeneralReponse.js +12 -0
  81. package/build/src/service/response/GeneralReponse.js.map +1 -0
  82. package/build/src/types/DateModifiedType.d.ts +14 -0
  83. package/build/src/types/DateModifiedType.js +68 -0
  84. package/build/src/types/DateModifiedType.js.map +1 -0
  85. package/build/src/types/FileKindType.d.ts +12 -0
  86. package/build/src/types/FileKindType.js +75 -0
  87. package/build/src/types/FileKindType.js.map +1 -0
  88. package/build/src/util/file_util.d.ts +22 -0
  89. package/build/src/util/file_util.js +143 -0
  90. package/build/src/util/file_util.js.map +1 -0
  91. package/package.json +5 -1
  92. package/.editorconfig +0 -15
  93. package/.eslintignore +0 -1
  94. package/.eslintrc.json +0 -30
  95. package/.github/workflows/npm-publish-github-packages.yml +0 -50
  96. package/.prettierrc +0 -12
  97. package/__tests__/db/drivers/AwsS3Driver.test.ts +0 -97
  98. package/__tests__/db/drivers/MySQLDriver.test.ts +0 -140
  99. package/__tests__/db/drivers/PostgresDriver.test.ts +0 -139
  100. package/__tests__/db/drivers/RedisDriver.test.ts +0 -156
  101. package/jest.config.js +0 -18
  102. package/src/db/DBError.ts +0 -26
  103. package/src/db/drivers/AwsS3Driver.ts +0 -539
  104. package/src/db/drivers/BaseDriver.ts +0 -256
  105. package/src/db/drivers/MongoDriver.js +0 -110
  106. package/src/db/drivers/MySQLDriver.ts +0 -318
  107. package/src/db/drivers/PostgresDriver.ts +0 -363
  108. package/src/db/drivers/RedisDriver.ts +0 -277
  109. package/src/db/manager.ts +0 -95
  110. package/src/db/resource/DbResource.ts +0 -579
  111. package/src/db/resource/MultipleResultSetDataHolder.ts +0 -119
  112. package/src/db/resource/ResourceUtil.ts +0 -366
  113. package/src/db/resource/ResultSetDataHolder.ts +0 -806
  114. package/src/db/resource/types/DBType.ts +0 -43
  115. package/src/db/resource/types/GeneralColumnType.ts +0 -321
  116. package/src/db/resource/types/MySQLColumnType.ts +0 -134
  117. package/src/db/resource/types/ODBCVendorType.ts +0 -3
  118. package/src/db/resource/types/PostgresColumnType.ts +0 -94
  119. package/src/db/resource/types/RedisKeyType.ts +0 -48
  120. package/src/db/resource/types/ResourceType.ts +0 -10
  121. package/src/main.ts +0 -1
  122. package/src/service/request/general_db_request.ts +0 -20
  123. package/src/service/request/s3_request.ts +0 -15
  124. package/src/service/response/GeneralReponse.ts +0 -10
  125. package/src/types/DateModifiedType.ts +0 -75
  126. package/src/types/FileKindType.ts +0 -80
  127. package/src/util/file_util.ts +0 -178
  128. package/tsconfig.json +0 -23
  129. package/tsconfig.release.json +0 -23
  130. package/unit-test.yml +0 -41
@@ -0,0 +1,722 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RdhRow = exports.CellAnnotation = exports.AnnotationType = exports.RdhKey = exports.SampleGroupByClass = exports.SampleClassPair = void 0;
4
+ const list_it_1 = require("list-it");
5
+ const GeneralColumnType_1 = require("./types/GeneralColumnType");
6
+ const enum_values_1 = require("enum-values");
7
+ const ss = require("simple-statistics");
8
+ const shuffle_array_1 = require("shuffle-array");
9
+ class SampleClassPair {
10
+ constructor() {
11
+ this.sample_values = [];
12
+ }
13
+ }
14
+ exports.SampleClassPair = SampleClassPair;
15
+ class SampleGroupByClass {
16
+ constructor(clazz_key, sample_keys) {
17
+ this.pairs = [];
18
+ this.sample_keys = [];
19
+ this.is_shuffled = false;
20
+ this.sample_keys = sample_keys;
21
+ this.clazz_key = clazz_key;
22
+ }
23
+ }
24
+ exports.SampleGroupByClass = SampleGroupByClass;
25
+ class RdhKey {
26
+ constructor(name, type = GeneralColumnType_1.GeneralColumnType.UNKNOWN, comment = '') {
27
+ this.type = GeneralColumnType_1.GeneralColumnType.UNKNOWN;
28
+ this.name = name;
29
+ this.type = type;
30
+ this.comment = comment;
31
+ }
32
+ toString() {
33
+ return `${this.name} [${enum_values_1.EnumValues.getNameFromValue(GeneralColumnType_1.GeneralColumnType, this.type)}:${GeneralColumnType_1.GeneralColumnType.parseHandsonType(this.type)}]`;
34
+ }
35
+ }
36
+ exports.RdhKey = RdhKey;
37
+ var AnnotationType;
38
+ (function (AnnotationType) {
39
+ AnnotationType[AnnotationType["Del"] = 0] = "Del";
40
+ AnnotationType[AnnotationType["Upd"] = 1] = "Upd";
41
+ AnnotationType[AnnotationType["Add"] = 2] = "Add";
42
+ AnnotationType[AnnotationType["Err"] = 3] = "Err";
43
+ AnnotationType[AnnotationType["Lnt"] = 4] = "Lnt";
44
+ AnnotationType[AnnotationType["Stl"] = 5] = "Stl";
45
+ })(AnnotationType = exports.AnnotationType || (exports.AnnotationType = {}));
46
+ class CellAnnotation {
47
+ constructor(type, options) {
48
+ this.type = type;
49
+ this.options = options;
50
+ }
51
+ }
52
+ exports.CellAnnotation = CellAnnotation;
53
+ class RdhRow {
54
+ constructor(meta, values) {
55
+ this.meta = meta;
56
+ this.values = values;
57
+ }
58
+ pushAnnotation(key, type, options) {
59
+ if (this.meta[key] === undefined) {
60
+ this.meta[key] = new Array();
61
+ }
62
+ this.meta[key].push(new CellAnnotation(type, options));
63
+ }
64
+ clearAnnotations(type) {
65
+ if (this.meta) {
66
+ const meta_keys = Object.keys(this.meta);
67
+ if (meta_keys && meta_keys.length > 0) {
68
+ for (let i = 0; i < meta_keys.length; i++) {
69
+ const annotations = this.meta[meta_keys[i]];
70
+ if (annotations) {
71
+ for (let j = 0; j < annotations.length; j++) {
72
+ if (annotations[j].type === type) {
73
+ annotations.splice(j, 1);
74
+ j--;
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
82
+ getAnnotations(type) {
83
+ const r = new Array();
84
+ if (this.meta) {
85
+ const meta_keys = Object.keys(this.meta);
86
+ if (meta_keys && meta_keys.length > 0) {
87
+ for (let i = 0; i < meta_keys.length; i++) {
88
+ const annotations = this.meta[meta_keys[i]];
89
+ if (annotations) {
90
+ annotations
91
+ .filter((a) => a.type === type)
92
+ .forEach((a) => r.push(a));
93
+ }
94
+ }
95
+ }
96
+ }
97
+ return r;
98
+ }
99
+ getFirstAnnotationsOf(key, type) {
100
+ if (this.meta && this.meta[key]) {
101
+ const annotations = this.meta[key];
102
+ if (annotations) {
103
+ return annotations.find((a) => a.type === type);
104
+ }
105
+ }
106
+ return undefined;
107
+ }
108
+ getAnnotationsOf(key, type) {
109
+ const r = new Array();
110
+ if (this.meta && this.meta[key]) {
111
+ const annotations = this.meta[key];
112
+ if (annotations) {
113
+ annotations.filter((a) => a.type === type).forEach((a) => r.push(a));
114
+ }
115
+ }
116
+ return r;
117
+ }
118
+ hasAnnotation(type) {
119
+ if (this.meta) {
120
+ const meta_keys = Object.keys(this.meta);
121
+ if (meta_keys && meta_keys.length > 0) {
122
+ for (let i = 0; i < meta_keys.length; i++) {
123
+ const annotations = this.meta[meta_keys[i]];
124
+ if (annotations) {
125
+ if (annotations.some((annotation) => annotation.type === type)) {
126
+ return true;
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }
132
+ return false;
133
+ }
134
+ }
135
+ exports.RdhRow = RdhRow;
136
+ class ResultSetDataHolder {
137
+ static create(err) {
138
+ const rdh = new ResultSetDataHolder([]);
139
+ if (err) {
140
+ rdh.errorMessage = err.message;
141
+ }
142
+ return rdh;
143
+ }
144
+ constructor(keys, dbRes) {
145
+ this.is_empty = false;
146
+ this.keys = [];
147
+ this.rows = [];
148
+ this.setKeys(keys);
149
+ this.dbRes = dbRes;
150
+ }
151
+ static createEmpty() {
152
+ const rdh = new ResultSetDataHolder(['message']);
153
+ rdh.is_empty = true;
154
+ rdh.addRow({ message: 'empty result set' });
155
+ return rdh;
156
+ }
157
+ static from(list, i_titles) {
158
+ if (list === undefined || list === null || list === '') {
159
+ throw new Error(typeof list + ' has no value.');
160
+ }
161
+ const constructor = list.constructor.name;
162
+ if (constructor === 'ResultSetDataHolder') {
163
+ return list;
164
+ }
165
+ const t = typeof list;
166
+ let ret = ResultSetDataHolder.createEmpty();
167
+ // console.log('outputToSpread, list=', list, t, list.constructor.name)
168
+ const str_titles = new Array();
169
+ if (i_titles) {
170
+ console.log('has i_titles', i_titles);
171
+ if (typeof i_titles === 'string') {
172
+ str_titles.push(i_titles);
173
+ }
174
+ if (i_titles instanceof Array) {
175
+ i_titles.forEach((s) => {
176
+ str_titles.push(s);
177
+ });
178
+ }
179
+ }
180
+ if (list instanceof Array) {
181
+ if (list.length > 0) {
182
+ let elm = list[0];
183
+ if (elm instanceof Array) {
184
+ // number[][]
185
+ let i = str_titles.length + 1;
186
+ while (str_titles.length < elm.length) {
187
+ str_titles.push(`K${i++}`);
188
+ }
189
+ ret = new ResultSetDataHolder(str_titles);
190
+ for (let r = 0; r < list.length; r++) {
191
+ elm = list[r];
192
+ const values = {};
193
+ for (let c = 0; c < elm.length; c++) {
194
+ values[str_titles[c]] = elm[c];
195
+ }
196
+ ret.addRow(values);
197
+ }
198
+ }
199
+ }
200
+ }
201
+ else {
202
+ // console.log('list.keys=', list.keys);
203
+ // console.log('list.rows=', list.rows);
204
+ // console.log('list.is_empty=', list.is_empty);
205
+ if (list.keys && list.rows && list.is_empty !== undefined) {
206
+ // rdh
207
+ const keyList = new Array();
208
+ list.keys.forEach((k) => {
209
+ const new_key = new RdhKey(k.name, k.type, k.comment);
210
+ new_key.width = k.width;
211
+ keyList.push(new_key);
212
+ });
213
+ const rdh = new ResultSetDataHolder(keyList);
214
+ rdh.is_empty = list.is_empty;
215
+ list.rows.forEach((r) => {
216
+ rdh.rows.push(new RdhRow(r.meta, r.values));
217
+ });
218
+ rdh.dbRes = list.dbRes;
219
+ rdh.sqlStatement = list.sqlStatement;
220
+ rdh.mergeCells = list.mergeCells;
221
+ rdh.errorMessage = list.errorMessage;
222
+ return rdh;
223
+ }
224
+ switch (t) {
225
+ case 'object':
226
+ if (str_titles.length !== 2) {
227
+ str_titles.splice(0, str_titles.length);
228
+ str_titles.push('KEY');
229
+ str_titles.push('VALUE');
230
+ }
231
+ ret = new ResultSetDataHolder(str_titles);
232
+ Object.keys(list).forEach((k) => {
233
+ const v = list[k];
234
+ const values = {};
235
+ values[str_titles[0]] = k;
236
+ values[str_titles[1]] = v;
237
+ ret.addRow(values);
238
+ });
239
+ break;
240
+ }
241
+ }
242
+ ret.resetKeyTypeByRows();
243
+ return ret;
244
+ }
245
+ /**
246
+ * The correlation is a measure of how correlated two datasets are, between -1 and 1
247
+ * @param key_x first input
248
+ * @param key_y first input
249
+ * @returns sample correlation
250
+ */
251
+ sampleCorrelation(key_x, key_y) {
252
+ const x = this.toVector(key_x, true);
253
+ const y = this.toVector(key_y, true);
254
+ return ss.sampleCorrelation(x, y);
255
+ }
256
+ describe() {
257
+ // # a b
258
+ // # count 4.000000 4.000000
259
+ // # mean 1.750000 0.600000
260
+ // # std 0.957427 0.439697
261
+ // # min 1.000000 0.100000
262
+ // # 25% 1.000000 0.325000
263
+ // # 50% 1.500000 0.600000
264
+ // # 75% 2.250000 0.875000
265
+ // # max 3.000000 1.100000
266
+ const desc_keys = new Array();
267
+ this.keys
268
+ .filter((k) => GeneralColumnType_1.GeneralColumnType.isNumericLike(k.type))
269
+ .forEach((k) => {
270
+ desc_keys.push(new RdhKey(k.name, k.type, k.comment));
271
+ });
272
+ desc_keys.unshift(new RdhKey('stat', GeneralColumnType_1.GeneralColumnType.TEXT));
273
+ const ret = new ResultSetDataHolder(desc_keys);
274
+ const count_values = { stat: 'count' };
275
+ const mean_values = { stat: 'mean' };
276
+ const std_values = { stat: 'std' };
277
+ const min_values = { stat: 'min' };
278
+ const quatile25_values = { stat: '25%' };
279
+ const median_values = { stat: '50%' };
280
+ const quatile75_values = { stat: '75%' };
281
+ const max_values = { stat: 'max' };
282
+ this.keys.forEach((key) => {
283
+ const num_list = this.toVector(key.name, true);
284
+ count_values[key.name] = num_list.length;
285
+ mean_values[key.name] = num_list.length === 0 ? '-' : ss.mean(num_list);
286
+ std_values[key.name] =
287
+ num_list.length === 0 ? '-' : ss.standardDeviation(num_list);
288
+ min_values[key.name] = num_list.length === 0 ? '-' : ss.min(num_list);
289
+ quatile25_values[key.name] =
290
+ num_list.length === 0 ? '-' : ss.quantile(num_list, 0.25);
291
+ median_values[key.name] =
292
+ num_list.length === 0 ? '-' : ss.median(num_list);
293
+ quatile75_values[key.name] =
294
+ num_list.length === 0 ? '-' : ss.quantile(num_list, 0.75);
295
+ max_values[key.name] = num_list.length === 0 ? '-' : ss.max(num_list);
296
+ });
297
+ ret.addRow(count_values);
298
+ ret.addRow(mean_values);
299
+ ret.addRow(std_values);
300
+ ret.addRow(min_values);
301
+ ret.addRow(quatile25_values);
302
+ ret.addRow(median_values);
303
+ ret.addRow(quatile75_values);
304
+ ret.addRow(max_values);
305
+ return ret;
306
+ }
307
+ splitRows(test_percentage, with_shuffle = false) {
308
+ // Split the data into training and testing portions.
309
+ if (test_percentage >= 100) {
310
+ test_percentage = 100;
311
+ }
312
+ if (test_percentage < 0) {
313
+ test_percentage = 0;
314
+ }
315
+ const numTestExamples = Math.round((this.rows.length * test_percentage) / 100);
316
+ const numTrainExamples = this.rows.length - numTestExamples;
317
+ const train = new ResultSetDataHolder(this.keys);
318
+ const test = new ResultSetDataHolder(this.keys);
319
+ const cloned_rows = this.rows.slice();
320
+ if (with_shuffle) {
321
+ (0, shuffle_array_1.default)(cloned_rows);
322
+ }
323
+ train.rows = cloned_rows.slice(0, numTrainExamples);
324
+ test.rows = cloned_rows.slice(numTrainExamples);
325
+ return [train, test];
326
+ }
327
+ /**
328
+ * Sample a data from each class of this resutlsets.
329
+ *
330
+ * @param {number} numExamplesPerClass Number of examples per class.
331
+ */
332
+ sampleXKeysGroupByClass(numExamplesPerClass, xKeys, clazz, shuffle = false) {
333
+ const ret = new SampleGroupByClass(clazz, xKeys);
334
+ const localIndexes = new Array();
335
+ for (let i = 0; i < this.rows.length; i++) {
336
+ localIndexes.push(i);
337
+ }
338
+ if (shuffle) {
339
+ ret.is_shuffled = true;
340
+ (0, shuffle_array_1.default)(localIndexes);
341
+ }
342
+ const uniqClassValueSets = new Set();
343
+ for (let j = 0; j < this.rows.length; j++) {
344
+ const row = this.rows[localIndexes[j]];
345
+ const clazz_value = row.values[clazz];
346
+ uniqClassValueSets.add(clazz_value);
347
+ }
348
+ const uniqClassValues = Array.from(uniqClassValueSets).sort();
349
+ uniqClassValues.forEach((uniq) => {
350
+ const pair = new SampleClassPair();
351
+ pair.clazz_value = uniq;
352
+ ret.pairs.push(pair);
353
+ });
354
+ for (let j = 0; j < this.rows.length; j++) {
355
+ const row = this.rows[localIndexes[j]];
356
+ const innerX = new Array();
357
+ xKeys.forEach((k) => {
358
+ innerX.push(row.values[k]);
359
+ });
360
+ const clazz_value = row.values[clazz];
361
+ const pair = ret.pairs.find((pair) => pair.clazz_value === clazz_value);
362
+ if (pair && pair.sample_values.length < numExamplesPerClass) {
363
+ pair.sample_values.push(innerX);
364
+ }
365
+ let num_full_clazz = 0;
366
+ ret.pairs.forEach((pair) => {
367
+ if (pair.sample_values.length >= numExamplesPerClass) {
368
+ num_full_clazz++;
369
+ }
370
+ });
371
+ if (num_full_clazz >= uniqClassValues.length) {
372
+ break;
373
+ }
374
+ }
375
+ return ret;
376
+ }
377
+ nextXYBatch(batch_size, xKeys, yKey) {
378
+ if (this.shuffledNextCounter === undefined) {
379
+ this.shuffledNextCounter = 0;
380
+ this.shuffledIndexes = new Array();
381
+ for (let i = 0; i < this.rows.length; i++) {
382
+ this.shuffledIndexes.push(i);
383
+ }
384
+ (0, shuffle_array_1.default)(this.shuffledIndexes);
385
+ }
386
+ const x = new Array();
387
+ const y = new Array();
388
+ for (let j = 0; j < batch_size; j++) {
389
+ const row = this.rows[this.shuffledIndexes[this.shuffledNextCounter]];
390
+ const innerX = new Array();
391
+ xKeys.forEach((k) => {
392
+ innerX.push(row.values[k]);
393
+ });
394
+ x.push(innerX);
395
+ y.push(row.values[yKey]);
396
+ this.shuffledNextCounter++;
397
+ if (this.rows.length <= this.shuffledNextCounter) {
398
+ (0, shuffle_array_1.default)(this.shuffledIndexes);
399
+ this.shuffledNextCounter = 0;
400
+ }
401
+ }
402
+ return [x, y];
403
+ }
404
+ hasKey(key) {
405
+ return this.keys.some((k) => k.name === key);
406
+ }
407
+ drop(key) {
408
+ if (this.hasKey(key)) {
409
+ this.rows.forEach((v) => {
410
+ delete v.values[key];
411
+ });
412
+ const idx = this.keys.findIndex((k) => k.name === key);
413
+ this.keys.splice(idx, 1);
414
+ }
415
+ }
416
+ assign(key, list) {
417
+ if (list === undefined || list === null || list === '') {
418
+ throw new Error(typeof list + ' has no value.');
419
+ }
420
+ const constructor = list.constructor.name;
421
+ this.drop(key);
422
+ if (constructor === 'Float32Array' || constructor === 'Float64Array') {
423
+ list = Array.from(list);
424
+ this.keys.push(new RdhKey(key, GeneralColumnType_1.GeneralColumnType.NUMERIC));
425
+ }
426
+ else if (constructor === 'Int8Array' ||
427
+ constructor === 'Int16Array' ||
428
+ constructor === 'Int32Array') {
429
+ list = Array.from(list);
430
+ this.keys.push(new RdhKey(key, GeneralColumnType_1.GeneralColumnType.INTEGER));
431
+ }
432
+ else {
433
+ const types = new Set();
434
+ list.forEach((v) => {
435
+ if (v !== '' && v !== null) {
436
+ types.add(typeof v);
437
+ }
438
+ });
439
+ if (types.size === 1 && types.has('number')) {
440
+ this.keys.push(new RdhKey(key, GeneralColumnType_1.GeneralColumnType.NUMERIC));
441
+ }
442
+ else {
443
+ this.keys.push(new RdhKey(key, GeneralColumnType_1.GeneralColumnType.UNKNOWN));
444
+ }
445
+ }
446
+ list.forEach((v, i) => {
447
+ this.rows[i].values[key] = v;
448
+ });
449
+ }
450
+ assignFromDictionary(new_key, existing_key, dictionary) {
451
+ this.drop(new_key);
452
+ this.keys.push(new RdhKey(new_key, GeneralColumnType_1.GeneralColumnType.TEXT));
453
+ this.rows.forEach((row) => {
454
+ const existing_val = row.values[existing_key];
455
+ if (existing_val === undefined ||
456
+ existing_val === '' ||
457
+ existing_val === null) {
458
+ row.values[new_key] = '';
459
+ }
460
+ else {
461
+ if (dictionary.length <= existing_val || existing_val < 0) {
462
+ row.values[new_key] = '';
463
+ }
464
+ else {
465
+ row.values[new_key] = dictionary[existing_val];
466
+ }
467
+ }
468
+ });
469
+ }
470
+ toVector(key_name, is_only_number = false) {
471
+ const retList = new Array();
472
+ this.rows.forEach((row) => {
473
+ const v = row.values[key_name];
474
+ if (is_only_number) {
475
+ if (isFinite(v) && v !== '' && v !== null) {
476
+ retList.push(v);
477
+ }
478
+ }
479
+ else {
480
+ retList.push(v);
481
+ }
482
+ });
483
+ return retList;
484
+ }
485
+ toMatrixArray(key_names) {
486
+ const retList = new Array();
487
+ this.rows.forEach((row) => {
488
+ const retRow = new Array();
489
+ if (key_names && key_names.length > 0) {
490
+ key_names.forEach((key_name) => {
491
+ retRow.push(row.values[key_name]);
492
+ });
493
+ }
494
+ else {
495
+ this.keys.forEach((key) => {
496
+ retRow.push(row.values[key.name]);
497
+ });
498
+ }
499
+ retList.push(retRow);
500
+ });
501
+ return retList;
502
+ }
503
+ toCsv(config) {
504
+ if (config === undefined) {
505
+ config = {};
506
+ }
507
+ const retList = new Array();
508
+ if (config.key_names && config.key_names.length > 0) {
509
+ retList.push(config.key_names.join(','));
510
+ }
511
+ else {
512
+ retList.push(this.keys.map((k) => k.name).join(','));
513
+ }
514
+ this.rows.forEach((row) => {
515
+ const retRow = new Array();
516
+ if (config.key_names && config.key_names.length > 0) {
517
+ config.key_names.forEach((key_name) => {
518
+ retRow.push(row.values[key_name]);
519
+ });
520
+ }
521
+ else {
522
+ this.keys.forEach((key) => {
523
+ retRow.push(row.values[key.name]);
524
+ });
525
+ }
526
+ retList.push(retRow.join(','));
527
+ });
528
+ return retList.join('\r\n');
529
+ }
530
+ addRow(recordData, default_meta) {
531
+ let meta = {};
532
+ if (default_meta) {
533
+ meta = default_meta;
534
+ }
535
+ const values = {};
536
+ this.keys.forEach((key) => {
537
+ values[key.name] = recordData[key.name];
538
+ });
539
+ this.rows.push(new RdhRow(meta, values));
540
+ }
541
+ clearRows() {
542
+ this.rows.splice(0, this.rows.length);
543
+ }
544
+ copyFrom(that) {
545
+ this.clearRows();
546
+ this.keys.splice(0, this.keys.length);
547
+ this.setKeys(that.keys);
548
+ that.rows.forEach((v) => {
549
+ this.addRow(v);
550
+ });
551
+ }
552
+ setSqlStatement(sqlStatement) {
553
+ this.sqlStatement = sqlStatement;
554
+ }
555
+ setDbRes(dbRes) {
556
+ this.dbRes = dbRes;
557
+ }
558
+ hasAnnotation(type) {
559
+ let r = false;
560
+ for (let i = 0; i < this.rows.length; i++) {
561
+ if (this.rows[i].hasAnnotation(type)) {
562
+ r = true;
563
+ break;
564
+ }
565
+ }
566
+ return r;
567
+ }
568
+ fillnull(how) {
569
+ this.keys
570
+ .filter((k) => GeneralColumnType_1.GeneralColumnType.isNumericLike(k.type))
571
+ .forEach((k) => {
572
+ const num_list = new Array();
573
+ for (let i = 0; i < this.rows.length; i++) {
574
+ const v = this.rows[i].values[k.name];
575
+ if (isFinite(v) && v !== '') {
576
+ num_list.push(v);
577
+ }
578
+ }
579
+ let new_value = 0;
580
+ switch (how) {
581
+ case 'mean':
582
+ new_value = ss.mean(num_list);
583
+ break;
584
+ case 'median':
585
+ new_value = ss.median(num_list);
586
+ break;
587
+ }
588
+ for (let i = 0; i < this.rows.length; i++) {
589
+ if (this.rows[i].values[k.name] === null) {
590
+ this.rows[i].values[k.name] = new_value;
591
+ }
592
+ }
593
+ });
594
+ }
595
+ resetKeyTypeByRows() {
596
+ this.keys.forEach((k) => {
597
+ const length = this.rows.length;
598
+ const types = new Set();
599
+ for (let i = 0; i < length; i++) {
600
+ const v = this.rows[i].values[k.name];
601
+ if (v === '' || v === null) {
602
+ continue;
603
+ }
604
+ types.add(typeof v);
605
+ }
606
+ if (types.size === 1 && types.has('number')) {
607
+ k.type = GeneralColumnType_1.GeneralColumnType.NUMERIC;
608
+ for (let i = 0; i < length; i++) {
609
+ if (this.rows[i].values[k.name] === '') {
610
+ this.rows[i].values[k.name] = null;
611
+ }
612
+ }
613
+ }
614
+ });
615
+ }
616
+ setKeys(keys) {
617
+ keys.forEach((k) => {
618
+ if (k instanceof RdhKey) {
619
+ this.keys.push(k);
620
+ }
621
+ else {
622
+ this.keys.push(new RdhKey(k));
623
+ }
624
+ });
625
+ }
626
+ keynames(is_only_numeric_like = false) {
627
+ if (is_only_numeric_like) {
628
+ return this.keys
629
+ .filter((k) => GeneralColumnType_1.GeneralColumnType.isNumericLike(k.type))
630
+ .map((k) => k.name);
631
+ }
632
+ return this.keys.map((k) => k.name);
633
+ }
634
+ // FieldPacket {
635
+ // catalog: 'def',
636
+ // db: 'com',
637
+ // table: 'nten',
638
+ // orgTable: 'nten',
639
+ // name: 'ration_tim',
640
+ // orgName: 'ration_tim',
641
+ // charsetNr: 63,
642
+ // length: 11,
643
+ // type: 3,
644
+ // flags: 0,
645
+ // decimals: 0,
646
+ // default: undefined,
647
+ // zeroFill: false,
648
+ // protocol41: true }
649
+ addKey(k) {
650
+ if (this.keys === undefined) {
651
+ this.keys = [];
652
+ }
653
+ if (k instanceof RdhKey) {
654
+ this.keys.push(k);
655
+ }
656
+ else {
657
+ this.keys.push(new RdhKey(k));
658
+ }
659
+ }
660
+ toShortString(o) {
661
+ const s = '' + o;
662
+ if (s.length > 48) {
663
+ return s.substring(0, 48) + '..';
664
+ }
665
+ else {
666
+ return s;
667
+ }
668
+ }
669
+ toString(num_of_print = 8) {
670
+ if (this.keys.length < 0) {
671
+ if (this.errorMessage) {
672
+ return 'No Keys. Error:' + this.errorMessage;
673
+ }
674
+ else {
675
+ return 'No Keys. There is nothing error.';
676
+ }
677
+ }
678
+ const buf = list_it_1.default.buffer();
679
+ buf.d('ROW');
680
+ this.keys.forEach((k) => {
681
+ buf.d(this.toShortString(k.name));
682
+ });
683
+ buf.nl();
684
+ buf.d(enum_values_1.EnumValues.getNameFromValue(GeneralColumnType_1.GeneralColumnType, GeneralColumnType_1.GeneralColumnType.INTEGER));
685
+ this.keys.forEach((k) => {
686
+ buf.d(enum_values_1.EnumValues.getNameFromValue(GeneralColumnType_1.GeneralColumnType, k.type));
687
+ });
688
+ buf.nl();
689
+ if (this.rows.length <= num_of_print) {
690
+ this.rows.forEach((v, idx) => {
691
+ buf.d(idx + 1);
692
+ this.keys.forEach((k) => {
693
+ buf.d(this.toShortString(v.values[k.name]));
694
+ });
695
+ buf.nl();
696
+ });
697
+ }
698
+ else {
699
+ const num_of_head = Math.ceil(num_of_print / 2);
700
+ this.rows.slice(0, num_of_head).forEach((v, idx) => {
701
+ buf.d(idx + 1);
702
+ this.keys.forEach((k) => {
703
+ buf.d(this.toShortString(v.values[k.name]));
704
+ });
705
+ buf.nl();
706
+ });
707
+ this.rows
708
+ .slice(this.rows.length - num_of_head, this.rows.length)
709
+ .forEach((v, idx) => {
710
+ buf.d(this.rows.length - num_of_head + idx + 1);
711
+ this.keys.forEach((k) => {
712
+ buf.d(this.toShortString(v.values[k.name]));
713
+ });
714
+ buf.nl();
715
+ });
716
+ }
717
+ return (`RDH NumOfRows:${this.rows.length} Error:${this.errorMessage}\n` +
718
+ buf.toString());
719
+ }
720
+ }
721
+ exports.default = ResultSetDataHolder;
722
+ //# sourceMappingURL=ResultSetDataHolder.js.map