pull指定属性

来源:互联网 发布:网络水晶头哪个牌子好 编辑:程序博客网 时间:2024/06/14 04:19
src\query\PullSGArrayUtil.cpp
std::shared_ptr<Array> redistributeWithCallback(std::shared_ptr<Array>& inputArray,                                           PullSGArrayBlocking::ChunkHandler& chunkHandler,                                           PartialChunkMergerList* mergers,                                           const std::shared_ptr<Query>& query,                                           PartitioningSchema ps,                                           InstanceID destInstanceId,                                           const std::shared_ptr<CoordinateTranslator>& distMapper,                                           size_t shift,                                           const std::shared_ptr<PartitioningSchemaData>& psData,                                           bool enforceDataIntegrity){    if (inputArray->getSupportedAccess() == Array::SINGLE_PASS) {        return redistributeWithCallbackInAttributeOrder(inputArray,                                               chunkHandler,                                               mergers,                                               query,                                               ps,                                               destInstanceId,                                               distMapper,                                               shift,                                               psData,                                               enforceDataIntegrity);    }    std::shared_ptr<Array> tmp = pullRedistribute(inputArray, query, ps,                                             destInstanceId,                                             distMapper,                                             shift,                                             psData,                                             enforceDataIntegrity);    if (tmp == inputArray ) {        SCIDB_ASSERT(!query->getOperatorContext());        return inputArray;    }    PullSGArrayBlocking *arrayToPull = safe_dynamic_cast<PullSGArrayBlocking*>(tmp.get());    assert(arrayToPull->getSupportedAccess()==Array::SINGLE_PASS);    const ArrayDesc& desc = arrayToPull->getArrayDesc();    if (mergers) {        for (AttributeID a=0, n=desc.getAttributes().size(); a < n; ++a) {            SCIDB_ASSERT(a < mergers->size());            std::shared_ptr<MultiStreamArray::PartialChunkMerger>& merger = (*mergers)[a];            if (merger) {                arrayToPull->setPartialChunkMerger(a, merger);                assert(!merger);            }        }    }    std::unordered_set<AttributeID> attributesToPull;    for (AttributeID a=0, n=desc.getAttributes().size(); a < n; ++a) {        attributesToPull.clear();        attributesToPull.insert(a);        arrayToPull->pullAttributes(attributesToPull, chunkHandler);    }    arrayToPull->sync();    return tmp;}

0 0
原创粉丝点击