#include "json_executors.hpp" namespace duckdb { static void ValueFunction(DataChunk &args, ExpressionState &state, Vector &result) { JSONExecutors::BinaryExecute(args, state, result, JSONCommon::JSONValue); } static void ValueManyFunction(DataChunk &args, ExpressionState &state, Vector &result) { JSONExecutors::ExecuteMany(args, state, result, JSONCommon::JSONValue); } static void GetValueFunctionsInternal(ScalarFunctionSet &set, const LogicalType &input_type) { set.AddFunction(ScalarFunction({input_type, LogicalType::BIGINT}, LogicalType::VARCHAR, ValueFunction, JSONReadFunctionData::Bind, nullptr, nullptr, JSONFunctionLocalState::Init)); set.AddFunction(ScalarFunction({input_type, LogicalType::VARCHAR}, LogicalType::VARCHAR, ValueFunction, JSONReadFunctionData::Bind, nullptr, nullptr, JSONFunctionLocalState::Init)); set.AddFunction(ScalarFunction({input_type, LogicalType::LIST(LogicalType::VARCHAR)}, LogicalType::LIST(LogicalType::VARCHAR), ValueManyFunction, JSONReadManyFunctionData::Bind, nullptr, nullptr, JSONFunctionLocalState::Init)); } ScalarFunctionSet JSONFunctions::GetValueFunction() { // The value function is just like the extract function but returns NULL if the JSON is not a scalar value ScalarFunctionSet set("json_value"); GetValueFunctionsInternal(set, LogicalType::VARCHAR); GetValueFunctionsInternal(set, LogicalType::JSON()); return set; } } // namespace duckdb