mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
Merge branch 'ob-10.1' into 10.1
This commit is contained in:
@@ -28,8 +28,8 @@ tabvct.cpp tabvir.cpp tabxcl.cpp valblk.cpp value.cpp xindex.cpp xobject.cpp
|
|||||||
|
|
||||||
array.h blkfil.h block.h catalog.h checklvl.h colblk.h connect.h csort.h
|
array.h blkfil.h block.h catalog.h checklvl.h colblk.h connect.h csort.h
|
||||||
engmsg.h filamap.h filamdbf.h filamfix.h filamtxt.h filamvct.h filamzip.h
|
engmsg.h filamap.h filamdbf.h filamfix.h filamtxt.h filamvct.h filamzip.h
|
||||||
filter.h global.h ha_connect.h inihandl.h json.h maputil.h msgid.h mycat.h
|
filter.h global.h ha_connect.h inihandl.h json.h jsonudf.h maputil.h msgid.h
|
||||||
myconn.h myutil.h os.h osutil.h plgcnx.h plgdbsem.h preparse.h reldef.h
|
mycat.h myconn.h myutil.h os.h osutil.h plgcnx.h plgdbsem.h preparse.h reldef.h
|
||||||
resource.h tabcol.h tabdos.h tabfix.h tabfmt.h tabjson.h tabmul.h tabmysql.h
|
resource.h tabcol.h tabdos.h tabfix.h tabfmt.h tabjson.h tabmul.h tabmysql.h
|
||||||
taboccur.h tabpivot.h tabsys.h tabtbl.h tabutil.h tabvct.h tabvir.h tabxcl.h
|
taboccur.h tabpivot.h tabsys.h tabtbl.h tabutil.h tabvct.h tabvir.h tabxcl.h
|
||||||
user_connect.h valblk.h value.h xindex.h xobject.h xtable.h)
|
user_connect.h valblk.h value.h xindex.h xobject.h xtable.h)
|
||||||
|
@@ -1404,8 +1404,13 @@ void ZLBFAM::Rewind(void)
|
|||||||
// We must be positioned after the header block
|
// We must be positioned after the header block
|
||||||
if (CurBlk >= 0) { // Nothing to do if no block read yet
|
if (CurBlk >= 0) { // Nothing to do if no block read yet
|
||||||
if (!Optimized) { // If optimized, fseek will be done in ReadBuffer
|
if (!Optimized) { // If optimized, fseek will be done in ReadBuffer
|
||||||
|
size_t st;
|
||||||
|
|
||||||
rewind(Stream);
|
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);
|
fseek(Stream, *Zlenp + sizeof(int), SEEK_SET);
|
||||||
OldBlk = -1;
|
OldBlk = -1;
|
||||||
} // endif Optimized
|
} // endif Optimized
|
||||||
|
@@ -169,9 +169,9 @@
|
|||||||
#define JSONMAX 10 // JSON Default max grp size
|
#define JSONMAX 10 // JSON Default max grp size
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
char version[]= "Version 1.04.0003 October 25, 2015";
|
char version[]= "Version 1.04.0005 November 20, 2015";
|
||||||
#if defined(__WIN__)
|
#if defined(__WIN__)
|
||||||
char compver[]= "Version 1.04.0003 " __DATE__ " " __TIME__;
|
char compver[]= "Version 1.04.0005 " __DATE__ " " __TIME__;
|
||||||
char slash= '\\';
|
char slash= '\\';
|
||||||
#else // !__WIN__
|
#else // !__WIN__
|
||||||
char slash= '/';
|
char slash= '/';
|
||||||
@@ -6274,10 +6274,6 @@ bool ha_connect::FileExists(const char *fn, bool bf)
|
|||||||
int n;
|
int n;
|
||||||
struct stat info;
|
struct stat info;
|
||||||
|
|
||||||
if (check_access(ha_thd(), FILE_ACL, table->s->db.str,
|
|
||||||
NULL, NULL, 0, 0))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
#if defined(__WIN__)
|
#if defined(__WIN__)
|
||||||
s= "\\";
|
s= "\\";
|
||||||
#else // !__WIN__
|
#else // !__WIN__
|
||||||
|
@@ -534,15 +534,27 @@ PVAL ParseNumeric(PGLOBAL g, int& i, STRG& src)
|
|||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
PSZ Serialize(PGLOBAL g, PJSON jsp, char *fn, int pretty)
|
PSZ Serialize(PGLOBAL g, PJSON jsp, char *fn, int pretty)
|
||||||
{
|
{
|
||||||
|
PSZ str = NULL;
|
||||||
bool b = false, err = true;
|
bool b = false, err = true;
|
||||||
JOUT *jp;
|
JOUT *jp;
|
||||||
FILE *fs = NULL;
|
FILE *fs = NULL;
|
||||||
|
|
||||||
g->Message[0] = 0;
|
g->Message[0] = 0;
|
||||||
|
|
||||||
if (!jsp) {
|
// Save stack and allocation environment and prepare error return
|
||||||
|
if (g->jump_level == MAX_JUMP) {
|
||||||
|
strcpy(g->Message, MSG(TOO_MANY_JUMPS));
|
||||||
|
return NULL;
|
||||||
|
} // endif jump_level
|
||||||
|
|
||||||
|
if (setjmp(g->jumper[++g->jump_level])) {
|
||||||
|
str = NULL;
|
||||||
|
goto fin;
|
||||||
|
} // endif jmp
|
||||||
|
|
||||||
|
if (!jsp) {
|
||||||
strcpy(g->Message, "Null json tree");
|
strcpy(g->Message, "Null json tree");
|
||||||
return NULL;
|
goto fin;
|
||||||
} else if (!fn) {
|
} else if (!fn) {
|
||||||
// Serialize to a string
|
// Serialize to a string
|
||||||
jp = new(g) JOUTSTR(g);
|
jp = new(g) JOUTSTR(g);
|
||||||
@@ -552,7 +564,7 @@ PSZ Serialize(PGLOBAL g, PJSON jsp, char *fn, int pretty)
|
|||||||
sprintf(g->Message, MSG(OPEN_MODE_ERROR),
|
sprintf(g->Message, MSG(OPEN_MODE_ERROR),
|
||||||
"w", (int)errno, fn);
|
"w", (int)errno, fn);
|
||||||
strcat(strcat(g->Message, ": "), strerror(errno));
|
strcat(strcat(g->Message, ": "), strerror(errno));
|
||||||
return g->Message;
|
goto fin;;
|
||||||
} else if (pretty >= 2) {
|
} else if (pretty >= 2) {
|
||||||
// Serialize to a pretty file
|
// Serialize to a pretty file
|
||||||
jp = new(g)JOUTPRT(g, fs);
|
jp = new(g)JOUTPRT(g, fs);
|
||||||
@@ -582,20 +594,20 @@ PSZ Serialize(PGLOBAL g, PJSON jsp, char *fn, int pretty)
|
|||||||
if (fs) {
|
if (fs) {
|
||||||
fputs(EL, fs);
|
fputs(EL, fs);
|
||||||
fclose(fs);
|
fclose(fs);
|
||||||
return (err) ? g->Message : NULL;
|
str = (err) ? NULL : "Ok";
|
||||||
} else if (!err) {
|
} else if (!err) {
|
||||||
PSZ str = ((JOUTSTR*)jp)->Strp;
|
str = ((JOUTSTR*)jp)->Strp;
|
||||||
|
|
||||||
jp->WriteChr('\0');
|
jp->WriteChr('\0');
|
||||||
PlugSubAlloc(g, NULL, ((JOUTSTR*)jp)->N);
|
PlugSubAlloc(g, NULL, ((JOUTSTR*)jp)->N);
|
||||||
return str;
|
|
||||||
} else {
|
} else {
|
||||||
if (!g->Message[0])
|
if (!g->Message[0])
|
||||||
strcpy(g->Message, "Error in Serialize");
|
strcpy(g->Message, "Error in Serialize");
|
||||||
|
|
||||||
return NULL;
|
|
||||||
} // endif's
|
} // endif's
|
||||||
|
|
||||||
|
fin:
|
||||||
|
g->jump_level--;
|
||||||
|
return str;
|
||||||
} // end of Serialize
|
} // end of Serialize
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
@@ -1096,10 +1108,12 @@ PJVAL JARRAY::AddValue(PGLOBAL g, PJVAL jvp, int *x)
|
|||||||
Last = jvp;
|
Last = jvp;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (Last)
|
if (!First)
|
||||||
Last->Next = jvp;
|
|
||||||
else
|
|
||||||
First = jvp;
|
First = jvp;
|
||||||
|
else if (Last == First)
|
||||||
|
First->Next = Last = jvp;
|
||||||
|
else
|
||||||
|
Last->Next = jvp;
|
||||||
|
|
||||||
Last = jvp;
|
Last = jvp;
|
||||||
} // endif x
|
} // endif x
|
||||||
@@ -1282,6 +1296,18 @@ PSZ JVALUE::GetText(PGLOBAL g, PSZ text)
|
|||||||
return text;
|
return text;
|
||||||
} // end of GetText
|
} // end of GetText
|
||||||
|
|
||||||
|
void JVALUE::SetValue(PJSON jsp)
|
||||||
|
{
|
||||||
|
if (jsp && jsp->GetType() == TYPE_JVAL) {
|
||||||
|
Jsp = jsp->GetJsp();
|
||||||
|
Value = jsp->GetValue();
|
||||||
|
} else {
|
||||||
|
Jsp = jsp;
|
||||||
|
Value = NULL;
|
||||||
|
} // endif Type
|
||||||
|
|
||||||
|
} // end of SetValue;
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* Set the Value's value as the given integer. */
|
/* Set the Value's value as the given integer. */
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
|
@@ -149,7 +149,7 @@ class JSON : public BLOCK {
|
|||||||
virtual JTYP GetType(void) {return TYPE_JSON;}
|
virtual JTYP GetType(void) {return TYPE_JSON;}
|
||||||
virtual JTYP GetValType(void) {X return TYPE_JSON;}
|
virtual JTYP GetValType(void) {X return TYPE_JSON;}
|
||||||
virtual void InitArray(PGLOBAL g) {X}
|
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 PJPR AddPair(PGLOBAL g, PSZ key) {X return NULL;}
|
||||||
virtual PJAR GetKeyList(PGLOBAL g) {X return NULL;}
|
virtual PJAR GetKeyList(PGLOBAL g) {X return NULL;}
|
||||||
virtual PJVAL GetValue(const char *key) {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 void Clear(void) {First = Last = NULL; Size = 0;}
|
||||||
virtual JTYP GetType(void) {return TYPE_JAR;}
|
virtual JTYP GetType(void) {return TYPE_JAR;}
|
||||||
virtual PJAR GetArray(void) {return this;}
|
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 void InitArray(PGLOBAL g);
|
||||||
virtual PJVAL GetValue(int i);
|
virtual PJVAL GetValue(int i);
|
||||||
virtual bool Merge(PGLOBAL g, PJSON jsp);
|
virtual bool Merge(PGLOBAL g, PJSON jsp);
|
||||||
@@ -271,9 +271,9 @@ class JVALUE : public JSON {
|
|||||||
virtual double GetFloat(void);
|
virtual double GetFloat(void);
|
||||||
virtual PSZ GetString(void);
|
virtual PSZ GetString(void);
|
||||||
virtual PSZ GetText(PGLOBAL g, PSZ text);
|
virtual PSZ GetText(PGLOBAL g, PSZ text);
|
||||||
virtual void SetValue(PVAL valp) {Value = valp; Jsp = NULL;}
|
virtual void SetValue(PJSON jsp);
|
||||||
virtual void SetValue(PJSON jsp) {Jsp = jsp; Value = NULL;}
|
virtual void SetValue(PVAL valp) { Value = valp; Jsp = NULL; }
|
||||||
virtual void SetString(PGLOBAL g, PSZ s, short c = 0);
|
virtual void SetString(PGLOBAL g, PSZ s, short c = 0);
|
||||||
virtual void SetInteger(PGLOBAL g, int n);
|
virtual void SetInteger(PGLOBAL g, int n);
|
||||||
virtual void SetBigint(PGLOBAL g, longlong ll);
|
virtual void SetBigint(PGLOBAL g, longlong ll);
|
||||||
virtual void SetFloat(PGLOBAL g, double f);
|
virtual void SetFloat(PGLOBAL g, double f);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -61,6 +61,10 @@ extern "C" {
|
|||||||
DllExport char *json_object_nonull(UDF_EXEC_ARGS);
|
DllExport char *json_object_nonull(UDF_EXEC_ARGS);
|
||||||
DllExport void json_object_nonull_deinit(UDF_INIT*);
|
DllExport void json_object_nonull_deinit(UDF_INIT*);
|
||||||
|
|
||||||
|
DllExport my_bool json_object_key_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
|
DllExport char *json_object_key(UDF_EXEC_ARGS);
|
||||||
|
DllExport void json_object_key_deinit(UDF_INIT*);
|
||||||
|
|
||||||
DllExport my_bool json_object_add_init(UDF_INIT*, UDF_ARGS*, char*);
|
DllExport my_bool json_object_add_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
DllExport char *json_object_add(UDF_EXEC_ARGS);
|
DllExport char *json_object_add(UDF_EXEC_ARGS);
|
||||||
DllExport void json_object_add_deinit(UDF_INIT*);
|
DllExport void json_object_add_deinit(UDF_INIT*);
|
||||||
@@ -105,6 +109,10 @@ extern "C" {
|
|||||||
DllExport double jsonget_real(UDF_INIT*, UDF_ARGS*, char*, char*);
|
DllExport double jsonget_real(UDF_INIT*, UDF_ARGS*, char*, char*);
|
||||||
DllExport void jsonget_real_deinit(UDF_INIT*);
|
DllExport void jsonget_real_deinit(UDF_INIT*);
|
||||||
|
|
||||||
|
DllExport my_bool jsoncontains_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
|
DllExport long long jsoncontains(UDF_EXEC_ARGS);
|
||||||
|
DllExport void jsoncontains_deinit(UDF_INIT*);
|
||||||
|
|
||||||
DllExport my_bool jsonlocate_init(UDF_INIT*, UDF_ARGS*, char*);
|
DllExport my_bool jsonlocate_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
DllExport char *jsonlocate(UDF_EXEC_ARGS);
|
DllExport char *jsonlocate(UDF_EXEC_ARGS);
|
||||||
DllExport void jsonlocate_deinit(UDF_INIT*);
|
DllExport void jsonlocate_deinit(UDF_INIT*);
|
||||||
@@ -113,6 +121,22 @@ extern "C" {
|
|||||||
DllExport char *json_locate_all(UDF_EXEC_ARGS);
|
DllExport char *json_locate_all(UDF_EXEC_ARGS);
|
||||||
DllExport void json_locate_all_deinit(UDF_INIT*);
|
DllExport void json_locate_all_deinit(UDF_INIT*);
|
||||||
|
|
||||||
|
DllExport my_bool jsoncontains_path_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
|
DllExport long long jsoncontains_path(UDF_EXEC_ARGS);
|
||||||
|
DllExport void jsoncontains_path_deinit(UDF_INIT*);
|
||||||
|
|
||||||
|
DllExport my_bool json_set_item_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
|
DllExport char *json_set_item(UDF_EXEC_ARGS);
|
||||||
|
DllExport void json_set_item_deinit(UDF_INIT*);
|
||||||
|
|
||||||
|
DllExport my_bool json_insert_item_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
|
DllExport char *json_insert_item(UDF_EXEC_ARGS);
|
||||||
|
DllExport void json_insert_item_deinit(UDF_INIT*);
|
||||||
|
|
||||||
|
DllExport my_bool json_update_item_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
|
DllExport char *json_update_item(UDF_EXEC_ARGS);
|
||||||
|
DllExport void json_update_item_deinit(UDF_INIT*);
|
||||||
|
|
||||||
DllExport my_bool json_file_init(UDF_INIT*, UDF_ARGS*, char*);
|
DllExport my_bool json_file_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
DllExport char *json_file(UDF_EXEC_ARGS);
|
DllExport char *json_file(UDF_EXEC_ARGS);
|
||||||
DllExport void json_file_deinit(UDF_INIT*);
|
DllExport void json_file_deinit(UDF_INIT*);
|
||||||
@@ -145,6 +169,10 @@ extern "C" {
|
|||||||
DllExport char *jbin_object_nonull(UDF_EXEC_ARGS);
|
DllExport char *jbin_object_nonull(UDF_EXEC_ARGS);
|
||||||
DllExport void jbin_object_nonull_deinit(UDF_INIT*);
|
DllExport void jbin_object_nonull_deinit(UDF_INIT*);
|
||||||
|
|
||||||
|
DllExport my_bool jbin_object_key_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
|
DllExport char *jbin_object_key(UDF_EXEC_ARGS);
|
||||||
|
DllExport void jbin_object_key_deinit(UDF_INIT*);
|
||||||
|
|
||||||
DllExport my_bool jbin_object_add_init(UDF_INIT*, UDF_ARGS*, char*);
|
DllExport my_bool jbin_object_add_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
DllExport char *jbin_object_add(UDF_EXEC_ARGS);
|
DllExport char *jbin_object_add(UDF_EXEC_ARGS);
|
||||||
DllExport void jbin_object_add_deinit(UDF_INIT*);
|
DllExport void jbin_object_add_deinit(UDF_INIT*);
|
||||||
@@ -165,6 +193,18 @@ extern "C" {
|
|||||||
DllExport char *jbin_item_merge(UDF_EXEC_ARGS);
|
DllExport char *jbin_item_merge(UDF_EXEC_ARGS);
|
||||||
DllExport void jbin_item_merge_deinit(UDF_INIT*);
|
DllExport void jbin_item_merge_deinit(UDF_INIT*);
|
||||||
|
|
||||||
|
DllExport my_bool jbin_set_item_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
|
DllExport char *jbin_set_item(UDF_EXEC_ARGS);
|
||||||
|
DllExport void jbin_set_item_deinit(UDF_INIT*);
|
||||||
|
|
||||||
|
DllExport my_bool jbin_insert_item_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
|
DllExport char *jbin_insert_item(UDF_EXEC_ARGS);
|
||||||
|
DllExport void jbin_insert_item_deinit(UDF_INIT*);
|
||||||
|
|
||||||
|
DllExport my_bool jbin_update_item_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
|
DllExport char *jbin_update_item(UDF_EXEC_ARGS);
|
||||||
|
DllExport void jbin_update_item_deinit(UDF_INIT*);
|
||||||
|
|
||||||
DllExport my_bool jbin_file_init(UDF_INIT*, UDF_ARGS*, char*);
|
DllExport my_bool jbin_file_init(UDF_INIT*, UDF_ARGS*, char*);
|
||||||
DllExport char *jbin_file(UDF_EXEC_ARGS);
|
DllExport char *jbin_file(UDF_EXEC_ARGS);
|
||||||
DllExport void jbin_file_deinit(UDF_INIT*);
|
DllExport void jbin_file_deinit(UDF_INIT*);
|
||||||
@@ -189,7 +229,7 @@ typedef struct _jpn {
|
|||||||
class JSNX : public BLOCK {
|
class JSNX : public BLOCK {
|
||||||
public:
|
public:
|
||||||
// Constructors
|
// Constructors
|
||||||
JSNX(PGLOBAL g, PJSON row, int type, int len = 64, int prec = 0);
|
JSNX(PGLOBAL g, PJSON row, int type, int len = 64, int prec = 0, my_bool wr = false);
|
||||||
|
|
||||||
// Implementation
|
// Implementation
|
||||||
int GetPrecision(void) {return Prec;}
|
int GetPrecision(void) {return Prec;}
|
||||||
@@ -199,8 +239,10 @@ public:
|
|||||||
my_bool SetJpath(PGLOBAL g, char *path, my_bool jb = false);
|
my_bool SetJpath(PGLOBAL g, char *path, my_bool jb = false);
|
||||||
my_bool ParseJpath(PGLOBAL g);
|
my_bool ParseJpath(PGLOBAL g);
|
||||||
void ReadValue(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);
|
PJVAL GetJson(PGLOBAL g);
|
||||||
|
my_bool CheckPath(PGLOBAL g);
|
||||||
|
my_bool WriteValue(PGLOBAL g, PJVAL jvalp);
|
||||||
char *Locate(PGLOBAL g, PJSON jsp, PJVAL jvp, int k = 1);
|
char *Locate(PGLOBAL g, PJSON jsp, PJVAL jvp, int k = 1);
|
||||||
char *LocateAll(PGLOBAL g, PJSON jsp, PJVAL jvp, int mx = 10);
|
char *LocateAll(PGLOBAL g, PJSON jsp, PJVAL jvp, int mx = 10);
|
||||||
|
|
||||||
@@ -211,6 +253,7 @@ protected:
|
|||||||
PVAL CalculateArray(PGLOBAL g, PJAR arp, int n);
|
PVAL CalculateArray(PGLOBAL g, PJAR arp, int n);
|
||||||
PVAL MakeJson(PGLOBAL g, PJSON jsp);
|
PVAL MakeJson(PGLOBAL g, PJSON jsp);
|
||||||
void SetJsonValue(PGLOBAL g, PVAL vp, PJVAL val, int n);
|
void SetJsonValue(PGLOBAL g, PVAL vp, PJVAL val, int n);
|
||||||
|
PJSON GetRow(PGLOBAL g);
|
||||||
my_bool LocateArray(PJAR jarp);
|
my_bool LocateArray(PJAR jarp);
|
||||||
my_bool LocateObject(PJOB jobp);
|
my_bool LocateObject(PJOB jobp);
|
||||||
my_bool LocateValue(PJVAL jvp);
|
my_bool LocateValue(PJVAL jvp);
|
||||||
@@ -244,4 +287,6 @@ protected:
|
|||||||
my_bool Xpd; // True for expandable column
|
my_bool Xpd; // True for expandable column
|
||||||
my_bool Parsed; // True when parsed
|
my_bool Parsed; // True when parsed
|
||||||
my_bool Found; // Item found by locate
|
my_bool Found; // Item found by locate
|
||||||
|
my_bool Wr; // Write mode
|
||||||
|
my_bool Jb; // Must return json item
|
||||||
}; // end of class JSNX
|
}; // end of class JSNX
|
||||||
|
@@ -89,6 +89,7 @@
|
|||||||
#if defined(XML_SUPPORT)
|
#if defined(XML_SUPPORT)
|
||||||
#include "tabxml.h"
|
#include "tabxml.h"
|
||||||
#endif // XML_SUPPORT
|
#endif // XML_SUPPORT
|
||||||
|
#include "mycat.h"
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* Extern static variables. */
|
/* Extern static variables. */
|
||||||
|
@@ -2,11 +2,14 @@ CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=VIR BLOCK_SIZE=5;
|
|||||||
#
|
#
|
||||||
# Test UDF's with constant arguments
|
# 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
|
ERROR HY000: Can't initialize function 'jsonvalue'; Cannot accept more than 1 argument
|
||||||
SELECT JsonValue(3.1416);
|
SELECT JsonValue(3.1416);
|
||||||
JsonValue(3.1416)
|
JsonValue(3.1416)
|
||||||
3.141600
|
3.141600
|
||||||
|
SELECT JsonValue(-80);
|
||||||
|
JsonValue(-80)
|
||||||
|
-80
|
||||||
SELECT JsonValue('foo');
|
SELECT JsonValue('foo');
|
||||||
JsonValue('foo')
|
JsonValue('foo')
|
||||||
"foo"
|
"foo"
|
||||||
@@ -25,8 +28,8 @@ false
|
|||||||
SELECT JsonValue();
|
SELECT JsonValue();
|
||||||
JsonValue()
|
JsonValue()
|
||||||
null
|
null
|
||||||
SELECT JsonValue('[11,22,33]' json_) FROM t1;
|
SELECT JsonValue('[11, 22, 33]' json_) FROM t1;
|
||||||
JsonValue('[11,22,33]' json_)
|
JsonValue('[11, 22, 33]' json_)
|
||||||
[11,22,33]
|
[11,22,33]
|
||||||
[11,22,33]
|
[11,22,33]
|
||||||
[11,22,33]
|
[11,22,33]
|
||||||
@@ -35,27 +38,29 @@ JsonValue('[11,22,33]' json_)
|
|||||||
SELECT Json_Array();
|
SELECT Json_Array();
|
||||||
Json_Array()
|
Json_Array()
|
||||||
[]
|
[]
|
||||||
SELECT 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)
|
Json_Array(56, 3.1416, 'My name is "Foo"', NULL)
|
||||||
[56,3.141600,"My name is \"Foo\"",null]
|
[56,3.141600,"My name is \"Foo\"",null]
|
||||||
SELECT Json_Array(Json_Array(56,3.1416,'foo'),NULL);
|
SELECT Json_Array(Json_Array(56, 3.1416, 'foo'), TRUE);
|
||||||
Json_Array(Json_Array(56,3.1416,'foo'),NULL)
|
Json_Array(Json_Array(56, 3.1416, 'foo'), TRUE)
|
||||||
[[56,3.141600,"foo"],null]
|
[[56,3.141600,"foo"],true]
|
||||||
SELECT Json_Array_Add(Json_Array(56,3.1416,'foo',NULL)) Array;
|
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
|
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
|
Array
|
||||||
[56,3.141600,"foo",null,"One more"]
|
[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
|
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
|
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');
|
SELECT Json_Array_Add('one value' json_, 'One more');
|
||||||
Json_Array_Add('one value' json_,'One more')
|
Json_Array_Add('one value' json_, 'One more')
|
||||||
one value
|
one value
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1105 Error 2 opening one value
|
Warning 1105 Error 2 opening one value
|
||||||
Warning 1105 First argument target is not an array
|
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);
|
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 0);
|
||||||
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]
|
[4,5,3,8,7,9]
|
||||||
@@ -65,6 +70,15 @@ Array
|
|||||||
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 9);
|
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 9);
|
||||||
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]
|
[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;
|
SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin', NULL), 'One more', 'Two more') Array;
|
||||||
Array
|
Array
|
||||||
[56,3.141600,"machin",null,"One more","Two more"]
|
[56,3.141600,"machin",null,"One more","Two more"]
|
||||||
@@ -92,19 +106,24 @@ Array
|
|||||||
SELECT Json_Array_Add_Values('[56]', 3.1416, 'machin') Array;
|
SELECT Json_Array_Add_Values('[56]', 3.1416, 'machin') Array;
|
||||||
Array
|
Array
|
||||||
[56,3.141600,"machin"]
|
[56,3.141600,"machin"]
|
||||||
SELECT 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)
|
Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), 0)
|
||||||
[3.141600,"My name is \"Foo\"",null]
|
[3.141600,"My name is \"Foo\"",null]
|
||||||
SELECT 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)
|
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}
|
{"56":56,"3.1416":3.141600,"My name is Foo":"My name is Foo","NULL":null}
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1105 First argument target is not an array
|
Warning 1105 First argument target is not an array
|
||||||
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');
|
||||||
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]
|
[56,3.141600,"My name is \"Foo\"",null]
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1105 Missing or null array index
|
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);
|
SELECT Json_Object(56, 3.1416, 'foo', NULL);
|
||||||
Json_Object(56, 3.1416, 'foo', NULL)
|
Json_Object(56, 3.1416, 'foo', NULL)
|
||||||
{"56":56,"3.1416":3.141600,"foo":"foo","NULL":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);
|
SELECT Json_Array(Json_Object(56 "qty", 3.1416 "price", 'foo') ,NULL);
|
||||||
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]
|
[{"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);
|
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL);
|
||||||
Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'blue' color)
|
Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL)
|
||||||
{"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')
|
|
||||||
{"qty":56,"price":3.141600,"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
|
Key List
|
||||||
["qty","price","truc","garanty"]
|
["qty","price","truc","garanty"]
|
||||||
SELECT Json_Object_List('{"qty":56, "price":3.1416, "truc":"machin", "garanty":null}') "Key List";
|
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:
|
Warnings:
|
||||||
Warning 1105 Result truncated to json_grp_size values
|
Warning 1105 Result truncated to json_grp_size values
|
||||||
SET connect_json_grp_size=30;
|
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;
|
SELECT Json_Array(DEPARTMENT, Json_Array_Grp(NAME)) FROM t3 GROUP BY DEPARTMENT;
|
||||||
Json_Array(DEPARTMENT, Json_Array_Grp(NAME))
|
Json_Array(DEPARTMENT, Json_Array_Grp(NAME))
|
||||||
["0021",["STRONG","SHORTSIGHT"]]
|
["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":"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}]}
|
{"DEPARTMENT":"2452","TITLE":"SECRETARY","EMPLOYES":[{"SERIALNO":"11111","NAME":"CHERRY","SALARY":4500.000000}]}
|
||||||
SELECT Json_Object_Grp(SALARY) FROM t3;
|
SELECT Json_Object_Grp(SALARY) FROM t3;
|
||||||
ERROR HY000: Can't initialize function 'json_object_grp'; This function requires 2 arguments (value, key)
|
ERROR HY000: Can't initialize function 'json_object_grp'; This function requires 2 arguments (key, value)
|
||||||
SELECT Json_Object_Grp(SALARY, NAME) FROM t3;
|
SELECT Json_Object_Grp(NAME, SALARY) FROM t3;
|
||||||
Json_Object_Grp(SALARY, NAME)
|
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}
|
{"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;
|
SELECT Json_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT;
|
||||||
Json_Object(DEPARTMENT, Json_Object_Grp(SALARY, NAME) "Json_SALARIES")
|
Json_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES")
|
||||||
{"DEPARTMENT":"0021","SALARIES":{"STRONG":23000.000000,"SHORTSIGHT":5500.000000}}
|
{"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":"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}}
|
{"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;
|
SELECT Json_Array_Grp(NAME) FROM t3;
|
||||||
Json_Array_Grp(NAME)
|
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"]
|
["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
|
# Test value getting UDF's
|
||||||
#
|
#
|
||||||
@@ -304,42 +358,40 @@ JsonGet_Int(@j1, '[#]')
|
|||||||
SELECT JsonGet_Int(@j1, '[+]');
|
SELECT JsonGet_Int(@j1, '[+]');
|
||||||
JsonGet_Int(@j1, '[+]')
|
JsonGet_Int(@j1, '[+]')
|
||||||
243
|
243
|
||||||
SELECT JsonGet_Int(@j1 json_,'[3]');
|
SELECT JsonGet_Int(@j1 json_, '[3]');
|
||||||
JsonGet_Int(@j1 json_,'[3]')
|
JsonGet_Int(@j1 json_, '[3]')
|
||||||
45
|
45
|
||||||
SELECT 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]')
|
JsonGet_Int(Json_Array(45,28,36,45,89), '[3]')
|
||||||
45
|
45
|
||||||
SELECT 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),'["+"]')
|
JsonGet_Int(Json_Array(45,28,36,45,89), '["+"]')
|
||||||
45
|
45
|
||||||
SELECT 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),'[+]')
|
JsonGet_Int(Json_Array(45,28,36,45,89), '[+]')
|
||||||
243
|
243
|
||||||
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)), '[1]:[0]');
|
||||||
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
|
36
|
||||||
SELECT 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]')
|
JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[0]:[1]')
|
||||||
28
|
28
|
||||||
SELECT 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')
|
JsonGet_Int(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty')
|
||||||
56
|
56
|
||||||
SELECT JsonGet_Int(@j2 json_,'price');
|
SELECT JsonGet_Int(@j2 json_, 'price');
|
||||||
JsonGet_Int(@j2 json_,'price')
|
JsonGet_Int(@j2 json_, 'price')
|
||||||
3
|
3
|
||||||
SELECT JsonGet_Int(@j2,'qty');
|
SELECT JsonGet_Int(@j2, 'qty');
|
||||||
JsonGet_Int(@j2,'qty')
|
JsonGet_Int(@j2, 'qty')
|
||||||
56
|
56
|
||||||
SELECT 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')
|
JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose')
|
||||||
NULL
|
NULL
|
||||||
Warnings:
|
SELECT JsonGet_Int(JsonGet_String(Json_Array(Json_Array(45,28),Json_Array(36,45,89)), '[1]:*'), '[+]') sum;
|
||||||
Warning 1105 Value not found
|
|
||||||
SELECT JsonGet_Int(JsonGet_String(Json_Array(Json_Array(45,28),Json_Array(36,45,89)),'[1]:*'),'[+]') sum;
|
|
||||||
sum
|
sum
|
||||||
170
|
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
|
department Sumsal
|
||||||
0021 28500
|
0021 28500
|
||||||
0318 72230
|
0318 72230
|
||||||
@@ -348,41 +400,39 @@ department Sumsal
|
|||||||
SELECT JsonGet_Real(@j1, '[2]');
|
SELECT JsonGet_Real(@j1, '[2]');
|
||||||
JsonGet_Real(@j1, '[2]')
|
JsonGet_Real(@j1, '[2]')
|
||||||
36.000000000000000
|
36.000000000000000
|
||||||
SELECT JsonGet_Real(@j1 json_,'[3]',2);
|
SELECT JsonGet_Real(@j1 json_, '[3]', 2);
|
||||||
JsonGet_Real(@j1 json_,'[3]',2)
|
JsonGet_Real(@j1 json_, '[3]', 2)
|
||||||
45.00
|
45.00
|
||||||
SELECT 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]')
|
JsonGet_Real(Json_Array(45,28,36,45,89), '[3]')
|
||||||
45.000000000000000
|
45.000000000000000
|
||||||
SELECT 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),'["+"]')
|
JsonGet_Real(Json_Array(45,28,36,45,89), '["+"]')
|
||||||
45.000000000000000
|
45.000000000000000
|
||||||
SELECT 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),'[+]')
|
JsonGet_Real(Json_Array(45,28,36,45,89), '[+]')
|
||||||
243.000000000000000
|
243.000000000000000
|
||||||
SELECT 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),'[!]')
|
JsonGet_Real(Json_Array(45,28,36,45,89), '[!]')
|
||||||
48.600000000000000
|
48.600000000000000
|
||||||
SELECT 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]')
|
JsonGet_Real(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]')
|
||||||
36.000000000000000
|
36.000000000000000
|
||||||
SELECT 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')
|
JsonGet_Real(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price')
|
||||||
3.141600000000000
|
3.141600000000000
|
||||||
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}' json_, 'qty');
|
||||||
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
|
56.000000000000000
|
||||||
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');
|
||||||
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
|
3.141600000000000
|
||||||
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}', 'price', 4);
|
||||||
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
|
3.1416
|
||||||
SELECT 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')
|
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose')
|
||||||
NULL
|
NULL
|
||||||
Warnings:
|
|
||||||
Warning 1105 Value not found
|
|
||||||
SELECT department, JsonGet_Real(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
SELECT department, JsonGet_Real(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||||
department Sumsal
|
department Sumsal
|
||||||
0021 28500.000000000000000
|
0021 28500.000000000000000
|
||||||
@@ -401,12 +451,12 @@ JsonGet_Real(Json_Array(45,28,36,45,89), '[!]', 2) "Avg";
|
|||||||
Rank Number Concat Sum Avg
|
Rank Number Concat Sum Avg
|
||||||
89 5 45,28,36,45,89 243 48.60
|
89 5 45,28,36,45,89 243 48.60
|
||||||
SELECT
|
SELECT
|
||||||
JsonGet_String('{"qty":7,"price":29.50,"garanty":null}','price') "String",
|
JsonGet_String('{"qty":7,"price":29.50,"garanty":null}', 'price') "String",
|
||||||
JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}','price') "Int",
|
JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}', 'price') "Int",
|
||||||
JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}','price') "Real";
|
JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}', 'price') "Real";
|
||||||
String Int Real
|
String Int Real
|
||||||
29.50 29 29.500000000000000
|
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
|
Real
|
||||||
29.500
|
29.500
|
||||||
#
|
#
|
||||||
@@ -515,7 +565,7 @@ Json_Locate_All('test/biblio.json' jfile_, 'Knab')
|
|||||||
#
|
#
|
||||||
# Testing json files
|
# 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":6,"type":"car","item":"roadster","mileage":56000,"ratings":[6,9]},
|
||||||
{"_id":7,"type":"food","item":"meat","origin":"argentina","ratings":[2,4]},
|
{"_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;
|
{"_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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -9,40 +9,50 @@ if (!$HA_CONNECT_SO) {
|
|||||||
--skip Needs a dynamically built ha_connect.so
|
--skip Needs a dynamically built ha_connect.so
|
||||||
}
|
}
|
||||||
|
|
||||||
CREATE FUNCTION json_array RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_array RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_array_add RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_array_add RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_array_add_values RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_array_add_values RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_array_delete RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_array_delete RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_object RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_object RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_object_nonull RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_object_nonull RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_object_add RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_object_key RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_object_delete RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_object_add RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_object_list RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_object_delete RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jsonvalue RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_object_list RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE AGGREGATE FUNCTION json_array_grp RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION jsonvalue RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE AGGREGATE FUNCTION json_object_grp RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE AGGREGATE FUNCTION json_array_grp RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_item_merge RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE AGGREGATE FUNCTION json_object_grp RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_get_item RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION jsonget_string RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jsonget_string RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION jsonget_int RETURNS INTEGER SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jsonget_int RETURNS INTEGER SONAME 'ha_connect';
|
--eval CREATE FUNCTION jsonget_real RETURNS REAL SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jsonget_real RETURNS REAL SONAME 'ha_connect';
|
--eval CREATE FUNCTION jsonlocate RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jsonlocate RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_locate_all RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_locate_all RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_file RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_file RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION jfile_make RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jfile_make RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION jsoncontains RETURNS INTEGER SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION json_serialize RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION jsoncontains_path RETURNS INTEGER SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jbin_array RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_get_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jbin_array_add_values RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_set_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jbin_array_add RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_insert_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jbin_array_delete RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_update_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jbin_object RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_item_merge RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jbin_object_nonull RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION json_serialize RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jbin_object_add RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION jbin_array RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jbin_object_delete RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION jbin_array_add_values RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jbin_object_list RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION jbin_array_add RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jbin_get_item RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION jbin_array_delete RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jbin_item_merge RETURNS STRING SONAME 'ha_connect';
|
--eval CREATE FUNCTION jbin_object RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||||
CREATE FUNCTION jbin_file RETURNS STRING SONAME 'ha_connect';
|
--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
|
--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 # Test UDF's with constant arguments
|
||||||
--echo #
|
--echo #
|
||||||
--error ER_CANT_INITIALIZE_UDF
|
--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(3.1416);
|
||||||
|
SELECT JsonValue(-80);
|
||||||
SELECT JsonValue('foo');
|
SELECT JsonValue('foo');
|
||||||
SELECT JsonValue(9223372036854775807);
|
SELECT JsonValue(9223372036854775807);
|
||||||
SELECT JsonValue(NULL);
|
SELECT JsonValue(NULL);
|
||||||
SELECT JsonValue(TRUE);
|
SELECT JsonValue(TRUE);
|
||||||
SELECT JsonValue(FALSE);
|
SELECT JsonValue(FALSE);
|
||||||
SELECT JsonValue();
|
SELECT JsonValue();
|
||||||
SELECT JsonValue('[11,22,33]' json_) FROM t1;
|
SELECT JsonValue('[11, 22, 33]' json_) FROM t1;
|
||||||
#
|
#
|
||||||
SELECT Json_Array();
|
SELECT Json_Array();
|
||||||
SELECT Json_Array(56,3.1416,'My name is "Foo"',NULL);
|
SELECT Json_Array(56, 3.1416, 'My name is "Foo"', NULL);
|
||||||
SELECT Json_Array(Json_Array(56,3.1416,'foo'),NULL);
|
SELECT Json_Array(Json_Array(56, 3.1416, 'foo'), TRUE);
|
||||||
|
#
|
||||||
--error ER_CANT_INITIALIZE_UDF
|
--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)) 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), 'One more') Array;
|
||||||
--error ER_CANT_INITIALIZE_UDF
|
--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
|
--error ER_CANT_INITIALIZE_UDF
|
||||||
SELECT Json_Array_Add('one value','One more');
|
SELECT Json_Array_Add('one value', 'One more');
|
||||||
SELECT Json_Array_Add('one value' json_,'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, 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, 2) Array;
|
||||||
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 9);
|
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', 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'), '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(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(Json_Array(n, 3.1416, 'machin'), n) Array FROM t1;
|
||||||
SELECT Json_Array_Add_Values('[56]', 3.1416, 'machin') Array;
|
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_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_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');
|
||||||
|
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, 3.1416, 'foo', NULL);
|
||||||
SELECT Json_Object(56 qty, 3.1416 price, 'foo' truc, NULL garanty);
|
SELECT Json_Object(56 qty, 3.1416 price, 'foo' truc, NULL garanty);
|
||||||
SELECT Json_Object();
|
SELECT Json_Object();
|
||||||
SELECT Json_Object(Json_Array(56, 3.1416, 'foo'), NULL);
|
SELECT Json_Object(Json_Array(56, 3.1416, 'foo'), NULL);
|
||||||
SELECT Json_Array(Json_Object(56 "qty", 3.1416 "price", '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_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL);
|
||||||
SELECT Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 45.99 price);
|
--error ER_CANT_INITIALIZE_UDF
|
||||||
SELECT Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'truc');
|
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty');
|
||||||
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_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";
|
SELECT Json_Object_List('{"qty":56, "price":3.1416, "truc":"machin", "garanty":null}') "Key List";
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
@@ -93,15 +109,19 @@ CREATE TABLE t3 (
|
|||||||
SELECT Json_Object(SERIALNO, NAME, TITLE, SALARY) FROM t3 WHERE NAME = 'MERCHANT';
|
SELECT Json_Object(SERIALNO, NAME, TITLE, SALARY) FROM t3 WHERE NAME = 'MERCHANT';
|
||||||
SELECT DEPARTMENT, Json_Array_Grp(NAME) FROM t3 GROUP BY DEPARTMENT;
|
SELECT DEPARTMENT, Json_Array_Grp(NAME) FROM t3 GROUP BY DEPARTMENT;
|
||||||
SET connect_json_grp_size=30;
|
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_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(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, 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;
|
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
|
--error ER_CANT_INITIALIZE_UDF
|
||||||
SELECT Json_Object_Grp(SALARY) FROM t3;
|
SELECT Json_Object_Grp(SALARY) FROM t3;
|
||||||
SELECT Json_Object_Grp(SALARY, NAME) FROM t3;
|
SELECT Json_Object_Grp(NAME, SALARY) FROM t3;
|
||||||
SELECT Json_Object(DEPARTMENT, Json_Object_Grp(SALARY, NAME) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT;
|
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_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 #
|
||||||
--echo # Test value getting UDF's
|
--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, '[4]');
|
||||||
SELECT JsonGet_Int(@j1, '[#]');
|
SELECT JsonGet_Int(@j1, '[#]');
|
||||||
SELECT JsonGet_Int(@j1, '[+]');
|
SELECT JsonGet_Int(@j1, '[+]');
|
||||||
SELECT JsonGet_Int(@j1 json_,'[3]');
|
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), '[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(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)), '[1]:[0]');
|
||||||
SELECT 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]');
|
||||||
SELECT 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');
|
||||||
SELECT JsonGet_Int(@j2 json_,'price');
|
SELECT JsonGet_Int(@j2 json_, 'price');
|
||||||
SELECT JsonGet_Int(@j2,'qty');
|
SELECT JsonGet_Int(@j2, 'qty');
|
||||||
SELECT 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');
|
||||||
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;
|
||||||
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;
|
||||||
#
|
#
|
||||||
SELECT JsonGet_Real(@j1, '[2]');
|
SELECT JsonGet_Real(@j1, '[2]');
|
||||||
SELECT JsonGet_Real(@j1 json_,'[3]',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), '[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(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_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(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}' 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');
|
||||||
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}', 'price', 4);
|
||||||
SELECT 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');
|
||||||
SELECT department, JsonGet_Real(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
SELECT department, JsonGet_Real(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
@@ -164,10 +184,10 @@ SELECT
|
|||||||
JsonGet_Int(Json_Array(45,28,36,45,89), '[+]') "Sum",
|
JsonGet_Int(Json_Array(45,28,36,45,89), '[+]') "Sum",
|
||||||
JsonGet_Real(Json_Array(45,28,36,45,89), '[!]', 2) "Avg";
|
JsonGet_Real(Json_Array(45,28,36,45,89), '[!]', 2) "Avg";
|
||||||
SELECT
|
SELECT
|
||||||
JsonGet_String('{"qty":7,"price":29.50,"garanty":null}','price') "String",
|
JsonGet_String('{"qty":7,"price":29.50,"garanty":null}', 'price') "String",
|
||||||
JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}','price') "Int",
|
JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}', 'price') "Int",
|
||||||
JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}','price') "Real";
|
JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}', 'price') "Real";
|
||||||
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";
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Testing Locate
|
--echo # Testing Locate
|
||||||
@@ -206,7 +226,7 @@ SELECT Json_Locate_All('test/biblio.json' jfile_, 'Knab');
|
|||||||
--echo #
|
--echo #
|
||||||
--echo # Testing json files
|
--echo # Testing json files
|
||||||
--echo #
|
--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":6,"type":"car","item":"roadster","mileage":56000,"ratings":[6,9]},
|
||||||
{"_id":7,"type":"food","item":"meat","origin":"argentina","ratings":[2,4]},
|
{"_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;
|
{"_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
|
--disable_query_log
|
||||||
|
|
||||||
DROP FUNCTION jsonvalue;
|
|
||||||
DROP FUNCTION json_array;
|
DROP FUNCTION json_array;
|
||||||
DROP FUNCTION json_array_add;
|
DROP FUNCTION json_array_add;
|
||||||
DROP FUNCTION json_array_add_values;
|
DROP FUNCTION json_array_add_values;
|
||||||
DROP FUNCTION json_array_delete;
|
DROP FUNCTION json_array_delete;
|
||||||
DROP FUNCTION json_object;
|
DROP FUNCTION json_object;
|
||||||
DROP FUNCTION json_object_nonull;
|
DROP FUNCTION json_object_nonull;
|
||||||
|
DROP FUNCTION json_object_key;
|
||||||
DROP FUNCTION json_object_add;
|
DROP FUNCTION json_object_add;
|
||||||
DROP FUNCTION json_object_delete;
|
DROP FUNCTION json_object_delete;
|
||||||
DROP FUNCTION json_object_list;
|
DROP FUNCTION json_object_list;
|
||||||
|
DROP FUNCTION jsonvalue;
|
||||||
DROP FUNCTION json_array_grp;
|
DROP FUNCTION json_array_grp;
|
||||||
DROP FUNCTION json_object_grp;
|
DROP FUNCTION json_object_grp;
|
||||||
DROP FUNCTION json_item_merge;
|
DROP FUNCTION jsonget_string;
|
||||||
DROP FUNCTION json_get_item;
|
DROP FUNCTION jsonget_int;
|
||||||
DROP FUNCTION JsonGet_string;
|
DROP FUNCTION jsonget_real;
|
||||||
DROP FUNCTION JsonGet_int;
|
|
||||||
DROP FUNCTION JsonGet_real;
|
|
||||||
DROP FUNCTION jsonlocate;
|
DROP FUNCTION jsonlocate;
|
||||||
DROP FUNCTION json_locate_all;
|
DROP FUNCTION json_locate_all;
|
||||||
DROP FUNCTION json_file;
|
DROP FUNCTION json_file;
|
||||||
DROP FUNCTION json_serialize;
|
|
||||||
DROP FUNCTION jfile_make;
|
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;
|
||||||
DROP FUNCTION jbin_array_add_values;
|
DROP FUNCTION jbin_array_add_values;
|
||||||
DROP FUNCTION jbin_array_add;
|
DROP FUNCTION jbin_array_add;
|
||||||
DROP FUNCTION jbin_array_delete;
|
DROP FUNCTION jbin_array_delete;
|
||||||
DROP FUNCTION jbin_object;
|
DROP FUNCTION jbin_object;
|
||||||
DROP FUNCTION jbin_object_nonull;
|
DROP FUNCTION jbin_object_nonull;
|
||||||
|
DROP FUNCTION jbin_object_key;
|
||||||
DROP FUNCTION jbin_object_add;
|
DROP FUNCTION jbin_object_add;
|
||||||
DROP FUNCTION jbin_object_delete;
|
DROP FUNCTION jbin_object_delete;
|
||||||
DROP FUNCTION jbin_object_list;
|
DROP FUNCTION jbin_object_list;
|
||||||
DROP FUNCTION jbin_get_item;
|
DROP FUNCTION jbin_get_item;
|
||||||
DROP FUNCTION jbin_item_merge;
|
DROP FUNCTION jbin_item_merge;
|
||||||
|
DROP FUNCTION jbin_set_item;
|
||||||
|
DROP FUNCTION jbin_insert_item;
|
||||||
|
DROP FUNCTION jbin_update_item;
|
||||||
DROP FUNCTION jbin_file;
|
DROP FUNCTION jbin_file;
|
||||||
|
|
||||||
--enable_query_log
|
--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
|
@@ -38,6 +38,7 @@
|
|||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
#define MAXCOL 200 /* Default max column nb in result */
|
#define MAXCOL 200 /* Default max column nb in result */
|
||||||
#define TYPE_UNKNOWN 12 /* Must be greater than other types */
|
#define TYPE_UNKNOWN 12 /* Must be greater than other types */
|
||||||
|
#define USE_G 1 /* Use recoverable memory if 1 */
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* External function. */
|
/* External function. */
|
||||||
@@ -411,9 +412,23 @@ PTDB JSONDEF::GetTable(PGLOBAL g, MODE m)
|
|||||||
|
|
||||||
// Txfp must be set for TDBDOS
|
// Txfp must be set for TDBDOS
|
||||||
tdbp = new(g) TDBJSN(this, txfp);
|
tdbp = new(g) TDBJSN(this, txfp);
|
||||||
} else {
|
|
||||||
|
#if USE_G
|
||||||
|
// Allocate the parse work memory
|
||||||
|
PGLOBAL G = (PGLOBAL)PlugSubAlloc(g, NULL, sizeof(GLOBAL));
|
||||||
|
memset(G, 0, sizeof(GLOBAL));
|
||||||
|
G->Sarea_Size = Lrecl * 10;
|
||||||
|
G->Sarea = PlugSubAlloc(g, NULL, G->Sarea_Size);
|
||||||
|
PlugSubSet(G, G->Sarea, G->Sarea_Size);
|
||||||
|
G->jump_level = -1;
|
||||||
|
((TDBJSN*)tdbp)->G = G;
|
||||||
|
#else
|
||||||
|
((TDBJSN*)tdbp)->G = g;
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
txfp = new(g) MAPFAM(this);
|
txfp = new(g) MAPFAM(this);
|
||||||
tdbp = new(g) TDBJSON(this, txfp);
|
tdbp = new(g) TDBJSON(this, txfp);
|
||||||
|
((TDBJSON*)tdbp)->G = g;
|
||||||
} // endif Pretty
|
} // endif Pretty
|
||||||
|
|
||||||
if (Multiple)
|
if (Multiple)
|
||||||
@@ -462,6 +477,7 @@ TDBJSN::TDBJSN(PJDEF tdp, PTXF txfp) : TDBDOS(tdp, txfp)
|
|||||||
|
|
||||||
TDBJSN::TDBJSN(TDBJSN *tdbp) : TDBDOS(NULL, tdbp)
|
TDBJSN::TDBJSN(TDBJSN *tdbp) : TDBDOS(NULL, tdbp)
|
||||||
{
|
{
|
||||||
|
G = NULL;
|
||||||
Top = tdbp->Top;
|
Top = tdbp->Top;
|
||||||
Row = tdbp->Row;
|
Row = tdbp->Row;
|
||||||
Val = tdbp->Val;
|
Val = tdbp->Val;
|
||||||
@@ -485,6 +501,7 @@ TDBJSN::TDBJSN(TDBJSN *tdbp) : TDBDOS(NULL, tdbp)
|
|||||||
// Used for update
|
// Used for update
|
||||||
PTDB TDBJSN::CopyOne(PTABS t)
|
PTDB TDBJSN::CopyOne(PTABS t)
|
||||||
{
|
{
|
||||||
|
G = NULL;
|
||||||
PTDB tp;
|
PTDB tp;
|
||||||
PJCOL cp1, cp2;
|
PJCOL cp1, cp2;
|
||||||
PGLOBAL g = t->G;
|
PGLOBAL g = t->G;
|
||||||
@@ -578,7 +595,7 @@ PJSON TDBJSN::FindRow(PGLOBAL g)
|
|||||||
} // end of FindRow
|
} // end of FindRow
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* OpenDB: Data Base open routine for JSN access method. */
|
/* OpenDB: Data Base open routine for JSN access method. */
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
bool TDBJSN::OpenDB(PGLOBAL g)
|
bool TDBJSN::OpenDB(PGLOBAL g)
|
||||||
{
|
{
|
||||||
@@ -603,7 +620,7 @@ bool TDBJSN::OpenDB(PGLOBAL g)
|
|||||||
return true;
|
return true;
|
||||||
} // endswitch Jmode
|
} // endswitch Jmode
|
||||||
|
|
||||||
} // endif Use
|
} // endif Use
|
||||||
|
|
||||||
return TDBDOS::OpenDB(g);
|
return TDBDOS::OpenDB(g);
|
||||||
} // end of OpenDB
|
} // end of OpenDB
|
||||||
@@ -655,19 +672,26 @@ int TDBJSN::ReadDB(PGLOBAL g)
|
|||||||
NextSame = 0;
|
NextSame = 0;
|
||||||
M++;
|
M++;
|
||||||
return RC_OK;
|
return RC_OK;
|
||||||
} else if ((rc = TDBDOS::ReadDB(g)) == RC_OK)
|
} else if ((rc = TDBDOS::ReadDB(g)) == RC_OK) {
|
||||||
if (!IsRead() && ((rc = ReadBuffer(g)) != RC_OK)) {
|
if (!IsRead() && ((rc = ReadBuffer(g)) != RC_OK))
|
||||||
// Deferred reading failed
|
// Deferred reading failed
|
||||||
} else if (!(Row = ParseJson(g, To_Line,
|
return rc;
|
||||||
strlen(To_Line), &Pretty, &Comma))) {
|
|
||||||
rc = (Pretty == 1 && !strcmp(To_Line, "]")) ? RC_EF : RC_FX;
|
#if USE_G
|
||||||
} else {
|
// Recover the memory used for parsing
|
||||||
Row = FindRow(g);
|
PlugSubSet(G, G->Sarea, G->Sarea_Size);
|
||||||
SameRow = 0;
|
#endif
|
||||||
Fpos++;
|
|
||||||
M = 1;
|
if ((Row = ParseJson(G, To_Line, strlen(To_Line), &Pretty, &Comma))) {
|
||||||
rc = RC_OK;
|
Row = FindRow(g);
|
||||||
} // endif's
|
SameRow = 0;
|
||||||
|
Fpos++;
|
||||||
|
M = 1;
|
||||||
|
rc = RC_OK;
|
||||||
|
} else
|
||||||
|
rc = (Pretty == 1 && !strcmp(To_Line, "]")) ? RC_EF : RC_FX;
|
||||||
|
|
||||||
|
} // endif ReadDB
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
} // end of ReadDB
|
} // end of ReadDB
|
||||||
@@ -744,7 +768,7 @@ int TDBJSN::MakeTopTree(PGLOBAL g, PJSON jsp)
|
|||||||
if (MakeTopTree(g, Row))
|
if (MakeTopTree(g, Row))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if ((s = Serialize(g, Top, NULL, Pretty))) {
|
if ((s = Serialize(G, Top, NULL, Pretty))) {
|
||||||
if (Comma)
|
if (Comma)
|
||||||
strcat(s, ",");
|
strcat(s, ",");
|
||||||
|
|
||||||
@@ -761,15 +785,30 @@ int TDBJSN::MakeTopTree(PGLOBAL g, PJSON jsp)
|
|||||||
|
|
||||||
} // end of PrepareWriting
|
} // end of PrepareWriting
|
||||||
|
|
||||||
/* ---------------------------- JSONCOL ------------------------------ */
|
/***********************************************************************/
|
||||||
|
/* WriteDB: Data Base write routine for DOS access method. */
|
||||||
|
/***********************************************************************/
|
||||||
|
int TDBJSN::WriteDB(PGLOBAL g)
|
||||||
|
{
|
||||||
|
int rc = TDBDOS::WriteDB(g);
|
||||||
|
|
||||||
|
#if USE_G
|
||||||
|
PlugSubSet(G, G->Sarea, G->Sarea_Size);
|
||||||
|
#endif
|
||||||
|
Row->Clear();
|
||||||
|
return rc;
|
||||||
|
} // end of WriteDB
|
||||||
|
|
||||||
|
/* ---------------------------- JSONCOL ------------------------------ */
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* JSONCOL public constructor. */
|
/* JSONCOL public constructor. */
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
JSONCOL::JSONCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i)
|
JSONCOL::JSONCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i)
|
||||||
: DOSCOL(g, cdp, tdbp, cprec, i, "DOS")
|
: DOSCOL(g, cdp, tdbp, cprec, i, "DOS")
|
||||||
{
|
{
|
||||||
Tjp = (TDBJSN *)(tdbp->GetOrig() ? tdbp->GetOrig() : tdbp);
|
Tjp = (TDBJSN *)(tdbp->GetOrig() ? tdbp->GetOrig() : tdbp);
|
||||||
|
G = Tjp->G;
|
||||||
Jpath = cdp->GetFmt();
|
Jpath = cdp->GetFmt();
|
||||||
MulVal = NULL;
|
MulVal = NULL;
|
||||||
Nodes = NULL;
|
Nodes = NULL;
|
||||||
@@ -777,14 +816,15 @@ JSONCOL::JSONCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i)
|
|||||||
Xnod = -1;
|
Xnod = -1;
|
||||||
Xpd = false;
|
Xpd = false;
|
||||||
Parsed = false;
|
Parsed = false;
|
||||||
} // end of JSONCOL constructor
|
} // end of JSONCOL constructor
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* JSONCOL constructor used for copying columns. */
|
/* JSONCOL constructor used for copying columns. */
|
||||||
/* tdbp is the pointer to the new table descriptor. */
|
/* tdbp is the pointer to the new table descriptor. */
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
JSONCOL::JSONCOL(JSONCOL *col1, PTDB tdbp) : DOSCOL(col1, tdbp)
|
JSONCOL::JSONCOL(JSONCOL *col1, PTDB tdbp) : DOSCOL(col1, tdbp)
|
||||||
{
|
{
|
||||||
|
G = col1->G;
|
||||||
Tjp = col1->Tjp;
|
Tjp = col1->Tjp;
|
||||||
Jpath = col1->Jpath;
|
Jpath = col1->Jpath;
|
||||||
MulVal = col1->MulVal;
|
MulVal = col1->MulVal;
|
||||||
@@ -793,7 +833,7 @@ JSONCOL::JSONCOL(JSONCOL *col1, PTDB tdbp) : DOSCOL(col1, tdbp)
|
|||||||
Xnod = col1->Xnod;
|
Xnod = col1->Xnod;
|
||||||
Xpd = col1->Xpd;
|
Xpd = col1->Xpd;
|
||||||
Parsed = col1->Parsed;
|
Parsed = col1->Parsed;
|
||||||
} // end of JSONCOL copy constructor
|
} // end of JSONCOL copy constructor
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* SetBuffer: prepare a column block for write operation. */
|
/* SetBuffer: prepare a column block for write operation. */
|
||||||
@@ -808,6 +848,7 @@ bool JSONCOL::SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check)
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
Tjp = (TDBJSN*)To_Tdb;
|
Tjp = (TDBJSN*)To_Tdb;
|
||||||
|
G = Tjp->G;
|
||||||
return false;
|
return false;
|
||||||
} // end of SetBuffer
|
} // end of SetBuffer
|
||||||
|
|
||||||
@@ -1103,15 +1144,15 @@ PVAL JSONCOL::GetColumnValue(PGLOBAL g, PJSON row, int i)
|
|||||||
Value->SetValue(row->GetType() == TYPE_JAR ? row->size() : 1);
|
Value->SetValue(row->GetType() == TYPE_JAR ? row->size() : 1);
|
||||||
return(Value);
|
return(Value);
|
||||||
} else if (Nodes[i].Op == OP_XX) {
|
} else if (Nodes[i].Op == OP_XX) {
|
||||||
return MakeJson(g, row);
|
return MakeJson(G, row);
|
||||||
} else switch (row->GetType()) {
|
} else switch (row->GetType()) {
|
||||||
case TYPE_JOB:
|
case TYPE_JOB:
|
||||||
if (!Nodes[i].Key) {
|
if (!Nodes[i].Key) {
|
||||||
// Expected Array was not there
|
// Expected Array was not there, wrap the value
|
||||||
if (i < Nod-1)
|
if (i < Nod-1)
|
||||||
continue;
|
continue;
|
||||||
else
|
else
|
||||||
val = new(g) JVALUE(row);
|
val = new(G) JVALUE(row);
|
||||||
|
|
||||||
} else
|
} else
|
||||||
val = ((PJOB)row)->GetValue(Nodes[i].Key);
|
val = ((PJOB)row)->GetValue(Nodes[i].Key);
|
||||||
@@ -1128,11 +1169,11 @@ PVAL JSONCOL::GetColumnValue(PGLOBAL g, PJSON row, int i)
|
|||||||
else
|
else
|
||||||
return CalculateArray(g, arp, i);
|
return CalculateArray(g, arp, i);
|
||||||
|
|
||||||
} else if (i < Nod-1) {
|
} else {
|
||||||
strcpy(g->Message, "Unexpected array");
|
// Unexpected array, unwrap it as [0]
|
||||||
val = NULL; // Not an expected array
|
val = arp->GetValue(0);
|
||||||
} else
|
i--;
|
||||||
val = arp->GetValue(0);
|
} // endif's
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case TYPE_JVAL:
|
case TYPE_JVAL:
|
||||||
@@ -1275,30 +1316,31 @@ PJSON JSONCOL::GetRow(PGLOBAL g)
|
|||||||
PJAR arp;
|
PJAR arp;
|
||||||
PJSON nwr, row = Tjp->Row;
|
PJSON nwr, row = Tjp->Row;
|
||||||
|
|
||||||
for (int i = 0; i < Nod-1 && row; i++) {
|
for (int i = 0; i < Nod && row; i++) {
|
||||||
if (Nodes[i+1].Op == OP_XX)
|
if (Nodes[i+1].Op == OP_XX)
|
||||||
break;
|
break;
|
||||||
else switch (row->GetType()) {
|
else switch (row->GetType()) {
|
||||||
case TYPE_JOB:
|
case TYPE_JOB:
|
||||||
if (!Nodes[i].Key)
|
if (!Nodes[i].Key)
|
||||||
// Expected Array was not there
|
// Expected Array was not there, wrap the value
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
val = ((PJOB)row)->GetValue(Nodes[i].Key);
|
val = ((PJOB)row)->GetValue(Nodes[i].Key);
|
||||||
break;
|
break;
|
||||||
case TYPE_JAR:
|
case TYPE_JAR:
|
||||||
if (!Nodes[i].Key) {
|
arp = (PJAR)row;
|
||||||
arp = (PJAR)row;
|
|
||||||
|
|
||||||
|
if (!Nodes[i].Key) {
|
||||||
if (Nodes[i].Op == OP_EQ)
|
if (Nodes[i].Op == OP_EQ)
|
||||||
val = arp->GetValue(Nodes[i].Rank);
|
val = arp->GetValue(Nodes[i].Rank);
|
||||||
else
|
else
|
||||||
val = arp->GetValue(Nodes[i].Rx);
|
val = arp->GetValue(Nodes[i].Rx);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
strcpy(g->Message, "Unexpected array");
|
// Unexpected array, unwrap it as [0]
|
||||||
val = NULL; // Not an expected array
|
val = arp->GetValue(0);
|
||||||
} // endif Nodes
|
i--;
|
||||||
|
} // endif Nodes
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case TYPE_JVAL:
|
case TYPE_JVAL:
|
||||||
@@ -1318,15 +1360,15 @@ PJSON JSONCOL::GetRow(PGLOBAL g)
|
|||||||
break;
|
break;
|
||||||
else if (!Nodes[i].Key)
|
else if (!Nodes[i].Key)
|
||||||
// Construct intermediate array
|
// Construct intermediate array
|
||||||
nwr = new(g) JARRAY;
|
nwr = new(G) JARRAY;
|
||||||
else
|
else
|
||||||
nwr = new(g) JOBJECT;
|
nwr = new(G) JOBJECT;
|
||||||
|
|
||||||
if (row->GetType() == TYPE_JOB) {
|
if (row->GetType() == TYPE_JOB) {
|
||||||
((PJOB)row)->SetValue(g, new(g) JVALUE(nwr), Nodes[i-1].Key);
|
((PJOB)row)->SetValue(G, new(G) JVALUE(nwr), Nodes[i-1].Key);
|
||||||
} else if (row->GetType() == TYPE_JAR) {
|
} else if (row->GetType() == TYPE_JAR) {
|
||||||
((PJAR)row)->AddValue(g, new(g) JVALUE(nwr));
|
((PJAR)row)->AddValue(G, new(G) JVALUE(nwr));
|
||||||
((PJAR)row)->InitArray(g);
|
((PJAR)row)->InitArray(G);
|
||||||
} else {
|
} else {
|
||||||
strcpy(g->Message, "Wrong type when writing new row");
|
strcpy(g->Message, "Wrong type when writing new row");
|
||||||
nwr = NULL;
|
nwr = NULL;
|
||||||
@@ -1370,7 +1412,6 @@ void JSONCOL::WriteColumn(PGLOBAL g)
|
|||||||
PJAR arp = NULL;
|
PJAR arp = NULL;
|
||||||
PJVAL jvp = NULL;
|
PJVAL jvp = NULL;
|
||||||
PJSON jsp, row = GetRow(g);
|
PJSON jsp, row = GetRow(g);
|
||||||
JTYP type = row->GetType();
|
|
||||||
|
|
||||||
switch (row->GetType()) {
|
switch (row->GetType()) {
|
||||||
case TYPE_JOB: objp = (PJOB)row; break;
|
case TYPE_JOB: objp = (PJOB)row; break;
|
||||||
@@ -1384,21 +1425,21 @@ void JSONCOL::WriteColumn(PGLOBAL g)
|
|||||||
if (Nodes[Nod-1].Op == OP_XX) {
|
if (Nodes[Nod-1].Op == OP_XX) {
|
||||||
s = Value->GetCharValue();
|
s = Value->GetCharValue();
|
||||||
|
|
||||||
if (!(jsp = ParseJson(g, s, (int)strlen(s)))) {
|
if (!(jsp = ParseJson(G, s, (int)strlen(s)))) {
|
||||||
strcpy(g->Message, s);
|
strcpy(g->Message, s);
|
||||||
longjmp(g->jumper[g->jump_level], 666);
|
longjmp(g->jumper[g->jump_level], 666);
|
||||||
} // endif jsp
|
} // endif jsp
|
||||||
|
|
||||||
if (arp) {
|
if (arp) {
|
||||||
if (Nod > 1 && Nodes[Nod-2].Op == OP_EQ)
|
if (Nod > 1 && Nodes[Nod-2].Op == OP_EQ)
|
||||||
arp->SetValue(g, new(g) JVALUE(jsp), Nodes[Nod-2].Rank);
|
arp->SetValue(G, new(G) JVALUE(jsp), Nodes[Nod-2].Rank);
|
||||||
else
|
else
|
||||||
arp->AddValue(g, new(g) JVALUE(jsp));
|
arp->AddValue(G, new(G) JVALUE(jsp));
|
||||||
|
|
||||||
arp->InitArray(g);
|
arp->InitArray(G);
|
||||||
} else if (objp) {
|
} else if (objp) {
|
||||||
if (Nod > 1 && Nodes[Nod-2].Key)
|
if (Nod > 1 && Nodes[Nod-2].Key)
|
||||||
objp->SetValue(g, new(g) JVALUE(jsp), Nodes[Nod-2].Key);
|
objp->SetValue(G, new(G) JVALUE(jsp), Nodes[Nod-2].Key);
|
||||||
|
|
||||||
} else if (jvp)
|
} else if (jvp)
|
||||||
jvp->SetValue(jsp);
|
jvp->SetValue(jsp);
|
||||||
@@ -1409,17 +1450,19 @@ void JSONCOL::WriteColumn(PGLOBAL g)
|
|||||||
// Passthru
|
// Passthru
|
||||||
case TYPE_DATE:
|
case TYPE_DATE:
|
||||||
case TYPE_INT:
|
case TYPE_INT:
|
||||||
case TYPE_DOUBLE:
|
case TYPE_SHORT:
|
||||||
|
case TYPE_BIGINT:
|
||||||
|
case TYPE_DOUBLE:
|
||||||
if (arp) {
|
if (arp) {
|
||||||
if (Nodes[Nod-1].Op == OP_EQ)
|
if (Nodes[Nod-1].Op == OP_EQ)
|
||||||
arp->SetValue(g, new(g) JVALUE(g, Value), Nodes[Nod-1].Rank);
|
arp->SetValue(G, new(G) JVALUE(G, Value), Nodes[Nod-1].Rank);
|
||||||
else
|
else
|
||||||
arp->AddValue(g, new(g) JVALUE(g, Value));
|
arp->AddValue(G, new(G) JVALUE(G, Value));
|
||||||
|
|
||||||
arp->InitArray(g);
|
arp->InitArray(G);
|
||||||
} else if (objp) {
|
} else if (objp) {
|
||||||
if (Nodes[Nod-1].Key)
|
if (Nodes[Nod-1].Key)
|
||||||
objp->SetValue(g, new(g) JVALUE(g, Value), Nodes[Nod-1].Key);
|
objp->SetValue(G, new(G) JVALUE(G, Value), Nodes[Nod-1].Key);
|
||||||
|
|
||||||
} else if (jvp)
|
} else if (jvp)
|
||||||
jvp->SetValue(Value);
|
jvp->SetValue(Value);
|
||||||
@@ -1835,8 +1878,7 @@ void TDBJSON::CloseDB(PGLOBAL g)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Save the modified document
|
// Save the modified document
|
||||||
char filename[_MAX_PATH];
|
char filename[_MAX_PATH];
|
||||||
PSZ msg;
|
|
||||||
|
|
||||||
Doc->InitArray(g);
|
Doc->InitArray(g);
|
||||||
|
|
||||||
@@ -1844,8 +1886,8 @@ void TDBJSON::CloseDB(PGLOBAL g)
|
|||||||
PlugSetPath(filename, ((PJDEF)To_Def)->Fn, GetPath());
|
PlugSetPath(filename, ((PJDEF)To_Def)->Fn, GetPath());
|
||||||
|
|
||||||
// Serialize the modified table
|
// Serialize the modified table
|
||||||
if ((msg = Serialize(g, Top, filename, Pretty)))
|
if (!Serialize(g, Top, filename, Pretty))
|
||||||
puts(msg);
|
puts(g->Message);
|
||||||
|
|
||||||
} // end of CloseDB
|
} // end of CloseDB
|
||||||
|
|
||||||
|
@@ -68,7 +68,8 @@ class JSONDEF : public DOSDEF { /* Table description */
|
|||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
class TDBJSN : public TDBDOS {
|
class TDBJSN : public TDBDOS {
|
||||||
friend class JSONCOL;
|
friend class JSONCOL;
|
||||||
public:
|
friend class JSONDEF;
|
||||||
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
TDBJSN(PJDEF tdp, PTXF txfp);
|
TDBJSN(PJDEF tdp, PTXF txfp);
|
||||||
TDBJSN(TDBJSN *tdbp);
|
TDBJSN(TDBJSN *tdbp);
|
||||||
@@ -90,32 +91,34 @@ class TDBJSN : public TDBDOS {
|
|||||||
virtual int Cardinality(PGLOBAL g);
|
virtual int Cardinality(PGLOBAL g);
|
||||||
virtual int GetMaxSize(PGLOBAL g);
|
virtual int GetMaxSize(PGLOBAL g);
|
||||||
virtual bool OpenDB(PGLOBAL g);
|
virtual bool OpenDB(PGLOBAL g);
|
||||||
virtual bool PrepareWriting(PGLOBAL g);
|
|
||||||
virtual int ReadDB(PGLOBAL g);
|
virtual int ReadDB(PGLOBAL g);
|
||||||
|
virtual bool PrepareWriting(PGLOBAL g);
|
||||||
|
virtual int WriteDB(PGLOBAL g);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
PJSON FindRow(PGLOBAL g);
|
PJSON FindRow(PGLOBAL g);
|
||||||
int MakeTopTree(PGLOBAL g, PJSON jsp);
|
int MakeTopTree(PGLOBAL g, PJSON jsp);
|
||||||
|
|
||||||
// Members
|
// Members
|
||||||
PJSON Top; // The top JSON tree
|
PGLOBAL G; // Support of parse memory
|
||||||
PJSON Row; // The current row
|
PJSON Top; // The top JSON tree
|
||||||
PJSON Val; // The value of the current row
|
PJSON Row; // The current row
|
||||||
PJCOL Colp; // The multiple column
|
PJSON Val; // The value of the current row
|
||||||
JMODE Jmode; // MODE_OBJECT by default
|
PJCOL Colp; // The multiple column
|
||||||
char *Objname; // The table object name
|
JMODE Jmode; // MODE_OBJECT by default
|
||||||
char *Xcol; // Name of expandable column
|
char *Objname; // The table object name
|
||||||
int Fpos; // The current row index
|
char *Xcol; // Name of expandable column
|
||||||
int N; // The current Rownum
|
int Fpos; // The current row index
|
||||||
int M; // Index of multiple value
|
int N; // The current Rownum
|
||||||
int Limit; // Limit of multiple values
|
int M; // Index of multiple value
|
||||||
int Pretty; // Depends on file structure
|
int Limit; // Limit of multiple values
|
||||||
int NextSame; // Same next row
|
int Pretty; // Depends on file structure
|
||||||
int SameRow; // Same row nb
|
int NextSame; // Same next row
|
||||||
int Xval; // Index of expandable array
|
int SameRow; // Same row nb
|
||||||
int B; // Array index base
|
int Xval; // Index of expandable array
|
||||||
bool Strict; // Strict syntax checking
|
int B; // Array index base
|
||||||
bool Comma; // Row has final comma
|
bool Strict; // Strict syntax checking
|
||||||
|
bool Comma; // Row has final comma
|
||||||
}; // end of class TDBJSN
|
}; // end of class TDBJSN
|
||||||
|
|
||||||
/* -------------------------- JSONCOL class -------------------------- */
|
/* -------------------------- JSONCOL class -------------------------- */
|
||||||
@@ -154,7 +157,8 @@ class JSONCOL : public DOSCOL {
|
|||||||
JSONCOL(void) {}
|
JSONCOL(void) {}
|
||||||
|
|
||||||
// Members
|
// Members
|
||||||
TDBJSN *Tjp; // To the JSN table block
|
PGLOBAL G; // Support of parse memory
|
||||||
|
TDBJSN *Tjp; // To the JSN table block
|
||||||
PVAL MulVal; // To value used by multiple column
|
PVAL MulVal; // To value used by multiple column
|
||||||
char *Jpath; // The json path
|
char *Jpath; // The json path
|
||||||
JNODE *Nodes; // The intermediate objects
|
JNODE *Nodes; // The intermediate objects
|
||||||
@@ -170,7 +174,8 @@ class JSONCOL : public DOSCOL {
|
|||||||
/* This is the JSON Access Method class declaration. */
|
/* This is the JSON Access Method class declaration. */
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
class TDBJSON : public TDBJSN {
|
class TDBJSON : public TDBJSN {
|
||||||
friend class JSONCOL;
|
friend class JSONDEF;
|
||||||
|
friend class JSONCOL;
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
TDBJSON(PJDEF tdp, PTXF txfp);
|
TDBJSON(PJDEF tdp, PTXF txfp);
|
||||||
|
@@ -60,7 +60,7 @@ extern "C" char version[];
|
|||||||
#endif // !__WIN__
|
#endif // !__WIN__
|
||||||
|
|
||||||
#define TYPE_UNKNOWN 12 /* Must be greater than other types */
|
#define TYPE_UNKNOWN 12 /* Must be greater than other types */
|
||||||
#define XSTR(M) sizeof(M) - strlen(M) - 1 /* To avoid overflow*/
|
#define XLEN(M) sizeof(M) - strlen(M) - 1 /* To avoid overflow*/
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* Class and structure used by XMLColumns. */
|
/* Class and structure used by XMLColumns. */
|
||||||
@@ -226,30 +226,30 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info)
|
|||||||
more:
|
more:
|
||||||
if (vp->atp) {
|
if (vp->atp) {
|
||||||
strncpy(colname, vp->atp->GetName(g), sizeof(colname));
|
strncpy(colname, vp->atp->GetName(g), sizeof(colname));
|
||||||
strncat(xcol->Name, colname, XSTR(xcol->Name));
|
strncat(xcol->Name, colname, XLEN(xcol->Name));
|
||||||
|
|
||||||
switch (vp->atp->GetText(g, buf, sizeof(buf))) {
|
switch (vp->atp->GetText(g, buf, sizeof(buf))) {
|
||||||
case RC_INFO:
|
case RC_INFO:
|
||||||
PushWarning(g, txmp);
|
PushWarning(g, txmp);
|
||||||
case RC_OK:
|
case RC_OK:
|
||||||
strncat(fmt, "@", XSTR(fmt));
|
strncat(fmt, "@", XLEN(fmt));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
goto err;
|
goto err;
|
||||||
} // enswitch rc
|
} // enswitch rc
|
||||||
|
|
||||||
if (j)
|
if (j)
|
||||||
strncat(fmt, colname, XSTR(fmt));
|
strncat(fmt, colname, XLEN(fmt));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (tdp->Usedom && node->GetType() != 1)
|
if (tdp->Usedom && node->GetType() != 1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
strncpy(colname, node->GetName(g), sizeof(colname));
|
strncpy(colname, node->GetName(g), sizeof(colname));
|
||||||
strncat(xcol->Name, colname, XSTR(xcol->Name));
|
strncat(xcol->Name, colname, XLEN(xcol->Name));
|
||||||
|
|
||||||
if (j)
|
if (j)
|
||||||
strncat(fmt, colname, XSTR(fmt));
|
strncat(fmt, colname, XLEN(fmt));
|
||||||
|
|
||||||
if (j < lvl && ok) {
|
if (j < lvl && ok) {
|
||||||
vp = lvlp[j+1];
|
vp = lvlp[j+1];
|
||||||
@@ -267,9 +267,9 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info)
|
|||||||
if (!vp->atp)
|
if (!vp->atp)
|
||||||
node = vp->nl->GetItem(g, vp->k++, node);
|
node = vp->nl->GetItem(g, vp->k++, node);
|
||||||
|
|
||||||
strncat(fmt, colname, XSTR(fmt));
|
strncat(fmt, colname, XLEN(fmt));
|
||||||
strncat(fmt, "/", XSTR(fmt));
|
strncat(fmt, "/", XLEN(fmt));
|
||||||
strncat(xcol->Name, "_", XSTR(xcol->Name));
|
strncat(xcol->Name, "_", XLEN(xcol->Name));
|
||||||
j++;
|
j++;
|
||||||
vp->n = (int)strlen(xcol->Name);
|
vp->n = (int)strlen(xcol->Name);
|
||||||
vp->m = (int)strlen(fmt);
|
vp->m = (int)strlen(fmt);
|
||||||
|
@@ -2440,7 +2440,6 @@ void DTVAL::SetTimeShift(void)
|
|||||||
|
|
||||||
} // end of SetTimeShift
|
} // end of SetTimeShift
|
||||||
|
|
||||||
#if defined(connect_EXPORTS)
|
|
||||||
// Added by Alexander Barkov
|
// Added by Alexander Barkov
|
||||||
static void TIME_to_localtime(struct tm *tm, const MYSQL_TIME *ltime)
|
static void TIME_to_localtime(struct tm *tm, const MYSQL_TIME *ltime)
|
||||||
{
|
{
|
||||||
@@ -2462,9 +2461,6 @@ static struct tm *gmtime_mysql(const time_t *timep, struct tm *tm)
|
|||||||
TIME_to_localtime(tm, <ime);
|
TIME_to_localtime(tm, <ime);
|
||||||
return tm;
|
return tm;
|
||||||
} // end of gmtime_mysql
|
} // end of gmtime_mysql
|
||||||
#else
|
|
||||||
#define gmtime_mysql(T,B) gmtime((const time_t *)T)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* GetGmTime: returns a pointer to a static tm structure obtained */
|
/* GetGmTime: returns a pointer to a static tm structure obtained */
|
||||||
@@ -2493,7 +2489,6 @@ struct tm *DTVAL::GetGmTime(struct tm *tm_buffer)
|
|||||||
return datm;
|
return datm;
|
||||||
} // end of GetGmTime
|
} // end of GetGmTime
|
||||||
|
|
||||||
#if defined(connect_EXPORTS)
|
|
||||||
// Added by Alexander Barkov
|
// Added by Alexander Barkov
|
||||||
static time_t mktime_mysql(struct tm *ptm)
|
static time_t mktime_mysql(struct tm *ptm)
|
||||||
{
|
{
|
||||||
@@ -2504,9 +2499,6 @@ static time_t mktime_mysql(struct tm *ptm)
|
|||||||
time_t t= TIME_to_timestamp(current_thd, <ime, &error_code);
|
time_t t= TIME_to_timestamp(current_thd, <ime, &error_code);
|
||||||
return error_code ? (time_t) -1 : t;
|
return error_code ? (time_t) -1 : t;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
#define mktime_mysql mktime
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/***********************************************************************/
|
/***********************************************************************/
|
||||||
/* MakeTime: calculates a date value from a tm structures using the */
|
/* MakeTime: calculates a date value from a tm structures using the */
|
||||||
|
Reference in New Issue
Block a user