glom r1491 - in trunk: . glom/libglom/data_structure glom/mode_design/fields
- From: murrayc svn gnome org
- To: svn-commits-list gnome org
- Subject: glom r1491 - in trunk: . glom/libglom/data_structure glom/mode_design/fields
- Date: Mon, 31 Mar 2008 10:19:22 +0100 (BST)
Author: murrayc
Date: Mon Mar 31 10:19:21 2008
New Revision: 1491
URL: http://svn.gnome.org/viewvc/glom?rev=1491&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:
trunk/ChangeLog
trunk/glom/libglom/data_structure/field.cc
trunk/glom/mode_design/fields/box_db_table_definition.cc
Modified: trunk/glom/libglom/data_structure/field.cc
==============================================================================
--- trunk/glom/libglom/data_structure/field.cc (original)
+++ trunk/glom/libglom/data_structure/field.cc Mon Mar 31 10:19:21 2008
@@ -587,8 +587,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:
@@ -603,15 +603,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: trunk/glom/mode_design/fields/box_db_table_definition.cc
==============================================================================
--- trunk/glom/mode_design/fields/box_db_table_definition.cc (original)
+++ trunk/glom/mode_design/fields/box_db_table_definition.cc Mon Mar 31 10:19:21 2008
@@ -669,12 +669,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;
@@ -699,9 +699,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]