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);

Reply via email to