summaryrefslogtreecommitdiff
path: root/storage/connect/myutil.cpp
diff options
context:
space:
mode:
authorOlivier Bertrand <bertrandop@gmail.com>2014-03-30 22:52:54 +0200
committerOlivier Bertrand <bertrandop@gmail.com>2014-03-30 22:52:54 +0200
commitfe3cbcdffa6d419bcc3658fb6dda9ea371b19d35 (patch)
tree350473c8efff19ee2c6edc266a454b78c43558e1 /storage/connect/myutil.cpp
parent5c5834b09123f46b2807dcf76872846a2185bf8a (diff)
downloadmariadb-git-fe3cbcdffa6d419bcc3658fb6dda9ea371b19d35.tar.gz
- Add system variables type_conv and conv_size. This addresses the eventual
conversion from TEXT to VARCHAR in PROXY and MYSQL tables. modified: storage/connect/ha_connect.cc storage/connect/myconn.cpp storage/connect/myconn.h storage/connect/myutil.cpp storage/connect/tabmysql.cpp storage/connect/tabutil.cpp - Add the xmap system variable addressing whether file mapping should be used to handle indexing. modified: storage/connect/CMakeLists.txt storage/connect/ha_connect.cc storage/connect/xindex.cpp storage/connect/xindex.h - Do take care of ~ in Linux version of _fullpath (not tested yet) modified: storage/connect/osutil.c
Diffstat (limited to 'storage/connect/myutil.cpp')
-rw-r--r--storage/connect/myutil.cpp72
1 files changed, 52 insertions, 20 deletions
diff --git a/storage/connect/myutil.cpp b/storage/connect/myutil.cpp
index ea694389eaf..0d9a1e2fe16 100644
--- a/storage/connect/myutil.cpp
+++ b/storage/connect/myutil.cpp
@@ -1,9 +1,9 @@
/************** MyUtil C++ Program Source Code File (.CPP) **************/
/* PROGRAM NAME: MYUTIL */
/* ------------- */
-/* Version 1.1 */
+/* Version 1.2 */
/* */
-/* Author Olivier BERTRAND 2013 */
+/* Author Olivier BERTRAND 2014 */
/* */
/* WHAT THIS PROGRAM DOES: */
/* ----------------------- */
@@ -26,6 +26,8 @@
#include "myutil.h"
#define DLL_EXPORT // Items are exported from this DLL
+extern "C" int xconv;
+
/************************************************************************/
/* Convert from MySQL type name to PlugDB type number */
/************************************************************************/
@@ -38,8 +40,7 @@ int MYSQLtoPLG(char *typname, char *var)
type = TYPE_INT;
else if (!stricmp(typname, "smallint"))
type = TYPE_SHORT;
- else if (!stricmp(typname, "char") || !stricmp(typname, "varchar") ||
- !stricmp(typname, "text") || !stricmp(typname, "blob"))
+ else if (!stricmp(typname, "char") || !stricmp(typname, "varchar"))
type = TYPE_STRING;
else if (!stricmp(typname, "double") || !stricmp(typname, "float") ||
!stricmp(typname, "real"))
@@ -54,7 +55,20 @@ int MYSQLtoPLG(char *typname, char *var)
type = TYPE_BIGINT;
else if (!stricmp(typname, "tinyint"))
type = TYPE_TINY;
- else
+ else if (!stricmp(typname, "text") && var) {
+ switch (xconv) {
+ case 1:
+ type = TYPE_STRING;
+ *var = 'X';
+ break;
+ case 2:
+ *var = 'K';
+ default:
+ type = TYPE_ERROR;
+ } // endswitch xconv
+
+ return type;
+ } else
type = TYPE_ERROR;
if (var) {
@@ -71,9 +85,11 @@ int MYSQLtoPLG(char *typname, char *var)
else if (!stricmp(typname, "year"))
*var = 'Y';
- } else if (type == TYPE_STRING && stricmp(typname, "char"))
+ } else if (type == TYPE_STRING && !stricmp(typname, "varchar"))
// This is to make the difference between CHAR and VARCHAR
*var = 'V';
+ else if (type == TYPE_ERROR && xconv == 2)
+ *var = 'K';
else
*var = 0;
@@ -196,34 +212,50 @@ int MYSQLtoPLG(int mytype, char *var)
#if !defined(ALPHA)
case MYSQL_TYPE_VARCHAR:
#endif // !ALPHA)
+ case MYSQL_TYPE_STRING:
+ type = TYPE_STRING;
+ break;
case MYSQL_TYPE_BLOB:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
- case MYSQL_TYPE_STRING:
- type = TYPE_STRING;
- break;
+ if (var) {
+ switch (xconv) {
+ case 1:
+ if (*var != 'B') {
+ // This is a TEXT column
+ type = TYPE_STRING;
+ *var = 'X';
+ } else
+ type = TYPE_ERROR;
+
+ break;
+ case 2:
+ *var = 'K'; // Skip
+ default:
+ type = TYPE_ERROR;
+ } // endswitch xconv
+
+ return type;
+ } // endif var
+
default:
type = TYPE_ERROR;
} // endswitch mytype
if (var) switch (mytype) {
// This is to make the difference between CHAR and VARCHAR
- case MYSQL_TYPE_VAR_STRING:
#if !defined(ALPHA)
case MYSQL_TYPE_VARCHAR:
#endif // !ALPHA)
- case MYSQL_TYPE_BLOB:
- case MYSQL_TYPE_TINY_BLOB:
- case MYSQL_TYPE_MEDIUM_BLOB:
- case MYSQL_TYPE_LONG_BLOB: *var = 'V'; break;
+ case MYSQL_TYPE_VAR_STRING: *var = 'V'; break;
// This is to make the difference between temporal values
- case MYSQL_TYPE_TIMESTAMP: *var = 'S'; break;
- case MYSQL_TYPE_DATE: *var = 'D'; break;
- case MYSQL_TYPE_DATETIME: *var = 'A'; break;
- case MYSQL_TYPE_YEAR: *var = 'Y'; break;
- case MYSQL_TYPE_TIME: *var = 'T'; break;
- default: *var = 0;
+ case MYSQL_TYPE_TIMESTAMP: *var = 'S'; break;
+ case MYSQL_TYPE_DATE: *var = 'D'; break;
+ case MYSQL_TYPE_DATETIME: *var = 'A'; break;
+ case MYSQL_TYPE_YEAR: *var = 'Y'; break;
+ case MYSQL_TYPE_TIME: *var = 'T'; break;
+ default: *var = 0;
} // endswitch mytype
return type;