You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ko...@apache.org on 2018/12/21 15:32:00 UTC

[arrow] branch master updated: ARROW-4011: [Gandiva] Install irhelpers.bc and use it

This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/master by this push:
     new 747590a  ARROW-4011: [Gandiva] Install irhelpers.bc and use it
747590a is described below

commit 747590afc84481f61ead4d4c14e25ff9b79213f6
Author: Kouhei Sutou <ko...@clear-code.com>
AuthorDate: Sat Dec 22 00:31:47 2018 +0900

    ARROW-4011: [Gandiva] Install irhelpers.bc and use it
    
    If we don't install irhelpers.bc, users need to keep build directory
    that has irhelpers.bc.
    
    Author: Kouhei Sutou <ko...@clear-code.com>
    
    Closes #3232 from kou/gandiva-use-installed-bc and squashes the following commits:
    
    5a0c6228 <Kouhei Sutou> Adjust irhelper.bc path in Java
    829212c4 <Kouhei Sutou> Adjust irhelper.bc path in Java
    ea9c6b36 <Kouhei Sutou> Adjust irhelper.bc path in Java
    cb3d473b <Kouhei Sutou> Adjust irhelper.bc path in Java
    ab60eda9 <Kouhei Sutou> Remove "gandiva_" prefix and put built file to current binary dir
    934e258c <Kouhei Sutou> Add "gandiva_" prefix
    7ff4cf24 <Kouhei Sutou> Define GANDIVA_BYTE_COMPILE_FILE_PATH for all build
    ad615b4b <Kouhei Sutou>  Install irhelpers.bc and use it
---
 cpp/src/gandiva/CMakeLists.txt                     |  9 +-
 cpp/src/gandiva/bc_file_path.cc.in                 |  2 +-
 cpp/src/gandiva/engine_llvm_test.cc                |  5 +-
 cpp/src/gandiva/llvm_generator_test.cc             |  7 +-
 cpp/src/gandiva/tests/binary_test.cc               |  2 +-
 cpp/src/gandiva/tests/boolean_expr_test.cc         | 12 +--
 cpp/src/gandiva/tests/date_time_test.cc            | 16 ++--
 cpp/src/gandiva/tests/filter_test.cc               | 20 +++--
 cpp/src/gandiva/tests/hash_test.cc                 |  6 +-
 cpp/src/gandiva/tests/huge_table_test.cc           |  4 +-
 cpp/src/gandiva/tests/if_expr_test.cc              | 12 +--
 cpp/src/gandiva/tests/in_expr_test.cc              |  6 +-
 cpp/src/gandiva/tests/literal_test.cc              | 12 +--
 cpp/src/gandiva/tests/micro_benchmarks.cc          | 16 ++--
 cpp/src/gandiva/tests/null_validity_test.cc        |  6 +-
 .../tests/projector_build_validation_test.cc       | 22 ++---
 cpp/src/gandiva/tests/projector_test.cc            | 95 +++++++---------------
 cpp/src/gandiva/tests/test_util.h                  |  6 ++
 cpp/src/gandiva/tests/utf8_test.cc                 | 19 +++--
 java/gandiva/pom.xml                               |  2 +-
 20 files changed, 131 insertions(+), 148 deletions(-)

diff --git a/cpp/src/gandiva/CMakeLists.txt b/cpp/src/gandiva/CMakeLists.txt
index 23ad93e..d28c372 100644
--- a/cpp/src/gandiva/CMakeLists.txt
+++ b/cpp/src/gandiva/CMakeLists.txt
@@ -27,14 +27,18 @@ find_package(LLVM)
 
 # Set the path where the byte-code files will be installed.
 set(GANDIVA_BC_INSTALL_DIR
-  ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/gandiva)
+  ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/gandiva)
 
 set(GANDIVA_BC_FILE_NAME irhelpers.bc)
 set(GANDIVA_BC_INSTALL_PATH ${GANDIVA_BC_INSTALL_DIR}/${GANDIVA_BC_FILE_NAME})
-set(GANDIVA_BC_OUTPUT_PATH ${BUILD_OUTPUT_ROOT_DIRECTORY}/${GANDIVA_BC_FILE_NAME})
+set(GANDIVA_BC_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/${GANDIVA_BC_FILE_NAME})
+install(FILES
+  ${GANDIVA_BC_OUTPUT_PATH}
+  DESTINATION ${GANDIVA_BC_INSTALL_DIR})
 
 set(BC_FILE_PATH_CC "${CMAKE_CURRENT_BINARY_DIR}/bc_file_path.cc")
 configure_file(bc_file_path.cc.in ${BC_FILE_PATH_CC})
+add_definitions(-DGANDIVA_BYTE_COMPILE_FILE_PATH="${GANDIVA_BC_OUTPUT_PATH}")
 
 set(SRC_FILES annotator.cc
       bitmap_accumulator.cc
@@ -59,7 +63,6 @@ set(SRC_FILES annotator.cc
       selection_vector.cc
       tree_expr_builder.cc
       to_date_holder.cc
-      ${SHARED_HELPER_FILES}
       ${BC_FILE_PATH_CC})
 
 set(GANDIVA_SHARED_PRIVATE_LINK_LIBS
diff --git a/cpp/src/gandiva/bc_file_path.cc.in b/cpp/src/gandiva/bc_file_path.cc.in
index d6b4e34..54e81ca 100644
--- a/cpp/src/gandiva/bc_file_path.cc.in
+++ b/cpp/src/gandiva/bc_file_path.cc.in
@@ -18,6 +18,6 @@
 namespace gandiva {
 
 // Path to the byte-code file.
-extern const char kByteCodeFilePath[] = "${GANDIVA_BC_OUTPUT_PATH}";
+extern const char kByteCodeFilePath[] = "${GANDIVA_BC_INSTALL_PATH}";
 
 } // namespace gandiva
diff --git a/cpp/src/gandiva/engine_llvm_test.cc b/cpp/src/gandiva/engine_llvm_test.cc
index fe4f82e..627c385 100644
--- a/cpp/src/gandiva/engine_llvm_test.cc
+++ b/cpp/src/gandiva/engine_llvm_test.cc
@@ -19,6 +19,7 @@
 
 #include <gtest/gtest.h>
 #include "gandiva/llvm_types.h"
+#include "gandiva/tests/test_util.h"
 
 namespace gandiva {
 
@@ -100,7 +101,7 @@ llvm::Function* TestEngine::BuildVecAdd(Engine* engine, LLVMTypes* types) {
 
 TEST_F(TestEngine, TestAddUnoptimised) {
   std::unique_ptr<Engine> engine;
-  Status status = Engine::Make(ConfigurationBuilder::DefaultConfiguration(), &engine);
+  auto status = Engine::Make(TestConfiguration(), &engine);
   EXPECT_TRUE(status.ok()) << status.message();
   LLVMTypes types(*engine->context());
   llvm::Function* ir_func = BuildVecAdd(engine.get(), &types);
@@ -115,7 +116,7 @@ TEST_F(TestEngine, TestAddUnoptimised) {
 
 TEST_F(TestEngine, TestAddOptimised) {
   std::unique_ptr<Engine> engine;
-  Status status = Engine::Make(ConfigurationBuilder::DefaultConfiguration(), &engine);
+  auto status = Engine::Make(TestConfiguration(), &engine);
   EXPECT_TRUE(status.ok()) << status.message();
   LLVMTypes types(*engine->context());
   llvm::Function* ir_func = BuildVecAdd(engine.get(), &types);
diff --git a/cpp/src/gandiva/llvm_generator_test.cc b/cpp/src/gandiva/llvm_generator_test.cc
index 818c791..fed6339 100644
--- a/cpp/src/gandiva/llvm_generator_test.cc
+++ b/cpp/src/gandiva/llvm_generator_test.cc
@@ -26,6 +26,7 @@
 #include "gandiva/expression.h"
 #include "gandiva/func_descriptor.h"
 #include "gandiva/function_registry.h"
+#include "gandiva/tests/test_util.h"
 
 namespace gandiva {
 
@@ -39,8 +40,7 @@ class TestLLVMGenerator : public ::testing::Test {
 // Verify that a valid pc function exists for every function in the registry.
 TEST_F(TestLLVMGenerator, VerifyPCFunctions) {
   std::unique_ptr<LLVMGenerator> generator;
-  Status status =
-      LLVMGenerator::Make(ConfigurationBuilder::DefaultConfiguration(), &generator);
+  auto status = LLVMGenerator::Make(TestConfiguration(), &generator);
   EXPECT_TRUE(status.ok()) << status.message();
 
   llvm::Module* module = generator->module();
@@ -54,8 +54,7 @@ TEST_F(TestLLVMGenerator, VerifyPCFunctions) {
 TEST_F(TestLLVMGenerator, TestAdd) {
   // Setup LLVM generator to do an arithmetic add of two vectors
   std::unique_ptr<LLVMGenerator> generator;
-  Status status =
-      LLVMGenerator::Make(ConfigurationBuilder::DefaultConfiguration(), &generator);
+  auto status = LLVMGenerator::Make(TestConfiguration(), &generator);
   EXPECT_TRUE(status.ok());
   Annotator annotator;
 
diff --git a/cpp/src/gandiva/tests/binary_test.cc b/cpp/src/gandiva/tests/binary_test.cc
index d5d99db..6ac3c51 100644
--- a/cpp/src/gandiva/tests/binary_test.cc
+++ b/cpp/src/gandiva/tests/binary_test.cc
@@ -61,7 +61,7 @@ TEST_F(TestBinary, TestSimple) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
diff --git a/cpp/src/gandiva/tests/boolean_expr_test.cc b/cpp/src/gandiva/tests/boolean_expr_test.cc
index 3351ab3..9226f35 100644
--- a/cpp/src/gandiva/tests/boolean_expr_test.cc
+++ b/cpp/src/gandiva/tests/boolean_expr_test.cc
@@ -60,7 +60,7 @@ TEST_F(TestBooleanExpr, SimpleAnd) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // FALSE_VALID && ?  => FALSE_VALID
@@ -133,7 +133,7 @@ TEST_F(TestBooleanExpr, SimpleOr) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // TRUE_VALID && ?  => TRUE_VALID
@@ -210,7 +210,7 @@ TEST_F(TestBooleanExpr, AndThree) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   int num_records = 8;
@@ -257,7 +257,7 @@ TEST_F(TestBooleanExpr, OrThree) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   int num_records = 8;
@@ -317,7 +317,7 @@ TEST_F(TestBooleanExpr, BooleanAndInsideIf) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   int num_records = 4;
@@ -368,7 +368,7 @@ TEST_F(TestBooleanExpr, IfInsideBooleanAnd) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   int num_records = 4;
diff --git a/cpp/src/gandiva/tests/date_time_test.cc b/cpp/src/gandiva/tests/date_time_test.cc
index 3914558..643b8c8 100644
--- a/cpp/src/gandiva/tests/date_time_test.cc
+++ b/cpp/src/gandiva/tests/date_time_test.cc
@@ -73,7 +73,8 @@ TEST_F(TestProjector, TestIsNull) {
   auto isnotnull_expr = TreeExprBuilder::MakeExpression("isnotnull", {t0}, b0);
 
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {isnull_expr, isnotnull_expr}, &projector);
+  auto status = Projector::Make(schema, {isnull_expr, isnotnull_expr},
+                                TestConfiguration(), &projector);
   ASSERT_TRUE(status.ok());
 
   int num_records = 4;
@@ -126,8 +127,9 @@ TEST_F(TestProjector, TestDateTime) {
   auto ts2day_expr = TreeExprBuilder::MakeExpression("extractDay", {field2}, field_day);
 
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(
-      schema, {date2year_expr, date2month_expr, ts2month_expr, ts2day_expr}, &projector);
+  auto status = Projector::Make(
+      schema, {date2year_expr, date2month_expr, ts2month_expr, ts2day_expr},
+      TestConfiguration(), &projector);
   ASSERT_TRUE(status.ok());
 
   struct tm y1970;
@@ -196,7 +198,8 @@ TEST_F(TestProjector, TestTime) {
       TreeExprBuilder::MakeExpression("extractHour", {field0}, field_hour);
 
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {time2min_expr, time2hour_expr}, &projector);
+  auto status = Projector::Make(schema, {time2min_expr, time2hour_expr},
+                                TestConfiguration(), &projector);
   ASSERT_TRUE(status.ok());
 
   // create input data
@@ -264,7 +267,7 @@ TEST_F(TestProjector, TestTimestampDiff) {
   std::shared_ptr<Projector> projector;
   auto exprs = {diff_secs_expr,  diff_mins_expr,   diff_hours_expr,    diff_days_expr,
                 diff_weeks_expr, diff_months_expr, diff_quarters_expr, diff_years_expr};
-  Status status = Projector::Make(schema, exprs, &projector);
+  auto status = Projector::Make(schema, exprs, TestConfiguration(), &projector);
   ASSERT_TRUE(status.ok());
 
   struct tm y1970;
@@ -337,7 +340,8 @@ TEST_F(TestProjector, TestMonthsBetween) {
       TreeExprBuilder::MakeExpression("months_between", {f0, f1}, output);
 
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {months_between_expr}, &projector);
+  auto status =
+      Projector::Make(schema, {months_between_expr}, TestConfiguration(), &projector);
   std::cout << status.message();
   ASSERT_TRUE(status.ok());
 
diff --git a/cpp/src/gandiva/tests/filter_test.cc b/cpp/src/gandiva/tests/filter_test.cc
index f95cdcc..ee60388 100644
--- a/cpp/src/gandiva/tests/filter_test.cc
+++ b/cpp/src/gandiva/tests/filter_test.cc
@@ -50,14 +50,15 @@ TEST_F(TestFilter, TestFilterCache) {
   auto less_than_10 = TreeExprBuilder::MakeFunction("less_than", {sum_func, literal_10},
                                                     arrow::boolean());
   auto condition = TreeExprBuilder::MakeCondition(less_than_10);
+  auto configuration = TestConfiguration();
 
   std::shared_ptr<Filter> filter;
-  Status status = Filter::Make(schema, condition, &filter);
+  auto status = Filter::Make(schema, condition, configuration, &filter);
   EXPECT_TRUE(status.ok());
 
   // same schema and condition, should return the same filter as above.
   std::shared_ptr<Filter> cached_filter;
-  status = Filter::Make(schema, condition, &cached_filter);
+  status = Filter::Make(schema, condition, configuration, &cached_filter);
   EXPECT_TRUE(status.ok());
   EXPECT_TRUE(cached_filter.get() == filter.get());
 
@@ -65,7 +66,8 @@ TEST_F(TestFilter, TestFilterCache) {
   auto field2 = field("f2", int32());
   auto different_schema = arrow::schema({field0, field1, field2});
   std::shared_ptr<Filter> should_be_new_filter;
-  status = Filter::Make(different_schema, condition, &should_be_new_filter);
+  status =
+      Filter::Make(different_schema, condition, configuration, &should_be_new_filter);
   EXPECT_TRUE(status.ok());
   EXPECT_TRUE(cached_filter.get() != should_be_new_filter.get());
 
@@ -74,7 +76,7 @@ TEST_F(TestFilter, TestFilterCache) {
       "greater_than", {sum_func, literal_10}, arrow::boolean());
   auto new_condition = TreeExprBuilder::MakeCondition(greater_than_10);
   std::shared_ptr<Filter> should_be_new_filter1;
-  status = Filter::Make(schema, new_condition, &should_be_new_filter1);
+  status = Filter::Make(schema, new_condition, configuration, &should_be_new_filter1);
   EXPECT_TRUE(status.ok());
   EXPECT_TRUE(cached_filter.get() != should_be_new_filter1.get());
 }
@@ -96,7 +98,7 @@ TEST_F(TestFilter, TestSimple) {
   auto condition = TreeExprBuilder::MakeCondition(less_than_10);
 
   std::shared_ptr<Filter> filter;
-  Status status = Filter::Make(schema, condition, &filter);
+  auto status = Filter::Make(schema, condition, TestConfiguration(), &filter);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -134,7 +136,7 @@ TEST_F(TestFilter, TestSimpleCustomConfig) {
   std::shared_ptr<Configuration> config = config_builder.build();
 
   std::shared_ptr<Filter> filter;
-  Status status = Filter::Make(schema, condition, &filter);
+  auto status = Filter::Make(schema, condition, TestConfiguration(), &filter);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -168,7 +170,7 @@ TEST_F(TestFilter, TestZeroCopy) {
   auto condition = TreeExprBuilder::MakeCondition("isnotnull", {field0});
 
   std::shared_ptr<Filter> filter;
-  Status status = Filter::Make(schema, condition, &filter);
+  auto status = Filter::Make(schema, condition, TestConfiguration(), &filter);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -208,7 +210,7 @@ TEST_F(TestFilter, TestZeroCopyNegative) {
   auto condition = TreeExprBuilder::MakeCondition("isnotnull", {field0});
 
   std::shared_ptr<Filter> filter;
-  Status status = Filter::Make(schema, condition, &filter);
+  auto status = Filter::Make(schema, condition, TestConfiguration(), &filter);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -265,7 +267,7 @@ TEST_F(TestFilter, TestSimpleSVInt32) {
   auto condition = TreeExprBuilder::MakeCondition(less_than_10);
 
   std::shared_ptr<Filter> filter;
-  Status status = Filter::Make(schema, condition, &filter);
+  auto status = Filter::Make(schema, condition, TestConfiguration(), &filter);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
diff --git a/cpp/src/gandiva/tests/hash_test.cc b/cpp/src/gandiva/tests/hash_test.cc
index 96f9228..afaa885 100644
--- a/cpp/src/gandiva/tests/hash_test.cc
+++ b/cpp/src/gandiva/tests/hash_test.cc
@@ -61,7 +61,8 @@ TEST_F(TestHash, TestSimple) {
 
   // Build a projector for the expression.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr_0, expr_1}, &projector);
+  auto status =
+      Projector::Make(schema, {expr_0, expr_1}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
@@ -113,7 +114,8 @@ TEST_F(TestHash, TestBuf) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr_0, expr_1}, &projector);
+  auto status =
+      Projector::Make(schema, {expr_0, expr_1}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
diff --git a/cpp/src/gandiva/tests/huge_table_test.cc b/cpp/src/gandiva/tests/huge_table_test.cc
index bffcb19..cecf290 100644
--- a/cpp/src/gandiva/tests/huge_table_test.cc
+++ b/cpp/src/gandiva/tests/huge_table_test.cc
@@ -58,7 +58,7 @@ TEST_F(DISABLED_TestHugeProjector, SimpleTestSumHuge) {
   // Build expression
   auto sum_expr = TreeExprBuilder::MakeExpression("add", {field0, field1}, field_sum);
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {sum_expr}, &projector);
+  auto status = Projector::Make(schema, {sum_expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -136,7 +136,7 @@ TEST_F(DISABLED_TestHugeFilter, TestSimpleHugeFilter) {
   auto condition = TreeExprBuilder::MakeCondition(less_than_50);
 
   std::shared_ptr<Filter> filter;
-  Status status = Filter::Make(schema, condition, &filter);
+  auto status = Filter::Make(schema, condition, TestConfiguration(), &filter);
   EXPECT_TRUE(status.ok());
 
   // prepare input record batch
diff --git a/cpp/src/gandiva/tests/if_expr_test.cc b/cpp/src/gandiva/tests/if_expr_test.cc
index 93b3567..54b6d43 100644
--- a/cpp/src/gandiva/tests/if_expr_test.cc
+++ b/cpp/src/gandiva/tests/if_expr_test.cc
@@ -61,7 +61,7 @@ TEST_F(TestIfExpr, TestSimple) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -110,7 +110,7 @@ TEST_F(TestIfExpr, TestSimpleArithmetic) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -165,7 +165,7 @@ TEST_F(TestIfExpr, TestNested) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -228,7 +228,7 @@ TEST_F(TestIfExpr, TestNestedInIf) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -296,7 +296,7 @@ TEST_F(TestIfExpr, TestNestedInCondition) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -353,7 +353,7 @@ TEST_F(TestIfExpr, TestBigNested) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
diff --git a/cpp/src/gandiva/tests/in_expr_test.cc b/cpp/src/gandiva/tests/in_expr_test.cc
index 13ef97c..2103874 100644
--- a/cpp/src/gandiva/tests/in_expr_test.cc
+++ b/cpp/src/gandiva/tests/in_expr_test.cc
@@ -51,7 +51,7 @@ TEST_F(TestIn, TestInSimple) {
   auto condition = TreeExprBuilder::MakeCondition(in_expr);
 
   std::shared_ptr<Filter> filter;
-  Status status = Filter::Make(schema, condition, &filter);
+  auto status = Filter::Make(schema, condition, TestConfiguration(), &filter);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -88,7 +88,7 @@ TEST_F(TestIn, TestInString) {
   auto condition = TreeExprBuilder::MakeCondition(in_expr);
 
   std::shared_ptr<Filter> filter;
-  Status status = Filter::Make(schema, condition, &filter);
+  auto status = Filter::Make(schema, condition, TestConfiguration(), &filter);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -125,7 +125,7 @@ TEST_F(TestIn, TestInStringValidationError) {
   auto condition = TreeExprBuilder::MakeCondition(in_expr);
 
   std::shared_ptr<Filter> filter;
-  Status status = Filter::Make(schema, condition, &filter);
+  auto status = Filter::Make(schema, condition, TestConfiguration(), &filter);
 
   EXPECT_TRUE(status.IsExpressionValidationError());
   std::string expected_error = "Evaluation expression for IN clause returns ";
diff --git a/cpp/src/gandiva/tests/literal_test.cc b/cpp/src/gandiva/tests/literal_test.cc
index ced6645..53323cb 100644
--- a/cpp/src/gandiva/tests/literal_test.cc
+++ b/cpp/src/gandiva/tests/literal_test.cc
@@ -88,8 +88,8 @@ TEST_F(TestLiteral, TestSimpleArithmetic) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status =
-      Projector::Make(schema, {expr_a, expr_b, expr_c, expr_d, expr_e}, &projector);
+  auto status = Projector::Make(schema, {expr_a, expr_b, expr_c, expr_d, expr_e},
+                                TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -133,7 +133,7 @@ TEST_F(TestLiteral, TestLiteralHash) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   auto res1 = field("a", int64());
@@ -142,7 +142,7 @@ TEST_F(TestLiteral, TestLiteralHash) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector1;
-  status = Projector::Make(schema, {expr1}, &projector1);
+  status = Projector::Make(schema, {expr1}, TestConfiguration(), &projector1);
   EXPECT_TRUE(status.ok()) << status.message();
   EXPECT_TRUE(projector.get() != projector1.get());
 }
@@ -165,7 +165,7 @@ TEST_F(TestLiteral, TestNullLiteral) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
@@ -207,7 +207,7 @@ TEST_F(TestLiteral, TestNullLiteralInIf) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
diff --git a/cpp/src/gandiva/tests/micro_benchmarks.cc b/cpp/src/gandiva/tests/micro_benchmarks.cc
index 7d844eb..ce86bf0 100644
--- a/cpp/src/gandiva/tests/micro_benchmarks.cc
+++ b/cpp/src/gandiva/tests/micro_benchmarks.cc
@@ -56,7 +56,7 @@ static void TimedTestAdd3(benchmark::State& state) {
   auto sum_expr = TreeExprBuilder::MakeExpression(sum, field_sum);
 
   std::shared_ptr<Projector> projector;
-  ASSERT_OK(Projector::Make(schema, {sum_expr}, &projector));
+  ASSERT_OK(Projector::Make(schema, {sum_expr}, TestConfiguration(), &projector));
 
   Int64DataGenerator data_generator;
   ProjectEvaluator evaluator(projector);
@@ -99,7 +99,7 @@ static void TimedTestBigNested(benchmark::State& state) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  ASSERT_OK(Projector::Make(schema, {expr}, &projector));
+  ASSERT_OK(Projector::Make(schema, {expr}, TestConfiguration(), &projector));
 
   BoundedInt32DataGenerator data_generator(250);
   ProjectEvaluator evaluator(projector);
@@ -122,7 +122,7 @@ static void TimedTestExtractYear(benchmark::State& state) {
   auto expr = TreeExprBuilder::MakeExpression("extractYear", {field0}, field_res);
 
   std::shared_ptr<Projector> projector;
-  ASSERT_OK(Projector::Make(schema, {expr}, &projector));
+  ASSERT_OK(Projector::Make(schema, {expr}, TestConfiguration(), &projector));
 
   Int64DataGenerator data_generator;
   ProjectEvaluator evaluator(projector);
@@ -149,7 +149,7 @@ static void TimedTestFilterAdd2(benchmark::State& state) {
   auto condition = TreeExprBuilder::MakeCondition(less_than);
 
   std::shared_ptr<Filter> filter;
-  ASSERT_OK(Filter::Make(schema, condition, &filter));
+  ASSERT_OK(Filter::Make(schema, condition, TestConfiguration(), &filter));
 
   Int64DataGenerator data_generator;
   FilterEvaluator evaluator(filter);
@@ -173,7 +173,7 @@ static void TimedTestFilterLike(benchmark::State& state) {
   auto condition = TreeExprBuilder::MakeCondition(like_yellow);
 
   std::shared_ptr<Filter> filter;
-  ASSERT_OK(Filter::Make(schema, condition, &filter));
+  ASSERT_OK(Filter::Make(schema, condition, TestConfiguration(), &filter));
 
   FastUtf8DataGenerator data_generator(32);
   FilterEvaluator evaluator(filter);
@@ -199,7 +199,7 @@ static void TimedTestAllocs(benchmark::State& state) {
   auto expr = TreeExprBuilder::MakeExpression(length, field_res);
 
   std::shared_ptr<Projector> projector;
-  ASSERT_OK(Projector::Make(schema, {expr}, &projector));
+  ASSERT_OK(Projector::Make(schema, {expr}, TestConfiguration(), &projector));
 
   FastUtf8DataGenerator data_generator(64);
   ProjectEvaluator evaluator(projector);
@@ -237,7 +237,7 @@ static void TimedTestMultiOr(benchmark::State& state) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  ASSERT_OK(Projector::Make(schema, {expr}, &projector));
+  ASSERT_OK(Projector::Make(schema, {expr}, TestConfiguration(), &projector));
 
   FastUtf8DataGenerator data_generator(250);
   ProjectEvaluator evaluator(projector);
@@ -269,7 +269,7 @@ static void TimedTestInExpr(benchmark::State& state) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  ASSERT_OK(Projector::Make(schema, {expr}, &projector));
+  ASSERT_OK(Projector::Make(schema, {expr}, TestConfiguration(), &projector));
 
   FastUtf8DataGenerator data_generator(250);
   ProjectEvaluator evaluator(projector);
diff --git a/cpp/src/gandiva/tests/null_validity_test.cc b/cpp/src/gandiva/tests/null_validity_test.cc
index 06cfdc0..0374b68 100644
--- a/cpp/src/gandiva/tests/null_validity_test.cc
+++ b/cpp/src/gandiva/tests/null_validity_test.cc
@@ -60,7 +60,7 @@ TEST_F(TestNullValidity, TestFunc) {
   auto condition = TreeExprBuilder::MakeCondition(less_than_10);
 
   std::shared_ptr<Filter> filter;
-  Status status = Filter::Make(schema, condition, &filter);
+  auto status = Filter::Make(schema, condition, TestConfiguration(), &filter);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -111,7 +111,7 @@ TEST_F(TestNullValidity, TestIfElse) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -148,7 +148,7 @@ TEST_F(TestNullValidity, TestUtf8) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
diff --git a/cpp/src/gandiva/tests/projector_build_validation_test.cc b/cpp/src/gandiva/tests/projector_build_validation_test.cc
index 18f0295..6c4eef5 100644
--- a/cpp/src/gandiva/tests/projector_build_validation_test.cc
+++ b/cpp/src/gandiva/tests/projector_build_validation_test.cc
@@ -50,7 +50,7 @@ TEST_F(TestProjector, TestNonExistentFunction) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {lt_expr}, &projector);
+  auto status = Projector::Make(schema, {lt_expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.IsExpressionValidationError());
   std::string expected_error =
       "Function bool non_existent_function(float, float) not supported yet.";
@@ -71,7 +71,7 @@ TEST_F(TestProjector, TestNotMatchingDataType) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {lt_expr}, &projector);
+  auto status = Projector::Make(schema, {lt_expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.IsExpressionValidationError());
   std::string expected_error =
       "Return type of root node float does not match that of expression bool";
@@ -92,7 +92,7 @@ TEST_F(TestProjector, TestNotSupportedDataType) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {lt_expr}, &projector);
+  auto status = Projector::Make(schema, {lt_expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.IsExpressionValidationError());
   std::string expected_error = "Field f0 has unsupported data type list";
   EXPECT_TRUE(status.message().find(expected_error) != std::string::npos);
@@ -113,7 +113,7 @@ TEST_F(TestProjector, TestIncorrectSchemaMissingField) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {lt_expr}, &projector);
+  auto status = Projector::Make(schema, {lt_expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.IsExpressionValidationError());
   std::string expected_error = "Field f2 not in schema";
   EXPECT_TRUE(status.message().find(expected_error) != std::string::npos);
@@ -135,7 +135,7 @@ TEST_F(TestProjector, TestIncorrectSchemaTypeNotMatching) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {lt_expr}, &projector);
+  auto status = Projector::Make(schema, {lt_expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.IsExpressionValidationError());
   std::string expected_error =
       "Field definition in schema f2: int32 different from field in expression f2: float";
@@ -166,7 +166,7 @@ TEST_F(TestProjector, TestIfNotSupportedFunction) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.IsExpressionValidationError());
 }
 
@@ -189,7 +189,7 @@ TEST_F(TestProjector, TestIfNotMatchingReturnType) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.IsExpressionValidationError());
 }
 
@@ -214,7 +214,7 @@ TEST_F(TestProjector, TestElseNotMatchingReturnType) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.IsExpressionValidationError());
 }
 
@@ -239,7 +239,7 @@ TEST_F(TestProjector, TestElseNotSupportedType) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.IsExpressionValidationError());
   EXPECT_EQ(status.code(), StatusCode::ExpressionValidationError);
 }
@@ -259,7 +259,7 @@ TEST_F(TestProjector, TestAndMinChildren) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.IsExpressionValidationError());
 }
 
@@ -280,7 +280,7 @@ TEST_F(TestProjector, TestAndBooleanArgType) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.IsExpressionValidationError());
 }
 
diff --git a/cpp/src/gandiva/tests/projector_test.cc b/cpp/src/gandiva/tests/projector_test.cc
index 61d9dc3..1aeb43b 100644
--- a/cpp/src/gandiva/tests/projector_test.cc
+++ b/cpp/src/gandiva/tests/projector_test.cc
@@ -50,14 +50,17 @@ TEST_F(TestProjector, TestProjectCache) {
   auto sub_expr =
       TreeExprBuilder::MakeExpression("subtract", {field0, field1}, field_sub);
 
+  auto configuration = TestConfiguration();
+
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {sum_expr, sub_expr}, &projector);
+  auto status = Projector::Make(schema, {sum_expr, sub_expr}, configuration, &projector);
   EXPECT_TRUE(status.ok());
 
   // everything is same, should return the same projector.
   auto schema_same = arrow::schema({field0, field1});
   std::shared_ptr<Projector> cached_projector;
-  status = Projector::Make(schema_same, {sum_expr, sub_expr}, &cached_projector);
+  status = Projector::Make(schema_same, {sum_expr, sub_expr}, configuration,
+                           &cached_projector);
   EXPECT_TRUE(status.ok());
   EXPECT_TRUE(cached_projector.get() == projector.get());
 
@@ -65,14 +68,14 @@ TEST_F(TestProjector, TestProjectCache) {
   auto field2 = field("f2", int32());
   auto different_schema = arrow::schema({field0, field1, field2});
   std::shared_ptr<Projector> should_be_new_projector;
-  status =
-      Projector::Make(different_schema, {sum_expr, sub_expr}, &should_be_new_projector);
+  status = Projector::Make(different_schema, {sum_expr, sub_expr}, configuration,
+                           &should_be_new_projector);
   EXPECT_TRUE(status.ok());
   EXPECT_TRUE(cached_projector.get() != should_be_new_projector.get());
 
   // expression list is different should return a new projector.
   std::shared_ptr<Projector> should_be_new_projector1;
-  status = Projector::Make(schema, {sum_expr}, &should_be_new_projector1);
+  status = Projector::Make(schema, {sum_expr}, configuration, &should_be_new_projector1);
   EXPECT_TRUE(status.ok());
   EXPECT_TRUE(cached_projector.get() != should_be_new_projector1.get());
 }
@@ -90,12 +93,13 @@ TEST_F(TestProjector, TestProjectCacheFieldNames) {
 
   auto sum_expr_01 = TreeExprBuilder::MakeExpression("add", {field0, field1}, sum_01);
   std::shared_ptr<Projector> projector_01;
-  Status status = Projector::Make(schema, {sum_expr_01}, &projector_01);
+  auto status =
+      Projector::Make(schema, {sum_expr_01}, TestConfiguration(), &projector_01);
   EXPECT_TRUE(status.ok());
 
   auto sum_expr_12 = TreeExprBuilder::MakeExpression("add", {field1, field2}, sum_12);
   std::shared_ptr<Projector> projector_12;
-  status = Projector::Make(schema, {sum_expr_12}, &projector_12);
+  status = Projector::Make(schema, {sum_expr_12}, TestConfiguration(), &projector_12);
   EXPECT_TRUE(status.ok());
 
   // add(f0, f1) != add(f1, f2)
@@ -111,14 +115,16 @@ TEST_F(TestProjector, TestProjectCacheDouble) {
 
   auto literal0 = TreeExprBuilder::MakeLiteral(d0);
   auto expr0 = TreeExprBuilder::MakeExpression(literal0, res);
+  auto configuration = TestConfiguration();
+
   std::shared_ptr<Projector> projector0;
-  auto status = Projector::Make(schema, {expr0}, &projector0);
+  auto status = Projector::Make(schema, {expr0}, configuration, &projector0);
   EXPECT_TRUE(status.ok()) << status.message();
 
   auto literal1 = TreeExprBuilder::MakeLiteral(d1);
   auto expr1 = TreeExprBuilder::MakeExpression(literal1, res);
   std::shared_ptr<Projector> projector1;
-  status = Projector::Make(schema, {expr1}, &projector1);
+  status = Projector::Make(schema, {expr1}, configuration, &projector1);
   EXPECT_TRUE(status.ok()) << status.message();
 
   EXPECT_TRUE(projector0.get() != projector1.get());
@@ -134,13 +140,13 @@ TEST_F(TestProjector, TestProjectCacheFloat) {
   auto literal0 = TreeExprBuilder::MakeLiteral(f0);
   auto expr0 = TreeExprBuilder::MakeExpression(literal0, res);
   std::shared_ptr<Projector> projector0;
-  auto status = Projector::Make(schema, {expr0}, &projector0);
+  auto status = Projector::Make(schema, {expr0}, TestConfiguration(), &projector0);
   EXPECT_TRUE(status.ok()) << status.message();
 
   auto literal1 = TreeExprBuilder::MakeLiteral(f1);
   auto expr1 = TreeExprBuilder::MakeExpression(literal1, res);
   std::shared_ptr<Projector> projector1;
-  status = Projector::Make(schema, {expr1}, &projector1);
+  status = Projector::Make(schema, {expr1}, TestConfiguration(), &projector1);
   EXPECT_TRUE(status.ok()) << status.message();
 
   EXPECT_TRUE(projector0.get() != projector1.get());
@@ -162,50 +168,8 @@ TEST_F(TestProjector, TestIntSumSub) {
       TreeExprBuilder::MakeExpression("subtract", {field0, field1}, field_sub);
 
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {sum_expr, sub_expr}, &projector);
-  EXPECT_TRUE(status.ok());
-
-  // Create a row-batch with some sample data
-  int num_records = 4;
-  auto array0 = MakeArrowArrayInt32({1, 2, 3, 4}, {true, true, true, false});
-  auto array1 = MakeArrowArrayInt32({11, 13, 15, 17}, {true, true, false, true});
-  // expected output
-  auto exp_sum = MakeArrowArrayInt32({12, 15, 0, 0}, {true, true, false, false});
-  auto exp_sub = MakeArrowArrayInt32({-10, -11, 0, 0}, {true, true, false, false});
-
-  // prepare input record batch
-  auto in_batch = arrow::RecordBatch::Make(schema, num_records, {array0, array1});
-
-  // Evaluate expression
-  arrow::ArrayVector outputs;
-  status = projector->Evaluate(*in_batch, pool_, &outputs);
-  EXPECT_TRUE(status.ok());
-
-  // Validate results
-  EXPECT_ARROW_ARRAY_EQUALS(exp_sum, outputs.at(0));
-  EXPECT_ARROW_ARRAY_EQUALS(exp_sub, outputs.at(1));
-}
-
-TEST_F(TestProjector, TestIntSumSubCustomConfig) {
-  // schema for input fields
-  auto field0 = field("f0", int32());
-  auto field1 = field("f2", int32());
-  auto schema = arrow::schema({field0, field1});
-
-  // output fields
-  auto field_sum = field("add", int32());
-  auto field_sub = field("subtract", int32());
-
-  // Build expression
-  auto sum_expr = TreeExprBuilder::MakeExpression("add", {field0, field1}, field_sum);
-  auto sub_expr =
-      TreeExprBuilder::MakeExpression("subtract", {field0, field1}, field_sub);
-
-  std::shared_ptr<Projector> projector;
-  ConfigurationBuilder config_builder;
-  std::shared_ptr<Configuration> config = config_builder.build();
-
-  Status status = Projector::Make(schema, {sum_expr, sub_expr}, config, &projector);
+  auto status =
+      Projector::Make(schema, {sum_expr, sub_expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -257,8 +221,9 @@ static void TestArithmeticOpsForType(arrow::MemoryPool* pool) {
   auto lt_expr = TreeExprBuilder::MakeExpression("less_than", {field0, field1}, field_lt);
 
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(
-      schema, {sum_expr, sub_expr, mul_expr, div_expr, eq_expr, lt_expr}, &projector);
+  auto status =
+      Projector::Make(schema, {sum_expr, sub_expr, mul_expr, div_expr, eq_expr, lt_expr},
+                      TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -344,9 +309,9 @@ TEST_F(TestProjector, TestExtendedMath) {
       TreeExprBuilder::MakeExpression("power", {field0, field1}, field_power);
 
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(
+  auto status = Projector::Make(
       schema, {cbrt_expr, exp_expr, log_expr, log10_expr, logb_expr, power_expr},
-      &projector);
+      TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -412,7 +377,7 @@ TEST_F(TestProjector, TestFloatLessThan) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {lt_expr}, &projector);
+  auto status = Projector::Make(schema, {lt_expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -447,7 +412,7 @@ TEST_F(TestProjector, TestIsNotNull) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {myexpr}, &projector);
+  auto status = Projector::Make(schema, {myexpr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -480,7 +445,7 @@ TEST_F(TestProjector, TestZeroCopy) {
   auto cast_expr = TreeExprBuilder::MakeExpression("castFLOAT4", {field0}, res);
 
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {cast_expr}, &projector);
+  auto status = Projector::Make(schema, {cast_expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -527,7 +492,7 @@ TEST_F(TestProjector, TestZeroCopyNegative) {
   auto cast_expr = TreeExprBuilder::MakeExpression("castFLOAT4", {field0}, res);
 
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {cast_expr}, &projector);
+  auto status = Projector::Make(schema, {cast_expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok());
 
   // Create a row-batch with some sample data
@@ -597,7 +562,7 @@ TEST_F(TestProjector, TestDivideZero) {
   auto div_expr = TreeExprBuilder::MakeExpression("divide", {field0, field1}, field_div);
 
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {div_expr}, &projector);
+  auto status = Projector::Make(schema, {div_expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
@@ -646,7 +611,7 @@ TEST_F(TestProjector, TestModZero) {
   auto mod_expr = TreeExprBuilder::MakeExpression("mod", {field0, field1}, field_div);
 
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {mod_expr}, &projector);
+  auto status = Projector::Make(schema, {mod_expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
diff --git a/cpp/src/gandiva/tests/test_util.h b/cpp/src/gandiva/tests/test_util.h
index d244487..72b45b1 100644
--- a/cpp/src/gandiva/tests/test_util.h
+++ b/cpp/src/gandiva/tests/test_util.h
@@ -73,6 +73,12 @@ static ArrayPtr MakeArrowTypeArray(const std::shared_ptr<arrow::DataType>& type,
   EXPECT_TRUE((a)->Equals(b)) << "expected array: " << (a)->ToString() \
                               << " actual array: " << (b)->ToString();
 
+std::shared_ptr<Configuration> TestConfiguration() {
+  auto builder = ConfigurationBuilder();
+  builder.set_byte_code_file_path(GANDIVA_BYTE_COMPILE_FILE_PATH);
+  return builder.build();
+}
+
 }  // namespace gandiva
 
 #endif  // GANDIVA_TEST_UTIL_H
diff --git a/cpp/src/gandiva/tests/utf8_test.cc b/cpp/src/gandiva/tests/utf8_test.cc
index 8b09b72..925ceea 100644
--- a/cpp/src/gandiva/tests/utf8_test.cc
+++ b/cpp/src/gandiva/tests/utf8_test.cc
@@ -67,7 +67,8 @@ TEST_F(TestUtf8, TestSimple) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr_a, expr_b, expr_c}, &projector);
+  auto status =
+      Projector::Make(schema, {expr_a, expr_b, expr_c}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
@@ -113,7 +114,7 @@ TEST_F(TestUtf8, TestLiteral) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
@@ -155,7 +156,7 @@ TEST_F(TestUtf8, TestNullLiteral) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
@@ -197,7 +198,7 @@ TEST_F(TestUtf8, TestLike) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
@@ -245,7 +246,7 @@ TEST_F(TestUtf8, TestBeginsEnds) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr1, expr2}, &projector);
+  auto status = Projector::Make(schema, {expr1, expr2}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
@@ -291,7 +292,7 @@ TEST_F(TestUtf8, TestInternalAllocs) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
@@ -334,7 +335,7 @@ TEST_F(TestUtf8, TestCastDate) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
@@ -389,7 +390,7 @@ TEST_F(TestUtf8, TestToDateNoError) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
@@ -444,7 +445,7 @@ TEST_F(TestUtf8, TestToDateError) {
 
   // Build a projector for the expressions.
   std::shared_ptr<Projector> projector;
-  Status status = Projector::Make(schema, {expr}, &projector);
+  auto status = Projector::Make(schema, {expr}, TestConfiguration(), &projector);
   EXPECT_TRUE(status.ok()) << status.message();
 
   // Create a row-batch with some sample data
diff --git a/java/gandiva/pom.xml b/java/gandiva/pom.xml
index 39752e2..d365eb9 100644
--- a/java/gandiva/pom.xml
+++ b/java/gandiva/pom.xml
@@ -133,7 +133,7 @@
                 </includes>
             </resource>
             <resource>
-                <directory>${gandiva.cpp.build.dir}</directory>
+                <directory>${gandiva.cpp.build.dir}/../src/gandiva</directory>
                 <includes>
                     <include>irhelpers.bc</include>
                 </includes>