querybuilder 0.9.4 → 0.9.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|