[hyena/sqlite] [Hyena.Data.Sqlite] Consolidate type conversion
- From: Gabriel Burt <gburt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [hyena/sqlite] [Hyena.Data.Sqlite] Consolidate type conversion
- Date: Thu, 11 Nov 2010 06:00:33 +0000 (UTC)
commit c9acfebfb1a65f5dd4094d0a2d1968f50e66db06
Author: Gabriel Burt <gabriel burt gmail com>
Date: Wed Nov 10 23:59:10 2010 -0600
[Hyena.Data.Sqlite] Consolidate type conversion
Instead of taking the value the db returns and converting it in the
SqliteModelProvider, have the IDataReader do it.
.../Hyena.Data.Sqlite/DatabaseColumn.cs | 20 ++++----------------
Hyena.Data.Sqlite/Hyena.Data.Sqlite/Sqlite.cs | 18 +++++++++++++-----
.../Hyena.Data.Sqlite/SqliteModelProvider.cs | 8 ++++----
3 files changed, 21 insertions(+), 25 deletions(-)
---
diff --git a/Hyena.Data.Sqlite/Hyena.Data.Sqlite/DatabaseColumn.cs b/Hyena.Data.Sqlite/Hyena.Data.Sqlite/DatabaseColumn.cs
index e4461e9..9021672 100644
--- a/Hyena.Data.Sqlite/Hyena.Data.Sqlite/DatabaseColumn.cs
+++ b/Hyena.Data.Sqlite/Hyena.Data.Sqlite/DatabaseColumn.cs
@@ -79,18 +79,10 @@ namespace Hyena.Data.Sqlite
public object GetValue (object target)
{
- object result = field_info != null
- ? field_info.GetValue (target)
- : property_info.GetValue (target, null);
+ object result = GetRawValue (target);
return SqliteUtils.ToDbFormat (type, result);
}
- public void SetFromDbValue (object target, object value)
- {
- // FIXME should we insist on nullable types?
- SetValue (target, SqliteUtils.FromDbFormat(type, value));
- }
-
public void SetValue (object target, object value)
{
if (field_info != null) {
@@ -100,13 +92,9 @@ namespace Hyena.Data.Sqlite
}
}
- public string Name {
- get { return name; }
- }
-
- public string Type {
- get { return column_type; }
- }
+ public string Name { get { return name; } }
+ public string Type { get { return column_type; } }
+ public Type ValueType { get { return type; } }
}
public sealed class DatabaseColumn : AbstractDatabaseColumn
diff --git a/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Sqlite.cs b/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Sqlite.cs
index 89d4bf0..1b285ac 100644
--- a/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Sqlite.cs
+++ b/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Sqlite.cs
@@ -152,6 +152,7 @@ namespace Hyena.Data.Sqlite
object this[string columnName] { get; }
T Get<T> (int i);
T Get<T> (string columnName);
+ object Get (int i, Type asType);
int FieldCount { get; }
}
@@ -409,13 +410,20 @@ namespace Hyena.Data.Sqlite
public T Get<T> (int i)
{
- var type = typeof (T);
- var o = GetAs (this[i], type);
+ return (T) Get (i, typeof(T));
+ }
+
+ public object Get (int i, Type asType)
+ {
+ var o = this[i];
+ if (o != null && o.GetType () == asType)
+ return o;
- if (o is T)
- return (T) o;
+ o = GetAs (o, asType);
+ if (o != null && o.GetType () == asType)
+ return o;
- return (T) SqliteUtils.FromDbFormat (type, o);
+ return SqliteUtils.FromDbFormat (asType, o);
}
private object GetAs (object o, Type type)
diff --git a/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteModelProvider.cs b/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteModelProvider.cs
index f396ce4..d3ed819 100644
--- a/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteModelProvider.cs
+++ b/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteModelProvider.cs
@@ -360,14 +360,14 @@ namespace Hyena.Data.Sqlite
AbstractDatabaseColumn bad_column = null;
try {
- foreach (DatabaseColumn column in select_columns) {
+ foreach (var column in select_columns) {
bad_column = column;
- column.SetFromDbValue (target, reader[i++]);
+ column.SetValue (target, reader.Get (i++, column.ValueType));
}
- foreach (VirtualDatabaseColumn column in virtual_columns) {
+ foreach (var column in virtual_columns) {
bad_column = column;
- column.SetFromDbValue (target, reader[i++]);
+ column.SetValue (target, reader.Get (i++, column.ValueType));
}
} catch (Exception e) {
Log.Debug (
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]