# File lib/flexirecord.rb, line 1219
1219:     def initialize(options)
1220:       super()
1221:       options.each do |key, value|
1222:         case key
1223:         when :engine
1224:           @engine = value.to_sym
1225:         when :host
1226:           @host = value.to_s.dup.freeze if value
1227:         when :port
1228:           @port = value.to_i
1229:         when :options
1230:           @options = options.to_s.dup.freeze if value
1231:         when :db
1232:           @dbname = value.to_s.dup.freeze if value
1233:         when :user
1234:           @login = value.to_s.dup.freeze if value
1235:         when :pass
1236:           @passwd = value.to_s.dup.freeze if value
1237:         when :data_types
1238:           @data_types = value.to_hash.dup.freeze if value
1239:         else
1240:           raise ArgumentError, "Unknown option '#{key}'."
1241:         end
1242:       end
1243:       raise ArgumentError, "No engine selected." if @engine.nil?
1244:       raise ArgumentError, "Engine '#{@engine}' not supported." unless @engine == :postgresql
1245:       unless @data_types
1246:         @data_types = {}
1247:         options[:data_types] = {}
1248:         connection = nil
1249:         begin
1250:           connection = FlexiRecord::Connection.new(options)
1251:           connection.query('SELECT "oid", "typname" FROM "pg_type" WHERE typtype=$', 'b').each do |type_record|
1252:           @data_types[type_record.oid.to_i] = type_record.typname.to_s.freeze
1253:           end
1254:         ensure
1255:           connection.close if connection
1256:         end
1257:         options[:data_types] = @data_types.freeze
1258:       end
1259:       @backend_connection = PGconn.new(@host, @port, @options, nil, @dbname, @login, @passwd)
1260:       @transaction_stacklevel = 0
1261:       @isolation_level = nil
1262:       nil
1263:     end