diff options
author | Alexander Barkov <bar@mnogosearch.org> | 2014-10-13 12:31:55 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mnogosearch.org> | 2014-10-13 12:31:55 +0400 |
commit | ec3e6cc88bc87dce52cbebd7e0c6b5b8f571cfb4 (patch) | |
tree | ae363153ff40681b409f1c1463cbb23cb7ad43fb | |
parent | 911ed9379f6f21bf5fc1e21876006ad9f058fca2 (diff) | |
parent | b10fa87b15b504ed1467558cf8984ed8de0c6184 (diff) | |
download | mariadb-git-ec3e6cc88bc87dce52cbebd7e0c6b5b8f571cfb4.tar.gz |
Merge 10.0-connect -> 10.0
-rw-r--r-- | storage/connect/ha_connect.cc | 3 | ||||
-rw-r--r-- | storage/connect/plgdbutl.cpp | 6 | ||||
-rw-r--r-- | storage/connect/tabodbc.cpp | 3 | ||||
-rw-r--r-- | storage/connect/value.cpp | 51 | ||||
-rw-r--r-- | storage/connect/value.h | 1 |
5 files changed, 40 insertions, 24 deletions
diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc index c6ca6c11df6..f6f7fac8a76 100644 --- a/storage/connect/ha_connect.cc +++ b/storage/connect/ha_connect.cc @@ -960,6 +960,8 @@ bool ha_connect::GetBooleanOption(char *opname, bool bdef) opval= options->readonly; else if (!stricmp(opname, "SepIndex")) opval= options->sepindex; + else if (!stricmp(opname, "Header")) + opval= (options->header != 0); // Is Boolean for some table types else if (options->oplist) if ((pv= GetListOption(xp->g, opname, options->oplist))) opval= (!*pv || *pv == 'y' || *pv == 'Y' || atoi(pv) != 0); @@ -1838,6 +1840,7 @@ int ha_connect::ScanRecord(PGLOBAL g, uchar *buf) } // endswitch type ((DTVAL*)sdvalin)->SetFormat(g, fmt, strlen(fmt)); + sdvalin->SetNullable(colp->IsNullable()); fp->val_str(&attribute); sdvalin->SetValue_psz(attribute.c_ptr_safe()); value->SetValue_pval(sdvalin); diff --git a/storage/connect/plgdbutl.cpp b/storage/connect/plgdbutl.cpp index c5b66e8f5e6..755aeb21105 100644 --- a/storage/connect/plgdbutl.cpp +++ b/storage/connect/plgdbutl.cpp @@ -730,6 +730,7 @@ int ExtractDate(char *dts, PDTP pdp, int defy, int val[6]) char *fmt, c, d, e, W[8][12]; int i, k, m, numval; int n, y = 30; + bool b = true; // true for null dates if (pdp) fmt = pdp->InFmt; @@ -763,7 +764,8 @@ int ExtractDate(char *dts, PDTP pdp, int defy, int val[6]) m = pdp->Num; for (i = 0; i < m; i++) { - n = *(int*)W[i]; + if ((n = *(int*)W[i])) + b = false; switch (k = pdp->Index[i]) { case 0: @@ -822,7 +824,7 @@ int ExtractDate(char *dts, PDTP pdp, int defy, int val[6]) htrc("numval=%d val=(%d,%d,%d,%d,%d,%d)\n", numval, val[0], val[1], val[2], val[3], val[4], val[5]); - return numval; + return (b) ? 0 : numval; } // end of ExtractDate /***********************************************************************/ diff --git a/storage/connect/tabodbc.cpp b/storage/connect/tabodbc.cpp index 023d7efa708..c9f5fbe31c7 100644 --- a/storage/connect/tabodbc.cpp +++ b/storage/connect/tabodbc.cpp @@ -1075,8 +1075,9 @@ void ODBCCOL::ReadColumn(PGLOBAL g) } // endif Bufp if (Buf_Type == TYPE_DATE) { - struct tm dbtime = {0,0,0,0,0,0,0,0,0}; + struct tm dbtime; + memset(&dbtime, 0, sizeof(tm)); dbtime.tm_sec = (int)Sqlbuf->second; dbtime.tm_min = (int)Sqlbuf->minute; dbtime.tm_hour = (int)Sqlbuf->hour; diff --git a/storage/connect/value.cpp b/storage/connect/value.cpp index b2935743bd5..41e425d54e2 100644 --- a/storage/connect/value.cpp +++ b/storage/connect/value.cpp @@ -2428,9 +2428,11 @@ bool DTVAL::SetValue_char(char *p, int n) if (trace > 1) htrc(" setting date: '%s' -> %d\n", Sdate, Tval); - Null = false; - } else + Null = (Nullable && ndv == 0); + } else { rc = TYPVAL<int>::SetValue_char(p, n); + Null = (Nullable && Tval == 0); + } // endif Pdtp return rc; } // end of SetValue @@ -2453,9 +2455,11 @@ void DTVAL::SetValue_psz(PSZ p) if (trace > 1) htrc(" setting date: '%s' -> %d\n", Sdate, Tval); - Null = false; - } else + Null = (Nullable && ndv == 0); + } else { TYPVAL<int>::SetValue_psz(p); + Null = (Nullable && Tval == 0); + } // endif Pdtp } // end of SetValue @@ -2496,7 +2500,7 @@ char *DTVAL::GetCharString(char *p) } else sprintf(p, "%d", Tval); - Null = false; +//Null = false; ?????????????? return p; } // end of GetCharString @@ -2507,24 +2511,29 @@ char *DTVAL::ShowValue(char *buf, int len) { if (Pdtp) { char *p; - size_t m, n = 0; - struct tm tm, *ptm = GetGmTime(&tm); - - if (Len < len) { - p = buf; - m = len; - } else { - p = Sdate; - m = Len + 1; - } // endif Len - if (ptm) - n = strftime(p, m, Pdtp->OutFmt, ptm); + if (!Null) { + size_t m, n = 0; + struct tm tm, *ptm = GetGmTime(&tm); + + if (Len < len) { + p = buf; + m = len; + } else { + p = Sdate; + m = Len + 1; + } // endif Len + + if (ptm) + n = strftime(p, m, Pdtp->OutFmt, ptm); + + if (!n) { + *p = '\0'; + strncat(p, "Error", m); + } // endif n - if (!n) { - *p = '\0'; - strncat(p, "Error", m); - } // endif n + } else + p = ""; // DEFAULT VALUE ??? return p; } else diff --git a/storage/connect/value.h b/storage/connect/value.h index 151ddacf509..295fa11107a 100644 --- a/storage/connect/value.h +++ b/storage/connect/value.h @@ -357,6 +357,7 @@ class DllExport DTVAL : public TYPVAL<int> { DTVAL(PGLOBAL g, double f); // Implementation + virtual bool IsZero(void) {return Null;} virtual bool SetValue_pval(PVAL valp, bool chktype); virtual bool SetValue_char(char *p, int n); virtual void SetValue_psz(PSZ s); |