querybuilder 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|