DB::Introspector looks into database metadata and derives detailed
table level and foreign key information in a way that conforms to a
collection of common interfaces across all dbs.
The DB::Introspector::Utils::* classes provide a collection of
algorithms, which carry out relationship traversal and SQL
generation algorithms (like finding the column level and table level
mappings between two indirectly related tables and generating DDL
code). Because the DB::Introspector::Utils algorithms take advantage
of the DB::Introspector's database independent metadata classes,
these traversal algorithms can be performed on any database for
which there exists an introspector (eg DB::Introspector::Oracle and
DB::Introspector::PostgresSQL).
Should this be in DBI?
----------------------
I think it is appropriate to separate this interface from the existing DBI
module since it will allow for the expression of more arbitrary mappings
between tables and columns (like subtables and boolean simulation) which
can take into account the database being queried (eg like interpreting the
Postgres internal inheritance structures). In addition, future drivers can
be written to extract metadata from a source that can't be queried as a
regular database ( like an XML source that just contains metadata -like
hibernate mapping files ).