querybuilder 1.2.1 → 1.2.2
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 +12 -2
- data/lib/querybuilder_ext.c +1679 -1580
- data/lib/querybuilder_rb.rb +1576 -1478
- data/lib/querybuilder_syntax.rl +2 -2
- data/querybuilder.gemspec +2 -2
- data/test/querybuilder/basic.yml +15 -0
- data/test/querybuilder/errors.yml +10 -1
- data/test/querybuilder_test.rb +2 -0
- metadata +4 -4
data/lib/querybuilder_syntax.rl
CHANGED
@@ -40,9 +40,9 @@
|
|
40
40
|
|
41
41
|
scope = ws+ 'in' ws var %scope;
|
42
42
|
|
43
|
-
offset = ws+ 'offset' %offset
|
43
|
+
offset = ws+ 'offset' %offset literal;
|
44
44
|
paginate = ws+ 'paginate' %paginate var %param;
|
45
|
-
limit = ws+ 'limit' %limit
|
45
|
+
limit = ws+ 'limit' %limit literal (ws* ',' literal)?;
|
46
46
|
direction= ws+ ('asc' | 'desc' | 'ASC' | 'DESC') $str_a %direction;
|
47
47
|
order = ws+ 'order' ws+ 'by' %order field (direction)? (ws* ',' field (direction)?)*;
|
48
48
|
group = ws+ 'group' ws+ 'by' %group field (ws* ',' field)*;
|
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.2.
|
8
|
+
s.version = "1.2.2"
|
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{2013-
|
12
|
+
s.date = %q{2013-05-07}
|
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
@@ -53,6 +53,11 @@ limit_with_order:
|
|
53
53
|
src: "objects in project order by name desc limit 10"
|
54
54
|
res: "[%Q{SELECT objects.* FROM objects WHERE objects.project_id = ? ORDER BY objects.name DESC LIMIT 10}, project_id]"
|
55
55
|
|
56
|
+
limit_dyn:
|
57
|
+
src: "objects in project limit #{num || 10}"
|
58
|
+
sxp: '[:query, [:limit, [:scope, [:relation, "objects"], "project"], [:rubyless, "num || 10"]]]'
|
59
|
+
res: "[%Q{SELECT objects.* FROM objects WHERE objects.project_id = ? LIMIT ?}, project_id, (num or 10)]"
|
60
|
+
|
56
61
|
offset_in_limit:
|
57
62
|
src: "objects in project limit 3,2"
|
58
63
|
res: "[%Q{SELECT objects.* FROM objects WHERE objects.project_id = ? LIMIT 2 OFFSET 3}, project_id]"
|
@@ -62,6 +67,16 @@ offset:
|
|
62
67
|
sxp: '[:query, [:offset, [:limit, [:scope, [:relation, "objects"], "project"], [:integer, "2"]], [:integer, "3"]]]'
|
63
68
|
res: "[%Q{SELECT objects.* FROM objects WHERE objects.project_id = ? LIMIT 2 OFFSET 3}, project_id]"
|
64
69
|
|
70
|
+
offset_dyn:
|
71
|
+
src: "objects in project limit 2 offset #{num || 0}"
|
72
|
+
sxp: '[:query, [:offset, [:limit, [:scope, [:relation, "objects"], "project"], [:integer, "2"]], [:rubyless, "num || 0"]]]'
|
73
|
+
res: "[%Q{SELECT objects.* FROM objects WHERE objects.project_id = ? LIMIT 2 OFFSET ?}, project_id, (num or 0)]"
|
74
|
+
|
75
|
+
limit_offset_dyn:
|
76
|
+
src: "objects in project limit #{num || 10}, #{num || 0}"
|
77
|
+
sxp: '[:query, [:limit, [:scope, [:relation, "objects"], "project"], [:rubyless, "num || 10"], [:rubyless, "num || 0"]]]'
|
78
|
+
res: "[%Q{SELECT objects.* FROM objects WHERE objects.project_id = ? LIMIT ? OFFSET ?}, project_id, (num or 0), (num or 10)]"
|
79
|
+
|
65
80
|
paginate:
|
66
81
|
src: "objects in site limit 2 paginate p"
|
67
82
|
sxp: '[:query, [:paginate, [:limit, [:scope, [:relation, "objects"], "site"], [:integer, "2"]], [:param, "p"]]]'
|
@@ -49,4 +49,13 @@ bad_select:
|
|
49
49
|
|
50
50
|
bad_having:
|
51
51
|
src: "letters select name as fname having foo = 'foo'"
|
52
|
-
res: "Unknown field 'foo'."
|
52
|
+
res: "Unknown field 'foo'."
|
53
|
+
|
54
|
+
offset_dyn_nil:
|
55
|
+
src: "objects in project limit 2 offset #{num}"
|
56
|
+
sxp: '[:query, [:offset, [:limit, [:scope, [:relation, "objects"], "project"], [:integer, "2"]], [:rubyless, "num"]]]'
|
57
|
+
res: "Invalid offset (value could be nil)"
|
58
|
+
|
59
|
+
paginate_dyn_limit:
|
60
|
+
src: "objects in project limit #{num} paginate p"
|
61
|
+
res: "Limit value must be a fixed number to use pagination."
|
data/test/querybuilder_test.rb
CHANGED
@@ -9,11 +9,13 @@ class DummyQueryBuilder < Test::Unit::TestCase
|
|
9
9
|
include RubyLess::SafeClass
|
10
10
|
safe_method :params => {:class => StringHash, :method => 'get_params'}
|
11
11
|
safe_method :id => Number, :parent_id => Number, :project_id => Number
|
12
|
+
safe_method :num => {:class => Number, :nil => true}
|
12
13
|
|
13
14
|
safe_method_for StringHash, [:[], Symbol] => String
|
14
15
|
safe_method_for StringHash, [:[], String] => String
|
15
16
|
|
16
17
|
def id; 123; end
|
18
|
+
def num; 2; end
|
17
19
|
def parent_id; 333; end
|
18
20
|
def project_id; 9999; end
|
19
21
|
|
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: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 1.2.
|
9
|
+
- 2
|
10
|
+
version: 1.2.2
|
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: 2013-
|
18
|
+
date: 2013-05-07 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|