Merge branch 'topic/better-multi-schema' into master
Dagfinn Ilmari Mannsåker [Sun, 20 Oct 2013 14:25:06 +0000 (15:25 +0100)]
1  2 
Changes
TODO
lib/DBIx/Class/Schema/Loader/DBI/Pg.pm

diff --combined Changes
+++ b/Changes
@@@ -1,8 -1,17 +1,19 @@@
  Revision history for Perl extension DBIx::Class::Schema::Loader
  
++        - Restore support for PostgreSQL 8.3 (RT#87291)
++
+ 0.07036_02 2013-09-25
+         - Skip many_to_many bridges involving might_have relationships
+ 0.07036_01 2013-08-11
          - Fix typos in POD and comments (RT#87644)
          - Don't ship MYMETA.* files (RT#87713)
-         - Restore support for PostgreSQL 8.3 (RT#87291)
+         - Fix many_to_many bridges involving might_have relationships
+         - Allow specifying custom attributes for many_to_many bridges
+         - Allow specifying the separator when joining database, schema
+           and table names to form a moniker
+         - Allow using all the moniker parts in hashref moniker_map
+         - Allow matching all the moniker parts in constraint/exclude
  
  0.07036  2013-07-08
          - Fix stray comma in Pg on_delete/on_update => CASCADE (RT#84706)
diff --combined TODO
--- 1/TODO
--- 2/TODO
+++ b/TODO
@@@ -6,7 -6,6 +6,6 @@@
      - encode loader options in Schema.pm
      - introspect on_update/on_delete/is_deferrable
    - Low Priority
-     - support multiple/all schemas, instead of just one
      - support pk/uk/fk info on views, possibly (materialized views?)
      - remove deprecated ResultSetManager stuff, rewrite using current features
      - Refactor RelBuilder so that it doesn't require a live mostly-built
@@@ -17,6 -16,7 +16,6 @@@
      - generate a schema accessor which stores which SQLT type it was loaded from
      - add a settable 'on-behalf-of' version tag (for catalyst model)
      - inject a table2moniker function into the schema
 -    - support coderef for relationship_attrs
      - common tests for table/column comments
      - optimize queries
      - remove extra select for _filter_tables
@@@ -45,6 -45,7 +44,6 @@@
      - generate POD for schema class with class list
      - remove implicit rels from common tests so all tests work on MySQL
      - server link support for Oracle and MSSQL
 -    - add -I support to dbicdump
  
  - Relationships
     - While scanning for many-to-many, scan for implied rels as well (if
  - Backends
    - SQLite
      - table/column comments
      - introspect view SQL
    - MySQL
      - table/column comments
      - introspect view SQL
      - domains?
    - Pg
 -    - introspect on_update/on_delete/is_deferrable
      - introspect view SQL
      - domains
    - DB2
      - table/column comments
      - introspect view SQL
      - domains
    - Oracle
 -    - introspect on_update/on_delete/is_deferrable
      - introspect view SQL
      - domains
    - Sybase ASE
@@@ -76,6 -82,7 +75,6 @@@
      - domains
    - MSSQL
      - table/column comments
 -    - introspect on_update/on_delete/is_deferrable
      - introspect view SQL
      - computed column support
      - domains
@@@ -84,6 -91,7 +83,6 @@@
        - use placeholders when available
    - SQLAnywhere
      - table/column comments
 -    - introspect on_update/on_delete/is_deferrable
      - introspect view SQL
      - domains
    - Firebird
@@@ -5,7 -5,7 +5,7 @@@ use warnings
  use base 'DBIx::Class::Schema::Loader::DBI::Component::QuotedDefault';
  use mro 'c3';
  
- our $VERSION = '0.07036';
+ our $VERSION = '0.07036_02';
  
  =head1 NAME
  
@@@ -52,27 -52,25 +52,27 @@@ sub _table_fk_info 
      my ($self, $table) = @_;
  
      my $sth = $self->dbh->prepare_cached(<<"EOF");
 -select q.constr_name, q.to_schema, q.to_table, from_cols.attname from_col, to_cols.attname to_col,
 -       q.on_delete, q.on_update, q.is_deferrable
 -from (select constr.conname constr_name, to_ns.nspname to_schema, to_class.relname to_table,
 -             unnest(constr.conkey) from_colnum, unnest(constr.confkey) to_colnum,
 -             constr.confdeltype on_delete, constr.confupdtype on_update,
 -             constr.condeferrable is_deferrable,
 -             constr.conrelid conrelid, constr.confrelid confrelid
 -      from pg_constraint constr
 -      join pg_namespace from_ns on constr.connamespace = from_ns.oid
 -      join pg_class from_class on constr.conrelid = from_class.oid and from_class.relnamespace = from_ns.oid
 -      join pg_class to_class on constr.confrelid = to_class.oid
 -      join pg_namespace to_ns on to_class.relnamespace = to_ns.oid
 +      select constr.conname, to_ns.nspname, to_class.relname, from_col.attname, to_col.attname,
 +             constr.confdeltype, constr.confupdtype, constr.condeferrable
 +      from pg_catalog.pg_constraint constr
 +      join pg_catalog.pg_namespace from_ns on constr.connamespace = from_ns.oid
 +      join pg_catalog.pg_class from_class on constr.conrelid = from_class.oid and from_class.relnamespace = from_ns.oid
 +      join pg_catalog.pg_class to_class on constr.confrelid = to_class.oid
 +      join pg_catalog.pg_namespace to_ns on to_class.relnamespace = to_ns.oid
 +      -- can't do unnest() until 8.4, so join against a series table instead
 +      join pg_catalog.generate_series(1, pg_catalog.current_setting('max_index_keys')::integer) colnum(i)
 +           on colnum.i <= pg_catalog.array_upper(constr.conkey,1)
 +      join pg_catalog.pg_attribute to_col
 +           on to_col.attrelid = constr.confrelid
 +           and to_col.attnum = constr.confkey[colnum.i]
 +      join pg_catalog.pg_attribute from_col
 +           on from_col.attrelid = constr.conrelid
 +           and from_col.attnum = constr.conkey[colnum.i]
        where from_ns.nspname = ?
          and from_class.relname = ?
          and from_class.relkind = 'r'
          and constr.contype = 'f'
 -) q
 -join pg_attribute from_cols on from_cols.attrelid = q.conrelid and from_cols.attnum = q.from_colnum
 -join pg_attribute to_cols on to_cols.attrelid = q.confrelid and to_cols.attnum = q.to_colnum;
 +      order by constr.conname, colnum.i
  EOF
  
      $sth->execute($table->schema, $table->name);
@@@ -169,9 -167,9 +169,9 @@@ sub _table_comment 
      return $table_comment if $table_comment;
  
      ($table_comment) = $self->dbh->selectrow_array(<<'EOF', {}, $table->name, $table->schema);
 -SELECT obj_description(oid)
 -FROM pg_class
 -WHERE relname=? AND relnamespace=(SELECT oid FROM pg_namespace WHERE nspname=?)
 +SELECT pg_catalog.obj_description(oid)
 +FROM pg_catalog.pg_class
 +WHERE relname=? AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname=?)
  EOF
  
      return $table_comment
@@@ -188,11 -186,11 +188,11 @@@ sub _column_comment 
  
      my ($table_oid) = $self->dbh->selectrow_array(<<'EOF', {}, $table->name, $table->schema);
  SELECT oid
 -FROM pg_class
 -WHERE relname=? AND relnamespace=(SELECT oid FROM pg_namespace WHERE nspname=?)
 +FROM pg_catalog.pg_class
 +WHERE relname=? AND relnamespace=(SELECT oid FROM pg_catalog.pg_namespace WHERE nspname=?)
  EOF
  
 -    return $self->dbh->selectrow_array('SELECT col_description(?,?)', {}, $table_oid, $column_number);
 +    return $self->dbh->selectrow_array('SELECT pg_catalog.col_description(?,?)', {}, $table_oid, $column_number);
  }
  
  # Make sure data_type's that don't need it don't have a 'size' column_info, and