class Baza::Driver::MysqlJava

Attributes

conn[R]
conns[R]

Public Class Methods

args() click to toggle source
# File lib/baza/driver/mysql_java.rb, line 23
def self.args
  [{
    label: "Host",
    name: "host"
  }, {
    label: "Port",
    name: "port"
  }, {
    label: "Username",
    name: "user"
  }, {
    label: "Password",
    name: "pass"
  }, {
    label: "Database",
    name: "db"
  }, {
    label: "Encoding",
    name: "encoding"
  }]
end
from_object(args) click to toggle source

Helper to enable automatic registering of database using Baza::Db.from_object

# File lib/baza/driver/mysql_java.rb, line 9
def self.from_object(args)
  if args[:object].class.name == "Java::ComMysqlJdbc::JDBC4Connection"
    return {
      type: :success,
      args: {
        type: :mysql_java,
        conn: args[:object]
      }
    }
  end

  nil
end
new(db) click to toggle source
Calls superclass method Baza::JdbcDriver::new
# File lib/baza/driver/mysql_java.rb, line 45
def initialize(db)
  super

  @opts = @db.opts
  @encoding = @opts[:encoding] || "utf8"

  if @db.opts.key?(:port)
    @port = @db.opts[:port].to_i
  else
    @port = 3306
  end

  @java_rs_data = {}
  reconnect
end

Public Instance Methods

close() click to toggle source

Closes the connection threadsafe.

# File lib/baza/driver/mysql_java.rb, line 78
def close
  @mutex.synchronize { @conn.close }
end
destroy() click to toggle source

Destroyes the connection.

# File lib/baza/driver/mysql_java.rb, line 83
def destroy
  @conn = nil
  @db = nil
  @mutex = nil
  @encoding = nil
  @query_args = nil
  @port = nil
end
insert_multi(tablename, arr_hashes, args = {}) click to toggle source

Inserts multiple rows in a table. Can return the inserted IDs if asked to in arguments.

# File lib/baza/driver/mysql_java.rb, line 93
def insert_multi(tablename, arr_hashes, args = {})
  sql = "INSERT INTO `#{tablename}` ("

  first = true
  if args && args[:keys]
    keys = args[:keys]
  elsif arr_hashes.first.is_a?(Hash)
    keys = arr_hashes.first.keys
  else
    raise "Could not figure out keys."
  end

  keys.each do |col_name|
    sql << "," unless first
    first = false if first
    sql << quote_column(col_name)
  end

  sql << ") VALUES ("

  first = true
  arr_hashes.each do |hash|
    if first
      first = false
    else
      sql << "),("
    end

    first_key = true
    if hash.is_a?(Array)
      hash.each do |val|
        if first_key
          first_key = false
        else
          sql << ","
        end

        sql << @db.quote_value(val)
      end
    else
      hash.each do |_key, val|
        if first_key
          first_key = false
        else
          sql << ","
        end

        sql << @db.quote_value(val)
      end
    end
  end

  sql << ")"

  return sql if args && args[:return_sql]

  query_no_result_set(sql)

  if args && args[:return_id]
    first_id = last_id
    raise "Invalid ID: #{first_id}" if first_id.to_i <= 0
    ids = [first_id]
    1.upto(arr_hashes.length - 1) do |count|
      ids << first_id + count
    end

    ids_length = ids.length
    arr_hashes_length = arr_hashes.length
    raise "Invalid length (#{ids_length}, #{arr_hashes_length})." if ids_length != arr_hashes_length

    return ids
  else
    return nil
  end
end
reconnect() click to toggle source

Respawns the connection to the MySQL-database.

# File lib/baza/driver/mysql_java.rb, line 62
def reconnect
  @mutex.synchronize do
    if @db.opts[:conn]
      @jdbc_loaded = true
      @conn = @db.opts.fetch(:conn)
    else
      com.mysql.jdbc.Driver
      @conn = java.sql::DriverManager.getConnection(jdbc_connect_command)
    end

    query_no_result_set("SET SQL_MODE = ''")
    query_no_result_set("SET NAMES '#{esc(@encoding)}'") if @encoding
  end
end
transaction() { |db| ... } click to toggle source
# File lib/baza/driver/mysql_java.rb, line 169
def transaction
  query_no_result_set("START TRANSACTION")

  begin
    yield @db
    query_no_result_set("COMMIT")
  rescue
    query_no_result_set("ROLLBACK")
    raise
  end
end

Private Instance Methods

jdbc_connect_command() click to toggle source
# File lib/baza/driver/mysql_java.rb, line 183
def jdbc_connect_command
  conn_options = {
    "populateInsertRowWithDefaultValues" => true,
    "zeroDateTimeBehavior" => "round",
    "holdResultsOpenOverStatementClose" => true
  }

  conn_options["user"] = @db.opts.fetch(:user) if @db.opts[:user]
  conn_options["password"] = @db.opts.fetch(:pass) if db.opts[:pass]
  conn_options["characterEncoding"] = @encoding if @encoding

  conn_command = "jdbc:mysql://#{@db.opts.fetch(:host)}:#{@port}/#{@db.opts.fetch(:db)}?"
  first = true
  conn_options.each do |key, value|
    conn_command << "&" unless first
    first = false if first
    conn_command << "#{key}=#{value}"
  end

  conn_command
end