diff options
author | Olivier Bertrand <bertrandop@gmail.com> | 2020-12-22 22:50:12 +0100 |
---|---|---|
committer | Olivier Bertrand <bertrandop@gmail.com> | 2020-12-22 22:50:12 +0100 |
commit | 2113cab7ec808721d3492870f094d681842e7274 (patch) | |
tree | 8055f112ea6355b4a4915e6b2c0f2327b7c1ef42 /storage | |
parent | 24c18ce8926105d77ebff2d63611af440aaa8bee (diff) | |
download | mariadb-git-2113cab7ec808721d3492870f094d681842e7274.tar.gz |
Make REST tables default file name. Commit before continuing BSON development
Diffstat (limited to 'storage')
-rw-r--r-- | storage/connect/bson.cpp | 33 | ||||
-rw-r--r-- | storage/connect/bson.h | 11 | ||||
-rw-r--r-- | storage/connect/ha_connect.cc | 21 | ||||
-rw-r--r-- | storage/connect/tabbson.cpp | 12 | ||||
-rw-r--r-- | storage/connect/tabbson.h | 2 | ||||
-rw-r--r-- | storage/connect/tabrest.cpp | 10 |
6 files changed, 57 insertions, 32 deletions
diff --git a/storage/connect/bson.cpp b/storage/connect/bson.cpp index f7d4e5731c5..df95bd4c9c8 100644 --- a/storage/connect/bson.cpp +++ b/storage/connect/bson.cpp @@ -101,17 +101,19 @@ BDOC::BDOC(PGLOBAL G) : BJSON(G, NULL) jp = NULL; s = NULL; len = 0; + pretty = 3; pty[0] = pty[1] = pty[2] = true; + comma = false; } // end of BDOC constructor /***********************************************************************/ /* Parse a json string. */ /* Note: when pretty is not known, the caller set pretty to 3. */ /***********************************************************************/ -PBVAL BDOC::ParseJson(PGLOBAL g, char* js, size_t lng, int* ptyp, bool* comma) +PBVAL BDOC::ParseJson(PGLOBAL g, char* js, size_t lng) { - int i, pretty = (ptyp) ? *ptyp : 3; - bool b = false; + int i; + bool b = false, ptyp = (bool *)pty; PBVAL bvp = NULL; s = js; @@ -121,8 +123,7 @@ PBVAL BDOC::ParseJson(PGLOBAL g, char* js, size_t lng, int* ptyp, bool* comma) if (!s || !len) { strcpy(g->Message, "Void JSON object"); return NULL; - } else if (comma) - *comma = false; + } // endif s // Trying to guess the pretty format if (s[0] == '[' && (s[1] == '\n' || (s[1] == '\r' && s[2] == '\n'))) @@ -136,7 +137,7 @@ PBVAL BDOC::ParseJson(PGLOBAL g, char* js, size_t lng, int* ptyp, bool* comma) switch (s[i]) { case '[': if (bvp->Type != TYPE_UNKNOWN) - bvp->To_Val = ParseAsArray(i, pretty, ptyp); + bvp->To_Val = ParseAsArray(i); else bvp->To_Val = ParseArray(++i); @@ -144,7 +145,7 @@ PBVAL BDOC::ParseJson(PGLOBAL g, char* js, size_t lng, int* ptyp, bool* comma) break; case '{': if (bvp->Type != TYPE_UNKNOWN) { - bvp->To_Val = ParseAsArray(i, pretty, ptyp); + bvp->To_Val = ParseAsArray(i); bvp->Type = TYPE_JAR; } else { bvp->To_Val = ParseObject(++i); @@ -159,9 +160,7 @@ PBVAL BDOC::ParseJson(PGLOBAL g, char* js, size_t lng, int* ptyp, bool* comma) break; case ',': if (bvp->Type != TYPE_UNKNOWN && (pretty == 1 || pretty == 3)) { - if (comma) - *comma = true; - + comma = true; pty[0] = pty[2] = false; break; } // endif pretty @@ -179,7 +178,7 @@ PBVAL BDOC::ParseJson(PGLOBAL g, char* js, size_t lng, int* ptyp, bool* comma) default: if (bvp->Type != TYPE_UNKNOWN) { - bvp->To_Val = ParseAsArray(i, pretty, ptyp); + bvp->To_Val = ParseAsArray(i); bvp->Type = TYPE_JAR; } else if ((bvp->To_Val = MOF(ParseValue(i)))) bvp->Type = TYPE_JVAL; @@ -191,12 +190,10 @@ PBVAL BDOC::ParseJson(PGLOBAL g, char* js, size_t lng, int* ptyp, bool* comma) if (bvp->Type == TYPE_UNKNOWN) sprintf(g->Message, "Invalid Json string '%.*s'", MY_MIN((int)len, 50), s); - else if (ptyp && pretty == 3) { - *ptyp = 3; // Not recognized pretty - + else if (pretty == 3) { for (i = 0; i < 3; i++) if (pty[i]) { - *ptyp = i; + pretty = i; break; } // endif pty @@ -218,12 +215,12 @@ PBVAL BDOC::ParseJson(PGLOBAL g, char* js, size_t lng, int* ptyp, bool* comma) /***********************************************************************/ /* Parse several items as being in an array. */ /***********************************************************************/ -OFFSET BDOC::ParseAsArray(int& i, int pretty, int* ptyp) { +OFFSET BDOC::ParseAsArray(int& i) { if (pty[0] && (!pretty || pretty > 2)) { OFFSET jsp; - if ((jsp = ParseArray((i = 0))) && ptyp && pretty == 3) - *ptyp = (pty[0]) ? 0 : 3; + if ((jsp = ParseArray((i = 0))) && pretty == 3) + pretty = (pty[0]) ? 0 : 3; return jsp; } else diff --git a/storage/connect/bson.h b/storage/connect/bson.h index 435e355d249..ca776dd1950 100644 --- a/storage/connect/bson.h +++ b/storage/connect/bson.h @@ -167,7 +167,12 @@ class BDOC : public BJSON { public: BDOC(PGLOBAL G); - PBVAL ParseJson(PGLOBAL g, char* s, size_t n, int* prty = NULL, bool* b = NULL); + bool GetComma(void) { return comma; } + int GetPretty(void) { return pretty; } + void SetPretty(int pty) { pretty = pty; } + + // Methods + PBVAL ParseJson(PGLOBAL g, char* s, size_t n); PSZ Serialize(PGLOBAL g, PBVAL bvp, char* fn, int pretty); protected: @@ -176,7 +181,7 @@ protected: PBVAL ParseValue(int& i); OFFSET ParseString(int& i); void ParseNumeric(int& i, PBVAL bvp); - OFFSET ParseAsArray(int& i, int pretty, int* ptyp); + OFFSET ParseAsArray(int& i); bool SerializeArray(OFFSET arp, bool b); bool SerializeObject(OFFSET obp); bool SerializeValue(PBVAL vp); @@ -185,7 +190,9 @@ protected: JOUT* jp; // Used with serialize char* s; // The Json string to parse int len; // The Json string length + int pretty; // The pretty style of the file to parse bool pty[3]; // Used to guess what pretty is + bool comma; // True if Pretty = 1 // Default constructor not to be used BDOC(void) {} diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc index cf3a8866ff0..d6cbcbc077f 100644 --- a/storage/connect/ha_connect.cc +++ b/storage/connect/ha_connect.cc @@ -170,7 +170,7 @@ #define JSONMAX 10 // JSON Default max grp size extern "C" { - char version[]= "Version 1.07.0002 December 18, 2020"; + char version[]= "Version 1.07.0002 December 19, 2020"; #if defined(__WIN__) char compver[]= "Version 1.07.0002 " __DATE__ " " __TIME__; char slash= '\\'; @@ -5701,14 +5701,20 @@ static int connect_assisted_discovery(handlerton *, THD* thd, goto err; #if defined(REST_SUPPORT) } else if (topt->http) { - switch (ttp) { + if (ttp == TAB_UNDEF) { + topt->type = "JSON"; + ttp= GetTypeID(topt->type); + sprintf(g->Message, "No table_type. Was set to %s", topt->type); + push_warning(thd, Sql_condition::WARN_LEVEL_WARN, 0, g->Message); + } // endif ttp + + switch (ttp) { case TAB_JSON: #if defined(BSON_SUPPORT) case TAB_BSON: #endif // BSON_SUPPORT case TAB_XML: case TAB_CSV: - case TAB_UNDEF: ttp = TAB_REST; break; default: @@ -5894,7 +5900,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, #if defined(BSON_SUPPORT) case TAB_BSON: #endif // BSON_SUPPORT - dsn= strz(g, create_info->connect_string); + dsn= strz(g, create_info->connect_string); if (!fn && !zfn && !mul && !dsn) sprintf(g->Message, "Missing %s file name", topt->type); @@ -6132,10 +6138,8 @@ static int connect_assisted_discovery(handlerton *, THD* thd, } // endif !nblin // Restore language type - if (ttp == TAB_REST) { + if (ttp == TAB_REST) ttp = GetTypeID(topt->type); - ttp = (ttp == TAB_UNDEF) ? TAB_JSON : ttp; - } // endif ttp for (i= 0; !rc && i < qrp->Nblin; i++) { typ= len= prec= dec= flg= 0; @@ -6436,6 +6440,9 @@ int ha_connect::create(const char *name, TABLE *table_arg, // Check table type if (type == TAB_UNDEF) { options->type= (options->srcdef) ? "MYSQL" : +#if defined(BSON_SUPPORT) + (options->http) ? "JSON" : +#endif // BSON_SUPPORT (options->tabname) ? "PROXY" : "DOS"; type= GetTypeID(options->type); sprintf(g->Message, "No table_type. Will be set to %s", options->type); diff --git a/storage/connect/tabbson.cpp b/storage/connect/tabbson.cpp index d4e5f09138a..7635a6afe70 100644 --- a/storage/connect/tabbson.cpp +++ b/storage/connect/tabbson.cpp @@ -626,9 +626,11 @@ PBVAL BTUTIL::FindRow(PGLOBAL g) /***********************************************************************/ /* Parse the read line. */ /***********************************************************************/ -PBVAL BTUTIL::ParseLine(PGLOBAL g, int *pretty, bool *comma) +PBVAL BTUTIL::ParseLine(PGLOBAL g, int prty, bool cma) { - return ParseJson(g, Tp->To_Line, strlen(Tp->To_Line), pretty, comma); + pretty = prty; + comma = cma; + return ParseJson(g, Tp->To_Line, strlen(Tp->To_Line)); } // end of ParseLine /***********************************************************************/ @@ -1296,6 +1298,7 @@ TDBBSN::TDBBSN(PGLOBAL g, PBDEF tdp, PTXF txfp) : TDBDOS(tdp, txfp) SameRow = 0; Xval = -1; Comma = false; + Bp->SetPretty(Pretty); } // end of TDBBSN standard constructor TDBBSN::TDBBSN(TDBBSN* tdbp) : TDBDOS(NULL, tdbp) @@ -1527,7 +1530,7 @@ int TDBBSN::ReadDB(PGLOBAL g) // Recover the memory used for parsing Bp->SubSet(); - if ((Row = Bp->ParseLine(g, &Pretty, &Comma))) { + if ((Row = Bp->ParseLine(g, Pretty, Comma))) { Top = Row; Row = Bp->FindRow(g); SameRow = 0; @@ -2081,6 +2084,7 @@ TDBBSON::TDBBSON(PGLOBAL g, PBDEF tdp, PTXF txfp) : TDBBSN(g, tdp, txfp) Docp = NULL; Multiple = tdp->Multiple; Done = Changed = false; + Bp->SetPretty(2); } // end of TDBBSON standard constructor TDBBSON::TDBBSON(PBTDB tdbp) : TDBBSN(tdbp) @@ -2165,7 +2169,7 @@ int TDBBSON::MakeDocument(PGLOBAL g) /* Parse the json file and allocate its tree structure. */ /*********************************************************************/ g->Message[0] = 0; - jsp = Top = Bp->ParseJson(g, memory, len, &Pretty); + jsp = Top = Bp->ParseJson(g, memory, len); Txfp->CloseTableFile(g, false); Mode = mode; // Restore saved Mode diff --git a/storage/connect/tabbson.h b/storage/connect/tabbson.h index 5b764b2eabd..a53f33bd737 100644 --- a/storage/connect/tabbson.h +++ b/storage/connect/tabbson.h @@ -110,7 +110,7 @@ public: // Utility functions PBVAL FindRow(PGLOBAL g); - PBVAL ParseLine(PGLOBAL g, int *pretty, bool *comma); + PBVAL ParseLine(PGLOBAL g, int prty, bool cma); PBVAL MakeTopTree(PGLOBAL g, int type); PSZ SerialVal(PGLOBAL g, PBVAL top, int pretty); diff --git a/storage/connect/tabrest.cpp b/storage/connect/tabrest.cpp index ec8cd70cac3..1efda6e3bca 100644 --- a/storage/connect/tabrest.cpp +++ b/storage/connect/tabrest.cpp @@ -13,6 +13,8 @@ /***********************************************************************/ #if defined(MARIADB) #include <my_global.h> // All MariaDB stuff +#include <mysqld.h> +#include <sql_error.h> #else // !MARIADB OEM module #include "mini-global.h" #define _MAX_PATH 260 @@ -45,6 +47,12 @@ #include "tabfmt.h" #include "tabrest.h" +#if defined(connect_EXPORTS) +#define PUSH_WARNING(M) push_warning(current_thd, Sql_condition::WARN_LEVEL_WARN, 0, M) +#else +#define PUSH_WARNING(M) htrc(M) +#endif + #if defined(__WIN__) || defined(_WINDOWS) #define popen _popen #define pclose _pclose @@ -223,6 +231,8 @@ PQRYRES __stdcall ColREST(PGLOBAL g, PTOS tp, char *tab, char *db, bool info) fn = filename; tp->filename = PlugDup(g, fn); + sprintf(g->Message, "No file name. Table will use %s", fn); + PUSH_WARNING(g->Message); } // endif fn // We used the file name relative to recorded datapath |