diff options
author | Olivier Bertrand <bertrandop@gmail.com> | 2014-10-12 12:05:05 +0200 |
---|---|---|
committer | Olivier Bertrand <bertrandop@gmail.com> | 2014-10-12 12:05:05 +0200 |
commit | 50fc9b3b1936662f657dedd124244d373ee8b2be (patch) | |
tree | 0bb920f36d6bd194db6b430fb90c4b39f3f9e283 /storage/connect/value.cpp | |
parent | 7531f22a68ba8e0e25ae95366fdfe094daa68565 (diff) | |
download | mariadb-git-50fc9b3b1936662f657dedd124244d373ee8b2be.tar.gz |
- Fix null handling for date columns (see MDEV-6744)
modified:
storage/connect/ha_connect.cc
storage/connect/plgdbutl.cpp
storage/connect/value.cpp
storage/connect/value.h
Diffstat (limited to 'storage/connect/value.cpp')
-rw-r--r-- | storage/connect/value.cpp | 51 |
1 files changed, 30 insertions, 21 deletions
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 |