Check truth of preserve_case not definedness
[dbsrgits/DBIx-Class-Schema-Loader.git] / TODO
diff --git a/TODO b/TODO
index ca3138e..6973743 100644 (file)
--- a/TODO
+++ b/TODO
+- General
+  - High Priority
+    - clean out RT queue
+    - introspect views and make proper ResultSource::View classes with defining SQL
+    - better avoidance of column and relationship accessor collisions
+    - 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
+      DBIx::Class::Schema, so that other modules (SQLT) can use it easier.  And
+      then when/if we get there, break it out as a seperate distribution with a
+      new name.
+    - support for user-defined-types as Schema deploy hooks
+    - 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
+    - option to promote non-nullable unique constraints to PK (prefer int
+      columns when more than one) (RT#51696)
+    - figure out how to represent Informix 'DATETIME YEAR TO FRACTION(5)' in a
+      way that SQLT will like
+    - support domains (aka custom data types) as a Schema deploy hook
+    - add hashref form of generate_pod to control which POD is generated
+    - add hashref form of components to control which components are added to
+      which classes
+    - check rel accessors for method conflicts
+    - add an option to add extra code to Result classes (maybe...)
+    - redo in-memory schema as an @INC coderef rather than temp files
+    - add option to filter out views
+    - support columns with names like "ro'd p/n" in MSSQL
+    - automatic preserve_case detection
+    - reduce chances of relname/colname collisions
+    - strip _no, _num, _number, _code etc. from relnames
+    - write a Manual::Intro with info on +column, inflect_singular, config_file,
+      catalyst helper, etc.
+    - add result_roles and schema_roles for use with use_moose=1
+    - generate Schema/ResultBase.pm and Schema/ResultSetBase.pm
+    - remove additional warnings skip in t/22dump.t for ActivePerl on Win32
+    - make 23dumpmore.t auto cleanup and remove dump warnings
+    - 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
 
-Reminders to myself or whoever else ever looks in here...
+- Relationships
+   - Re-scan relations/tables after initial relation setup to find
+     ->many_to_many() relations to be set up
+   - While scanning for many-to-many, scan for implied rels as well (if
+     foo->belongs_to('bar') and baz->belongs_to('bar'), does that impliy
+     foo->might_have('baz') and the reverse?)
 
-SQLite needs some heavy refactoring, the subroutines are becoming to complex to understand easily.
-MySQL needs implicit FK support, I think.
-the base/use injection stuff needs error checking/reporting
-
-The whole things needs to be refactored so that we don't pollute Schema's namespace.
-
-  - Currently, the user's schema class ISA Schema::Loader ISA Schema::Loader::VENDOR ISA Schema::Loader::Generic ISA Schema, which means all of our methods and accessors in those classes end up in the final user "Schema" class.  The current hack to minimize that is that all the names are prefixed with "_loader" to avoid clashes.
-  - Ideally, user schema class ISA Schema::Loader, and that's it.  Schema::Loader only implements the methods that we need to export to the Schema class for later user (load_from_connection, tables, moniker).  Schema::Loader::VENDOR ISA Schema::Loader::Generic, but they have a new() routine and instantiate an object which does the Loading.  Schema::Loader passes them the its own class name (the user schema class) so that they know what namespace to target the loading operations at.
-
-After all that, consider:
-   If local column is UNIQUE or PK, use has_one() for relation?
-   Re-scan relations/tables after initial relation setup to find ->many_to_many() relations to be set up?
-   Check NULLability of columns involved in the relationship, which might suggest a more optimal non-default -join-type?
-
-...
+- Backends
+  - SQLite
+    - table/column comments
+    - introspect on_update/on_delete/is_deferrable
+    - introspect view SQL
+  - MySQL
+    - table/column comments
+    - introspect on_update/on_delete/is_deferrable
+    - introspect view SQL
+    - domains?
+  - Pg
+    - introspect on_update/on_delete/is_deferrable
+    - introspect view SQL
+    - domains
+  - DB2
+    - table/column comments
+    - introspect on_update/on_delete/is_deferrable
+    - introspect view SQL
+    - domains
+  - Oracle
+    - introspect on_update/on_delete/is_deferrable
+    - introspect view SQL
+    - domains
+  - Sybase ASE
+    - table/column comments
+    - introspect on_update/on_delete/is_deferrable
+    - introspect view SQL
+    - domains
+  - MSSQL
+    - table/column comments
+    - introspect on_update/on_delete/is_deferrable
+    - introspect view SQL
+    - computed column support
+    - domains
+    - Optimization
+      - use one query for whole table instead of query-per-column in _columns_info_for
+      - use placeholders when available
+  - SQLAnywhere
+    - table/column comments
+    - introspect on_update/on_delete/is_deferrable
+    - introspect view SQL
+    - domains
+  - Firebird
+    - table/column comments
+    - introspect on_update/on_delete/is_deferrable
+    - introspect view SQL
+    - domains
+  - Informix
+    - support opaque types
+    - datetime/interval precision detection
+    - table/column comments
+    - introspect on_update/on_delete/is_deferrable
+    - introspect view SQL
+    - domains