class RtSphinx::Connection

Public Class Methods

instance() click to toggle source
# File lib/rt_sphinx/connection.rb, line 12
def self.instance
  @@instance ||= new
end
new() click to toggle source
# File lib/rt_sphinx/connection.rb, line 16
def initialize
  @pool = ConnectionPool.new(:size => 5, :timeout => 5) do
    if RUBY_PLATFORM =~ /java/
      require 'jdbc/mysql'
      Jdbc::MySQL.load_driver(:require) if Jdbc::MySQL.respond_to?(:load_driver)
      url = "jdbc:mysql://127.0.0.1:9327?characterEncoding=utf8&maxAllowedPacket=512000"
      conn = java.sql.DriverManager.getConnection(url, "", "")
    else
      require 'mysql2'
      Mysql2::Client.new(
        :host => '127.0.0.1',
        :port => 9327,
        :encoding => 'utf8'
      )
    end
  end
end

Public Instance Methods

execute_sql(sql, mode) click to toggle source
# File lib/rt_sphinx/connection.rb, line 34
def execute_sql(sql, mode)
  res = {}
  @pool.with do |connection|
    if RUBY_PLATFORM =~ /java/
      st = connection.create_statement
      res = case mode
            when 'select'
              resultset_to_hash(st.execute_query(sql))
            when 'insert'
              st.execute_update(sql)
            end
      st.close
    else
      res = connection.query(sql)
    end
  end

  res
end

Private Instance Methods

resultset_to_hash(resultset) click to toggle source
# File lib/rt_sphinx/connection.rb, line 55
def resultset_to_hash(resultset)
  meta = resultset.meta_data
  rows = []

  while resultset.next
    row = {}

    (1..meta.column_count).each do |i|
      name = meta.column_name i
      row[name]  =  case meta.column_type(i)
                    when -6, -5, 5, 4
                      # TINYINT, BIGINT, INTEGER
                      resultset.get_int(i).to_i
                    when 41
                      # Date
                      resultset.get_date(i)
                    when 92
                      # Time
                      resultset.get_time(i).to_i
                    when 93
                      # Timestamp
                      resultset.get_timestamp(i)
                    when 2, 3, 6
                      # NUMERIC, DECIMAL, FLOAT
                      case meta.scale(i)
                      when 0
                        resultset.get_long(i).to_i
                      else
                        BigDecimal.new(resultset.get_string(i).to_s)
                      end
                    when 1, -15, -9, 12
                      # CHAR, NCHAR, NVARCHAR, VARCHAR
                      resultset.get_string(i).to_s
                    else
                      resultset.get_string(i).to_s
                    end
    end

    rows << row
  end
  rows
end