glom r1490 - in branches/glom-1-6: . glom/libglom/data_structure glom/mode_design/fields



Author: murrayc
Date: Mon Mar 31 10:18:16 2008
New Revision: 1490
URL: http://svn.gnome.org/viewvc/glom?rev=1490&view=rev

Log:
2008-03-31  Murray Cumming  <murrayc murrayc com>

* glom/libglom/data_structure/field.cc: Field::init_map():
Comment out some previously-allowed conversions because postgres 8.3 
has become less tolerant of conversions that could not produce useful 
data, such as date-to-number, causing postgres errors at runtime.
Bug #525188 (Jani Monoses)

Modified:
   branches/glom-1-6/ChangeLog
   branches/glom-1-6/glom/libglom/data_structure/field.cc
   branches/glom-1-6/glom/mode_design/fields/box_db_table_definition.cc

Modified: branches/glom-1-6/glom/libglom/data_structure/field.cc
==============================================================================
--- branches/glom-1-6/glom/libglom/data_structure/field.cc	(original)
+++ branches/glom-1-6/glom/libglom/data_structure/field.cc	Mon Mar 31 10:18:16 2008
@@ -586,8 +586,8 @@
     list_conversions.clear();
     list_conversions.push_back(Field::TYPE_BOOLEAN);
     list_conversions.push_back(Field::TYPE_TEXT);
-    list_conversions.push_back(Field::TYPE_DATE);
-    list_conversions.push_back(Field::TYPE_TIME);
+    //to_date(numeric) was supported in 8.2 but not in 8.3: list_conversions.push_back(Field::TYPE_DATE);
+    //to_timestamp(numeric) was supported in 8.2 but not in 8.3: list_conversions.push_back(Field::TYPE_TIME);
     m_map_conversions[Field::TYPE_NUMERIC] = list_conversions;
 
     //Text:
@@ -602,15 +602,15 @@
     list_conversions.clear();
     list_conversions.push_back(Field::TYPE_TEXT);
     list_conversions.push_back(Field::TYPE_NUMERIC);
-    list_conversions.push_back(Field::TYPE_DATE);
-    list_conversions.push_back(Field::TYPE_TIME);
+    //to_timestamp(numeric) was supported in 8.2 but not in 8.3: list_conversions.push_back(Field::TYPE_DATE);
+    //to_timestamp(numeric) was supported in 8.2 but not in 8.3: list_conversions.push_back(Field::TYPE_TIME);
     m_map_conversions[Field::TYPE_BOOLEAN] = list_conversions;
 
     //Date:
     list_conversions.clear();
     list_conversions.push_back(Field::TYPE_TEXT);
-    list_conversions.push_back(Field::TYPE_NUMERIC);
-    list_conversions.push_back(Field::TYPE_BOOLEAN);
+    //to_number(textcat()) was supported in 8.2 but not in 8.3: list_conversions.push_back(Field::TYPE_NUMERIC);
+    //to_number(textcat()) was supported in 8.2 but not in 8.3: list_conversions.push_back(Field::TYPE_BOOLEAN);
     m_map_conversions[Field::TYPE_DATE] = list_conversions;
 
     //Time:

Modified: branches/glom-1-6/glom/mode_design/fields/box_db_table_definition.cc
==============================================================================
--- branches/glom-1-6/glom/mode_design/fields/box_db_table_definition.cc	(original)
+++ branches/glom-1-6/glom/mode_design/fields/box_db_table_definition.cc	Mon Mar 31 10:18:16 2008
@@ -668,12 +668,12 @@
 
               break;
             }
-            case Field::TYPE_DATE: //CAST does not work if the destination type is numeric.
+            case Field::TYPE_DATE: //CAST does not work if the destination type is date.
             {
               conversion_command = "to_date( " + field_name_old_quoted + ", 'YYYYMMDD' )"; //TODO: standardise date storage format.
               break;
             }
-            case Field::TYPE_TIME: //CAST does not work if the destination type is numeric.
+            case Field::TYPE_TIME: //CAST does not work if the destination type is timestamp.
             {
               conversion_command = "to_timestamp( " + field_name_old_quoted + ", 'HHMMSS' )";  //TODO: standardise time storage format.
               break;
@@ -698,9 +698,26 @@
             }
           }
 
-          Glib::RefPtr<Gnome::Gda::DataModel> datamodel = query_execute( "UPDATE \"" + m_table_name + "\" SET \"" + fieldTemp->get_name() + "\" = " + conversion_command, get_app_window());  //TODO: Not full type details.
-          if(!datamodel)
-            conversion_failed = true;
+          //Convert the data in the field:
+          const Glib::ustring sql = "UPDATE \"" + m_table_name + "\" SET \"" + fieldTemp->get_name() + "\" = " + conversion_command;
+          try
+          {
+            Glib::RefPtr<Gnome::Gda::DataModel> datamodel = query_execute(sql, get_app_window());  //TODO: Not full type details.
+            if(!datamodel)
+              conversion_failed = true;
+          }
+          catch(const Glib::Error& ex)
+          {
+            std::cerr << "Box_DB_Table_Definition::postgres_change_column_type(): Glib::Error exception while executing SQL:" << std::endl << "  " <<  sql << std::endl;
+            handle_error(ex);
+            conversion_failed = false;
+          }
+          catch(const std::exception& ex)
+          {
+            std::cerr << "Box_DB_Table_Definition::postgres_change_column_type(): std::exception while executing SQL:" << std::endl << "  " <<  sql << std::endl;
+            handle_error(ex);
+            conversion_failed = false;
+          }
         }
 
         if(!conversion_failed)



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