[libgda/LIBGDA_4.2] SQlite provider: handle more dete types
- From: Vivien Malerba <vivien src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda/LIBGDA_4.2] SQlite provider: handle more dete types
- Date: Sun, 9 Oct 2011 15:25:24 +0000 (UTC)
commit cd0dfa36038c49b1d60cce3494310bf1d34d2dd7
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 c67bd9c..a5fd898b 100644
--- a/libgda/sqlite/gda-sqlite-recordset.c
+++ b/libgda/sqlite/gda-sqlite-recordset.c
@@ -540,9 +540,9 @@ fetch_next_sqlite_row (GdaSqliteRecordset *model, gboolean do_store, GError **er
else
gda_value_set_timestamp (value, ×tamp);
}
- 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,
@@ -554,9 +554,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,
@@ -566,6 +566,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 6d6f194..784bb8b 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 3a50f9e..4b2ec9f 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]