From 04b6cf5232169fd5f965cb8645b4b2f6c2bf7216 Mon Sep 17 00:00:00 2001 From: Will Daniels Date: Fri, 29 Jun 2012 02:28:51 +0200 Subject: [PATCH] Export REPID as string & use char(38) in mysql --- 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 4f19ff1..316ce87 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 ac5cd1b..e06f40b 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);