appoxy / aws

Amazon Web Services (AWS) Ruby Gem
https://rubygems.org/gems/aws
236 stars 87 forks source link

Your Aws::SdbInterface.query_expression_from_array() not being used #115

Open pr1001 opened 12 years ago

pr1001 commented 12 years ago

I found that IN statements in WHERE clauses were not being expanded correctly. While one one hand this might be seen as an issue in right_aws (and I opened an issue with them), I see that you try to work around it in query_expression_from_array.

However, for the life of me I couldn't figure out why I was getting incorrectly serialized arrays. Copying the exact code from sdb_interface.rb into a patch fixed my problem:

class Aws::SdbInterface
  def query_expression_from_array(params) #:nodoc:
    return '' if Aws::Utils.blank?(params)
    query = params[0].to_s
    i     = 1
    query.gsub(/(\\)?(\?)/) do
      if $1 # if escaped '\?' is found - replace it by '?' without backslash
        "?"
      else # well, if no backslash precedes '?' then replace it by next param from the list
        case params[i]
        when Array
          ret = "(#{params[i].map{|p| escape(p)}.join(",")})"
        else
          ret = escape(params[i])
        end
        i   +=1
        ret
      end
    end
  end
end

This suggests to me that somehow the right_aws method is taking precendence over yours.

treeder commented 12 years ago

I don't think right_aws and aws are really compatible as aws is a fork of right_aws. You should probably just be using one or the other.

pr1001 commented 12 years ago

Oh, ok, right. That being said, I hadn't changed anything but still needed the Aws:SdbInterface code above to get it to work.

treeder commented 12 years ago

Ok, can you give me a pull request? I'll merge it, then push a new gem release.