summaryrefslogtreecommitdiff
path: root/storage/connect/value.cpp
diff options
context:
space:
mode:
authorOlivier Bertrand <bertrandop@gmail.com>2014-10-12 12:05:05 +0200
committerOlivier Bertrand <bertrandop@gmail.com>2014-10-12 12:05:05 +0200
commit50fc9b3b1936662f657dedd124244d373ee8b2be (patch)
tree0bb920f36d6bd194db6b430fb90c4b39f3f9e283 /storage/connect/value.cpp
parent7531f22a68ba8e0e25ae95366fdfe094daa68565 (diff)
downloadmariadb-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.cpp51
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