summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorOlivier Bertrand <bertrandop@gmail.com>2013-08-11 14:21:38 +0200
committerOlivier Bertrand <bertrandop@gmail.com>2013-08-11 14:21:38 +0200
commitaf9e6182899409df3199d5c577d04d1b09fe79d8 (patch)
treeb2297db0b5195976bd52a9255fbd72a2bf4f8dcf /storage
parent8bd158c10d468eabd699d881e7cea75320a37d72 (diff)
downloadmariadb-git-af9e6182899409df3199d5c577d04d1b09fe79d8.tar.gz
- Fix MDEV-4881. SQL_TYPE_DECIMAL was not recognized in ha_connect::GetColumnOption.
Crash on second SELECT was because tshp was not reset to NULL in case of error. modified: storage/connect/ha_connect.cc storage/connect/tabutil.cpp
Diffstat (limited to 'storage')
-rw-r--r--storage/connect/ha_connect.cc32
-rw-r--r--storage/connect/tabutil.cpp6
2 files changed, 13 insertions, 25 deletions
diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc
index 2c6fb06bffb..dce8fecb5ed 100644
--- a/storage/connect/ha_connect.cc
+++ b/storage/connect/ha_connect.cc
@@ -905,9 +905,13 @@ void *ha_connect::GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf)
case MYSQL_TYPE_VAR_STRING:
pcf->Flags |= U_VAR;
/* no break */
- case MYSQL_TYPE_STRING:
- pcf->Type= TYPE_STRING;
+ default:
+ pcf->Type= MYSQLtoPLG(fp->type());
+ break;
+ } // endswitch SQL type
+ switch (pcf->Type) {
+ case TYPE_STRING:
// Do something for case
cp= fp->charset()->name;
@@ -918,26 +922,10 @@ void *ha_connect::GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf)
} // endif ci
break;
- case MYSQL_TYPE_LONG:
- pcf->Type= TYPE_INT;
- break;
- case MYSQL_TYPE_SHORT:
- pcf->Type= TYPE_SHORT;
- break;
- case MYSQL_TYPE_TINY:
- pcf->Type= TYPE_TINY;
- break;
- case MYSQL_TYPE_DOUBLE:
- case MYSQL_TYPE_FLOAT:
- pcf->Type= TYPE_FLOAT;
+ case TYPE_FLOAT:
pcf->Prec= max(min(fp->decimals(), ((unsigned)pcf->Length - 2)), 0);
break;
- case MYSQL_TYPE_DATE:
- case MYSQL_TYPE_TIME:
- case MYSQL_TYPE_DATETIME:
- case MYSQL_TYPE_TIMESTAMP:
- pcf->Type= TYPE_DATE;
-
+ case TYPE_DATE:
// Field_length is only used for DATE columns
if (fop->fldlen)
pcf->Length= (int)fop->fldlen;
@@ -963,11 +951,7 @@ void *ha_connect::GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf)
} // endelse
break;
- case MYSQL_TYPE_LONGLONG:
- pcf->Type= TYPE_BIGINT;
- break;
default:
- pcf->Type=TYPE_ERROR;
break;
} // endswitch type
diff --git a/storage/connect/tabutil.cpp b/storage/connect/tabutil.cpp
index 93b8e7a4263..151b527507a 100644
--- a/storage/connect/tabutil.cpp
+++ b/storage/connect/tabutil.cpp
@@ -368,7 +368,11 @@ PTDBASE TDBPRX::GetSubTable(PGLOBAL g, PTABLE tabp, bool b)
#if defined(MYSQL_SUPPORT)
// Access sub-table via MySQL API
if (!(tdbp= cat->GetTable(g, tabp, MODE_READ, "MYPRX"))) {
- sprintf(g->Message, "Cannot access %s.%s", db, name);
+ char buf[MAX_STR];
+
+ strcpy(buf, g->Message);
+ sprintf(g->Message, "Error accessing %s.%s: %s", db, name, buf);
+ hc->tshp = NULL;
goto err;
} // endif Define