Skip to content

Commit

Permalink
Fix C, Java, and Node.js API
Browse files Browse the repository at this point in the history
  • Loading branch information
mewim committed Jul 23, 2023
1 parent 2841d9d commit 1a016b3
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 39 deletions.
40 changes: 20 additions & 20 deletions src/c_api/value.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -258,19 +258,19 @@ char* kuzu_value_to_string(kuzu_value* value) {
}

kuzu_value* kuzu_node_val_get_id_val(kuzu_value* node_val) {
// auto id_val = NodeVal::getNodeIDVal(static_cast<Value*>(node_val->_value));
// auto* c_value = (kuzu_value*)malloc(sizeof(kuzu_value));
// c_value->_value = id_val.release();
// c_value->_is_owned_by_cpp = false;
// return c_value;
auto id_val = NodeVal::getNodeIDVal(static_cast<Value*>(node_val->_value));
auto* c_value = (kuzu_value*)malloc(sizeof(kuzu_value));
c_value->_value = id_val;
c_value->_is_owned_by_cpp = true;
return c_value;
}

kuzu_value* kuzu_node_val_get_label_val(kuzu_value* node_val) {
// auto label_val = NodeVal::getLabelVal(static_cast<Value*>(node_val->_value));
// auto* c_value = (kuzu_value*)malloc(sizeof(kuzu_value));
// c_value->_value = label_val.release();
// c_value->_is_owned_by_cpp = false;
// return c_value;
auto label_val = NodeVal::getLabelVal(static_cast<Value*>(node_val->_value));
auto* c_value = (kuzu_value*)malloc(sizeof(kuzu_value));
c_value->_value = label_val;
c_value->_is_owned_by_cpp = true;
return c_value;
}

kuzu_internal_id_t kuzu_node_val_get_id(kuzu_value* node_val) {
Expand Down Expand Up @@ -315,19 +315,19 @@ char* kuzu_node_val_to_string(kuzu_value* node_val) {
}

kuzu_value* kuzu_rel_val_get_src_id_val(kuzu_value* rel_val) {
// auto src_id_val = RelVal::getSrcNodeIDVal(static_cast<Value*>(rel_val->_value));
// auto* c_value = (kuzu_value*)malloc(sizeof(kuzu_value));
// c_value->_value = src_id_val.release();
// c_value->_is_owned_by_cpp = false;
// return c_value;
auto src_id_val = RelVal::getSrcNodeIDVal(static_cast<Value*>(rel_val->_value));
auto* c_value = (kuzu_value*)malloc(sizeof(kuzu_value));
c_value->_value = src_id_val;
c_value->_is_owned_by_cpp = true;
return c_value;
}

kuzu_value* kuzu_rel_val_get_dst_id_val(kuzu_value* rel_val) {
// auto dst_id_val = RelVal::getDstNodeIDVal(static_cast<Value*>(rel_val->_value));
// auto* c_value = (kuzu_value*)malloc(sizeof(kuzu_value));
// c_value->_value = dst_id_val.release();
// c_value->_is_owned_by_cpp = false;
// return c_value;
auto dst_id_val = RelVal::getDstNodeIDVal(static_cast<Value*>(rel_val->_value));
auto* c_value = (kuzu_value*)malloc(sizeof(kuzu_value));
c_value->_value = dst_id_val;
c_value->_is_owned_by_cpp = true;
return c_value;
}

kuzu_internal_id_t kuzu_rel_val_get_src_id(kuzu_value* rel_val) {
Expand Down
14 changes: 6 additions & 8 deletions tools/java_api/src/jni/kuzu_java.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -773,22 +773,20 @@ JNIEXPORT void JNICALL Java_com_kuzudb_KuzuNative_kuzu_1value_1destroy(
JNIEXPORT jlong JNICALL Java_com_kuzudb_KuzuNative_kuzu_1value_1get_1list_1size(
JNIEnv* env, jclass, jobject thisValue) {
Value* v = getValue(env, thisValue);
return static_cast<jlong>(v->getListValReference().size());
return static_cast<jlong>(NestedVal::getChildrenSize(v));
}

JNIEXPORT jobject JNICALL Java_com_kuzudb_KuzuNative_kuzu_1value_1get_1list_1element(
JNIEnv* env, jclass, jobject thisValue, jlong index) {
Value* v = getValue(env, thisValue);
uint64_t idx = static_cast<uint64_t>(index);

auto& list_val = v->getListValReference();

if (idx >= list_val.size()) {
auto size = NestedVal::getChildrenSize(v);
if (idx >= size) {
return nullptr;
}

auto& list_element = list_val[index];
auto val = list_element.get();
auto val = NestedVal::getChildVal(v, idx);

jobject element = createJavaObject(env, val, "com/kuzudb/KuzuValue", "v_ref");
jclass clazz = env->GetObjectClass(element);
Expand Down Expand Up @@ -951,7 +949,7 @@ JNIEXPORT jstring JNICALL Java_com_kuzudb_KuzuNative_kuzu_1node_1val_1get_1prope
JNIEXPORT jobject JNICALL Java_com_kuzudb_KuzuNative_kuzu_1node_1val_1get_1property_1value_1at(
JNIEnv* env, jclass, jobject thisNV, jlong index) {
auto* nv = getValue(env, thisNV);
auto propertyValue = NodeVal::getPropertyValueReference(nv, index);
auto propertyValue = NodeVal::getPropertyVal(nv, index);
jobject ret = createJavaObject(env, propertyValue, "com/kuzudb/KuzuValue", "v_ref");
jclass clazz = env->GetObjectClass(ret);
jfieldID fieldID = env->GetFieldID(clazz, "isOwnedByCPP", "Z");
Expand Down Expand Up @@ -1014,7 +1012,7 @@ JNIEXPORT jobject JNICALL Java_com_kuzudb_KuzuNative_kuzu_1rel_1val_1get_1proper
JNIEnv* env, jclass, jobject thisRV, jlong index) {
auto* rv = getValue(env, thisRV);
uint64_t idx = static_cast<uint64_t>(index);
Value* val = RelVal::getPropertyValueReference(rv, idx);
Value* val = RelVal::getPropertyVal(rv, idx);

jobject ret = createJavaObject(env, val, "com/kuzudb/KuzuValue", "v_ref");
jclass clazz = env->GetObjectClass(ret);
Expand Down
26 changes: 15 additions & 11 deletions tools/nodejs_api/src_cpp/node_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,37 +59,41 @@ Napi::Value Util::ConvertToNapiObject(const Value& value, Napi::Env env) {
}
case LogicalTypeID::VAR_LIST:
case LogicalTypeID::FIXED_LIST: {
auto& listVal = value.getListValReference();
auto napiArray = Napi::Array::New(env, listVal.size());
for (auto i = 0u; i < listVal.size(); ++i) {
napiArray.Set(i, ConvertToNapiObject(*listVal[i], env));
auto size = NestedVal::getChildrenSize(&value);
auto napiArray = Napi::Array::New(env, size);
for (auto i = 0u; i < size; ++i) {
auto childVal = NestedVal::getChildVal(&value, i);
napiArray.Set(i, ConvertToNapiObject(*childVal, env));
}
return napiArray;
}
case LogicalTypeID::STRUCT:
case LogicalTypeID::UNION: {
auto childrenNames = StructType::getFieldNames(&dataType);
auto napiObj = Napi::Object::New(env);
auto& structVal = value.getListValReference();
for (auto i = 0u; i < structVal.size(); ++i) {
auto size = NestedVal::getChildrenSize(&value);
for (auto i = 0u; i < size; ++i) {
auto key = childrenNames[i];
auto val = ConvertToNapiObject(*structVal[i], env);
auto childVal = NestedVal::getChildVal(&value, i);
auto val = ConvertToNapiObject(*childVal, env);
napiObj.Set(key, val);
}
return napiObj;
}
case LogicalTypeID::RECURSIVE_REL: {
auto napiObj = Napi::Object::New(env);
napiObj.Set("_nodes", ConvertToNapiObject(*value.getListValReference()[0], env));
napiObj.Set("_rels", ConvertToNapiObject(*value.getListValReference()[1], env));
auto nodes = RecursiveRelVal::getNodes(&value);
auto rels = RecursiveRelVal::getRels(&value);
napiObj.Set("_nodes", ConvertToNapiObject(*nodes, env));
napiObj.Set("_rels", ConvertToNapiObject(*rels, env));
return napiObj;
}
case LogicalTypeID::NODE: {
Napi::Object napiObj = Napi::Object::New(env);
auto numProperties = NodeVal::getNumProperties(&value);
for (auto i = 0u; i < numProperties; ++i) {
auto key = NodeVal::getPropertyName(&value, i);
auto val = ConvertToNapiObject(*NodeVal::getPropertyValueReference(&value, i), env);
auto val = ConvertToNapiObject(*NodeVal::getPropertyVal(&value, i), env);
napiObj.Set(key, val);
}
napiObj.Set("_label", Napi::String::New(env, NodeVal::getLabelName(&value)));
Expand All @@ -101,7 +105,7 @@ Napi::Value Util::ConvertToNapiObject(const Value& value, Napi::Env env) {
auto numProperties = RelVal::getNumProperties(&value);
for (auto i = 0u; i < numProperties; ++i) {
auto key = RelVal::getPropertyName(&value, i);
auto val = ConvertToNapiObject(*RelVal::getPropertyValueReference(&value, i), env);
auto val = ConvertToNapiObject(*RelVal::getPropertyVal(&value, i), env);
napiObj.Set(key, val);
}
napiObj.Set("_src", ConvertNodeIdToNapiObject(RelVal::getSrcNodeID(&value), env));
Expand Down

0 comments on commit 1a016b3

Please sign in to comment.