def initialize(dbname, user, auth, attr)
hash = DBI::Utils.parse_params(dbname)
if hash['dbname'].nil? and hash['database'].nil?
raise DBI::InterfaceError, "must specify database"
end
hash['options'] ||= nil
hash['tty'] ||= ''
hash['port'] = hash['port'].to_i unless hash['port'].nil?
@connection = PGconn.new(hash['host'], hash['port'], hash['options'], hash['tty'],
hash['dbname'] || hash['database'], user, auth)
@exec_method = :exec
@in_transaction = false
@attr = { 'AutoCommit' => true, 'pg_async' => false }
hash.each do |key, value|
@attr[key] = value if key =~ /^pg_./
end
@attr.merge!(attr || {})
if @attr['pg_async'].is_a?(String)
case @attr['pg_async'].downcase
when 'true'
@attr['pg_async'] = true
when 'false'
@attr['pg_async'] = false
else
raise InterfaceError, %q{'pg_async' must be 'true' or 'false'}
end
end
@attr.each { |k,v| self[k] = v}
@attr["pg_native_binding"] = true unless @attr.has_key? "pg_native_binding"
load_type_map
self['AutoCommit'] = true
rescue PGError => err
raise DBI::OperationalError.new(err.message)
end