From 3c66c315c1dc199cbd46eca0c7cb7c173add05ca Mon Sep 17 00:00:00 2001 From: Patrick Skillen Date: Thu, 6 May 2021 11:29:54 +0100 Subject: [PATCH 1/3] Fix Version field interpreting ints as BigDecimal In some cases the "version" var would be a BigDecimal. This led to 1) versions being displayed as "1.0.2.0" instead of "1.2", and 2) versions with letters (e.g A.0) leading to a 500 error, as BigDecimal#chr doesn't exist --- app/helpers/dmsf_upload_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/dmsf_upload_helper.rb b/app/helpers/dmsf_upload_helper.rb index aacc8f98..f11e9477 100644 --- a/app/helpers/dmsf_upload_helper.rb +++ b/app/helpers/dmsf_upload_helper.rb @@ -207,6 +207,7 @@ module DmsfUploadHelper # 1 -> 1, -65 -> A def self.gui_version(version) + version = version.to_i # catch the case where version is a BigDecimal return version if version >= 0 (-version).chr end From 74dc3b5b2710737af687dba3ef7b7d6aeccfcb51 Mon Sep 17 00:00:00 2001 From: Patrick Skillen Date: Thu, 6 May 2021 14:33:16 +0100 Subject: [PATCH 2/3] Fix query fields being loaded as decimal instead of int With some DB backends (specifically AWS Postgres RDS) these fields would load as BigDecimal instead of int. This led to 1) versions being displayed as "1.0.2.0" instead of "1.2", and 2) versions with letters (e.g A.0) leading to a 500 error, as BigDecimal#chr doesn't exist --- app/models/dmsf_query.rb | 50 ++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/app/models/dmsf_query.rb b/app/models/dmsf_query.rb index 7d7d4078..6ee9976a 100644 --- a/app/models/dmsf_query.rb +++ b/app/models/dmsf_query.rb @@ -199,20 +199,20 @@ class DmsfQuery < Query scope = Project.select(%{ projects.id AS id, projects.id AS project_id, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS revision_id, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS revision_id, projects.name AS title, projects.identifier AS filename, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS size, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS size, projects.updated_on AS updated, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS major_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS minor_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS workflow, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS workflow_id, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS major_version, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS minor_version, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow_id, '' AS firstname, '' AS lastname, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS author, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS author, 'project' AS type, - CAST(0 AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS deleted, + CAST(0 AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS deleted, 0 AS sort #{cf_columns}}).visible if dmsf_folder_id || deleted scope.none @@ -230,15 +230,15 @@ class DmsfQuery < Query scope = DmsfFolder.select(%{ dmsf_folders.id AS id, dmsf_folders.project_id AS project_id, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS revision_id, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS revision_id, dmsf_folders.title AS title, NULL AS filename, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS size, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS size, dmsf_folders.updated_at AS updated, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS major_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS minor_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS workflow, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS workflow_id, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS major_version, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS minor_version, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow_id, users.firstname AS firstname, users.lastname AS lastname, users.id AS author, @@ -275,12 +275,12 @@ class DmsfQuery < Query dmsf_links.target_id AS revision_id, dmsf_links.name AS title, dmsf_folders.title AS filename, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS size, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS size, COALESCE(dmsf_folders.updated_at, dmsf_links.updated_at) AS updated, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS major_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS minor_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS workflow, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS workflow_id, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS major_version, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS minor_version, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow_id, users.firstname AS firstname, users.lastname AS lastname, users.id AS author, @@ -387,15 +387,15 @@ class DmsfQuery < Query scope = DmsfLink.select(%{ dmsf_links.id AS id, dmsf_links.project_id AS project_id, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS revision_id, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS revision_id, dmsf_links.name AS title, dmsf_links.external_url AS filename, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS size, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS size, dmsf_links.updated_at AS updated, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS major_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS minor_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS workflow, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:decimal)}) AS workflow_id, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS major_version, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS minor_version, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow, + CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow_id, users.firstname AS firstname, users.lastname AS lastname, users.id AS author, From e88f937f815d924c9d6bce6596801660132ceb24 Mon Sep 17 00:00:00 2001 From: "karel.picman@lbcfree.net" Date: Tue, 11 May 2021 10:42:59 +0200 Subject: [PATCH 3/3] #1249 integer type based on the type of adapter --- app/helpers/dmsf_upload_helper.rb | 1 - app/models/dmsf_query.rb | 58 ++++++++++++++++++------------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/app/helpers/dmsf_upload_helper.rb b/app/helpers/dmsf_upload_helper.rb index f11e9477..aacc8f98 100644 --- a/app/helpers/dmsf_upload_helper.rb +++ b/app/helpers/dmsf_upload_helper.rb @@ -207,7 +207,6 @@ module DmsfUploadHelper # 1 -> 1, -65 -> A def self.gui_version(version) - version = version.to_i # catch the case where version is a BigDecimal return version if version >= 0 (-version).chr end diff --git a/app/models/dmsf_query.rb b/app/models/dmsf_query.rb index 6ee9976a..46c3e912 100644 --- a/app/models/dmsf_query.rb +++ b/app/models/dmsf_query.rb @@ -189,6 +189,14 @@ class DmsfQuery < Query end private + + def get_integer_type + if Redmine::Database.mysql? + ActiveRecord::Base.connection.type_to_sql(:signed) + else + ActiveRecord::Base.connection.type_to_sql(:integer) + end + end def dmsf_projects_scope return nil unless sub_projects @@ -199,20 +207,20 @@ class DmsfQuery < Query scope = Project.select(%{ projects.id AS id, projects.id AS project_id, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS revision_id, + CAST(NULL AS #{get_integer_type}) AS revision_id, projects.name AS title, projects.identifier AS filename, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS size, + CAST(NULL AS #{get_integer_type}) AS size, projects.updated_on AS updated, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS major_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS minor_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow_id, + CAST(NULL AS #{get_integer_type}) AS major_version, + CAST(NULL AS #{get_integer_type}) AS minor_version, + CAST(NULL AS #{get_integer_type}) AS workflow, + CAST(NULL AS #{get_integer_type}) AS workflow_id, '' AS firstname, '' AS lastname, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS author, + CAST(NULL AS #{get_integer_type}) AS author, 'project' AS type, - CAST(0 AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS deleted, + CAST(0 AS #{get_integer_type}) AS deleted, 0 AS sort #{cf_columns}}).visible if dmsf_folder_id || deleted scope.none @@ -230,15 +238,15 @@ class DmsfQuery < Query scope = DmsfFolder.select(%{ dmsf_folders.id AS id, dmsf_folders.project_id AS project_id, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS revision_id, + CAST(NULL AS #{get_integer_type}) AS revision_id, dmsf_folders.title AS title, NULL AS filename, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS size, + CAST(NULL AS #{get_integer_type}) AS size, dmsf_folders.updated_at AS updated, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS major_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS minor_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow_id, + CAST(NULL AS #{get_integer_type}) AS major_version, + CAST(NULL AS #{get_integer_type}) AS minor_version, + CAST(NULL AS #{get_integer_type}) AS workflow, + CAST(NULL AS #{get_integer_type}) AS workflow_id, users.firstname AS firstname, users.lastname AS lastname, users.id AS author, @@ -275,12 +283,12 @@ class DmsfQuery < Query dmsf_links.target_id AS revision_id, dmsf_links.name AS title, dmsf_folders.title AS filename, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS size, + CAST(NULL AS #{get_integer_type}) AS size, COALESCE(dmsf_folders.updated_at, dmsf_links.updated_at) AS updated, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS major_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS minor_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow_id, + CAST(NULL AS #{get_integer_type}) AS major_version, + CAST(NULL AS #{get_integer_type}) AS minor_version, + CAST(NULL AS #{get_integer_type}) AS workflow, + CAST(NULL AS #{get_integer_type}) AS workflow_id, users.firstname AS firstname, users.lastname AS lastname, users.id AS author, @@ -387,15 +395,15 @@ class DmsfQuery < Query scope = DmsfLink.select(%{ dmsf_links.id AS id, dmsf_links.project_id AS project_id, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS revision_id, + CAST(NULL AS #{get_integer_type}) AS revision_id, dmsf_links.name AS title, dmsf_links.external_url AS filename, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS size, + CAST(NULL AS #{get_integer_type}) AS size, dmsf_links.updated_at AS updated, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS major_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS minor_version, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow, - CAST(NULL AS #{ActiveRecord::Base.connection.type_to_sql(:integer)}) AS workflow_id, + CAST(NULL AS #{get_integer_type}) AS major_version, + CAST(NULL AS #{get_integer_type}) AS minor_version, + CAST(NULL AS #{get_integer_type}) AS workflow, + CAST(NULL AS #{get_integer_type}) AS workflow_id, users.firstname AS firstname, users.lastname AS lastname, users.id AS author,