CQL3: fromJson accepts string as bool
The problem was incompatibility with cassandra, which accepts bool
as a string in `fromJson()` UDF. The difference between Cassandra and
Scylla now is Scylla accepts whitespaces around word in string,
Cassandra don't. Both are case insensitive.
Fixes: #7915
(cherry picked from commit 1902dbc9ff)
This commit is contained in:
@@ -31,6 +31,8 @@
|
||||
#include "types/listlike_partial_deserializing_iterator.hh"
|
||||
#include "utils/managed_bytes.hh"
|
||||
#include "exceptions/exceptions.hh"
|
||||
#include <boost/algorithm/string/trim_all.hpp>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
static inline bool is_control_char(char c) {
|
||||
return c >= 0 && c <= 0x1F;
|
||||
@@ -212,6 +214,17 @@ struct from_json_object_visitor {
|
||||
}
|
||||
bytes operator()(const boolean_type_impl& t) {
|
||||
if (!value.IsBool()) {
|
||||
if (value.IsString()) {
|
||||
std::string str(rjson::to_string_view(value));
|
||||
boost::trim_all(str);
|
||||
boost::to_lower(str);
|
||||
|
||||
if (str == "true") {
|
||||
return t.decompose(true);
|
||||
} else if (str == "false") {
|
||||
return t.decompose(false);
|
||||
}
|
||||
}
|
||||
throw marshal_exception(format("Invalid JSON object {}", value));
|
||||
}
|
||||
return t.decompose(value.GetBool());
|
||||
|
||||
Reference in New Issue
Block a user