mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
5ae2656b69
commit c545d544378483bf68c4fb713cd4ec872d0df2c4 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Tue Mar 27 23:13:14 2018 +0200 - Fix MDEV-15577 CONNECT engine JDBC remote index prevents UPDATE Fixed in TDBJDBC::OpenDB because query can be null for updates modified: storage/connect/tabjdbc.cpp commit c4f1fe2e8e74566e9c3296f435448d9f5c718b23 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Wed Mar 14 12:21:17 2018 +0100 - Fix MDEV-15429 CONNECT engine JDBC handling Postgresql UUID type Also handle Postgresql sending type VARCHAR for TEXT column and setting length to b x7FFFFFF when the length is unknown. modified: storage/connect/Client.java modified: storage/connect/JavaWrappers.jar modified: storage/connect/JdbcInterface.java modified: storage/connect/PostgresqlInterface.java modified: storage/connect/global.h modified: storage/connect/ha_connect.cc modified: storage/connect/jdbconn.cpp modified: storage/connect/jdbconn.h modified: storage/connect/mysql-test/connect/r/jdbc_postgresql.result modified: storage/connect/mysql-test/connect/t/jdbc_postgresql.test modified: storage/connect/mysql-test/connect/t/jdbconn.inc modified: storage/connect/plgdbsem.h modified: storage/connect/tabjdbc.cpp modified: storage/connect/tabjdbc.h added: storage/connect/mysql-test/connect/std_data/JavaWrappers.jar commit 3068bb4882a316c6c32c624609db2bf24ae3ad40 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Mon Feb 26 19:40:27 2018 +0100 Revert to old cmake file to avoid compile error commit da8c1c0bd6a327fd03bd321be3170f468122ef67 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Mon Feb 26 16:13:39 2018 +0100 - Remove warning on not used tabtyp variable in connect_assisted_discovery modified: storage/connect/ha_connect.cc - Fix a bug causing CONNECT to loop when expanding a JSON column when the expanded column value is null or void array. - Adding the FullArray option to JSON tables. - Skipping expanded JSON lines when the expanded column value is null. modified: storage/connect/connect.cc modified: storage/connect/tabdos.h modified: storage/connect/tabjson.cpp modified: storage/connect/tabjson.h - Fix MDEV-13353 No file privilege for ODBC, JDBC, MONGO, MAC, WMI file types. modified: storage/connect/ha_connect.cc - Make some Json UDFs to accept a non JSON item as 1st parameter. modified: storage/connect/json.cpp modified: storage/connect/json.h modified: storage/connect/jsonudf.cpp modified: storage/connect/jsonudf.h - Update Json UDF tests to cope with above changes. modified: storage/connect/mysql-test/connect/r/json_udf.result modified: storage/connect/mysql-test/connect/r/json_udf_bin.result modified: storage/connect/mysql-test/connect/r/vcol.result modified: storage/connect/mysql-test/connect/t/json_udf.test modified: storage/connect/mysql-test/connect/t/vcol.test - Fix some compiler warning treated as error PlugSubAlloc no more exported because it does throw. modified: storage/connect/global.h modified: storage/connect/ha_connect.cc modified: storage/connect/jsonudf.cpp modified: storage/connect/tabjson.cpp modified: storage/connect/tabjson.h - Other files modified (?) when going back to wrong merge modified: storage/connect/CMakeLists.txt modified: storage/connect/array.cpp modified: storage/connect/colblk.cpp modified: storage/connect/connect.cc modified: storage/connect/csort.cpp modified: storage/connect/domdoc.cpp modified: storage/connect/filamap.cpp modified: storage/connect/filamgz.cpp modified: storage/connect/filamtxt.cpp modified: storage/connect/filamzip.cpp modified: storage/connect/filter.cpp modified: storage/connect/fmdlex.c modified: storage/connect/jdbconn.cpp modified: storage/connect/macutil.cpp modified: storage/connect/myconn.cpp modified: storage/connect/odbconn.cpp modified: storage/connect/plgdbutl.cpp modified: storage/connect/plugutil.cpp modified: storage/connect/preparse.h modified: storage/connect/rcmsg.c modified: storage/connect/rcmsg.h modified: storage/connect/reldef.cpp modified: storage/connect/tabdos.cpp modified: storage/connect/tabfmt.cpp modified: storage/connect/tabmac.cpp modified: storage/connect/tabmul.cpp modified: storage/connect/tabmysql.cpp modified: storage/connect/tabmysql.h modified: storage/connect/tabodbc.cpp modified: storage/connect/tabtbl.cpp modified: storage/connect/tabxml.cpp modified: storage/connect/value.cpp modified: storage/connect/xobject.cpp commit 5095628b31ed8c94bd7c794c6b0162894a9040b1 Author: Olivier Bertrand <bertrandop@gmail.com> Date: Tue Feb 13 14:29:00 2018 +0100 - Fix a bug causing CONNECT to loop when expanding a JSON column when the expanded column value is null or void array. - Adding the FullArray option to JSON tables. - Skipping expanded JSON lines when the expanded column value is null. modified: storage/connect/connect.cc modified: storage/connect/tabdos.h modified: storage/connect/tabjson.cpp modified: storage/connect/tabjson.h commit 9896174328da42016735630c893fd09eb128b48e Author: Olivier Bertrand <bertrandop@gmail.com> Date: Fri Feb 2 15:48:57 2018 +0100 - Remove warning on not used tabtyp variable in connect_assisted_discovery modified: storage/connect/ha_connect.cc commit d7e254c05f88173eb04d8dafc813013eb42ccdbe Author: Olivier Bertrand <bertrandop@gmail.com> Date: Wed Jan 31 14:42:45 2018 +0100 - Use delayed load for the MongoDB C Drive on Windows modified: storage/connect/CMakeLists.txt modified: storage/connect/cmgoconn.cpp modified: storage/connect/ha_connect.cc - Add FORCE to the connect_type_conv enum values This will translate binary values to TYPE_STRING modified: storage/connect/checklvl.h modified: storage/connect/ha_connect.cc modified: storage/connect/odbconn.cpp - Change the connect_xtrace variable to from int to set modified: storage/connect/array.cpp modified: storage/connect/blkfil.cpp modified: storage/connect/block.h modified: storage/connect/cmgoconn.cpp modified: storage/connect/colblk.cpp modified: storage/connect/connect.cc modified: storage/connect/filamap.cpp modified: storage/connect/filamdbf.cpp modified: storage/connect/filamfix.cpp modified: storage/connect/filamgz.cpp modified: storage/connect/filamtxt.cpp modified: storage/connect/filamvct.cpp modified: storage/connect/filamzip.cpp modified: storage/connect/filter.cpp modified: storage/connect/global.h modified: storage/connect/ha_connect.cc modified: storage/connect/inihandl.cpp modified: storage/connect/javaconn.cpp modified: storage/connect/jdbconn.cpp modified: storage/connect/jmgfam.cpp modified: storage/connect/jmgoconn.cpp modified: storage/connect/json.cpp modified: storage/connect/jsonudf.cpp modified: storage/connect/libdoc.cpp modified: storage/connect/mongo.cpp modified: storage/connect/mycat.cc modified: storage/connect/myconn.cpp modified: storage/connect/odbconn.cpp modified: storage/connect/plgdbutl.cpp modified: storage/connect/plugutil.cpp modified: storage/connect/reldef.cpp modified: storage/connect/tabcol.cpp modified: storage/connect/tabdos.cpp modified: storage/connect/tabext.cpp modified: storage/connect/tabfix.cpp modified: storage/connect/tabfmt.cpp modified: storage/connect/tabjdbc.cpp modified: storage/connect/tabjson.cpp modified: storage/connect/table.cpp modified: storage/connect/tabmul.cpp modified: storage/connect/tabmysql.cpp modified: storage/connect/tabodbc.cpp modified: storage/connect/tabpivot.cpp modified: storage/connect/tabsys.cpp modified: storage/connect/tabtbl.cpp modified: storage/connect/tabutil.cpp modified: storage/connect/tabvct.cpp modified: storage/connect/tabwmi.cpp modified: storage/connect/tabxml.cpp modified: storage/connect/user_connect.cc modified: storage/connect/valblk.cpp modified: storage/connect/value.cpp modified: storage/connect/xindex.cpp - Restore connect_enable_mongo variable (but undocumented) modified: storage/connect/ha_connect.cc modified: storage/connect/mycat.cc modified: storage/connect/mysql-test/connect/r/json_java_2.result modified: storage/connect/mysql-test/connect/r/json_java_3.result modified: storage/connect/mysql-test/connect/r/json_mongo_c.result modified: storage/connect/mysql-test/connect/r/mongo_c.result modified: storage/connect/mysql-test/connect/r/mongo_java_2.result modified: storage/connect/mysql-test/connect/r/mongo_java_3.result modified: storage/connect/mysql-test/connect/r/tbl_thread.result modified: storage/connect/mysql-test/connect/t/mongo.inc modified: storage/connect/mysql-test/connect/t/mongo_test.inc modified: storage/connect/mysql-test/connect/t/tbl_thread.test
321 lines
13 KiB
C++
321 lines
13 KiB
C++
/******************** tabjson H Declares Source Code File (.H) *******************/
|
|
/* Name: jsonudf.h Version 1.3 */
|
|
/* */
|
|
/* (C) Copyright to the author Olivier BERTRAND 2015-2017 */
|
|
/* */
|
|
/* This file contains the JSON UDF function and class declares. */
|
|
/*********************************************************************************/
|
|
#include "global.h"
|
|
#include "plgdbsem.h"
|
|
#include "block.h"
|
|
#include "osutil.h"
|
|
#include "maputil.h"
|
|
#include "json.h"
|
|
|
|
#define UDF_EXEC_ARGS \
|
|
UDF_INIT*, UDF_ARGS*, char*, unsigned long*, char*, char*
|
|
|
|
/*********************************************************************************/
|
|
/* The JSON tree node. Can be an Object or an Array. */
|
|
/*********************************************************************************/
|
|
typedef struct _jnode {
|
|
PSZ Key; // The key used for object
|
|
OPVAL Op; // Operator used for this node
|
|
PVAL CncVal; // To cont value used for OP_CNC
|
|
PVAL Valp; // The internal array VALUE
|
|
int Rank; // The rank in array
|
|
int Rx; // Read row number
|
|
int Nx; // Next to read row number
|
|
} JNODE, *PJNODE;
|
|
|
|
typedef class JSNX *PJSNX;
|
|
typedef class JOUTPATH *PJTP;
|
|
typedef class JOUTALL *PJTA;
|
|
|
|
extern "C" {
|
|
DllExport my_bool jsonvalue_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *jsonvalue(UDF_EXEC_ARGS);
|
|
DllExport void jsonvalue_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool json_make_array_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *json_make_array(UDF_EXEC_ARGS);
|
|
DllExport void json_make_array_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool json_array_add_values_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *json_array_add_values(UDF_EXEC_ARGS);
|
|
DllExport void json_array_add_values_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool json_array_add_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *json_array_add(UDF_EXEC_ARGS);
|
|
DllExport void json_array_add_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool json_array_delete_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *json_array_delete(UDF_EXEC_ARGS);
|
|
DllExport void json_array_delete_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jsonsum_int_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport long long jsonsum_int(UDF_INIT*, UDF_ARGS*, char*, char*);
|
|
DllExport void jsonsum_int_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jsonsum_real_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport double jsonsum_real(UDF_INIT*, UDF_ARGS*, char*, char*);
|
|
DllExport void jsonsum_real_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jsonavg_real_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport double jsonavg_real(UDF_INIT*, UDF_ARGS*, char*, char*);
|
|
DllExport void jsonavg_real_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool json_make_object_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *json_make_object(UDF_EXEC_ARGS);
|
|
DllExport void json_make_object_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool json_object_nonull_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
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*);
|
|
|
|
DllExport my_bool json_object_delete_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *json_object_delete(UDF_EXEC_ARGS);
|
|
DllExport void json_object_delete_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool json_object_list_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *json_object_list(UDF_EXEC_ARGS);
|
|
DllExport void json_object_list_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool json_object_values_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *json_object_values(UDF_EXEC_ARGS);
|
|
DllExport void json_object_values_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jsonset_grp_size_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport long long jsonset_grp_size(UDF_INIT*, UDF_ARGS*, char*, char*);
|
|
|
|
DllExport my_bool jsonget_grp_size_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport long long jsonget_grp_size(UDF_INIT*, UDF_ARGS*, char*, char*);
|
|
|
|
DllExport my_bool json_array_grp_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport void json_array_grp_add(UDF_INIT *, UDF_ARGS *, char *, char *);
|
|
DllExport char *json_array_grp(UDF_EXEC_ARGS);
|
|
DllExport void json_array_grp_clear(UDF_INIT *, char *, char *);
|
|
DllExport void json_array_grp_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool json_object_grp_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport void json_object_grp_add(UDF_INIT *, UDF_ARGS *, char *, char *);
|
|
DllExport char *json_object_grp(UDF_EXEC_ARGS);
|
|
DllExport void json_object_grp_clear(UDF_INIT *, char *, char *);
|
|
DllExport void json_object_grp_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool json_item_merge_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *json_item_merge(UDF_EXEC_ARGS);
|
|
DllExport void json_item_merge_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool json_get_item_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *json_get_item(UDF_EXEC_ARGS);
|
|
DllExport void json_get_item_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jsonget_string_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *jsonget_string(UDF_EXEC_ARGS);
|
|
DllExport void jsonget_string_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jsonget_int_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport long long jsonget_int(UDF_INIT*, UDF_ARGS*, char*, char*);
|
|
DllExport void jsonget_int_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jsonget_real_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
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*);
|
|
|
|
DllExport my_bool json_locate_all_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
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*);
|
|
|
|
DllExport my_bool jfile_make_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *jfile_make(UDF_EXEC_ARGS);
|
|
DllExport void jfile_make_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jbin_array_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *jbin_array(UDF_EXEC_ARGS);
|
|
DllExport void jbin_array_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jbin_array_add_values_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *jbin_array_add_values(UDF_EXEC_ARGS);
|
|
DllExport void jbin_array_add_values_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jbin_array_add_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *jbin_array_add(UDF_EXEC_ARGS);
|
|
DllExport void jbin_array_add_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jbin_array_delete_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *jbin_array_delete(UDF_EXEC_ARGS);
|
|
DllExport void jbin_array_delete_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jbin_object_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *jbin_object(UDF_EXEC_ARGS);
|
|
DllExport void jbin_object_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jbin_object_nonull_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
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*);
|
|
|
|
DllExport my_bool jbin_object_delete_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *jbin_object_delete(UDF_EXEC_ARGS);
|
|
DllExport void jbin_object_delete_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jbin_object_list_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *jbin_object_list(UDF_EXEC_ARGS);
|
|
DllExport void jbin_object_list_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jbin_get_item_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *jbin_get_item(UDF_EXEC_ARGS);
|
|
DllExport void jbin_get_item_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool jbin_item_merge_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
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*);
|
|
|
|
DllExport my_bool json_serialize_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *json_serialize(UDF_EXEC_ARGS);
|
|
DllExport void json_serialize_deinit(UDF_INIT*);
|
|
|
|
DllExport my_bool envar_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport char *envar(UDF_EXEC_ARGS);
|
|
|
|
DllExport my_bool countin_init(UDF_INIT*, UDF_ARGS*, char*);
|
|
DllExport long long countin(UDF_EXEC_ARGS);
|
|
} // extern "C"
|
|
|
|
|
|
/*********************************************************************************/
|
|
/* Structure JPN. Used to make the locate path. */
|
|
/*********************************************************************************/
|
|
typedef struct _jpn {
|
|
enum JTYP Type;
|
|
PCSZ Key;
|
|
int N;
|
|
} JPN, *PJPN;
|
|
|
|
/*********************************************************************************/
|
|
/* Class JSNX: JSON access method. */
|
|
/*********************************************************************************/
|
|
class JSNX : public BLOCK {
|
|
public:
|
|
// Constructors
|
|
JSNX(PGLOBAL g, PJSON row, int type, int len = 64, int prec = 0, my_bool wr = false);
|
|
|
|
// Implementation
|
|
int GetPrecision(void) {return Prec;}
|
|
PVAL GetValue(void) {return Value;}
|
|
|
|
// Methods
|
|
my_bool SetJpath(PGLOBAL g, char *path, my_bool jb = false);
|
|
my_bool ParseJpath(PGLOBAL g);
|
|
void ReadValue(PGLOBAL g);
|
|
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);
|
|
|
|
protected:
|
|
my_bool SetArrayOptions(PGLOBAL g, char *p, int i, PSZ nm);
|
|
PVAL GetColumnValue(PGLOBAL g, PJSON row, int i);
|
|
PVAL ExpandArray(PGLOBAL g, PJAR arp, int n);
|
|
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);
|
|
my_bool LocateArrayAll(PJAR jarp);
|
|
my_bool LocateObjectAll(PJOB jobp);
|
|
my_bool LocateValueAll(PJVAL jvp);
|
|
my_bool CompareTree(PJSON jp1, PJSON jp2);
|
|
my_bool AddPath(void);
|
|
|
|
// Default constructor not to be used
|
|
JSNX(void) {}
|
|
|
|
// Members
|
|
PJSON Row;
|
|
PJVAL Jvalp;
|
|
PJPN Jpnp;
|
|
JOUTSTR *Jp;
|
|
JNODE *Nodes; // The intermediate objects
|
|
PVAL Value;
|
|
PVAL MulVal; // To value used by multiple column
|
|
char *Jpath; // The json path
|
|
int Buf_Type;
|
|
int Long;
|
|
int Prec;
|
|
int Nod; // The number of intermediate objects
|
|
int Xnod; // Index of multiple values
|
|
int K; // Kth item to locate
|
|
int I; // Index of JPN
|
|
int Imax; // Max number of JPN's
|
|
int B; // Index base
|
|
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
|