mirror of
https://github.com/MariaDB/server.git
synced 2026-10-23 18:49:29 +03:00
Remove warning on Linux
modified: storage/connect/filamzip.cpp Avoid calling the wrong AddValue (Windows compiler error ???) modified: storage/connect/json.h Fix looping bug in JARRAY::AddValue for arrays having one value. Fix potential crash in JVALUE::SetValue modified: storage/connect/json.cpp Many changes to fix bugs, enhance memory handling and modify Jpath. In JSNX some functions have been re-written or added to handle new Jpath. BMX was re-defined to avoid a different size between Windows an Linux. Jbin memory was fixed to use the proper memory when adding values. Default pretty value is now 0 instead of 2. Filename is stored in BSON when IsJson == 2. BSON size is added to memlen in CalcLen when applicable. The order or parameter was switch in Json_Object_Grp. File name argument must be a constant (temporary?) Json_Set_Item now returns file name when applicable. modified: storage/connect/jsonudf.cpp modified: storage/connect/jsonudf.h Include "mycat.h" modified: storage/connect/mycat.cc Udf_json test revisited and fixed for Linux modified: storage/connect/mysql-test/connect/r/json_udf.result modified: storage/connect/mysql-test/connect/t/json_udf.inc modified: storage/connect/mysql-test/connect/t/json_udf.test modified: storage/connect/mysql-test/connect/t/json_udf2.inc
This commit is contained in:
@@ -1404,8 +1404,13 @@ void ZLBFAM::Rewind(void)
|
||||
// We must be positioned after the header block
|
||||
if (CurBlk >= 0) { // Nothing to do if no block read yet
|
||||
if (!Optimized) { // If optimized, fseek will be done in ReadBuffer
|
||||
size_t st;
|
||||
|
||||
rewind(Stream);
|
||||
(void) fread(Zlenp, sizeof(int), 1, Stream);
|
||||
|
||||
if (!(st = fread(Zlenp, sizeof(int), 1, Stream)) && trace)
|
||||
htrc("fread error %d in Rewind", errno);
|
||||
|
||||
fseek(Stream, *Zlenp + sizeof(int), SEEK_SET);
|
||||
OldBlk = -1;
|
||||
} // endif Optimized
|
||||
|
||||
@@ -1096,10 +1096,12 @@ PJVAL JARRAY::AddValue(PGLOBAL g, PJVAL jvp, int *x)
|
||||
Last = jvp;
|
||||
|
||||
} else {
|
||||
if (Last)
|
||||
Last->Next = jvp;
|
||||
else
|
||||
if (!First)
|
||||
First = jvp;
|
||||
else if (Last == First)
|
||||
First->Next = Last = jvp;
|
||||
else
|
||||
Last->Next = jvp;
|
||||
|
||||
Last = jvp;
|
||||
} // endif x
|
||||
@@ -1284,7 +1286,7 @@ PSZ JVALUE::GetText(PGLOBAL g, PSZ text)
|
||||
|
||||
void JVALUE::SetValue(PJSON jsp)
|
||||
{
|
||||
if (jsp->GetType() == TYPE_JVAL) {
|
||||
if (jsp && jsp->GetType() == TYPE_JVAL) {
|
||||
Jsp = jsp->GetJsp();
|
||||
Value = jsp->GetValue();
|
||||
} else {
|
||||
|
||||
@@ -149,7 +149,7 @@ class JSON : public BLOCK {
|
||||
virtual JTYP GetType(void) {return TYPE_JSON;}
|
||||
virtual JTYP GetValType(void) {X return TYPE_JSON;}
|
||||
virtual void InitArray(PGLOBAL g) {X}
|
||||
virtual PJVAL AddValue(PGLOBAL g, PJVAL jvp = NULL, int *x = NULL) {X return NULL;}
|
||||
//virtual PJVAL AddValue(PGLOBAL g, PJVAL jvp = NULL, int *x = NULL) {X return NULL;}
|
||||
virtual PJPR AddPair(PGLOBAL g, PSZ key) {X return NULL;}
|
||||
virtual PJAR GetKeyList(PGLOBAL g) {X return NULL;}
|
||||
virtual PJVAL GetValue(const char *key) {X return NULL;}
|
||||
@@ -223,7 +223,7 @@ class JARRAY : public JSON {
|
||||
virtual void Clear(void) {First = Last = NULL; Size = 0;}
|
||||
virtual JTYP GetType(void) {return TYPE_JAR;}
|
||||
virtual PJAR GetArray(void) {return this;}
|
||||
virtual PJVAL AddValue(PGLOBAL g, PJVAL jvp = NULL, int *x = NULL);
|
||||
PJVAL AddValue(PGLOBAL g, PJVAL jvp = NULL, int *x = NULL);
|
||||
virtual void InitArray(PGLOBAL g);
|
||||
virtual PJVAL GetValue(int i);
|
||||
virtual bool Merge(PGLOBAL g, PJSON jsp);
|
||||
|
||||
@@ -59,6 +59,7 @@ JSNX::JSNX(PGLOBAL g, PJSON row, int type, int len, int prec, my_bool wr)
|
||||
Parsed = false;
|
||||
Found = false;
|
||||
Wr = wr;
|
||||
Jb = false;
|
||||
} // end of JSNX constructor
|
||||
|
||||
/*********************************************************************************/
|
||||
@@ -72,6 +73,7 @@ my_bool JSNX::SetJpath(PGLOBAL g, char *path, my_bool jb)
|
||||
|
||||
Value->SetNullable(true);
|
||||
|
||||
#if 0
|
||||
if (jb) {
|
||||
// Path must return a Json item
|
||||
size_t n = strlen(path);
|
||||
@@ -83,11 +85,13 @@ my_bool JSNX::SetJpath(PGLOBAL g, char *path, my_bool jb)
|
||||
Jpath = path;
|
||||
|
||||
} else
|
||||
#endif // 0
|
||||
Jpath = path;
|
||||
|
||||
// Parse the json path
|
||||
Parsed = false;
|
||||
Nod = 0;
|
||||
Jb = jb;
|
||||
return ParseJpath(g);
|
||||
} // end of SetJpath
|
||||
|
||||
@@ -124,6 +128,9 @@ my_bool JSNX::SetArrayOptions(PGLOBAL g, char *p, int i, PSZ nm)
|
||||
// Force append
|
||||
jnp->Rank = INT_MAX32;
|
||||
jnp->Op = OP_LE;
|
||||
} else if (Jb) {
|
||||
// Return a Json item
|
||||
jnp->Op = OP_XX;
|
||||
} else if (b) {
|
||||
// Return 1st value (B is the index base)
|
||||
jnp->Rank = B;
|
||||
@@ -140,6 +147,9 @@ my_bool JSNX::SetArrayOptions(PGLOBAL g, char *p, int i, PSZ nm)
|
||||
// Return nth value
|
||||
jnp->Rank = atoi(p) - B;
|
||||
jnp->Op = OP_EQ;
|
||||
} else if (Wr) {
|
||||
sprintf(g->Message, "Invalid specification %s in a write path", p);
|
||||
return true;
|
||||
} else if (n == 1) {
|
||||
// Set the Op value;
|
||||
switch (*p) {
|
||||
@@ -247,8 +257,12 @@ my_bool JSNX::ParseJpath(PGLOBAL g)
|
||||
return true;
|
||||
|
||||
} else if (*p == '*') {
|
||||
// Return JSON
|
||||
Nodes[i].Op = OP_XX;
|
||||
if (Wr) {
|
||||
sprintf(g->Message, "Invalid specification %c in a write path", *p);
|
||||
return true;
|
||||
} else // Return JSON
|
||||
Nodes[i].Op = OP_XX;
|
||||
|
||||
} else {
|
||||
Nodes[i].Key = p;
|
||||
Nodes[i].Op = OP_EXIST;
|
||||
@@ -269,7 +283,10 @@ PVAL JSNX::MakeJson(PGLOBAL g, PJSON jsp)
|
||||
if (Value->IsTypeNum()) {
|
||||
strcpy(g->Message, "Cannot make Json for a numeric value");
|
||||
Value->Reset();
|
||||
} else
|
||||
} else if (jsp->GetType() != TYPE_JAR && jsp->GetType() != TYPE_JOB) {
|
||||
strcpy(g->Message, "Target is not an array or object");
|
||||
Value->Reset();
|
||||
} else
|
||||
Value->SetValue_psz(Serialize(g, jsp, NULL, 0));
|
||||
|
||||
return Value;
|
||||
@@ -281,32 +298,34 @@ PVAL JSNX::MakeJson(PGLOBAL g, PJSON jsp)
|
||||
void JSNX::SetJsonValue(PGLOBAL g, PVAL vp, PJVAL val, int n)
|
||||
{
|
||||
if (val) {
|
||||
switch (val->GetValType()) {
|
||||
case TYPE_STRG:
|
||||
case TYPE_INTG:
|
||||
case TYPE_BINT:
|
||||
case TYPE_DBL:
|
||||
vp->SetValue_pval(val->GetValue());
|
||||
break;
|
||||
case TYPE_BOOL:
|
||||
if (vp->IsTypeNum())
|
||||
vp->SetValue(val->GetInteger() ? 1 : 0);
|
||||
else
|
||||
vp->SetValue_psz((PSZ)(val->GetInteger() ? "true" : "false"));
|
||||
if (Jb) {
|
||||
vp->SetValue_psz(Serialize(g, val->GetJsp(), NULL, 0));
|
||||
} else switch (val->GetValType()) {
|
||||
case TYPE_STRG:
|
||||
case TYPE_INTG:
|
||||
case TYPE_BINT:
|
||||
case TYPE_DBL:
|
||||
vp->SetValue_pval(val->GetValue());
|
||||
break;
|
||||
case TYPE_BOOL:
|
||||
if (vp->IsTypeNum())
|
||||
vp->SetValue(val->GetInteger() ? 1 : 0);
|
||||
else
|
||||
vp->SetValue_psz((PSZ)(val->GetInteger() ? "true" : "false"));
|
||||
|
||||
break;
|
||||
case TYPE_JAR:
|
||||
SetJsonValue(g, vp, val->GetArray()->GetValue(0), n);
|
||||
break;
|
||||
case TYPE_JOB:
|
||||
// if (!vp->IsTypeNum() || !Strict) {
|
||||
vp->SetValue_psz(val->GetObject()->GetText(g, NULL));
|
||||
break;
|
||||
// } // endif Type
|
||||
break;
|
||||
case TYPE_JAR:
|
||||
SetJsonValue(g, vp, val->GetArray()->GetValue(0), n);
|
||||
break;
|
||||
case TYPE_JOB:
|
||||
// if (!vp->IsTypeNum() || !Strict) {
|
||||
vp->SetValue_psz(val->GetObject()->GetText(g, NULL));
|
||||
break;
|
||||
// } // endif Type
|
||||
|
||||
default:
|
||||
vp->Reset();
|
||||
} // endswitch Type
|
||||
default:
|
||||
vp->Reset();
|
||||
} // endswitch Type
|
||||
|
||||
} else {
|
||||
vp->SetNull(true);
|
||||
@@ -320,7 +339,7 @@ void JSNX::SetJsonValue(PGLOBAL g, PVAL vp, PJVAL val, int n)
|
||||
/*********************************************************************************/
|
||||
PJVAL JSNX::GetJson(PGLOBAL g)
|
||||
{
|
||||
return GetValue(g, Row, 0);
|
||||
return GetRowValue(g, Row, 0);
|
||||
} // end of GetJson
|
||||
|
||||
/*********************************************************************************/
|
||||
@@ -339,17 +358,16 @@ PVAL JSNX::GetColumnValue(PGLOBAL g, PJSON row, int i)
|
||||
int n = Nod - 1;
|
||||
PJVAL val = NULL;
|
||||
|
||||
val = GetValue(g, row, i);
|
||||
val = GetRowValue(g, row, i);
|
||||
SetJsonValue(g, Value, val, n);
|
||||
return Value;
|
||||
} // end of GetColumnValue
|
||||
|
||||
/*********************************************************************************/
|
||||
/* GetValue: */
|
||||
/* GetRowValue: */
|
||||
/*********************************************************************************/
|
||||
PJVAL JSNX::GetValue(PGLOBAL g, PJSON row, int i, my_bool b)
|
||||
PJVAL JSNX::GetRowValue(PGLOBAL g, PJSON row, int i, my_bool b)
|
||||
{
|
||||
//int n = Nod - 1;
|
||||
my_bool expd = false;
|
||||
PJAR arp;
|
||||
PJVAL val = NULL;
|
||||
@@ -360,11 +378,8 @@ PJVAL JSNX::GetValue(PGLOBAL g, PJSON row, int i, my_bool b)
|
||||
val = new(g) JVALUE(g, Value);
|
||||
return val;
|
||||
} else if (Nodes[i].Op == OP_XX) {
|
||||
if (b)
|
||||
return new(g)JVALUE(g, MakeJson(g, row));
|
||||
else
|
||||
return new(g)JVALUE(row);
|
||||
|
||||
Jb = b;
|
||||
return new(g)JVALUE(row);
|
||||
} else switch (row->GetType()) {
|
||||
case TYPE_JOB:
|
||||
if (!Nodes[i].Key) {
|
||||
@@ -419,7 +434,7 @@ PJVAL JSNX::GetValue(PGLOBAL g, PJSON row, int i, my_bool b)
|
||||
|
||||
// SetJsonValue(g, Value, val, n);
|
||||
return val;
|
||||
} // end of GetValue
|
||||
} // end of GetRowValue
|
||||
|
||||
/*********************************************************************************/
|
||||
/* ExpandArray: */
|
||||
@@ -561,7 +576,7 @@ PJSON JSNX::GetRow(PGLOBAL g)
|
||||
PJSON nwr, row = Row;
|
||||
|
||||
for (int i = 0; i < Nod - 1 && row; i++) {
|
||||
if (Nodes[i+1].Op == OP_XX)
|
||||
if (Nodes[i].Op == OP_XX)
|
||||
break;
|
||||
else switch (row->GetType()) {
|
||||
case TYPE_JOB:
|
||||
@@ -652,12 +667,15 @@ my_bool JSNX::WriteValue(PGLOBAL g, PJVAL jvalp)
|
||||
} // endswitch Type
|
||||
|
||||
if (arp) {
|
||||
if (Nodes[Nod-1].Op == OP_EQ)
|
||||
arp->SetValue(g, jvalp, Nodes[Nod-1].Rank);
|
||||
else
|
||||
arp->AddValue(g, jvalp);
|
||||
if (!Nodes[Nod-1].Key) {
|
||||
if (Nodes[Nod-1].Op == OP_EQ)
|
||||
arp->SetValue(g, jvalp, Nodes[Nod-1].Rank);
|
||||
else
|
||||
arp->AddValue(g, jvalp);
|
||||
|
||||
arp->InitArray(g);
|
||||
} // endif Key
|
||||
|
||||
arp->InitArray(g);
|
||||
} else if (objp) {
|
||||
if (Nodes[Nod-1].Key)
|
||||
objp->SetValue(g, jvalp, Nodes[Nod-1].Key);
|
||||
@@ -968,15 +986,17 @@ my_bool JSNX::AddPath(void)
|
||||
|
||||
/* --------------------------------- JSON UDF ---------------------------------- */
|
||||
|
||||
#define BMX (_MAX_PATH - 1)
|
||||
// BSON size should be equal on Linux and Windows
|
||||
#define BMX 255
|
||||
typedef struct BSON *PBSON;
|
||||
|
||||
/*********************************************************************************/
|
||||
/* Structure used to return binary json. */
|
||||
/*********************************************************************************/
|
||||
struct BSON {
|
||||
char Msg[_MAX_PATH];
|
||||
char Msg[BMX + 1];
|
||||
char *Filename;
|
||||
PGLOBAL G;
|
||||
int Pretty;
|
||||
ulong Reslen;
|
||||
my_bool Changed;
|
||||
@@ -996,6 +1016,7 @@ static PBSON JbinAlloc(PGLOBAL g, UDF_ARGS *args, ulong len, PJSON jsp)
|
||||
strcpy(bsp->Msg, "Binary Json");
|
||||
bsp->Msg[BMX] = 0;
|
||||
bsp->Filename = NULL;
|
||||
bsp->G = g;
|
||||
bsp->Pretty = 2;
|
||||
bsp->Reslen = len;
|
||||
bsp->Changed = false;
|
||||
@@ -1157,7 +1178,7 @@ static PBSON MakeBinResult(PGLOBAL g, UDF_ARGS *args, PJSON top, ulong len, int
|
||||
return NULL;
|
||||
|
||||
if (IsJson(args, 0) == 2) {
|
||||
int pretty = 2;
|
||||
int pretty = 0;
|
||||
|
||||
for (uint i = n; i < args->arg_count; i++)
|
||||
if (args->arg_type[i] == INT_RESULT) {
|
||||
@@ -1167,9 +1188,10 @@ static PBSON MakeBinResult(PGLOBAL g, UDF_ARGS *args, PJSON top, ulong len, int
|
||||
|
||||
bsnp->Pretty = pretty;
|
||||
|
||||
if (bsnp->Filename = (char*)args->args[0])
|
||||
strncpy(bsnp->Msg, (char*)args->args[0], BMX);
|
||||
else
|
||||
if (bsnp->Filename = (char*)args->args[0]) {
|
||||
bsnp->Filename = MakePSZ(g, args, 0);
|
||||
strncpy(bsnp->Msg, bsnp->Filename, BMX);
|
||||
} else
|
||||
strncpy(bsnp->Msg, "null filename", BMX);
|
||||
|
||||
} else if (IsJson(args, 0) == 3) {
|
||||
@@ -1235,6 +1257,14 @@ static int IsJson(UDF_ARGS *args, uint i)
|
||||
return n;
|
||||
} // end of IsJson
|
||||
|
||||
/*********************************************************************************/
|
||||
/* GetMemPtr: returns the memory pointer used by this argument. */
|
||||
/*********************************************************************************/
|
||||
static PGLOBAL GetMemPtr(PGLOBAL g, UDF_ARGS *args, uint i)
|
||||
{
|
||||
return (IsJson(args, i) == 3) ? ((PBSON)args->args[i])->G : g;
|
||||
} // end of IsJson
|
||||
|
||||
/*********************************************************************************/
|
||||
/* GetFileLength: returns file size in number of bytes. */
|
||||
/*********************************************************************************/
|
||||
@@ -1334,8 +1364,8 @@ static my_bool CalcLen(UDF_ARGS *args, my_bool obj,
|
||||
} else
|
||||
memlen += sizeof(JARRAY);
|
||||
|
||||
switch (args->arg_type[i]) {
|
||||
case STRING_RESULT:
|
||||
switch (args->arg_type[i]) {
|
||||
case STRING_RESULT:
|
||||
if (n == 2 && args->args[i]) {
|
||||
if ((signed)i != j) {
|
||||
m = MY_MIN(args->lengths[i], sizeof(fn) - 1);
|
||||
@@ -1346,11 +1376,14 @@ static my_bool CalcLen(UDF_ARGS *args, my_bool obj,
|
||||
} // endif i
|
||||
|
||||
memlen += fl * M;
|
||||
} else if (IsJson(args, i) == 3)
|
||||
memlen += sizeof(JVALUE);
|
||||
else if (IsJson(args, i) == 1)
|
||||
} else if (n == 1) {
|
||||
if (i == 0)
|
||||
memlen += sizeof(BSON); // For Jbin functions
|
||||
|
||||
memlen += args->lengths[i] * M; // Estimate parse memory
|
||||
|
||||
} else if (n == 3)
|
||||
memlen += sizeof(JVALUE);
|
||||
|
||||
memlen += sizeof(TYPVAL<PSZ>);
|
||||
break;
|
||||
case INT_RESULT:
|
||||
@@ -1859,9 +1892,11 @@ char *json_array_add(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (CheckPath(g, args, jsp, jvp, 2))
|
||||
PUSH_WARNING(g->Message);
|
||||
else if (jvp && jvp->GetValType() == TYPE_JAR) {
|
||||
PGLOBAL gb = GetMemPtr(g, args, 0);
|
||||
|
||||
arp = jvp->GetArray();
|
||||
arp->AddValue(g, MakeValue(g, args, 1), x);
|
||||
arp->InitArray(g);
|
||||
arp->AddValue(gb, MakeValue(gb, args, 1), x);
|
||||
arp->InitArray(gb);
|
||||
str = MakeResult(g, args, top, n);
|
||||
} else {
|
||||
PUSH_WARNING("First argument target is not an array");
|
||||
@@ -1882,6 +1917,7 @@ fin:
|
||||
if (!str) {
|
||||
*res_length = 0;
|
||||
*is_null = 1;
|
||||
*error = 1;
|
||||
} else
|
||||
*res_length = strlen(str);
|
||||
|
||||
@@ -1913,7 +1949,7 @@ my_bool json_array_delete_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
} // end of json_array_delete_init
|
||||
|
||||
char *json_array_delete(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
unsigned long *res_length, char *, char *error)
|
||||
unsigned long *res_length, char *is_null, char *error)
|
||||
{
|
||||
char *str = NULL;
|
||||
PGLOBAL g = (PGLOBAL)initid->ptr;
|
||||
@@ -1921,8 +1957,7 @@ char *json_array_delete(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (g->Xchk) {
|
||||
// This constant function was recalled
|
||||
str = (char*)g->Xchk;
|
||||
*res_length = strlen(str);
|
||||
return str;
|
||||
goto fin;
|
||||
} // endif Xchk
|
||||
|
||||
if (!CheckMemory(g, initid, args, 1, false, true)) {
|
||||
@@ -1939,7 +1974,7 @@ char *json_array_delete(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
else if (jvp && jvp->GetValType() == TYPE_JAR) {
|
||||
arp = jvp->GetArray();
|
||||
arp->DeleteValue(*x);
|
||||
arp->InitArray(g);
|
||||
arp->InitArray(GetMemPtr(g, args, 0));
|
||||
str = MakeResult(g, args, top, n);
|
||||
} else {
|
||||
PUSH_WARNING("First argument target is not an array");
|
||||
@@ -1956,7 +1991,14 @@ char *json_array_delete(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
// Keep result of constant function
|
||||
g->Xchk = str;
|
||||
|
||||
*res_length = (str) ? strlen(str) : 0;
|
||||
fin:
|
||||
if (!str) {
|
||||
*is_null = 1;
|
||||
*error = 1;
|
||||
*res_length = 0;
|
||||
} else
|
||||
*res_length = strlen(str);
|
||||
|
||||
return str;
|
||||
} // end of json_array_delete
|
||||
|
||||
@@ -2125,7 +2167,7 @@ my_bool json_object_add_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
} // end of json_object_add_init
|
||||
|
||||
char *json_object_add(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
unsigned long *res_length, char *, char *error)
|
||||
unsigned long *res_length, char *is_null, char *error)
|
||||
{
|
||||
char *key, *str = NULL;
|
||||
PGLOBAL g = (PGLOBAL)initid->ptr;
|
||||
@@ -2133,14 +2175,14 @@ char *json_object_add(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (g->Xchk) {
|
||||
// This constant function was recalled
|
||||
str = (char*)g->Xchk;
|
||||
*res_length = strlen(str);
|
||||
return str;
|
||||
goto fin;
|
||||
} // endif Xchk
|
||||
|
||||
if (!CheckMemory(g, initid, args, 2, false, true)) {
|
||||
PJOB jobp;
|
||||
PJVAL jvp;
|
||||
PJSON jsp, top;
|
||||
PJOB jobp;
|
||||
PJVAL jvp;
|
||||
PJSON jsp, top;
|
||||
PGLOBAL gb = GetMemPtr(g, args, 0);
|
||||
|
||||
jvp = MakeValue(g, args, 0, &top);
|
||||
jsp = jvp->GetJson();
|
||||
@@ -2149,9 +2191,9 @@ char *json_object_add(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
PUSH_WARNING(g->Message);
|
||||
else if (jvp && jvp->GetValType() == TYPE_JOB) {
|
||||
jobp = jvp->GetObject();
|
||||
jvp = MakeValue(g, args, 1);
|
||||
key = MakeKey(g, args, 1);
|
||||
jobp->SetValue(g, jvp, key);
|
||||
jvp = MakeValue(gb, args, 1);
|
||||
key = MakeKey(gb, args, 1);
|
||||
jobp->SetValue(gb, jvp, key);
|
||||
str = MakeResult(g, args, top);
|
||||
} else {
|
||||
PUSH_WARNING("First argument target is not an object");
|
||||
@@ -2168,7 +2210,14 @@ char *json_object_add(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
// Keep result of constant function
|
||||
g->Xchk = str;
|
||||
|
||||
*res_length = strlen(str);
|
||||
fin:
|
||||
if (!str) {
|
||||
*is_null = 1;
|
||||
*error = 1;
|
||||
*res_length = 0;
|
||||
} else
|
||||
*res_length = strlen(str);
|
||||
|
||||
return str;
|
||||
} // end of json_object_add
|
||||
|
||||
@@ -2200,7 +2249,7 @@ my_bool json_object_delete_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
} // end of json_object_delete_init
|
||||
|
||||
char *json_object_delete(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
unsigned long *res_length, char *, char *error)
|
||||
unsigned long *res_length, char *is_null, char *error)
|
||||
{
|
||||
char *str = NULL;
|
||||
PGLOBAL g = (PGLOBAL)initid->ptr;
|
||||
@@ -2208,8 +2257,7 @@ char *json_object_delete(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (g->Xchk) {
|
||||
// This constant function was recalled
|
||||
str = (char*)g->Xchk;
|
||||
*res_length = strlen(str);
|
||||
return str;
|
||||
goto fin;
|
||||
} // endif Xchk
|
||||
|
||||
if (!CheckMemory(g, initid, args, 1, false, true)) {
|
||||
@@ -2223,7 +2271,7 @@ char *json_object_delete(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (CheckPath(g, args, jsp, jvp, 2))
|
||||
PUSH_WARNING(g->Message);
|
||||
else if (jvp && jvp->GetValType() == TYPE_JOB) {
|
||||
key = MakeKey(g, args, 1);
|
||||
key = MakeKey(GetMemPtr(g, args, 0), args, 1);
|
||||
jobp = jvp->GetObject();
|
||||
jobp->DeleteKey(key);
|
||||
str = MakeResult(g, args, top);
|
||||
@@ -2242,7 +2290,14 @@ char *json_object_delete(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
// Keep result of constant function
|
||||
g->Xchk = str;
|
||||
|
||||
*res_length = strlen(str);
|
||||
fin:
|
||||
if (!str) {
|
||||
*is_null = 1;
|
||||
*error = 1;
|
||||
*res_length = 0;
|
||||
} else
|
||||
*res_length = strlen(str);
|
||||
|
||||
return str;
|
||||
} // end of json_object_delete
|
||||
|
||||
@@ -2408,7 +2463,7 @@ my_bool json_object_grp_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
unsigned long reslen, memlen, n = GetJsonGrpSize();
|
||||
|
||||
if (args->arg_count != 2) {
|
||||
strcpy(message, "This function requires 2 arguments (value, key)");
|
||||
strcpy(message, "This function requires 2 arguments (key, value)");
|
||||
return true;
|
||||
} else if (IsJson(args, 0) == 3) {
|
||||
strcpy(message, "This function does not support Jbin arguments");
|
||||
@@ -2436,8 +2491,7 @@ void json_object_grp_add(UDF_INIT *initid, UDF_ARGS *args, char*, char*)
|
||||
PJOB objp = (PJOB)g->Activityp;
|
||||
|
||||
if (g->N-- > 0)
|
||||
objp->SetValue(g, MakeValue(g, args, 0),
|
||||
(args->arg_count == 1) ? MakeKey(g, args, 0) : MakePSZ(g, args, 1));
|
||||
objp->SetValue(g, MakeValue(g, args, 1), MakePSZ(g, args, 0));
|
||||
|
||||
} // end of json_object_grp_add
|
||||
|
||||
@@ -2495,7 +2549,7 @@ my_bool json_item_merge_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
} // end of json_item_merge_init
|
||||
|
||||
char *json_item_merge(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
unsigned long *res_length, char *, char *error)
|
||||
unsigned long *res_length, char *is_null, char *error)
|
||||
{
|
||||
char *str = NULL;
|
||||
PGLOBAL g = (PGLOBAL)initid->ptr;
|
||||
@@ -2503,8 +2557,7 @@ char *json_item_merge(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (g->Xchk) {
|
||||
// This constant function was recalled
|
||||
str = (char*)g->Xchk;
|
||||
*res_length = strlen(str);
|
||||
return str;
|
||||
goto fin;
|
||||
} // endif Xchk
|
||||
|
||||
if (!CheckMemory(g, initid, args, 2, false, true)) {
|
||||
@@ -2525,8 +2578,8 @@ char *json_item_merge(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
} // endfor i
|
||||
|
||||
if (jsp[0]) {
|
||||
if (jsp[0]->Merge(g, jsp[1]))
|
||||
PUSH_WARNING(g->Message);
|
||||
if (jsp[0]->Merge(GetMemPtr(g, args, 0), jsp[1]))
|
||||
PUSH_WARNING(GetMemPtr(g, args, 0)->Message);
|
||||
else
|
||||
str = MakeResult(g, args, top);
|
||||
|
||||
@@ -2542,7 +2595,14 @@ char *json_item_merge(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
// Keep result of constant function
|
||||
g->Xchk = str;
|
||||
|
||||
*res_length = strlen(str);
|
||||
fin:
|
||||
if (!str) {
|
||||
*is_null = 1;
|
||||
*error = 1;
|
||||
*res_length = 0;
|
||||
} else
|
||||
*res_length = strlen(str);
|
||||
|
||||
return str;
|
||||
} // end of json_item_merge
|
||||
|
||||
@@ -2571,7 +2631,7 @@ my_bool json_get_item_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
} else
|
||||
CalcLen(args, false, reslen, memlen);
|
||||
|
||||
if (n == 2) {
|
||||
if (n == 2 && args->args[0]) {
|
||||
char fn[_MAX_PATH];
|
||||
long fl;
|
||||
|
||||
@@ -2685,7 +2745,7 @@ my_bool jsonget_string_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
CalcLen(args, false, reslen, memlen);
|
||||
memlen += more;
|
||||
|
||||
if (n == 2) {
|
||||
if (n == 2 && args->args[0]) {
|
||||
char fn[_MAX_PATH];
|
||||
long fl;
|
||||
|
||||
@@ -3445,7 +3505,7 @@ my_bool json_set_item_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
} else
|
||||
CalcLen(args, false, reslen, memlen);
|
||||
|
||||
if (n == 2) {
|
||||
if (n == 2 && args->args[0]) {
|
||||
char fn[_MAX_PATH];
|
||||
long fl;
|
||||
|
||||
@@ -3460,7 +3520,7 @@ my_bool json_set_item_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
} // end of json_set_item_init
|
||||
|
||||
char *json_set_item(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
unsigned long *res_length, char *is_null, char *)
|
||||
unsigned long *res_length, char *is_null, char *error)
|
||||
{
|
||||
int w, rc;
|
||||
my_bool b = true;
|
||||
@@ -3481,10 +3541,11 @@ char *json_set_item(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
w = 0;
|
||||
|
||||
if (!CheckMemory(g, initid, args, 1, false)) {
|
||||
char *p, *path;
|
||||
PJSON jsp;
|
||||
PJSNX jsx;
|
||||
PJVAL jvp;
|
||||
char *p, *path;
|
||||
PJSON jsp;
|
||||
PJSNX jsx;
|
||||
PJVAL jvp;
|
||||
PGLOBAL gb = GetMemPtr(g, args, 0);
|
||||
|
||||
// Save stack and allocation environment and prepare error return
|
||||
if (g->jump_level == MAX_JUMP) {
|
||||
@@ -3522,13 +3583,12 @@ char *json_set_item(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
jsx = new(g)JSNX(g, jsp, TYPE_STRING, initid->max_length, 0, true);
|
||||
|
||||
for (uint i = 1; i+1 < args->arg_count; i += 2) {
|
||||
jvp = MakeValue(g, args, i);
|
||||
jvp = MakeValue(gb, args, i);
|
||||
path = MakePSZ(g, args, i+1);
|
||||
|
||||
if (jsx->SetJpath(g, path, false)) {
|
||||
PUSH_WARNING(g->Message);
|
||||
*is_null = 1;
|
||||
goto err;
|
||||
continue;
|
||||
} // endif SetJpath
|
||||
|
||||
if (w) {
|
||||
@@ -3537,12 +3597,14 @@ char *json_set_item(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
b = (w == 1) ? b : !b;
|
||||
} // endif w
|
||||
|
||||
if (b && jsx->WriteValue(g, jvp))
|
||||
if (b && jsx->WriteValue(gb, jvp))
|
||||
PUSH_WARNING(g->Message);
|
||||
|
||||
} // endfor i
|
||||
|
||||
str = Serialize(g, jsp, NULL, 0);
|
||||
// In case of error or file, return unchanged argument
|
||||
if (!(str = MakeResult(g, args, jsp, INT_MAX32)))
|
||||
str = MakePSZ(g, args, 0);
|
||||
|
||||
if (initid->const_item)
|
||||
// Keep result of constant function
|
||||
@@ -3646,7 +3708,7 @@ my_bool json_file_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
more += fl * M;
|
||||
|
||||
memlen += more;
|
||||
return JsonInit(initid, args, message, false, reslen, memlen);
|
||||
return JsonInit(initid, args, message, true, reslen, memlen);
|
||||
} // end of json_file_init
|
||||
|
||||
char *json_file(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
@@ -3701,7 +3763,8 @@ char *json_file(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
PUSH_WARNING(g->Message);
|
||||
|
||||
} else
|
||||
str = GetJsonFile(g, fn);
|
||||
if (!(str = GetJsonFile(g, fn)))
|
||||
PUSH_WARNING(g->Message);
|
||||
|
||||
if (initid->const_item)
|
||||
// Keep result of constant function
|
||||
@@ -3855,16 +3918,15 @@ char *jbin_array(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
|
||||
if (!bsp || bsp->Changed) {
|
||||
if (!CheckMemory(g, initid, args, args->arg_count, false)) {
|
||||
PJAR arp = new(g)JARRAY;
|
||||
PJAR arp = new(g) JARRAY;
|
||||
|
||||
bsp = JbinAlloc(g, args, initid->max_length, arp);
|
||||
strcat(bsp->Msg, " array");
|
||||
|
||||
for (uint i = 0; i < args->arg_count; i++)
|
||||
arp->AddValue(g, MakeValue(g, args, i));
|
||||
|
||||
arp->InitArray(g);
|
||||
|
||||
if ((bsp = JbinAlloc(g, args, initid->max_length, arp)))
|
||||
strcat(bsp->Msg, " array");
|
||||
|
||||
} else
|
||||
if ((bsp = JbinAlloc(g, args, initid->max_length, NULL)))
|
||||
strncpy(bsp->Msg, g->Message, 139);
|
||||
@@ -3876,6 +3938,7 @@ char *jbin_array(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (!bsp) {
|
||||
*is_null = 1;
|
||||
*error = 1;
|
||||
*res_length = 0;
|
||||
} else
|
||||
*res_length = sizeof(BSON);
|
||||
|
||||
@@ -3903,10 +3966,11 @@ char *jbin_array_add_values(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
|
||||
if (!bsp || bsp->Changed) {
|
||||
if (!CheckMemory(g, initid, args, args->arg_count, false)) {
|
||||
char *p;
|
||||
PJSON top;
|
||||
PJAR arp;
|
||||
PJVAL jvp = MakeValue(g, args, 0, &top);
|
||||
char *p;
|
||||
PJSON top;
|
||||
PJAR arp;
|
||||
PJVAL jvp = MakeValue(g, args, 0, &top);
|
||||
PGLOBAL gb = GetMemPtr(g, args, 0);
|
||||
|
||||
if ((p = jvp->GetString())) {
|
||||
if (!(top = ParseJson(g, p, strlen(p)))) {
|
||||
@@ -3918,15 +3982,15 @@ char *jbin_array_add_values(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
} // endif p
|
||||
|
||||
if (jvp->GetValType() != TYPE_JAR) {
|
||||
arp = new(g)JARRAY;
|
||||
arp->AddValue(g, jvp);
|
||||
arp = new(gb)JARRAY;
|
||||
arp->AddValue(gb, jvp);
|
||||
} else
|
||||
arp = jvp->GetArray();
|
||||
|
||||
for (uint i = 1; i < args->arg_count; i++)
|
||||
arp->AddValue(g, MakeValue(g, args, i));
|
||||
arp->AddValue(gb, MakeValue(gb, args, i));
|
||||
|
||||
arp->InitArray(g);
|
||||
arp->InitArray(gb);
|
||||
|
||||
if ((bsp = JbinAlloc(g, args, initid->max_length, top))) {
|
||||
strcat(bsp->Msg, " array");
|
||||
@@ -3944,6 +4008,7 @@ char *jbin_array_add_values(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (!bsp) {
|
||||
*is_null = 1;
|
||||
*error = 1;
|
||||
*res_length = 0;
|
||||
} else
|
||||
*res_length = sizeof(BSON);
|
||||
|
||||
@@ -3991,9 +4056,11 @@ char *jbin_array_add(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (CheckPath(g, args, top, jvp, n))
|
||||
PUSH_WARNING(g->Message);
|
||||
else if (jvp && jvp->GetValType() == TYPE_JAR) {
|
||||
PGLOBAL gb = GetMemPtr(g, args, 0);
|
||||
|
||||
arp = jvp->GetArray();
|
||||
arp->AddValue(g, MakeValue(g, args, 1), x);
|
||||
arp->InitArray(g);
|
||||
arp->AddValue(gb, MakeValue(gb, args, 1), x);
|
||||
arp->InitArray(gb);
|
||||
} else {
|
||||
PUSH_WARNING("First argument is not an array");
|
||||
// if (g->Mrr) *error = 1; (only if no path)
|
||||
@@ -4056,7 +4123,7 @@ char *jbin_array_delete(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if ((x = GetIntArgPtr(g, args, n))) {
|
||||
arp = jvp->GetArray();
|
||||
arp->DeleteValue(*x);
|
||||
arp->InitArray(g);
|
||||
arp->InitArray(GetMemPtr(g, args, 0));
|
||||
} else
|
||||
PUSH_WARNING("Missing or null array index");
|
||||
|
||||
@@ -4127,6 +4194,7 @@ char *jbin_object(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (!bsp) {
|
||||
*is_null = 1;
|
||||
*error = 1;
|
||||
*res_length = 0;
|
||||
} else
|
||||
*res_length = sizeof(BSON);
|
||||
|
||||
@@ -4178,6 +4246,7 @@ char *jbin_object_nonull(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (!bsp) {
|
||||
*is_null = 1;
|
||||
*error = 1;
|
||||
*res_length = 0;
|
||||
} else
|
||||
*res_length = sizeof(BSON);
|
||||
|
||||
@@ -4232,6 +4301,7 @@ char *jbin_object_key(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (!bsp) {
|
||||
*is_null = 1;
|
||||
*error = 1;
|
||||
*res_length = 0;
|
||||
} else
|
||||
*res_length = sizeof(BSON);
|
||||
|
||||
@@ -4274,10 +4344,12 @@ char *jbin_object_add(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (CheckPath(g, args, jsp, jvp, 2))
|
||||
PUSH_WARNING(g->Message);
|
||||
else if (jvp && jvp->GetValType() == TYPE_JOB) {
|
||||
PGLOBAL gb = GetMemPtr(g, args, 0);
|
||||
|
||||
jobp = jvp->GetObject();
|
||||
jvp = MakeValue(g, args, 1);
|
||||
key = MakeKey(g, args, 1);
|
||||
jobp->SetValue(g, jvp, key);
|
||||
jvp = MakeValue(gb, args, 1);
|
||||
key = MakeKey(gb, args, 1);
|
||||
jobp->SetValue(gb, jvp, key);
|
||||
} else {
|
||||
PUSH_WARNING("First argument target is not an object");
|
||||
// if (g->Mrr) *error = 1; (only if no path)
|
||||
@@ -4419,6 +4491,7 @@ char *jbin_object_list(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
if (!bsp) {
|
||||
*is_null = 1;
|
||||
*error = 1;
|
||||
*res_length = 0;
|
||||
} else
|
||||
*res_length = sizeof(BSON);
|
||||
|
||||
@@ -4479,17 +4552,17 @@ char *jbin_get_item(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
path = MakePSZ(g, args, 1);
|
||||
jsx = new(g) JSNX(g, jsp, TYPE_STRING, initid->max_length);
|
||||
|
||||
if (jsx->SetJpath(g, path, true)) {
|
||||
if (jsx->SetJpath(g, path, false)) {
|
||||
PUSH_WARNING(g->Message);
|
||||
*is_null = 1;
|
||||
return NULL;
|
||||
} // endif SetJpath
|
||||
|
||||
// Get the json tree
|
||||
jvp = jsx->GetValue(g, jsp, 0, false);
|
||||
if ((jvp = jsx->GetRowValue(g, jsp, 0, false))) {
|
||||
jsp = (jvp->GetJsp()) ? jvp->GetJsp() : new(g) JVALUE(g, jvp->GetValue());
|
||||
|
||||
if (jvp && jvp->GetJsp()) {
|
||||
if ((bsp = JbinAlloc(g, args, initid->max_length, jvp->GetJsp())))
|
||||
if ((bsp = JbinAlloc(g, args, initid->max_length, jsp)))
|
||||
strcat(bsp->Msg, " item");
|
||||
else
|
||||
*error = 1;
|
||||
@@ -4539,8 +4612,9 @@ char *jbin_item_merge(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
} // endif bsp
|
||||
|
||||
if (!CheckMemory(g, initid, args, 2, false, true)) {
|
||||
PJVAL jvp;
|
||||
PJSON jsp[2] = {NULL, NULL};
|
||||
PJVAL jvp;
|
||||
PJSON jsp[2] = {NULL, NULL};
|
||||
PGLOBAL gb = GetMemPtr(g, args, 0);
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
jvp = MakeValue(g, args, i);
|
||||
@@ -4554,8 +4628,8 @@ char *jbin_item_merge(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
|
||||
} // endfor i
|
||||
|
||||
if (jsp[0] && jsp[0]->Merge(g, jsp[1]))
|
||||
PUSH_WARNING(g->Message);
|
||||
if (jsp[0] && jsp[0]->Merge(gb, jsp[1]))
|
||||
PUSH_WARNING(gb->Message);
|
||||
|
||||
} // endif CheckMemory
|
||||
|
||||
@@ -4611,10 +4685,11 @@ char *jbin_set_item(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
w = 0;
|
||||
|
||||
if (!CheckMemory(g, initid, args, 1, false)) {
|
||||
char *p, *path;
|
||||
PJSON jsp;
|
||||
PJSNX jsx;
|
||||
PJVAL jvp;
|
||||
char *p, *path;
|
||||
PJSON jsp;
|
||||
PJSNX jsx;
|
||||
PJVAL jvp;
|
||||
PGLOBAL gb = GetMemPtr(g, args, 0);
|
||||
|
||||
if (!g->Xchk) {
|
||||
jvp = MakeValue(g, args, 0);
|
||||
@@ -4639,13 +4714,12 @@ char *jbin_set_item(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
jsx = new(g)JSNX(g, jsp, TYPE_STRING, initid->max_length, 0, true);
|
||||
|
||||
for (uint i = 1; i+1 < args->arg_count; i += 2) {
|
||||
jvp = MakeValue(g, args, i);
|
||||
jvp = MakeValue(gb, args, i);
|
||||
path = MakePSZ(g, args, i+1);
|
||||
|
||||
if (jsx->SetJpath(g, path, false)) {
|
||||
PUSH_WARNING(g->Message);
|
||||
*is_null = 1;
|
||||
return NULL;
|
||||
continue;
|
||||
} // endif SetJpath
|
||||
|
||||
if (w) {
|
||||
@@ -4654,14 +4728,12 @@ char *jbin_set_item(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
b = (w == 1) ? b : !b;
|
||||
} // endif w
|
||||
|
||||
if (b && jsx->WriteValue(g, jvp))
|
||||
if (b && jsx->WriteValue(gb, jvp))
|
||||
PUSH_WARNING(g->Message);
|
||||
|
||||
} // endfor i
|
||||
|
||||
if ((bsp = JbinAlloc(g, args, initid->max_length, jsp)))
|
||||
strcat(bsp->Msg, " item");
|
||||
else
|
||||
if (!(bsp = MakeBinResult(g, args, jsp, initid->max_length, INT_MAX32)))
|
||||
*error = 1;
|
||||
|
||||
if (initid->const_item)
|
||||
@@ -4759,7 +4831,7 @@ my_bool jbin_file_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
||||
reslen += fl;
|
||||
more += fl * M;
|
||||
memlen += more;
|
||||
return JsonInit(initid, args, message, false, reslen, memlen);
|
||||
return JsonInit(initid, args, message, true, reslen, memlen);
|
||||
} // end of jbin_file_init
|
||||
|
||||
char *jbin_file(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
|
||||
@@ -239,7 +239,7 @@ public:
|
||||
my_bool SetJpath(PGLOBAL g, char *path, my_bool jb = false);
|
||||
my_bool ParseJpath(PGLOBAL g);
|
||||
void ReadValue(PGLOBAL g);
|
||||
PJVAL GetValue(PGLOBAL g, PJSON row, int i, my_bool b = true);
|
||||
PJVAL GetRowValue(PGLOBAL g, PJSON row, int i, my_bool b = true);
|
||||
PJVAL GetJson(PGLOBAL g);
|
||||
my_bool CheckPath(PGLOBAL g);
|
||||
my_bool WriteValue(PGLOBAL g, PJVAL jvalp);
|
||||
@@ -288,4 +288,5 @@ protected:
|
||||
my_bool Parsed; // True when parsed
|
||||
my_bool Found; // Item found by locate
|
||||
my_bool Wr; // Write mode
|
||||
my_bool Jb; // Must return json item
|
||||
}; // end of class JSNX
|
||||
|
||||
@@ -89,6 +89,7 @@
|
||||
#if defined(XML_SUPPORT)
|
||||
#include "tabxml.h"
|
||||
#endif // XML_SUPPORT
|
||||
#include "mycat.h"
|
||||
|
||||
/***********************************************************************/
|
||||
/* Extern static variables. */
|
||||
|
||||
@@ -2,11 +2,14 @@ CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=VIR BLOCK_SIZE=5;
|
||||
#
|
||||
# Test UDF's with constant arguments
|
||||
#
|
||||
SELECT JsonValue(56,3.1416,'foo',NULL);
|
||||
SELECT JsonValue(56, 3.1416, 'foo', NULL);
|
||||
ERROR HY000: Can't initialize function 'jsonvalue'; Cannot accept more than 1 argument
|
||||
SELECT JsonValue(3.1416);
|
||||
JsonValue(3.1416)
|
||||
3.141600
|
||||
SELECT JsonValue(-80);
|
||||
JsonValue(-80)
|
||||
-80
|
||||
SELECT JsonValue('foo');
|
||||
JsonValue('foo')
|
||||
"foo"
|
||||
@@ -25,8 +28,8 @@ false
|
||||
SELECT JsonValue();
|
||||
JsonValue()
|
||||
null
|
||||
SELECT JsonValue('[11,22,33]' json_) FROM t1;
|
||||
JsonValue('[11,22,33]' json_)
|
||||
SELECT JsonValue('[11, 22, 33]' json_) FROM t1;
|
||||
JsonValue('[11, 22, 33]' json_)
|
||||
[11,22,33]
|
||||
[11,22,33]
|
||||
[11,22,33]
|
||||
@@ -35,27 +38,29 @@ JsonValue('[11,22,33]' json_)
|
||||
SELECT Json_Array();
|
||||
Json_Array()
|
||||
[]
|
||||
SELECT Json_Array(56,3.1416,'My name is "Foo"',NULL);
|
||||
Json_Array(56,3.1416,'My name is "Foo"',NULL)
|
||||
SELECT Json_Array(56, 3.1416, 'My name is "Foo"', NULL);
|
||||
Json_Array(56, 3.1416, 'My name is "Foo"', NULL)
|
||||
[56,3.141600,"My name is \"Foo\"",null]
|
||||
SELECT Json_Array(Json_Array(56,3.1416,'foo'),NULL);
|
||||
Json_Array(Json_Array(56,3.1416,'foo'),NULL)
|
||||
[[56,3.141600,"foo"],null]
|
||||
SELECT Json_Array_Add(Json_Array(56,3.1416,'foo',NULL)) Array;
|
||||
SELECT Json_Array(Json_Array(56, 3.1416, 'foo'), TRUE);
|
||||
Json_Array(Json_Array(56, 3.1416, 'foo'), TRUE)
|
||||
[[56,3.141600,"foo"],true]
|
||||
SELECT Json_Array_Add(Json_Array(56, 3.1416, 'foo', NULL)) Array;
|
||||
ERROR HY000: Can't initialize function 'json_array_add'; This function must have at least 2 arguments
|
||||
SELECT Json_Array_Add(Json_Array(56,3.1416,'foo',NULL),'One more') Array;
|
||||
SELECT Json_Array_Add(Json_Array(56, 3.1416, 'foo', NULL), 'One more') Array;
|
||||
Array
|
||||
[56,3.141600,"foo",null,"One more"]
|
||||
SELECT Json_Array_Add(JsonValue('one value'),'One more');
|
||||
SELECT Json_Array_Add(JsonValue('one value'), 'One more');
|
||||
ERROR HY000: Can't initialize function 'json_array_add'; First argument must be a json item
|
||||
SELECT Json_Array_Add('one value','One more');
|
||||
SELECT Json_Array_Add('one value', 'One more');
|
||||
ERROR HY000: Can't initialize function 'json_array_add'; First argument must be a json item
|
||||
SELECT Json_Array_Add('one value' json_,'One more');
|
||||
Json_Array_Add('one value' json_,'One more')
|
||||
SELECT Json_Array_Add('one value' json_, 'One more');
|
||||
Json_Array_Add('one value' json_, 'One more')
|
||||
one value
|
||||
Warnings:
|
||||
Warning 1105 Error 2 opening one value
|
||||
Warning 1105 First argument target is not an array
|
||||
SELECT Json_Array_Add(5 json_, 'One more');
|
||||
ERROR HY000: Can't initialize function 'json_array_add'; First argument must be a json item
|
||||
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 0);
|
||||
Json_Array_Add('[5,3,8,7,9]' json_, 4, 0)
|
||||
[4,5,3,8,7,9]
|
||||
@@ -65,6 +70,15 @@ Array
|
||||
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 9);
|
||||
Json_Array_Add('[5,3,8,7,9]' json_, 4, 9)
|
||||
[5,3,8,7,9,4]
|
||||
SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), '[2]', 33, 1);
|
||||
Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), '[2]', 33, 1)
|
||||
[1,2,[11,22],"[2]"]
|
||||
SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, '[2]', 1);
|
||||
Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, '[2]', 1)
|
||||
[1,2,[11,33,22]]
|
||||
SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, 1, '[2]');
|
||||
Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, 1, '[2]')
|
||||
[1,2,[11,33,22]]
|
||||
SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin', NULL), 'One more', 'Two more') Array;
|
||||
Array
|
||||
[56,3.141600,"machin",null,"One more","Two more"]
|
||||
@@ -92,19 +106,24 @@ Array
|
||||
SELECT Json_Array_Add_Values('[56]', 3.1416, 'machin') Array;
|
||||
Array
|
||||
[56,3.141600,"machin"]
|
||||
SELECT Json_Array_Delete(Json_Array(56,3.1416,'My name is "Foo"',NULL),0);
|
||||
Json_Array_Delete(Json_Array(56,3.1416,'My name is "Foo"',NULL),0)
|
||||
SELECT Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), 0);
|
||||
Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), 0)
|
||||
[3.141600,"My name is \"Foo\"",null]
|
||||
SELECT Json_Array_Delete(Json_Object(56,3.1416,'My name is Foo',NULL),2);
|
||||
Json_Array_Delete(Json_Object(56,3.1416,'My name is Foo',NULL),2)
|
||||
SELECT Json_Array_Delete(Json_Object(56, 3.1416, 'My name is Foo', NULL), 2);
|
||||
Json_Array_Delete(Json_Object(56, 3.1416, 'My name is Foo', NULL), 2)
|
||||
{"56":56,"3.1416":3.141600,"My name is Foo":"My name is Foo","NULL":null}
|
||||
Warnings:
|
||||
Warning 1105 First argument target is not an array
|
||||
SELECT Json_Array_Delete(Json_Array(56,3.1416,'My name is "Foo"',NULL),'2');
|
||||
Json_Array_Delete(Json_Array(56,3.1416,'My name is "Foo"',NULL),'2')
|
||||
SELECT Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), '2');
|
||||
Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), '2')
|
||||
[56,3.141600,"My name is \"Foo\"",null]
|
||||
Warnings:
|
||||
Warning 1105 Missing or null array index
|
||||
SELECT Json_Array_Delete(json_array(56, 3.1416, 'My name is "Foo"', NULL), '2', 2);
|
||||
Json_Array_Delete(json_array(56, 3.1416, 'My name is "Foo"', NULL), '2', 2)
|
||||
[56,3.141600,"My name is \"Foo\"",null]
|
||||
Warnings:
|
||||
Warning 1105 No sub-item at '2'
|
||||
SELECT Json_Object(56, 3.1416, 'foo', NULL);
|
||||
Json_Object(56, 3.1416, 'foo', NULL)
|
||||
{"56":56,"3.1416":3.141600,"foo":"foo","NULL":null}
|
||||
@@ -120,19 +139,30 @@ Json_Object(Json_Array(56, 3.1416, 'foo'), NULL)
|
||||
SELECT Json_Array(Json_Object(56 "qty", 3.1416 "price", 'foo') ,NULL);
|
||||
Json_Array(Json_Object(56 "qty", 3.1416 "price", 'foo') ,NULL)
|
||||
[{"qty":56,"price":3.141600,"foo":"foo"},null]
|
||||
SELECT Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'blue' color);
|
||||
Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'blue' color)
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null,"color":"blue"}
|
||||
SELECT Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 45.99 price);
|
||||
Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 45.99 price)
|
||||
{"qty":56,"price":45.990000,"truc":"machin","garanty":null}
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'truc');
|
||||
Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'truc')
|
||||
{"qty":56,"price":3.141600,"garanty":null}
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'chose');
|
||||
Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'chose')
|
||||
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL);
|
||||
Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL)
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null}
|
||||
SELECT Json_Object_List(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty)) "Key List";
|
||||
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty');
|
||||
ERROR HY000: Can't initialize function 'json_object_key'; This function must have an even number of arguments
|
||||
SELECT Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color);
|
||||
Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color)
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null,"color":"blue"}
|
||||
SELECT Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price);
|
||||
Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price)
|
||||
{"qty":56,"price":45.990000,"truc":"machin","garanty":null}
|
||||
SELECT Json_Object_Add(Json_File('notexist.json'), 'cheese' item, '[1]', 1);
|
||||
Json_Object_Add(Json_File('notexist.json'), 'cheese' item, '[1]', 1)
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1105 Error 2 opening notexist.json
|
||||
Warning 1105 First argument target is not an object
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'truc');
|
||||
Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'truc')
|
||||
{"qty":56,"price":3.141600,"garanty":null}
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'chose');
|
||||
Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'chose')
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null}
|
||||
SELECT Json_Object_List(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty)) "Key List";
|
||||
Key List
|
||||
["qty","price","truc","garanty"]
|
||||
SELECT Json_Object_List('{"qty":56, "price":3.1416, "truc":"machin", "garanty":null}') "Key List";
|
||||
@@ -188,6 +218,16 @@ DEPARTMENT Json_Array_Grp(NAME)
|
||||
Warnings:
|
||||
Warning 1105 Result truncated to json_grp_size values
|
||||
SET connect_json_grp_size=30;
|
||||
SELECT Json_Object(title, Json_Array_Grp(name) `json_names`) from t3 GROUP BY title;
|
||||
Json_Object(title, Json_Array_Grp(name) `json_names`)
|
||||
{"title":"ADMINISTRATOR","names":["GOOSEPEN","FUNNIGUY","SHRINKY"]}
|
||||
{"title":"DIRECTOR","names":["QUINN","WERTHER","STRONG"]}
|
||||
{"title":"ENGINEER","names":["BROWNY","ORELLY","MARTIN","TONGHO","WALTER","SMITH"]}
|
||||
{"title":"PROGRAMMER","names":["BUGHAPPY"]}
|
||||
{"title":"SALESMAN","names":["WHEELFOR","MERCHANT","BULLOZER","BANCROFT","FODDERMAN"]}
|
||||
{"title":"SCIENTIST","names":["BIGHEAD","BIGHORN"]}
|
||||
{"title":"SECRETARY","names":["MESSIFUL","HONEY","SHORTSIGHT","CHERRY","MONAPENNY"]}
|
||||
{"title":"TYPIST","names":["KITTY","PLUMHEAD"]}
|
||||
SELECT Json_Array(DEPARTMENT, Json_Array_Grp(NAME)) FROM t3 GROUP BY DEPARTMENT;
|
||||
Json_Array(DEPARTMENT, Json_Array_Grp(NAME))
|
||||
["0021",["STRONG","SHORTSIGHT"]]
|
||||
@@ -227,12 +267,12 @@ Json_Object(DEPARTMENT, TITLE, Json_Array_Grp(Json_Object(SERIALNO, NAME, SALARY
|
||||
{"DEPARTMENT":"2452","TITLE":"SCIENTIST","EMPLOYES":[{"SERIALNO":"34567","NAME":"BIGHEAD","SALARY":8000.000000},{"SERIALNO":"36666","NAME":"BIGHORN","SALARY":11000.000000}]}
|
||||
{"DEPARTMENT":"2452","TITLE":"SECRETARY","EMPLOYES":[{"SERIALNO":"11111","NAME":"CHERRY","SALARY":4500.000000}]}
|
||||
SELECT Json_Object_Grp(SALARY) FROM t3;
|
||||
ERROR HY000: Can't initialize function 'json_object_grp'; This function requires 2 arguments (value, key)
|
||||
SELECT Json_Object_Grp(SALARY, NAME) FROM t3;
|
||||
Json_Object_Grp(SALARY, NAME)
|
||||
ERROR HY000: Can't initialize function 'json_object_grp'; This function requires 2 arguments (key, value)
|
||||
SELECT Json_Object_Grp(NAME, SALARY) FROM t3;
|
||||
Json_Object_Grp(NAME, SALARY)
|
||||
{"BANCROFT":9600.000000,"SMITH":9000.000000,"MERCHANT":8700.000000,"FUNNIGUY":8500.000000,"BUGHAPPY":8500.000000,"BIGHEAD":8000.000000,"SHRINKY":7500.000000,"WALTER":7400.000000,"FODDERMAN":7000.000000,"TONGHO":6800.000000,"SHORTSIGHT":5500.000000,"MESSIFUL":5000.500000,"HONEY":4900.000000,"GOOSEPEN":4700.000000,"CHERRY":4500.000000,"MONAPENNY":3800.000000,"KITTY":3000.450000,"PLUMHEAD":2800.000000,"STRONG":23000.000000,"BULLOZER":14800.000000,"WERTHER":14500.000000,"QUINN":14000.000000,"ORELLY":13400.000000,"BIGHORN":11000.000000,"BROWNY":10500.000000,"WHEELFOR":10030.000000,"MARTIN":10000.000000}
|
||||
SELECT Json_Object(DEPARTMENT, Json_Object_Grp(SALARY, NAME) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT;
|
||||
Json_Object(DEPARTMENT, Json_Object_Grp(SALARY, NAME) "Json_SALARIES")
|
||||
SELECT Json_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT;
|
||||
Json_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES")
|
||||
{"DEPARTMENT":"0021","SALARIES":{"STRONG":23000.000000,"SHORTSIGHT":5500.000000}}
|
||||
{"DEPARTMENT":"0318","SALARIES":{"BANCROFT":9600.000000,"PLUMHEAD":2800.000000,"HONEY":4900.000000,"TONGHO":6800.000000,"WALTER":7400.000000,"SHRINKY":7500.000000,"WERTHER":14500.000000,"MERCHANT":8700.000000,"WHEELFOR":10030.000000}}
|
||||
{"DEPARTMENT":"0319","SALARIES":{"BULLOZER":14800.000000,"QUINN":14000.000000,"BROWNY":10500.000000,"KITTY":3000.450000,"MONAPENNY":3800.000000,"MARTIN":10000.000000,"FUNNIGUY":8500.000000,"BUGHAPPY":8500.000000,"FODDERMAN":7000.000000,"MESSIFUL":5000.500000,"GOOSEPEN":4700.000000}}
|
||||
@@ -240,6 +280,20 @@ Json_Object(DEPARTMENT, Json_Object_Grp(SALARY, NAME) "Json_SALARIES")
|
||||
SELECT Json_Array_Grp(NAME) FROM t3;
|
||||
Json_Array_Grp(NAME)
|
||||
["BANCROFT","SMITH","MERCHANT","FUNNIGUY","BUGHAPPY","BIGHEAD","SHRINKY","WALTER","FODDERMAN","TONGHO","SHORTSIGHT","MESSIFUL","HONEY","GOOSEPEN","CHERRY","MONAPENNY","KITTY","PLUMHEAD","STRONG","BULLOZER","WERTHER","QUINN","ORELLY","BIGHORN","BROWNY","WHEELFOR","MARTIN"]
|
||||
SELECT Json_Object_Key(name, title) FROM t3 WHERE DEPARTMENT = 318;
|
||||
Json_Object_Key(name, title)
|
||||
{"BANCROFT":"SALESMAN"}
|
||||
{"MERCHANT":"SALESMAN"}
|
||||
{"SHRINKY":"ADMINISTRATOR"}
|
||||
{"WALTER":"ENGINEER"}
|
||||
{"TONGHO":"ENGINEER"}
|
||||
{"HONEY":"SECRETARY"}
|
||||
{"PLUMHEAD":"TYPIST"}
|
||||
{"WERTHER":"DIRECTOR"}
|
||||
{"WHEELFOR":"SALESMAN"}
|
||||
SELECT Json_Object_Grp(name, title) FROM t3 WHERE DEPARTMENT = 318;
|
||||
Json_Object_Grp(name, title)
|
||||
{"BANCROFT":"SALESMAN","MERCHANT":"SALESMAN","SHRINKY":"ADMINISTRATOR","WALTER":"ENGINEER","TONGHO":"ENGINEER","HONEY":"SECRETARY","PLUMHEAD":"TYPIST","WERTHER":"DIRECTOR","WHEELFOR":"SALESMAN"}
|
||||
#
|
||||
# Test value getting UDF's
|
||||
#
|
||||
@@ -304,40 +358,40 @@ JsonGet_Int(@j1, '[#]')
|
||||
SELECT JsonGet_Int(@j1, '[+]');
|
||||
JsonGet_Int(@j1, '[+]')
|
||||
243
|
||||
SELECT JsonGet_Int(@j1 json_,'[3]');
|
||||
JsonGet_Int(@j1 json_,'[3]')
|
||||
SELECT JsonGet_Int(@j1 json_, '[3]');
|
||||
JsonGet_Int(@j1 json_, '[3]')
|
||||
45
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89),'[3]');
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89),'[3]')
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '[3]');
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89), '[3]')
|
||||
45
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89),'["+"]');
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89),'["+"]')
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '["+"]');
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89), '["+"]')
|
||||
45
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89),'[+]');
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89),'[+]')
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '[+]');
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89), '[+]')
|
||||
243
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]');
|
||||
JsonGet_Int(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]')
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]');
|
||||
JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]')
|
||||
36
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28),json_array(36,45,89)),'[0]:[1]');
|
||||
JsonGet_Int(Json_Array(json_array(45,28),json_array(36,45,89)),'[0]:[1]')
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[0]:[1]');
|
||||
JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[0]:[1]')
|
||||
28
|
||||
SELECT JsonGet_Int(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'qty');
|
||||
JsonGet_Int(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'qty')
|
||||
SELECT JsonGet_Int(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty');
|
||||
JsonGet_Int(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty')
|
||||
56
|
||||
SELECT JsonGet_Int(@j2 json_,'price');
|
||||
JsonGet_Int(@j2 json_,'price')
|
||||
SELECT JsonGet_Int(@j2 json_, 'price');
|
||||
JsonGet_Int(@j2 json_, 'price')
|
||||
3
|
||||
SELECT JsonGet_Int(@j2,'qty');
|
||||
JsonGet_Int(@j2,'qty')
|
||||
SELECT JsonGet_Int(@j2, 'qty');
|
||||
JsonGet_Int(@j2, 'qty')
|
||||
56
|
||||
SELECT JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','chose');
|
||||
JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','chose')
|
||||
SELECT JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose');
|
||||
JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose')
|
||||
NULL
|
||||
SELECT JsonGet_Int(JsonGet_String(Json_Array(Json_Array(45,28),Json_Array(36,45,89)),'[1]:*'),'[+]') sum;
|
||||
SELECT JsonGet_Int(JsonGet_String(Json_Array(Json_Array(45,28),Json_Array(36,45,89)), '[1]:*'), '[+]') sum;
|
||||
sum
|
||||
170
|
||||
SELECT department, JsonGet_Int(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||
SELECT department, JsonGet_Int(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"), 'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||
department Sumsal
|
||||
0021 28500
|
||||
0318 72230
|
||||
@@ -346,38 +400,38 @@ department Sumsal
|
||||
SELECT JsonGet_Real(@j1, '[2]');
|
||||
JsonGet_Real(@j1, '[2]')
|
||||
36.000000000000000
|
||||
SELECT JsonGet_Real(@j1 json_,'[3]',2);
|
||||
JsonGet_Real(@j1 json_,'[3]',2)
|
||||
SELECT JsonGet_Real(@j1 json_, '[3]', 2);
|
||||
JsonGet_Real(@j1 json_, '[3]', 2)
|
||||
45.00
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'[3]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89),'[3]')
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[3]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89), '[3]')
|
||||
45.000000000000000
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'["+"]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89),'["+"]')
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '["+"]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89), '["+"]')
|
||||
45.000000000000000
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'[+]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89),'[+]')
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[+]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89), '[+]')
|
||||
243.000000000000000
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'[!]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89),'[!]')
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[!]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89), '[!]')
|
||||
48.600000000000000
|
||||
SELECT JsonGet_Real(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]');
|
||||
JsonGet_Real(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]')
|
||||
SELECT JsonGet_Real(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]');
|
||||
JsonGet_Real(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]')
|
||||
36.000000000000000
|
||||
SELECT JsonGet_Real(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'price');
|
||||
JsonGet_Real(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'price')
|
||||
SELECT JsonGet_Real(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price');
|
||||
JsonGet_Real(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price')
|
||||
3.141600000000000
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_,'qty');
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_,'qty')
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_, 'qty');
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_, 'qty')
|
||||
56.000000000000000
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','price');
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','price')
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price');
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price')
|
||||
3.141600000000000
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','price', 4);
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','price', 4)
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price', 4);
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price', 4)
|
||||
3.1416
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','chose');
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','chose')
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose');
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose')
|
||||
NULL
|
||||
SELECT department, JsonGet_Real(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||
department Sumsal
|
||||
@@ -397,12 +451,12 @@ JsonGet_Real(Json_Array(45,28,36,45,89), '[!]', 2) "Avg";
|
||||
Rank Number Concat Sum Avg
|
||||
89 5 45,28,36,45,89 243 48.60
|
||||
SELECT
|
||||
JsonGet_String('{"qty":7,"price":29.50,"garanty":null}','price') "String",
|
||||
JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}','price') "Int",
|
||||
JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}','price') "Real";
|
||||
JsonGet_String('{"qty":7,"price":29.50,"garanty":null}', 'price') "String",
|
||||
JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}', 'price') "Int",
|
||||
JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}', 'price') "Real";
|
||||
String Int Real
|
||||
29.50 29 29.500000000000000
|
||||
SELECT JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}','price',3) "Real";
|
||||
SELECT JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}', 'price', 3) "Real";
|
||||
Real
|
||||
29.500
|
||||
#
|
||||
@@ -511,7 +565,7 @@ Json_Locate_All('test/biblio.json' jfile_, 'Knab')
|
||||
#
|
||||
# Testing json files
|
||||
#
|
||||
select Jfile_Make('[{"_id":5,"type":"food","item":"beer","taste":"light","price":5.65,"ratings":[5,8,9]},
|
||||
SELECT Jfile_Make('[{"_id":5,"type":"food","item":"beer","taste":"light","price":5.65,"ratings":[5,8,9]},
|
||||
{"_id":6,"type":"car","item":"roadster","mileage":56000,"ratings":[6,9]},
|
||||
{"_id":7,"type":"food","item":"meat","origin":"argentina","ratings":[2,4]},
|
||||
{"_id":8,"type":"furniture","item":"table","size":{"W":60,"L":80,"H":40},"ratings":[5,8,7]}]', 'test/fx.json', 0) AS NewFile;
|
||||
|
||||
588
storage/connect/mysql-test/connect/r/json_udf_bin.result
Normal file
588
storage/connect/mysql-test/connect/r/json_udf_bin.result
Normal file
@@ -0,0 +1,588 @@
|
||||
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=VIR BLOCK_SIZE=3;
|
||||
#
|
||||
# Test Jbin UDF's
|
||||
#
|
||||
SELECT Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), n) from t1;
|
||||
Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), n)
|
||||
[56,3.141600,"My name is \"Foo\"",null,1]
|
||||
[56,3.141600,"My name is \"Foo\"",null,2]
|
||||
[56,3.141600,"My name is \"Foo\"",null,3]
|
||||
SELECT Json_Array_Add(Jbin_Array(n, 3.1416, 'My name is "Foo"', NULL), n) from t1;
|
||||
Json_Array_Add(Jbin_Array(n, 3.1416, 'My name is "Foo"', NULL), n)
|
||||
[1,3.141600,"My name is \"Foo\"",null,1]
|
||||
[2,3.141600,"My name is \"Foo\"",null,2]
|
||||
[3,3.141600,"My name is \"Foo\"",null,3]
|
||||
SELECT Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), Jbin_Array('a','b',n)) from t1;
|
||||
Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), Jbin_Array('a','b',n))
|
||||
[56,3.141600,"My name is \"Foo\"",null,["a","b",1]]
|
||||
[56,3.141600,"My name is \"Foo\"",null,["a","b",2]]
|
||||
[56,3.141600,"My name is \"Foo\"",null,["a","b",3]]
|
||||
SELECT Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), JsonGet_String(Jbin_Array('a','b','c'), '[1]'));
|
||||
Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), JsonGet_String(Jbin_Array('a','b','c'), '[1]'))
|
||||
[56,3.141600,"My name is \"Foo\"",null,"b"]
|
||||
SELECT Json_Array_Delete(Jbin_Array_Add_Values(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), "One more", 2), 4);
|
||||
Json_Array_Delete(Jbin_Array_Add_Values(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), "One more", 2), 4)
|
||||
[56,3.141600,"My name is \"Foo\"",null,2]
|
||||
SELECT Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), NULL), '[1]', 1);
|
||||
Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), NULL), '[1]', 1)
|
||||
[56,[3.141600],null]
|
||||
SELECT Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), TRUE), 1, '[1]');
|
||||
Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), TRUE), 1, '[1]')
|
||||
[56,[3.141600],true]
|
||||
SELECT Json_Array(1, TRUE, 0, FALSE);
|
||||
Json_Array(1, TRUE, 0, FALSE)
|
||||
[1,true,0,false]
|
||||
SELECT Json_Serialize(Jbin_Array(TRUE, FALSE));
|
||||
Json_Serialize(Jbin_Array(TRUE, FALSE))
|
||||
[true,false]
|
||||
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL);
|
||||
Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL)
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null}
|
||||
SELECT Json_Serialize(Jbin_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL));
|
||||
Json_Serialize(Jbin_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL))
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null}
|
||||
SELECT Jbin_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty');
|
||||
ERROR HY000: Can't initialize function 'jbin_object_key'; This function must have an even number of arguments
|
||||
SELECT Json_Object_Add(Jbin_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color);
|
||||
Json_Object_Add(Jbin_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color)
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null,"color":"blue"}
|
||||
SELECT Json_Object_Add(Jbin_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price);
|
||||
Json_Object_Add(Jbin_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price)
|
||||
{"qty":56,"price":45.990000,"truc":"machin","garanty":null}
|
||||
SELECT Json_Object_Add(Jbin_Object_Nonull(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color);
|
||||
Json_Object_Add(Jbin_Object_Nonull(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color)
|
||||
{"qty":56,"price":3.141600,"truc":"machin","color":"blue"}
|
||||
SELECT Json_Object_Add(Jbin_Object_Nonull(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price);
|
||||
Json_Object_Add(Jbin_Object_Nonull(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price)
|
||||
{"qty":56,"price":45.990000,"truc":"machin"}
|
||||
#
|
||||
# Test Jbin file UDF's
|
||||
#
|
||||
SELECT Json_Serialize(Jbin_File('gloss.json'));
|
||||
Json_Serialize(Jbin_File('gloss.json'))
|
||||
{"glossary":{"title":"example glossary","GlossDiv":{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}}}
|
||||
SELECT JsonLocate(Jbin_File('gloss.json'),'XML');
|
||||
JsonLocate(Jbin_File('gloss.json'),'XML')
|
||||
glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso:[1]
|
||||
SELECT Json_Object_Key('first', 'foo', 'second', Jbin_Array('a', 33));
|
||||
Json_Object_Key('first', 'foo', 'second', Jbin_Array('a', 33))
|
||||
{"first":"foo","second":["a",33]}
|
||||
SELECT Json_Get_Item(Json_Array('a','b','c'), '[1]');
|
||||
Json_Get_Item(Json_Array('a','b','c'), '[1]')
|
||||
NULL
|
||||
SELECT Json_Get_Item(Json_Object('foo' AS "first", Json_Array('a', 33) AS "json_second"), 'second') AS "item";
|
||||
item
|
||||
["a",33]
|
||||
SELECT Json_Get_Item(Jbin_Object('foo' first, Jbin_Array('a', 33) jbin_second), 'second:*') item;
|
||||
item
|
||||
["a",33]
|
||||
SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv');
|
||||
Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv')
|
||||
{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}
|
||||
SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv'));
|
||||
Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv'))
|
||||
{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}
|
||||
SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:*');
|
||||
Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:*')
|
||||
{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}
|
||||
SELECT JsonGet_String(Json_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso') lang;
|
||||
lang
|
||||
GML
|
||||
SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso') "See also";
|
||||
See also
|
||||
["GML","XML"]
|
||||
SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso')) "See also";
|
||||
See also
|
||||
["GML","XML"]
|
||||
SELECT JsonGet_String(Json_Get_Item(Json_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso'),'[0]') lang;
|
||||
lang
|
||||
GML
|
||||
#
|
||||
# Test Item Get/Set/Insert/Update UDF's
|
||||
#
|
||||
SELECT Json_Get_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[]');
|
||||
Json_Get_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[]')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
SELECT Json_Get_Item(Jbin_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[1]');
|
||||
Json_Get_Item(Jbin_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[1]')
|
||||
NULL
|
||||
SELECT Json_Get_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '[1]');
|
||||
Json_Get_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '[1]')
|
||||
NULL
|
||||
SELECT Json_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)));
|
||||
Json_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)))
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 'foo');
|
||||
ERROR HY000: Can't initialize function 'json_set_item'; This function must have an odd number of arguments
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq')
|
||||
[1,2,{"trois":3,"quatre":4,"cinq":5}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 7, '[1]');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 7, '[1]')
|
||||
[1,7,{"trois":3,"quatre":4}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 7, '[1]');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 7, '[1]')
|
||||
[1,7,{"trois":3,"quatre":4,"cinq":5}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Json_Array(7, 8, 9), '[1]');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Json_Array(7, 8, 9), '[1]')
|
||||
[1,[7,8,9],{"trois":3,"quatre":4}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]')
|
||||
[1,2,[7,8,9]]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]:*');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]:*')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
Warnings:
|
||||
Warning 1105 Invalid specification * in a write path
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 3.1416, 'foo');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 3.1416, 'foo')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 'toto', '[1]:[2]');
|
||||
Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 'toto', '[1]:[2]')
|
||||
[1,[7,8,"toto"],{"trois":3,"quatre":4}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 300, '[2]:nxt:total:[]');
|
||||
Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 300, '[2]:nxt:total:[]')
|
||||
[1,[7,8,9],{"trois":3,"quatre":4,"nxt":{"total":[300]}}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 300, '[2]:nxt:total:[]');
|
||||
Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 300, '[2]:nxt:total:[]')
|
||||
[1,[7,8,9,10],{"trois":3,"quatre":4,"cinq":5,"nxt":{"total":[300]}}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[1]', 5, '[2]:cinq', 10, '[1]:[]');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[1]', 5, '[2]:cinq', 10, '[1]:[]')
|
||||
[1,[7,8,9,10],{"trois":3,"quatre":4,"cinq":5}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 44, '[2]:quatre');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 44, '[2]:quatre')
|
||||
[1,2,{"trois":3,"quatre":44}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, 'truc');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, 'truc')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '')
|
||||
[1,2,{"trois":3,"quatre":4},5]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '*');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '*')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
Warnings:
|
||||
Warning 1105 Invalid specification * in a write path
|
||||
SELECT Json_Serialize(Jbin_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq'));
|
||||
Json_Serialize(Jbin_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq'))
|
||||
[1,2,{"trois":3,"quatre":4,"cinq":5}]
|
||||
SELECT Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq');
|
||||
Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq')
|
||||
[1,2,{"trois":3,"quatre":4,"cinq":5}]
|
||||
SELECT Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq');
|
||||
Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
SELECT Json_Insert_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre');
|
||||
Json_Insert_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre')
|
||||
[1,[7,8,9,10],{"trois":3,"quatre":4,"cinq":5}]
|
||||
SELECT Json_Update_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre');
|
||||
Json_Update_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre')
|
||||
[1,[7,8,9],{"trois":3,"quatre":44}]
|
||||
SELECT Json_Insert_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]');
|
||||
Json_Insert_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]')
|
||||
[1,[7,8,9],{"trois":3,"quatre":4,"cinq":5,"nxt":{"total":[300]}}]
|
||||
SELECT Json_Update_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]');
|
||||
Json_Update_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]')
|
||||
[1,[7,10,9],{"trois":3,"quatre":4}]
|
||||
SELECT Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]');
|
||||
Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]')
|
||||
[1,2,{"trois":3,"quatre":4},5]
|
||||
SELECT Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]');
|
||||
Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
#
|
||||
# Test merging items UDF's
|
||||
#
|
||||
SELECT Json_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f'));
|
||||
Json_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f'))
|
||||
["a","b","c","d","e","f"]
|
||||
SELECT Json_Item_Merge(Json_Array('a','b','c'), Json_Array('d','e','f')) AS "Result";
|
||||
Result
|
||||
["a","b","c","d","e","f"]
|
||||
SELECT Json_Array_Add(Jbin_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f')), 'and', 3);
|
||||
Json_Array_Add(Jbin_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f')), 'and', 3)
|
||||
["a","b","c","and","d","e","f"]
|
||||
SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f"));
|
||||
Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f"))
|
||||
{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6}
|
||||
SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",2 "c"), Jbin_Array('d','e','f'));
|
||||
Json_Item_Merge(Jbin_Object(1 "a",2 "b",2 "c"), Jbin_Array('d','e','f'))
|
||||
Binary Json object
|
||||
Warnings:
|
||||
Warning 1105 Second argument is not an object
|
||||
SELECT Json_Object_Add(Jbin_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f")), 'x' AS "and");
|
||||
Json_Object_Add(Jbin_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f")), 'x' AS "and")
|
||||
{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"and":"x"}
|
||||
SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "a",5 "e",6 "f"));
|
||||
Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "a",5 "e",6 "f"))
|
||||
{"a":4,"b":2,"c":3,"e":5,"f":6}
|
||||
SELECT Json_Item_Merge('foo', Json_Array('d','e','f'));
|
||||
ERROR HY000: Can't initialize function 'json_item_merge'; First argument must be a json item
|
||||
#
|
||||
# Test making file UDF's
|
||||
#
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
SELECT Json_File('bt1.json');
|
||||
Json_File('bt1.json')
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c"
|
||||
]
|
||||
|
||||
SELECT Json_File(Jfile_Make(Jbin_File('bt1.json'), 0));
|
||||
Json_File(Jfile_Make(Jbin_File('bt1.json'), 0))
|
||||
"a"
|
||||
"b"
|
||||
"c"
|
||||
|
||||
SELECT Json_File(Jfile_Make(Jbin_File('bt1.json'), 1));
|
||||
Json_File(Jfile_Make(Jbin_File('bt1.json'), 1))
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c"
|
||||
]
|
||||
|
||||
SELECT Json_File(Jfile_Make(Jbin_File('bt1.json'), 2));
|
||||
Json_File(Jfile_Make(Jbin_File('bt1.json'), 2))
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c"
|
||||
]
|
||||
|
||||
SELECT Json_File('bt1.json', 0);
|
||||
Json_File('bt1.json', 0)
|
||||
["a","b","c"]
|
||||
Warnings:
|
||||
Warning 1105 File pretty format doesn't match the specified pretty value
|
||||
SELECT Json_File('bt1.json', 1);
|
||||
Json_File('bt1.json', 1)
|
||||
["a","b","c"]
|
||||
Warnings:
|
||||
Warning 1105 File pretty format doesn't match the specified pretty value
|
||||
SELECT Json_File('bt1.json', 2);
|
||||
Json_File('bt1.json', 2)
|
||||
["a","b","c"]
|
||||
SELECT Json_Serialize(Jbin_Array('a','b','c'));
|
||||
Json_Serialize(Jbin_Array('a','b','c'))
|
||||
["a","b","c"]
|
||||
SELECT Json_Serialize(Jbin_Array_Add(Jbin_File('not_exist.json'), 'd'));
|
||||
Json_Serialize(Jbin_Array_Add(Jbin_File('not_exist.json'), 'd'))
|
||||
Null json tree
|
||||
Warnings:
|
||||
Warning 1105 Open(map) error 2 on not_exist.json
|
||||
Warning 1105 First argument is not an array
|
||||
# This does not modify the file
|
||||
SELECT Json_Serialize(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'));
|
||||
Json_Serialize(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'))
|
||||
["a","b","c","d"]
|
||||
SELECT Json_File('bt1.json', 2);
|
||||
Json_File('bt1.json', 2)
|
||||
["a","b","c"]
|
||||
# This does modify the file
|
||||
SELECT Json_Array_Add(Jbin_File('bt1.json'), 'd');
|
||||
Json_Array_Add(Jbin_File('bt1.json'), 'd')
|
||||
bt1.json
|
||||
SELECT Json_File('bt1.json', 2);
|
||||
Json_File('bt1.json', 2)
|
||||
["a","b","c","d"]
|
||||
# Back to the original file
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_Array('a','b','c'), 'd') "Jbin_foo") AS "Result";
|
||||
Result
|
||||
{"foo":["a","b","c","d"]}
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd')) AS "Result";
|
||||
Result
|
||||
{"Array_Add(Jbin_File('bt1.json'), 'd')":["a","b","c","d"]}
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1") AS "Result";
|
||||
Result
|
||||
{"bt1":["a","b","c","d"]}
|
||||
# This does modify the file
|
||||
SELECT Json_Object(Json_Array_Add(Jbin_File('bt1.json'), 'd') "Jfile_bt1") AS "Result";
|
||||
Result
|
||||
{"bt1":["a","b","c","d"]}
|
||||
SELECT Json_File('bt1.json');
|
||||
Json_File('bt1.json')
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d"
|
||||
]
|
||||
|
||||
SELECT Json_File(Json_Array_Delete(Jbin_File('bt1.json'), 3), 2);
|
||||
Json_File(Json_Array_Delete(Jbin_File('bt1.json'), 3), 2)
|
||||
["a","b","c"]
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1", n "t1") AS "Result" from t1;
|
||||
Result
|
||||
{"bt1":["a","b","c","d"],"t1":1}
|
||||
{"bt1":["a","b","c","d"],"t1":2}
|
||||
{"bt1":["a","b","c","d"],"t1":3}
|
||||
SELECT Json_File(Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), 'e')) AS "Result";
|
||||
Result
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e"
|
||||
]
|
||||
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
SELECT Json_File(Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), 'e')) AS "Result" from t1;
|
||||
Result
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e"
|
||||
]
|
||||
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e"
|
||||
]
|
||||
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e"
|
||||
]
|
||||
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
SELECT Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), n) AS "Result" from t1;
|
||||
Result
|
||||
bt1.json
|
||||
bt1.json
|
||||
bt1.json
|
||||
# Show modified file
|
||||
SELECT Json_File('bt1.json');
|
||||
Json_File('bt1.json')
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
1,
|
||||
"d",
|
||||
2,
|
||||
"d",
|
||||
3
|
||||
]
|
||||
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
SELECT Json_Array_Add(Jbin_File('bt1.json'), n) AS "Result" from t1;
|
||||
Result
|
||||
bt1.json
|
||||
bt1.json
|
||||
bt1.json
|
||||
# Show modified file
|
||||
SELECT Json_File('bt1.json');
|
||||
Json_File('bt1.json')
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
1,
|
||||
2,
|
||||
3
|
||||
]
|
||||
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
SELECT Json_File(Jbin_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f')));
|
||||
Json_File(Jbin_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f')))
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c"
|
||||
]
|
||||
|
||||
SELECT Json_File(Json_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f')));
|
||||
Json_File(Json_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f')))
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e",
|
||||
"f"
|
||||
]
|
||||
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
# Test DELETE from file
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 1)) AS "Result";
|
||||
Result
|
||||
{"Array_Delete(Jbin_File('bt1.json'), 1)":["a","c"]}
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 2) "Jbin_bt1") AS "Result";
|
||||
Result
|
||||
{"bt1":["a","b"]}
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 0) "Jbin_bt1", n "t1") AS "Result" from t1;
|
||||
Result
|
||||
{"bt1":["b","c"],"t1":1}
|
||||
{"bt1":["b","c"],"t1":2}
|
||||
{"bt1":["b","c"],"t1":3}
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1;
|
||||
Result
|
||||
{"bt1":["a","b"]}
|
||||
{"bt1":["a"]}
|
||||
{"bt1":[]}
|
||||
SELECT Json_Object(Json_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1;
|
||||
Result
|
||||
{"bt1":["a","b"]}
|
||||
{"bt1":["a"]}
|
||||
{"bt1":[]}
|
||||
# Show modified file
|
||||
SELECT Json_File('bt1.json');
|
||||
Json_File('bt1.json')
|
||||
[
|
||||
|
||||
]
|
||||
|
||||
# Object file
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0)
|
||||
bt2.json
|
||||
SELECT Json_File('bt2.json', 0);
|
||||
Json_File('bt2.json', 0)
|
||||
{"a":1,"b":2,"c":3}
|
||||
SELECT Json_File('bt2.json');
|
||||
Json_File('bt2.json')
|
||||
{"a":1,"b":2,"c":3}
|
||||
|
||||
SELECT Json_Serialize(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"));
|
||||
Json_Serialize(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"))
|
||||
{"a":1,"b":2,"c":3,"d":4}
|
||||
# First query (file not modified)
|
||||
SELECT Json_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jbin_new") AS "Result";
|
||||
Result
|
||||
{"new":{"a":1,"b":2,"c":3,"d":4}}
|
||||
# First query (file modified)
|
||||
SELECT Json_Object(Json_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jfile_new") AS "Result";
|
||||
Result
|
||||
{"new":{"a":1,"b":2,"c":3,"d":4}}
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0)
|
||||
bt2.json
|
||||
SELECT Json_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d") "Jbin_new", n "t1") AS "Result" from t1;
|
||||
Result
|
||||
{"new":{"a":1,"b":2,"c":3,"d":4},"t1":1}
|
||||
{"new":{"a":1,"b":2,"c":3,"d":4},"t1":2}
|
||||
{"new":{"a":1,"b":2,"c":3,"d":4},"t1":3}
|
||||
SELECT Json_File(Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), 5 "e")) AS "Result";
|
||||
Result
|
||||
{"a":1,"b":2,"c":3,"d":4,"e":5}
|
||||
|
||||
SELECT Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), 5 "e") AS "Result" from t1;
|
||||
Result
|
||||
bt2.json
|
||||
bt2.json
|
||||
bt2.json
|
||||
SELECT Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), n "n") AS "Result" from t1;
|
||||
Result
|
||||
bt2.json
|
||||
bt2.json
|
||||
bt2.json
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0)
|
||||
bt2.json
|
||||
SELECT Json_Object_Add(Jbin_File('bt2.json'), n) AS "Result" from t1;
|
||||
Result
|
||||
bt2.json
|
||||
bt2.json
|
||||
bt2.json
|
||||
SELECT Json_File('bt2.json');
|
||||
Json_File('bt2.json')
|
||||
{"a":1,"b":2,"c":3,"n":3}
|
||||
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0)
|
||||
bt2.json
|
||||
SELECT Json_Serialize(Jbin_Item_Merge(Jbin_File('bt2.json'), Jbin_Object(4 "d",5 "e",6 "f"))) AS "Result";
|
||||
Result
|
||||
{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6}
|
||||
SELECT Json_File(Json_Item_Merge(Jbin_File('bt2.json'), Jbin_Object(4 "d",5 "e",6 "f"))) AS "Result";
|
||||
Result
|
||||
{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6}
|
||||
|
||||
SELECT Json_Item_Merge(Json_Object(1 "a", 2 "b", 3 "c"), Json_Object(4 "d",5 "b",6 "f")) AS "Result";
|
||||
Result
|
||||
{"a":1,"b":5,"c":3,"d":4,"f":6}
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'b')) AS "Result";
|
||||
Result
|
||||
{"Object_Delete(Jbin_File('bt2.json'), 'b')":{"a":1,"c":3,"d":4,"e":5,"f":6}}
|
||||
SELECT Json_Object(Jbin_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result";
|
||||
Result
|
||||
{"bt1":{"a":1,"d":4,"e":5,"f":6}}
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result";
|
||||
Result
|
||||
{"bt1":{"a":1,"d":4,"e":5,"f":6}}
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jfile_bt1") AS "Result";
|
||||
Result
|
||||
{"bt1":{"a":1,"d":4,"e":5,"f":6}}
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'a') "Jbin_bt1", n "t1") AS "Result" from t1;
|
||||
Result
|
||||
{"bt1":{"d":4,"e":5,"f":6},"t1":1}
|
||||
{"bt1":{"d":4,"e":5,"f":6},"t1":2}
|
||||
{"bt1":{"d":4,"e":5,"f":6},"t1":3}
|
||||
SELECT Json_Serialize(Jbin_Object_List(Jbin_File('bt2.json'))) "Key list";
|
||||
Key list
|
||||
["d","e","f"]
|
||||
SELECT Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0);
|
||||
Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0)
|
||||
bt3.json
|
||||
SELECT Json_Array_Add(Json_File('bt3.json', 'b'), 66);
|
||||
Json_Array_Add(Json_File('bt3.json', 'b'), 66)
|
||||
[44,55,66]
|
||||
SELECT Json_Array_Add(Json_File('bt3.json'), 66, 'b');
|
||||
Json_Array_Add(Json_File('bt3.json'), 66, 'b')
|
||||
{"a":1,"b":[44,55,66]}
|
||||
SELECT Json_Array_Add(Jbin_File('bt3.json', 'b'), 66);
|
||||
Json_Array_Add(Jbin_File('bt3.json', 'b'), 66)
|
||||
bt3.json
|
||||
SELECT Json_File('bt3.json', 3);
|
||||
Json_File('bt3.json', 3)
|
||||
{"a":1,"b":[44,55,66]}
|
||||
SELECT Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0);
|
||||
Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0)
|
||||
bt3.json
|
||||
CREATE TABLE t2 (
|
||||
n INT KEY,
|
||||
jfile_cols CHAR(12) NOT NULL)
|
||||
ENGINE= MYISAM;
|
||||
INSERT INTO t2 VALUES(1,'bt3.json');
|
||||
# In this table, the jfile_cols column just contains a file name
|
||||
UPDATE t2 SET jfile_cols = Json_Array_Add(Jbin_File('bt3.json', 'b'), 66) WHERE n = 1;
|
||||
SELECT JsonGet_String(jfile_cols, '*') FROM t2;
|
||||
JsonGet_String(jfile_cols, '*')
|
||||
{"a":1,"b":[44,55,66]}
|
||||
UPDATE t2 SET jfile_cols = Json_Insert_Item(jfile_cols, 77, 'b:[]') WHERE n = 1;
|
||||
SELECT JsonGet_String(jfile_cols, 'b:*') FROM t2;
|
||||
JsonGet_String(jfile_cols, 'b:*')
|
||||
[44,55,66,77]
|
||||
UPDATE t2 SET jfile_cols = Json_Insert_Item(Jbin_Insert_Item(jfile_cols, 88, 'b:') , 99, 'b:') WHERE n = 1;
|
||||
SELECT JsonGet_String(jfile_cols, '*') FROM t2;
|
||||
JsonGet_String(jfile_cols, '*')
|
||||
{"a":1,"b":[44,55,66,77,88,99]}
|
||||
DROP TABLE t1, t2;
|
||||
22
storage/connect/mysql-test/connect/std_data/gloss.json
Normal file
22
storage/connect/mysql-test/connect/std_data/gloss.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"glossary": {
|
||||
"title": "example glossary",
|
||||
"GlossDiv": {
|
||||
"title": "S",
|
||||
"GlossList": {
|
||||
"GlossEntry": {
|
||||
"ID": "SGML",
|
||||
"SortAs": "SGML",
|
||||
"GlossTerm": "Standard Generalized Markup Language",
|
||||
"Acronym": "SGML",
|
||||
"Abbrev": "ISO 8879:1986",
|
||||
"GlossDef": {
|
||||
"para": "A meta-markup language, used to create markup languages such as DocBook.",
|
||||
"GlossSeeAlso": ["GML", "XML"]
|
||||
},
|
||||
"GlossSee": "markup"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ if (!$HA_CONNECT_SO) {
|
||||
--eval CREATE FUNCTION json_array_delete RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_object RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_object_nonull RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_object_key RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_object_add RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_object_delete RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_object_list RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsonvalue RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE AGGREGATE FUNCTION json_array_grp RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE AGGREGATE FUNCTION json_object_grp RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_item_merge RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_get_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsonget_string RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsonget_int RETURNS INTEGER SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsonget_real RETURNS REAL SONAME '$HA_CONNECT_SO';
|
||||
@@ -30,6 +29,13 @@ if (!$HA_CONNECT_SO) {
|
||||
--eval CREATE FUNCTION json_locate_all RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_file RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jfile_make RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsoncontains RETURNS INTEGER SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsoncontains_path RETURNS INTEGER SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_get_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_set_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_insert_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_update_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_item_merge RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_serialize RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_array RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_array_add_values RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
@@ -37,11 +43,15 @@ if (!$HA_CONNECT_SO) {
|
||||
--eval CREATE FUNCTION jbin_array_delete RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_object RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_object_nonull RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_object_key RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_object_add RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_object_delete RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_object_list RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_get_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_item_merge RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_set_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_insert_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_update_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_file RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
|
||||
--enable_query_log
|
||||
|
||||
@@ -11,50 +11,66 @@ CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=VIR BLOCK_SIZE=5;
|
||||
--echo # Test UDF's with constant arguments
|
||||
--echo #
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT JsonValue(56,3.1416,'foo',NULL);
|
||||
SELECT JsonValue(56, 3.1416, 'foo', NULL);
|
||||
SELECT JsonValue(3.1416);
|
||||
SELECT JsonValue(-80);
|
||||
SELECT JsonValue('foo');
|
||||
SELECT JsonValue(9223372036854775807);
|
||||
SELECT JsonValue(NULL);
|
||||
SELECT JsonValue(TRUE);
|
||||
SELECT JsonValue(FALSE);
|
||||
SELECT JsonValue();
|
||||
SELECT JsonValue('[11,22,33]' json_) FROM t1;
|
||||
SELECT JsonValue('[11, 22, 33]' json_) FROM t1;
|
||||
#
|
||||
SELECT Json_Array();
|
||||
SELECT Json_Array(56,3.1416,'My name is "Foo"',NULL);
|
||||
SELECT Json_Array(Json_Array(56,3.1416,'foo'),NULL);
|
||||
SELECT Json_Array(56, 3.1416, 'My name is "Foo"', NULL);
|
||||
SELECT Json_Array(Json_Array(56, 3.1416, 'foo'), TRUE);
|
||||
#
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Array_Add(Json_Array(56,3.1416,'foo',NULL)) Array;
|
||||
SELECT Json_Array_Add(Json_Array(56,3.1416,'foo',NULL),'One more') Array;
|
||||
SELECT Json_Array_Add(Json_Array(56, 3.1416, 'foo', NULL)) Array;
|
||||
SELECT Json_Array_Add(Json_Array(56, 3.1416, 'foo', NULL), 'One more') Array;
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Array_Add(JsonValue('one value'),'One more');
|
||||
SELECT Json_Array_Add(JsonValue('one value'), 'One more');
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Array_Add('one value','One more');
|
||||
SELECT Json_Array_Add('one value' json_,'One more');
|
||||
SELECT Json_Array_Add('one value', 'One more');
|
||||
SELECT Json_Array_Add('one value' json_, 'One more');
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Array_Add(5 json_, 'One more');
|
||||
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 0);
|
||||
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 2) Array;
|
||||
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 9);
|
||||
SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), '[2]', 33, 1);
|
||||
SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, '[2]', 1);
|
||||
SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, 1, '[2]');
|
||||
#
|
||||
SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin', NULL), 'One more', 'Two more') Array;
|
||||
SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin'), 'One more', 'Two more') Array FROM t1;
|
||||
SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin'), n) Array FROM t1;
|
||||
SELECT Json_Array_Add_Values(Json_Array(n, 3.1416, 'machin'), n) Array FROM t1;
|
||||
SELECT Json_Array_Add_Values('[56]', 3.1416, 'machin') Array;
|
||||
#
|
||||
SELECT Json_Array_Delete(Json_Array(56,3.1416,'My name is "Foo"',NULL),0);
|
||||
SELECT Json_Array_Delete(Json_Object(56,3.1416,'My name is Foo',NULL),2);
|
||||
SELECT Json_Array_Delete(Json_Array(56,3.1416,'My name is "Foo"',NULL),'2');
|
||||
SELECT Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), 0);
|
||||
SELECT Json_Array_Delete(Json_Object(56, 3.1416, 'My name is Foo', NULL), 2);
|
||||
SELECT Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), '2');
|
||||
SELECT Json_Array_Delete(json_array(56, 3.1416, 'My name is "Foo"', NULL), '2', 2);
|
||||
#
|
||||
SELECT Json_Object(56, 3.1416, 'foo', NULL);
|
||||
SELECT Json_Object(56 qty, 3.1416 price, 'foo' truc, NULL garanty);
|
||||
SELECT Json_Object();
|
||||
SELECT Json_Object(Json_Array(56, 3.1416, 'foo'), NULL);
|
||||
SELECT Json_Array(Json_Object(56 "qty", 3.1416 "price", 'foo') ,NULL);
|
||||
SELECT Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'blue' color);
|
||||
SELECT Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 45.99 price);
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'truc');
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'chose');
|
||||
SELECT Json_Object_List(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty)) "Key List";
|
||||
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL);
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty');
|
||||
#
|
||||
SELECT Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color);
|
||||
SELECT Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price);
|
||||
SELECT Json_Object_Add(Json_File('notexist.json'), 'cheese' item, '[1]', 1);
|
||||
#
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'truc');
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'chose');
|
||||
#
|
||||
SELECT Json_Object_List(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty)) "Key List";
|
||||
SELECT Json_Object_List('{"qty":56, "price":3.1416, "truc":"machin", "garanty":null}') "Key List";
|
||||
|
||||
--echo #
|
||||
@@ -93,15 +109,19 @@ CREATE TABLE t3 (
|
||||
SELECT Json_Object(SERIALNO, NAME, TITLE, SALARY) FROM t3 WHERE NAME = 'MERCHANT';
|
||||
SELECT DEPARTMENT, Json_Array_Grp(NAME) FROM t3 GROUP BY DEPARTMENT;
|
||||
SET connect_json_grp_size=30;
|
||||
SELECT Json_Object(title, Json_Array_Grp(name) `json_names`) from t3 GROUP BY title;
|
||||
SELECT Json_Array(DEPARTMENT, Json_Array_Grp(NAME)) FROM t3 GROUP BY DEPARTMENT;
|
||||
SELECT Json_Object(DEPARTMENT, Json_Array_Grp(NAME) json_NAMES) FROM t3 GROUP BY DEPARTMENT;
|
||||
SELECT Json_Object(DEPARTMENT, Json_Array_Grp(Json_Object(SERIALNO, NAME, TITLE, SALARY)) json_EMPLOYES) FROM t3 GROUP BY DEPARTMENT;
|
||||
SELECT Json_Object(DEPARTMENT, TITLE, Json_Array_Grp(Json_Object(SERIALNO, NAME, SALARY)) json_EMPLOYES) FROM t3 GROUP BY DEPARTMENT, TITLE;
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Object_Grp(SALARY) FROM t3;
|
||||
SELECT Json_Object_Grp(SALARY, NAME) FROM t3;
|
||||
SELECT Json_Object(DEPARTMENT, Json_Object_Grp(SALARY, NAME) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT;
|
||||
SELECT Json_Object_Grp(NAME, SALARY) FROM t3;
|
||||
SELECT Json_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT;
|
||||
SELECT Json_Array_Grp(NAME) FROM t3;
|
||||
#
|
||||
SELECT Json_Object_Key(name, title) FROM t3 WHERE DEPARTMENT = 318;
|
||||
SELECT Json_Object_Grp(name, title) FROM t3 WHERE DEPARTMENT = 318;
|
||||
|
||||
--echo #
|
||||
--echo # Test value getting UDF's
|
||||
@@ -127,31 +147,31 @@ SELECT department, JsonGet_String(Json_Object(department, Json_Array_Grp(salary)
|
||||
SELECT JsonGet_Int(@j1, '[4]');
|
||||
SELECT JsonGet_Int(@j1, '[#]');
|
||||
SELECT JsonGet_Int(@j1, '[+]');
|
||||
SELECT JsonGet_Int(@j1 json_,'[3]');
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89),'[3]');
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89),'["+"]');
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89),'[+]');
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]');
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28),json_array(36,45,89)),'[0]:[1]');
|
||||
SELECT JsonGet_Int(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'qty');
|
||||
SELECT JsonGet_Int(@j2 json_,'price');
|
||||
SELECT JsonGet_Int(@j2,'qty');
|
||||
SELECT JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','chose');
|
||||
SELECT JsonGet_Int(JsonGet_String(Json_Array(Json_Array(45,28),Json_Array(36,45,89)),'[1]:*'),'[+]') sum;
|
||||
SELECT department, JsonGet_Int(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||
SELECT JsonGet_Int(@j1 json_, '[3]');
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '[3]');
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '["+"]');
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '[+]');
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]');
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[0]:[1]');
|
||||
SELECT JsonGet_Int(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty');
|
||||
SELECT JsonGet_Int(@j2 json_, 'price');
|
||||
SELECT JsonGet_Int(@j2, 'qty');
|
||||
SELECT JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose');
|
||||
SELECT JsonGet_Int(JsonGet_String(Json_Array(Json_Array(45,28),Json_Array(36,45,89)), '[1]:*'), '[+]') sum;
|
||||
SELECT department, JsonGet_Int(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"), 'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||
#
|
||||
SELECT JsonGet_Real(@j1, '[2]');
|
||||
SELECT JsonGet_Real(@j1 json_,'[3]',2);
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'[3]');
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'["+"]');
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'[+]');
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'[!]');
|
||||
SELECT JsonGet_Real(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]');
|
||||
SELECT JsonGet_Real(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'price');
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_,'qty');
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','price');
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','price', 4);
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','chose');
|
||||
SELECT JsonGet_Real(@j1 json_, '[3]', 2);
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[3]');
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '["+"]');
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[+]');
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[!]');
|
||||
SELECT JsonGet_Real(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]');
|
||||
SELECT JsonGet_Real(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price');
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_, 'qty');
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price');
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price', 4);
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose');
|
||||
SELECT department, JsonGet_Real(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||
|
||||
--echo #
|
||||
@@ -164,10 +184,10 @@ SELECT
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89), '[+]') "Sum",
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89), '[!]', 2) "Avg";
|
||||
SELECT
|
||||
JsonGet_String('{"qty":7,"price":29.50,"garanty":null}','price') "String",
|
||||
JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}','price') "Int",
|
||||
JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}','price') "Real";
|
||||
SELECT JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}','price',3) "Real";
|
||||
JsonGet_String('{"qty":7,"price":29.50,"garanty":null}', 'price') "String",
|
||||
JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}', 'price') "Int",
|
||||
JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}', 'price') "Real";
|
||||
SELECT JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}', 'price', 3) "Real";
|
||||
|
||||
--echo #
|
||||
--echo # Testing Locate
|
||||
@@ -206,7 +226,7 @@ SELECT Json_Locate_All('test/biblio.json' jfile_, 'Knab');
|
||||
--echo #
|
||||
--echo # Testing json files
|
||||
--echo #
|
||||
select Jfile_Make('[{"_id":5,"type":"food","item":"beer","taste":"light","price":5.65,"ratings":[5,8,9]},
|
||||
SELECT Jfile_Make('[{"_id":5,"type":"food","item":"beer","taste":"light","price":5.65,"ratings":[5,8,9]},
|
||||
{"_id":6,"type":"car","item":"roadster","mileage":56000,"ratings":[6,9]},
|
||||
{"_id":7,"type":"food","item":"meat","origin":"argentina","ratings":[2,4]},
|
||||
{"_id":8,"type":"furniture","item":"table","size":{"W":60,"L":80,"H":40},"ratings":[5,8,7]}]', 'test/fx.json', 0) AS NewFile;
|
||||
|
||||
@@ -1,38 +1,48 @@
|
||||
--disable_query_log
|
||||
|
||||
DROP FUNCTION jsonvalue;
|
||||
DROP FUNCTION json_array;
|
||||
DROP FUNCTION json_array_add;
|
||||
DROP FUNCTION json_array_add_values;
|
||||
DROP FUNCTION json_array_delete;
|
||||
DROP FUNCTION json_object;
|
||||
DROP FUNCTION json_object_nonull;
|
||||
DROP FUNCTION json_object_key;
|
||||
DROP FUNCTION json_object_add;
|
||||
DROP FUNCTION json_object_delete;
|
||||
DROP FUNCTION json_object_list;
|
||||
DROP FUNCTION jsonvalue;
|
||||
DROP FUNCTION json_array_grp;
|
||||
DROP FUNCTION json_object_grp;
|
||||
DROP FUNCTION json_item_merge;
|
||||
DROP FUNCTION json_get_item;
|
||||
DROP FUNCTION JsonGet_string;
|
||||
DROP FUNCTION JsonGet_int;
|
||||
DROP FUNCTION JsonGet_real;
|
||||
DROP FUNCTION jsonget_string;
|
||||
DROP FUNCTION jsonget_int;
|
||||
DROP FUNCTION jsonget_real;
|
||||
DROP FUNCTION jsonlocate;
|
||||
DROP FUNCTION json_locate_all;
|
||||
DROP FUNCTION json_file;
|
||||
DROP FUNCTION json_serialize;
|
||||
DROP FUNCTION jfile_make;
|
||||
DROP FUNCTION json_get_item;
|
||||
DROP FUNCTION json_item_merge;
|
||||
DROP FUNCTION jsoncontains;
|
||||
DROP FUNCTION jsoncontains_path;
|
||||
DROP FUNCTION json_set_item;
|
||||
DROP FUNCTION json_insert_item;
|
||||
DROP FUNCTION json_update_item;
|
||||
DROP FUNCTION json_serialize;
|
||||
DROP FUNCTION jbin_array;
|
||||
DROP FUNCTION jbin_array_add_values;
|
||||
DROP FUNCTION jbin_array_add;
|
||||
DROP FUNCTION jbin_array_delete;
|
||||
DROP FUNCTION jbin_object;
|
||||
DROP FUNCTION jbin_object_nonull;
|
||||
DROP FUNCTION jbin_object_key;
|
||||
DROP FUNCTION jbin_object_add;
|
||||
DROP FUNCTION jbin_object_delete;
|
||||
DROP FUNCTION jbin_object_list;
|
||||
DROP FUNCTION jbin_get_item;
|
||||
DROP FUNCTION jbin_item_merge;
|
||||
DROP FUNCTION jbin_set_item;
|
||||
DROP FUNCTION jbin_insert_item;
|
||||
DROP FUNCTION jbin_update_item;
|
||||
DROP FUNCTION jbin_file;
|
||||
|
||||
--enable_query_log
|
||||
|
||||
212
storage/connect/mysql-test/connect/t/json_udf_bin.test
Normal file
212
storage/connect/mysql-test/connect/t/json_udf_bin.test
Normal file
@@ -0,0 +1,212 @@
|
||||
--source json_udf.inc
|
||||
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
|
||||
--copy_file $MTR_SUITE_DIR/std_data/gloss.json $MYSQLD_DATADIR/gloss.json
|
||||
|
||||
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=VIR BLOCK_SIZE=3;
|
||||
|
||||
--echo #
|
||||
--echo # Test Jbin UDF's
|
||||
--echo #
|
||||
SELECT Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), n) from t1;
|
||||
SELECT Json_Array_Add(Jbin_Array(n, 3.1416, 'My name is "Foo"', NULL), n) from t1;
|
||||
SELECT Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), Jbin_Array('a','b',n)) from t1;
|
||||
SELECT Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), JsonGet_String(Jbin_Array('a','b','c'), '[1]'));
|
||||
SELECT Json_Array_Delete(Jbin_Array_Add_Values(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), "One more", 2), 4);
|
||||
SELECT Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), NULL), '[1]', 1);
|
||||
SELECT Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), TRUE), 1, '[1]');
|
||||
SELECT Json_Array(1, TRUE, 0, FALSE);
|
||||
SELECT Json_Serialize(Jbin_Array(TRUE, FALSE));
|
||||
#
|
||||
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL);
|
||||
SELECT Json_Serialize(Jbin_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL));
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Jbin_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty');
|
||||
SELECT Json_Object_Add(Jbin_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color);
|
||||
SELECT Json_Object_Add(Jbin_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price);
|
||||
SELECT Json_Object_Add(Jbin_Object_Nonull(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color);
|
||||
SELECT Json_Object_Add(Jbin_Object_Nonull(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price);
|
||||
|
||||
--echo #
|
||||
--echo # Test Jbin file UDF's
|
||||
--echo #
|
||||
SELECT Json_Serialize(Jbin_File('gloss.json'));
|
||||
SELECT JsonLocate(Jbin_File('gloss.json'),'XML');
|
||||
#
|
||||
SELECT Json_Object_Key('first', 'foo', 'second', Jbin_Array('a', 33));
|
||||
SELECT Json_Get_Item(Json_Array('a','b','c'), '[1]');
|
||||
SELECT Json_Get_Item(Json_Object('foo' AS "first", Json_Array('a', 33) AS "json_second"), 'second') AS "item";
|
||||
SELECT Json_Get_Item(Jbin_Object('foo' first, Jbin_Array('a', 33) jbin_second), 'second:*') item;
|
||||
SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv');
|
||||
SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv'));
|
||||
SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:*');
|
||||
SELECT JsonGet_String(Json_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso') lang;
|
||||
SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso') "See also";
|
||||
SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso')) "See also";
|
||||
SELECT JsonGet_String(Json_Get_Item(Json_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso'),'[0]') lang;
|
||||
|
||||
--echo #
|
||||
--echo # Test Item Get/Set/Insert/Update UDF's
|
||||
--echo #
|
||||
SELECT Json_Get_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[]');
|
||||
SELECT Json_Get_Item(Jbin_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[1]');
|
||||
SELECT Json_Get_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '[1]');
|
||||
#
|
||||
SELECT Json_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)));
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 'foo');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 7, '[1]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 7, '[1]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Json_Array(7, 8, 9), '[1]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]:*');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 3.1416, 'foo');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 'toto', '[1]:[2]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 300, '[2]:nxt:total:[]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 300, '[2]:nxt:total:[]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[1]', 5, '[2]:cinq', 10, '[1]:[]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 44, '[2]:quatre');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, 'truc');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '*');
|
||||
SELECT Json_Serialize(Jbin_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq'));
|
||||
#
|
||||
SELECT Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq');
|
||||
SELECT Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq');
|
||||
SELECT Json_Insert_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre');
|
||||
SELECT Json_Update_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre');
|
||||
SELECT Json_Insert_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]');
|
||||
SELECT Json_Update_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]');
|
||||
SELECT Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]');
|
||||
SELECT Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]');
|
||||
|
||||
--echo #
|
||||
--echo # Test merging items UDF's
|
||||
--echo #
|
||||
SELECT Json_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f'));
|
||||
SELECT Json_Item_Merge(Json_Array('a','b','c'), Json_Array('d','e','f')) AS "Result";
|
||||
SELECT Json_Array_Add(Jbin_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f')), 'and', 3);
|
||||
SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f"));
|
||||
SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",2 "c"), Jbin_Array('d','e','f'));
|
||||
SELECT Json_Object_Add(Jbin_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f")), 'x' AS "and");
|
||||
SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "a",5 "e",6 "f"));
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Item_Merge('foo', Json_Array('d','e','f'));
|
||||
|
||||
--echo #
|
||||
--echo # Test making file UDF's
|
||||
--echo #
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
SELECT Json_File('bt1.json');
|
||||
SELECT Json_File(Jfile_Make(Jbin_File('bt1.json'), 0));
|
||||
SELECT Json_File(Jfile_Make(Jbin_File('bt1.json'), 1));
|
||||
SELECT Json_File(Jfile_Make(Jbin_File('bt1.json'), 2));
|
||||
SELECT Json_File('bt1.json', 0);
|
||||
SELECT Json_File('bt1.json', 1);
|
||||
SELECT Json_File('bt1.json', 2);
|
||||
SELECT Json_Serialize(Jbin_Array('a','b','c'));
|
||||
SELECT Json_Serialize(Jbin_Array_Add(Jbin_File('not_exist.json'), 'd'));
|
||||
--echo # This does not modify the file
|
||||
SELECT Json_Serialize(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'));
|
||||
SELECT Json_File('bt1.json', 2);
|
||||
--echo # This does modify the file
|
||||
SELECT Json_Array_Add(Jbin_File('bt1.json'), 'd');
|
||||
SELECT Json_File('bt1.json', 2);
|
||||
--echo # Back to the original file
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_Array('a','b','c'), 'd') "Jbin_foo") AS "Result";
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd')) AS "Result";
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1") AS "Result";
|
||||
--echo # This does modify the file
|
||||
SELECT Json_Object(Json_Array_Add(Jbin_File('bt1.json'), 'd') "Jfile_bt1") AS "Result";
|
||||
SELECT Json_File('bt1.json');
|
||||
SELECT Json_File(Json_Array_Delete(Jbin_File('bt1.json'), 3), 2);
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1", n "t1") AS "Result" from t1;
|
||||
SELECT Json_File(Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), 'e')) AS "Result";
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
SELECT Json_File(Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), 'e')) AS "Result" from t1;
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
SELECT Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), n) AS "Result" from t1;
|
||||
--echo # Show modified file
|
||||
SELECT Json_File('bt1.json');
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
SELECT Json_Array_Add(Jbin_File('bt1.json'), n) AS "Result" from t1;
|
||||
--echo # Show modified file
|
||||
SELECT Json_File('bt1.json');
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
SELECT Json_File(Jbin_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f')));
|
||||
SELECT Json_File(Json_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f')));
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
--echo # Test DELETE from file
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 1)) AS "Result";
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 2) "Jbin_bt1") AS "Result";
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 0) "Jbin_bt1", n "t1") AS "Result" from t1;
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1;
|
||||
SELECT Json_Object(Json_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1;
|
||||
--echo # Show modified file
|
||||
SELECT Json_File('bt1.json');
|
||||
--echo # Object file
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
SELECT Json_File('bt2.json', 0);
|
||||
SELECT Json_File('bt2.json');
|
||||
SELECT Json_Serialize(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"));
|
||||
--echo # First query (file not modified)
|
||||
SELECT Json_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jbin_new") AS "Result";
|
||||
--echo # First query (file modified)
|
||||
SELECT Json_Object(Json_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jfile_new") AS "Result";
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
SELECT Json_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d") "Jbin_new", n "t1") AS "Result" from t1;
|
||||
SELECT Json_File(Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), 5 "e")) AS "Result";
|
||||
SELECT Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), 5 "e") AS "Result" from t1;
|
||||
SELECT Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), n "n") AS "Result" from t1;
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
SELECT Json_Object_Add(Jbin_File('bt2.json'), n) AS "Result" from t1;
|
||||
SELECT Json_File('bt2.json');
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
SELECT Json_Serialize(Jbin_Item_Merge(Jbin_File('bt2.json'), Jbin_Object(4 "d",5 "e",6 "f"))) AS "Result";
|
||||
SELECT Json_File(Json_Item_Merge(Jbin_File('bt2.json'), Jbin_Object(4 "d",5 "e",6 "f"))) AS "Result";
|
||||
SELECT Json_Item_Merge(Json_Object(1 "a", 2 "b", 3 "c"), Json_Object(4 "d",5 "b",6 "f")) AS "Result";
|
||||
#
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'b')) AS "Result";
|
||||
SELECT Json_Object(Jbin_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result";
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result";
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jfile_bt1") AS "Result";
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'a') "Jbin_bt1", n "t1") AS "Result" from t1;
|
||||
#
|
||||
SELECT Json_Serialize(Jbin_Object_List(Jbin_File('bt2.json'))) "Key list";
|
||||
|
||||
#
|
||||
# Test documentation examples
|
||||
#
|
||||
SELECT Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0);
|
||||
SELECT Json_Array_Add(Json_File('bt3.json', 'b'), 66);
|
||||
SELECT Json_Array_Add(Json_File('bt3.json'), 66, 'b');
|
||||
SELECT Json_Array_Add(Jbin_File('bt3.json', 'b'), 66);
|
||||
SELECT Json_File('bt3.json', 3);
|
||||
SELECT Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0);
|
||||
#
|
||||
CREATE TABLE t2 (
|
||||
n INT KEY,
|
||||
jfile_cols CHAR(12) NOT NULL)
|
||||
ENGINE= MYISAM;
|
||||
INSERT INTO t2 VALUES(1,'bt3.json');
|
||||
--echo # In this table, the jfile_cols column just contains a file name
|
||||
UPDATE t2 SET jfile_cols = Json_Array_Add(Jbin_File('bt3.json', 'b'), 66) WHERE n = 1;
|
||||
SELECT JsonGet_String(jfile_cols, '*') FROM t2;
|
||||
UPDATE t2 SET jfile_cols = Json_Insert_Item(jfile_cols, 77, 'b:[]') WHERE n = 1;
|
||||
SELECT JsonGet_String(jfile_cols, 'b:*') FROM t2;
|
||||
UPDATE t2 SET jfile_cols = Json_Insert_Item(Jbin_Insert_Item(jfile_cols, 88, 'b:') , 99, 'b:') WHERE n = 1;
|
||||
SELECT JsonGet_String(jfile_cols, '*') FROM t2;
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# Clean up
|
||||
#
|
||||
--source json_udf2.inc
|
||||
--remove_file $MYSQLD_DATADIR/gloss.json
|
||||
--remove_file $MYSQLD_DATADIR/bt1.json
|
||||
--remove_file $MYSQLD_DATADIR/bt2.json
|
||||
--remove_file $MYSQLD_DATADIR/bt3.json
|
||||
Reference in New Issue
Block a user