querybuilder 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/lib/query_builder/info.rb +1 -1
- data/lib/query_builder/processor.rb +10 -1
- data/querybuilder.gemspec +2 -2
- data/test/mock/dummy_processor.rb +3 -0
- data/test/querybuilder/basic.yml +5 -0
- data/test/querybuilder/filters.yml +5 -0
- data/test/querybuilder_test.rb +4 -0
- metadata +4 -4
data/History.txt
CHANGED
data/lib/query_builder/info.rb
CHANGED
@@ -202,6 +202,15 @@ module QueryBuilder
|
|
202
202
|
def default(key)
|
203
203
|
@default[key] || self.class.defaults[key]
|
204
204
|
end
|
205
|
+
|
206
|
+
# The passed :default scope is only applied on last context.
|
207
|
+
def default_scope(context)
|
208
|
+
if context[:last]
|
209
|
+
default(:scope)
|
210
|
+
else
|
211
|
+
self.class.defaults[:scope]
|
212
|
+
end
|
213
|
+
end
|
205
214
|
|
206
215
|
def process(sxp)
|
207
216
|
return sxp if sxp.kind_of?(String)
|
@@ -800,7 +809,7 @@ module QueryBuilder
|
|
800
809
|
context[:scope_type] = nil
|
801
810
|
# post scope
|
802
811
|
@query.add_table(use_name, table_name, avoid_alias)
|
803
|
-
apply_scope(context[:scope] ||
|
812
|
+
apply_scope(context[:scope] || default_scope(context))
|
804
813
|
else
|
805
814
|
# scope already applied / skip
|
806
815
|
@query.add_table(use_name, table_name, avoid_alias)
|
data/querybuilder.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{querybuilder}
|
8
|
-
s.version = "1.1.
|
8
|
+
s.version = "1.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Gaspard Bucher"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2012-06-27}
|
13
13
|
s.description = %q{QueryBuilder is an interpreter for the "pseudo sql" language. This language
|
14
14
|
can be used for two purposes:
|
15
15
|
|
data/test/querybuilder/basic.yml
CHANGED
@@ -100,3 +100,8 @@ function_with_multiple_args:
|
|
100
100
|
src: "objects where name.coalesce(id,'foo') = 'foo'"
|
101
101
|
sxp: '[:query, [:filter, [:relation, "objects"], [:"=", [:function, [:field, "name"], [:method, "coalesce"], [:field, "id"], [:string, "foo"]], [:string, "foo"]]]]'
|
102
102
|
res: "[%Q{SELECT objects.* FROM objects WHERE COALESCE(objects.name,objects.id,'foo') = 'foo' AND objects.parent_id = ?}, id]"
|
103
|
+
|
104
|
+
function_in_order:
|
105
|
+
src: "objects order by event_at.coalesce(0)"
|
106
|
+
sxp: '[:query, [:order, [:relation, "objects"], [:function, [:field, "event_at"], [:method, "coalesce"], [:integer, "0"]]]]'
|
107
|
+
res: "[%Q{SELECT objects.* FROM objects WHERE objects.parent_id = ? ORDER BY COALESCE(objects.event_at,0)}, id]"
|
@@ -138,6 +138,11 @@ functions:
|
|
138
138
|
sxp: '[:query, [:filter, [:relation, "objects"], [:"=", [:function, [:field, "event_at"], [:method, "year"]], [:function, [:field, "REF_DATE"], [:method, "year"]]]]]'
|
139
139
|
res: "[%Q{SELECT objects.* FROM objects WHERE strftime('%Y',objects.event_at) = strftime('%Y',now()) AND objects.parent_id = ?}, id]"
|
140
140
|
|
141
|
+
nested_functions:
|
142
|
+
src: "objects where event_at.year.min = 2006 group by project_id"
|
143
|
+
sxp: '[:query, [:group, [:filter, [:relation, "objects"], [:"=", [:function, [:function, [:field, "event_at"], [:method, "year"]], [:method, "min"]], [:integer, "2006"]]], [:field, "project_id"]]]'
|
144
|
+
res: "[%Q{SELECT objects.* FROM objects WHERE MIN(strftime('%Y',objects.event_at)) = 2006 AND objects.parent_id = ? GROUP BY objects.project_id}, id]"
|
145
|
+
|
141
146
|
filter_empty_literal:
|
142
147
|
src: "objects where \"\" = ''"
|
143
148
|
sxp: '[:query, [:filter, [:relation, "objects"], [:"=", [:dstring, ""], [:string, ""]]]]'
|
data/test/querybuilder_test.rb
CHANGED
@@ -37,6 +37,10 @@ class DummyQueryBuilder < Test::Unit::TestCase
|
|
37
37
|
assert_equal '[%Q{SELECT objects.* FROM objects WHERE objects.project_id = ?}, project_id]', subject.new('objects', :default => {:scope => 'project'}).query.to_s
|
38
38
|
assert_equal '[%Q{SELECT objects.* FROM objects WHERE objects.parent_id = ?}, id]', subject.new('objects').query.to_s
|
39
39
|
end
|
40
|
+
|
41
|
+
should 'not overwrite defaults before last' do
|
42
|
+
assert_equal '%Q{SELECT objects.* FROM objects,objects AS ob1 WHERE objects.parent_id = ob1.id GROUP BY objects.id}', subject.new('objects from objects', :default => {:scope => 'site'}).query.to_s
|
43
|
+
end
|
40
44
|
end
|
41
45
|
|
42
46
|
context 'Including QueryBuilder' do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: querybuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 1.1.
|
9
|
+
- 1
|
10
|
+
version: 1.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Gaspard Bucher
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-06-27 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|