[libgda] GdaData.Table pass Unit Tests. ServerOperation.set_value_at_path renamed. * Added DbObject.drop (boo
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda] GdaData.Table pass Unit Tests. ServerOperation.set_value_at_path renamed. * Added DbObject.drop (boo
- Date: Tue, 28 Feb 2012 03:18:14 +0000 (UTC)
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]