[libgda] Updated API for GdaData.Object, ObjectSingleId, DbField. Fixes on samples and test.



commit 90c63ae5131c1c55a25d5db32cf9e0123a20643f
Author: Daniel Espinosa <despinosa src gnome org>
Date:   Wed Jan 4 11:45:32 2012 -0600

    Updated API for GdaData.Object, ObjectSingleId, DbField. Fixes on samples and test.
    
    * Samples updated to new API

 libgda/data/DataObject.vala         |   14 +++++---
 libgda/data/DataObjectSingleId.vala |   13 +++++++
 libgda/data/DbField.vala            |    2 +
 libgda/data/Field.vala              |    1 +
 libgda/data/GdaData-5.0.gir         |   65 +++++++++++++++++++++++++++++++---
 libgda/data/GdaData-UML.gaphor      |   28 +++++++-------
 samples/vala/SampleDataObject.vala  |   16 ++++----
 tests/vala/CheckDataObject.vala     |   14 ++++----
 tests/vala/Makefile.am              |    1 +
 9 files changed, 114 insertions(+), 40 deletions(-)
---
diff --git a/libgda/data/DataObject.vala b/libgda/data/DataObject.vala
index 37ace8d..4ede3ff 100644
--- a/libgda/data/DataObject.vala
+++ b/libgda/data/DataObject.vala
@@ -18,12 +18,13 @@
  */
 
 using Gda;
+using Gee;
 
 namespace GdaData {
 
     public abstract class Object<G> : GLib.Object {
         
-        protected Gee.HashMap<string,Field<Value?>> _model;
+        protected HashMap<string,Field<G>> _model;
         /**
          * Derived classes must implement this property to set the table used to get data from.
          */
@@ -31,7 +32,7 @@ namespace GdaData {
         /**
          * Returns a Gda.DataModel with the data stored by this object.
          */
-        public abstract DataModel record { get; }
+        public Collection<Field<G>> fields { owned get { return _model.values; } }
         /**
          * Set the connection to be used to get/set data.
          */
@@ -39,15 +40,16 @@ namespace GdaData {
         /**
          * Returns a GLib.Value containing the value stored in the given field.
          */
-        public Value? get_value (string field)
+        public G get_value (string field)
         	throws Error
         {
-        	return (this._model.get (field)).value;
+        	var f = this._model.get (field);
+        	return f.value;
         }
 		/**
          * Set the value to a field with the given @name.
          */
-        public void set_value (string field, Value v)
+        public void set_value (string field, G v)
         	throws Error
         {
         	var f = _model.get (field);
@@ -68,5 +70,7 @@ namespace GdaData {
          * default value for each field is set.
          */
         public abstract void append (out G id) throws Error;
+        
+        public abstract string to_string ();
     }
 }
diff --git a/libgda/data/DataObjectSingleId.vala b/libgda/data/DataObjectSingleId.vala
index eb5f46c..ab2ea05 100644
--- a/libgda/data/DataObjectSingleId.vala
+++ b/libgda/data/DataObjectSingleId.vala
@@ -89,6 +89,7 @@ namespace GdaData {
 			var f_id = sql.add_id (this.field_id);
 			var e_id = sql.add_expr_value (null, this._id_value);
 			var c_id = sql.add_cond (SqlOperatorType.EQ, f_id, e_id, 0);
+			sql.set_where (c_id);
 			var i = this.connection.statement_execute_non_select (sql.get_statement (), null, null);
 			if (i != 1) {
 				throw new DbObjectError.APPEND ("Have been saved more or less rows than expected");
@@ -115,5 +116,17 @@ namespace GdaData {
         {
         	set_id (this._id_value);
         }
+        public override string to_string () 
+        {
+        	string r = "";
+			foreach (Field<Value?> f in this.fields) {
+				r += "|" + f.name;
+			}
+			
+			foreach (Field<Value?> f in this.fields) {
+				r += "|" + f.to_string ();
+			}
+			return r;
+        }
 	}
 }
diff --git a/libgda/data/DbField.vala b/libgda/data/DbField.vala
index 4d6ed72..d2557f1 100644
--- a/libgda/data/DbField.vala
+++ b/libgda/data/DbField.vala
@@ -29,6 +29,8 @@ namespace GdaData
 		public abstract string column_name { get; construct; }
 		public abstract DbField.Attribute attributes { get; construct; }
 		
+		public abstract string to_string ();
+		
 		[Flags]
 		public enum Attribute {
 			NONE,
diff --git a/libgda/data/Field.vala b/libgda/data/Field.vala
index 3cda30e..f1b3b0c 100644
--- a/libgda/data/Field.vala
+++ b/libgda/data/Field.vala
@@ -47,6 +47,7 @@ namespace GdaData
 				_attributes = value;
 			}
 		}
+		public string to_string () { return (string) val; }
 		public Field (string col_name, DbField.Attribute attr) 
 		{
 			GLib.Object (column_name: col_name, attributes: attr);
diff --git a/libgda/data/GdaData-5.0.gir b/libgda/data/GdaData-5.0.gir
index 09bd5be..2f2b22a 100644
--- a/libgda/data/GdaData-5.0.gir
+++ b/libgda/data/GdaData-5.0.gir
@@ -27,7 +27,7 @@
 			<type name="Gee.HashMap" c:type="GeeHashMap*">
 				<type name="utf8" c:type="gchar*"/>
 				<type name="GdaData.Field" c:type="GdaDataField*">
-					<type name="GObject.Value" c:type="GValue*"/>
+					<type name="gpointer" c:type="gpointer"/>
 				</type>
 			</type>
 		</field>
@@ -38,7 +38,7 @@
 				</parameter>
 			</parameters>
 			<return-value transfer-ownership="full" allow-none="1">
-				<type name="GObject.Value" c:type="GValue*"/>
+				<type name="gpointer" c:type="gpointer"/>
 			</return-value>
 		</method>
 		<method name="set_value" c:identifier="gda_data_object_set_value" throws="1">
@@ -46,8 +46,8 @@
 				<parameter name="field" transfer-ownership="none">
 					<type name="utf8" c:type="const gchar*"/>
 				</parameter>
-				<parameter name="v" transfer-ownership="none">
-					<type name="GObject.Value" c:type="GValue"/>
+				<parameter name="v" transfer-ownership="none" allow-none="1">
+					<type name="gpointer" c:type="gpointer"/>
 				</parameter>
 			</parameters>
 			<return-value transfer-ownership="full">
@@ -94,11 +94,25 @@
 				<type name="none"/>
 			</return-value>
 		</virtual-method>
+		<method name="to_string" c:identifier="gda_data_object_to_string">
+			<return-value transfer-ownership="full">
+				<type name="utf8" c:type="gchar*"/>
+			</return-value>
+		</method>
+		<virtual-method name="to_string" invoker="to_string">
+			<return-value transfer-ownership="full">
+				<type name="utf8" c:type="gchar*"/>
+			</return-value>
+		</virtual-method>
 		<property name="table">
 			<type name="utf8" c:type="gchar*"/>
 		</property>
-		<property name="record">
-			<type name="Gda.DataModel" c:type="GdaDataModel*"/>
+		<property name="fields">
+			<type name="Gee.Collection" c:type="GeeCollection*">
+				<type name="GdaData.Field" c:type="GdaDataField*">
+					<type name="gpointer" c:type="gpointer"/>
+				</type>
+			</type>
 		</property>
 		<property name="connection" writable="1">
 			<type name="Gda.Connection" c:type="GdaConnection*"/>
@@ -147,6 +161,18 @@
 				</return-value>
 			</callback>
 		</field>
+				<field name="to_string">
+			<callback name="to_string" c:type="to_string">
+				<parameters>
+					<parameter name="self" transfer-ownership="none">
+						<type name="GdaData.Object" c:type="GdaDataObject*"/>
+					</parameter>
+				</parameters>
+				<return-value transfer-ownership="full">
+					<type name="utf8" c:type="gchar*"/>
+				</return-value>
+			</callback>
+		</field>
 	</record>
 	<record name="ObjectPrivate" c:type="GdaDataObjectPrivate" disguised="1"/>
 	<class name="ObjectSingleId" c:type="GdaDataObjectSingleId" glib:type-name="GdaDataObjectSingleId" glib:get-type="gda_data_object_single_id_get_type" glib:type-struct="ObjectSingleIdClass" parent="GdaData.Object" abstract="1">
@@ -201,6 +227,11 @@
 		<field name="priv">
 			<type name="FieldPrivate" c:type="GdaDataFieldPrivate*"/>
 		</field>
+		<method name="to_string" c:identifier="gda_data_field_to_string">
+			<return-value transfer-ownership="full">
+				<type name="utf8" c:type="gchar*"/>
+			</return-value>
+		</method>
 		<constructor name="new" c:identifier="gda_data_field_new">
 			<parameters>
 				<parameter name="col_name" transfer-ownership="none">
@@ -523,6 +554,16 @@
 	</record>
 	<interface name="DbField" c:type="GdaDataDbField" glib:type-name="GdaDataDbField" glib:get-type="gda_data_db_field_get_type" glib:type-struct="DbFieldIface">
 		<prerequisite name="GObject.Object"/>
+		<method name="to_string" c:identifier="gda_data_db_field_to_string">
+			<return-value transfer-ownership="full">
+				<type name="utf8" c:type="gchar*"/>
+			</return-value>
+		</method>
+		<virtual-method name="to_string" invoker="to_string">
+			<return-value transfer-ownership="full">
+				<type name="utf8" c:type="gchar*"/>
+			</return-value>
+		</virtual-method>
 		<property name="value" writable="1">
 			<type name="gpointer" c:type="gpointer"/>
 		</property>
@@ -540,6 +581,18 @@
 		<field name="parent_iface">
 			<type name="GObject.TypeInterface" c:type="GTypeInterface"/>
 		</field>
+		<field name="to_string">
+			<callback name="to_string" c:type="to_string">
+				<parameters>
+					<parameter name="self" transfer-ownership="none">
+						<type name="GdaData.DbField" c:type="GdaDataDbField*"/>
+					</parameter>
+				</parameters>
+				<return-value transfer-ownership="full">
+					<type name="utf8" c:type="gchar*"/>
+				</return-value>
+			</callback>
+		</field>
 	</record>
 	<bitfield name="DbFieldAttribute" c:type="GdaDataDbFieldAttribute" glib:type-name="GdaDataDbFieldAttribute" glib:get-type="gda_data_db_field_attribute_get_type">
 		<member name="none" c:identifier="GDA_DATA_DB_FIELD_ATTRIBUTE_NONE" value="1"/>
diff --git a/libgda/data/GdaData-UML.gaphor b/libgda/data/GdaData-UML.gaphor
index e8cc155..501328b 100644
--- a/libgda/data/GdaData-UML.gaphor
+++ b/libgda/data/GdaData-UML.gaphor
@@ -399,7 +399,7 @@
 </reflist>
 </generalization>
 <name>
-<val><![CDATA[MultipleId]]></val>
+<val><![CDATA[ObjectMultipleId]]></val>
 </name>
 <package>
 <ref refid="636fb4ee-362f-11e1-a9fe-0026b913ee39"/>
@@ -596,7 +596,7 @@
 </reflist>
 </generalization>
 <name>
-<val><![CDATA[SingleId]]></val>
+<val><![CDATA[ObjectSingleId]]></val>
 </name>
 <package>
 <ref refid="636fb4ee-362f-11e1-a9fe-0026b913ee39"/>
@@ -609,7 +609,7 @@
 </Class>
 <Class id="916d80b8-3631-11e1-a9fe-0026b913ee39">
 <name>
-<val><![CDATA[Record]]></val>
+<val><![CDATA[GdaData.Object]]></val>
 </name>
 <package>
 <ref refid="636fb4ee-362f-11e1-a9fe-0026b913ee39"/>
@@ -674,10 +674,10 @@
 <val>1</val>
 </drawing-style>
 <matrix>
-<val>(1.0, 0.0, 0.0, 1.0, 225.0, 261.0)</val>
+<val>(1.0, 0.0, 0.0, 1.0, 219.0, 261.0)</val>
 </matrix>
 <width>
-<val>100.0</val>
+<val>113.0</val>
 </width>
 <height>
 <val>51.0</val>
@@ -700,13 +700,13 @@
 <val>1</val>
 </drawing-style>
 <matrix>
-<val>(1.0, 0.0, 0.0, 1.0, 303.0, 112.0)</val>
+<val>(1.0, 0.0, 0.0, 1.0, 299.0, 111.0)</val>
 </matrix>
 <width>
-<val>100.0</val>
+<val>110.0</val>
 </width>
 <height>
-<val>50.0</val>
+<val>51.0</val>
 </height>
 <subject>
 <ref refid="916d80b8-3631-11e1-a9fe-0026b913ee39"/>
@@ -726,10 +726,10 @@
 <val>1</val>
 </drawing-style>
 <matrix>
-<val>(1.0, 0.0, 0.0, 1.0, 382.0, 261.0)</val>
+<val>(1.0, 0.0, 0.0, 1.0, 381.0, 259.0)</val>
 </matrix>
 <width>
-<val>100.0</val>
+<val>102.0</val>
 </width>
 <height>
 <val>51.0</val>
@@ -749,7 +749,7 @@
 <val>0</val>
 </show_stereotypes_attrs>
 <matrix>
-<val>(1.0, 0.0, 0.0, 1.0, 346.0, 162.0)</val>
+<val>(1.0, 0.0, 0.0, 1.0, 346.3, 162.0)</val>
 </matrix>
 <orthogonal>
 <val>0</val>
@@ -758,7 +758,7 @@
 <val>0</val>
 </horizontal>
 <points>
-<val>[(0.0, 0.0), (0.0, 67.0), (-71.0, 66.0), (-71.0, 99.0)]</val>
+<val>[(0.0, 0.0), (-0.30000000000001137, 67.0), (-71.30000000000001, 66.0), (-70.30000000000001, 99.0)]</val>
 </points>
 <head-connection>
 <ref refid="1e9b8adc-3643-11e1-a9fe-0026b913ee39"/>
@@ -775,7 +775,7 @@
 <val>0</val>
 </show_stereotypes_attrs>
 <matrix>
-<val>(1.0, 0.0, 0.0, 1.0, 346.0, 162.0)</val>
+<val>(1.0, 0.0, 0.0, 1.0, 346.3, 162.0)</val>
 </matrix>
 <orthogonal>
 <val>0</val>
@@ -784,7 +784,7 @@
 <val>0</val>
 </horizontal>
 <points>
-<val>[(0.0, 0.0), (0.0, 66.0), (88.0, 67.0), (88.0, 99.0)]</val>
+<val>[(0.0, 0.0), (-0.30000000000001137, 66.0), (87.69999999999999, 67.0), (87.74000000000001, 97.0)]</val>
 </points>
 <head-connection>
 <ref refid="1e9b8adc-3643-11e1-a9fe-0026b913ee39"/>
diff --git a/samples/vala/SampleDataObject.vala b/samples/vala/SampleDataObject.vala
index afb60f0..cacbcb4 100644
--- a/samples/vala/SampleDataObject.vala
+++ b/samples/vala/SampleDataObject.vala
@@ -22,7 +22,7 @@ using GdaData;
 
 namespace Sample {
 
-	class Record : GdaData.ObjectSingleId<string> {
+	class Record : GdaData.ObjectSingleId {
 		private static string dbtable = "user";
 		
 		/**
@@ -51,7 +51,7 @@ namespace Sample {
 		 * get_value(string) function.
 		 */
 		public string functions {
-			get {
+			owned get {
 					return (string) this.get_value ("functions");
 			}
 			set {
@@ -63,7 +63,7 @@ namespace Sample {
 		}
 		
 		public string name {
-			get {
+			owned get {
 				return (string) this.get_value ("name");
 			}
 			
@@ -104,7 +104,7 @@ namespace Sample {
 			try { rcd.set_id (name); }
 			catch (Error e) { stdout.printf ("ERROR: Record no opened\n" + e.message + "\n"); }
 			
-			stdout.printf ("Initial Values for: " + rcd.name + "\n" + rcd.record.dump_as_string () + "\n");
+			stdout.printf ("Initial Values for: " + rcd.name + "\n" + rcd.to_string () + "\n");
 			
 			stdout.printf ("Modifying user: " + rcd.name + "\n");
 			// Changing functions
@@ -121,7 +121,7 @@ namespace Sample {
 			
 			try { rcd.save (); }
 			catch (Error e) { stdout.printf ("ERROR: Can't save modifycations'\n" + e.message + "\n"); }
-			stdout.printf ("Modified Values: " + rcd.name + "\n" + rcd.record.dump_as_string () + "\n");
+			stdout.printf ("Modified Values: " + rcd.name + "\n" + rcd.to_string () + "\n");
 		}
 		
 		public void simulate_external_modifications ()
@@ -131,10 +131,10 @@ namespace Sample {
 			var rcd = new Record ();
 			rcd.connection = this.connection;
 			rcd.set_id ("Jane Castle PhD.");
-			stdout.printf ("Initial Values for: " + rcd.name + "\n" + rcd.record.dump_as_string () + "\n");
+			stdout.printf ("Initial Values for: " + rcd.name + "\n" + rcd.to_string () + "\n");
 			this.connection.execute_non_select_command("UPDATE user SET functions = \"Secretary\" WHERE name = \"Jane Castle PhD.\"");
 			rcd.update ();
-			stdout.printf ("Updated Values for: " + rcd.name + "\n" + rcd.record.dump_as_string () + "\n");
+			stdout.printf ("Updated Values for: " + rcd.name + "\n" + rcd.to_string () + "\n");
 		}
 		
 		public void append_objects (string name, string functions)
@@ -144,7 +144,7 @@ namespace Sample {
 			var ob = new Record ();
 			ob.connection = this.connection;
 			ob.set_id ("Jane Castle PhD.");
-			string id;
+			Value id;
 			ob.append (out id);
 			var m = this.connection.execute_select_command ("SELECT * FROM user");
 			stdout.printf ("Appended Values:\n" + m.dump_as_string () + "\n");
diff --git a/tests/vala/CheckDataObject.vala b/tests/vala/CheckDataObject.vala
index feca886..e7a1067 100644
--- a/tests/vala/CheckDataObject.vala
+++ b/tests/vala/CheckDataObject.vala
@@ -21,7 +21,7 @@ using Gda;
 using GdaData;
 
 namespace Check {
-	class Tests : GdaData.ObjectSingleId<int> {
+	class Tests : GdaData.ObjectSingleId {
 		private static string t = "user";
 		public override string table { 
 			get { return this.t; }
@@ -70,7 +70,7 @@ namespace Check {
 			}
 			
 			stdout.printf("DataObject points to, in table "+ this.table + ":\n", this.table);
-			stdout.printf("%s\n", this.record.dump_as_string());
+			stdout.printf("%s\n", this.to_string());
 			
 			stdout.printf("Getting ID value...\n");
 			var i = (int) this.get_id ();
@@ -95,13 +95,13 @@ namespace Check {
 			Value n = "Daniel Espinosa";
 			this.set_value ("name", n);
 			stdout.printf("DataObject points to in memory modified value, in table '%s':\n", this.table);
-			stdout.printf("%s\n", this.record.dump_as_string());
+			stdout.printf("%s\n", this.to_string());
 			
 			stdout.printf("Saving changes...\n");
 			try {
 				this.save();
 				stdout.printf("DataObject points to modified value, in table '%s':\n", this.table);
-				stdout.printf("%s\n", this.record.dump_as_string());
+				stdout.printf("%s\n", this.to_string());
 			}
 			catch (Error e) {
 				fails++;
@@ -120,7 +120,7 @@ namespace Check {
 			try {
 				this.update();
 				stdout.printf("DataObject points to actual stored values, in table '%s':\n", this.table);
-				stdout.printf("%s\n", this.record.dump_as_string());
+				stdout.printf("%s\n", this.to_string());
 			}
 			catch (Error e) {
 				fails++;
@@ -133,7 +133,7 @@ namespace Check {
 			try {
 				this.update();
 				stdout.printf("DataObject points to actual stored values, in table '%s':\n", this.table);
-				stdout.printf("%s\n", this.record.dump_as_string());
+				stdout.printf("%s\n", this.to_string());
 			}
 			catch (Error e) {
 				fails++;
@@ -144,7 +144,7 @@ namespace Check {
 			try {
 				this.set_id (2);
 				stdout.printf("DataObject points to actual stored values, in table '%s':\n", this.table);
-				stdout.printf("%s\n", this.record.dump_as_string());
+				stdout.printf("%s\n", this.to_string());
 			}
 			catch (Error e) {
 				fails++;
diff --git a/tests/vala/Makefile.am b/tests/vala/Makefile.am
index 4cbfdc9..1d136f4 100644
--- a/tests/vala/Makefile.am
+++ b/tests/vala/Makefile.am
@@ -3,6 +3,7 @@ NULL =
 AM_CPPFLAGS = \
 	-I$(top_srcdir) \
 	-I$(top_srcdir)/libgda \
+	-I$(top_srcdir)/libgda/data \
 	-I$(top_builddir) \
 	$(COREDEPS_CFLAGS) \
 	$(COREDEPS_WFLAGS) \



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