349: def load_type_map
350: @type_map = Hash.new
351:
352: res = _exec("SELECT oid, typname, typelem FROM pg_type WHERE typtype = 'b'")
353:
354: res.each do |row|
355: rowtype = parse_type_name(row["typname"])
356: @type_map[row["oid"].to_i] =
357: {
358: "type_name" => row["typname"],
359: "dbi_type" =>
360: if rowtype
361: rowtype
362: elsif row["typname"] =~ /^_/ and row["typelem"].to_i > 0 then
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374: DBI::DBD::Pg::Type::Array.new(row["typelem"].to_i)
375: else
376: DBI::Type::Varchar
377: end
378: }
379: end
380:
381: @type_map[705] ||= DBI::Type::Varchar
382: @type_map[1114] ||= DBI::Type::Timestamp
383:
384:
385: @type_map.each_key do |key|
386: if @type_map[key]["dbi_type"].class == DBI::DBD::Pg::Type::Array
387: oid = @type_map[key]["dbi_type"].base_type
388: if @type_map[oid]
389: @type_map[key]["dbi_type"] = DBI::DBD::Pg::Type::Array.new(@type_map[oid]["dbi_type"])
390: else
391:
392: @type_map[key] = DBI::DBD::Pg::Type::Array.new(DBI::Type::Varchar)
393: end
394: end
395: end
396: end