From 8351dc6668019f792e29a833d661ac338f0c9963 Mon Sep 17 00:00:00 2001 From: siyuan0322 Date: Mon, 9 Jan 2023 18:03:43 +0800 Subject: [PATCH 1/5] bool to int --- .../com/alibaba/graphscope/common/IrPlan.java | 2 +- .../graphscope/common/jna/IrCoreLibrary.java | 2 +- .../executor/ir/core/rust-toolchain.toml | 5 -- .../executor/ir/core/src/plan/ffi.rs | 8 +- .../executor/ir/core/src/plan/physical.rs | 77 ++++++++++++++++++- 5 files changed, 83 insertions(+), 11 deletions(-) delete mode 100644 interactive_engine/executor/ir/core/rust-toolchain.toml diff --git a/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/IrPlan.java b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/IrPlan.java index 4d6a98beb8c5..c8e97083e5fd 100644 --- a/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/IrPlan.java +++ b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/IrPlan.java @@ -189,7 +189,7 @@ public Pointer apply(InterOpBase baseOp) { } List exprWithAlias = (List) exprOpt.get().applyArg(); // append always and sink by parameters - Pointer ptrProject = irCoreLib.initProjectOperator(true); + Pointer ptrProject = irCoreLib.initProjectOperator(1); exprWithAlias.forEach( p -> { String expr = (String) p.getValue0(); diff --git a/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/IrCoreLibrary.java b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/IrCoreLibrary.java index e119927da582..c3bb2781e83d 100644 --- a/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/IrCoreLibrary.java +++ b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/IrCoreLibrary.java @@ -93,7 +93,7 @@ FfiResult.ByValue addOrderbyPair( FfiResult.ByValue appendOrderbyOperator( Pointer plan, Pointer orderBy, int parent, IntByReference oprIdx); - Pointer initProjectOperator(boolean isAppend); + Pointer initProjectOperator(int isAppend); FfiResult.ByValue addProjectExprAlias(Pointer project, String expr, FfiAlias.ByValue alias); diff --git a/interactive_engine/executor/ir/core/rust-toolchain.toml b/interactive_engine/executor/ir/core/rust-toolchain.toml deleted file mode 100644 index 0f512f6ba2b5..000000000000 --- a/interactive_engine/executor/ir/core/rust-toolchain.toml +++ /dev/null @@ -1,5 +0,0 @@ -[toolchain] -# The default profile includes rustc, rust-std, cargo, rust-docs, rustfmt and clippy. -# https://rust-lang.github.io/rustup/concepts/profiles.html -profile = "default" -channel = "1.60.0" diff --git a/interactive_engine/executor/ir/core/src/plan/ffi.rs b/interactive_engine/executor/ir/core/src/plan/ffi.rs index f8891f378bed..a8af9d7644a4 100644 --- a/interactive_engine/executor/ir/core/src/plan/ffi.rs +++ b/interactive_engine/executor/ir/core/src/plan/ffi.rs @@ -617,6 +617,7 @@ pub extern "C" fn build_physical_plan( let req_result = builder.build(); match req_result { Ok(req) => { + // print!("req: {:?}", req); let mut req_bytes = req.encode_to_vec().into_boxed_slice(); let data = FfiData { ptr: req_bytes.as_mut_ptr() as *mut c_void, @@ -942,8 +943,11 @@ mod project { use super::*; /// To initialize a project operator. #[no_mangle] - pub extern "C" fn init_project_operator(is_append: bool) -> *const c_void { - let project = Box::new(pb::Project { mappings: vec![], is_append }); + pub extern "C" fn init_project_operator(is_append: i32) -> *const c_void { + let project = Box::new(pb::Project { + mappings: vec![], + is_append: if is_append == 0 { false } else { true }, + }); Box::into_raw(project) as *const c_void } diff --git a/interactive_engine/executor/ir/core/src/plan/physical.rs b/interactive_engine/executor/ir/core/src/plan/physical.rs index 95753b70cc3c..053fbf292805 100644 --- a/interactive_engine/executor/ir/core/src/plan/physical.rs +++ b/interactive_engine/executor/ir/core/src/plan/physical.rs @@ -57,9 +57,36 @@ enum SimpleOpr { Sink, } +fn get_opr2() -> pb::logical_plan::Operator { + let item = common_pb::NameOrId{ item: Some(common_pb::name_or_id::Item::Name("name".parse().unwrap())) }; + let property = common_pb::Property{item: Some(common_pb::property::Item::Key(item))}; + let variable = common_pb::Variable{ tag: None, property: Some(property) }; + let expr_opr = common_pb::ExprOpr{item: Some(common_pb::expr_opr::Item::Var(variable))}; + let expression = common_pb::Expression{operators: vec![expr_opr]}; + let expr_alias = pb::project::ExprAlias{expr: Some(expression), alias: None }; + let project = pb::Project{mappings: vec![expr_alias], is_append: true }; + let opr = pb::logical_plan::Operator{opr: Some(pb::logical_plan::operator::Opr::Project(project))}; + opr +} + fn simple_add_job_builder( builder: &mut JobBuilder, ir_opr: &M, opr: SimpleOpr, ) -> IrResult<()> { + // let _ = match opr { + // SimpleOpr::FilterMap => { + println!("----------------------"); + println!("ir_opr: {:?}, len: {:?}, bytes: {:?}", ir_opr, ir_opr.encoded_len(), ir_opr.encode_to_vec()); + // println!("len: {:?}, bytes: {:?}", ir_opr.encoded_len(), ir_opr.encode_to_vec()); + println!("------------------"); + let opr2 = get_opr2(); + println!("opr2: {:?}, len: {:?}, bytes: {:?}", opr2, opr2.encoded_len(), opr2.encode_to_vec()); + + // }, + // _ => { + // print!("pass"); + // } + // }; + let bytes = ir_opr.encode_to_vec(); let _ = match opr { SimpleOpr::Source => builder.add_source(bytes), @@ -98,9 +125,26 @@ fn merge_query_params(merged_params: &mut pb::QueryParams, other_params: &mut pb other_params.columns.clear(); other_params.is_all_columns = false; } - +// let project = pb::Project{mappings: vec![expr_alias], is_append: true }; +// let opr = pb::logical_plan::Operator{opr: Some(pb::logical_plan::operator::Opr::Project(project))}; +// opr +fn get_opr3(input: pb::Project) -> pb::logical_plan::Operator { + let project = pb::Project { + mappings: input.mappings.clone(), + is_append: true, + }; + pb::logical_plan::Operator { + opr: Some(pb::logical_plan::operator::Opr::Project(project)), + } +} impl AsPhysical for pb::Project { fn add_job_builder(&self, builder: &mut JobBuilder, _plan_meta: &mut PlanMeta) -> IrResult<()> { + print!("1"); + println!("------- IS APPEND: {:?} {}", self.is_append, self.is_append); + let opr3 = get_opr3(self.clone()); + println!("----------------"); + println!("opr3: {:?}, len: {:?}, bytes: {:?}", opr3, opr3.encoded_len(), opr3.encode_to_vec()); + simple_add_job_builder( builder, &pb::logical_plan::Operator::from(self.clone()), @@ -145,6 +189,8 @@ impl AsPhysical for pb::Select { ))) } } else { + print!("2"); + simple_add_job_builder( builder, &pb::logical_plan::Operator::from(self.clone()), @@ -158,6 +204,8 @@ impl AsPhysical for pb::Scan { fn add_job_builder(&self, builder: &mut JobBuilder, plan_meta: &mut PlanMeta) -> IrResult<()> { let mut scan = self.clone(); scan.post_process(builder, plan_meta)?; + print!("3"); + simple_add_job_builder(builder, &pb::logical_plan::Operator::from(scan), SimpleOpr::Source) } @@ -234,8 +282,10 @@ impl AsPhysical for pb::EdgeExpand { } else { return Err(IrError::MissingData("EdgeExpand::params".to_string())); } + print!("4"); simple_add_job_builder( + builder, &pb::logical_plan::Operator::from(self.clone()), SimpleOpr::Flatmap, @@ -266,6 +316,8 @@ impl AsPhysical for pb::PathExpand { path_opt: self.path_opt, result_opt: self.result_opt, }; + print!("5"); + simple_add_job_builder( builder, &pb::logical_plan::Operator::from(path_start), @@ -292,6 +344,8 @@ impl AsPhysical for pb::PathExpand { }); } let path_end = pb::PathEnd { alias: self.alias.clone() }; + print!("6"); + simple_add_job_builder( builder, &pb::logical_plan::Operator::from(path_end), @@ -357,6 +411,8 @@ impl AsPhysical for pb::GetV { let opt: pb::get_v::VOpt = unsafe { ::std::mem::transmute(self.opt) }; match opt { pb::get_v::VOpt::Both => { + print!("7"); + simple_add_job_builder( builder, &pb::logical_plan::Operator::from(self.clone()), @@ -392,6 +448,8 @@ impl AsPhysical for pb::As { impl AsPhysical for pb::Auxilia { fn add_job_builder(&self, builder: &mut JobBuilder, _plan_meta: &mut PlanMeta) -> IrResult<()> { + print!("9"); + simple_add_job_builder( builder, &pb::logical_plan::Operator::from(self.clone()), @@ -419,6 +477,8 @@ impl AsPhysical for pb::OrderBy { fn add_job_builder(&self, builder: &mut JobBuilder, _plan_meta: &mut PlanMeta) -> IrResult<()> { let opr = pb::logical_plan::Operator::from(self.clone()); if self.limit.is_none() { + print!("10"); + simple_add_job_builder(builder, &opr, SimpleOpr::SortBy) } else { let range = self.limit.clone().unwrap(); @@ -435,6 +495,8 @@ impl AsPhysical for pb::OrderBy { impl AsPhysical for pb::Dedup { fn add_job_builder(&self, builder: &mut JobBuilder, _plan_meta: &mut PlanMeta) -> IrResult<()> { + print!("11"); + simple_add_job_builder(builder, &pb::logical_plan::Operator::from(self.clone()), SimpleOpr::Dedup) } } @@ -443,8 +505,12 @@ impl AsPhysical for pb::GroupBy { fn add_job_builder(&self, builder: &mut JobBuilder, _plan_meta: &mut PlanMeta) -> IrResult<()> { let opr = pb::logical_plan::Operator::from(self.clone()); if self.mappings.is_empty() { + print!("12"); + simple_add_job_builder(builder, &opr, SimpleOpr::Fold) } else { + print!("13"); + simple_add_job_builder(builder, &opr, SimpleOpr::GroupBy) } } @@ -453,6 +519,8 @@ impl AsPhysical for pb::GroupBy { impl AsPhysical for pb::Unfold { fn add_job_builder(&self, builder: &mut JobBuilder, _plan_meta: &mut PlanMeta) -> IrResult<()> { let opr = pb::logical_plan::Operator::from(self.clone()); + print!("14"); + simple_add_job_builder(builder, &opr, SimpleOpr::Flatmap) } } @@ -503,6 +571,7 @@ impl AsPhysical for pb::Sink { } } }; + print!("15"); simple_add_job_builder(builder, &pb::logical_plan::Operator::from(sink_opr), SimpleOpr::Sink) } @@ -586,7 +655,7 @@ impl AsPhysical for LogicalPlan { use pb::logical_plan::operator::Opr::*; let mut _prev_node_opt: Option = None; let mut curr_node_opt = self.get_first_node(); - debug!("plan: {:#?}", self); + print!("plan: {:#?}", self); debug!("is_partition: {:?}", self.meta.is_partition()); while curr_node_opt.is_some() { let curr_node = curr_node_opt.as_ref().unwrap(); @@ -644,6 +713,7 @@ impl AsPhysical for LogicalPlan { .into(), ); fused.oprs.push(expand_degree.into()); + print!("PROJECT 1"); fused.oprs.push( pb::Project { mappings: vec![pb::project::ExprAlias { @@ -817,6 +887,8 @@ fn add_intersect_job_builder( ); } } + print!("16"); + simple_add_job_builder( builder, &pb::logical_plan::Operator::from(edgexpd.clone()), @@ -933,6 +1005,7 @@ mod test { #[allow(dead_code)] fn build_project(expr: &str) -> pb::Project { + print!("BUILD PROJECT, {:?}", expr); pb::Project { mappings: vec![pb::project::ExprAlias { expr: str_to_expr_pb(expr.to_string()).ok(), From bc80ccde340113096a04911203479567519755dc Mon Sep 17 00:00:00 2001 From: siyuan0322 Date: Mon, 9 Jan 2023 18:16:54 +0800 Subject: [PATCH 2/5] update --- interactive_engine/executor/rust-toolchain.toml | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 interactive_engine/executor/rust-toolchain.toml diff --git a/interactive_engine/executor/rust-toolchain.toml b/interactive_engine/executor/rust-toolchain.toml deleted file mode 100644 index 0f512f6ba2b5..000000000000 --- a/interactive_engine/executor/rust-toolchain.toml +++ /dev/null @@ -1,5 +0,0 @@ -[toolchain] -# The default profile includes rustc, rust-std, cargo, rust-docs, rustfmt and clippy. -# https://rust-lang.github.io/rustup/concepts/profiles.html -profile = "default" -channel = "1.60.0" From fae6fb126f963f180f275db9a02779e5e62fa94a Mon Sep 17 00:00:00 2001 From: siyuan0322 Date: Mon, 9 Jan 2023 19:39:52 +0800 Subject: [PATCH 3/5] remove redundant logging --- .../executor/ir/core/src/plan/ffi.rs | 1 - .../executor/ir/core/src/plan/physical.rs | 77 +------------------ 2 files changed, 2 insertions(+), 76 deletions(-) diff --git a/interactive_engine/executor/ir/core/src/plan/ffi.rs b/interactive_engine/executor/ir/core/src/plan/ffi.rs index a8af9d7644a4..7c0d7548b885 100644 --- a/interactive_engine/executor/ir/core/src/plan/ffi.rs +++ b/interactive_engine/executor/ir/core/src/plan/ffi.rs @@ -617,7 +617,6 @@ pub extern "C" fn build_physical_plan( let req_result = builder.build(); match req_result { Ok(req) => { - // print!("req: {:?}", req); let mut req_bytes = req.encode_to_vec().into_boxed_slice(); let data = FfiData { ptr: req_bytes.as_mut_ptr() as *mut c_void, diff --git a/interactive_engine/executor/ir/core/src/plan/physical.rs b/interactive_engine/executor/ir/core/src/plan/physical.rs index 053fbf292805..95753b70cc3c 100644 --- a/interactive_engine/executor/ir/core/src/plan/physical.rs +++ b/interactive_engine/executor/ir/core/src/plan/physical.rs @@ -57,36 +57,9 @@ enum SimpleOpr { Sink, } -fn get_opr2() -> pb::logical_plan::Operator { - let item = common_pb::NameOrId{ item: Some(common_pb::name_or_id::Item::Name("name".parse().unwrap())) }; - let property = common_pb::Property{item: Some(common_pb::property::Item::Key(item))}; - let variable = common_pb::Variable{ tag: None, property: Some(property) }; - let expr_opr = common_pb::ExprOpr{item: Some(common_pb::expr_opr::Item::Var(variable))}; - let expression = common_pb::Expression{operators: vec![expr_opr]}; - let expr_alias = pb::project::ExprAlias{expr: Some(expression), alias: None }; - let project = pb::Project{mappings: vec![expr_alias], is_append: true }; - let opr = pb::logical_plan::Operator{opr: Some(pb::logical_plan::operator::Opr::Project(project))}; - opr -} - fn simple_add_job_builder( builder: &mut JobBuilder, ir_opr: &M, opr: SimpleOpr, ) -> IrResult<()> { - // let _ = match opr { - // SimpleOpr::FilterMap => { - println!("----------------------"); - println!("ir_opr: {:?}, len: {:?}, bytes: {:?}", ir_opr, ir_opr.encoded_len(), ir_opr.encode_to_vec()); - // println!("len: {:?}, bytes: {:?}", ir_opr.encoded_len(), ir_opr.encode_to_vec()); - println!("------------------"); - let opr2 = get_opr2(); - println!("opr2: {:?}, len: {:?}, bytes: {:?}", opr2, opr2.encoded_len(), opr2.encode_to_vec()); - - // }, - // _ => { - // print!("pass"); - // } - // }; - let bytes = ir_opr.encode_to_vec(); let _ = match opr { SimpleOpr::Source => builder.add_source(bytes), @@ -125,26 +98,9 @@ fn merge_query_params(merged_params: &mut pb::QueryParams, other_params: &mut pb other_params.columns.clear(); other_params.is_all_columns = false; } -// let project = pb::Project{mappings: vec![expr_alias], is_append: true }; -// let opr = pb::logical_plan::Operator{opr: Some(pb::logical_plan::operator::Opr::Project(project))}; -// opr -fn get_opr3(input: pb::Project) -> pb::logical_plan::Operator { - let project = pb::Project { - mappings: input.mappings.clone(), - is_append: true, - }; - pb::logical_plan::Operator { - opr: Some(pb::logical_plan::operator::Opr::Project(project)), - } -} + impl AsPhysical for pb::Project { fn add_job_builder(&self, builder: &mut JobBuilder, _plan_meta: &mut PlanMeta) -> IrResult<()> { - print!("1"); - println!("------- IS APPEND: {:?} {}", self.is_append, self.is_append); - let opr3 = get_opr3(self.clone()); - println!("----------------"); - println!("opr3: {:?}, len: {:?}, bytes: {:?}", opr3, opr3.encoded_len(), opr3.encode_to_vec()); - simple_add_job_builder( builder, &pb::logical_plan::Operator::from(self.clone()), @@ -189,8 +145,6 @@ impl AsPhysical for pb::Select { ))) } } else { - print!("2"); - simple_add_job_builder( builder, &pb::logical_plan::Operator::from(self.clone()), @@ -204,8 +158,6 @@ impl AsPhysical for pb::Scan { fn add_job_builder(&self, builder: &mut JobBuilder, plan_meta: &mut PlanMeta) -> IrResult<()> { let mut scan = self.clone(); scan.post_process(builder, plan_meta)?; - print!("3"); - simple_add_job_builder(builder, &pb::logical_plan::Operator::from(scan), SimpleOpr::Source) } @@ -282,10 +234,8 @@ impl AsPhysical for pb::EdgeExpand { } else { return Err(IrError::MissingData("EdgeExpand::params".to_string())); } - print!("4"); simple_add_job_builder( - builder, &pb::logical_plan::Operator::from(self.clone()), SimpleOpr::Flatmap, @@ -316,8 +266,6 @@ impl AsPhysical for pb::PathExpand { path_opt: self.path_opt, result_opt: self.result_opt, }; - print!("5"); - simple_add_job_builder( builder, &pb::logical_plan::Operator::from(path_start), @@ -344,8 +292,6 @@ impl AsPhysical for pb::PathExpand { }); } let path_end = pb::PathEnd { alias: self.alias.clone() }; - print!("6"); - simple_add_job_builder( builder, &pb::logical_plan::Operator::from(path_end), @@ -411,8 +357,6 @@ impl AsPhysical for pb::GetV { let opt: pb::get_v::VOpt = unsafe { ::std::mem::transmute(self.opt) }; match opt { pb::get_v::VOpt::Both => { - print!("7"); - simple_add_job_builder( builder, &pb::logical_plan::Operator::from(self.clone()), @@ -448,8 +392,6 @@ impl AsPhysical for pb::As { impl AsPhysical for pb::Auxilia { fn add_job_builder(&self, builder: &mut JobBuilder, _plan_meta: &mut PlanMeta) -> IrResult<()> { - print!("9"); - simple_add_job_builder( builder, &pb::logical_plan::Operator::from(self.clone()), @@ -477,8 +419,6 @@ impl AsPhysical for pb::OrderBy { fn add_job_builder(&self, builder: &mut JobBuilder, _plan_meta: &mut PlanMeta) -> IrResult<()> { let opr = pb::logical_plan::Operator::from(self.clone()); if self.limit.is_none() { - print!("10"); - simple_add_job_builder(builder, &opr, SimpleOpr::SortBy) } else { let range = self.limit.clone().unwrap(); @@ -495,8 +435,6 @@ impl AsPhysical for pb::OrderBy { impl AsPhysical for pb::Dedup { fn add_job_builder(&self, builder: &mut JobBuilder, _plan_meta: &mut PlanMeta) -> IrResult<()> { - print!("11"); - simple_add_job_builder(builder, &pb::logical_plan::Operator::from(self.clone()), SimpleOpr::Dedup) } } @@ -505,12 +443,8 @@ impl AsPhysical for pb::GroupBy { fn add_job_builder(&self, builder: &mut JobBuilder, _plan_meta: &mut PlanMeta) -> IrResult<()> { let opr = pb::logical_plan::Operator::from(self.clone()); if self.mappings.is_empty() { - print!("12"); - simple_add_job_builder(builder, &opr, SimpleOpr::Fold) } else { - print!("13"); - simple_add_job_builder(builder, &opr, SimpleOpr::GroupBy) } } @@ -519,8 +453,6 @@ impl AsPhysical for pb::GroupBy { impl AsPhysical for pb::Unfold { fn add_job_builder(&self, builder: &mut JobBuilder, _plan_meta: &mut PlanMeta) -> IrResult<()> { let opr = pb::logical_plan::Operator::from(self.clone()); - print!("14"); - simple_add_job_builder(builder, &opr, SimpleOpr::Flatmap) } } @@ -571,7 +503,6 @@ impl AsPhysical for pb::Sink { } } }; - print!("15"); simple_add_job_builder(builder, &pb::logical_plan::Operator::from(sink_opr), SimpleOpr::Sink) } @@ -655,7 +586,7 @@ impl AsPhysical for LogicalPlan { use pb::logical_plan::operator::Opr::*; let mut _prev_node_opt: Option = None; let mut curr_node_opt = self.get_first_node(); - print!("plan: {:#?}", self); + debug!("plan: {:#?}", self); debug!("is_partition: {:?}", self.meta.is_partition()); while curr_node_opt.is_some() { let curr_node = curr_node_opt.as_ref().unwrap(); @@ -713,7 +644,6 @@ impl AsPhysical for LogicalPlan { .into(), ); fused.oprs.push(expand_degree.into()); - print!("PROJECT 1"); fused.oprs.push( pb::Project { mappings: vec![pb::project::ExprAlias { @@ -887,8 +817,6 @@ fn add_intersect_job_builder( ); } } - print!("16"); - simple_add_job_builder( builder, &pb::logical_plan::Operator::from(edgexpd.clone()), @@ -1005,7 +933,6 @@ mod test { #[allow(dead_code)] fn build_project(expr: &str) -> pb::Project { - print!("BUILD PROJECT, {:?}", expr); pb::Project { mappings: vec![pb::project::ExprAlias { expr: str_to_expr_pb(expr.to_string()).ok(), From 34da8a891b45597f100255c8566fe95306af8461 Mon Sep 17 00:00:00 2001 From: shirly121 Date: Mon, 9 Jan 2023 19:41:51 +0800 Subject: [PATCH 4/5] [IR Compiler] add BooleanConverter to convert java boolean to native i32 --- .../com/alibaba/graphscope/common/IrPlan.java | 2 +- .../common/jna/BooleanConverter.java | 24 +++++++++++++++++++ .../graphscope/common/jna/IrCoreLibrary.java | 2 +- .../graphscope/common/jna/IrTypeMapper.java | 1 + .../executor/ir/core/src/plan/ffi.rs | 2 +- 5 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/BooleanConverter.java diff --git a/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/IrPlan.java b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/IrPlan.java index c8e97083e5fd..4d6a98beb8c5 100644 --- a/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/IrPlan.java +++ b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/IrPlan.java @@ -189,7 +189,7 @@ public Pointer apply(InterOpBase baseOp) { } List exprWithAlias = (List) exprOpt.get().applyArg(); // append always and sink by parameters - Pointer ptrProject = irCoreLib.initProjectOperator(1); + Pointer ptrProject = irCoreLib.initProjectOperator(true); exprWithAlias.forEach( p -> { String expr = (String) p.getValue0(); diff --git a/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/BooleanConverter.java b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/BooleanConverter.java new file mode 100644 index 000000000000..a6f38412f115 --- /dev/null +++ b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/BooleanConverter.java @@ -0,0 +1,24 @@ +package com.alibaba.graphscope.common.jna; + +import com.sun.jna.FromNativeContext; +import com.sun.jna.ToNativeContext; +import com.sun.jna.TypeConverter; + +// to convert java boolean to i32 and define i32 as the native bool type +public class BooleanConverter implements TypeConverter { + @Override + public Object toNative(Object value, ToNativeContext context) { + return Integer.valueOf(Boolean.TRUE.equals(value) ? 1 : 0); + } + + @Override + public Object fromNative(Object value, FromNativeContext context) { + return ((Integer) value).intValue() != 0 ? Boolean.TRUE : Boolean.FALSE; + } + + @Override + public Class nativeType() { + // BOOL is 32-bit int + return Integer.class; + } +} diff --git a/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/IrCoreLibrary.java b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/IrCoreLibrary.java index c3bb2781e83d..e119927da582 100644 --- a/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/IrCoreLibrary.java +++ b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/IrCoreLibrary.java @@ -93,7 +93,7 @@ FfiResult.ByValue addOrderbyPair( FfiResult.ByValue appendOrderbyOperator( Pointer plan, Pointer orderBy, int parent, IntByReference oprIdx); - Pointer initProjectOperator(int isAppend); + Pointer initProjectOperator(boolean isAppend); FfiResult.ByValue addProjectExprAlias(Pointer project, String expr, FfiAlias.ByValue alias); diff --git a/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/IrTypeMapper.java b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/IrTypeMapper.java index 5858ed26c07d..db43493dde21 100644 --- a/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/IrTypeMapper.java +++ b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/common/jna/IrTypeMapper.java @@ -24,5 +24,6 @@ public class IrTypeMapper extends DefaultTypeMapper { private IrTypeMapper() { super(); addTypeConverter(IntEnum.class, new EnumConverter()); + addTypeConverter(Boolean.class, new BooleanConverter()); } } diff --git a/interactive_engine/executor/ir/core/src/plan/ffi.rs b/interactive_engine/executor/ir/core/src/plan/ffi.rs index 7c0d7548b885..70917c8f7bf1 100644 --- a/interactive_engine/executor/ir/core/src/plan/ffi.rs +++ b/interactive_engine/executor/ir/core/src/plan/ffi.rs @@ -371,7 +371,7 @@ impl TryFrom for common_pb::Variable { #[derive(Default)] pub struct FfiAlias { alias: FfiNameOrId, - is_query_given: bool, + is_query_given: i32, } impl TryFrom for Option { From 9b8ca827e0dd81f369273785418193a19edc95d8 Mon Sep 17 00:00:00 2001 From: siyuan0322 Date: Tue, 10 Jan 2023 09:55:47 +0800 Subject: [PATCH 5/5] Fix image tag could be parsed as int error --- .github/workflows/k8s-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/k8s-ci.yml b/.github/workflows/k8s-ci.yml index 35706de262e9..58a940fa137f 100644 --- a/.github/workflows/k8s-ci.yml +++ b/.github/workflows/k8s-ci.yml @@ -419,9 +419,9 @@ jobs: - name: Helm Test run: | cd charts - helm template graphscope --set image.registry="",image.tag=${SHORT_SHA} \ + helm template graphscope --set image.registry="",image.tag="${SHORT_SHA}" \ ./graphscope - helm install graphscope --set image.registry="",image.tag=${SHORT_SHA} \ + helm install graphscope --set image.registry="",image.tag="${SHORT_SHA}" \ ./graphscope helm test graphscope --timeout 5m0s export NODE_IP=$(kubectl get pod -lgraphscope.coordinator.name=coordinator-graphscope -ojsonpath="{.items[0].status.hostIP}")