[glom/mysql] MySQL: Avoid affecting PostgreSQL field types.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glom/mysql] MySQL: Avoid affecting PostgreSQL field types.
- Date: Sun, 6 Jan 2013 14:43:03 +0000 (UTC)
commit 013fefe7fa6d80fe5b8c86c744e24121aadb176a
Author: Murray Cumming <murrayc murrayc com>
Date: Sun Jan 6 15:36:24 2013 +0100
MySQL: Avoid affecting PostgreSQL field types.
* glom/libglom/db_utils.[h|cc]: create_table():
Take the hosting mode so we can only do checks for
relevant hosting modes.
* glom/appwindow.cc: Adapt.
ChangeLog | 9 +++++++++
glom/appwindow.cc | 2 +-
glom/libglom/db_utils.cc | 27 ++++++++++++++++-----------
glom/libglom/db_utils.h | 2 +-
4 files changed, 27 insertions(+), 13 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 3134bc4..ac2849e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2013-01-06 Murray Cumming <murrayc murrayc com>
+ MySQL: Avoid affecting PostgreSQL field types.
+
+ * glom/libglom/db_utils.[h|cc]: create_table():
+ Take the hosting mode so we can only do checks for
+ relevant hosting modes.
+ * glom/appwindow.cc: Adapt.
+
+2013-01-06 Murray Cumming <murrayc murrayc com>
+
MySQL: Use double instead of DECIMAL for numeric values.
* glom/libglom/db_utils.cc: create_table():
diff --git a/glom/appwindow.cc b/glom/appwindow.cc
index 7cb312a..fceaaaa 100644
--- a/glom/appwindow.cc
+++ b/glom/appwindow.cc
@@ -1748,7 +1748,7 @@ bool AppWindow::recreate_database_from_example(bool& user_cancelled)
Document::type_vec_fields fields = pDocument->get_table_fields(table_info->get_name());
pulse_progress_message();
- const bool table_creation_succeeded = DbUtils::create_table(table_info, fields);
+ const bool table_creation_succeeded = DbUtils::create_table(pDocument->get_hosting_mode(), table_info, fields);
pulse_progress_message();
if(!table_creation_succeeded)
{
diff --git a/glom/libglom/db_utils.cc b/glom/libglom/db_utils.cc
index 24293df..b1df9cb 100644
--- a/glom/libglom/db_utils.cc
+++ b/glom/libglom/db_utils.cc
@@ -278,7 +278,7 @@ bool recreate_database_from_document(Document* document, const sigc::slot<void>&
Document::type_vec_fields fields = document->get_table_fields(table_info->get_name());
progress();
- const bool table_creation_succeeded = create_table(table_info, fields);
+ const bool table_creation_succeeded = create_table(document->get_hosting_mode(), table_info, fields);
progress();
if(!table_creation_succeeded)
{
@@ -465,7 +465,7 @@ bool add_standard_tables(Document* document)
//Name, address, etc:
if(!get_table_exists_in_database(GLOM_STANDARD_TABLE_PREFS_TABLE_NAME))
{
- const bool test = create_table(prefs_table_info, pref_fields);
+ const bool test = create_table(document->get_hosting_mode(), prefs_table_info, pref_fields);
if(test)
{
@@ -535,7 +535,7 @@ bool add_standard_tables(Document* document)
field_next_value->set_glom_type(Field::TYPE_TEXT);
fields.push_back(field_next_value);
- const bool test = create_table(table_info, fields);
+ const bool test = create_table(document->get_hosting_mode(), table_info, fields);
if(!test)
{
std::cerr << G_STRFUNC << ": add_standard_tables(): create_table(autoincrements) failed." << std::endl;
@@ -1199,7 +1199,7 @@ bool create_table_with_default_fields(Document* document, const Glib::ustring& t
table_info->set_name(table_name);
table_info->set_title_original( Utils::title_from_string( table_name ) ); //Start with a title that might be appropriate.
- created = create_table(table_info, fields);
+ created = create_table(document->get_hosting_mode(), table_info, fields);
if(created)
{
@@ -1213,7 +1213,7 @@ bool create_table_with_default_fields(Document* document, const Glib::ustring& t
return created;
}
-bool create_table(const sharedptr<const TableInfo>& table_info, const Document::type_vec_fields& fields_in)
+bool create_table(Document::HostingMode hosting_mode, const sharedptr<const TableInfo>& table_info, const Document::type_vec_fields& fields_in)
{
//std::cout << "debug: " << G_STRFUNC << ": " << table_info->get_name() << ", title=" << table_info->get_title() << std::endl;
@@ -1246,12 +1246,17 @@ bool create_table(const sharedptr<const TableInfo>& table_info, const Document::
field->set_field_info(info); //TODO_Performance
Glib::ustring field_type = field->get_sql_type();
- if(field_type == "varchar")
- field_type = "varchar(255)"; //For MySQL. //TODO: Avoid this for PostgreSQL
- else if(field_type == "VARBINARY")
- field_type = "blob"; //For MySQL.
- else if(field_type == "DECIMAL")
- field_type = "double"; //For MySQL, because DECIMAL with no parameters means no decimal points.
+
+ if( (hosting_mode == Document::HOSTING_MODE_MYSQL_CENTRAL) ||
+ (hosting_mode == Document::HOSTING_MODE_MYSQL_SELF) )
+ {
+ if(field_type == "varchar")
+ field_type = "varchar(255)";
+ else if(field_type == "VARBINARY")
+ field_type = "blob"; //Because VARBINARY needs us to specify a size.
+ else if(field_type == "DECIMAL")
+ field_type = "double"; //Because DECIMAL with no parameters means no decimal points.
+ }
Glib::ustring sql_field_description = escape_sql_id(field->get_name()) + " " + field_type;
diff --git a/glom/libglom/db_utils.h b/glom/libglom/db_utils.h
index 408296b..3d05c17 100644
--- a/glom/libglom/db_utils.h
+++ b/glom/libglom/db_utils.h
@@ -79,7 +79,7 @@ type_vec_strings get_table_names_from_database(bool ignore_system_tables = false
bool get_table_exists_in_database(const Glib::ustring& table_name);
-bool create_table(const sharedptr<const TableInfo>& table_info, const Document::type_vec_fields& fields);
+bool create_table(Document::HostingMode hosting_mode, const sharedptr<const TableInfo>& table_info, const Document::type_vec_fields& fields);
/// Also saves the table information in the document:
bool create_table_with_default_fields(Document* document, const Glib::ustring& table_name);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]