[libgda] Fixes on Gee Collections implementation and DbRecord Unit Test.



commit 60edd14b245a025b87b37452860eba90392df110
Author: Daniel Espinosa <despinosa src gnome org>
Date:   Mon Jan 9 12:08:59 2012 -0600

    Fixes on Gee Collections implementation and DbRecord Unit Test.
    
    * API changed to DbObject and updates to dependant interfaces and classes
    * API changes to other interterfaces and updates to implementators
    * Updates to GIR/VAPI files for GdaData
    * Fixed DbRecord and Record to pass Unit Tests

 libgda/data/DataBase.vala              |    2 +-
 libgda/data/DbField.vala               |    2 +-
 libgda/data/DbObject.vala              |    2 +-
 libgda/data/DbSchema.vala              |    2 +-
 libgda/data/DbTable.vala               |    4 +-
 libgda/data/Field.vala                 |    8 +--
 libgda/data/GdaData-5.0.gir            |   29 ++++++--
 libgda/data/Record.vala                |   55 ++++++++++------
 libgda/data/Schema.vala                |    2 +-
 libgda/data/Table.vala                 |   20 +++---
 tests/vala/CheckDataModelIterator.vala |    7 ++-
 tests/vala/CheckDataObject.vala        |  118 +++++++++++++++++++++-----------
 12 files changed, 158 insertions(+), 93 deletions(-)
---
diff --git a/libgda/data/DataBase.vala b/libgda/data/DataBase.vala
index 27087ab..09ba030 100644
--- a/libgda/data/DataBase.vala
+++ b/libgda/data/DataBase.vala
@@ -41,7 +41,7 @@ namespace GdaData
 			}
 		}
 		public void save () throws Error {}
-		public bool append () throws Error { return false; }
+		public void append () throws Error {}
 		// DbNamedObject
 		public string name { get; set; }
 		// DbCollection Interface
diff --git a/libgda/data/DbField.vala b/libgda/data/DbField.vala
index be9dbc7..b5a2171 100644
--- a/libgda/data/DbField.vala
+++ b/libgda/data/DbField.vala
@@ -22,7 +22,7 @@ using Gda;
 
 namespace GdaData
 {
-	public interface DbField<G> : Object, DbObject
+	public interface DbField<G> : Object
 	{
 		public abstract G @value { get; set; }
 		public abstract string name { get; set; }
diff --git a/libgda/data/DbObject.vala b/libgda/data/DbObject.vala
index a9633f2..2ecd75b 100644
--- a/libgda/data/DbObject.vala
+++ b/libgda/data/DbObject.vala
@@ -23,7 +23,7 @@ using Gda;
 namespace GdaData {
 	public interface DbObject : Object {
 		public abstract Connection   connection { get; set; }
-		public abstract bool         append () throws Error;
+		public abstract void         append () throws Error;
 		public abstract void         update () throws Error;
 		public abstract void         save () throws Error;
 	}
diff --git a/libgda/data/DbSchema.vala b/libgda/data/DbSchema.vala
index 329ecb0..49d10b6 100644
--- a/libgda/data/DbSchema.vala
+++ b/libgda/data/DbSchema.vala
@@ -22,7 +22,7 @@ using Gda;
 
 namespace GdaData
 {
-	public interface DbSchema<G> : DbNamedObject
+	public interface DbSchema<G> : DbObject, DbNamedObject
 	{
 		public abstract Collection<DbTable<G>> tables { owned get; }
 	}
diff --git a/libgda/data/DbTable.vala b/libgda/data/DbTable.vala
index 2478960..5db47e8 100644
--- a/libgda/data/DbTable.vala
+++ b/libgda/data/DbTable.vala
@@ -22,12 +22,12 @@ using Gda;
 
 namespace GdaData
 {
-	public interface DbTable<G> : DbNamedObject
+	public interface DbTable<G> : DbObject, DbNamedObject
 	{
 		public abstract DbSchema                     schema     { get; set construct; }
 		public abstract Collection<DbRecord<G>>      records    { owned get; }
 		public abstract Collection<DbTable<G>>       fk_depends { owned get; }
 		public abstract Collection<DbTable<G>>       fk         { owned get; }
-		public abstract Collection<DbFieldInfo<G>>   fields     { owned get; set construct; }
+		public abstract Collection<DbFieldInfo<G>>   fields     { owned get; }
 	}
 }
diff --git a/libgda/data/Field.vala b/libgda/data/Field.vala
index 6f8115c..b0ad5f8 100644
--- a/libgda/data/Field.vala
+++ b/libgda/data/Field.vala
@@ -22,18 +22,12 @@ using Gda;
 
 namespace GdaData
 {
-	public class Field<G> : Object, DbField<G>, DbObject
+	public class Field<G> : Object, DbField<G>
 	{
 		private G                 val;
 		private string            _name;
 		private string            _column_name;
 		private DbField.Attribute _attributes;
-		
-		// DbObject Interface
-		public Connection connection { get; set; }
-		public bool     append () throws Error { return false; }
-		public void     update () throws Error {}
-		public void     save () throws Error {}
 		// DbField Interface
 		public G @value { 
 			get { return val; } 
diff --git a/libgda/data/GdaData-5.0.gir b/libgda/data/GdaData-5.0.gir
index d39f5d3..12842a0 100644
--- a/libgda/data/GdaData-5.0.gir
+++ b/libgda/data/GdaData-5.0.gir
@@ -113,6 +113,21 @@
 				</type>
 			</type>
 		</field>
+		<constructor name="with_fields_info" c:identifier="gda_data_table_new_with_fields_info">
+			<parameters>
+				<parameter name="fields" transfer-ownership="none">
+					<type name="Gee.HashMap" c:type="GeeHashMap*">
+						<type name="utf8" c:type="gchar*"/>
+						<type name="GdaData.DbFieldInfo" c:type="GdaDataDbFieldInfo*">
+							<type name="gpointer" c:type="gpointer"/>
+						</type>
+					</type>
+				</parameter>
+			</parameters>
+			<return-value transfer-ownership="full">
+				<type name="GdaData.Table" c:type="GdaDataTable*"/>
+			</return-value>
+		</constructor>
 		<constructor name="new" c:identifier="gda_data_table_new">
 			<return-value transfer-ownership="full">
 				<type name="GdaData.Table" c:type="GdaDataTable*"/>
@@ -127,8 +142,8 @@
 	<record name="TablePrivate" c:type="GdaDataTablePrivate" disguised="1"/>
 	<class name="Record" c:type="GdaDataRecord" glib:type-name="GdaDataRecord" glib:get-type="gda_data_record_get_type" glib:type-struct="RecordClass" parent="GObject.Object">
 		<implements name="GdaData.DbObject"/>
-		<implements name="GdaData.DbRecord"/>
 		<implements name="Gee.Comparable"/>
+		<implements name="GdaData.DbRecord"/>
 		<field name="parent_instance">
 			<type name="GObject.Object" c:type="GObject"/>
 		</field>
@@ -230,7 +245,6 @@
 	<record name="RecordCollectionIteratorPrivate" c:type="GdaDataRecordCollectionIteratorPrivate" disguised="1"/>
 	<class name="Field" c:type="GdaDataField" glib:type-name="GdaDataField" glib:get-type="gda_data_field_get_type" glib:type-struct="FieldClass" parent="GObject.Object">
 		<implements name="GdaData.DbField"/>
-		<implements name="GdaData.DbObject"/>
 		<field name="parent_instance">
 			<type name="GObject.Object" c:type="GObject"/>
 		</field>
@@ -276,12 +290,12 @@
 		<prerequisite name="GObject.Object"/>
 		<method name="append" c:identifier="gda_data_db_object_append" throws="1">
 			<return-value transfer-ownership="full">
-				<type name="gboolean" c:type="gboolean"/>
+				<type name="none"/>
 			</return-value>
 		</method>
 		<virtual-method name="append" invoker="append" throws="1">
 			<return-value transfer-ownership="full">
-				<type name="gboolean" c:type="gboolean"/>
+				<type name="none"/>
 			</return-value>
 		</virtual-method>
 		<method name="update" c:identifier="gda_data_db_object_update" throws="1">
@@ -320,7 +334,7 @@
 					</parameter>
 				</parameters>
 				<return-value transfer-ownership="full">
-					<type name="gboolean" c:type="gboolean"/>
+					<type name="none"/>
 				</return-value>
 			</callback>
 		</field>
@@ -376,6 +390,7 @@
 		</field>
 	</record>
 	<interface name="DbTable" c:type="GdaDataDbTable" glib:type-name="GdaDataDbTable" glib:get-type="gda_data_db_table_get_type" glib:type-struct="DbTableIface">
+		<prerequisite name="GdaData.DbObject"/>
 		<prerequisite name="GdaData.DbNamedObject"/>
 		<property name="schema" writable="1" construct="1">
 			<type name="GdaData.DbSchema" c:type="GdaDataDbSchema*"/>
@@ -401,7 +416,7 @@
 				</type>
 			</type>
 		</property>
-		<property name="fields" writable="1" construct="1">
+		<property name="fields">
 			<type name="Gee.Collection" c:type="GeeCollection*">
 				<type name="GdaData.DbFieldInfo" c:type="GdaDataDbFieldInfo*">
 					<type name="gpointer" c:type="gpointer"/>
@@ -665,7 +680,6 @@
 	</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"/>
-		<prerequisite name="GdaData.DbObject"/>
 		<method name="to_string" c:identifier="gda_data_db_field_to_string">
 			<return-value transfer-ownership="full">
 				<type name="utf8" c:type="gchar*"/>
@@ -737,6 +751,7 @@
 		</field>
 	</record>
 	<interface name="DbSchema" c:type="GdaDataDbSchema" glib:type-name="GdaDataDbSchema" glib:get-type="gda_data_db_schema_get_type" glib:type-struct="DbSchemaIface">
+		<prerequisite name="GdaData.DbObject"/>
 		<prerequisite name="GdaData.DbNamedObject"/>
 		<property name="tables">
 			<type name="Gee.Collection" c:type="GeeCollection*">
diff --git a/libgda/data/Record.vala b/libgda/data/Record.vala
index 5133e16..bffbc84 100644
--- a/libgda/data/Record.vala
+++ b/libgda/data/Record.vala
@@ -22,7 +22,7 @@ using Gee;
 
 namespace GdaData {
 
-    public class Record : Object, DbObject, DbRecord<Value?>, Comparable<DbRecord>
+    public class Record : Object, DbObject, Comparable<DbRecord<Value?>>, DbRecord<Value?>
     {
         protected HashMap<string,DbField<Value?>> _fields = new HashMap<string,DbField<Value?>> ();
         protected HashMap<string,DbField<Value?>> _keys = new HashMap<string,DbField<Value?>> ();
@@ -61,7 +61,6 @@ namespace GdaData {
         	else {
         		// FIXME: Get default attributes from table
         		var n = new Field<Value?> (field.name, DbField.Attribute.NONE); 
-        		n.connection = connection;
         		n.value = field.value;
         		this._fields.set (field.name, n);
         	}
@@ -95,17 +94,21 @@ namespace GdaData {
          */
         public void save ()  throws Error
         {
-        	var q = new SqlBuilder (SqlStatementType.UPDATE);
+        	if (fields.size <= 0)
+        		throw new DbObjectError.SAVE ("No fields has been set");
+        	if (keys.size <= 0)
+        		throw new DbObjectError.SAVE ("No Keys has been set");
+			var q = new SqlBuilder (SqlStatementType.UPDATE);
 			q.set_table (table.name);
 			foreach (DbField<Value?> f in fields) {
 				q.add_field_value_as_gvalue (f.column_name, f.value);
 			}
 			SqlBuilderId cond = -1;
-			foreach (DbField<Value?> f in fields) {
+			foreach (DbField<Value?> f in keys) {
 				var f_id = q.add_id (f.name);
 				var e_id = q.add_expr_value (null, f.value);
 				var c_id = q.add_cond (SqlOperatorType.EQ, f_id, e_id, 0);
-				if (cond < 0) 
+				if (cond == -1) 
 					cond = c_id;
 				else
 					cond = q.add_cond (SqlOperatorType.AND, cond, c_id, 0);
@@ -117,7 +120,7 @@ namespace GdaData {
 //							+ "\n");
 			var i = this.connection.statement_execute_non_select (q.get_statement (), null, null);
 			if (i != 1) {
-				throw new DbObjectError.APPEND ("Have been saved more or less rows than expected");
+				throw new DbObjectError.SAVE ("Have been saved more or less rows than expected");
 			}
         }
         /**
@@ -125,36 +128,49 @@ namespace GdaData {
          */
         public void update ()  throws Error
         {
-        	var q = new SqlBuilder (SqlStatementType.SELECT);
+        	if (keys.size <= 0)
+        		throw new DbObjectError.UPDATE ("No Keys has been set");
+			var q = new SqlBuilder (SqlStatementType.SELECT);
         	q.select_add_target (table.name, null);
-        	SqlBuilderId cond = -1;
-			foreach (DbField<Value?> f in fields) {
+        	q.select_add_field ("*", null, null);
+			SqlBuilderId cond = -1;
+        	foreach (DbField<Value?> f in keys) {
 				var f_id = q.add_id (f.name);
 				var e_id = q.add_expr_value (null, f.value);
 				var c_id = q.add_cond (SqlOperatorType.EQ, f_id, e_id, 0);
-				if (cond < 0) 
+				if (cond == -1) {
 					cond = c_id;
-				else
+				}
+				else {
 					cond = q.add_cond (SqlOperatorType.AND, cond, c_id, 0);
+				}
 			}
 			q.set_where (cond);
-			q.select_add_field ("*", null, null);
-//			stdout.printf ("DEBUG: UPDATE statement to execute: \n"+ 
+//			stdout.printf ("DEBUG: SELECT statement to execute: \n"+ 
 //							(q.get_statement()).to_sql_extended (this.connection, null, 
 //																	StatementSqlFlag.PRETTY, null)
 //							+ "\n");
-			var i = this.connection.statement_execute_non_select (q.get_statement (), null, null);
-			if (i != 1) {
-				throw new DbObjectError.UPDATE ("Have been updated more or less rows than expected");
+			var m = this.connection.statement_execute_select (q.get_statement (), null);
+			if (m.get_n_rows () != 1) {
+				throw new DbObjectError.UPDATE ("Returning number of rows are more than 1");
+			}
+			
+			for (int c = 0; c < m.get_n_columns (); c++) {
+				var f = new Field<Value?> (m.get_column_name (c), 
+											(DbField.Attribute) m.get_attributes_at (c, 0));
+				f.value = m.get_value_at (c,0);
+				this.set_field (f);
 			}
         }
         /**
          * Append a new row to the defined table and returns its ID. If defaults is set to true,
          * default value for each field is set.
          */
-        public bool append () throws Error
+        public void append () throws Error
         {
-        	var sql = new SqlBuilder (SqlStatementType.INSERT);
+        	if (fields.size <= 0)
+        		throw new DbObjectError.APPEND ("No fields has been set");
+			var sql = new SqlBuilder (SqlStatementType.INSERT);
 			sql.set_table (table.name);
 			// FIXME: MetaData is required
 			foreach (DbField<Value?> f in _fields.values) {
@@ -166,9 +182,8 @@ namespace GdaData {
 //				+ "\n");
 			var i = this.connection.statement_execute_non_select (sql.get_statement (), null, null);
 			if (i != 1) {
-				throw new DbObjectError.UPDATE ("Have been added more or less rows than expected");
+				throw new DbObjectError.UPDATE ("Have been updated more or less rows than expected");
 			}
-			return true;
 		}
         // 
         public string to_string ()
diff --git a/libgda/data/Schema.vala b/libgda/data/Schema.vala
index b0f5c45..a0bbcb3 100644
--- a/libgda/data/Schema.vala
+++ b/libgda/data/Schema.vala
@@ -45,7 +45,7 @@ namespace GdaData
 			}
 		}
 		public void save () throws Error {}
-		public bool append () throws Error { return false; }
+		public void append () throws Error {}
 		// DbNamedObject Interface
 		public string name { get; set; }
 		// DbSchema Interface
diff --git a/libgda/data/Table.vala b/libgda/data/Table.vala
index cfcf530..4269c88 100644
--- a/libgda/data/Table.vala
+++ b/libgda/data/Table.vala
@@ -28,25 +28,27 @@ namespace GdaData
 		protected HashMap<string,DbFieldInfo<G>> _fields = new HashMap<string,DbFieldInfo<G>> ();
 		protected HashMap<string,DbTable<G>> _fk_depends = new HashMap<string,DbTable<G>> ();
 		protected HashMap<string,DbTable<G>> _fk = new HashMap<string,DbTable<G>> ();
+		
+		public Table.with_fields_info (HashMap<string,DbFieldInfo<G>> fields)
+		{
+			foreach (DbFieldInfo<G> f in fields.values) {
+				_fields.set (f.name, f);
+			}
+		}
 		// DbObject Interface
 		public Connection connection { get; set; }
 		public void update () throws Error {}
 		public void save () throws Error {}
-		public bool append () throws Error { return false; }
+		public void append () throws Error {}
 		// DbNamedObject Interface
 		public string name { get; set; }
 		
 		// DbTable Interface
 		public Collection<DbFieldInfo<G>> fields { 
 			owned get { return _fields.values; } 
-			set construct { 
-				foreach (DbFieldInfo<G> f in value) {
-					_fields.set (f.name, f);
-				}
-			}
 		}
 		public DbSchema schema { get; set construct; }
-		public Collection<DbRecord> records { 
+		public Collection<DbRecord<G>> records { 
 			owned get  {
 				var q = new Gda.SqlBuilder (SqlStatementType.SELECT);
 				q.set_table (name);
@@ -57,7 +59,7 @@ namespace GdaData
 				return _records;
 			}
 		}
-		public Collection<DbTable> fk_depends { owned get { return _fk_depends.values; } }
-		public Collection<DbTable> fk { owned get { return _fk.values; } }
+		public Collection<DbTable<G>> fk_depends { owned get { return _fk_depends.values; } }
+		public Collection<DbTable<G>> fk { owned get { return _fk.values; } }
 	}
 }
diff --git a/tests/vala/CheckDataModelIterator.vala b/tests/vala/CheckDataModelIterator.vala
index abc4d18..d123a93 100644
--- a/tests/vala/CheckDataModelIterator.vala
+++ b/tests/vala/CheckDataModelIterator.vala
@@ -58,9 +58,12 @@ namespace Check {
 			t.connection = this.connection;
 			t.name = "user";
 			var itermodel = new RecordCollection (model, t);
-
+			var iter = itermodel.iterator ();
+			var iter.next ();
+			var r = iter.get ();
+			stdout.printf ("First Record contents: \n" + r.to_string ());
 			stdout.printf ("Iterating over all Records in DataModel\n");
-			foreach (DbRecord r in itermodel) {
+			foreach (DbRecord<Value?> r in itermodel) {
 				stdout.printf (r.to_string ());
 			}
 			
diff --git a/tests/vala/CheckDataObject.vala b/tests/vala/CheckDataObject.vala
index 77b170a..e989cac 100644
--- a/tests/vala/CheckDataObject.vala
+++ b/tests/vala/CheckDataObject.vala
@@ -19,6 +19,7 @@
 
 using Gda;
 using GdaData;
+using Gee;
 
 namespace Check {
 	class Record : GdaData.Record
@@ -54,85 +55,113 @@ namespace Check {
 		public int t1()
 			throws Error
 		{
-			stdout.printf(">>> NEW TEST: Gda.DataObject API tests\n");
+			stdout.printf(">>> NEW TEST: GdaData.DbRecord API tests\n");
 			int fails = 0;
+			stdout.printf("Creating new record\n");
 			var r = new Check.Record ();
+			stdout.printf("Setting connection\n");
 			r.connection = this.connection;
+			stdout.printf("Setting up DbTable\n");
 			var t = new Table<Value?> ();
+			stdout.printf("Setting DbTable name\n");
 			t.name = "user";
+			stdout.printf("Setting DbTable connection\n");
 			t.connection = this.connection;
+			stdout.printf(">>> Setting table to record\n");
 			r.table = t;
+			stdout.printf(">>> Setting up Key 'id'\n");
 			var k = new Field<Value?>("id", DbField.Attribute.NONE);
-			k.connection = this.connection;
-			stdout.printf("Setting ID to 1\n");
+			stdout.printf("Setting record ID to 1...");
 			try {
 				k.value = 1;
 				r.set_key (k);
+				foreach (DbField<Value?> kv in r.keys) {
+					stdout.printf ("KEY: " + kv.name + " VALUE: " + Gda.value_stringify(kv.value) + "\n");
+				}
 				r.update ();
+				foreach (DbField<Value?> kv in r.fields) {
+					stdout.printf ("FIELD: " + kv.name + " VALUE: " + Gda.value_stringify(kv.value) + "\n");
+				}
+				stdout.printf("PASS\n");
 			}
 			catch (Error e) {
 				fails++;
-				stdout.printf ("Couln't set ID...\nFAILS: %i\nERROR: %s\n", fails, e.message);
+				stdout.printf ("FAIL: %i\nCouln't set ID...ERROR: %s\n", fails, e.message);
 			}
 			
-			stdout.printf("DataObject points to, in table "+ r.table.name + ":\n", r.table);
+			stdout.printf("DbRecord points to, in table "+ r.table.name + ":\n", r.table);
 			stdout.printf("%s\n", r.to_string());
 			
-			stdout.printf("Getting ID value...\n");
+			stdout.printf("Getting ID value...");
 			var i = (int) (r.get_key ("id")).value;
 			if (i != 1 ){
 				fails++;
-				stdout.printf("FAILS: %i\n", fails);
+				stdout.printf("FAIL: %i\n", fails);
 			}
+			else
+				stdout.printf("PASS\n");
 			
-			stdout.printf("Getting value at 'name'...\n");
+			stdout.printf("Getting value at 'name'...");
 			var vdb = (string) (r.get_field ("name")).value;
 			if (vdb == null ){
 				fails++;
-				stdout.printf("FAILS: %i\n", fails);
+				stdout.printf("FAIL: %i\n", fails);
 			}
-			else
+			else 
 				if ( vdb != "Daniel"){
 					fails++;
-					stdout.printf("FAILS: %i\n", fails);
+					stdout.printf("FAIL: %i\nERROR: Value not match. Expected 'Daniel' but value is %s:\n", 
+									fails, vdb);
 				}
+				else
+					stdout.printf("PASS\n");
 			
-			stdout.printf("Setting value at 'name'...\n");
-			var f = r.get_field ("name");
-			f.name = "Daniel Espinosa";
-			r.set_field (f);
-			stdout.printf("DataObject points to in memory modified value, in table '%s':\n", r.table.name);
-			stdout.printf("%s\n", r.to_string());
-			
-			stdout.printf("Saving changes...\n");
+			stdout.printf("Setting value at 'name'...");
+			try {
+				var f = r.get_field ("name");
+				f.value = "Daniel Espinosa";
+				r.set_field (f);
+				stdout.printf("DataObject points to in memory modified value, in table '%s':\n", r.table.name);
+				stdout.printf("%s\n", r.to_string());
+				stdout.printf("PASS\n");
+			}
+			catch (Error e) {
+				fails++;
+				stdout.printf ("FAIL: %i\nCouln't modify record...ERROR: %s\n", fails, e.message);
+			}
+			stdout.printf("Saving changes...");
 			try {
 				r.save();
 				stdout.printf("DataObject points to modified value, in table '%s':\n", r.table.name);
 				stdout.printf("%s\n", r.to_string());
+				stdout.printf("PASS\n");
 			}
 			catch (Error e) {
 				fails++;
-				stdout.printf ("Couln't SAVE...\nFAILS: %i\nERROR: %s\n", fails, e.message);
+				stdout.printf ("FAIL: %i\nCouln't SAVE...ERROR: %s\n", fails, e.message);
 			}
 			
 			try {
-				stdout.printf ("Simulating external database update\n");
+				stdout.printf ("Simulating external database update...");
 				this.connection.execute_non_select_command("UPDATE user SET name = \"Jhon Strauss\", city =\"New Jersey\"");
+				stdout.printf("PASS\n");
 			}
 			catch (Error e) {
 				fails++;
-				stdout.printf ("Couln't manual update table '%s'...\nFAILS: %i\nERROR: %s\n", r.table.name, fails, e.message);
+				stdout.printf ("FAIL: %i\nCouln't manual update table '%s'...ERROR: %s\n", 
+								fails, r.table.name,  e.message);
 			}
 			
-			stdout.printf("Updating values from database...\n");
+			stdout.printf("Updating values from database...");
 			try {
 				r.update();
 				stdout.printf("DataObject points to actual stored values, in table '%s':\n", r.table.name);
 				stdout.printf("%s\n", r.to_string());
+				
 			}
 			catch (Error e) {
 				fails++;
-				stdout.printf ("Couln't UPDATE...\nFAILS: %i\nERROR: %s\n", fails, e.message);
+				stdout.printf ("FAIL: %i\nCouln't UPDATE...ERROR: %s\n", fails, e.message);
 			}
 			
 			stdout.printf("Setting a new Table... \n");
@@ -140,27 +169,29 @@ namespace Check {
 			t2.name = "company";
 			t2.connection = this.connection;
 			r.table = t2;
-			stdout.printf("Updating values from database using a new table 'company'...\n");
+			stdout.printf("Updating values from database using a new table '" + r.table.name + "'...");
 			try {
 				r.update();
 				stdout.printf("DataObject points to actual stored values, in table '%s':\n", r.table.name);
 				stdout.printf("%s\n", r.to_string());
+				stdout.printf("PASS\n");
 			}
 			catch (Error e) {
 				fails++;
-				stdout.printf ("Couln't UPDATE...\nFAILS: %i\nERROR: %s\n", fails, e.message);
+				stdout.printf ("FAIL: %i\nCouln't UPDATE...ERROR: %s\n", fails, e.message);
 			}
 			
-			stdout.printf("Setting ID to 2\n");
+			stdout.printf("Setting ID to 2...");
 			try {
 				k.value = 2;
 				r.set_key (k);
 				stdout.printf("DataObject points to actual stored values, in table '%s':\n", r.table.name);
 				stdout.printf("%s\n", r.to_string());
+				stdout.printf("PASS\n");
 			}
 			catch (Error e) {
 				fails++;
-				stdout.printf ("Couln't set ID...\nFAILS: %i\nERROR: %s\n", fails, e.message);
+				stdout.printf ("FAIL: %i\nCouln't set ID...ERROR: %s\n", fails, e.message);
 			}
 			r.t = "user"; // Reset to default
 			return fails;
@@ -169,36 +200,41 @@ namespace Check {
 		public int t2()
 			throws Error
 		{
-			stdout.printf(">>> NEW TEST: Gda.DataObject Adding new objects to DB\n");
+			stdout.printf(">>> NEW TEST: Gda.DbRecord - Adding new objects to DB...\n");
 			int fails = 0;
 			try {
 				var n = new Check.Record ();
 				n.connection = this.connection;
-				var f = new Field<Value?>("id", DbField.Attribute.NONE);
-				f.connection = this.connection;
-				f.value = 3;
-				n.set_field (f);
-				f.name = "name";
-				f.value = "GdaDataNewName";
-				n.set_field (f);
-				f.name = "city";
-				f.value = "GdaDataNewCity";
-				stdout.printf("DataObject points to actual stored values, in table '%s':\n", n.table.name);
+				var t = new Table<Value?> ();
+				t.name = "user";
+				t.connection = this.connection;
+				n.table = t;
+				var f = new HashMap<string,Value?> ();
+				f.set ("id", 3);
+				f.set ("name", "GdaDataNewName");
+				f.set ("city","GdaDataNewCity");
+				foreach (string k in f.keys) {
+					var field = new Field<Value?>(k, DbField.Attribute.NONE);
+					field.value = f.get (k);
+					n.set_field (field);
+				}
+				stdout.printf("DbRecord in memory values, to added to table '%s':\n", n.table.name);
 				stdout.printf("%s\n", n.to_string());
 				n.append ();
 				var m = n.connection.execute_select_command ("SELECT * FROM user");
 				if (m.get_n_rows () != 3) fails++;
 				stdout.printf ("All records:\n" + m.dump_as_string () + "\n");
+				stdout.printf("PASS\n");
 			}
 			catch (Error e) {
 				fails++;
-				stdout.printf ("Couln't set ID...\nFAILS: %i\nERROR: %s\n", fails, e.message);
+				stdout.printf ("FAIL: %i\nCouln't set add new record...-ERROR: %s\n", fails, e.message);
 			}
 			return fails;
 		}
 		
 		public static int main (string[] args) {
-			stdout.printf ("Checking Gda.DataObject implementation...\n");
+			stdout.printf ("Checking GdaData.DbRecord implementation...\n");
 			int failures = 0;
 			var app = new Tests ();
 			try {



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