This is an automated email from the ASF dual-hosted git repository.
domoritz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new 62d0b17989 ARROW-16167: [JS] refactor get and set visitors
62d0b17989 is described below
commit 62d0b17989bc624abf1a33215b4fba8915512f3b
Author: Dominik Moritz <[email protected]>
AuthorDate: Wed Apr 13 19:47:37 2022 -0400
ARROW-16167: [JS] refactor get and set visitors
It doesn't seem to make measurable performance differences but the code is
more consistent.
Closes #12858 from domoritz/dom/optimizations
Authored-by: Dominik Moritz <[email protected]>
Signed-off-by: Dominik Moritz <[email protected]>
---
js/src/visitor/get.ts | 18 ++++++++----------
js/src/visitor/set.ts | 6 +++---
2 files changed, 11 insertions(+), 13 deletions(-)
diff --git a/js/src/visitor/get.ts b/js/src/visitor/get.ts
index 1fd946fd94..8f6cd7fed2 100644
--- a/js/src/visitor/get.ts
+++ b/js/src/visitor/get.ts
@@ -211,20 +211,18 @@ const getDecimal = <T extends Decimal>({ values, stride
}: Data<T>, index: numbe
/** @ignore */
const getList = <T extends List>(data: Data<T>, index: number): T['TValue'] =>
{
- const { valueOffsets, stride } = data;
- const { [index * stride]: begin } = valueOffsets;
- const { [index * stride + 1]: end } = valueOffsets;
- const child: Data<T['valueType']> = data.children[0];
+ const { valueOffsets, stride, children } = data;
+ const { [index * stride]: begin, [index * stride + 1]: end } =
valueOffsets;
+ const child: Data<T['valueType']> = children[0];
const slice = child.slice(begin, end - begin);
return new Vector([slice]) as T['TValue'];
};
/** @ignore */
const getMap = <T extends Map_>(data: Data<T>, index: number): T['TValue'] => {
- const { valueOffsets } = data;
- const { [index]: begin } = valueOffsets;
- const { [index + 1]: end } = valueOffsets;
- const child = data.children[0] as Data<T['childType']>;
+ const { valueOffsets, children } = data;
+ const { [index]: begin, [index + 1]: end } = valueOffsets;
+ const child = children[0] as Data<T['childType']>;
return new MapRow(child.slice(begin, end - begin));
};
@@ -283,8 +281,8 @@ const getIntervalYearMonth = <T extends
IntervalYearMonth>({ values }: Data<T>,
/** @ignore */
const getFixedSizeList = <T extends FixedSizeList>(data: Data<T>, index:
number): T['TValue'] => {
- const { stride } = data;
- const child: Data<T['valueType']> = data.children[0];
+ const { stride, children } = data;
+ const child: Data<T['valueType']> = children[0];
const slice = child.slice(index * stride, stride);
return new Vector([slice]);
};
diff --git a/js/src/visitor/set.ts b/js/src/visitor/set.ts
index f096da1331..acc1f3d963 100644
--- a/js/src/visitor/set.ts
+++ b/js/src/visitor/set.ts
@@ -118,8 +118,8 @@ export const setEpochMsToNanosecondsLong = (data:
Int32Array, index: number, epo
/** @ignore */
export const setVariableWidthBytes = (values: Uint8Array, valueOffsets:
Int32Array, index: number, value: Uint8Array) => {
- const { [index]: x, [index + 1]: y } = valueOffsets;
- if (x != null && y != null) {
+ if (index + 1 < valueOffsets.length) {
+ const { [index]: x, [index + 1]: y } = valueOffsets;
values.set(value.subarray(0, y - x), x);
}
};
@@ -230,7 +230,7 @@ const setList = <T extends List>(data: Data<T>, index:
number, value: T['TValue'
/** @ignore */
const setMap = <T extends Map_>(data: Data<T>, index: number, value:
T['TValue']) => {
const values = data.children[0];
- const valueOffsets = data.valueOffsets;
+ const { valueOffsets } = data;
const set = instance.getVisitFn(values);
let { [index]: idx, [index + 1]: end } = valueOffsets;
const entries = value instanceof Map ? value.entries() :
Object.entries(value);