[libgda] GdaData.Table pass Unit Tests. ServerOperation.set_value_at_path renamed. * Added DbObject.drop (boo



commit 74d1fe1e98c59c3e65d0ef020435c1924f9a149d
Author: Daniel Espinosa <despinosa src gnome org>
Date:   Mon Feb 27 21:14:12 2012 -0600

    GdaData.Table pass Unit Tests. ServerOperation.set_value_at_path renamed.
    * Added DbObject.drop (bool cascade)
    * Table.drop () implemented
    * Table pass Unit Tests for fields, update and drop
    * Gda.ServerOperation.set_value_at_path honors Rename to: annotation

 libgda/Gda-5.0.metadata     |    1 +
 libgda/data/Catalog.vala    |    1 +
 libgda/data/DataBase.vala   |    1 +
 libgda/data/DbObject.vala   |    1 +
 libgda/data/DbTable.vala    |    3 +-
 libgda/data/GdaData-5.0.gir |   35 ++++++++++++++++++++++++++++++++++
 libgda/data/Record.vala     |    1 +
 libgda/data/Schema.vala     |    1 +
 libgda/data/Table.vala      |   44 +++++++++++++++++++++++-------------------
 libgda/libgda-5.0.vapi      |    3 +-
 tests/vala/CheckTable.vala  |   29 +++++++++++++++++++++++++--
 11 files changed, 95 insertions(+), 25 deletions(-)
---
diff --git a/libgda/Gda-5.0.metadata b/libgda/Gda-5.0.metadata
index dbbef7a..a9cb119 100644
--- a/libgda/Gda-5.0.metadata
+++ b/libgda/Gda-5.0.metadata
@@ -43,3 +43,4 @@ Holder.get_value nullable=true
 Row.get_value nullable=true
 Numeric.get_string nullable=true
 MetaStore.extract_v name="extract"
+ServerOperation.set_value_at_path name="set_value_at"
diff --git a/libgda/data/Catalog.vala b/libgda/data/Catalog.vala
index 5ae10ed..4406810 100644
--- a/libgda/data/Catalog.vala
+++ b/libgda/data/Catalog.vala
@@ -29,6 +29,7 @@ namespace GdaData {
 		public void update () throws Error {}
 		public void save () throws Error {}
 		public void append () throws Error {}
+		public void drop (bool cascade) throws Error {}
 		// DbNamedObject Interface
 		public string name { get; set; }
 		// DbCatalog interface
diff --git a/libgda/data/DataBase.vala b/libgda/data/DataBase.vala
index 606aa49..bb99fd5 100644
--- a/libgda/data/DataBase.vala
+++ b/libgda/data/DataBase.vala
@@ -42,6 +42,7 @@ namespace GdaData
 		}
 		public void save () throws Error {}
 		public void append () throws Error {}
+		public void drop (bool cascade) throws Error {}
 		// DbNamedObject
 		public string name { get; set; }
 		// DbCollection Interface
diff --git a/libgda/data/DbObject.vala b/libgda/data/DbObject.vala
index 4538f22..dc9f763 100644
--- a/libgda/data/DbObject.vala
+++ b/libgda/data/DbObject.vala
@@ -27,6 +27,7 @@ namespace GdaData {
 		public abstract void         append () throws Error;
 		public abstract void         update () throws Error;
 		public abstract void         save () throws Error;
+		public abstract void         drop (bool cascade) throws Error;
 	}
 	
 	public interface DbNamedObject : Object, DbObject 
diff --git a/libgda/data/DbTable.vala b/libgda/data/DbTable.vala
index a2f7153..b21f648 100644
--- a/libgda/data/DbTable.vala
+++ b/libgda/data/DbTable.vala
@@ -67,6 +67,7 @@ namespace GdaData
 	
 	errordomain DbTableError {
 		READ_ONLY,
-		FIELD
+		FIELD,
+		UPDATE
 	}
 }
diff --git a/libgda/data/GdaData-5.0.gir b/libgda/data/GdaData-5.0.gir
index 2223542..52e747b 100644
--- a/libgda/data/GdaData-5.0.gir
+++ b/libgda/data/GdaData-5.0.gir
@@ -352,6 +352,26 @@
 				<type name="none"/>
 			</return-value>
 		</virtual-method>
+		<method name="drop" c:identifier="gda_data_db_object_drop" throws="1">
+			<parameters>
+				<parameter name="cascade" transfer-ownership="none">
+					<type name="gboolean" c:type="gboolean"/>
+				</parameter>
+			</parameters>
+			<return-value transfer-ownership="full">
+				<type name="none"/>
+			</return-value>
+		</method>
+		<virtual-method name="drop" invoker="drop" throws="1">
+			<parameters>
+				<parameter name="cascade" transfer-ownership="none">
+					<type name="gboolean" c:type="gboolean"/>
+				</parameter>
+			</parameters>
+			<return-value transfer-ownership="full">
+				<type name="none"/>
+			</return-value>
+		</virtual-method>
 		<property name="connection" writable="1">
 			<type name="Gda.Connection" c:type="GdaConnection*"/>
 		</property>
@@ -396,6 +416,21 @@
 				</return-value>
 			</callback>
 		</field>
+		<field name="drop">
+			<callback name="drop" c:type="drop" throws="1">
+				<parameters>
+					<parameter name="self" transfer-ownership="none">
+						<type name="GdaData.DbObject" c:type="GdaDataDbObject*"/>
+					</parameter>
+					<parameter name="cascade" transfer-ownership="none">
+						<type name="gboolean" c:type="gboolean"/>
+					</parameter>
+				</parameters>
+				<return-value transfer-ownership="full">
+					<type name="none"/>
+				</return-value>
+			</callback>
+		</field>
 	</record>
 	<interface name="DbNamedObject" c:type="GdaDataDbNamedObject" glib:type-name="GdaDataDbNamedObject" glib:get-type="gda_data_db_named_object_get_type" glib:type-struct="DbNamedObjectIface">
 		<prerequisite name="GObject.Object"/>
diff --git a/libgda/data/Record.vala b/libgda/data/Record.vala
index aa201ea..b1db7a5 100644
--- a/libgda/data/Record.vala
+++ b/libgda/data/Record.vala
@@ -197,6 +197,7 @@ namespace GdaData {
 				throw new DbObjectError.UPDATE ("Have been updated more or less rows than expected");
 			}
 		}
+		public void drop (bool cascade) throws Error {}
         // 
         public string to_string ()
         {
diff --git a/libgda/data/Schema.vala b/libgda/data/Schema.vala
index 5729f18..c1caca0 100644
--- a/libgda/data/Schema.vala
+++ b/libgda/data/Schema.vala
@@ -48,6 +48,7 @@ namespace GdaData
 		}
 		public void save () throws Error {}
 		public void append () throws Error {}
+		public void drop (bool cascade) throws Error {}
 		// DbNamedObject Interface
 		public string name { get; set; }
 		// DbSchema Interface
diff --git a/libgda/data/Table.vala b/libgda/data/Table.vala
index 57c0d27..2ee31a3 100644
--- a/libgda/data/Table.vala
+++ b/libgda/data/Table.vala
@@ -204,17 +204,18 @@ namespace GdaData
 			var mc = store.extract ("SELECT * FROM _table_constraints"+
 			                        " WHERE table_name  = ##name::string" + cond,
 									vals);
-			stdout.printf ("EXTRACTED _table_constraints:\n" + mc.dump_as_string ());
 			for (r = 0; r < mc.get_n_rows (); r++) 
 			{
 				string ct = (string) mc.get_value_at (mc.get_column_index ("constraint_type"), r);
 				string cn = (string) mc.get_value_at (mc.get_column_index ("constraint_name"), r);
-				GLib.message ("Constraint Name = " + cn + "Type = " + ct + "\n");
 				vals.set ("constraint_name", cn);
 				var mpk = store.extract ("SELECT * FROM _key_column_usage"+
 				                         " WHERE table_name  = ##name::string"+
 				                         " AND constraint_name = ##constraint_name::string" + cond, vals);
-				stdout.printf ("EXTRACTED _key_column_usagess:\n" + mpk.dump_as_string ());
+				if (mpk.get_n_rows () != 1) {
+					GLib.warning ("Constraint '" + cn + "' type '" + ct + "' not found. Skipped!");
+					continue;
+				}
 				var colname = (string) mpk.get_value_at (mpk.get_column_index ("column_name"), 0);
 				var f = _fields.get (colname);
 				f.attributes = f.attributes | DbFieldInfo.attribute_from_string (ct);
@@ -239,7 +240,6 @@ namespace GdaData
 					var mfk = store.extract ("SELECT * FROM _referential_constraints"+
 					                         " WHERE table_name  = ##name::string "+
 					                         "AND constraint_name = ##constraint_name::string" + cond, vals);
-					stdout.printf ("EXTRACTED _referential_constraints:\n" + mfk.dump_as_string ());
 					f.fkey = new DbFieldInfo.ForeignKey ();
 					f.fkey.name = cn;
 					f.fkey.refname = (string) mfk.get_value_at (mfk.get_column_index ("ref_constraint_name"), 0);
@@ -272,7 +272,6 @@ namespace GdaData
 				                         " AND fk_constraint_name = ##constraint_name::string" +
 				                         " AND fk_table_catalog = ##catalog::string"+
 				                         " AND fk_table_schema = ##schema::string", vals);
-					stdout.printf ("EXTRACTED _detailed_fk 1:\n" + mfkr.dump_as_string ());
 					for (int r2 = 0; r2 < mfkr.get_n_rows (); r2++) {
 						var rc = (string) mfkr.get_value_at (mfkr.get_column_index ("ref_column"), r2);
 						f.fkey.refcol.add (rc);
@@ -293,7 +292,6 @@ namespace GdaData
 			                         " AND ref_table_schema = ##schema::string", vals);
 			if (mtr.get_n_rows () == 0)
 				GLib.message ("Rows = 0");
-			GLib.message ("EXTRACTED _detailed_fk 2:\n" + mtr.dump_as_string ());
 			for (r = 0; r < mtr.get_n_rows (); r++) {
 				var tn = (string) mtr.get_value_at (mtr.get_column_index ("fk_table_name"), r);
 				var tr = new Table ();
@@ -313,45 +311,45 @@ namespace GdaData
 		public void append () throws Error 
 		{
 			var op = connection.create_operation (Gda.ServerOperationType.CREATE_TABLE, null);
-			op.set_value_at_path (name, "/TABLE_DEF_P/TABLE_NAME");
+			op.set_value_at (name, "/TABLE_DEF_P/TABLE_NAME");
 			if (DbTable.TableType.LOCAL_TEMPORARY in table_type)
-				op.set_value_at_path ("TRUE","/TABLE_DEF_P/TABLE_TEMP");
+				op.set_value_at ("TRUE","/TABLE_DEF_P/TABLE_TEMP");
 			int refs = 0;
 			foreach (DbFieldInfo f in fields) {
-				op.set_value_at_path (f.name, "/FIELDS_A/@COLUMN_NAME/" + f.ordinal.to_string ());
-				op.set_value_at_path (connection.get_provider ().get_default_dbms_type (connection, f.value_type), 
+				op.set_value_at (f.name, "/FIELDS_A/@COLUMN_NAME/" + f.ordinal.to_string ());
+				op.set_value_at (connection.get_provider ().get_default_dbms_type (connection, f.value_type), 
 										"/FIELDS_A/@COLUMN_TYPE/" + f.ordinal.to_string ());
 				if (DbFieldInfo.Attribute.PRIMARY_KEY in f.attributes) {
-					op.set_value_at_path ("TRUE", "/FIELDS_A/@COLUMN_PKEY/" + f.ordinal.to_string ());
+					op.set_value_at ("TRUE", "/FIELDS_A/@COLUMN_PKEY/" + f.ordinal.to_string ());
 				}
 				if (DbFieldInfo.Attribute.CAN_BE_NULL in f.attributes) {
-					op.set_value_at_path ("TRUE", "/FIELDS_A/@COLUMN_NNUL/" + f.ordinal.to_string ());
+					op.set_value_at ("TRUE", "/FIELDS_A/@COLUMN_NNUL/" + f.ordinal.to_string ());
 				}
 				if (DbFieldInfo.Attribute.AUTO_INCREMENT in f.attributes) {
-					op.set_value_at_path ("TRUE", "/FIELDS_A/@COLUMN_AUTOINC/" + f.ordinal.to_string ());
+					op.set_value_at ("TRUE", "/FIELDS_A/@COLUMN_AUTOINC/" + f.ordinal.to_string ());
 				}
 				if (DbFieldInfo.Attribute.UNIQUE in f.attributes) {
-					op.set_value_at_path ("TRUE", "/FIELDS_A/@COLUMN_UNIQUE/" + f.ordinal.to_string ());
+					op.set_value_at ("TRUE", "/FIELDS_A/@COLUMN_UNIQUE/" + f.ordinal.to_string ());
 				}
 				if (DbFieldInfo.Attribute.HAVE_DEFAULT in f.attributes) {
-					op.set_value_at_path (connection.value_to_sql_string (f.default_value),
+					op.set_value_at (connection.value_to_sql_string (f.default_value),
 											"/FIELDS_A/@COLUMN_DEFAULT/" + f.ordinal.to_string ());
 				}
 				if (DbFieldInfo.Attribute.FOREIGN_KEY in f.attributes) {
-					op.set_value_at_path (f.fkey.reftable.name, "/FKEY_S/" + refs.to_string () + 
+					op.set_value_at (f.fkey.reftable.name, "/FKEY_S/" + refs.to_string () + 
 									"/FKEY_REF_TABLE");
 					int rc = 0;
 					foreach (string fkc in f.fkey.refcol) {
-						op.set_value_at_path (f.name, "/FKEY_S/" + refs.to_string ()
+						op.set_value_at (f.name, "/FKEY_S/" + refs.to_string ()
 										+ "/FKEY_FIELDS_A/@FK_FIELD/" + rc.to_string ());
-						op.set_value_at_path (fkc, "/FKEY_S/" + refs.to_string ()
+						op.set_value_at (fkc, "/FKEY_S/" + refs.to_string ()
 										+ "/FKEY_FIELDS_A/@FK_REF_PK_FIELD/" + rc.to_string ());
 						rc++;
 					}
 
-					op.set_value_at_path (DbFieldInfo.ForeignKey.rule_to_string (f.fkey.update_rule),
+					op.set_value_at (DbFieldInfo.ForeignKey.rule_to_string (f.fkey.update_rule),
 										"/FKEY_S/" + refs.to_string () + "/FKEY_ONUPDATE");
-					op.set_value_at_path (DbFieldInfo.ForeignKey.rule_to_string (f.fkey.delete_rule),
+					op.set_value_at (DbFieldInfo.ForeignKey.rule_to_string (f.fkey.delete_rule),
 										"/FKEY_S/" + refs.to_string () + "/FKEY_ONDELETE");
 					refs++;
 				}
@@ -359,6 +357,12 @@ namespace GdaData
 			connection.perform_operation (op);
 		}
 		
+		public void drop (bool cascade) throws Error
+		{
+			var op = Gda.ServerOperation.prepare_drop_table (connection, name);
+			op.perform_drop_table ();
+		}
+		
 		// DbNamedObject Interface
 		
 		public string name { get; set; }
diff --git a/libgda/libgda-5.0.vapi b/libgda/libgda-5.0.vapi
index 2dd5a05..97bfad9 100644
--- a/libgda/libgda-5.0.vapi
+++ b/libgda/libgda-5.0.vapi
@@ -763,7 +763,8 @@ namespace Gda {
 		public virtual void seq_item_added (string seq_path, int item_index);
 		[NoWrapper]
 		public virtual void seq_item_remove (string seq_path, int item_index);
-		public bool set_value_at_path (string? value, string path) throws GLib.Error;
+		[CCode (cname = "gda_server_operation_set_value_at_path")]
+		public bool set_value_at (string? value, string path) throws GLib.Error;
 		public static Gda.ServerOperationType string_to_op_type (string str);
 		[NoAccessorMethod]
 		public Gda.Connection connection { owned get; construct; }
diff --git a/tests/vala/CheckTable.vala b/tests/vala/CheckTable.vala
index 1651ab6..78d0d89 100644
--- a/tests/vala/CheckTable.vala
+++ b/tests/vala/CheckTable.vala
@@ -100,7 +100,6 @@ namespace Check {
 				this.connection.execute_non_select_command("INSERT INTO salary (customer) VALUES (3)");
 			}
 			catch (Error e) { stdout.printf ("Error on Create company table: " + e.message + "\n"); }
-			this.connection.update_meta_store (null);
 		}
 		
 		private void Init_sqlite () throws Error
@@ -125,7 +124,6 @@ namespace Check {
 				this.connection.execute_non_select_command("INSERT INTO salary (customer) VALUES (3)");
 		}
 		
-		
 		public void init ()
 			throws Error
 		{
@@ -136,6 +134,7 @@ namespace Check {
 			stdout.printf("Setting name\n");
 			table.name = "customer";
 		}
+		
 		public int update ()
 			throws Error
 		{
@@ -216,7 +215,9 @@ namespace Check {
 				if (DbFieldInfo.Attribute.HAVE_DEFAULT in fi3.attributes
 						&& fi3.name == "city") {
 					found++;
-					if (GLib.strcmp ((string)fi3.default_value,"\"New Yield\"") != 0) {
+					var dh = table.connection.get_provider ().get_data_handler_g_type (table.connection, 
+								typeof (string));
+					if (GLib.strcmp ((string)fi3.default_value,dh.get_sql_from_value("New Yield")) != 0) {
 						fails++;
 						stdout.printf (">>>>>>>> Default Value No Match. Holded \'"+
 						               (string) fi3.default_value + "\' But Expected \"New Yield\" : FAIL\n");
@@ -276,6 +277,19 @@ namespace Check {
 			var t = new Table ();
 			t.name = "created_table";
 			t.connection = connection;
+			
+			try {
+				if (t.records.size > 0) {
+					stdout.printf ("Table exists and is not empty. Deleting it!!\n");
+					t.drop (false);
+				}
+			}
+			catch (Error e) {
+				stdout.printf ("Error on dropping table with error message: " + e.message + "\n");
+				fails++;
+			}
+			
+			
 			var field = new FieldInfo ();
 			field.name = "id";
 			field.value_type = typeof (int);
@@ -350,6 +364,15 @@ namespace Check {
 				fails++;
 				stdout.printf ("Check Table Values: FAILED\n");
 			}
+			
+			try {
+					t.drop (false);
+			}
+			catch (Error e) {
+				stdout.printf ("Dropping table Fails: " + e.message + "\n");
+				fails++;
+			}
+			
 			if (fails > 0)
 				stdout.printf (">>>>>>>> FAIL <<<<<<<<<<<\n");
 			else



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