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
|
{"key1":123, "key2":"[1]"} $.key3 NULL NULL
|
||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
DROP TABLE t1;
|
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;
|
DROP DATABASE json_value_db;
|
||||||
|
@ -39,5 +39,33 @@ FROM t2;
|
|||||||
|
|
||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
DROP TABLE t1;
|
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;
|
DROP DATABASE json_value_db;
|
||||||
|
|
||||||
|
@ -11,6 +11,16 @@ using namespace joblist;
|
|||||||
|
|
||||||
namespace funcexp
|
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)
|
bool JSONEgWrapper::checkAndGetComplexVal(string& ret, int* error)
|
||||||
{
|
{
|
||||||
if (json_value_scalar(this))
|
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)
|
execplan::CalpontSystemCatalog::ColType& type)
|
||||||
{
|
{
|
||||||
string ret;
|
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;
|
return isNull ? "" : ret;
|
||||||
}
|
}
|
||||||
} // namespace funcexp
|
} // namespace funcexp
|
||||||
|
@ -401,7 +401,7 @@ class Func_json_value : public Func_Str
|
|||||||
|
|
||||||
/** @brief Func_json_query class
|
/** @brief Func_json_query class
|
||||||
*/
|
*/
|
||||||
class Func_json_query : public Func_Str, public JSONPathWrapper
|
class Func_json_query : public Func_Str
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Func_json_query() : Func_Str("json_query")
|
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(
|
execplan::CalpontSystemCatalog::ColType operationType(
|
||||||
FunctionParm& fp, execplan::CalpontSystemCatalog::ColType& resultType) override;
|
FunctionParm& fp, execplan::CalpontSystemCatalog::ColType& resultType) override;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user