32 lines
1.5 KiB
C++
32 lines
1.5 KiB
C++
#include "json_executors.hpp"
|
|
|
|
namespace duckdb {
|
|
|
|
static void ValueFunction(DataChunk &args, ExpressionState &state, Vector &result) {
|
|
JSONExecutors::BinaryExecute<string_t>(args, state, result, JSONCommon::JSONValue);
|
|
}
|
|
|
|
static void ValueManyFunction(DataChunk &args, ExpressionState &state, Vector &result) {
|
|
JSONExecutors::ExecuteMany<string_t>(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
|