summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mnogosearch.org>2014-10-13 12:31:55 +0400
committerAlexander Barkov <bar@mnogosearch.org>2014-10-13 12:31:55 +0400
commitec3e6cc88bc87dce52cbebd7e0c6b5b8f571cfb4 (patch)
treeae363153ff40681b409f1c1463cbb23cb7ad43fb
parent911ed9379f6f21bf5fc1e21876006ad9f058fca2 (diff)
parentb10fa87b15b504ed1467558cf8984ed8de0c6184 (diff)
downloadmariadb-git-ec3e6cc88bc87dce52cbebd7e0c6b5b8f571cfb4.tar.gz
Merge 10.0-connect -> 10.0
-rw-r--r--storage/connect/ha_connect.cc3
-rw-r--r--storage/connect/plgdbutl.cpp6
-rw-r--r--storage/connect/tabodbc.cpp3
-rw-r--r--storage/connect/value.cpp51
-rw-r--r--storage/connect/value.h1
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);