void ColumnTuple::getExtremes(Field & min, Field & max) const { const size_t tuple_size = columns.size(); min = Tuple(TupleBackend(tuple_size)); max = Tuple(TupleBackend(tuple_size)); auto & min_backend = min.get<Tuple &>().t; auto & max_backend = max.get<Tuple &>().t; for (const auto i : ext::range(0, tuple_size)) columns[i]->getExtremes(min_backend[i], max_backend[i]); }
void DataTypeTuple::deserializeBinary(Field & field, ReadBuffer & istr) const { const size_t size = elems.size(); field = Tuple(TupleBackend(size)); TupleBackend & tuple = get<Tuple &>(field).t; for (const auto i : ext::range(0, size)) elems[i]->deserializeBinary(tuple[i], istr); }
void ColumnTuple::get(size_t n, Field & res) const { const size_t tuple_size = columns.size(); res = Tuple(TupleBackend(tuple_size)); TupleBackend & res_arr = DB::get<Tuple &>(res).t; for (const auto i : ext::range(0, tuple_size)) columns[i]->get(n, res_arr[i]); }
Field convertNodeToField(capnp::DynamicValue::Reader value) { switch (value.getType()) { case capnp::DynamicValue::UNKNOWN: throw Exception("Unknown field type", ErrorCodes::BAD_TYPE_OF_FIELD); case capnp::DynamicValue::VOID: return Field(); case capnp::DynamicValue::BOOL: return value.as<bool>() ? 1u : 0u; case capnp::DynamicValue::INT: return value.as<int64_t>(); case capnp::DynamicValue::UINT: return value.as<uint64_t>(); case capnp::DynamicValue::FLOAT: return value.as<double>(); case capnp::DynamicValue::TEXT: { auto arr = value.as<capnp::Text>(); return String(arr.begin(), arr.size()); } case capnp::DynamicValue::DATA: { auto arr = value.as<capnp::Data>().asChars(); return String(arr.begin(), arr.size()); } case capnp::DynamicValue::LIST: { auto listValue = value.as<capnp::DynamicList>(); Array res(listValue.size()); for (auto i : kj::indices(listValue)) res[i] = convertNodeToField(listValue[i]); return res; } case capnp::DynamicValue::ENUM: return value.as<capnp::DynamicEnum>().getRaw(); case capnp::DynamicValue::STRUCT: { auto structValue = value.as<capnp::DynamicStruct>(); const auto & fields = structValue.getSchema().getFields(); Field field = Tuple(TupleBackend(fields.size())); TupleBackend & tuple = get<Tuple &>(field).toUnderType(); for (auto i : kj::indices(fields)) tuple[i] = convertNodeToField(structValue.get(fields[i])); return field; } case capnp::DynamicValue::CAPABILITY: throw Exception("CAPABILITY type not supported", ErrorCodes::BAD_TYPE_OF_FIELD); case capnp::DynamicValue::ANY_POINTER: throw Exception("ANY_POINTER type not supported", ErrorCodes::BAD_TYPE_OF_FIELD); } return Field(); }