rdo 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -277,6 +277,16 @@ This method returns nil if there are no rows, so if you need to distinguish
277
277
  between NULL and no rows, you will need to check the result contents the
278
278
  longer way around.
279
279
 
280
+ ### Disambiguating bind markers from operators
281
+
282
+ Some drivers use '?' for operators. In order to avoid ambiguity, escape such
283
+ occurrences with a backslash. You **do not** need to escape inside of strings
284
+ and comments (i.e. wherever a bind marker could not naturally occur).
285
+
286
+ ``` ruby
287
+ conn.execute(%q{SELECT 'a=>42,b=>7'::hstore \? ?}, "a")
288
+ ```
289
+
280
290
  ### Debugging
281
291
 
282
292
  A Logger instance (with an interface like that in Ruby stdlib) may be passed
@@ -95,6 +95,13 @@ static VALUE rdo_driver_interpolate(VALUE self, VALUE stmt, VALUE params) {
95
95
  // this loop is intentionally kept procedural (for performance)
96
96
  for (; *s; ++s, ++b) {
97
97
  switch (*s) {
98
+ case '\\':
99
+ if (!insquote && !indquote && !inmlcmt && !inslcmt && *(s + 1) == '?')
100
+ ++s;
101
+
102
+ *b = *s;
103
+ break;
104
+
98
105
  case '?':
99
106
  if (insquote || indquote || inmlcmt || inslcmt) {
100
107
  *b = *s;
@@ -6,5 +6,5 @@
6
6
  ##
7
7
 
8
8
  module RDO
9
- VERSION = "0.1.7"
9
+ VERSION = "0.1.8"
10
10
  end
@@ -84,6 +84,16 @@ describe RDO::Driver do
84
84
  end
85
85
  end
86
86
 
87
+ context "with escaped marks" do
88
+ it "does not treat them as bind markers" do
89
+ driver.send(
90
+ :interpolate,
91
+ %q{SELECT 'a=>42,b=>7'::hstore \? ?},
92
+ ["a"]
93
+ ).should == "SELECT 'a=>42,b=>7'::hstore ? 'a'"
94
+ end
95
+ end
96
+
87
97
  context "with marks placed inside single quotes" do
88
98
  it "ignores the quoted marks" do
89
99
  driver.send(
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-24 00:00:00.000000000 Z
12
+ date: 2012-10-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec