From bbc2c0ead632f7ff88d15bce0a58bac577faaa9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Wed, 18 Feb 2015 14:25:40 +0100 Subject: [PATCH] Odbc: big_typed_query() now knows about UUID values. --- lib/modules/Sql.pmod/odbc.pike | 6 ++++++ src/modules/Odbc/odbc_result.c | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/lib/modules/Sql.pmod/odbc.pike b/lib/modules/Sql.pmod/odbc.pike index 2442fa3cb5..bcfd1a31e5 100644 --- a/lib/modules/Sql.pmod/odbc.pike +++ b/lib/modules/Sql.pmod/odbc.pike @@ -111,4 +111,10 @@ class typed_result return Calendar.ISO.Fraction(year, month, day, hour, minute, second, nanos); } + + //! Function called to create UUID/GUID objects. + Standards.UUID.UUID uuid_factory(string(0..255) raw_uuid) + { + return Standards.UUID.UUID(raw_uuid); + } } diff --git a/src/modules/Odbc/odbc_result.c b/src/modules/Odbc/odbc_result.c index 8f1fdb18bd..a79ba73073 100644 --- a/src/modules/Odbc/odbc_result.c +++ b/src/modules/Odbc/odbc_result.c @@ -73,6 +73,7 @@ int odbc_typed_result_fun_num = -1; static int scale_numeric_fun_num = -1; static int time_factory_fun_num = -1; static int timestamp_factory_fun_num = -1; +static int uuid_factory_fun_num = -1; /* * Functions @@ -270,6 +271,11 @@ static void push_timestamp(int i) apply_current(timestamp_factory_fun_num, 7); } +static void push_uuid(int i) +{ + apply_current(uuid_factory_fun_num, 1); +} + #ifndef SQL_SS_VARIANT #define SQL_SS_VARIANT (-150) #endif @@ -434,6 +440,8 @@ static void odbc_fix_fields(void) #ifdef SQL_GUID case SQL_GUID: push_text("uuid"); + field_info[i].bin_size = sizeof(struct tagSQLGUID); + field_info[i].factory = push_uuid; break; #endif case SQL_DATE: @@ -1376,6 +1384,8 @@ void init_odbc_res_programs(void) tOr(tInt, tVoid) tOr(tInt, tVoid) tOr(tInt, tVoid) tOr(tInt, tVoid), tMix), ID_PUBLIC); + uuid_factory_fun_num = + ADD_FUNCTION("uuid_factory", NULL, tFunc(tStr8, tObj), ID_PUBLIC); odbc_typed_result_program = end_program(); odbc_typed_result_fun_num = -- GitLab