[libgda] SQlite provider: handle more dete types



commit 876b27c922b9db2631f98ed988d1aa1bcb8f3f43
Author: Vivien Malerba <malerba gnome-db org>
Date:   Wed Sep 28 21:36:17 2011 +0200

    SQlite provider: handle more dete types

 libgda/sqlite/gda-sqlite-recordset.c             |   34 +++++++++++++++++++--
 libgda/sqlite/gda-sqlite-util.c                  |   13 ++++++++-
 libgda/sqlite/virtual/gda-vprovider-data-model.c |   10 ++++--
 3 files changed, 49 insertions(+), 8 deletions(-)
---
diff --git a/libgda/sqlite/gda-sqlite-recordset.c b/libgda/sqlite/gda-sqlite-recordset.c
index c4c8099..83f9f84 100644
--- a/libgda/sqlite/gda-sqlite-recordset.c
+++ b/libgda/sqlite/gda-sqlite-recordset.c
@@ -542,9 +542,9 @@ fetch_next_sqlite_row (GdaSqliteRecordset *model, gboolean do_store, GError **er
 					else
 						gda_value_set_timestamp (value, &timestamp);
 				}
-				else if (type == G_TYPE_INT) {
+				else if (type == G_TYPE_CHAR) {
 					gint64 i;
-					i = SQLITE3_CALL (sqlite3_column_int64) (ps->sqlite_stmt, real_col);
+					i = (gint64) SQLITE3_CALL (sqlite3_column_int64) (ps->sqlite_stmt, real_col);
 					if ((i > G_MAXINT8) || (i < G_MININT8)) {
 						GError *lerror = NULL;
 						g_set_error (&lerror, GDA_SERVER_PROVIDER_ERROR,
@@ -556,9 +556,9 @@ fetch_next_sqlite_row (GdaSqliteRecordset *model, gboolean do_store, GError **er
 						g_value_set_char (value, (gchar) i);
 				}
 				else if (type == G_TYPE_UCHAR) {
-					guint64 i;
+					gint64 i;
 					i = (gint64) SQLITE3_CALL (sqlite3_column_int64) (ps->sqlite_stmt, real_col);
-					if (i > G_MAXUINT8) {
+					if ((i > G_MAXUINT8) || (i < 0)) {
 						GError *lerror = NULL;
 						g_set_error (&lerror, GDA_SERVER_PROVIDER_ERROR,
 							     GDA_SERVER_PROVIDER_DATA_ERROR,
@@ -568,6 +568,32 @@ fetch_next_sqlite_row (GdaSqliteRecordset *model, gboolean do_store, GError **er
 					else
 						g_value_set_uchar (value, (guchar) i);
 				}
+				else if (type == GDA_TYPE_SHORT) {
+					gint64 i;
+					i = (gint64) SQLITE3_CALL (sqlite3_column_int64) (ps->sqlite_stmt, real_col);
+					if ((i > G_MAXSHORT) || (i < G_MINSHORT)) {
+						GError *lerror = NULL;
+						g_set_error (&lerror, GDA_SERVER_PROVIDER_ERROR,
+							     GDA_SERVER_PROVIDER_DATA_ERROR,
+							     "%s", _("Integer value is too big"));
+						gda_row_invalidate_value_e (prow, value, lerror);
+					}
+					else
+						gda_value_set_short (value, (guchar) i);
+				}
+				else if (type == GDA_TYPE_USHORT) {
+					gint64 i;
+					i = (gint64) SQLITE3_CALL (sqlite3_column_int64) (ps->sqlite_stmt, real_col);
+					if ((i > G_MAXUSHORT) || (i < 0)) {
+						GError *lerror = NULL;
+						g_set_error (&lerror, GDA_SERVER_PROVIDER_ERROR,
+							     GDA_SERVER_PROVIDER_DATA_ERROR,
+							     "%s", _("Integer value is too big"));
+						gda_row_invalidate_value_e (prow, value, lerror);
+					}
+					else
+						gda_value_set_ushort (value, (guchar) i);
+				}
 				else {
 					GError *lerror = NULL;
 					g_set_error (&lerror, GDA_SERVER_PROVIDER_ERROR,
diff --git a/libgda/sqlite/gda-sqlite-util.c b/libgda/sqlite/gda-sqlite-util.c
index bd3b210..cc356c9 100644
--- a/libgda/sqlite/gda-sqlite-util.c
+++ b/libgda/sqlite/gda-sqlite-util.c
@@ -59,7 +59,7 @@ _gda_sqlite_compute_types_hash (SqliteConnectionData *cdata)
 		GHashTable *hash;
 		cdata->types_hash = g_hash_table_new (nocase_str_hash, nocase_str_equal);
 		hash = cdata->types_hash;
-#define NB_DECLARED_G_TYPES 12
+#define NB_DECLARED_G_TYPES 14
 		cdata->types_array = g_new (GType, NB_DECLARED_G_TYPES);
 		array = cdata->types_array;
 
@@ -126,6 +126,17 @@ _gda_sqlite_compute_types_hash (SqliteConnectionData *cdata)
 		i++;
 		array [i] = type;
 		g_hash_table_insert (hash, "uint64", array + i);
+
+		type = GDA_TYPE_SHORT;
+		i++;
+		array [i] = type;
+		g_hash_table_insert (hash, "short", array + i);
+
+		type = GDA_TYPE_USHORT;
+		i++;
+		array [i] = type;
+		g_hash_table_insert (hash, "ushort", array + i);
+		g_hash_table_insert (hash, "unsigned short", array + i);
 		g_assert (i < NB_DECLARED_G_TYPES);
 	}
 }
diff --git a/libgda/sqlite/virtual/gda-vprovider-data-model.c b/libgda/sqlite/virtual/gda-vprovider-data-model.c
index a94bd22..94ce799 100644
--- a/libgda/sqlite/virtual/gda-vprovider-data-model.c
+++ b/libgda/sqlite/virtual/gda-vprovider-data-model.c
@@ -530,9 +530,9 @@ virtualCreate (sqlite3 *db, void *pAux, int argc, const char *const *argv, sqlit
 			type = "binary";
 		else if (gtype == G_TYPE_STRING)
 			type = "string";
-		else if ((gtype == G_TYPE_INT) || (gtype == GDA_TYPE_SHORT))
+		else if (gtype == G_TYPE_INT)
 			type = "integer";
-		else if ((gtype == G_TYPE_UINT) || (gtype == GDA_TYPE_USHORT))
+		else if (gtype == G_TYPE_UINT)
 			type = "unsigned integer";
 		else if ((gtype == G_TYPE_INT64) || (gtype == G_TYPE_LONG))
 			type = "int64";
@@ -546,7 +546,11 @@ virtualCreate (sqlite3 *db, void *pAux, int argc, const char *const *argv, sqlit
 			type = "time";
 		else if (gtype == GDA_TYPE_TIMESTAMP)
 			type = "timestamp";
-		else 
+		else if (gtype == GDA_TYPE_SHORT)
+			type = "short";
+		else if (gtype == GDA_TYPE_USHORT)
+			type = "unsigned short";
+		else
 			type = "text";
 
 		g_string_append (sql, newcolname);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]