diff --git a/.github/workflows/reusable_package_mage.yaml b/.github/workflows/reusable_package_mage.yaml index 5a1140292..a03da7cbf 100644 --- a/.github/workflows/reusable_package_mage.yaml +++ b/.github/workflows/reusable_package_mage.yaml @@ -87,7 +87,10 @@ jobs: - name: Check mgdeps-cache availability run: | - if curl --silent --fail "http://mgdeps-cache:8000/wheels/" -o /dev/null; then + if [ "${{ inputs.arch }}" == "amd64" ]; then + echo "mgdeps-cache is temporary disabled for amd64" + echo "CACHE_PRESENT=false" >> $GITHUB_ENV + elif curl --silent --fail "http://mgdeps-cache:8000/wheels/" -o /dev/null; then echo "mgdeps-cache is reachable :D" echo "CACHE_PRESENT=true" >> $GITHUB_ENV else diff --git a/.github/workflows/reusable_test.yml b/.github/workflows/reusable_test.yml index 0bfad86ff..5133df2df 100644 --- a/.github/workflows/reusable_test.yml +++ b/.github/workflows/reusable_test.yml @@ -56,7 +56,10 @@ jobs: - name: Check mgdeps-cache availability run: | - if curl --silent --fail "http://mgdeps-cache:8000/wheels/" -o /dev/null; then + if [ "${{ inputs.arch }}" == "amd64" ]; then + echo "mgdeps-cache is temporary disabled for amd64" + echo "CACHE_PRESENT=false" >> $GITHUB_ENV + elif curl --silent --fail "http://mgdeps-cache:8000/wheels/" -o /dev/null; then echo "mgdeps-cache is reachable :D" echo "CACHE_PRESENT=true" >> $GITHUB_ENV else diff --git a/cpp/map_module/algorithm/map.cpp b/cpp/map_module/algorithm/map.cpp index c6a7609cf..795c78b94 100644 --- a/cpp/map_module/algorithm/map.cpp +++ b/cpp/map_module/algorithm/map.cpp @@ -176,9 +176,10 @@ void Map::Merge(mgp_list *args, mgp_func_context *ctx, mgp_func_result *res, mgp mgp::MemoryDispatcherGuard guard{memory}; const auto arguments = mgp::List(args); auto result = mgp::Result(res); + try { - const auto map1 = arguments[0].ValueMap(); - const auto map2 = arguments[1].ValueMap(); + const auto map1 = arguments[0].IsMap() ? arguments[0].ValueMap() : mgp::Map(); + const auto map2 = arguments[1].IsMap() ? arguments[1].ValueMap() : mgp::Map(); mgp::Map merged_map = mgp::Map(std::move(map2)); for (const auto element : map1) { diff --git a/cpp/map_module/map_module.cpp b/cpp/map_module/map_module.cpp index 5c1ec44af..1dd2e0324 100644 --- a/cpp/map_module/map_module.cpp +++ b/cpp/map_module/map_module.cpp @@ -1,5 +1,6 @@ #include +#include "_mgp.hpp" #include "algorithm/map.hpp" extern "C" int mgp_init_module(struct mgp_module *module, struct mgp_memory *memory) { @@ -17,14 +18,6 @@ extern "C" int mgp_init_module(struct mgp_module *module, struct mgp_memory *mem mgp::Parameter(std::string(Map::kArgumentListValuesFromLists).c_str(), {mgp::Type::List, mgp::Type::Any})}, module, memory); - mgp::AddFunction( - Map::RemoveKeys, std::string(Map::kProcedureRemoveKeys).c_str(), - {mgp::Parameter(std::string(Map::kArgumentsInputMapRemoveKeys).c_str(), mgp::Type::Map), - mgp::Parameter(std::string(Map::kArgumentsKeysListRemoveKeys).c_str(), {mgp::Type::List, mgp::Type::String}), - mgp::Parameter(std::string(Map::kArgumentsRecursiveRemoveKeys).c_str(), mgp::Type::Map, - mgp::Value(mgp::Map()))}, - module, memory); - mgp::AddFunction( Map::RemoveKey, Map::kProcedureRemoveKey, {mgp::Parameter(Map::kArgumentsInputMap, mgp::Type::Map), mgp::Parameter(Map::kArgumentsKey, mgp::Type::String), @@ -34,10 +27,24 @@ extern "C" int mgp_init_module(struct mgp_module *module, struct mgp_memory *mem mgp::AddFunction(Map::FromPairs, Map::kProcedureFromPairs, {mgp::Parameter(Map::kArgumentsInputList, {mgp::Type::List, mgp::Type::List})}, module, memory); - mgp::AddFunction(Map::Merge, Map::kProcedureMerge, - {mgp::Parameter(Map::kArgumentsInputMap1, mgp::Type::Map), - mgp::Parameter(Map::kArgumentsInputMap2, mgp::Type::Map)}, - module, memory); + { + // mgp::AddFunction(Map::Merge, Map::kProcedureMerge, + // {mgp::Parameter(Map::kArgumentsInputMap1, mgp::Type::Any, mgp::Value(mgp::Map())), + // mgp::Parameter(Map::kArgumentsInputMap2, mgp::Type::Any, mgp::Value(mgp::Map()))}, + // module, memory); + + auto *func = mgp::module_add_function(module, Map::kProcedureMerge.data(), Map::Merge); + mgp::func_add_arg(func, Map::kArgumentsInputMap1.data(), mgp::type_nullable(mgp::type_map())); + mgp::func_add_arg(func, Map::kArgumentsInputMap2.data(), mgp::type_nullable(mgp::type_map())); + } + + mgp::AddFunction( + Map::RemoveKeys, std::string(Map::kProcedureRemoveKeys).c_str(), + {mgp::Parameter(std::string(Map::kArgumentsInputMapRemoveKeys).c_str(), mgp::Type::Map), + mgp::Parameter(std::string(Map::kArgumentsKeysListRemoveKeys).c_str(), {mgp::Type::List, mgp::Type::String}), + mgp::Parameter(std::string(Map::kArgumentsRecursiveRemoveKeys).c_str(), mgp::Type::Map, + mgp::Value(mgp::Map()))}, + module, memory); AddProcedure(Map::FromNodes, Map::kProcedureFromNodes, mgp::ProcedureType::Read, {mgp::Parameter(Map::kFromNodesArg1, mgp::Type::String), diff --git a/e2e/map_test/test_merge_empty/test.yml b/e2e/map_test/test_merge_empty/test.yml index c43abf5b4..899b06e4e 100644 --- a/e2e/map_test/test_merge_empty/test.yml +++ b/e2e/map_test/test_merge_empty/test.yml @@ -1,5 +1,5 @@ query: > - RETURN map.merge({}, {}) AS merged + RETURN map.merge(null, {id: 1}) AS merged output: - - merged: {} + - merged: {id: 1} diff --git a/e2e/map_test/test_merge_null/input.cyp b/e2e/map_test/test_merge_null/input.cyp new file mode 100644 index 000000000..e69de29bb diff --git a/e2e/map_test/test_merge_null/test.yml b/e2e/map_test/test_merge_null/test.yml new file mode 100644 index 000000000..b818e4581 --- /dev/null +++ b/e2e/map_test/test_merge_null/test.yml @@ -0,0 +1,5 @@ +query: > + RETURN map.merge({id: 1}, null) AS merged + +output: + - merged: {id: 1} diff --git a/e2e/map_test/test_merge_null_2/input.cyp b/e2e/map_test/test_merge_null_2/input.cyp new file mode 100644 index 000000000..e69de29bb diff --git a/e2e/map_test/test_merge_null_2/test.yml b/e2e/map_test/test_merge_null_2/test.yml new file mode 100644 index 000000000..899b06e4e --- /dev/null +++ b/e2e/map_test/test_merge_null_2/test.yml @@ -0,0 +1,5 @@ +query: > + RETURN map.merge(null, {id: 1}) AS merged + +output: + - merged: {id: 1}