Skip to content

Commit a9a865b

Browse files
authored
fix(interactive): Fix bugs of runtime (#4379)
Fix bugs in scan and group by. Fix #4378
1 parent 9699556 commit a9a865b

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

flex/engines/graph_db/runtime/adhoc/operators/group_by.cc

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,29 @@ std::shared_ptr<IContextColumn> string_to_list(
413413
return builder.finish();
414414
}
415415

416+
template <typename T>
417+
std::shared_ptr<IContextColumn> scalar_to_list(
418+
const Var& var, const std::vector<std::vector<size_t>>& to_aggregate) {
419+
ListValueColumnBuilder<T> builder;
420+
size_t col_size = to_aggregate.size();
421+
builder.reserve(col_size);
422+
std::vector<std::shared_ptr<ListImplBase>> impls;
423+
for (size_t k = 0; k < col_size; ++k) {
424+
auto& vec = to_aggregate[k];
425+
426+
std::vector<T> elem;
427+
for (auto idx : vec) {
428+
elem.push_back(TypedConverter<T>::to_typed(var.get(idx)));
429+
}
430+
auto impl = ListImpl<T>::make_list_impl(std::move(elem));
431+
auto list = List::make_list(impl);
432+
impls.emplace_back(impl);
433+
builder.push_back_opt(list);
434+
}
435+
builder.set_list_impls(impls);
436+
return builder.finish();
437+
}
438+
416439
bl::result<std::shared_ptr<IContextColumn>> apply_reduce(
417440
const AggFunc& func, const std::vector<std::vector<size_t>>& to_aggregate) {
418441
if (func.aggregate == AggrKind::kSum) {
@@ -497,6 +520,14 @@ bl::result<std::shared_ptr<IContextColumn>> apply_reduce(
497520
return tuple_to_list(var, to_aggregate);
498521
} else if (var.type() == RTAnyType::kStringValue) {
499522
return string_to_list(var, to_aggregate);
523+
} else if (var.type() == RTAnyType::kI32Value) {
524+
return scalar_to_list<int32_t>(var, to_aggregate);
525+
} else if (var.type() == RTAnyType::kI64Value) {
526+
return scalar_to_list<int64_t>(var, to_aggregate);
527+
} else if (var.type() == RTAnyType::kU64Value) {
528+
return scalar_to_list<uint64_t>(var, to_aggregate);
529+
} else if (var.type() == RTAnyType::kF64Value) {
530+
return scalar_to_list<double>(var, to_aggregate);
500531
} else {
501532
LOG(FATAL) << "not support" << static_cast<int>(var.type().type_enum_);
502533
}

flex/engines/graph_db/runtime/common/operators/scan.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,10 @@ bl::result<Context> Scan::find_vertex_with_id(const ReadTransaction& txn,
4747
}
4848
if (GlobalId::get_label_id(gid) == label) {
4949
vid = GlobalId::get_vid(gid);
50+
builder.push_back_opt(vid);
5051
} else {
5152
LOG(ERROR) << "Global id " << gid << " does not match label " << label;
52-
return Context();
5353
}
54-
builder.push_back_opt(vid);
5554
Context ctx;
5655
ctx.set(alias, builder.finish());
5756
return ctx;

flex/engines/graph_db/runtime/common/rt_any.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,7 @@ class ListImpl : ListImplBase {
420420
static std::shared_ptr<ListImplBase> make_list_impl(std::vector<T>&& vals) {
421421
auto new_list = new ListImpl<T>();
422422
new_list->list_ = std::move(vals);
423+
new_list->is_valid_.resize(new_list->list_.size(), true);
423424
return std::shared_ptr<ListImplBase>(static_cast<ListImplBase*>(new_list));
424425
}
425426

0 commit comments

Comments
 (0)