Sha256: a3af24f0be496159051c1e490083d7bbfbdd67a6da0d451b6418571de1cd4e30

Contents?: true

Size: 1.18 KB

Versions: 2

Compression:

Stored size: 1.18 KB

Contents

require 'mysql2'

class Mysql2::Client

  def xquery(sql, *args)
    options = if args.size > 0 and args[-1].is_a?(Hash)
                args.pop
              else
                {}
              end
    if args.size < 1
      query(sql, options)
    else
      query(Mysql2::Client.pseudo_bind(sql, args), options)
    end
  end

  def self.pseudo_bind(sql, values)
    sql = sql.dup

    placeholders = []
    search_pos = 0
    while pos = sql.index('?', search_pos)
      placeholders.push(pos)
      search_pos = pos + 1
    end
    values = values.flatten(1) if placeholders.length == values.flatten(1).length
    raise ArgumentError, "mismatch between placeholders number and values arguments" if placeholders.length != values.length

    while pos = placeholders.pop()
      rawvalue = values.pop()
      if rawvalue.nil?
        sql[pos] = 'NULL'
      elsif rawvalue.respond_to?(:strftime)
        sql[pos] = "'" + rawvalue.strftime('%Y-%m-%d %H:%M:%S') + "'"
      elsif rawvalue.is_a?(Array)
        sql[pos] = rawvalue.map{|v| "'" + Mysql2::Client.escape(v.to_s) + "'" }.join(",")
      else
        sql[pos] = "'" + Mysql2::Client.escape(rawvalue.to_s) + "'"
      end
    end
    sql
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mysql2-cs-bind-0.0.6 lib/mysql2-cs-bind.rb
mysql2-cs-bind-0.0.5 lib/mysql2-cs-bind.rb