mirror of
https://github.com/MariaDB/server.git
synced 2025-04-11 17:55:34 +02:00
Merge branch 'connect/10.1' into 10.1
This commit is contained in:
commit
1788bfe93a
22 changed files with 2796 additions and 857 deletions
|
@ -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
|
||||
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
|
||||
myconn.h myutil.h os.h osutil.h plgcnx.h plgdbsem.h preparse.h reldef.h
|
||||
filter.h global.h ha_connect.h inihandl.h json.h jsonudf.h maputil.h msgid.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
|
||||
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)
|
||||
|
|
|
@ -1404,8 +1404,13 @@ void ZLBFAM::Rewind(void)
|
|||
// We must be positioned after the header block
|
||||
if (CurBlk >= 0) { // Nothing to do if no block read yet
|
||||
if (!Optimized) { // If optimized, fseek will be done in ReadBuffer
|
||||
size_t st;
|
||||
|
||||
rewind(Stream);
|
||||
(void) fread(Zlenp, sizeof(int), 1, Stream);
|
||||
|
||||
if (!(st = fread(Zlenp, sizeof(int), 1, Stream)) && trace)
|
||||
htrc("fread error %d in Rewind", errno);
|
||||
|
||||
fseek(Stream, *Zlenp + sizeof(int), SEEK_SET);
|
||||
OldBlk = -1;
|
||||
} // endif Optimized
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
#include <setjmp.h>
|
||||
|
||||
#define yyFlexLexer fmdfFlexLexer
|
||||
#define yy_create_buffer fmdf_create_buffer
|
||||
#define yy_delete_buffer fmdf_delete_buffer
|
||||
|
@ -506,13 +508,16 @@ YY_MALLOC_DECL
|
|||
#define YY_BREAK break;
|
||||
#endif
|
||||
|
||||
static jmp_buf env;
|
||||
|
||||
YY_DECL
|
||||
{
|
||||
register yy_state_type yy_current_state;
|
||||
register char *yy_cp, *yy_bp;
|
||||
register int yy_act;
|
||||
|
||||
|
||||
if (setjmp(env))
|
||||
return -1;
|
||||
|
||||
/*************************************************************************/
|
||||
/* Flex parser to analyze date format and produce input and/or output */
|
||||
|
@ -1316,7 +1321,7 @@ char msg[];
|
|||
#endif
|
||||
{
|
||||
(void) fprintf( stderr, "%s\n", msg );
|
||||
exit( 1 );
|
||||
longjmp(env, 1 );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -169,9 +169,9 @@
|
|||
#define JSONMAX 10 // JSON Default max grp size
|
||||
|
||||
extern "C" {
|
||||
char version[]= "Version 1.04.0003 October 25, 2015";
|
||||
char version[]= "Version 1.04.0005 December 11, 2015";
|
||||
#if defined(__WIN__)
|
||||
char compver[]= "Version 1.04.0003 " __DATE__ " " __TIME__;
|
||||
char compver[]= "Version 1.04.0005 " __DATE__ " " __TIME__;
|
||||
char slash= '\\';
|
||||
#else // !__WIN__
|
||||
char slash= '/';
|
||||
|
@ -6762,7 +6762,7 @@ maria_declare_plugin(connect)
|
|||
0x0104, /* version number (1.04) */
|
||||
NULL, /* status variables */
|
||||
connect_system_variables, /* system variables */
|
||||
"1.04.0003", /* string version */
|
||||
"1.04.0005", /* string version */
|
||||
MariaDB_PLUGIN_MATURITY_BETA /* maturity */
|
||||
}
|
||||
maria_declare_plugin_end;
|
||||
|
|
|
@ -534,15 +534,27 @@ PVAL ParseNumeric(PGLOBAL g, int& i, STRG& src)
|
|||
/***********************************************************************/
|
||||
PSZ Serialize(PGLOBAL g, PJSON jsp, char *fn, int pretty)
|
||||
{
|
||||
PSZ str = NULL;
|
||||
bool b = false, err = true;
|
||||
JOUT *jp;
|
||||
FILE *fs = NULL;
|
||||
|
||||
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");
|
||||
return NULL;
|
||||
goto fin;
|
||||
} else if (!fn) {
|
||||
// Serialize to a string
|
||||
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),
|
||||
"w", (int)errno, fn);
|
||||
strcat(strcat(g->Message, ": "), strerror(errno));
|
||||
return g->Message;
|
||||
goto fin;;
|
||||
} else if (pretty >= 2) {
|
||||
// Serialize to a pretty file
|
||||
jp = new(g)JOUTPRT(g, fs);
|
||||
|
@ -582,20 +594,20 @@ PSZ Serialize(PGLOBAL g, PJSON jsp, char *fn, int pretty)
|
|||
if (fs) {
|
||||
fputs(EL, fs);
|
||||
fclose(fs);
|
||||
return (err) ? g->Message : NULL;
|
||||
str = (err) ? NULL : "Ok";
|
||||
} else if (!err) {
|
||||
PSZ str = ((JOUTSTR*)jp)->Strp;
|
||||
|
||||
str = ((JOUTSTR*)jp)->Strp;
|
||||
jp->WriteChr('\0');
|
||||
PlugSubAlloc(g, NULL, ((JOUTSTR*)jp)->N);
|
||||
return str;
|
||||
} else {
|
||||
if (!g->Message[0])
|
||||
strcpy(g->Message, "Error in Serialize");
|
||||
|
||||
return NULL;
|
||||
} // endif's
|
||||
|
||||
fin:
|
||||
g->jump_level--;
|
||||
return str;
|
||||
} // end of Serialize
|
||||
|
||||
/***********************************************************************/
|
||||
|
@ -1096,10 +1108,12 @@ PJVAL JARRAY::AddValue(PGLOBAL g, PJVAL jvp, int *x)
|
|||
Last = jvp;
|
||||
|
||||
} else {
|
||||
if (Last)
|
||||
Last->Next = jvp;
|
||||
else
|
||||
if (!First)
|
||||
First = jvp;
|
||||
else if (Last == First)
|
||||
First->Next = Last = jvp;
|
||||
else
|
||||
Last->Next = jvp;
|
||||
|
||||
Last = jvp;
|
||||
} // endif x
|
||||
|
@ -1282,6 +1296,18 @@ PSZ JVALUE::GetText(PGLOBAL g, PSZ text)
|
|||
return text;
|
||||
} // 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. */
|
||||
/***********************************************************************/
|
||||
|
|
|
@ -149,7 +149,7 @@ class JSON : public BLOCK {
|
|||
virtual JTYP GetType(void) {return TYPE_JSON;}
|
||||
virtual JTYP GetValType(void) {X return TYPE_JSON;}
|
||||
virtual void InitArray(PGLOBAL g) {X}
|
||||
virtual PJVAL AddValue(PGLOBAL g, PJVAL jvp = NULL, int *x = NULL) {X return NULL;}
|
||||
//virtual PJVAL AddValue(PGLOBAL g, PJVAL jvp = NULL, int *x = NULL) {X return NULL;}
|
||||
virtual PJPR AddPair(PGLOBAL g, PSZ key) {X return NULL;}
|
||||
virtual PJAR GetKeyList(PGLOBAL g) {X return NULL;}
|
||||
virtual PJVAL GetValue(const char *key) {X return NULL;}
|
||||
|
@ -223,7 +223,7 @@ class JARRAY : public JSON {
|
|||
virtual void Clear(void) {First = Last = NULL; Size = 0;}
|
||||
virtual JTYP GetType(void) {return TYPE_JAR;}
|
||||
virtual PJAR GetArray(void) {return this;}
|
||||
virtual PJVAL AddValue(PGLOBAL g, PJVAL jvp = NULL, int *x = NULL);
|
||||
PJVAL AddValue(PGLOBAL g, PJVAL jvp = NULL, int *x = NULL);
|
||||
virtual void InitArray(PGLOBAL g);
|
||||
virtual PJVAL GetValue(int i);
|
||||
virtual bool Merge(PGLOBAL g, PJSON jsp);
|
||||
|
@ -271,9 +271,9 @@ class JVALUE : public JSON {
|
|||
virtual double GetFloat(void);
|
||||
virtual PSZ GetString(void);
|
||||
virtual PSZ GetText(PGLOBAL g, PSZ text);
|
||||
virtual void SetValue(PVAL valp) {Value = valp; Jsp = NULL;}
|
||||
virtual void SetValue(PJSON jsp) {Jsp = jsp; Value = NULL;}
|
||||
virtual void SetString(PGLOBAL g, PSZ s, short c = 0);
|
||||
virtual void SetValue(PJSON jsp);
|
||||
virtual void SetValue(PVAL valp) { Value = valp; Jsp = NULL; }
|
||||
virtual void SetString(PGLOBAL g, PSZ s, short c = 0);
|
||||
virtual void SetInteger(PGLOBAL g, int n);
|
||||
virtual void SetBigint(PGLOBAL g, longlong ll);
|
||||
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 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 char *json_object_add(UDF_EXEC_ARGS);
|
||||
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 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 char *jsonlocate(UDF_EXEC_ARGS);
|
||||
DllExport void jsonlocate_deinit(UDF_INIT*);
|
||||
|
@ -113,6 +121,22 @@ extern "C" {
|
|||
DllExport char *json_locate_all(UDF_EXEC_ARGS);
|
||||
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 char *json_file(UDF_EXEC_ARGS);
|
||||
DllExport void json_file_deinit(UDF_INIT*);
|
||||
|
@ -145,6 +169,10 @@ extern "C" {
|
|||
DllExport char *jbin_object_nonull(UDF_EXEC_ARGS);
|
||||
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 char *jbin_object_add(UDF_EXEC_ARGS);
|
||||
DllExport void jbin_object_add_deinit(UDF_INIT*);
|
||||
|
@ -165,6 +193,18 @@ extern "C" {
|
|||
DllExport char *jbin_item_merge(UDF_EXEC_ARGS);
|
||||
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 char *jbin_file(UDF_EXEC_ARGS);
|
||||
DllExport void jbin_file_deinit(UDF_INIT*);
|
||||
|
@ -189,7 +229,7 @@ typedef struct _jpn {
|
|||
class JSNX : public BLOCK {
|
||||
public:
|
||||
// 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
|
||||
int GetPrecision(void) {return Prec;}
|
||||
|
@ -199,8 +239,10 @@ public:
|
|||
my_bool SetJpath(PGLOBAL g, char *path, my_bool jb = false);
|
||||
my_bool ParseJpath(PGLOBAL g);
|
||||
void ReadValue(PGLOBAL g);
|
||||
PJVAL GetValue(PGLOBAL g, PJSON row, int i, my_bool b = true);
|
||||
PJVAL GetRowValue(PGLOBAL g, PJSON row, int i, my_bool b = true);
|
||||
PJVAL GetJson(PGLOBAL g);
|
||||
my_bool CheckPath(PGLOBAL g);
|
||||
my_bool WriteValue(PGLOBAL g, PJVAL jvalp);
|
||||
char *Locate(PGLOBAL g, PJSON jsp, PJVAL jvp, int k = 1);
|
||||
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 MakeJson(PGLOBAL g, PJSON jsp);
|
||||
void SetJsonValue(PGLOBAL g, PVAL vp, PJVAL val, int n);
|
||||
PJSON GetRow(PGLOBAL g);
|
||||
my_bool LocateArray(PJAR jarp);
|
||||
my_bool LocateObject(PJOB jobp);
|
||||
my_bool LocateValue(PJVAL jvp);
|
||||
|
@ -244,4 +287,6 @@ protected:
|
|||
my_bool Xpd; // True for expandable column
|
||||
my_bool Parsed; // True when parsed
|
||||
my_bool Found; // Item found by locate
|
||||
my_bool Wr; // Write mode
|
||||
my_bool Jb; // Must return json item
|
||||
}; // end of class JSNX
|
||||
|
|
|
@ -89,6 +89,7 @@
|
|||
#if defined(XML_SUPPORT)
|
||||
#include "tabxml.h"
|
||||
#endif // XML_SUPPORT
|
||||
#include "mycat.h"
|
||||
|
||||
/***********************************************************************/
|
||||
/* Extern static variables. */
|
||||
|
|
|
@ -2,11 +2,14 @@ CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=VIR BLOCK_SIZE=5;
|
|||
#
|
||||
# Test UDF's with constant arguments
|
||||
#
|
||||
SELECT JsonValue(56,3.1416,'foo',NULL);
|
||||
SELECT JsonValue(56, 3.1416, 'foo', NULL);
|
||||
ERROR HY000: Can't initialize function 'jsonvalue'; Cannot accept more than 1 argument
|
||||
SELECT JsonValue(3.1416);
|
||||
JsonValue(3.1416)
|
||||
3.141600
|
||||
SELECT JsonValue(-80);
|
||||
JsonValue(-80)
|
||||
-80
|
||||
SELECT JsonValue('foo');
|
||||
JsonValue('foo')
|
||||
"foo"
|
||||
|
@ -25,8 +28,8 @@ false
|
|||
SELECT JsonValue();
|
||||
JsonValue()
|
||||
null
|
||||
SELECT JsonValue('[11,22,33]' json_) FROM t1;
|
||||
JsonValue('[11,22,33]' json_)
|
||||
SELECT JsonValue('[11, 22, 33]' json_) FROM t1;
|
||||
JsonValue('[11, 22, 33]' json_)
|
||||
[11,22,33]
|
||||
[11,22,33]
|
||||
[11,22,33]
|
||||
|
@ -35,27 +38,29 @@ JsonValue('[11,22,33]' json_)
|
|||
SELECT Json_Array();
|
||||
Json_Array()
|
||||
[]
|
||||
SELECT Json_Array(56,3.1416,'My name is "Foo"',NULL);
|
||||
Json_Array(56,3.1416,'My name is "Foo"',NULL)
|
||||
SELECT Json_Array(56, 3.1416, 'My name is "Foo"', NULL);
|
||||
Json_Array(56, 3.1416, 'My name is "Foo"', NULL)
|
||||
[56,3.141600,"My name is \"Foo\"",null]
|
||||
SELECT Json_Array(Json_Array(56,3.1416,'foo'),NULL);
|
||||
Json_Array(Json_Array(56,3.1416,'foo'),NULL)
|
||||
[[56,3.141600,"foo"],null]
|
||||
SELECT Json_Array_Add(Json_Array(56,3.1416,'foo',NULL)) Array;
|
||||
SELECT Json_Array(Json_Array(56, 3.1416, 'foo'), TRUE);
|
||||
Json_Array(Json_Array(56, 3.1416, 'foo'), TRUE)
|
||||
[[56,3.141600,"foo"],true]
|
||||
SELECT Json_Array_Add(Json_Array(56, 3.1416, 'foo', NULL)) Array;
|
||||
ERROR HY000: Can't initialize function 'json_array_add'; This function must have at least 2 arguments
|
||||
SELECT Json_Array_Add(Json_Array(56,3.1416,'foo',NULL),'One more') Array;
|
||||
SELECT Json_Array_Add(Json_Array(56, 3.1416, 'foo', NULL), 'One more') Array;
|
||||
Array
|
||||
[56,3.141600,"foo",null,"One more"]
|
||||
SELECT Json_Array_Add(JsonValue('one value'),'One more');
|
||||
SELECT Json_Array_Add(JsonValue('one value'), 'One more');
|
||||
ERROR HY000: Can't initialize function 'json_array_add'; First argument must be a json item
|
||||
SELECT Json_Array_Add('one value','One more');
|
||||
SELECT Json_Array_Add('one value', 'One more');
|
||||
ERROR HY000: Can't initialize function 'json_array_add'; First argument must be a json item
|
||||
SELECT Json_Array_Add('one value' json_,'One more');
|
||||
Json_Array_Add('one value' json_,'One more')
|
||||
SELECT Json_Array_Add('one value' json_, 'One more');
|
||||
Json_Array_Add('one value' json_, 'One more')
|
||||
one value
|
||||
Warnings:
|
||||
Warning 1105 Error 2 opening one value
|
||||
Warning 1105 First argument target is not an array
|
||||
SELECT Json_Array_Add(5 json_, 'One more');
|
||||
ERROR HY000: Can't initialize function 'json_array_add'; First argument must be a json item
|
||||
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 0);
|
||||
Json_Array_Add('[5,3,8,7,9]' json_, 4, 0)
|
||||
[4,5,3,8,7,9]
|
||||
|
@ -65,6 +70,15 @@ Array
|
|||
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 9);
|
||||
Json_Array_Add('[5,3,8,7,9]' json_, 4, 9)
|
||||
[5,3,8,7,9,4]
|
||||
SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), '[2]', 33, 1);
|
||||
Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), '[2]', 33, 1)
|
||||
[1,2,[11,22],"[2]"]
|
||||
SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, '[2]', 1);
|
||||
Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, '[2]', 1)
|
||||
[1,2,[11,33,22]]
|
||||
SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, 1, '[2]');
|
||||
Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, 1, '[2]')
|
||||
[1,2,[11,33,22]]
|
||||
SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin', NULL), 'One more', 'Two more') Array;
|
||||
Array
|
||||
[56,3.141600,"machin",null,"One more","Two more"]
|
||||
|
@ -92,19 +106,24 @@ Array
|
|||
SELECT Json_Array_Add_Values('[56]', 3.1416, 'machin') Array;
|
||||
Array
|
||||
[56,3.141600,"machin"]
|
||||
SELECT Json_Array_Delete(Json_Array(56,3.1416,'My name is "Foo"',NULL),0);
|
||||
Json_Array_Delete(Json_Array(56,3.1416,'My name is "Foo"',NULL),0)
|
||||
SELECT Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), 0);
|
||||
Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), 0)
|
||||
[3.141600,"My name is \"Foo\"",null]
|
||||
SELECT Json_Array_Delete(Json_Object(56,3.1416,'My name is Foo',NULL),2);
|
||||
Json_Array_Delete(Json_Object(56,3.1416,'My name is Foo',NULL),2)
|
||||
SELECT Json_Array_Delete(Json_Object(56, 3.1416, 'My name is Foo', NULL), 2);
|
||||
Json_Array_Delete(Json_Object(56, 3.1416, 'My name is Foo', NULL), 2)
|
||||
{"56":56,"3.1416":3.141600,"My name is Foo":"My name is Foo","NULL":null}
|
||||
Warnings:
|
||||
Warning 1105 First argument target is not an array
|
||||
SELECT Json_Array_Delete(Json_Array(56,3.1416,'My name is "Foo"',NULL),'2');
|
||||
Json_Array_Delete(Json_Array(56,3.1416,'My name is "Foo"',NULL),'2')
|
||||
SELECT Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), '2');
|
||||
Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), '2')
|
||||
[56,3.141600,"My name is \"Foo\"",null]
|
||||
Warnings:
|
||||
Warning 1105 Missing or null array index
|
||||
SELECT Json_Array_Delete(json_array(56, 3.1416, 'My name is "Foo"', NULL), '2', 2);
|
||||
Json_Array_Delete(json_array(56, 3.1416, 'My name is "Foo"', NULL), '2', 2)
|
||||
[56,3.141600,"My name is \"Foo\"",null]
|
||||
Warnings:
|
||||
Warning 1105 No sub-item at '2'
|
||||
SELECT Json_Object(56, 3.1416, 'foo', NULL);
|
||||
Json_Object(56, 3.1416, 'foo', NULL)
|
||||
{"56":56,"3.1416":3.141600,"foo":"foo","NULL":null}
|
||||
|
@ -120,19 +139,30 @@ Json_Object(Json_Array(56, 3.1416, 'foo'), NULL)
|
|||
SELECT Json_Array(Json_Object(56 "qty", 3.1416 "price", 'foo') ,NULL);
|
||||
Json_Array(Json_Object(56 "qty", 3.1416 "price", 'foo') ,NULL)
|
||||
[{"qty":56,"price":3.141600,"foo":"foo"},null]
|
||||
SELECT Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'blue' color);
|
||||
Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'blue' color)
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null,"color":"blue"}
|
||||
SELECT Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 45.99 price);
|
||||
Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 45.99 price)
|
||||
{"qty":56,"price":45.990000,"truc":"machin","garanty":null}
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'truc');
|
||||
Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'truc')
|
||||
{"qty":56,"price":3.141600,"garanty":null}
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'chose');
|
||||
Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'chose')
|
||||
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL);
|
||||
Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL)
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null}
|
||||
SELECT Json_Object_List(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty)) "Key List";
|
||||
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty');
|
||||
ERROR HY000: Can't initialize function 'json_object_key'; This function must have an even number of arguments
|
||||
SELECT Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color);
|
||||
Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color)
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null,"color":"blue"}
|
||||
SELECT Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price);
|
||||
Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price)
|
||||
{"qty":56,"price":45.990000,"truc":"machin","garanty":null}
|
||||
SELECT Json_Object_Add(Json_File('notexist.json'), 'cheese' item, '[1]', 1);
|
||||
Json_Object_Add(Json_File('notexist.json'), 'cheese' item, '[1]', 1)
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1105 Error 2 opening notexist.json
|
||||
Warning 1105 First argument target is not an object
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'truc');
|
||||
Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'truc')
|
||||
{"qty":56,"price":3.141600,"garanty":null}
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'chose');
|
||||
Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'chose')
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null}
|
||||
SELECT Json_Object_List(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty)) "Key List";
|
||||
Key List
|
||||
["qty","price","truc","garanty"]
|
||||
SELECT Json_Object_List('{"qty":56, "price":3.1416, "truc":"machin", "garanty":null}') "Key List";
|
||||
|
@ -188,6 +218,16 @@ DEPARTMENT Json_Array_Grp(NAME)
|
|||
Warnings:
|
||||
Warning 1105 Result truncated to json_grp_size values
|
||||
SET connect_json_grp_size=30;
|
||||
SELECT Json_Object(title, Json_Array_Grp(name) `json_names`) from t3 GROUP BY title;
|
||||
Json_Object(title, Json_Array_Grp(name) `json_names`)
|
||||
{"title":"ADMINISTRATOR","names":["GOOSEPEN","FUNNIGUY","SHRINKY"]}
|
||||
{"title":"DIRECTOR","names":["QUINN","WERTHER","STRONG"]}
|
||||
{"title":"ENGINEER","names":["BROWNY","ORELLY","MARTIN","TONGHO","WALTER","SMITH"]}
|
||||
{"title":"PROGRAMMER","names":["BUGHAPPY"]}
|
||||
{"title":"SALESMAN","names":["WHEELFOR","MERCHANT","BULLOZER","BANCROFT","FODDERMAN"]}
|
||||
{"title":"SCIENTIST","names":["BIGHEAD","BIGHORN"]}
|
||||
{"title":"SECRETARY","names":["MESSIFUL","HONEY","SHORTSIGHT","CHERRY","MONAPENNY"]}
|
||||
{"title":"TYPIST","names":["KITTY","PLUMHEAD"]}
|
||||
SELECT Json_Array(DEPARTMENT, Json_Array_Grp(NAME)) FROM t3 GROUP BY DEPARTMENT;
|
||||
Json_Array(DEPARTMENT, Json_Array_Grp(NAME))
|
||||
["0021",["STRONG","SHORTSIGHT"]]
|
||||
|
@ -227,12 +267,12 @@ Json_Object(DEPARTMENT, TITLE, Json_Array_Grp(Json_Object(SERIALNO, NAME, SALARY
|
|||
{"DEPARTMENT":"2452","TITLE":"SCIENTIST","EMPLOYES":[{"SERIALNO":"34567","NAME":"BIGHEAD","SALARY":8000.000000},{"SERIALNO":"36666","NAME":"BIGHORN","SALARY":11000.000000}]}
|
||||
{"DEPARTMENT":"2452","TITLE":"SECRETARY","EMPLOYES":[{"SERIALNO":"11111","NAME":"CHERRY","SALARY":4500.000000}]}
|
||||
SELECT Json_Object_Grp(SALARY) FROM t3;
|
||||
ERROR HY000: Can't initialize function 'json_object_grp'; This function requires 2 arguments (value, key)
|
||||
SELECT Json_Object_Grp(SALARY, NAME) FROM t3;
|
||||
Json_Object_Grp(SALARY, NAME)
|
||||
ERROR HY000: Can't initialize function 'json_object_grp'; This function requires 2 arguments (key, value)
|
||||
SELECT Json_Object_Grp(NAME, SALARY) FROM t3;
|
||||
Json_Object_Grp(NAME, SALARY)
|
||||
{"BANCROFT":9600.000000,"SMITH":9000.000000,"MERCHANT":8700.000000,"FUNNIGUY":8500.000000,"BUGHAPPY":8500.000000,"BIGHEAD":8000.000000,"SHRINKY":7500.000000,"WALTER":7400.000000,"FODDERMAN":7000.000000,"TONGHO":6800.000000,"SHORTSIGHT":5500.000000,"MESSIFUL":5000.500000,"HONEY":4900.000000,"GOOSEPEN":4700.000000,"CHERRY":4500.000000,"MONAPENNY":3800.000000,"KITTY":3000.450000,"PLUMHEAD":2800.000000,"STRONG":23000.000000,"BULLOZER":14800.000000,"WERTHER":14500.000000,"QUINN":14000.000000,"ORELLY":13400.000000,"BIGHORN":11000.000000,"BROWNY":10500.000000,"WHEELFOR":10030.000000,"MARTIN":10000.000000}
|
||||
SELECT Json_Object(DEPARTMENT, Json_Object_Grp(SALARY, NAME) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT;
|
||||
Json_Object(DEPARTMENT, Json_Object_Grp(SALARY, NAME) "Json_SALARIES")
|
||||
SELECT Json_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT;
|
||||
Json_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES")
|
||||
{"DEPARTMENT":"0021","SALARIES":{"STRONG":23000.000000,"SHORTSIGHT":5500.000000}}
|
||||
{"DEPARTMENT":"0318","SALARIES":{"BANCROFT":9600.000000,"PLUMHEAD":2800.000000,"HONEY":4900.000000,"TONGHO":6800.000000,"WALTER":7400.000000,"SHRINKY":7500.000000,"WERTHER":14500.000000,"MERCHANT":8700.000000,"WHEELFOR":10030.000000}}
|
||||
{"DEPARTMENT":"0319","SALARIES":{"BULLOZER":14800.000000,"QUINN":14000.000000,"BROWNY":10500.000000,"KITTY":3000.450000,"MONAPENNY":3800.000000,"MARTIN":10000.000000,"FUNNIGUY":8500.000000,"BUGHAPPY":8500.000000,"FODDERMAN":7000.000000,"MESSIFUL":5000.500000,"GOOSEPEN":4700.000000}}
|
||||
|
@ -240,6 +280,20 @@ Json_Object(DEPARTMENT, Json_Object_Grp(SALARY, NAME) "Json_SALARIES")
|
|||
SELECT Json_Array_Grp(NAME) FROM t3;
|
||||
Json_Array_Grp(NAME)
|
||||
["BANCROFT","SMITH","MERCHANT","FUNNIGUY","BUGHAPPY","BIGHEAD","SHRINKY","WALTER","FODDERMAN","TONGHO","SHORTSIGHT","MESSIFUL","HONEY","GOOSEPEN","CHERRY","MONAPENNY","KITTY","PLUMHEAD","STRONG","BULLOZER","WERTHER","QUINN","ORELLY","BIGHORN","BROWNY","WHEELFOR","MARTIN"]
|
||||
SELECT Json_Object_Key(name, title) FROM t3 WHERE DEPARTMENT = 318;
|
||||
Json_Object_Key(name, title)
|
||||
{"BANCROFT":"SALESMAN"}
|
||||
{"MERCHANT":"SALESMAN"}
|
||||
{"SHRINKY":"ADMINISTRATOR"}
|
||||
{"WALTER":"ENGINEER"}
|
||||
{"TONGHO":"ENGINEER"}
|
||||
{"HONEY":"SECRETARY"}
|
||||
{"PLUMHEAD":"TYPIST"}
|
||||
{"WERTHER":"DIRECTOR"}
|
||||
{"WHEELFOR":"SALESMAN"}
|
||||
SELECT Json_Object_Grp(name, title) FROM t3 WHERE DEPARTMENT = 318;
|
||||
Json_Object_Grp(name, title)
|
||||
{"BANCROFT":"SALESMAN","MERCHANT":"SALESMAN","SHRINKY":"ADMINISTRATOR","WALTER":"ENGINEER","TONGHO":"ENGINEER","HONEY":"SECRETARY","PLUMHEAD":"TYPIST","WERTHER":"DIRECTOR","WHEELFOR":"SALESMAN"}
|
||||
#
|
||||
# Test value getting UDF's
|
||||
#
|
||||
|
@ -304,42 +358,40 @@ JsonGet_Int(@j1, '[#]')
|
|||
SELECT JsonGet_Int(@j1, '[+]');
|
||||
JsonGet_Int(@j1, '[+]')
|
||||
243
|
||||
SELECT JsonGet_Int(@j1 json_,'[3]');
|
||||
JsonGet_Int(@j1 json_,'[3]')
|
||||
SELECT JsonGet_Int(@j1 json_, '[3]');
|
||||
JsonGet_Int(@j1 json_, '[3]')
|
||||
45
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89),'[3]');
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89),'[3]')
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '[3]');
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89), '[3]')
|
||||
45
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89),'["+"]');
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89),'["+"]')
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '["+"]');
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89), '["+"]')
|
||||
45
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89),'[+]');
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89),'[+]')
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '[+]');
|
||||
JsonGet_Int(Json_Array(45,28,36,45,89), '[+]')
|
||||
243
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]');
|
||||
JsonGet_Int(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]')
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]');
|
||||
JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]')
|
||||
36
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28),json_array(36,45,89)),'[0]:[1]');
|
||||
JsonGet_Int(Json_Array(json_array(45,28),json_array(36,45,89)),'[0]:[1]')
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[0]:[1]');
|
||||
JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[0]:[1]')
|
||||
28
|
||||
SELECT JsonGet_Int(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'qty');
|
||||
JsonGet_Int(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'qty')
|
||||
SELECT JsonGet_Int(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty');
|
||||
JsonGet_Int(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty')
|
||||
56
|
||||
SELECT JsonGet_Int(@j2 json_,'price');
|
||||
JsonGet_Int(@j2 json_,'price')
|
||||
SELECT JsonGet_Int(@j2 json_, 'price');
|
||||
JsonGet_Int(@j2 json_, 'price')
|
||||
3
|
||||
SELECT JsonGet_Int(@j2,'qty');
|
||||
JsonGet_Int(@j2,'qty')
|
||||
SELECT JsonGet_Int(@j2, 'qty');
|
||||
JsonGet_Int(@j2, 'qty')
|
||||
56
|
||||
SELECT JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','chose');
|
||||
JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','chose')
|
||||
SELECT JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose');
|
||||
JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose')
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1105 Value not found
|
||||
SELECT JsonGet_Int(JsonGet_String(Json_Array(Json_Array(45,28),Json_Array(36,45,89)),'[1]:*'),'[+]') sum;
|
||||
SELECT JsonGet_Int(JsonGet_String(Json_Array(Json_Array(45,28),Json_Array(36,45,89)), '[1]:*'), '[+]') sum;
|
||||
sum
|
||||
170
|
||||
SELECT department, JsonGet_Int(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||
SELECT department, JsonGet_Int(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"), 'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||
department Sumsal
|
||||
0021 28500
|
||||
0318 72230
|
||||
|
@ -348,41 +400,39 @@ department Sumsal
|
|||
SELECT JsonGet_Real(@j1, '[2]');
|
||||
JsonGet_Real(@j1, '[2]')
|
||||
36.000000000000000
|
||||
SELECT JsonGet_Real(@j1 json_,'[3]',2);
|
||||
JsonGet_Real(@j1 json_,'[3]',2)
|
||||
SELECT JsonGet_Real(@j1 json_, '[3]', 2);
|
||||
JsonGet_Real(@j1 json_, '[3]', 2)
|
||||
45.00
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'[3]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89),'[3]')
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[3]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89), '[3]')
|
||||
45.000000000000000
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'["+"]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89),'["+"]')
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '["+"]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89), '["+"]')
|
||||
45.000000000000000
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'[+]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89),'[+]')
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[+]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89), '[+]')
|
||||
243.000000000000000
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'[!]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89),'[!]')
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[!]');
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89), '[!]')
|
||||
48.600000000000000
|
||||
SELECT JsonGet_Real(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]');
|
||||
JsonGet_Real(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]')
|
||||
SELECT JsonGet_Real(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]');
|
||||
JsonGet_Real(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]')
|
||||
36.000000000000000
|
||||
SELECT JsonGet_Real(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'price');
|
||||
JsonGet_Real(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'price')
|
||||
SELECT JsonGet_Real(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price');
|
||||
JsonGet_Real(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price')
|
||||
3.141600000000000
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_,'qty');
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_,'qty')
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_, 'qty');
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_, 'qty')
|
||||
56.000000000000000
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','price');
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','price')
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price');
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price')
|
||||
3.141600000000000
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','price', 4);
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','price', 4)
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price', 4);
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price', 4)
|
||||
3.1416
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','chose');
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','chose')
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose');
|
||||
JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose')
|
||||
NULL
|
||||
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;
|
||||
department Sumsal
|
||||
0021 28500.000000000000000
|
||||
|
@ -401,12 +451,12 @@ JsonGet_Real(Json_Array(45,28,36,45,89), '[!]', 2) "Avg";
|
|||
Rank Number Concat Sum Avg
|
||||
89 5 45,28,36,45,89 243 48.60
|
||||
SELECT
|
||||
JsonGet_String('{"qty":7,"price":29.50,"garanty":null}','price') "String",
|
||||
JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}','price') "Int",
|
||||
JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}','price') "Real";
|
||||
JsonGet_String('{"qty":7,"price":29.50,"garanty":null}', 'price') "String",
|
||||
JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}', 'price') "Int",
|
||||
JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}', 'price') "Real";
|
||||
String Int Real
|
||||
29.50 29 29.500000000000000
|
||||
SELECT JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}','price',3) "Real";
|
||||
SELECT JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}', 'price', 3) "Real";
|
||||
Real
|
||||
29.500
|
||||
#
|
||||
|
@ -515,7 +565,7 @@ Json_Locate_All('test/biblio.json' jfile_, 'Knab')
|
|||
#
|
||||
# Testing json files
|
||||
#
|
||||
select Jfile_Make('[{"_id":5,"type":"food","item":"beer","taste":"light","price":5.65,"ratings":[5,8,9]},
|
||||
SELECT Jfile_Make('[{"_id":5,"type":"food","item":"beer","taste":"light","price":5.65,"ratings":[5,8,9]},
|
||||
{"_id":6,"type":"car","item":"roadster","mileage":56000,"ratings":[6,9]},
|
||||
{"_id":7,"type":"food","item":"meat","origin":"argentina","ratings":[2,4]},
|
||||
{"_id":8,"type":"furniture","item":"table","size":{"W":60,"L":80,"H":40},"ratings":[5,8,7]}]', 'test/fx.json', 0) AS NewFile;
|
||||
|
|
588
storage/connect/mysql-test/connect/r/json_udf_bin.result
Normal file
588
storage/connect/mysql-test/connect/r/json_udf_bin.result
Normal file
|
@ -0,0 +1,588 @@
|
|||
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=VIR BLOCK_SIZE=3;
|
||||
#
|
||||
# Test Jbin UDF's
|
||||
#
|
||||
SELECT Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), n) from t1;
|
||||
Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), n)
|
||||
[56,3.141600,"My name is \"Foo\"",null,1]
|
||||
[56,3.141600,"My name is \"Foo\"",null,2]
|
||||
[56,3.141600,"My name is \"Foo\"",null,3]
|
||||
SELECT Json_Array_Add(Jbin_Array(n, 3.1416, 'My name is "Foo"', NULL), n) from t1;
|
||||
Json_Array_Add(Jbin_Array(n, 3.1416, 'My name is "Foo"', NULL), n)
|
||||
[1,3.141600,"My name is \"Foo\"",null,1]
|
||||
[2,3.141600,"My name is \"Foo\"",null,2]
|
||||
[3,3.141600,"My name is \"Foo\"",null,3]
|
||||
SELECT Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), Jbin_Array('a','b',n)) from t1;
|
||||
Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), Jbin_Array('a','b',n))
|
||||
[56,3.141600,"My name is \"Foo\"",null,["a","b",1]]
|
||||
[56,3.141600,"My name is \"Foo\"",null,["a","b",2]]
|
||||
[56,3.141600,"My name is \"Foo\"",null,["a","b",3]]
|
||||
SELECT Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), JsonGet_String(Jbin_Array('a','b','c'), '[1]'));
|
||||
Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), JsonGet_String(Jbin_Array('a','b','c'), '[1]'))
|
||||
[56,3.141600,"My name is \"Foo\"",null,"b"]
|
||||
SELECT Json_Array_Delete(Jbin_Array_Add_Values(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), "One more", 2), 4);
|
||||
Json_Array_Delete(Jbin_Array_Add_Values(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), "One more", 2), 4)
|
||||
[56,3.141600,"My name is \"Foo\"",null,2]
|
||||
SELECT Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), NULL), '[1]', 1);
|
||||
Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), NULL), '[1]', 1)
|
||||
[56,[3.141600],null]
|
||||
SELECT Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), TRUE), 1, '[1]');
|
||||
Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), TRUE), 1, '[1]')
|
||||
[56,[3.141600],true]
|
||||
SELECT Json_Array(1, TRUE, 0, FALSE);
|
||||
Json_Array(1, TRUE, 0, FALSE)
|
||||
[1,true,0,false]
|
||||
SELECT Json_Serialize(Jbin_Array(TRUE, FALSE));
|
||||
Json_Serialize(Jbin_Array(TRUE, FALSE))
|
||||
[true,false]
|
||||
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL);
|
||||
Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL)
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null}
|
||||
SELECT Json_Serialize(Jbin_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL));
|
||||
Json_Serialize(Jbin_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL))
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null}
|
||||
SELECT Jbin_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty');
|
||||
ERROR HY000: Can't initialize function 'jbin_object_key'; This function must have an even number of arguments
|
||||
SELECT Json_Object_Add(Jbin_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color);
|
||||
Json_Object_Add(Jbin_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color)
|
||||
{"qty":56,"price":3.141600,"truc":"machin","garanty":null,"color":"blue"}
|
||||
SELECT Json_Object_Add(Jbin_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price);
|
||||
Json_Object_Add(Jbin_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price)
|
||||
{"qty":56,"price":45.990000,"truc":"machin","garanty":null}
|
||||
SELECT Json_Object_Add(Jbin_Object_Nonull(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color);
|
||||
Json_Object_Add(Jbin_Object_Nonull(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color)
|
||||
{"qty":56,"price":3.141600,"truc":"machin","color":"blue"}
|
||||
SELECT Json_Object_Add(Jbin_Object_Nonull(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price);
|
||||
Json_Object_Add(Jbin_Object_Nonull(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price)
|
||||
{"qty":56,"price":45.990000,"truc":"machin"}
|
||||
#
|
||||
# Test Jbin file UDF's
|
||||
#
|
||||
SELECT Json_Serialize(Jbin_File('gloss.json'));
|
||||
Json_Serialize(Jbin_File('gloss.json'))
|
||||
{"glossary":{"title":"example glossary","GlossDiv":{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}}}
|
||||
SELECT JsonLocate(Jbin_File('gloss.json'),'XML');
|
||||
JsonLocate(Jbin_File('gloss.json'),'XML')
|
||||
glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso:[1]
|
||||
SELECT Json_Object_Key('first', 'foo', 'second', Jbin_Array('a', 33));
|
||||
Json_Object_Key('first', 'foo', 'second', Jbin_Array('a', 33))
|
||||
{"first":"foo","second":["a",33]}
|
||||
SELECT Json_Get_Item(Json_Array('a','b','c'), '[1]');
|
||||
Json_Get_Item(Json_Array('a','b','c'), '[1]')
|
||||
NULL
|
||||
SELECT Json_Get_Item(Json_Object('foo' AS "first", Json_Array('a', 33) AS "json_second"), 'second') AS "item";
|
||||
item
|
||||
["a",33]
|
||||
SELECT Json_Get_Item(Jbin_Object('foo' first, Jbin_Array('a', 33) jbin_second), 'second:*') item;
|
||||
item
|
||||
["a",33]
|
||||
SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv');
|
||||
Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv')
|
||||
{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}
|
||||
SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv'));
|
||||
Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv'))
|
||||
{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}
|
||||
SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:*');
|
||||
Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:*')
|
||||
{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}
|
||||
SELECT JsonGet_String(Json_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso') lang;
|
||||
lang
|
||||
GML
|
||||
SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso') "See also";
|
||||
See also
|
||||
["GML","XML"]
|
||||
SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso')) "See also";
|
||||
See also
|
||||
["GML","XML"]
|
||||
SELECT JsonGet_String(Json_Get_Item(Json_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso'),'[0]') lang;
|
||||
lang
|
||||
GML
|
||||
#
|
||||
# Test Item Get/Set/Insert/Update UDF's
|
||||
#
|
||||
SELECT Json_Get_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[]');
|
||||
Json_Get_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[]')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
SELECT Json_Get_Item(Jbin_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[1]');
|
||||
Json_Get_Item(Jbin_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[1]')
|
||||
NULL
|
||||
SELECT Json_Get_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '[1]');
|
||||
Json_Get_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '[1]')
|
||||
NULL
|
||||
SELECT Json_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)));
|
||||
Json_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)))
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 'foo');
|
||||
ERROR HY000: Can't initialize function 'json_set_item'; This function must have an odd number of arguments
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq')
|
||||
[1,2,{"trois":3,"quatre":4,"cinq":5}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 7, '[1]');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 7, '[1]')
|
||||
[1,7,{"trois":3,"quatre":4}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 7, '[1]');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 7, '[1]')
|
||||
[1,7,{"trois":3,"quatre":4,"cinq":5}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Json_Array(7, 8, 9), '[1]');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Json_Array(7, 8, 9), '[1]')
|
||||
[1,[7,8,9],{"trois":3,"quatre":4}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]')
|
||||
[1,2,[7,8,9]]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]:*');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]:*')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
Warnings:
|
||||
Warning 1105 Invalid specification * in a write path
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 3.1416, 'foo');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 3.1416, 'foo')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 'toto', '[1]:[2]');
|
||||
Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 'toto', '[1]:[2]')
|
||||
[1,[7,8,"toto"],{"trois":3,"quatre":4}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 300, '[2]:nxt:total:[]');
|
||||
Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 300, '[2]:nxt:total:[]')
|
||||
[1,[7,8,9],{"trois":3,"quatre":4,"nxt":{"total":[300]}}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 300, '[2]:nxt:total:[]');
|
||||
Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 300, '[2]:nxt:total:[]')
|
||||
[1,[7,8,9,10],{"trois":3,"quatre":4,"cinq":5,"nxt":{"total":[300]}}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[1]', 5, '[2]:cinq', 10, '[1]:[]');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[1]', 5, '[2]:cinq', 10, '[1]:[]')
|
||||
[1,[7,8,9,10],{"trois":3,"quatre":4,"cinq":5}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 44, '[2]:quatre');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 44, '[2]:quatre')
|
||||
[1,2,{"trois":3,"quatre":44}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, 'truc');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, 'truc')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '')
|
||||
[1,2,{"trois":3,"quatre":4},5]
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '*');
|
||||
Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '*')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
Warnings:
|
||||
Warning 1105 Invalid specification * in a write path
|
||||
SELECT Json_Serialize(Jbin_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq'));
|
||||
Json_Serialize(Jbin_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq'))
|
||||
[1,2,{"trois":3,"quatre":4,"cinq":5}]
|
||||
SELECT Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq');
|
||||
Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq')
|
||||
[1,2,{"trois":3,"quatre":4,"cinq":5}]
|
||||
SELECT Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq');
|
||||
Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
SELECT Json_Insert_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre');
|
||||
Json_Insert_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre')
|
||||
[1,[7,8,9,10],{"trois":3,"quatre":4,"cinq":5}]
|
||||
SELECT Json_Update_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre');
|
||||
Json_Update_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre')
|
||||
[1,[7,8,9],{"trois":3,"quatre":44}]
|
||||
SELECT Json_Insert_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]');
|
||||
Json_Insert_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]')
|
||||
[1,[7,8,9],{"trois":3,"quatre":4,"cinq":5,"nxt":{"total":[300]}}]
|
||||
SELECT Json_Update_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]');
|
||||
Json_Update_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]')
|
||||
[1,[7,10,9],{"trois":3,"quatre":4}]
|
||||
SELECT Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]');
|
||||
Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]')
|
||||
[1,2,{"trois":3,"quatre":4},5]
|
||||
SELECT Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]');
|
||||
Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]')
|
||||
[1,2,{"trois":3,"quatre":4}]
|
||||
#
|
||||
# Test merging items UDF's
|
||||
#
|
||||
SELECT Json_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f'));
|
||||
Json_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f'))
|
||||
["a","b","c","d","e","f"]
|
||||
SELECT Json_Item_Merge(Json_Array('a','b','c'), Json_Array('d','e','f')) AS "Result";
|
||||
Result
|
||||
["a","b","c","d","e","f"]
|
||||
SELECT Json_Array_Add(Jbin_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f')), 'and', 3);
|
||||
Json_Array_Add(Jbin_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f')), 'and', 3)
|
||||
["a","b","c","and","d","e","f"]
|
||||
SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f"));
|
||||
Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f"))
|
||||
{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6}
|
||||
SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",2 "c"), Jbin_Array('d','e','f'));
|
||||
Json_Item_Merge(Jbin_Object(1 "a",2 "b",2 "c"), Jbin_Array('d','e','f'))
|
||||
Binary Json object
|
||||
Warnings:
|
||||
Warning 1105 Second argument is not an object
|
||||
SELECT Json_Object_Add(Jbin_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f")), 'x' AS "and");
|
||||
Json_Object_Add(Jbin_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f")), 'x' AS "and")
|
||||
{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"and":"x"}
|
||||
SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "a",5 "e",6 "f"));
|
||||
Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "a",5 "e",6 "f"))
|
||||
{"a":4,"b":2,"c":3,"e":5,"f":6}
|
||||
SELECT Json_Item_Merge('foo', Json_Array('d','e','f'));
|
||||
ERROR HY000: Can't initialize function 'json_item_merge'; First argument must be a json item
|
||||
#
|
||||
# Test making file UDF's
|
||||
#
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
SELECT Json_File('bt1.json');
|
||||
Json_File('bt1.json')
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c"
|
||||
]
|
||||
|
||||
SELECT Json_File(Jfile_Make(Jbin_File('bt1.json'), 0));
|
||||
Json_File(Jfile_Make(Jbin_File('bt1.json'), 0))
|
||||
"a"
|
||||
"b"
|
||||
"c"
|
||||
|
||||
SELECT Json_File(Jfile_Make(Jbin_File('bt1.json'), 1));
|
||||
Json_File(Jfile_Make(Jbin_File('bt1.json'), 1))
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c"
|
||||
]
|
||||
|
||||
SELECT Json_File(Jfile_Make(Jbin_File('bt1.json'), 2));
|
||||
Json_File(Jfile_Make(Jbin_File('bt1.json'), 2))
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c"
|
||||
]
|
||||
|
||||
SELECT Json_File('bt1.json', 0);
|
||||
Json_File('bt1.json', 0)
|
||||
["a","b","c"]
|
||||
Warnings:
|
||||
Warning 1105 File pretty format doesn't match the specified pretty value
|
||||
SELECT Json_File('bt1.json', 1);
|
||||
Json_File('bt1.json', 1)
|
||||
["a","b","c"]
|
||||
Warnings:
|
||||
Warning 1105 File pretty format doesn't match the specified pretty value
|
||||
SELECT Json_File('bt1.json', 2);
|
||||
Json_File('bt1.json', 2)
|
||||
["a","b","c"]
|
||||
SELECT Json_Serialize(Jbin_Array('a','b','c'));
|
||||
Json_Serialize(Jbin_Array('a','b','c'))
|
||||
["a","b","c"]
|
||||
SELECT Json_Serialize(Jbin_Array_Add(Jbin_File('not_exist.json'), 'd'));
|
||||
Json_Serialize(Jbin_Array_Add(Jbin_File('not_exist.json'), 'd'))
|
||||
Null json tree
|
||||
Warnings:
|
||||
Warning 1105 Open(map) error 2 on not_exist.json
|
||||
Warning 1105 First argument is not an array
|
||||
# This does not modify the file
|
||||
SELECT Json_Serialize(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'));
|
||||
Json_Serialize(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'))
|
||||
["a","b","c","d"]
|
||||
SELECT Json_File('bt1.json', 2);
|
||||
Json_File('bt1.json', 2)
|
||||
["a","b","c"]
|
||||
# This does modify the file
|
||||
SELECT Json_Array_Add(Jbin_File('bt1.json'), 'd');
|
||||
Json_Array_Add(Jbin_File('bt1.json'), 'd')
|
||||
bt1.json
|
||||
SELECT Json_File('bt1.json', 2);
|
||||
Json_File('bt1.json', 2)
|
||||
["a","b","c","d"]
|
||||
# Back to the original file
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_Array('a','b','c'), 'd') "Jbin_foo") AS "Result";
|
||||
Result
|
||||
{"foo":["a","b","c","d"]}
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd')) AS "Result";
|
||||
Result
|
||||
{"Array_Add(Jbin_File('bt1.json'), 'd')":["a","b","c","d"]}
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1") AS "Result";
|
||||
Result
|
||||
{"bt1":["a","b","c","d"]}
|
||||
# This does modify the file
|
||||
SELECT Json_Object(Json_Array_Add(Jbin_File('bt1.json'), 'd') "Jfile_bt1") AS "Result";
|
||||
Result
|
||||
{"bt1":["a","b","c","d"]}
|
||||
SELECT Json_File('bt1.json');
|
||||
Json_File('bt1.json')
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d"
|
||||
]
|
||||
|
||||
SELECT Json_File(Json_Array_Delete(Jbin_File('bt1.json'), 3), 2);
|
||||
Json_File(Json_Array_Delete(Jbin_File('bt1.json'), 3), 2)
|
||||
["a","b","c"]
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1", n "t1") AS "Result" from t1;
|
||||
Result
|
||||
{"bt1":["a","b","c","d"],"t1":1}
|
||||
{"bt1":["a","b","c","d"],"t1":2}
|
||||
{"bt1":["a","b","c","d"],"t1":3}
|
||||
SELECT Json_File(Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), 'e')) AS "Result";
|
||||
Result
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e"
|
||||
]
|
||||
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
SELECT Json_File(Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), 'e')) AS "Result" from t1;
|
||||
Result
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e"
|
||||
]
|
||||
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e"
|
||||
]
|
||||
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e"
|
||||
]
|
||||
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
SELECT Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), n) AS "Result" from t1;
|
||||
Result
|
||||
bt1.json
|
||||
bt1.json
|
||||
bt1.json
|
||||
# Show modified file
|
||||
SELECT Json_File('bt1.json');
|
||||
Json_File('bt1.json')
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
1,
|
||||
"d",
|
||||
2,
|
||||
"d",
|
||||
3
|
||||
]
|
||||
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
SELECT Json_Array_Add(Jbin_File('bt1.json'), n) AS "Result" from t1;
|
||||
Result
|
||||
bt1.json
|
||||
bt1.json
|
||||
bt1.json
|
||||
# Show modified file
|
||||
SELECT Json_File('bt1.json');
|
||||
Json_File('bt1.json')
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
1,
|
||||
2,
|
||||
3
|
||||
]
|
||||
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
SELECT Json_File(Jbin_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f')));
|
||||
Json_File(Jbin_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f')))
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c"
|
||||
]
|
||||
|
||||
SELECT Json_File(Json_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f')));
|
||||
Json_File(Json_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f')))
|
||||
[
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e",
|
||||
"f"
|
||||
]
|
||||
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json')
|
||||
bt1.json
|
||||
# Test DELETE from file
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 1)) AS "Result";
|
||||
Result
|
||||
{"Array_Delete(Jbin_File('bt1.json'), 1)":["a","c"]}
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 2) "Jbin_bt1") AS "Result";
|
||||
Result
|
||||
{"bt1":["a","b"]}
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 0) "Jbin_bt1", n "t1") AS "Result" from t1;
|
||||
Result
|
||||
{"bt1":["b","c"],"t1":1}
|
||||
{"bt1":["b","c"],"t1":2}
|
||||
{"bt1":["b","c"],"t1":3}
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1;
|
||||
Result
|
||||
{"bt1":["a","b"]}
|
||||
{"bt1":["a"]}
|
||||
{"bt1":[]}
|
||||
SELECT Json_Object(Json_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1;
|
||||
Result
|
||||
{"bt1":["a","b"]}
|
||||
{"bt1":["a"]}
|
||||
{"bt1":[]}
|
||||
# Show modified file
|
||||
SELECT Json_File('bt1.json');
|
||||
Json_File('bt1.json')
|
||||
[
|
||||
|
||||
]
|
||||
|
||||
# Object file
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0)
|
||||
bt2.json
|
||||
SELECT Json_File('bt2.json', 0);
|
||||
Json_File('bt2.json', 0)
|
||||
{"a":1,"b":2,"c":3}
|
||||
SELECT Json_File('bt2.json');
|
||||
Json_File('bt2.json')
|
||||
{"a":1,"b":2,"c":3}
|
||||
|
||||
SELECT Json_Serialize(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"));
|
||||
Json_Serialize(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"))
|
||||
{"a":1,"b":2,"c":3,"d":4}
|
||||
# First query (file not modified)
|
||||
SELECT Json_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jbin_new") AS "Result";
|
||||
Result
|
||||
{"new":{"a":1,"b":2,"c":3,"d":4}}
|
||||
# First query (file modified)
|
||||
SELECT Json_Object(Json_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jfile_new") AS "Result";
|
||||
Result
|
||||
{"new":{"a":1,"b":2,"c":3,"d":4}}
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0)
|
||||
bt2.json
|
||||
SELECT Json_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d") "Jbin_new", n "t1") AS "Result" from t1;
|
||||
Result
|
||||
{"new":{"a":1,"b":2,"c":3,"d":4},"t1":1}
|
||||
{"new":{"a":1,"b":2,"c":3,"d":4},"t1":2}
|
||||
{"new":{"a":1,"b":2,"c":3,"d":4},"t1":3}
|
||||
SELECT Json_File(Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), 5 "e")) AS "Result";
|
||||
Result
|
||||
{"a":1,"b":2,"c":3,"d":4,"e":5}
|
||||
|
||||
SELECT Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), 5 "e") AS "Result" from t1;
|
||||
Result
|
||||
bt2.json
|
||||
bt2.json
|
||||
bt2.json
|
||||
SELECT Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), n "n") AS "Result" from t1;
|
||||
Result
|
||||
bt2.json
|
||||
bt2.json
|
||||
bt2.json
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0)
|
||||
bt2.json
|
||||
SELECT Json_Object_Add(Jbin_File('bt2.json'), n) AS "Result" from t1;
|
||||
Result
|
||||
bt2.json
|
||||
bt2.json
|
||||
bt2.json
|
||||
SELECT Json_File('bt2.json');
|
||||
Json_File('bt2.json')
|
||||
{"a":1,"b":2,"c":3,"n":3}
|
||||
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0)
|
||||
bt2.json
|
||||
SELECT Json_Serialize(Jbin_Item_Merge(Jbin_File('bt2.json'), Jbin_Object(4 "d",5 "e",6 "f"))) AS "Result";
|
||||
Result
|
||||
{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6}
|
||||
SELECT Json_File(Json_Item_Merge(Jbin_File('bt2.json'), Jbin_Object(4 "d",5 "e",6 "f"))) AS "Result";
|
||||
Result
|
||||
{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6}
|
||||
|
||||
SELECT Json_Item_Merge(Json_Object(1 "a", 2 "b", 3 "c"), Json_Object(4 "d",5 "b",6 "f")) AS "Result";
|
||||
Result
|
||||
{"a":1,"b":5,"c":3,"d":4,"f":6}
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'b')) AS "Result";
|
||||
Result
|
||||
{"Object_Delete(Jbin_File('bt2.json'), 'b')":{"a":1,"c":3,"d":4,"e":5,"f":6}}
|
||||
SELECT Json_Object(Jbin_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result";
|
||||
Result
|
||||
{"bt1":{"a":1,"d":4,"e":5,"f":6}}
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result";
|
||||
Result
|
||||
{"bt1":{"a":1,"d":4,"e":5,"f":6}}
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jfile_bt1") AS "Result";
|
||||
Result
|
||||
{"bt1":{"a":1,"d":4,"e":5,"f":6}}
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'a') "Jbin_bt1", n "t1") AS "Result" from t1;
|
||||
Result
|
||||
{"bt1":{"d":4,"e":5,"f":6},"t1":1}
|
||||
{"bt1":{"d":4,"e":5,"f":6},"t1":2}
|
||||
{"bt1":{"d":4,"e":5,"f":6},"t1":3}
|
||||
SELECT Json_Serialize(Jbin_Object_List(Jbin_File('bt2.json'))) "Key list";
|
||||
Key list
|
||||
["d","e","f"]
|
||||
SELECT Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0);
|
||||
Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0)
|
||||
bt3.json
|
||||
SELECT Json_Array_Add(Json_File('bt3.json', 'b'), 66);
|
||||
Json_Array_Add(Json_File('bt3.json', 'b'), 66)
|
||||
[44,55,66]
|
||||
SELECT Json_Array_Add(Json_File('bt3.json'), 66, 'b');
|
||||
Json_Array_Add(Json_File('bt3.json'), 66, 'b')
|
||||
{"a":1,"b":[44,55,66]}
|
||||
SELECT Json_Array_Add(Jbin_File('bt3.json', 'b'), 66);
|
||||
Json_Array_Add(Jbin_File('bt3.json', 'b'), 66)
|
||||
bt3.json
|
||||
SELECT Json_File('bt3.json', 3);
|
||||
Json_File('bt3.json', 3)
|
||||
{"a":1,"b":[44,55,66]}
|
||||
SELECT Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0);
|
||||
Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0)
|
||||
bt3.json
|
||||
CREATE TABLE t2 (
|
||||
n INT KEY,
|
||||
jfile_cols CHAR(12) NOT NULL)
|
||||
ENGINE= MYISAM;
|
||||
INSERT INTO t2 VALUES(1,'bt3.json');
|
||||
# In this table, the jfile_cols column just contains a file name
|
||||
UPDATE t2 SET jfile_cols = Json_Array_Add(Jbin_File('bt3.json', 'b'), 66) WHERE n = 1;
|
||||
SELECT JsonGet_String(jfile_cols, '*') FROM t2;
|
||||
JsonGet_String(jfile_cols, '*')
|
||||
{"a":1,"b":[44,55,66]}
|
||||
UPDATE t2 SET jfile_cols = Json_Insert_Item(jfile_cols, 77, 'b:[]') WHERE n = 1;
|
||||
SELECT JsonGet_String(jfile_cols, 'b:*') FROM t2;
|
||||
JsonGet_String(jfile_cols, 'b:*')
|
||||
[44,55,66,77]
|
||||
UPDATE t2 SET jfile_cols = Json_Insert_Item(Jbin_Insert_Item(jfile_cols, 88, 'b:') , 99, 'b:') WHERE n = 1;
|
||||
SELECT JsonGet_String(jfile_cols, '*') FROM t2;
|
||||
JsonGet_String(jfile_cols, '*')
|
||||
{"a":1,"b":[44,55,66,77,88,99]}
|
||||
DROP TABLE t1, t2;
|
22
storage/connect/mysql-test/connect/std_data/gloss.json
Normal file
22
storage/connect/mysql-test/connect/std_data/gloss.json
Normal file
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"glossary": {
|
||||
"title": "example glossary",
|
||||
"GlossDiv": {
|
||||
"title": "S",
|
||||
"GlossList": {
|
||||
"GlossEntry": {
|
||||
"ID": "SGML",
|
||||
"SortAs": "SGML",
|
||||
"GlossTerm": "Standard Generalized Markup Language",
|
||||
"Acronym": "SGML",
|
||||
"Abbrev": "ISO 8879:1986",
|
||||
"GlossDef": {
|
||||
"para": "A meta-markup language, used to create markup languages such as DocBook.",
|
||||
"GlossSeeAlso": ["GML", "XML"]
|
||||
},
|
||||
"GlossSee": "markup"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -135,7 +135,7 @@ CREATE TABLE t1
|
|||
Year int(4) FIELD_FORMAT='DATEPUB',
|
||||
INDEX IX(ISBN)
|
||||
)
|
||||
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='bib0.json' LRECL=350 OPTION_LIST='Pretty=0';
|
||||
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='bib0.json' LRECL=320 OPTION_LIST='Pretty=0';
|
||||
SHOW INDEX FROM t1;
|
||||
SELECT * FROM t1;
|
||||
DESCRIBE SELECT * FROM t1 WHERE ISBN = '9782212090819';
|
||||
|
|
|
@ -9,40 +9,50 @@ if (!$HA_CONNECT_SO) {
|
|||
--skip Needs a dynamically built ha_connect.so
|
||||
}
|
||||
|
||||
CREATE FUNCTION json_array RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_array_add RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_array_add_values RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_array_delete RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_object RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_object_nonull RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_object_add RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_object_delete RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_object_list RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jsonvalue RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE AGGREGATE FUNCTION json_array_grp RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE AGGREGATE FUNCTION json_object_grp RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_item_merge RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_get_item RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jsonget_string RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jsonget_int RETURNS INTEGER SONAME 'ha_connect';
|
||||
CREATE FUNCTION jsonget_real RETURNS REAL SONAME 'ha_connect';
|
||||
CREATE FUNCTION jsonlocate RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_locate_all RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_file RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jfile_make RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION json_serialize RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jbin_array RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jbin_array_add_values RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jbin_array_add RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jbin_array_delete RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jbin_object RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jbin_object_nonull RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jbin_object_add RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jbin_object_delete RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jbin_object_list RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jbin_get_item RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jbin_item_merge RETURNS STRING SONAME 'ha_connect';
|
||||
CREATE FUNCTION jbin_file RETURNS STRING SONAME 'ha_connect';
|
||||
--eval CREATE FUNCTION json_array RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_array_add RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_array_add_values RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_array_delete RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_object RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_object_nonull RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_object_key RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_object_add RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_object_delete RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_object_list RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsonvalue RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE AGGREGATE FUNCTION json_array_grp RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE AGGREGATE FUNCTION json_object_grp RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsonget_string RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsonget_int RETURNS INTEGER SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsonget_real RETURNS REAL SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsonlocate RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_locate_all RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_file RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jfile_make RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsoncontains RETURNS INTEGER SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jsoncontains_path RETURNS INTEGER SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_get_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_set_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_insert_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_update_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_item_merge RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION json_serialize RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_array RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_array_add_values RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_array_add RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_array_delete RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_object RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_object_nonull RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_object_key RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_object_add RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_object_delete RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_object_list RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_get_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_item_merge RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_set_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_insert_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_update_item RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
--eval CREATE FUNCTION jbin_file RETURNS STRING SONAME '$HA_CONNECT_SO';
|
||||
|
||||
--enable_query_log
|
||||
|
||||
|
|
|
@ -11,50 +11,66 @@ CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=VIR BLOCK_SIZE=5;
|
|||
--echo # Test UDF's with constant arguments
|
||||
--echo #
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT JsonValue(56,3.1416,'foo',NULL);
|
||||
SELECT JsonValue(56, 3.1416, 'foo', NULL);
|
||||
SELECT JsonValue(3.1416);
|
||||
SELECT JsonValue(-80);
|
||||
SELECT JsonValue('foo');
|
||||
SELECT JsonValue(9223372036854775807);
|
||||
SELECT JsonValue(NULL);
|
||||
SELECT JsonValue(TRUE);
|
||||
SELECT JsonValue(FALSE);
|
||||
SELECT JsonValue();
|
||||
SELECT JsonValue('[11,22,33]' json_) FROM t1;
|
||||
SELECT JsonValue('[11, 22, 33]' json_) FROM t1;
|
||||
#
|
||||
SELECT Json_Array();
|
||||
SELECT Json_Array(56,3.1416,'My name is "Foo"',NULL);
|
||||
SELECT Json_Array(Json_Array(56,3.1416,'foo'),NULL);
|
||||
SELECT Json_Array(56, 3.1416, 'My name is "Foo"', NULL);
|
||||
SELECT Json_Array(Json_Array(56, 3.1416, 'foo'), TRUE);
|
||||
#
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Array_Add(Json_Array(56,3.1416,'foo',NULL)) Array;
|
||||
SELECT Json_Array_Add(Json_Array(56,3.1416,'foo',NULL),'One more') Array;
|
||||
SELECT Json_Array_Add(Json_Array(56, 3.1416, 'foo', NULL)) Array;
|
||||
SELECT Json_Array_Add(Json_Array(56, 3.1416, 'foo', NULL), 'One more') Array;
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Array_Add(JsonValue('one value'),'One more');
|
||||
SELECT Json_Array_Add(JsonValue('one value'), 'One more');
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Array_Add('one value','One more');
|
||||
SELECT Json_Array_Add('one value' json_,'One more');
|
||||
SELECT Json_Array_Add('one value', 'One more');
|
||||
SELECT Json_Array_Add('one value' json_, 'One more');
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Array_Add(5 json_, 'One more');
|
||||
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 0);
|
||||
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 2) Array;
|
||||
SELECT Json_Array_Add('[5,3,8,7,9]' json_, 4, 9);
|
||||
SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), '[2]', 33, 1);
|
||||
SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, '[2]', 1);
|
||||
SELECT Json_Array_Add(Json_Array(1, 2, Json_Array(11, 22)), 33, 1, '[2]');
|
||||
#
|
||||
SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin', NULL), 'One more', 'Two more') Array;
|
||||
SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin'), 'One more', 'Two more') Array FROM t1;
|
||||
SELECT Json_Array_Add_Values(Json_Array(56, 3.1416, 'machin'), n) Array FROM t1;
|
||||
SELECT Json_Array_Add_Values(Json_Array(n, 3.1416, 'machin'), n) Array FROM t1;
|
||||
SELECT Json_Array_Add_Values('[56]', 3.1416, 'machin') Array;
|
||||
#
|
||||
SELECT Json_Array_Delete(Json_Array(56,3.1416,'My name is "Foo"',NULL),0);
|
||||
SELECT Json_Array_Delete(Json_Object(56,3.1416,'My name is Foo',NULL),2);
|
||||
SELECT Json_Array_Delete(Json_Array(56,3.1416,'My name is "Foo"',NULL),'2');
|
||||
SELECT Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), 0);
|
||||
SELECT Json_Array_Delete(Json_Object(56, 3.1416, 'My name is Foo', NULL), 2);
|
||||
SELECT Json_Array_Delete(Json_Array(56, 3.1416, 'My name is "Foo"', NULL), '2');
|
||||
SELECT Json_Array_Delete(json_array(56, 3.1416, 'My name is "Foo"', NULL), '2', 2);
|
||||
#
|
||||
SELECT Json_Object(56, 3.1416, 'foo', NULL);
|
||||
SELECT Json_Object(56 qty, 3.1416 price, 'foo' truc, NULL garanty);
|
||||
SELECT Json_Object();
|
||||
SELECT Json_Object(Json_Array(56, 3.1416, 'foo'), NULL);
|
||||
SELECT Json_Array(Json_Object(56 "qty", 3.1416 "price", 'foo') ,NULL);
|
||||
SELECT Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'blue' color);
|
||||
SELECT Json_Object_Add(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 45.99 price);
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'truc');
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty), 'chose');
|
||||
SELECT Json_Object_List(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty)) "Key List";
|
||||
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL);
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty');
|
||||
#
|
||||
SELECT Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color);
|
||||
SELECT Json_Object_Add(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price);
|
||||
SELECT Json_Object_Add(Json_File('notexist.json'), 'cheese' item, '[1]', 1);
|
||||
#
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'truc');
|
||||
SELECT Json_Object_Delete(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'chose');
|
||||
#
|
||||
SELECT Json_Object_List(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty)) "Key List";
|
||||
SELECT Json_Object_List('{"qty":56, "price":3.1416, "truc":"machin", "garanty":null}') "Key List";
|
||||
|
||||
--echo #
|
||||
|
@ -93,15 +109,19 @@ CREATE TABLE t3 (
|
|||
SELECT Json_Object(SERIALNO, NAME, TITLE, SALARY) FROM t3 WHERE NAME = 'MERCHANT';
|
||||
SELECT DEPARTMENT, Json_Array_Grp(NAME) FROM t3 GROUP BY DEPARTMENT;
|
||||
SET connect_json_grp_size=30;
|
||||
SELECT Json_Object(title, Json_Array_Grp(name) `json_names`) from t3 GROUP BY title;
|
||||
SELECT Json_Array(DEPARTMENT, Json_Array_Grp(NAME)) FROM t3 GROUP BY DEPARTMENT;
|
||||
SELECT Json_Object(DEPARTMENT, Json_Array_Grp(NAME) json_NAMES) FROM t3 GROUP BY DEPARTMENT;
|
||||
SELECT Json_Object(DEPARTMENT, Json_Array_Grp(Json_Object(SERIALNO, NAME, TITLE, SALARY)) json_EMPLOYES) FROM t3 GROUP BY DEPARTMENT;
|
||||
SELECT Json_Object(DEPARTMENT, TITLE, Json_Array_Grp(Json_Object(SERIALNO, NAME, SALARY)) json_EMPLOYES) FROM t3 GROUP BY DEPARTMENT, TITLE;
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Object_Grp(SALARY) FROM t3;
|
||||
SELECT Json_Object_Grp(SALARY, NAME) FROM t3;
|
||||
SELECT Json_Object(DEPARTMENT, Json_Object_Grp(SALARY, NAME) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT;
|
||||
SELECT Json_Object_Grp(NAME, SALARY) FROM t3;
|
||||
SELECT Json_Object(DEPARTMENT, Json_Object_Grp(NAME, SALARY) "Json_SALARIES") FROM t3 GROUP BY DEPARTMENT;
|
||||
SELECT Json_Array_Grp(NAME) FROM t3;
|
||||
#
|
||||
SELECT Json_Object_Key(name, title) FROM t3 WHERE DEPARTMENT = 318;
|
||||
SELECT Json_Object_Grp(name, title) FROM t3 WHERE DEPARTMENT = 318;
|
||||
|
||||
--echo #
|
||||
--echo # Test value getting UDF's
|
||||
|
@ -127,31 +147,31 @@ SELECT department, JsonGet_String(Json_Object(department, Json_Array_Grp(salary)
|
|||
SELECT JsonGet_Int(@j1, '[4]');
|
||||
SELECT JsonGet_Int(@j1, '[#]');
|
||||
SELECT JsonGet_Int(@j1, '[+]');
|
||||
SELECT JsonGet_Int(@j1 json_,'[3]');
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89),'[3]');
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89),'["+"]');
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89),'[+]');
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]');
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28),json_array(36,45,89)),'[0]:[1]');
|
||||
SELECT JsonGet_Int(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'qty');
|
||||
SELECT JsonGet_Int(@j2 json_,'price');
|
||||
SELECT JsonGet_Int(@j2,'qty');
|
||||
SELECT JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','chose');
|
||||
SELECT JsonGet_Int(JsonGet_String(Json_Array(Json_Array(45,28),Json_Array(36,45,89)),'[1]:*'),'[+]') sum;
|
||||
SELECT department, JsonGet_Int(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||
SELECT JsonGet_Int(@j1 json_, '[3]');
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '[3]');
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '["+"]');
|
||||
SELECT JsonGet_Int(Json_Array(45,28,36,45,89), '[+]');
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]');
|
||||
SELECT JsonGet_Int(Json_Array(json_array(45,28), json_array(36,45,89)), '[0]:[1]');
|
||||
SELECT JsonGet_Int(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'qty');
|
||||
SELECT JsonGet_Int(@j2 json_, 'price');
|
||||
SELECT JsonGet_Int(@j2, 'qty');
|
||||
SELECT JsonGet_Int('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose');
|
||||
SELECT JsonGet_Int(JsonGet_String(Json_Array(Json_Array(45,28),Json_Array(36,45,89)), '[1]:*'), '[+]') sum;
|
||||
SELECT department, JsonGet_Int(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"), 'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||
#
|
||||
SELECT JsonGet_Real(@j1, '[2]');
|
||||
SELECT JsonGet_Real(@j1 json_,'[3]',2);
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'[3]');
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'["+"]');
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'[+]');
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89),'[!]');
|
||||
SELECT JsonGet_Real(Json_Array(json_array(45,28),json_array(36,45,89)),'[1]:[0]');
|
||||
SELECT JsonGet_Real(Json_Object(56 qty,3.1416 price,'machin' truc, NULL garanty),'price');
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_,'qty');
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','price');
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','price', 4);
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}','chose');
|
||||
SELECT JsonGet_Real(@j1 json_, '[3]', 2);
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[3]');
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '["+"]');
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[+]');
|
||||
SELECT JsonGet_Real(Json_Array(45,28,36,45,89), '[!]');
|
||||
SELECT JsonGet_Real(Json_Array(json_array(45,28), json_array(36,45,89)), '[1]:[0]');
|
||||
SELECT JsonGet_Real(Json_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'price');
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}' json_, 'qty');
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price');
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'price', 4);
|
||||
SELECT JsonGet_Real('{"qty":56,"price":3.141600,"truc":"machin","garanty":null}', 'chose');
|
||||
SELECT department, JsonGet_Real(Json_Object(department, Json_Array_Grp(salary) "Json_salaries"),'salaries:[+]') Sumsal FROM t3 GROUP BY department;
|
||||
|
||||
--echo #
|
||||
|
@ -164,10 +184,10 @@ SELECT
|
|||
JsonGet_Int(Json_Array(45,28,36,45,89), '[+]') "Sum",
|
||||
JsonGet_Real(Json_Array(45,28,36,45,89), '[!]', 2) "Avg";
|
||||
SELECT
|
||||
JsonGet_String('{"qty":7,"price":29.50,"garanty":null}','price') "String",
|
||||
JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}','price') "Int",
|
||||
JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}','price') "Real";
|
||||
SELECT JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}','price',3) "Real";
|
||||
JsonGet_String('{"qty":7,"price":29.50,"garanty":null}', 'price') "String",
|
||||
JsonGet_Int('{"qty":7,"price":29.50,"garanty":null}', 'price') "Int",
|
||||
JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}', 'price') "Real";
|
||||
SELECT JsonGet_Real('{"qty":7,"price":29.50,"garanty":null}', 'price', 3) "Real";
|
||||
|
||||
--echo #
|
||||
--echo # Testing Locate
|
||||
|
@ -206,7 +226,7 @@ SELECT Json_Locate_All('test/biblio.json' jfile_, 'Knab');
|
|||
--echo #
|
||||
--echo # Testing json files
|
||||
--echo #
|
||||
select Jfile_Make('[{"_id":5,"type":"food","item":"beer","taste":"light","price":5.65,"ratings":[5,8,9]},
|
||||
SELECT Jfile_Make('[{"_id":5,"type":"food","item":"beer","taste":"light","price":5.65,"ratings":[5,8,9]},
|
||||
{"_id":6,"type":"car","item":"roadster","mileage":56000,"ratings":[6,9]},
|
||||
{"_id":7,"type":"food","item":"meat","origin":"argentina","ratings":[2,4]},
|
||||
{"_id":8,"type":"furniture","item":"table","size":{"W":60,"L":80,"H":40},"ratings":[5,8,7]}]', 'test/fx.json', 0) AS NewFile;
|
||||
|
|
|
@ -1,38 +1,48 @@
|
|||
--disable_query_log
|
||||
|
||||
DROP FUNCTION jsonvalue;
|
||||
DROP FUNCTION json_array;
|
||||
DROP FUNCTION json_array_add;
|
||||
DROP FUNCTION json_array_add_values;
|
||||
DROP FUNCTION json_array_delete;
|
||||
DROP FUNCTION json_object;
|
||||
DROP FUNCTION json_object_nonull;
|
||||
DROP FUNCTION json_object_key;
|
||||
DROP FUNCTION json_object_add;
|
||||
DROP FUNCTION json_object_delete;
|
||||
DROP FUNCTION json_object_list;
|
||||
DROP FUNCTION jsonvalue;
|
||||
DROP FUNCTION json_array_grp;
|
||||
DROP FUNCTION json_object_grp;
|
||||
DROP FUNCTION json_item_merge;
|
||||
DROP FUNCTION json_get_item;
|
||||
DROP FUNCTION JsonGet_string;
|
||||
DROP FUNCTION JsonGet_int;
|
||||
DROP FUNCTION JsonGet_real;
|
||||
DROP FUNCTION jsonget_string;
|
||||
DROP FUNCTION jsonget_int;
|
||||
DROP FUNCTION jsonget_real;
|
||||
DROP FUNCTION jsonlocate;
|
||||
DROP FUNCTION json_locate_all;
|
||||
DROP FUNCTION json_file;
|
||||
DROP FUNCTION json_serialize;
|
||||
DROP FUNCTION jfile_make;
|
||||
DROP FUNCTION json_get_item;
|
||||
DROP FUNCTION json_item_merge;
|
||||
DROP FUNCTION jsoncontains;
|
||||
DROP FUNCTION jsoncontains_path;
|
||||
DROP FUNCTION json_set_item;
|
||||
DROP FUNCTION json_insert_item;
|
||||
DROP FUNCTION json_update_item;
|
||||
DROP FUNCTION json_serialize;
|
||||
DROP FUNCTION jbin_array;
|
||||
DROP FUNCTION jbin_array_add_values;
|
||||
DROP FUNCTION jbin_array_add;
|
||||
DROP FUNCTION jbin_array_delete;
|
||||
DROP FUNCTION jbin_object;
|
||||
DROP FUNCTION jbin_object_nonull;
|
||||
DROP FUNCTION jbin_object_key;
|
||||
DROP FUNCTION jbin_object_add;
|
||||
DROP FUNCTION jbin_object_delete;
|
||||
DROP FUNCTION jbin_object_list;
|
||||
DROP FUNCTION jbin_get_item;
|
||||
DROP FUNCTION jbin_item_merge;
|
||||
DROP FUNCTION jbin_set_item;
|
||||
DROP FUNCTION jbin_insert_item;
|
||||
DROP FUNCTION jbin_update_item;
|
||||
DROP FUNCTION jbin_file;
|
||||
|
||||
--enable_query_log
|
||||
|
|
212
storage/connect/mysql-test/connect/t/json_udf_bin.test
Normal file
212
storage/connect/mysql-test/connect/t/json_udf_bin.test
Normal file
|
@ -0,0 +1,212 @@
|
|||
--source json_udf.inc
|
||||
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
|
||||
--copy_file $MTR_SUITE_DIR/std_data/gloss.json $MYSQLD_DATADIR/gloss.json
|
||||
|
||||
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=VIR BLOCK_SIZE=3;
|
||||
|
||||
--echo #
|
||||
--echo # Test Jbin UDF's
|
||||
--echo #
|
||||
SELECT Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), n) from t1;
|
||||
SELECT Json_Array_Add(Jbin_Array(n, 3.1416, 'My name is "Foo"', NULL), n) from t1;
|
||||
SELECT Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), Jbin_Array('a','b',n)) from t1;
|
||||
SELECT Json_Array_Add(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), JsonGet_String(Jbin_Array('a','b','c'), '[1]'));
|
||||
SELECT Json_Array_Delete(Jbin_Array_Add_Values(Jbin_Array(56, 3.1416, 'My name is "Foo"', NULL), "One more", 2), 4);
|
||||
SELECT Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), NULL), '[1]', 1);
|
||||
SELECT Json_Array_Delete(Jbin_Array(56, Jbin_Array(3.1416, 'My name is "Foo"'), TRUE), 1, '[1]');
|
||||
SELECT Json_Array(1, TRUE, 0, FALSE);
|
||||
SELECT Json_Serialize(Jbin_Array(TRUE, FALSE));
|
||||
#
|
||||
SELECT Json_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL);
|
||||
SELECT Json_Serialize(Jbin_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty', NULL));
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Jbin_Object_Key('qty', 56, 'price', 3.1416, 'truc', 'machin', 'garanty');
|
||||
SELECT Json_Object_Add(Jbin_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color);
|
||||
SELECT Json_Object_Add(Jbin_Object(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price);
|
||||
SELECT Json_Object_Add(Jbin_Object_Nonull(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 'blue' color);
|
||||
SELECT Json_Object_Add(Jbin_Object_Nonull(56 qty, 3.1416 price, 'machin' truc, NULL garanty), 45.99 price);
|
||||
|
||||
--echo #
|
||||
--echo # Test Jbin file UDF's
|
||||
--echo #
|
||||
SELECT Json_Serialize(Jbin_File('gloss.json'));
|
||||
SELECT JsonLocate(Jbin_File('gloss.json'),'XML');
|
||||
#
|
||||
SELECT Json_Object_Key('first', 'foo', 'second', Jbin_Array('a', 33));
|
||||
SELECT Json_Get_Item(Json_Array('a','b','c'), '[1]');
|
||||
SELECT Json_Get_Item(Json_Object('foo' AS "first", Json_Array('a', 33) AS "json_second"), 'second') AS "item";
|
||||
SELECT Json_Get_Item(Jbin_Object('foo' first, Jbin_Array('a', 33) jbin_second), 'second:*') item;
|
||||
SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv');
|
||||
SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv'));
|
||||
SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:*');
|
||||
SELECT JsonGet_String(Json_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso') lang;
|
||||
SELECT Json_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso') "See also";
|
||||
SELECT Json_Serialize(Jbin_Get_Item(Jbin_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso')) "See also";
|
||||
SELECT JsonGet_String(Json_Get_Item(Json_File('gloss.json'),'glossary:GlossDiv:GlossList:GlossEntry:GlossDef:GlossSeeAlso'),'[0]') lang;
|
||||
|
||||
--echo #
|
||||
--echo # Test Item Get/Set/Insert/Update UDF's
|
||||
--echo #
|
||||
SELECT Json_Get_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[]');
|
||||
SELECT Json_Get_Item(Jbin_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), '[1]');
|
||||
SELECT Json_Get_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), '[1]');
|
||||
#
|
||||
SELECT Json_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)));
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 'foo');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 7, '[1]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 7, '[1]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Json_Array(7, 8, 9), '[1]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[2]:*');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 3.1416, 'foo');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 'toto', '[1]:[2]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 300, '[2]:nxt:total:[]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 300, '[2]:nxt:total:[]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), Jbin_Array(7, 8, 9), '[1]', 5, '[2]:cinq', 10, '[1]:[]');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 44, '[2]:quatre');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, 'truc');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '');
|
||||
SELECT Json_Set_Item(Jbin_Array(1, 2, Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '*');
|
||||
SELECT Json_Serialize(Jbin_Set_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq'));
|
||||
#
|
||||
SELECT Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq');
|
||||
SELECT Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq');
|
||||
SELECT Json_Insert_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre');
|
||||
SELECT Json_Update_Item(Jbin_Array(1, Jbin_Array(7, 8, 9), Jbin_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[]', 44, '[2]:quatre');
|
||||
SELECT Json_Insert_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]');
|
||||
SELECT Json_Update_Item(Json_Array(1, Json_Array(7, 8, 9), Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[2]:cinq', 10, '[1]:[1]', 300, '[2]:nxt:total:[]');
|
||||
SELECT Json_Insert_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]');
|
||||
SELECT Json_Update_Item(Json_Array(1, 2, Json_Object_Key('trois', 3, 'quatre', 4)), 5, '[]');
|
||||
|
||||
--echo #
|
||||
--echo # Test merging items UDF's
|
||||
--echo #
|
||||
SELECT Json_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f'));
|
||||
SELECT Json_Item_Merge(Json_Array('a','b','c'), Json_Array('d','e','f')) AS "Result";
|
||||
SELECT Json_Array_Add(Jbin_Item_Merge(Jbin_Array('a','b','c'), Jbin_Array('d','e','f')), 'and', 3);
|
||||
SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f"));
|
||||
SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",2 "c"), Jbin_Array('d','e','f'));
|
||||
SELECT Json_Object_Add(Jbin_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "d",5 "e",6 "f")), 'x' AS "and");
|
||||
SELECT Json_Item_Merge(Jbin_Object(1 "a",2 "b",3 "c"), Jbin_Object(4 "a",5 "e",6 "f"));
|
||||
--error ER_CANT_INITIALIZE_UDF
|
||||
SELECT Json_Item_Merge('foo', Json_Array('d','e','f'));
|
||||
|
||||
--echo #
|
||||
--echo # Test making file UDF's
|
||||
--echo #
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
SELECT Json_File('bt1.json');
|
||||
SELECT Json_File(Jfile_Make(Jbin_File('bt1.json'), 0));
|
||||
SELECT Json_File(Jfile_Make(Jbin_File('bt1.json'), 1));
|
||||
SELECT Json_File(Jfile_Make(Jbin_File('bt1.json'), 2));
|
||||
SELECT Json_File('bt1.json', 0);
|
||||
SELECT Json_File('bt1.json', 1);
|
||||
SELECT Json_File('bt1.json', 2);
|
||||
SELECT Json_Serialize(Jbin_Array('a','b','c'));
|
||||
SELECT Json_Serialize(Jbin_Array_Add(Jbin_File('not_exist.json'), 'd'));
|
||||
--echo # This does not modify the file
|
||||
SELECT Json_Serialize(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'));
|
||||
SELECT Json_File('bt1.json', 2);
|
||||
--echo # This does modify the file
|
||||
SELECT Json_Array_Add(Jbin_File('bt1.json'), 'd');
|
||||
SELECT Json_File('bt1.json', 2);
|
||||
--echo # Back to the original file
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_Array('a','b','c'), 'd') "Jbin_foo") AS "Result";
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd')) AS "Result";
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1") AS "Result";
|
||||
--echo # This does modify the file
|
||||
SELECT Json_Object(Json_Array_Add(Jbin_File('bt1.json'), 'd') "Jfile_bt1") AS "Result";
|
||||
SELECT Json_File('bt1.json');
|
||||
SELECT Json_File(Json_Array_Delete(Jbin_File('bt1.json'), 3), 2);
|
||||
SELECT Json_Object(Jbin_Array_Add(Jbin_File('bt1.json'), 'd') "Jbin_bt1", n "t1") AS "Result" from t1;
|
||||
SELECT Json_File(Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), 'e')) AS "Result";
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
SELECT Json_File(Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), 'e')) AS "Result" from t1;
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
SELECT Json_Array_Add(Jbin_Array_Add(Jbin_File('bt1.json'), 'd'), n) AS "Result" from t1;
|
||||
--echo # Show modified file
|
||||
SELECT Json_File('bt1.json');
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
SELECT Json_Array_Add(Jbin_File('bt1.json'), n) AS "Result" from t1;
|
||||
--echo # Show modified file
|
||||
SELECT Json_File('bt1.json');
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
SELECT Json_File(Jbin_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f')));
|
||||
SELECT Json_File(Json_Item_Merge(Jbin_File('bt1.json'), Jbin_Array('d','e','f')));
|
||||
SELECT Jfile_Make(Jbin_Array('a','b','c'), 'bt1.json');
|
||||
--echo # Test DELETE from file
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 1)) AS "Result";
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 2) "Jbin_bt1") AS "Result";
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 0) "Jbin_bt1", n "t1") AS "Result" from t1;
|
||||
SELECT Json_Object(Jbin_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1;
|
||||
SELECT Json_Object(Json_Array_Delete(Jbin_File('bt1.json'), 3 - n) "Jbin_bt1") AS "Result" from t1;
|
||||
--echo # Show modified file
|
||||
SELECT Json_File('bt1.json');
|
||||
--echo # Object file
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
SELECT Json_File('bt2.json', 0);
|
||||
SELECT Json_File('bt2.json');
|
||||
SELECT Json_Serialize(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"));
|
||||
--echo # First query (file not modified)
|
||||
SELECT Json_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jbin_new") AS "Result";
|
||||
--echo # First query (file modified)
|
||||
SELECT Json_Object(Json_Object_Add(Jbin_File('bt2.json'), 4 AS "d") AS "Jfile_new") AS "Result";
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
SELECT Json_Object(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d") "Jbin_new", n "t1") AS "Result" from t1;
|
||||
SELECT Json_File(Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), 5 "e")) AS "Result";
|
||||
SELECT Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), 5 "e") AS "Result" from t1;
|
||||
SELECT Json_Object_Add(Jbin_Object_Add(Jbin_File('bt2.json'), 4 "d"), n "n") AS "Result" from t1;
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
SELECT Json_Object_Add(Jbin_File('bt2.json'), n) AS "Result" from t1;
|
||||
SELECT Json_File('bt2.json');
|
||||
SELECT Jfile_Make(Jbin_Object(1 "a", 2 "b", 3 "c"), 'bt2.json', 0);
|
||||
SELECT Json_Serialize(Jbin_Item_Merge(Jbin_File('bt2.json'), Jbin_Object(4 "d",5 "e",6 "f"))) AS "Result";
|
||||
SELECT Json_File(Json_Item_Merge(Jbin_File('bt2.json'), Jbin_Object(4 "d",5 "e",6 "f"))) AS "Result";
|
||||
SELECT Json_Item_Merge(Json_Object(1 "a", 2 "b", 3 "c"), Json_Object(4 "d",5 "b",6 "f")) AS "Result";
|
||||
#
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'b')) AS "Result";
|
||||
SELECT Json_Object(Jbin_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result";
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jbin_bt1") AS "Result";
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'c') "Jfile_bt1") AS "Result";
|
||||
SELECT Json_Object(Json_Object_Delete(Jbin_File('bt2.json'), 'a') "Jbin_bt1", n "t1") AS "Result" from t1;
|
||||
#
|
||||
SELECT Json_Serialize(Jbin_Object_List(Jbin_File('bt2.json'))) "Key list";
|
||||
|
||||
#
|
||||
# Test documentation examples
|
||||
#
|
||||
SELECT Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0);
|
||||
SELECT Json_Array_Add(Json_File('bt3.json', 'b'), 66);
|
||||
SELECT Json_Array_Add(Json_File('bt3.json'), 66, 'b');
|
||||
SELECT Json_Array_Add(Jbin_File('bt3.json', 'b'), 66);
|
||||
SELECT Json_File('bt3.json', 3);
|
||||
SELECT Jfile_Make('{"a":1, "b":[44, 55]}' json_, 'bt3.json', 0);
|
||||
#
|
||||
CREATE TABLE t2 (
|
||||
n INT KEY,
|
||||
jfile_cols CHAR(12) NOT NULL)
|
||||
ENGINE= MYISAM;
|
||||
INSERT INTO t2 VALUES(1,'bt3.json');
|
||||
--echo # In this table, the jfile_cols column just contains a file name
|
||||
UPDATE t2 SET jfile_cols = Json_Array_Add(Jbin_File('bt3.json', 'b'), 66) WHERE n = 1;
|
||||
SELECT JsonGet_String(jfile_cols, '*') FROM t2;
|
||||
UPDATE t2 SET jfile_cols = Json_Insert_Item(jfile_cols, 77, 'b:[]') WHERE n = 1;
|
||||
SELECT JsonGet_String(jfile_cols, 'b:*') FROM t2;
|
||||
UPDATE t2 SET jfile_cols = Json_Insert_Item(Jbin_Insert_Item(jfile_cols, 88, 'b:') , 99, 'b:') WHERE n = 1;
|
||||
SELECT JsonGet_String(jfile_cols, '*') FROM t2;
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# Clean up
|
||||
#
|
||||
--source json_udf2.inc
|
||||
--remove_file $MYSQLD_DATADIR/gloss.json
|
||||
--remove_file $MYSQLD_DATADIR/bt1.json
|
||||
--remove_file $MYSQLD_DATADIR/bt2.json
|
||||
--remove_file $MYSQLD_DATADIR/bt3.json
|
|
@ -679,7 +679,8 @@ void PlugConvertConstant(PGLOBAL g, void* & value, short& type)
|
|||
/* non quoted blanks are not included in the output format. */
|
||||
/***********************************************************************/
|
||||
PDTP MakeDateFormat(PGLOBAL g, PSZ dfmt, bool in, bool out, int flag)
|
||||
{
|
||||
{
|
||||
int rc;
|
||||
PDTP pdp = (PDTP)PlugSubAlloc(g, NULL, sizeof(DATPAR));
|
||||
|
||||
if (trace)
|
||||
|
@ -708,7 +709,7 @@ PDTP MakeDateFormat(PGLOBAL g, PSZ dfmt, bool in, bool out, int flag)
|
|||
pthread_mutex_lock(&parmut);
|
||||
#endif // !__WIN__
|
||||
#endif // THREAD
|
||||
/*int rc =*/ fmdflex(pdp);
|
||||
rc = fmdflex(pdp);
|
||||
#if defined(THREAD)
|
||||
#if defined(__WIN__)
|
||||
LeaveCriticalSection((LPCRITICAL_SECTION)&parsec);
|
||||
|
@ -718,9 +719,10 @@ PDTP MakeDateFormat(PGLOBAL g, PSZ dfmt, bool in, bool out, int flag)
|
|||
#endif // THREAD
|
||||
|
||||
if (trace)
|
||||
htrc("Done: in=%s out=%s\n", SVP(pdp->InFmt), SVP(pdp->OutFmt));
|
||||
htrc("Done: in=%s out=%s rc=%d\n", SVP(pdp->InFmt), SVP(pdp->OutFmt), rc);
|
||||
|
||||
return pdp;
|
||||
} // end of MakeDateFormat
|
||||
} // end of MakeDateFormat
|
||||
|
||||
/***********************************************************************/
|
||||
/* Extract the date from a formatted string according to format. */
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
/***********************************************************************/
|
||||
#define MAXCOL 200 /* Default max column nb in result */
|
||||
#define TYPE_UNKNOWN 12 /* Must be greater than other types */
|
||||
#define USE_G 1 /* Use recoverable memory if 1 */
|
||||
|
||||
/***********************************************************************/
|
||||
/* External function. */
|
||||
|
@ -411,9 +412,23 @@ PTDB JSONDEF::GetTable(PGLOBAL g, MODE m)
|
|||
|
||||
// Txfp must be set for TDBDOS
|
||||
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);
|
||||
tdbp = new(g) TDBJSON(this, txfp);
|
||||
((TDBJSON*)tdbp)->G = g;
|
||||
} // endif Pretty
|
||||
|
||||
if (Multiple)
|
||||
|
@ -462,6 +477,7 @@ TDBJSN::TDBJSN(PJDEF tdp, PTXF txfp) : TDBDOS(tdp, txfp)
|
|||
|
||||
TDBJSN::TDBJSN(TDBJSN *tdbp) : TDBDOS(NULL, tdbp)
|
||||
{
|
||||
G = NULL;
|
||||
Top = tdbp->Top;
|
||||
Row = tdbp->Row;
|
||||
Val = tdbp->Val;
|
||||
|
@ -485,6 +501,7 @@ TDBJSN::TDBJSN(TDBJSN *tdbp) : TDBDOS(NULL, tdbp)
|
|||
// Used for update
|
||||
PTDB TDBJSN::CopyOne(PTABS t)
|
||||
{
|
||||
G = NULL;
|
||||
PTDB tp;
|
||||
PJCOL cp1, cp2;
|
||||
PGLOBAL g = t->G;
|
||||
|
@ -578,7 +595,7 @@ PJSON TDBJSN::FindRow(PGLOBAL g)
|
|||
} // 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)
|
||||
{
|
||||
|
@ -603,7 +620,7 @@ bool TDBJSN::OpenDB(PGLOBAL g)
|
|||
return true;
|
||||
} // endswitch Jmode
|
||||
|
||||
} // endif Use
|
||||
} // endif Use
|
||||
|
||||
return TDBDOS::OpenDB(g);
|
||||
} // end of OpenDB
|
||||
|
@ -655,19 +672,31 @@ int TDBJSN::ReadDB(PGLOBAL g)
|
|||
NextSame = 0;
|
||||
M++;
|
||||
return RC_OK;
|
||||
} else if ((rc = TDBDOS::ReadDB(g)) == RC_OK)
|
||||
if (!IsRead() && ((rc = ReadBuffer(g)) != RC_OK)) {
|
||||
// Deferred reading failed
|
||||
} else if (!(Row = ParseJson(g, To_Line,
|
||||
strlen(To_Line), &Pretty, &Comma))) {
|
||||
rc = (Pretty == 1 && !strcmp(To_Line, "]")) ? RC_EF : RC_FX;
|
||||
} else {
|
||||
Row = FindRow(g);
|
||||
SameRow = 0;
|
||||
Fpos++;
|
||||
M = 1;
|
||||
rc = RC_OK;
|
||||
} // endif's
|
||||
} else if ((rc = TDBDOS::ReadDB(g)) == RC_OK) {
|
||||
if (!IsRead() && ((rc = ReadBuffer(g)) != RC_OK))
|
||||
// Deferred reading failed
|
||||
return rc;
|
||||
|
||||
#if USE_G
|
||||
// Recover the memory used for parsing
|
||||
PlugSubSet(G, G->Sarea, G->Sarea_Size);
|
||||
#endif
|
||||
|
||||
if ((Row = ParseJson(G, To_Line, strlen(To_Line), &Pretty, &Comma))) {
|
||||
Row = FindRow(g);
|
||||
SameRow = 0;
|
||||
Fpos++;
|
||||
M = 1;
|
||||
rc = RC_OK;
|
||||
} else if (Pretty != 1 || strcmp(To_Line, "]")) {
|
||||
#if USE_G
|
||||
strcpy(g->Message, G->Message);
|
||||
#endif
|
||||
rc = RC_FX;
|
||||
} else
|
||||
rc = RC_EF;
|
||||
|
||||
} // endif ReadDB
|
||||
|
||||
return rc;
|
||||
} // end of ReadDB
|
||||
|
@ -744,7 +773,7 @@ int TDBJSN::MakeTopTree(PGLOBAL g, PJSON jsp)
|
|||
if (MakeTopTree(g, Row))
|
||||
return true;
|
||||
|
||||
if ((s = Serialize(g, Top, NULL, Pretty))) {
|
||||
if ((s = Serialize(G, Top, NULL, Pretty))) {
|
||||
if (Comma)
|
||||
strcat(s, ",");
|
||||
|
||||
|
@ -761,15 +790,33 @@ int TDBJSN::MakeTopTree(PGLOBAL g, PJSON jsp)
|
|||
|
||||
} // 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
|
||||
if (rc == RC_FX)
|
||||
strcpy(g->Message, G->Message);
|
||||
|
||||
PlugSubSet(G, G->Sarea, G->Sarea_Size);
|
||||
#endif
|
||||
Row->Clear();
|
||||
return rc;
|
||||
} // end of WriteDB
|
||||
|
||||
/* ---------------------------- JSONCOL ------------------------------ */
|
||||
|
||||
/***********************************************************************/
|
||||
/* JSONCOL public constructor. */
|
||||
/***********************************************************************/
|
||||
JSONCOL::JSONCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i)
|
||||
: DOSCOL(g, cdp, tdbp, cprec, i, "DOS")
|
||||
{
|
||||
{
|
||||
Tjp = (TDBJSN *)(tdbp->GetOrig() ? tdbp->GetOrig() : tdbp);
|
||||
G = Tjp->G;
|
||||
Jpath = cdp->GetFmt();
|
||||
MulVal = NULL;
|
||||
Nodes = NULL;
|
||||
|
@ -777,14 +824,15 @@ JSONCOL::JSONCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i)
|
|||
Xnod = -1;
|
||||
Xpd = false;
|
||||
Parsed = false;
|
||||
} // end of JSONCOL constructor
|
||||
} // end of JSONCOL constructor
|
||||
|
||||
/***********************************************************************/
|
||||
/* JSONCOL constructor used for copying columns. */
|
||||
/* tdbp is the pointer to the new table descriptor. */
|
||||
/***********************************************************************/
|
||||
JSONCOL::JSONCOL(JSONCOL *col1, PTDB tdbp) : DOSCOL(col1, tdbp)
|
||||
{
|
||||
{
|
||||
G = col1->G;
|
||||
Tjp = col1->Tjp;
|
||||
Jpath = col1->Jpath;
|
||||
MulVal = col1->MulVal;
|
||||
|
@ -793,7 +841,7 @@ JSONCOL::JSONCOL(JSONCOL *col1, PTDB tdbp) : DOSCOL(col1, tdbp)
|
|||
Xnod = col1->Xnod;
|
||||
Xpd = col1->Xpd;
|
||||
Parsed = col1->Parsed;
|
||||
} // end of JSONCOL copy constructor
|
||||
} // end of JSONCOL copy constructor
|
||||
|
||||
/***********************************************************************/
|
||||
/* SetBuffer: prepare a column block for write operation. */
|
||||
|
@ -808,6 +856,7 @@ bool JSONCOL::SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check)
|
|||
return true;
|
||||
|
||||
Tjp = (TDBJSN*)To_Tdb;
|
||||
G = Tjp->G;
|
||||
return false;
|
||||
} // end of SetBuffer
|
||||
|
||||
|
@ -1103,15 +1152,15 @@ PVAL JSONCOL::GetColumnValue(PGLOBAL g, PJSON row, int i)
|
|||
Value->SetValue(row->GetType() == TYPE_JAR ? row->size() : 1);
|
||||
return(Value);
|
||||
} else if (Nodes[i].Op == OP_XX) {
|
||||
return MakeJson(g, row);
|
||||
return MakeJson(G, row);
|
||||
} else switch (row->GetType()) {
|
||||
case TYPE_JOB:
|
||||
if (!Nodes[i].Key) {
|
||||
// Expected Array was not there
|
||||
// Expected Array was not there, wrap the value
|
||||
if (i < Nod-1)
|
||||
continue;
|
||||
else
|
||||
val = new(g) JVALUE(row);
|
||||
val = new(G) JVALUE(row);
|
||||
|
||||
} else
|
||||
val = ((PJOB)row)->GetValue(Nodes[i].Key);
|
||||
|
@ -1128,11 +1177,11 @@ PVAL JSONCOL::GetColumnValue(PGLOBAL g, PJSON row, int i)
|
|||
else
|
||||
return CalculateArray(g, arp, i);
|
||||
|
||||
} else if (i < Nod-1) {
|
||||
strcpy(g->Message, "Unexpected array");
|
||||
val = NULL; // Not an expected array
|
||||
} else
|
||||
val = arp->GetValue(0);
|
||||
} else {
|
||||
// Unexpected array, unwrap it as [0]
|
||||
val = arp->GetValue(0);
|
||||
i--;
|
||||
} // endif's
|
||||
|
||||
break;
|
||||
case TYPE_JVAL:
|
||||
|
@ -1275,30 +1324,31 @@ PJSON JSONCOL::GetRow(PGLOBAL g)
|
|||
PJAR arp;
|
||||
PJSON nwr, row = Tjp->Row;
|
||||
|
||||
for (int i = 0; i < Nod-1 && row; i++) {
|
||||
if (Nodes[i+1].Op == OP_XX)
|
||||
for (int i = 0; i < Nod && row; i++) {
|
||||
if (Nodes[i+1].Op == OP_XX)
|
||||
break;
|
||||
else switch (row->GetType()) {
|
||||
case TYPE_JOB:
|
||||
if (!Nodes[i].Key)
|
||||
// Expected Array was not there
|
||||
// Expected Array was not there, wrap the value
|
||||
continue;
|
||||
|
||||
val = ((PJOB)row)->GetValue(Nodes[i].Key);
|
||||
break;
|
||||
case TYPE_JAR:
|
||||
if (!Nodes[i].Key) {
|
||||
arp = (PJAR)row;
|
||||
arp = (PJAR)row;
|
||||
|
||||
if (!Nodes[i].Key) {
|
||||
if (Nodes[i].Op == OP_EQ)
|
||||
val = arp->GetValue(Nodes[i].Rank);
|
||||
else
|
||||
val = arp->GetValue(Nodes[i].Rx);
|
||||
|
||||
} else {
|
||||
strcpy(g->Message, "Unexpected array");
|
||||
val = NULL; // Not an expected array
|
||||
} // endif Nodes
|
||||
// Unexpected array, unwrap it as [0]
|
||||
val = arp->GetValue(0);
|
||||
i--;
|
||||
} // endif Nodes
|
||||
|
||||
break;
|
||||
case TYPE_JVAL:
|
||||
|
@ -1318,15 +1368,15 @@ PJSON JSONCOL::GetRow(PGLOBAL g)
|
|||
break;
|
||||
else if (!Nodes[i].Key)
|
||||
// Construct intermediate array
|
||||
nwr = new(g) JARRAY;
|
||||
nwr = new(G) JARRAY;
|
||||
else
|
||||
nwr = new(g) JOBJECT;
|
||||
nwr = new(G) JOBJECT;
|
||||
|
||||
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) {
|
||||
((PJAR)row)->AddValue(g, new(g) JVALUE(nwr));
|
||||
((PJAR)row)->InitArray(g);
|
||||
((PJAR)row)->AddValue(G, new(G) JVALUE(nwr));
|
||||
((PJAR)row)->InitArray(G);
|
||||
} else {
|
||||
strcpy(g->Message, "Wrong type when writing new row");
|
||||
nwr = NULL;
|
||||
|
@ -1370,7 +1420,6 @@ void JSONCOL::WriteColumn(PGLOBAL g)
|
|||
PJAR arp = NULL;
|
||||
PJVAL jvp = NULL;
|
||||
PJSON jsp, row = GetRow(g);
|
||||
JTYP type = row->GetType();
|
||||
|
||||
switch (row->GetType()) {
|
||||
case TYPE_JOB: objp = (PJOB)row; break;
|
||||
|
@ -1384,21 +1433,21 @@ void JSONCOL::WriteColumn(PGLOBAL g)
|
|||
if (Nodes[Nod-1].Op == OP_XX) {
|
||||
s = Value->GetCharValue();
|
||||
|
||||
if (!(jsp = ParseJson(g, s, (int)strlen(s)))) {
|
||||
if (!(jsp = ParseJson(G, s, (int)strlen(s)))) {
|
||||
strcpy(g->Message, s);
|
||||
longjmp(g->jumper[g->jump_level], 666);
|
||||
} // endif jsp
|
||||
|
||||
if (arp) {
|
||||
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
|
||||
arp->AddValue(g, new(g) JVALUE(jsp));
|
||||
arp->AddValue(G, new(G) JVALUE(jsp));
|
||||
|
||||
arp->InitArray(g);
|
||||
arp->InitArray(G);
|
||||
} else if (objp) {
|
||||
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)
|
||||
jvp->SetValue(jsp);
|
||||
|
@ -1409,17 +1458,19 @@ void JSONCOL::WriteColumn(PGLOBAL g)
|
|||
// Passthru
|
||||
case TYPE_DATE:
|
||||
case TYPE_INT:
|
||||
case TYPE_DOUBLE:
|
||||
case TYPE_SHORT:
|
||||
case TYPE_BIGINT:
|
||||
case TYPE_DOUBLE:
|
||||
if (arp) {
|
||||
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
|
||||
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) {
|
||||
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)
|
||||
jvp->SetValue(Value);
|
||||
|
@ -1835,8 +1886,7 @@ void TDBJSON::CloseDB(PGLOBAL g)
|
|||
return;
|
||||
|
||||
// Save the modified document
|
||||
char filename[_MAX_PATH];
|
||||
PSZ msg;
|
||||
char filename[_MAX_PATH];
|
||||
|
||||
Doc->InitArray(g);
|
||||
|
||||
|
@ -1844,8 +1894,8 @@ void TDBJSON::CloseDB(PGLOBAL g)
|
|||
PlugSetPath(filename, ((PJDEF)To_Def)->Fn, GetPath());
|
||||
|
||||
// Serialize the modified table
|
||||
if ((msg = Serialize(g, Top, filename, Pretty)))
|
||||
puts(msg);
|
||||
if (!Serialize(g, Top, filename, Pretty))
|
||||
puts(g->Message);
|
||||
|
||||
} // end of CloseDB
|
||||
|
||||
|
|
|
@ -68,7 +68,8 @@ class JSONDEF : public DOSDEF { /* Table description */
|
|||
/***********************************************************************/
|
||||
class TDBJSN : public TDBDOS {
|
||||
friend class JSONCOL;
|
||||
public:
|
||||
friend class JSONDEF;
|
||||
public:
|
||||
// Constructor
|
||||
TDBJSN(PJDEF tdp, PTXF txfp);
|
||||
TDBJSN(TDBJSN *tdbp);
|
||||
|
@ -90,32 +91,34 @@ class TDBJSN : public TDBDOS {
|
|||
virtual int Cardinality(PGLOBAL g);
|
||||
virtual int GetMaxSize(PGLOBAL g);
|
||||
virtual bool OpenDB(PGLOBAL g);
|
||||
virtual bool PrepareWriting(PGLOBAL g);
|
||||
virtual int ReadDB(PGLOBAL g);
|
||||
virtual bool PrepareWriting(PGLOBAL g);
|
||||
virtual int WriteDB(PGLOBAL g);
|
||||
|
||||
protected:
|
||||
PJSON FindRow(PGLOBAL g);
|
||||
int MakeTopTree(PGLOBAL g, PJSON jsp);
|
||||
|
||||
// Members
|
||||
PJSON Top; // The top JSON tree
|
||||
PJSON Row; // The current row
|
||||
PJSON Val; // The value of the current row
|
||||
PJCOL Colp; // The multiple column
|
||||
JMODE Jmode; // MODE_OBJECT by default
|
||||
char *Objname; // The table object name
|
||||
char *Xcol; // Name of expandable column
|
||||
int Fpos; // The current row index
|
||||
int N; // The current Rownum
|
||||
int M; // Index of multiple value
|
||||
int Limit; // Limit of multiple values
|
||||
int Pretty; // Depends on file structure
|
||||
int NextSame; // Same next row
|
||||
int SameRow; // Same row nb
|
||||
int Xval; // Index of expandable array
|
||||
int B; // Array index base
|
||||
bool Strict; // Strict syntax checking
|
||||
bool Comma; // Row has final comma
|
||||
PGLOBAL G; // Support of parse memory
|
||||
PJSON Top; // The top JSON tree
|
||||
PJSON Row; // The current row
|
||||
PJSON Val; // The value of the current row
|
||||
PJCOL Colp; // The multiple column
|
||||
JMODE Jmode; // MODE_OBJECT by default
|
||||
char *Objname; // The table object name
|
||||
char *Xcol; // Name of expandable column
|
||||
int Fpos; // The current row index
|
||||
int N; // The current Rownum
|
||||
int M; // Index of multiple value
|
||||
int Limit; // Limit of multiple values
|
||||
int Pretty; // Depends on file structure
|
||||
int NextSame; // Same next row
|
||||
int SameRow; // Same row nb
|
||||
int Xval; // Index of expandable array
|
||||
int B; // Array index base
|
||||
bool Strict; // Strict syntax checking
|
||||
bool Comma; // Row has final comma
|
||||
}; // end of class TDBJSN
|
||||
|
||||
/* -------------------------- JSONCOL class -------------------------- */
|
||||
|
@ -154,7 +157,8 @@ class JSONCOL : public DOSCOL {
|
|||
JSONCOL(void) {}
|
||||
|
||||
// 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
|
||||
char *Jpath; // The json path
|
||||
JNODE *Nodes; // The intermediate objects
|
||||
|
@ -170,7 +174,8 @@ class JSONCOL : public DOSCOL {
|
|||
/* This is the JSON Access Method class declaration. */
|
||||
/***********************************************************************/
|
||||
class TDBJSON : public TDBJSN {
|
||||
friend class JSONCOL;
|
||||
friend class JSONDEF;
|
||||
friend class JSONCOL;
|
||||
public:
|
||||
// Constructor
|
||||
TDBJSON(PJDEF tdp, PTXF txfp);
|
||||
|
|
|
@ -60,7 +60,7 @@ extern "C" char version[];
|
|||
#endif // !__WIN__
|
||||
|
||||
#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. */
|
||||
|
@ -226,30 +226,30 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info)
|
|||
more:
|
||||
if (vp->atp) {
|
||||
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))) {
|
||||
case RC_INFO:
|
||||
PushWarning(g, txmp);
|
||||
case RC_OK:
|
||||
strncat(fmt, "@", XSTR(fmt));
|
||||
strncat(fmt, "@", XLEN(fmt));
|
||||
break;
|
||||
default:
|
||||
goto err;
|
||||
} // enswitch rc
|
||||
|
||||
if (j)
|
||||
strncat(fmt, colname, XSTR(fmt));
|
||||
strncat(fmt, colname, XLEN(fmt));
|
||||
|
||||
} else {
|
||||
if (tdp->Usedom && node->GetType() != 1)
|
||||
continue;
|
||||
|
||||
strncpy(colname, node->GetName(g), sizeof(colname));
|
||||
strncat(xcol->Name, colname, XSTR(xcol->Name));
|
||||
strncat(xcol->Name, colname, XLEN(xcol->Name));
|
||||
|
||||
if (j)
|
||||
strncat(fmt, colname, XSTR(fmt));
|
||||
strncat(fmt, colname, XLEN(fmt));
|
||||
|
||||
if (j < lvl && ok) {
|
||||
vp = lvlp[j+1];
|
||||
|
@ -267,9 +267,9 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info)
|
|||
if (!vp->atp)
|
||||
node = vp->nl->GetItem(g, vp->k++, node);
|
||||
|
||||
strncat(fmt, colname, XSTR(fmt));
|
||||
strncat(fmt, "/", XSTR(fmt));
|
||||
strncat(xcol->Name, "_", XSTR(xcol->Name));
|
||||
strncat(fmt, colname, XLEN(fmt));
|
||||
strncat(fmt, "/", XLEN(fmt));
|
||||
strncat(xcol->Name, "_", XLEN(xcol->Name));
|
||||
j++;
|
||||
vp->n = (int)strlen(xcol->Name);
|
||||
vp->m = (int)strlen(fmt);
|
||||
|
|
|
@ -2440,7 +2440,6 @@ void DTVAL::SetTimeShift(void)
|
|||
|
||||
} // end of SetTimeShift
|
||||
|
||||
#if defined(connect_EXPORTS)
|
||||
// Added by Alexander Barkov
|
||||
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);
|
||||
return tm;
|
||||
} // 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 */
|
||||
|
@ -2493,7 +2489,6 @@ struct tm *DTVAL::GetGmTime(struct tm *tm_buffer)
|
|||
return datm;
|
||||
} // end of GetGmTime
|
||||
|
||||
#if defined(connect_EXPORTS)
|
||||
// Added by Alexander Barkov
|
||||
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);
|
||||
return error_code ? (time_t) -1 : t;
|
||||
}
|
||||
#else
|
||||
#define mktime_mysql mktime
|
||||
#endif
|
||||
|
||||
/***********************************************************************/
|
||||
/* MakeTime: calculates a date value from a tm structures using the */
|
||||
|
|
Loading…
Add table
Reference in a new issue