@abaplint/runtime 2.7.148 → 2.7.150
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.
|
@@ -5,6 +5,41 @@ const binary_search_1 = require("../binary_search");
|
|
|
5
5
|
const compare_1 = require("../compare");
|
|
6
6
|
const types_1 = require("../types");
|
|
7
7
|
/** startIndex = javascript index, return ABAP index */
|
|
8
|
+
function searchWithKeyEarlyExit(arr, withKey, startIndex = 0, usesTableLine, firstKeyName, firstValue) {
|
|
9
|
+
const isStructured = arr[0] instanceof types_1.Structure;
|
|
10
|
+
for (let index = startIndex; index < arr.length; index++) {
|
|
11
|
+
const a = arr[index];
|
|
12
|
+
let row = undefined;
|
|
13
|
+
if (usesTableLine === false && isStructured === true) {
|
|
14
|
+
row = a.get();
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
row = isStructured ? Object.assign({ table_line: a }, a.get()) : { table_line: a };
|
|
18
|
+
}
|
|
19
|
+
if (withKey(row) === true) {
|
|
20
|
+
return {
|
|
21
|
+
found: a,
|
|
22
|
+
foundIndex: index + 1,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/*
|
|
26
|
+
console.dir(row);
|
|
27
|
+
console.dir(row[firstKeyName.toLowerCase()]);
|
|
28
|
+
console.dir(firstValue);
|
|
29
|
+
*/
|
|
30
|
+
if ((0, compare_1.gt)(row[firstKeyName.toLowerCase()], firstValue)) {
|
|
31
|
+
return {
|
|
32
|
+
found: undefined,
|
|
33
|
+
foundIndex: 0,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
found: undefined,
|
|
39
|
+
foundIndex: 0,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** startIndex = javascript index, return ABAP index */
|
|
8
43
|
function searchWithKey(arr, withKey, startIndex = 0, usesTableLine) {
|
|
9
44
|
const isStructured = arr[0] instanceof types_1.Structure;
|
|
10
45
|
for (let index = startIndex; index < arr.length; index++) {
|
|
@@ -121,8 +156,7 @@ function readTable(table, options) {
|
|
|
121
156
|
const startIndex = (0, binary_search_1.binarySearchFrom)(arr, 0, arr.length, firstKeyName.toLowerCase(), firstValue) - 1;
|
|
122
157
|
// console.dir("startindex: " + startIndex);
|
|
123
158
|
if (startIndex >= 0) {
|
|
124
|
-
|
|
125
|
-
const searchResult = searchWithKey(arr, options.withKey, startIndex, options.usesTableLine);
|
|
159
|
+
const searchResult = searchWithKeyEarlyExit(arr, options.withKey, startIndex, options.usesTableLine, firstKeyName, firstValue);
|
|
126
160
|
// console.dir(searchResult);
|
|
127
161
|
found = searchResult.found;
|
|
128
162
|
foundIndex = searchResult.foundIndex;
|
|
@@ -79,7 +79,7 @@ export declare class HashedTable implements ITable {
|
|
|
79
79
|
clear(): void;
|
|
80
80
|
set(tab: HashedTable | TableRowType): ITable;
|
|
81
81
|
getHeader(): TableRowType;
|
|
82
|
-
private
|
|
82
|
+
private cloneRow;
|
|
83
83
|
}
|
|
84
84
|
export declare class Table implements ITable {
|
|
85
85
|
private value;
|
|
@@ -109,6 +109,6 @@ export declare class Table implements ITable {
|
|
|
109
109
|
append(item: TableRowType): any;
|
|
110
110
|
appendInitial(): TableRowType;
|
|
111
111
|
sort(compareFn: (a: TableRowType, b: TableRowType) => number): void;
|
|
112
|
-
private
|
|
112
|
+
private cloneRow;
|
|
113
113
|
}
|
|
114
114
|
export {};
|
package/build/src/types/table.js
CHANGED
|
@@ -9,6 +9,7 @@ const field_symbol_1 = require("./field_symbol");
|
|
|
9
9
|
const data_reference_1 = require("./data_reference");
|
|
10
10
|
const insert_internal_1 = require("../statements/insert_internal");
|
|
11
11
|
const sort_1 = require("../statements/sort");
|
|
12
|
+
// const FEATURE_SHARED_TABLES = true;
|
|
12
13
|
var TableAccessType;
|
|
13
14
|
(function (TableAccessType) {
|
|
14
15
|
TableAccessType["standard"] = "STANDARD";
|
|
@@ -159,7 +160,7 @@ class HashedTable {
|
|
|
159
160
|
return { value: undefined, subrc: 4 };
|
|
160
161
|
}
|
|
161
162
|
else {
|
|
162
|
-
const val = this.
|
|
163
|
+
const val = this.cloneRow(data);
|
|
163
164
|
for (const loopController of this.loops.values()) {
|
|
164
165
|
loopController.array.push(val);
|
|
165
166
|
}
|
|
@@ -230,7 +231,7 @@ class HashedTable {
|
|
|
230
231
|
return this.header;
|
|
231
232
|
}
|
|
232
233
|
///////////////////////////
|
|
233
|
-
|
|
234
|
+
cloneRow(item) {
|
|
234
235
|
// make sure to do conversion if needed
|
|
235
236
|
if (typeof item === "number") {
|
|
236
237
|
const tmp = (0, clone_1.clone)(this.getRowType());
|
|
@@ -355,7 +356,7 @@ class Table {
|
|
|
355
356
|
}
|
|
356
357
|
let val;
|
|
357
358
|
if (noClone === false) {
|
|
358
|
-
val = this.
|
|
359
|
+
val = this.cloneRow(item);
|
|
359
360
|
}
|
|
360
361
|
else {
|
|
361
362
|
val = item;
|
|
@@ -414,7 +415,7 @@ class Table {
|
|
|
414
415
|
return ref;
|
|
415
416
|
}
|
|
416
417
|
else {
|
|
417
|
-
const val = this.
|
|
418
|
+
const val = this.cloneRow(item);
|
|
418
419
|
this.value.push(val);
|
|
419
420
|
return val;
|
|
420
421
|
}
|
|
@@ -431,7 +432,7 @@ class Table {
|
|
|
431
432
|
this.value.sort(compareFn);
|
|
432
433
|
}
|
|
433
434
|
///////////////////////////
|
|
434
|
-
|
|
435
|
+
cloneRow(item) {
|
|
435
436
|
// make sure to do conversion if needed
|
|
436
437
|
if (typeof item === "number") {
|
|
437
438
|
const tmp = (0, clone_1.clone)(this.getRowType());
|