158 lines
5.7 KiB
JavaScript
158 lines
5.7 KiB
JavaScript
"use strict";
|
|
// Licensed to the Apache Software Foundation (ASF) under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The ASF licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const data_1 = require("../data");
|
|
const schema_1 = require("../schema");
|
|
const column_1 = require("../column");
|
|
const vector_1 = require("../vector");
|
|
const type_1 = require("../type");
|
|
const chunked_1 = require("../vector/chunked");
|
|
const isArray = Array.isArray;
|
|
/** @ignore */
|
|
exports.selectArgs = (Ctor, vals) => _selectArgs(Ctor, vals, [], 0);
|
|
/** @ignore */
|
|
exports.selectColumnArgs = (args) => {
|
|
const [fields, values] = _selectFieldArgs(args, [[], []]);
|
|
return values.map((x, i) => x instanceof column_1.Column ? column_1.Column.new(x.field.clone(fields[i]), x) :
|
|
x instanceof vector_1.Vector ? column_1.Column.new(fields[i], x) :
|
|
column_1.Column.new(fields[i], []));
|
|
};
|
|
/** @ignore */
|
|
exports.selectFieldArgs = (args) => _selectFieldArgs(args, [[], []]);
|
|
/** @ignore */
|
|
exports.selectChunkArgs = (Ctor, vals) => _selectChunkArgs(Ctor, vals, [], 0);
|
|
/** @ignore */
|
|
exports.selectVectorChildrenArgs = (Ctor, vals) => _selectVectorChildrenArgs(Ctor, vals, [], 0);
|
|
/** @ignore */
|
|
exports.selectColumnChildrenArgs = (Ctor, vals) => _selectColumnChildrenArgs(Ctor, vals, [], 0);
|
|
/** @ignore */
|
|
function _selectArgs(Ctor, vals, res, idx) {
|
|
let value, j = idx;
|
|
let i = -1, n = vals.length;
|
|
while (++i < n) {
|
|
if (isArray(value = vals[i])) {
|
|
j = _selectArgs(Ctor, value, res, j).length;
|
|
}
|
|
else if (value instanceof Ctor) {
|
|
res[j++] = value;
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
/** @ignore */
|
|
function _selectChunkArgs(Ctor, vals, res, idx) {
|
|
let value, j = idx;
|
|
let i = -1, n = vals.length;
|
|
while (++i < n) {
|
|
if (isArray(value = vals[i])) {
|
|
j = _selectChunkArgs(Ctor, value, res, j).length;
|
|
}
|
|
else if (value instanceof chunked_1.Chunked) {
|
|
j = _selectChunkArgs(Ctor, value.chunks, res, j).length;
|
|
}
|
|
else if (value instanceof Ctor) {
|
|
res[j++] = value;
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
/** @ignore */
|
|
function _selectVectorChildrenArgs(Ctor, vals, res, idx) {
|
|
let value, j = idx;
|
|
let i = -1, n = vals.length;
|
|
while (++i < n) {
|
|
if (isArray(value = vals[i])) {
|
|
j = _selectVectorChildrenArgs(Ctor, value, res, j).length;
|
|
}
|
|
else if (value instanceof Ctor) {
|
|
j = _selectArgs(vector_1.Vector, value.schema.fields.map((_, i) => value.getChildAt(i)), res, j).length;
|
|
}
|
|
else if (value instanceof vector_1.Vector) {
|
|
res[j++] = value;
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
/** @ignore */
|
|
function _selectColumnChildrenArgs(Ctor, vals, res, idx) {
|
|
let value, j = idx;
|
|
let i = -1, n = vals.length;
|
|
while (++i < n) {
|
|
if (isArray(value = vals[i])) {
|
|
j = _selectColumnChildrenArgs(Ctor, value, res, j).length;
|
|
}
|
|
else if (value instanceof Ctor) {
|
|
j = _selectArgs(column_1.Column, value.schema.fields.map((f, i) => column_1.Column.new(f, value.getChildAt(i))), res, j).length;
|
|
}
|
|
else if (value instanceof column_1.Column) {
|
|
res[j++] = value;
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
/** @ignore */
|
|
const toKeysAndValues = (xs, [k, v], i) => (xs[0][i] = k, xs[1][i] = v, xs);
|
|
/** @ignore */
|
|
function _selectFieldArgs(vals, ret) {
|
|
let keys, n;
|
|
switch (n = vals.length) {
|
|
case 0: return ret;
|
|
case 1:
|
|
keys = ret[0];
|
|
if (!(vals[0])) {
|
|
return ret;
|
|
}
|
|
if (isArray(vals[0])) {
|
|
return _selectFieldArgs(vals[0], ret);
|
|
}
|
|
if (!(vals[0] instanceof data_1.Data || vals[0] instanceof vector_1.Vector || vals[0] instanceof type_1.DataType)) {
|
|
[keys, vals] = Object.entries(vals[0]).reduce(toKeysAndValues, ret);
|
|
}
|
|
break;
|
|
default:
|
|
!isArray(keys = vals[n - 1])
|
|
? (vals = isArray(vals[0]) ? vals[0] : vals, keys = [])
|
|
: (vals = isArray(vals[0]) ? vals[0] : vals.slice(0, n - 1));
|
|
}
|
|
let fieldIndex = -1;
|
|
let valueIndex = -1;
|
|
let idx = -1, len = vals.length;
|
|
let field;
|
|
let val;
|
|
let [fields, values] = ret;
|
|
while (++idx < len) {
|
|
val = vals[idx];
|
|
if (val instanceof column_1.Column && (values[++valueIndex] = val)) {
|
|
fields[++fieldIndex] = val.field.clone(keys[idx], val.type, true);
|
|
}
|
|
else {
|
|
({ [idx]: field = idx } = keys);
|
|
if (val instanceof type_1.DataType && (values[++valueIndex] = val)) {
|
|
fields[++fieldIndex] = schema_1.Field.new(field, val, true);
|
|
}
|
|
else if (val && val.type && (values[++valueIndex] = val)) {
|
|
val instanceof data_1.Data && (values[valueIndex] = val = vector_1.Vector.new(val));
|
|
fields[++fieldIndex] = schema_1.Field.new(field, val.type, true);
|
|
}
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
//# sourceMappingURL=args.js.map
|