25 #include "arrow/compute/api.h"
27 #include "graphar/graph_info.h"
31 using ArrowExpression = arrow::compute::Expression;
52 virtual Result<ArrowExpression>
Evaluate() = 0;
67 Result<ArrowExpression>
Evaluate()
override;
79 std::is_same_v<T, bool> || std::is_same_v<T, int32_t> ||
80 std::is_same_v<T, int64_t> || std::is_same_v<T, float> ||
81 std::is_same_v<T, double> || std::is_same_v<T, std::string> ||
82 std::is_same_v<T, const char*> ||
83 std::is_same_v<T, const char* const>,
84 typename = std::enable_if_t<IsScalar>>
91 Result<ArrowExpression>
Evaluate() {
return arrow::compute::literal(value_); }
109 std::shared_ptr<Expression> expr_;
124 Result<ArrowExpression>
Evaluate()
override;
135 std::shared_ptr<Expression> rhs)
136 : lhs_(lhs), rhs_(rhs) {}
141 inline Status CheckNullArgs(std::shared_ptr<Expression> lhs,
142 std::shared_ptr<Expression> rhs) noexcept {
143 if (lhs ==
nullptr || rhs ==
nullptr) {
150 std::shared_ptr<Expression> lhs_;
151 std::shared_ptr<Expression> rhs_;
163 std::shared_ptr<Expression> rhs)
168 Result<ArrowExpression>
Evaluate()
override;
180 std::shared_ptr<Expression> rhs)
185 Result<ArrowExpression>
Evaluate()
override;
197 std::shared_ptr<Expression> rhs)
202 Result<ArrowExpression>
Evaluate()
override;
214 std::shared_ptr<Expression> rhs)
219 Result<ArrowExpression>
Evaluate()
override;
231 std::shared_ptr<Expression> rhs)
236 Result<ArrowExpression>
Evaluate()
override;
248 std::shared_ptr<Expression> rhs)
253 Result<ArrowExpression>
Evaluate()
override;
265 std::shared_ptr<Expression> rhs)
270 Result<ArrowExpression>
Evaluate()
override;
281 ExpressionOr(std::shared_ptr<Expression> lhs, std::shared_ptr<Expression> rhs)
286 Result<ArrowExpression>
Evaluate()
override;
292 [[nodiscard]]
static inline std::shared_ptr<Expression> _Property(
294 return std::make_shared<ExpressionProperty>(property);
297 [[nodiscard]]
static inline std::shared_ptr<Expression> _Property(
298 const std::string& name) {
299 return std::make_shared<ExpressionProperty>(name);
302 template <
typename T,
304 std::is_same_v<T, bool> || std::is_same_v<T, int32_t> ||
305 std::is_same_v<T, int64_t> || std::is_same_v<T, float> ||
306 std::is_same_v<T, double> || std::is_same_v<T, std::string> ||
307 std::is_same_v<T, const char*> ||
308 std::is_same_v<T, const char* const>,
309 typename = std::enable_if_t<IsScalar>>
310 [[nodiscard]]
static inline std::shared_ptr<Expression> _Literal(T value) {
311 return std::make_shared<ExpressionLiteral<T>>(value);
314 [[nodiscard]]
static inline std::shared_ptr<Expression> _Not(
315 std::shared_ptr<Expression> expr) {
316 return std::make_shared<ExpressionNot>(expr);
319 [[nodiscard]]
static inline std::shared_ptr<Expression> _Equal(
320 std::shared_ptr<Expression> lhs, std::shared_ptr<Expression> rhs) {
321 return std::make_shared<ExpressionEqual>(lhs, rhs);
324 [[nodiscard]]
static inline std::shared_ptr<Expression> _NotEqual(
325 std::shared_ptr<Expression> lhs, std::shared_ptr<Expression> rhs) {
326 return std::make_shared<ExpressionNotEqual>(lhs, rhs);
329 [[nodiscard]]
static inline std::shared_ptr<Expression> _GreaterThan(
330 std::shared_ptr<Expression> lhs, std::shared_ptr<Expression> rhs) {
331 return std::make_shared<ExpressionGreaterThan>(lhs, rhs);
334 [[nodiscard]]
static inline std::shared_ptr<Expression> _GreaterEqual(
335 std::shared_ptr<Expression> lhs, std::shared_ptr<Expression> rhs) {
336 return std::make_shared<ExpressionGreaterEqual>(lhs, rhs);
339 [[nodiscard]]
static inline std::shared_ptr<Expression> _LessThan(
340 std::shared_ptr<Expression> lhs, std::shared_ptr<Expression> rhs) {
341 return std::make_shared<ExpressionLessThan>(lhs, rhs);
344 [[nodiscard]]
static inline std::shared_ptr<Expression> _LessEqual(
345 std::shared_ptr<Expression> lhs, std::shared_ptr<Expression> rhs) {
346 return std::make_shared<ExpressionLessEqual>(lhs, rhs);
349 [[nodiscard]]
static inline std::shared_ptr<Expression> _And(
350 std::shared_ptr<Expression> lhs, std::shared_ptr<Expression> rhs) {
351 return std::make_shared<ExpressionAnd>(lhs, rhs);
354 [[nodiscard]]
static inline std::shared_ptr<Expression> _Or(
355 std::shared_ptr<Expression> lhs, std::shared_ptr<Expression> rhs) {
356 return std::make_shared<ExpressionOr>(lhs, rhs);
Result< ArrowExpression > Evaluate() override
Evaluate Expression as arrow::compute::Expression e.g. new ExpressionEqual(new ExpressionProperty("a"...
Result< ArrowExpression > Evaluate() override
Evaluate Expression as arrow::compute::Expression e.g. new ExpressionEqual(new ExpressionProperty("a"...
Result< ArrowExpression > Evaluate() override
Evaluate Expression as arrow::compute::Expression e.g. new ExpressionEqual(new ExpressionProperty("a"...
Result< ArrowExpression > Evaluate() override
Evaluate Expression as arrow::compute::Expression e.g. new ExpressionEqual(new ExpressionProperty("a"...
virtual Result< ArrowExpression > Evaluate()=0
Evaluate Expression as arrow::compute::Expression e.g. new ExpressionEqual(new ExpressionProperty("a"...
Result< ArrowExpression > Evaluate() override
Evaluate Expression as arrow::compute::Expression e.g. new ExpressionEqual(new ExpressionProperty("a"...
Result< ArrowExpression > Evaluate() override
Evaluate Expression as arrow::compute::Expression e.g. new ExpressionEqual(new ExpressionProperty("a"...
Result< ArrowExpression > Evaluate()
Evaluate Expression as arrow::compute::Expression e.g. new ExpressionEqual(new ExpressionProperty("a"...
Result< ArrowExpression > Evaluate() override
Evaluate Expression as arrow::compute::Expression e.g. new ExpressionEqual(new ExpressionProperty("a"...
Result< ArrowExpression > Evaluate() override
Evaluate Expression as arrow::compute::Expression e.g. new ExpressionEqual(new ExpressionProperty("a"...
Result< ArrowExpression > Evaluate() override
Evaluate Expression as arrow::compute::Expression e.g. new ExpressionEqual(new ExpressionProperty("a"...
Result< ArrowExpression > Evaluate() override
Evaluate Expression as arrow::compute::Expression e.g. new ExpressionEqual(new ExpressionProperty("a"...
Status outcome object (success or error)
static Status Invalid(Args &&... args)