28 namespace CUDF_EXPORT
cudf {
38 class expression_parser;
39 class expression_transformer;
63 virtual std::reference_wrapper<expression const>
accept(
64 detail::expression_transformer& visitor)
const = 0;
75 return may_evaluate_null(left, left, stream);
182 template <
typename T>
183 __device__ T
const value() const noexcept
185 if constexpr (std::is_same_v<T, cudf::string_view>) {
186 return string_view(
static_cast<char const*
>(_data), _size);
188 return *
static_cast<T const*
>(_data);
195 template <
typename T>
205 template <
typename T>
215 template <
typename T>
243 :
cudf::detail::scalar_device_view_base(type,
is_valid), _data(data)
256 :
cudf::detail::scalar_device_view_base(type,
is_valid), _data(data), _size(size)
272 template <
typename T>
283 template <
typename T>
294 template <
typename T>
328 std::reference_wrapper<expression const>
accept(
329 detail::expression_transformer& visitor)
const override;
368 : column_index(column_index), table_source(table_source)
394 return table.column(get_column_index()).type();
407 auto const table = [&] {
408 if (get_table_source() == table_reference::LEFT) {
410 }
else if (get_table_source() == table_reference::RIGHT) {
413 CUDF_FAIL(
"Column reference data type cannot be determined from unknown table.");
416 return table.column(get_column_index()).type();
427 std::reference_wrapper<expression const>
accept(
428 detail::expression_transformer& visitor)
const override;
434 return (table_source == table_reference::LEFT ? left : right).column(column_index).has_nulls();
483 [[nodiscard]] std::vector<std::reference_wrapper<expression const>>
const&
get_operands()
const
496 std::reference_wrapper<expression const>
accept(
497 detail::expression_transformer& visitor)
const override;
503 return std::any_of(operands.cbegin(),
505 [&left, &right, &stream](std::reference_wrapper<expression const> subexpr) {
506 return subexpr.get().may_evaluate_null(left, right, stream);
512 std::vector<std::reference_wrapper<expression const>> operands;
543 std::reference_wrapper<expression const>
accept(
544 detail::expression_transformer& visitor)
const override;
554 std::string column_name;
583 tree& operator=(
tree const&) =
delete;
590 template <
typename Expr,
typename... Args>
591 std::enable_if_t<std::is_base_of_v<expression, Expr>, Expr
const&>
emplace(Args&&... args)
593 auto expr = std::make_unique<Expr>(std::forward<Args>(args)...);
594 Expr
const& expr_ref = *expr;
595 expressions.emplace_back(std::move(expr));
604 template <
typename Expr>
605 decltype(
auto) push(Expr expr)
607 return emplace<Expr>(std::move(expr));
626 [[nodiscard]]
size_t size()
const {
return expressions.size(); }
645 std::vector<std::unique_ptr<expression>> expressions;
cudf::ast::column_name_reference
cudf::ast::column_name_reference::accept
接受一个访问者类。
cudf::ast::column_name_reference::may_evaluate_null
如果表达式可能计算为 null,则返回 true。
cudf::ast::column_name_reference::get_column_name
获取列名。
std::reference_wrapper< expression const > accept(detail::expression_transformer &visitor) const override
cudf::ast::column_name_reference::column_name_reference
cudf::ast::column_name_reference::may_evaluate_null
构造新的列名引用对象。
cudf::ast::column_reference
cudf::ast::column_reference::may_evaluate_null
如果表达式可能计算为 null,则返回 true。
cudf::ast::column_reference::get_data_type
获取数据类型。
cudf::ast::column_reference::accept
接受一个访问者类。
cudf::ast::column_name_reference::may_evaluate_null
cudf::ast::column_reference::get_table_source
cudf::ast::column_name_reference::column_name_reference
cudf::ast::column_name_reference::may_evaluate_null
获取表来源。
cudf::ast::column_reference::column_reference
构造新的列引用对象。
cudf::ast::column_reference::get_column_index
获取列索引。
cudf::ast::generic_scalar_device_view
cudf::ast::generic_scalar_device_view::generic_scalar_device_view
从 duration scalar 构造新的通用 scalar device view 对象。
generic_scalar_device_view(data_type type, void const *data, bool *is_valid)
构造新的固定宽度 scalar device view 对象。
generic_scalar_device_view(string_scalar &s)
从 string scalar 构造新的通用 scalar device view 对象。
generic_scalar_device_view(timestamp_scalar< T > &s)
从 timestamp scalar 构造新的通用 scalar device view 对象。
generic_scalar_device_view(data_type type, void const *data, bool *is_valid, size_type size)
构造新的 string scalar device view 对象。
cudf::ast::generic_scalar_device_view::value
返回存储的值。
generic_scalar_device_view(numeric_scalar< T > &s)
从 numeric scalar 构造新的通用 scalar device view 对象。
cudf::ast::literal
cudf::ast::literal::literal
构造新的字面值对象。
cudf::ast::literal::accept
接受一个访问者类。
cudf::ast::column_name_reference::may_evaluate_null
获取值对象。
cudf::ast::literal::get_data_type
literal(cudf::string_scalar &value)
literal(cudf::duration_scalar< T > &value)
cudf::ast::literal::is_valid
检查底层 scalar 是否有效。
cudf::ast::literal::may_evaluate_null
cudf::ast::column_name_reference::column_name_reference
cudf::ast::column_name_reference::may_evaluate_null
如果表达式可能计算为 null,则返回 true。
literal(cudf::timestamp_scalar< T > &value)
cudf::ast::operation::may_evaluate_null
如果表达式可能计算为 null,则返回 true。
cudf::ast::operation::get_operands
获取操作数。
cudf::ast::operation::get_operator
获取运算符。
cudf::ast::operation::operation
构造新的二元操作对象。
cudf::ast::operation::accept
cudf::ast::column_name_reference::column_name_reference
cudf::ast::column_name_reference::may_evaluate_null
构造新的一元操作对象。
cudf::ast::tree
接受一个访问者类。
cudf::ast::column_name_reference::may_evaluate_null
移动 AST 树。
cudf::ast::tree::operator=
移动赋值 AST 树
cudf::ast::tree::size
获取添加到树中的表达式数量
cudf::ast::tree::emplace
将表达式添加到 AST 树。
tree()=default
构造一个空的 AST 树
cudf::ast::tree::front
获取树中的第一个表达式
cudf::ast::tree::at
获取树中指定索引处的表达式。索引会被检查。
cudf::ast::tree::back
获取树中的最后一个表达式
cudf::ast::tree::operator[]
获取树中指定索引处的表达式。索引不会被检查。
cudf::data_type
cudf::detail::scalar_device_view_base
bool is_valid(rmm::cuda_stream_view stream=cudf::get_default_stream()) const
指示标量是否包含有效值。
设备数据的非拥有、不可变视图,是一个表示UTF-8的可变长度字符数组...
一组大小相同的 cudf::column_view。
@ DIV
使用 lhs 和 rhs 的公共类型进行操作符 /
@ PYMOD
使用 Python 的负数符号规则进行操作符 %
@ RINT
将浮点参数 arg 四舍五入到整数值。
@ CAST_TO_FLOAT64
将值转换为 double。
@ TRUE_DIV
将类型提升为浮点后进行操作符 /
@ CAST_TO_UINT64
将值转换为 uint64_t。
@ CAST_TO_INT64
将值转换为 int64_t。
#define CUDF_FAIL(...)
指示已执行错误的码路径。
int32_t size_type
列和表格的行索引类型。
bool may_evaluate_null(table_view const &left, rmm::cuda_stream_view stream) const
virtual cudf::size_type accept(detail::expression_parser &visitor) const =0
cudf::ast::column_name_reference::may_evaluate_null
virtual std::reference_wrapper< expression const > accept(detail::expression_transformer &visitor) const =0
cudf::ast::column_name_reference::may_evaluate_null
virtual bool may_evaluate_null(table_view const &left, table_view const &right, rmm::cuda_stream_view stream) const =0
(mutable)_table_view 的类定义