diff options
author | Sergei Golubchik <serg@mariadb.org> | 2015-10-27 18:57:28 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2015-10-27 18:57:28 +0100 |
commit | 3c5733cd2dab8877afd46f38139f2cbb13b71125 (patch) | |
tree | 9b30e5cb6caff1cf55fae7a978d1b9be1f40fde1 /storage | |
parent | 6a28882b57497b7c167577b2cdc03c7193779b71 (diff) | |
parent | 41a3c58e28ec682fbffb5fde3021dd0e7958a7c5 (diff) | |
download | mariadb-git-3c5733cd2dab8877afd46f38139f2cbb13b71125.tar.gz |
Merge branch 'connect/10.0' into 10.0
Diffstat (limited to 'storage')
-rw-r--r-- | storage/connect/ha_connect.cc | 32 | ||||
-rw-r--r-- | storage/connect/odbconn.cpp | 6 | ||||
-rw-r--r-- | storage/connect/reldef.h | 3 | ||||
-rw-r--r-- | storage/connect/tabdos.cpp | 3 | ||||
-rw-r--r-- | storage/connect/tabjson.cpp | 12 | ||||
-rw-r--r-- | storage/connect/tabodbc.cpp | 17 | ||||
-rw-r--r-- | storage/connect/value.cpp | 22 |
7 files changed, 66 insertions, 29 deletions
diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc index e1ef6f6af62..3036783e5b7 100644 --- a/storage/connect/ha_connect.cc +++ b/storage/connect/ha_connect.cc @@ -169,7 +169,7 @@ #define JSONMAX 10 // JSON Default max grp size extern "C" { - char version[]= "Version 1.03.0007 July 05, 2015"; + char version[]= "Version 1.03.0007 October 20, 2015"; #if defined(__WIN__) char compver[]= "Version 1.03.0007 " __DATE__ " " __TIME__; char slash= '\\'; @@ -1134,7 +1134,10 @@ PTOS ha_connect::GetTableOptionStruct(TABLE_SHARE *s) { TABLE_SHARE *tsp= (tshp) ? tshp : (s) ? s : table_share; - return (tsp) ? tsp->option_struct : NULL; + return (tsp && (!tsp->db_plugin || + !stricmp(plugin_name(tsp->db_plugin)->str, "connect") || + !stricmp(plugin_name(tsp->db_plugin)->str, "partition"))) + ? tsp->option_struct : NULL; } // end of GetTableOptionStruct /****************************************************************************/ @@ -2471,7 +2474,18 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond) !(colp[i]= tdbp->ColDB(g, (PSZ)pField->field->field_name, 0))) return NULL; // Column does not belong to this table - if (trace) { + // These types are not yet implemented (buggy) + switch (pField->field->type()) { + case MYSQL_TYPE_TIMESTAMP: + case MYSQL_TYPE_DATE: + case MYSQL_TYPE_TIME: + case MYSQL_TYPE_DATETIME: + case MYSQL_TYPE_YEAR: + case MYSQL_TYPE_NEWDATE: + return NULL; + } // endswitch type + + if (trace) { htrc("Field index=%d\n", pField->field->field_index); htrc("Field name=%s\n", pField->field->field_name); } // endif trace @@ -2486,12 +2500,10 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond) if (!i && (ismul)) return NULL; - if ((res= pval->val_str(&tmp)) == NULL) - return NULL; // To be clarified - - switch (args[i]->real_type()) { + switch (args[i]->real_type()) { case COND::STRING_ITEM: - pp->Value= PlugSubAllocStr(g, NULL, res->ptr(), res->length()); + res= pval->val_str(&tmp); + pp->Value= PlugSubAllocStr(g, NULL, res->ptr(), res->length()); pp->Type= (pp->Value) ? TYPE_STRING : TYPE_ERROR; break; case COND::INT_ITEM: @@ -2520,8 +2532,8 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond) return NULL; } // endswitch type - if (trace) - htrc("Value=%.*s\n", res->length(), res->ptr()); + if (trace) + htrc("Value type=%hd\n", pp->Type); // Append the value to the argument list if (pprec) diff --git a/storage/connect/odbconn.cpp b/storage/connect/odbconn.cpp index 6aaa048de81..1ccdf231970 100644 --- a/storage/connect/odbconn.cpp +++ b/storage/connect/odbconn.cpp @@ -2360,9 +2360,11 @@ int ODBConn::GetCatInfo(CATPARM *cap) } // endif rc for (n = 0, crp = qrp->Colresp; crp; n++, crp = crp->Next) { - if (vlen[n] == SQL_NULL_DATA) + if (vlen[n] == SQL_NO_TOTAL) + ThrowDBX("Unexpected SQL_NO_TOTAL returned from SQLFetch"); + else if (vlen[n] == SQL_NULL_DATA) pval[n]->SetNull(true); - else if (crp->Type == TYPE_STRING && vlen[n] != SQL_NULL_DATA) + else if (crp->Type == TYPE_STRING/* && vlen[n] != SQL_NULL_DATA*/) pval[n]->SetValue_char(pbuf[n], vlen[n]); else pval[n]->SetNull(false); diff --git a/storage/connect/reldef.h b/storage/connect/reldef.h index 4aa29037dfc..dada5716dbe 100644 --- a/storage/connect/reldef.h +++ b/storage/connect/reldef.h @@ -193,7 +193,8 @@ class DllExport COLDEF : public COLCRT { /* Column description block friend class COLBLK; friend class DBFFAM; friend class TDBASE; - public: + friend class TDBDOS; +public: COLDEF(void); // Constructor // Implementation diff --git a/storage/connect/tabdos.cpp b/storage/connect/tabdos.cpp index a1e58ab3344..527fe55dd89 100644 --- a/storage/connect/tabdos.cpp +++ b/storage/connect/tabdos.cpp @@ -2018,7 +2018,8 @@ int TDBDOS::EstimatedLength(void) // result if we set dep to 1 dep = 1 + cdp->GetLong() / 20; // Why 20 ????? } else for (; cdp; cdp = cdp->GetNext()) - dep = MY_MAX(dep, cdp->GetOffset()); + if (!(cdp->Flags & (U_VIRTUAL|U_SPECIAL))) + dep = MY_MAX(dep, cdp->GetOffset()); return (int)dep; } // end of Estimated Length diff --git a/storage/connect/tabjson.cpp b/storage/connect/tabjson.cpp index fafba6228b9..211a58f0344 100644 --- a/storage/connect/tabjson.cpp +++ b/storage/connect/tabjson.cpp @@ -755,7 +755,7 @@ int TDBJSN::MakeTopTree(PGLOBAL g, PJSON jsp) } else strcpy(To_Line, s); - Row->Clear(); +// Row->Clear(); return false; } else return true; @@ -979,7 +979,8 @@ bool JSONCOL::ParseJpath(PGLOBAL g) if (!stricmp(Name, colp->GetName())) { Nod = colp->Nod; Nodes = colp->Nodes; - goto fin; + Xpd = colp->Xpd; + goto fin; } // endif Name sprintf(g->Message, "Cannot parse updated column %s", Name); @@ -1347,7 +1348,12 @@ PJSON JSONCOL::GetRow(PGLOBAL g) /***********************************************************************/ void JSONCOL::WriteColumn(PGLOBAL g) { - /*********************************************************************/ + if (Xpd && Tjp->Pretty < 2) { + strcpy(g->Message, "Cannot write expanded column when Pretty is not 2"); + longjmp(g->jumper[g->jump_level], 666); + } // endif Xpd + + /*********************************************************************/ /* Check whether this node must be written. */ /*********************************************************************/ if (Value != To_Val) diff --git a/storage/connect/tabodbc.cpp b/storage/connect/tabodbc.cpp index 098ed1ac114..31854870ed2 100644 --- a/storage/connect/tabodbc.cpp +++ b/storage/connect/tabodbc.cpp @@ -321,10 +321,21 @@ PSZ TDBODBC::GetFile(PGLOBAL g) { if (Connect) { char *p1, *p2; - size_t n; + int i; + size_t n; - if ((p1 = strstr(Connect, "DBQ="))) { - p1 += 4; // Beginning of file name + if (!(p1 = strstr(Connect, "DBQ="))) { + char *p, *lc = strlwr(PlugDup(g, Connect)); + + if ((p = strstr(lc, "database="))) + p1 = Connect + (p - lc); + + i = 9; + } else + i = 4; + + if (p1) { + p1 += i; // Beginning of file name p2 = strchr(p1, ';'); // End of file path/name // Make the File path/name from the connect string diff --git a/storage/connect/value.cpp b/storage/connect/value.cpp index 03ec0eb8e40..884ce976a52 100644 --- a/storage/connect/value.cpp +++ b/storage/connect/value.cpp @@ -103,6 +103,7 @@ ulonglong CharToNumber(char *p, int n, ulonglong maxval, if (minus) *minus = false; if (rc) *rc = false; + if (n <= 0) return 0LL; // Eliminate leading blanks or 0 for (p2 = p + n; p < p2 && (*p == ' ' || *p == '0'); p++) ; @@ -705,7 +706,7 @@ bool TYPVAL<TYPE>::SetValue_char(char *p, int n) template <> bool TYPVAL<double>::SetValue_char(char *p, int n) { - if (p) { + if (p && n > 0) { char buf[64]; for (; n > 0 && *p == ' '; p++) @@ -1345,7 +1346,7 @@ bool TYPVAL<PSZ>::SetValue_char(char *p, int n) { bool rc; - if (p) { + if (p && n > 0) { rc = n > Len; if ((n = MY_MIN(n, Len))) { @@ -1804,7 +1805,7 @@ bool DECVAL::SetValue_char(char *p, int n) { bool rc; - if (p) { + if (p && n > 0) { rc = n > Len; if ((n = MY_MIN(n, Len))) { @@ -2095,7 +2096,7 @@ bool BINVAL::SetValue_char(char *p, int n) { bool rc; - if (p) { + if (p && n > 0) { rc = n > Clen; Len = MY_MIN(n, Clen); memcpy(Binp, p, Len); @@ -2672,13 +2673,16 @@ bool DTVAL::SetValue_char(char *p, int n) int ndv; int dval[6]; - // Trim trailing blanks - for (p2 = p + n -1; p < p2 && *p2 == ' '; p2--) ; + if (n > 0) { + // Trim trailing blanks + for (p2 = p + n -1; p < p2 && *p2 == ' '; p2--); - if ((rc = (n = p2 - p + 1) > Len)) - n = Len; + if ((rc = (n = p2 - p + 1) > Len)) + n = Len; + + memcpy(Sdate, p, n); + } // endif n - memcpy(Sdate, p, n); Sdate[n] = '\0'; ndv = ExtractDate(Sdate, Pdtp, DefYear, dval); |