You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-02 17:22:27 +03:00
MCOL-5625: Fixes json_query implementation
Also extends func_json_value.test.
This commit is contained in:
committed by
Leonid Fedorov
parent
bc88cd05b3
commit
a9ab71e675
@ -48,4 +48,34 @@ json_text $.key3 json_value json_query
|
||||
{"key1":123, "key2":"[1]"} $.key3 NULL NULL
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE zu (hu TEXT) ENGINE = COLUMNSTORE;
|
||||
INSERT INTO zu(hu) VALUES ('{}'), (NULL), ('{ "": "huh", "10001" : "10001", "10002" : "10001", "10003" : "10001", "10004" : "10001", "10005" : "10001", "10006" : "10001", "10007" : "10001", "10008" : "10001", "10009" : "10001", "10010" : "10001", "10011" : "10001", "10012" : "10001", "10013" : "10001", "10014" : "10001", "10015" : "10001", "10016" : "10001", "10017" : "10001", "10018" : "10001", "10019" : "10001", "10020" : "10001", "buga" : ""}');
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
SELECT COUNT(*) FROM zu;
|
||||
COUNT(*)
|
||||
3145728
|
||||
SELECT COUNT(*) FROM zu wHERE
|
||||
JSON_QUERY(hu, '$.buga') IS NOT NULL
|
||||
AND JSON_QUERY(hu, '$.zhuga') IS NULL;
|
||||
COUNT(*)
|
||||
0
|
||||
DROP DATABASE json_value_db;
|
||||
|
@ -39,5 +39,33 @@ FROM t2;
|
||||
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
|
||||
# check an absence of race bug in json_query.
|
||||
CREATE TABLE zu (hu TEXT) ENGINE = COLUMNSTORE;
|
||||
INSERT INTO zu(hu) VALUES ('{}'), (NULL), ('{ "": "huh", "10001" : "10001", "10002" : "10001", "10003" : "10001", "10004" : "10001", "10005" : "10001", "10006" : "10001", "10007" : "10001", "10008" : "10001", "10009" : "10001", "10010" : "10001", "10011" : "10001", "10012" : "10001", "10013" : "10001", "10014" : "10001", "10015" : "10001", "10016" : "10001", "10017" : "10001", "10018" : "10001", "10019" : "10001", "10020" : "10001", "buga" : ""}');
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
INSERT INTO zu(hu) SELECT hu FROM zu;
|
||||
SELECT COUNT(*) FROM zu;
|
||||
SELECT COUNT(*) FROM zu wHERE
|
||||
JSON_QUERY(hu, '$.buga') IS NOT NULL
|
||||
AND JSON_QUERY(hu, '$.zhuga') IS NULL;
|
||||
DROP DATABASE json_value_db;
|
||||
|
||||
|
@ -11,6 +11,16 @@ using namespace joblist;
|
||||
|
||||
namespace funcexp
|
||||
{
|
||||
|
||||
class QueryJSONPathWrapper : public JSONPathWrapper
|
||||
{
|
||||
bool checkAndGetValue(JSONEgWrapper* je, string& res, int* error) override
|
||||
{
|
||||
return je->checkAndGetComplexVal(res, error);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
bool JSONEgWrapper::checkAndGetComplexVal(string& ret, int* error)
|
||||
{
|
||||
if (json_value_scalar(this))
|
||||
@ -42,7 +52,8 @@ string Func_json_query::getStrVal(rowgroup::Row& row, FunctionParm& fp, bool& is
|
||||
execplan::CalpontSystemCatalog::ColType& type)
|
||||
{
|
||||
string ret;
|
||||
isNull = JSONPathWrapper::extract(ret, row, fp[0], fp[1]);
|
||||
QueryJSONPathWrapper qpw;
|
||||
isNull = qpw.extract(ret, row, fp[0], fp[1]);
|
||||
return isNull ? "" : ret;
|
||||
}
|
||||
} // namespace funcexp
|
||||
|
@ -401,7 +401,7 @@ class Func_json_value : public Func_Str
|
||||
|
||||
/** @brief Func_json_query class
|
||||
*/
|
||||
class Func_json_query : public Func_Str, public JSONPathWrapper
|
||||
class Func_json_query : public Func_Str
|
||||
{
|
||||
public:
|
||||
Func_json_query() : Func_Str("json_query")
|
||||
@ -411,11 +411,6 @@ class Func_json_query : public Func_Str, public JSONPathWrapper
|
||||
{
|
||||
}
|
||||
|
||||
bool checkAndGetValue(JSONEgWrapper* je, string& res, int* error) override
|
||||
{
|
||||
return je->checkAndGetComplexVal(res, error);
|
||||
}
|
||||
|
||||
execplan::CalpontSystemCatalog::ColType operationType(
|
||||
FunctionParm& fp, execplan::CalpontSystemCatalog::ColType& resultType) override;
|
||||
|
||||
|
Reference in New Issue
Block a user