querybuilder 1.2.1 → 1.2.2
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 +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
|