This repository was archived by the owner on May 6, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathBatch.h
More file actions
96 lines (78 loc) · 2.78 KB
/
Batch.h
File metadata and controls
96 lines (78 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
* Copyright(c) 2022-2023 Intel Corporation.
*
* 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.
*/
#ifndef NEXTGEN_CONTEXT_BATCH_H
#define NEXTGEN_CONTEXT_BATCH_H
#include <memory>
#include <unordered_map>
#include "exec/module/batch/ArrowABI.h"
#include "include/cider/batch/CiderBatchUtils.h"
class CiderAllocator;
using CiderAllocatorPtr = std::shared_ptr<CiderAllocator>;
namespace cider::exec::nextgen::context {
class Batch {
public:
Batch(const SQLTypeInfo& type,
const CiderAllocatorPtr& allocator,
std::unordered_map<int, int> bare_output_input_map)
: bare_output_input_map_(bare_output_input_map) {
schema_.release = nullptr;
array_.release = nullptr;
}
Batch(ArrowSchema& schema, ArrowArray& array) : schema_(schema), array_(array) {}
Batch() {}
~Batch() { release(); }
bool isEmpty() { return array_.length == 0; }
// output batch can reuse input_array's children
// temporary batch(used for materialization) no need to reuse other array's children
void reset(const SQLTypeInfo& type,
const CiderAllocatorPtr& allocator,
const ArrowArray* input_array = nullptr,
const ArrowSchema* input_schema = nullptr);
void move(ArrowSchema& schema, ArrowArray& array) {
schema = schema_;
array = array_;
schema_.release = nullptr;
array_.release = nullptr;
}
void release() {
if (schema_.release) {
schema_.release(&schema_);
}
schema_.release = nullptr;
if (array_.release) {
array_.release(&array_);
}
array_.release = nullptr;
}
bool isMoved() const { return schema_.release; }
ArrowArray* getArray() { return &array_; }
ArrowSchema* getSchema() { return &schema_; }
private:
ArrowSchema schema_;
ArrowArray array_;
// bare column map
// output column id to input column id;
std::unordered_map<int, int> bare_output_input_map_;
};
using BatchPtr = std::unique_ptr<Batch>;
using BatchSharedPtr = std::shared_ptr<Batch>;
} // namespace cider::exec::nextgen::context
#endif // NEXTGEN_CONTEXT_BATCH_H