File size: 14,181 Bytes
be5030f
1
{"version":3,"sources":["visitor/jsonvectorassembler.ts"],"names":[],"mappings":"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","file":"jsonvectorassembler.js","sourcesContent":["// Licensed to the Apache Software Foundation (ASF) under one\n// or more contributor license agreements.  See the NOTICE file\n// distributed with this work for additional information\n// regarding copyright ownership.  The ASF licenses this file\n// to you under the Apache License, Version 2.0 (the\n// \"License\"); you may not use this file except in compliance\n// with the License.  You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing,\n// software distributed under the License is distributed on an\n// \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n// KIND, either express or implied.  See the License for the\n// specific language governing permissions and limitations\n// under the License.\n\nimport { BN } from '../util/bn';\nimport { Column } from '../column';\nimport { Vector } from '../vector';\nimport { Visitor } from '../visitor';\nimport { BufferType } from '../enum';\nimport { RecordBatch } from '../recordbatch';\nimport { VectorType as V } from '../interfaces';\nimport { UnionMode, DateUnit, TimeUnit } from '../enum';\nimport { iterateBits, getBit, getBool } from '../util/bit';\nimport { selectColumnChildrenArgs } from '../util/args';\nimport {\n    DataType,\n    Float, Int, Date_, Interval, Time, Timestamp, Union,\n    Bool, Null, Utf8, Binary, Decimal, FixedSizeBinary, List, FixedSizeList, Map_, Struct,\n} from '../type';\n\n/** @ignore */\nexport interface JSONVectorAssembler extends Visitor {\n\n    visit     <T extends Column>  (node: T  ): object;\n    visitMany <T extends Column>  (cols: T[]): object[];\n    getVisitFn<T extends DataType>(node: Column<T>): (column: Column<T>) => { name: string, count: number, VALIDITY: (0 | 1)[], DATA?: any[], OFFSET?: number[], TYPE?: number[], children?: any[] };\n\n    visitNull                 <T extends Null>            (vector: V<T>): { };\n    visitBool                 <T extends Bool>            (vector: V<T>): { DATA: boolean[] };\n    visitInt                  <T extends Int>             (vector: V<T>): { DATA: (number | string)[]  };\n    visitFloat                <T extends Float>           (vector: V<T>): { DATA: number[]  };\n    visitUtf8                 <T extends Utf8>            (vector: V<T>): { DATA: string[], OFFSET: number[] };\n    visitBinary               <T extends Binary>          (vector: V<T>): { DATA: string[], OFFSET: number[] };\n    visitFixedSizeBinary      <T extends FixedSizeBinary> (vector: V<T>): { DATA: string[]  };\n    visitDate                 <T extends Date_>           (vector: V<T>): { DATA: number[]  };\n    visitTimestamp            <T extends Timestamp>       (vector: V<T>): { DATA: string[]  };\n    visitTime                 <T extends Time>            (vector: V<T>): { DATA: number[]  };\n    visitDecimal              <T extends Decimal>         (vector: V<T>): { DATA: string[]  };\n    visitList                 <T extends List>            (vector: V<T>): { children: any[], OFFSET: number[] };\n    visitStruct               <T extends Struct>          (vector: V<T>): { children: any[] };\n    visitUnion                <T extends Union>           (vector: V<T>): { children: any[], TYPE: number[],  };\n    visitInterval             <T extends Interval>        (vector: V<T>): { DATA: number[]  };\n    visitFixedSizeList        <T extends FixedSizeList>   (vector: V<T>): { children: any[] };\n    visitMap                  <T extends Map_>            (vector: V<T>): { children: any[] };\n}\n\n/** @ignore */\nexport class JSONVectorAssembler extends Visitor {\n\n    /** @nocollapse */\n    public static assemble<T extends Column | RecordBatch>(...args: (T | T[])[]) {\n        return new JSONVectorAssembler().visitMany(selectColumnChildrenArgs(RecordBatch, args));\n    }\n\n    public visit<T extends Column>(column: T) {\n        const { data, name, length } = column;\n        const { offset, nullCount, nullBitmap } = data;\n        const type = DataType.isDictionary(column.type) ? column.type.indices : column.type;\n        const buffers = Object.assign([], data.buffers, { [BufferType.VALIDITY]: undefined });\n        return {\n            'name': name,\n            'count': length,\n            'VALIDITY': DataType.isNull(type) ? undefined\n                : nullCount <= 0 ? Array.from({ length }, () => 1)\n                : [...iterateBits(nullBitmap, offset, length, null, getBit)],\n            ...super.visit(Vector.new(data.clone(type, offset, length, 0, buffers)))\n        };\n    }\n    public visitNull() { return {}; }\n    public visitBool<T extends Bool>({ values, offset, length }: V<T>) {\n        return { 'DATA': [...iterateBits(values, offset, length, null, getBool)] };\n    }\n    public visitInt<T extends Int>(vector: V<T>) {\n        return {\n            'DATA': vector.type.bitWidth < 64\n                ? [...vector.values]\n                : [...bigNumsToStrings(vector.values as (Int32Array | Uint32Array), 2)]\n        };\n    }\n    public visitFloat<T extends Float>(vector: V<T>) {\n        return { 'DATA': [...vector.values] };\n    }\n    public visitUtf8<T extends Utf8>(vector: V<T>) {\n        return { 'DATA': [...vector], 'OFFSET': [...vector.valueOffsets] };\n    }\n    public visitBinary<T extends Binary>(vector: V<T>) {\n        return { 'DATA': [...binaryToString(vector)], OFFSET: [...vector.valueOffsets] };\n    }\n    public visitFixedSizeBinary<T extends FixedSizeBinary>(vector: V<T>) {\n        return { 'DATA': [...binaryToString(vector)] };\n    }\n    public visitDate<T extends Date_>(vector: V<T>) {\n        return {\n            'DATA': vector.type.unit === DateUnit.DAY\n                ? [...vector.values]\n                : [...bigNumsToStrings(vector.values, 2)]\n        };\n    }\n    public visitTimestamp<T extends Timestamp>(vector: V<T>) {\n        return { 'DATA': [...bigNumsToStrings(vector.values, 2)] };\n    }\n    public visitTime<T extends Time>(vector: V<T>) {\n        return {\n            'DATA': vector.type.unit < TimeUnit.MICROSECOND\n                ? [...vector.values]\n                : [...bigNumsToStrings(vector.values, 2)]\n        };\n    }\n    public visitDecimal<T extends Decimal>(vector: V<T>) {\n        return { 'DATA': [...bigNumsToStrings(vector.values, 4)] };\n    }\n    public visitList<T extends List>(vector: V<T>) {\n        return {\n            'OFFSET': [...vector.valueOffsets],\n            'children': vector.type.children.map((f, i) =>\n                this.visit(new Column(f, [vector.getChildAt(i)!])))\n        };\n    }\n    public visitStruct<T extends Struct>(vector: V<T>) {\n        return {\n            'children': vector.type.children.map((f, i) =>\n                this.visit(new Column(f, [vector.getChildAt(i)!])))\n        };\n    }\n    public visitUnion<T extends Union>(vector: V<T>) {\n        return {\n            'TYPE': [...vector.typeIds],\n            'OFFSET': vector.type.mode === UnionMode.Dense ? [...vector.valueOffsets] : undefined,\n            'children': vector.type.children.map((f, i) => this.visit(new Column(f, [vector.getChildAt(i)!])))\n        };\n    }\n    public visitInterval<T extends Interval>(vector: V<T>) {\n        return { 'DATA': [...vector.values] };\n    }\n    public visitFixedSizeList<T extends FixedSizeList>(vector: V<T>) {\n        return {\n            'children': vector.type.children.map((f, i) =>\n                this.visit(new Column(f, [vector.getChildAt(i)!])))\n        };\n    }\n    public visitMap<T extends Map_>(vector: V<T>) {\n        return {\n            'OFFSET': [...vector.valueOffsets],\n            'children': vector.type.children.map((f, i) =>\n                this.visit(new Column(f, [vector.getChildAt(i)!])))\n        };\n    }\n}\n\n/** @ignore */\nfunction* binaryToString(vector: Vector<Binary> | Vector<FixedSizeBinary>) {\n    for (const octets of vector as Iterable<Uint8Array>) {\n        yield octets.reduce((str, byte) => {\n            return `${str}${('0' + (byte & 0xFF).toString(16)).slice(-2)}`;\n        }, '').toUpperCase();\n    }\n}\n\n/** @ignore */\nfunction* bigNumsToStrings(values: Uint32Array | Int32Array, stride: number) {\n    for (let i = -1, n = values.length / stride; ++i < n;) {\n        yield `${BN.new(values.subarray((i + 0) * stride, (i + 1) * stride), false)}`;\n    }\n}\n"]}