@@ -123,6 +123,7 class Query < ActiveRecord::Base | |||
|
123 | 123 | :date_past => [ "=", ">=", "<=", "><", ">t-", "<t-", "t-", "t", "w" ], |
|
124 | 124 | :string => [ "=", "~", "!", "!~" ], |
|
125 | 125 | :text => [ "~", "!~" ], |
|
126 | # TODO: should be :numeric | |
|
126 | 127 | :integer => [ "=", ">=", "<=", "><", "!*", "*" ] } |
|
127 | 128 | |
|
128 | 129 | cattr_reader :operators_by_filter_type |
@@ -633,9 +634,9 class Query < ActiveRecord::Base | |||
|
633 | 634 | sql = date_clause(db_table, db_field, (Date.parse(value.first) rescue nil), nil) |
|
634 | 635 | else |
|
635 | 636 | if is_custom_filter |
|
636 |
sql = "CAST(#{db_table}.#{db_field} AS decimal(60,3)) >= #{value.first.to_ |
|
|
637 | sql = "CAST(#{db_table}.#{db_field} AS decimal(60,3)) >= #{value.first.to_f}" | |
|
637 | 638 | else |
|
638 |
sql = "#{db_table}.#{db_field} >= #{value.first.to_ |
|
|
639 | sql = "#{db_table}.#{db_field} >= #{value.first.to_f}" | |
|
639 | 640 | end |
|
640 | 641 | end |
|
641 | 642 | when "<=" |
@@ -643,9 +644,9 class Query < ActiveRecord::Base | |||
|
643 | 644 | sql = date_clause(db_table, db_field, nil, (Date.parse(value.first) rescue nil)) |
|
644 | 645 | else |
|
645 | 646 | if is_custom_filter |
|
646 |
sql = "CAST(#{db_table}.#{db_field} AS decimal(60,3)) <= #{value.first.to_ |
|
|
647 | sql = "CAST(#{db_table}.#{db_field} AS decimal(60,3)) <= #{value.first.to_f}" | |
|
647 | 648 | else |
|
648 |
sql = "#{db_table}.#{db_field} <= #{value.first.to_ |
|
|
649 | sql = "#{db_table}.#{db_field} <= #{value.first.to_f}" | |
|
649 | 650 | end |
|
650 | 651 | end |
|
651 | 652 | when "><" |
@@ -653,9 +654,9 class Query < ActiveRecord::Base | |||
|
653 | 654 | sql = date_clause(db_table, db_field, (Date.parse(value[0]) rescue nil), (Date.parse(value[1]) rescue nil)) |
|
654 | 655 | else |
|
655 | 656 | if is_custom_filter |
|
656 |
sql = "CAST(#{db_table}.#{db_field} AS decimal(60,3)) BETWEEN #{value[0].to_ |
|
|
657 | sql = "CAST(#{db_table}.#{db_field} AS decimal(60,3)) BETWEEN #{value[0].to_f} AND #{value[1].to_f}" | |
|
657 | 658 | else |
|
658 |
sql = "#{db_table}.#{db_field} BETWEEN #{value[0].to_ |
|
|
659 | sql = "#{db_table}.#{db_field} BETWEEN #{value[0].to_f} AND #{value[1].to_f}" | |
|
659 | 660 | end |
|
660 | 661 | end |
|
661 | 662 | when "o" |
@@ -101,10 +101,27 class QueryTest < ActiveSupport::TestCase | |||
|
101 | 101 | find_issues_with_query(query) |
|
102 | 102 | end |
|
103 | 103 | |
|
104 | def test_operator_is_on_float | |
|
105 | Issue.update_all("estimated_hours = 171.2", "id=2") | |
|
106 | ||
|
107 | query = Query.new(:name => '_') | |
|
108 | query.add_filter('estimated_hours', '=', ['171.20']) | |
|
109 | issues = find_issues_with_query(query) | |
|
110 | assert_equal 1, issues.size | |
|
111 | assert_equal 2, issues.first.id | |
|
112 | end | |
|
113 | ||
|
104 | 114 | def test_operator_greater_than |
|
105 | 115 | query = Query.new(:project => Project.find(1), :name => '_') |
|
106 | 116 | query.add_filter('done_ratio', '>=', ['40']) |
|
107 | assert query.statement.include?("#{Issue.table_name}.done_ratio >= 40") | |
|
117 | assert query.statement.include?("#{Issue.table_name}.done_ratio >= 40.0") | |
|
118 | find_issues_with_query(query) | |
|
119 | end | |
|
120 | ||
|
121 | def test_operator_greater_than_a_float | |
|
122 | query = Query.new(:project => Project.find(1), :name => '_') | |
|
123 | query.add_filter('estimated_hours', '>=', ['40.5']) | |
|
124 | assert query.statement.include?("#{Issue.table_name}.estimated_hours >= 40.5") | |
|
108 | 125 | find_issues_with_query(query) |
|
109 | 126 | end |
|
110 | 127 | |
@@ -112,14 +129,14 class QueryTest < ActiveSupport::TestCase | |||
|
112 | 129 | f = IssueCustomField.create!(:name => 'filter', :field_format => 'int', :is_filter => true, :is_for_all => true) |
|
113 | 130 | query = Query.new(:project => Project.find(1), :name => '_') |
|
114 | 131 | query.add_filter("cf_#{f.id}", '>=', ['40']) |
|
115 | assert query.statement.include?("CAST(custom_values.value AS decimal(60,3)) >= 40") | |
|
132 | assert query.statement.include?("CAST(custom_values.value AS decimal(60,3)) >= 40.0") | |
|
116 | 133 | find_issues_with_query(query) |
|
117 | 134 | end |
|
118 | 135 | |
|
119 | 136 | def test_operator_lesser_than |
|
120 | 137 | query = Query.new(:project => Project.find(1), :name => '_') |
|
121 | 138 | query.add_filter('done_ratio', '<=', ['30']) |
|
122 | assert query.statement.include?("#{Issue.table_name}.done_ratio <= 30") | |
|
139 | assert query.statement.include?("#{Issue.table_name}.done_ratio <= 30.0") | |
|
123 | 140 | find_issues_with_query(query) |
|
124 | 141 | end |
|
125 | 142 | |
@@ -127,14 +144,14 class QueryTest < ActiveSupport::TestCase | |||
|
127 | 144 | f = IssueCustomField.create!(:name => 'filter', :field_format => 'int', :is_filter => true, :is_for_all => true) |
|
128 | 145 | query = Query.new(:project => Project.find(1), :name => '_') |
|
129 | 146 | query.add_filter("cf_#{f.id}", '<=', ['30']) |
|
130 | assert query.statement.include?("CAST(custom_values.value AS decimal(60,3)) <= 30") | |
|
147 | assert query.statement.include?("CAST(custom_values.value AS decimal(60,3)) <= 30.0") | |
|
131 | 148 | find_issues_with_query(query) |
|
132 | 149 | end |
|
133 | 150 | |
|
134 | 151 | def test_operator_between |
|
135 | 152 | query = Query.new(:project => Project.find(1), :name => '_') |
|
136 | 153 | query.add_filter('done_ratio', '><', ['30', '40']) |
|
137 | assert_include "#{Issue.table_name}.done_ratio BETWEEN 30 AND 40", query.statement | |
|
154 | assert_include "#{Issue.table_name}.done_ratio BETWEEN 30.0 AND 40.0", query.statement | |
|
138 | 155 | find_issues_with_query(query) |
|
139 | 156 | end |
|
140 | 157 | |
@@ -142,7 +159,7 class QueryTest < ActiveSupport::TestCase | |||
|
142 | 159 | f = IssueCustomField.create!(:name => 'filter', :field_format => 'int', :is_filter => true, :is_for_all => true) |
|
143 | 160 | query = Query.new(:project => Project.find(1), :name => '_') |
|
144 | 161 | query.add_filter("cf_#{f.id}", '><', ['30', '40']) |
|
145 | assert_include "CAST(custom_values.value AS decimal(60,3)) BETWEEN 30 AND 40", query.statement | |
|
162 | assert_include "CAST(custom_values.value AS decimal(60,3)) BETWEEN 30.0 AND 40.0", query.statement | |
|
146 | 163 | find_issues_with_query(query) |
|
147 | 164 | end |
|
148 | 165 |
General Comments 0
You need to be logged in to leave comments.
Login now