querybuilder 0.9.4 → 0.9.5
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 +7 -1
- data/lib/query_builder/info.rb +1 -1
- data/lib/query_builder/processor.rb +4 -2
- data/querybuilder.gemspec +2 -2
- data/test/mock/dummy_processor.rb +2 -5
- data/test/mock/user_processor.rb +1 -4
- data/test/querybuilder/errors.yml +4 -0
- data/test/querybuilder/filters.yml +5 -1
- data/test/querybuilder_test.rb +1 -2
- data/test/test_helper.rb +5 -1
- metadata +4 -4
data/History.txt
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
-
== 0.9.
|
1
|
+
== 0.9.5
|
2
|
+
|
3
|
+
* Major enhancements
|
4
|
+
* Better quoting when connection quote uses backslash (eval removes backslash).
|
5
|
+
* Fixed a bug when paginating without a limit clause.
|
6
|
+
|
7
|
+
== 0.9.4 2010-12-02
|
2
8
|
|
3
9
|
* 1 Minor enhancement
|
4
10
|
* Should only raise QueryBuilder::Error on initialize.
|
data/lib/query_builder/info.rb
CHANGED
@@ -568,7 +568,7 @@ module QueryBuilder
|
|
568
568
|
|
569
569
|
def process_paginate(query, paginate_fld)
|
570
570
|
process(query)
|
571
|
-
raise QueryBuilder::SyntaxError.new("Invalid paginate clause
|
571
|
+
raise QueryBuilder::SyntaxError.new("Invalid paginate clause (used without limit).") unless @query.limit
|
572
572
|
context[:processing] = :paginate
|
573
573
|
fld = process(paginate_fld)
|
574
574
|
if fld && (page_size = @query.limit[/ LIMIT (\d+)/,1])
|
@@ -812,7 +812,9 @@ module QueryBuilder
|
|
812
812
|
end
|
813
813
|
|
814
814
|
def quote(arg)
|
815
|
-
|
815
|
+
# we must backslash twice because 'eval' will take one out:
|
816
|
+
# 'l\\'avion' ==> 'l\'avion' ==> ok
|
817
|
+
connection.quote(arg).gsub('\\','\\\\\\\\') # we need 8
|
816
818
|
end
|
817
819
|
|
818
820
|
def connection
|
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 = "0.9.
|
8
|
+
s.version = "0.9.5"
|
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{2011-02-11}
|
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
|
|
@@ -173,9 +173,6 @@ end
|
|
173
173
|
|
174
174
|
|
175
175
|
class DummyClass
|
176
|
-
# Mock connection
|
177
|
-
def self.connection;
|
178
|
-
def self.quote(obj)
|
179
|
-
obj.kind_of?(String) ? "'#{obj}'" : obj
|
180
|
-
end
|
176
|
+
# Mock connection
|
177
|
+
def self.connection; ActiveRecord::Base.connection; end
|
181
178
|
end
|
data/test/mock/user_processor.rb
CHANGED
@@ -14,6 +14,10 @@ offset_without_limit:
|
|
14
14
|
src: "objects in project offset 3"
|
15
15
|
res: "Invalid offset (used without limit)."
|
16
16
|
|
17
|
+
paginate_without_limit:
|
18
|
+
src: "objects in site paginate p"
|
19
|
+
res: "Invalid paginate clause (used without limit)."
|
20
|
+
|
17
21
|
legacy_many_clauses:
|
18
22
|
src: letters or foo
|
19
23
|
res: "Unknown relation 'foo'."
|
@@ -159,4 +159,8 @@ filter_in_single_literal:
|
|
159
159
|
filter_not_in_literal:
|
160
160
|
src: "objects where id not in (1, 2 , 3,4) in site"
|
161
161
|
sxp: '[:query, [:scope, [:filter, [:relation, "objects"], [:not, [:in, [:field, "id"], [:integer, "1"], [:integer, "2"], [:integer, "3"], [:integer, "4"]]]], "site"]]'
|
162
|
-
sql: "SELECT objects.* FROM objects WHERE objects.id NOT IN (1,2,3,4)"
|
162
|
+
sql: "SELECT objects.* FROM objects WHERE objects.id NOT IN (1,2,3,4)"
|
163
|
+
|
164
|
+
filter_quote_string:
|
165
|
+
src: "objects where name = \"l'avion\""
|
166
|
+
sql: "SELECT objects.* FROM objects WHERE objects.name = 'l''avion' AND objects.parent_id = 123"
|
data/test/querybuilder_test.rb
CHANGED
@@ -16,7 +16,6 @@ class DummyQueryBuilder < Test::Unit::TestCase
|
|
16
16
|
def id; 123; end
|
17
17
|
def parent_id; 333; end
|
18
18
|
def project_id; 9999; end
|
19
|
-
def connection; self; end
|
20
19
|
|
21
20
|
context 'A query processor' do
|
22
21
|
subject do
|
@@ -75,7 +74,7 @@ class DummyQueryBuilder < Test::Unit::TestCase
|
|
75
74
|
should 'respond to select_keys' do
|
76
75
|
assert_equal %w{a number c}, subject.select_keys
|
77
76
|
end
|
78
|
-
|
77
|
+
|
79
78
|
should 'not include star keys' do
|
80
79
|
assert !subject.select_keys.include?('*')
|
81
80
|
end
|
data/test/test_helper.rb
CHANGED
@@ -10,4 +10,8 @@ require 'yamltest'
|
|
10
10
|
|
11
11
|
require 'mock/dummy_processor'
|
12
12
|
require 'mock/user_processor'
|
13
|
-
require 'mock/dummy'
|
13
|
+
require 'mock/dummy'
|
14
|
+
|
15
|
+
require 'active_record'
|
16
|
+
# in order to use connection for quoting and such
|
17
|
+
ActiveRecord::Base.establish_connection(:adapter=>'sqlite3', :database=>':memory:')
|
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: 49
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
9
|
+
- 5
|
10
|
+
version: 0.9.5
|
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: 2011-02-11 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|