glom r1866 - in trunk: . glom glom/libglom/data_structure glom/mode_data



Author: jhs
Date: Thu Jan 29 20:45:10 2009
New Revision: 1866
URL: http://svn.gnome.org/viewvc/glom?rev=1866&view=rev

Log:
2009-01-29  Johannes Schmid  <jhs openismus com>

	* glom/base_db.cc:
	* glom/base_db_table_data.cc:
	* glom/mode_data/box_data_calendar_related.cc:
	* glom/mode_data/box_data_list_related.cc:
	Move the rest of queries from sql() to use params where this made sense.
	Some methods generate random sql that is executed elsewhere which means that
	they cannot use parameters themselves. I did not touch those.
	
	* glom/libglom/data_structure/field.cc:
	* glom/libglom/data_structure/field.h:
	Added get_holder(value, name) to avoid having to use temporary field to
	be able to use get_holder() and get_gda_holder_string()

Modified:
   trunk/ChangeLog
   trunk/glom/base_db.cc
   trunk/glom/base_db_table_data.cc
   trunk/glom/libglom/data_structure/field.cc
   trunk/glom/libglom/data_structure/field.h
   trunk/glom/mode_data/box_data_calendar_related.cc
   trunk/glom/mode_data/box_data_list_related.cc

Modified: trunk/glom/base_db.cc
==============================================================================
--- trunk/glom/base_db.cc	(original)
+++ trunk/glom/base_db.cc	Thu Jan 29 20:45:10 2009
@@ -2407,18 +2407,13 @@
 
   const Glib::ustring field_name = field_in_record.m_field->get_name();
   if(!field_name.empty()) //This should not happen.
-  {
-    Field field = *field_in_record.m_field;
-    Field key = *field_in_record.m_key;
-    field.set_data(field_value);
-    key.set_data(field_in_record.m_key_value);
-    
+  { 
     Glib::RefPtr<Gnome::Gda::Set> params = Gnome::Gda::Set::create();
-    params->add_holder(field.get_holder());
-    params->add_holder(key.get_holder());  
+    params->add_holder(field_in_record.m_field->get_holder(field_value));
+    params->add_holder(field_in_record.m_key->get_holder(field_in_record.m_key_value));  
     Glib::ustring strQuery = "UPDATE \"" + field_in_record.m_table_name + "\"";
-    strQuery += " SET \"" + field.get_name() + "\" = " + field.get_gda_holder_string();
-    strQuery += " WHERE \"" + key.get_name() + "\" = " + key.get_gda_holder_string();
+    strQuery += " SET \"" + field_in_record.m_field->get_name() + "\" = " + field_in_record.m_field->get_gda_holder_string();
+    strQuery += " WHERE \"" +field_in_record.m_field->get_name() + "\" = " + field_in_record.m_field->get_gda_holder_string();
 
 #ifdef GLIBMM_EXCEPTIONS_ENABLED
     try //TODO: The exceptions are probably already handled by query_execute(0.

Modified: trunk/glom/base_db_table_data.cc
==============================================================================
--- trunk/glom/base_db_table_data.cc	(original)
+++ trunk/glom/base_db_table_data.cc	Thu Jan 29 20:45:10 2009
@@ -160,10 +160,9 @@
       {
         Gnome::Gda::Value value;
 
-        const sharedptr<const Field>& field = layout_item->get_full_field_details();
+        const sharedptr<const Field>& field = layout_item->get_full_field_details();        
         if(field)
         {
-          Field gda_field = *field;
           //Use the specified (generated) primary key value, if there is one:
           if(primary_key_name == field_name && !Conversions::value_is_empty(primary_key_value))
           {
@@ -174,7 +173,6 @@
             if(use_entered_data)
               value = get_entered_field_data(layout_item);
           }
-          gda_field.set_data(value);
 
           /* //TODO: This would be too many small queries when adding one record.
           //Check whether the value meets uniqueness constraints:
@@ -186,7 +184,7 @@
             } 
           }
           */
-          if(!gda_field.get_data().is_null())
+          if(!value.is_null())
           {
             if(!strNames.empty())
             {
@@ -195,9 +193,8 @@
             }
   
             strNames += "\"" + field_name + "\"";
-            strValues += gda_field.get_gda_holder_string();
-            Glib::RefPtr<Gnome::Gda::Holder> holder = gda_field.get_holder();
-            holder->set_not_null(false);
+            strValues += field->get_gda_holder_string();
+            Glib::RefPtr<Gnome::Gda::Holder> holder = field->get_holder(value);
             params->add_holder(holder);
   
             map_added[field_name] = true;
@@ -352,9 +349,10 @@
 
         //Generate the new key value;
       }
-
-      const Glib::ustring strQuery = "INSERT INTO \"" + relationship->get_to_table() + "\" (\"" + primary_key_field->get_name() + "\") VALUES (" + primary_key_field->sql(primary_key_value) + ")";
-      const bool test = query_execute(strQuery);
+      Glib::RefPtr<Gnome::Gda::Set> params = Gnome::Gda::Set::create();
+      params->add_holder(primary_key_field->get_holder(primary_key_value));
+      const Glib::ustring strQuery = "INSERT INTO \"" + relationship->get_to_table() + "\" (\"" + primary_key_field->get_name() + "\") VALUES (" + primary_key_field->get_gda_holder_string() + ")";
+      const bool test = query_execute(strQuery, params);
       if(!test)
       {
         std::cerr << "Base_DB_Table_Data::add_related_record_for_field(): INSERT failed." << std::endl;
@@ -394,9 +392,10 @@
           }
           else
           {
-            const Glib::ustring strQuery = "UPDATE \"" + relationship->get_from_table() + "\" SET \"" + relationship->get_from_field() + "\" = " + primary_key_field->sql(primary_key_value) +
-              " WHERE \"" + relationship->get_from_table() + "\".\"" + parent_primary_key_field->get_name() + "\" = " + parent_primary_key_field->sql(parent_primary_key_value);
-            const bool test = query_execute(strQuery);
+            params->add_holder(parent_primary_key_field->get_holder(parent_primary_key_value));
+            const Glib::ustring strQuery = "UPDATE \"" + relationship->get_from_table() + "\" SET \"" + relationship->get_from_field() + "\" = " + primary_key_field->get_gda_holder_string() +
+              " WHERE \"" + relationship->get_from_table() + "\".\"" + parent_primary_key_field->get_name() + "\" = " +  parent_primary_key_field->get_gda_holder_string();
+            const bool test = query_execute(strQuery, params);
             if(!test)
             {
               std::cerr << "Base_DB_Table_Data::add_related_record_for_field(): UPDATE failed." << std::endl;
@@ -449,7 +448,9 @@
   sharedptr<Field> field_primary_key = get_field_primary_key();
   if(field_primary_key && !Conversions::value_is_empty(primary_key_value))
   {
-    return query_execute( "DELETE FROM \"" + m_table_name + "\" WHERE \"" + m_table_name + "\".\"" + field_primary_key->get_name() + "\" = " + field_primary_key->sql(primary_key_value));
+    Glib::RefPtr<Gnome::Gda::Set> params = Gnome::Gda::Set::create();
+    params->add_holder(field_primary_key->get_holder(primary_key_value));
+    return query_execute( "DELETE FROM \"" + m_table_name + "\" WHERE \"" + m_table_name + "\".\"" + field_primary_key->get_name() + "\" = " + field_primary_key->get_gda_holder_string(), params);
   }
   else
   {

Modified: trunk/glom/libglom/data_structure/field.cc
==============================================================================
--- trunk/glom/libglom/data_structure/field.cc	(original)
+++ trunk/glom/libglom/data_structure/field.cc	Thu Jan 29 20:45:10 2009
@@ -753,6 +753,14 @@
   holder->set_value_as_value(get_data());
   return holder;
 }
+
+Glib::RefPtr<Gnome::Gda::Holder> Field::get_holder(const Gnome::Gda::Value& value, const Glib::ustring& name) const
+{
+  Glib::RefPtr<Gnome::Gda::Holder> holder = get_holder(name);
+  holder->set_value_as_value(value);
+  return holder;
+}
+
 Glib::ustring Field::get_gda_holder_string(const Glib::ustring& name) const
 {
   Glib::ustring real_name = name.empty() ? get_name() : name;

Modified: trunk/glom/libglom/data_structure/field.h
==============================================================================
--- trunk/glom/libglom/data_structure/field.h	(original)
+++ trunk/glom/libglom/data_structure/field.h	Thu Jan 29 20:45:10 2009
@@ -162,6 +162,7 @@
   Glib::ustring get_gda_type() const;
   GType get_gda_g_type() const;
   Glib::RefPtr<Gnome::Gda::Holder> get_holder(const Glib::ustring& name = Glib::ustring()) const;
+  Glib::RefPtr<Gnome::Gda::Holder> get_holder(const Gnome::Gda::Value& value, const Glib::ustring& name = Glib::ustring()) const;
   Glib::ustring get_gda_holder_string(const Glib::ustring& name = Glib::ustring()) const;
 
   /** Escape the value so that it can be used in a SQL command.

Modified: trunk/glom/mode_data/box_data_calendar_related.cc
==============================================================================
--- trunk/glom/mode_data/box_data_calendar_related.cc	(original)
+++ trunk/glom/mode_data/box_data_calendar_related.cc	Thu Jan 29 20:45:10 2009
@@ -273,10 +273,13 @@
     //Create the link by setting the foreign key
     if(m_key_field && m_portal)
     {
+      Glib::RefPtr<Gnome::Gda::Set> params = Gnome::Gda::Set::create();
+      params->add_holder(m_key_field->get_holder(m_key_value));
+      params->add_holder(field_primary_key->get_holder(primary_key_value));
       Glib::ustring strQuery = "UPDATE \"" + m_portal->get_table_used(Glib::ustring() /* not relevant */) + "\"";
-      strQuery += " SET \"" +  /* get_table_name() + "." +*/ m_key_field->get_name() + "\" = " + m_key_field->sql(m_key_value);
-      strQuery += " WHERE \"" + get_table_name() + "\".\"" + field_primary_key->get_name() + "\" = " + field_primary_key->sql(primary_key_value);
-      const bool test = query_execute(strQuery);
+      strQuery += " SET \"" +  /* get_table_name() + "." +*/ m_key_field->get_name() + "\" = " + m_key_field->get_gda_holder_string();
+      strQuery += " WHERE \"" + get_table_name() + "\".\"" + field_primary_key->get_name() + "\" = " + field_primary_key->get_gda_holder_string();
+      const bool test = query_execute(strQuery, params);
       if(test)
       {
         //Show it on the view, if it's visible:

Modified: trunk/glom/mode_data/box_data_list_related.cc
==============================================================================
--- trunk/glom/mode_data/box_data_list_related.cc	(original)
+++ trunk/glom/mode_data/box_data_list_related.cc	Thu Jan 29 20:45:10 2009
@@ -276,11 +276,14 @@
     //Create the link by setting the foreign key
     if(m_key_field && m_portal)
     {
+      Glib::RefPtr<Gnome::Gda::Set> params = Gnome::Gda::Set::create();
+      params->add_holder(m_key_field->get_holder(m_key_value));
+      params->add_holder(field_primary_key->get_holder(primary_key_value));
       Glib::ustring strQuery = "UPDATE \"" + m_portal->get_table_used(Glib::ustring() /* not relevant */) + "\"";
-      strQuery += " SET \"" +  /* get_table_name() + "." +*/ m_key_field->get_name() + "\" = " + m_key_field->sql(m_key_value);
-      strQuery += " WHERE \"" + get_table_name() + "\".\"" + field_primary_key->get_name() + "\" = " + field_primary_key->sql(primary_key_value);
+      strQuery += " SET \"" +  /* get_table_name() + "." +*/ m_key_field->get_name() + "\" = " + m_key_field->get_gda_holder_string();
+      strQuery += " WHERE \"" + get_table_name() + "\".\"" + field_primary_key->get_name() + "\" = " + field_primary_key->get_gda_holder_string();
       std::cout << "Box_Data_List_Related::on_adddel_record_added(): setting value in db=" << primary_key_value.to_string() << std::endl;
-      const bool test = query_execute(strQuery);
+      const bool test = query_execute(strQuery, params);
       if(test)
       {
         //Show it on the view, if it's visible:



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