Description: Export REPID (UUID) fields as string & use char(38) in mysql
Author: Will Daniels <mail@willdaniels.co.uk>
Forwarded: no
Last-Update: 2012-01-04

---
 src/libmdb/backend.c  |    2 +-
 src/libmdb/data.c     |   24 ++++++++++++++++++++++++
 src/util/mdb-export.c |    4 ++--
 3 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/src/libmdb/backend.c b/src/libmdb/backend.c
index 762655d..a26c2ee 100644
--- a/src/libmdb/backend.c
+++ b/src/libmdb/backend.c
@@ -145,7 +145,7 @@ static MdbBackendType mdb_mysql_types[] = {
 		MdbBackendType_STRUCT_ELEMENT("text",1,0,1),
 		MdbBackendType_STRUCT_ELEMENT("blob",0,0,0),
 		MdbBackendType_STRUCT_ELEMENT("text",1,0,1),
-		MdbBackendType_STRUCT_ELEMENT("numeric",1,1,0),
+		MdbBackendType_STRUCT_ELEMENT("char(38)",0,0,0),
 		MdbBackendType_STRUCT_ELEMENT("numeric",1,1,0),
 };
 static MdbBackendType mdb_mysql_shortdate_type =
diff --git a/src/libmdb/data.c b/src/libmdb/data.c
index bd3b7b6..591f788 100644
--- a/src/libmdb/data.c
+++ b/src/libmdb/data.c
@@ -840,6 +840,27 @@ mdb_date_to_string(MdbHandle *mdb, int start)
 	return text;
 }
 
+static char *
+mdb_uuid_to_string(MdbHandle *mdb, int start)
+{
+	char *text = NULL;
+  unsigned short uuid1, uuid2, uuid3, uuid4, uuid5, uuid6, uuid7, uuid8;
+
+  uuid1 = mdb_get_int16(mdb->pg_buf, start);
+  uuid2 = mdb_get_int16(mdb->pg_buf, start + 2);
+  uuid3 = mdb_get_int16(mdb->pg_buf, start + 4);
+  uuid4 = mdb_get_int16(mdb->pg_buf, start + 6);
+  uuid5 = mdb_get_int16(mdb->pg_buf, start + 8);
+  uuid6 = mdb_get_int16(mdb->pg_buf, start + 10);
+  uuid7 = mdb_get_int16(mdb->pg_buf, start + 12);
+  uuid8 = mdb_get_int16(mdb->pg_buf, start + 14);
+
+  text = g_strdup_printf("{%04x%04x-%04x-%04x-%04x-%04x%04x%04x}",
+    uuid1, uuid2, uuid3, uuid4, uuid5, uuid6, uuid7, uuid8);
+
+	return text;
+}
+
 #if 0
 int floor_log10(double f, int is_single)
 {
@@ -927,6 +948,9 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int
 			text = mdb_money_to_string(mdb, start);
 		case MDB_NUMERIC:
 		break;
+    case MDB_REPID:
+      text = mdb_uuid_to_string(mdb, start);
+    break;
 		default:
 			text = g_strdup("");
 		break;
diff --git a/src/util/mdb-export.c b/src/util/mdb-export.c
index afbf8b1..dcb2409 100644
--- a/src/util/mdb-export.c
+++ b/src/util/mdb-export.c
@@ -25,8 +25,8 @@
 #undef MDB_BIND_SIZE
 #define MDB_BIND_SIZE 200000
 
-#define is_quote_type(x) (x==MDB_TEXT || x==MDB_OLE || x==MDB_MEMO || x==MDB_DATETIME || x==MDB_BINARY)
-#define is_binary_type(x) (x==MDB_OLE || x==MDB_BINARY)
+#define is_quote_type(x) (x==MDB_TEXT || x==MDB_OLE || x==MDB_MEMO || x==MDB_DATETIME || x==MDB_BINARY || x==MDB_REPID)
+#define is_binary_type(x) (x==MDB_OLE || x==MDB_BINARY || x==MDB_REPID)
 
 static char *escapes(char *s);
 
-- 
1.7.7.3

