summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2009-11-28 10:29:48 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2009-11-28 10:29:48 +0000
commit99b52c87967752b661662a8c85dd674042e13218 (patch)
tree0c5dbfc1079445c0b79bf20cb257790fdb5a8594 /app
parent915bbcfaff8a5db56bc60b90fb690b7f4be3b555 (diff)
downloadredmine-99b52c87967752b661662a8c85dd674042e13218.tar.gz
redmine-99b52c87967752b661662a8c85dd674042e13218.zip
Rescue invalid query statement error with an error message.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3104 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r--app/controllers/issues_controller.rb10
-rw-r--r--app/models/query.rb13
2 files changed, 23 insertions, 0 deletions
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 63b174f89..bbd0f801c 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -26,6 +26,8 @@ class IssuesController < ApplicationController
before_filter :find_optional_project, :only => [:index, :changes, :gantt, :calendar]
accept_key_auth :index, :show, :changes
+ rescue_from Query::StatementInvalid, :with => :query_statement_invalid
+
helper :journals
helper :projects
include ProjectsHelper
@@ -507,4 +509,12 @@ private
end
end
end
+
+ # Rescues an invalid query statement. Just in case...
+ def query_statement_invalid(exception)
+ logger.error "Query::StatementInvalid: #{exception.message}" if logger
+ session.delete(:query)
+ sort_clear
+ render_error "An error occurred while executing the query and has been logged. Please report this error to your Redmine administrator."
+ end
end
diff --git a/app/models/query.rb b/app/models/query.rb
index d15f7c3c7..2e0ddc489 100644
--- a/app/models/query.rb
+++ b/app/models/query.rb
@@ -61,6 +61,9 @@ class QueryCustomFieldColumn < QueryColumn
end
class Query < ActiveRecord::Base
+ class StatementInvalid < ::ActiveRecord::StatementInvalid
+ end
+
belongs_to :project
belongs_to :user
serialize :filters
@@ -392,6 +395,8 @@ class Query < ActiveRecord::Base
# Returns the issue count
def issue_count
Issue.count(:include => [:status, :project], :conditions => statement)
+ rescue ::ActiveRecord::StatementInvalid => e
+ raise StatementInvalid.new(e.message)
end
# Returns the issue count by group or nil if query is not grouped
@@ -406,6 +411,8 @@ class Query < ActiveRecord::Base
else
nil
end
+ rescue ::ActiveRecord::StatementInvalid => e
+ raise StatementInvalid.new(e.message)
end
# Returns the issues
@@ -419,6 +426,8 @@ class Query < ActiveRecord::Base
:order => order_option,
:limit => options[:limit],
:offset => options[:offset]
+ rescue ::ActiveRecord::StatementInvalid => e
+ raise StatementInvalid.new(e.message)
end
# Returns the journals
@@ -429,6 +438,8 @@ class Query < ActiveRecord::Base
:order => options[:order],
:limit => options[:limit],
:offset => options[:offset]
+ rescue ::ActiveRecord::StatementInvalid => e
+ raise StatementInvalid.new(e.message)
end
# Returns the versions
@@ -436,6 +447,8 @@ class Query < ActiveRecord::Base
def versions(options={})
Version.find :all, :include => :project,
:conditions => Query.merge_conditions(project_statement, options[:conditions])
+ rescue ::ActiveRecord::StatementInvalid => e
+ raise StatementInvalid.new(e.message)
end
private