[Bast-commits] r7269 - in DBIx-Class/0.08/branches/sybase: . lib/DBIx/Class lib/DBIx/Class/Manual lib/DBIx/Class/ResultSource lib/DBIx/Class/ResultSourceProxy lib/DBIx/Class/SQLAHacks lib/DBIx/Class/Storage lib/DBIx/Class/Storage/DBI lib/DBIx/Class/Storage/DBI/Oracle lib/DBIx/Class/Storage/DBI/Sybase lib/SQL/Translator/Parser/DBIx t t/lib/DBICTest/Schema

ribasushi at dev.catalyst.perl.org ribasushi at dev.catalyst.perl.org
Sat Aug 8 22:41:14 GMT 2009


Author: ribasushi
Date: 2009-08-08 22:41:12 +0000 (Sat, 08 Aug 2009)
New Revision: 7269

Added:
   DBIx-Class/0.08/branches/sybase/t/92storage_ping_count.t
Modified:
   DBIx-Class/0.08/branches/sybase/
   DBIx-Class/0.08/branches/sybase/Changes
   DBIx-Class/0.08/branches/sybase/Makefile.PL
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Manual/Cookbook.pod
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Ordered.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/PK.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/ResultSource.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/ResultSource/View.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/ResultSourceProxy/Table.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Row.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/SQLAHacks.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/SQLAHacks/MySQL.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Schema.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/MSSQL.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/ODBC.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Oracle.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Pg.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Sybase.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Sybase/Base.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Sybase/Microsoft_SQL_Server.pm
   DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/mysql.pm
   DBIx-Class/0.08/branches/sybase/lib/SQL/Translator/Parser/DBIx/Class.pm
   DBIx-Class/0.08/branches/sybase/t/19quotes.t
   DBIx-Class/0.08/branches/sybase/t/19quotes_newstyle.t
   DBIx-Class/0.08/branches/sybase/t/746mssql.t
   DBIx-Class/0.08/branches/sybase/t/74mssql.t
   DBIx-Class/0.08/branches/sybase/t/76select.t
   DBIx-Class/0.08/branches/sybase/t/87ordered.t
   DBIx-Class/0.08/branches/sybase/t/93storage_replication.t
   DBIx-Class/0.08/branches/sybase/t/99dbic_sqlt_parser.t
   DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/CD.pm
   DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/CustomSql.pm
   DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/Year1999CDs.pm
   DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/Year2000CDs.pm
Log:
 r7219 at Thesaurus (orig r7216):  ribasushi | 2009-08-05 10:38:14 +0200
 Silence a TODO test
 r7220 at Thesaurus (orig r7217):  caelum | 2009-08-05 10:46:11 +0200
 minor Changes update
 r7230 at Thesaurus (orig r7227):  castaway | 2009-08-05 14:57:52 +0200
 Minty's conversion of cookbook "arbitrary sql" to use ResultSource::View, plus some examples in ::View itself.
 Some style tweaks of mine
 
 r7231 at Thesaurus (orig r7228):  ribasushi | 2009-08-05 15:41:28 +0200
 Dynamically load necessary table classes
 r7236 at Thesaurus (orig r7233):  caelum | 2009-08-05 19:49:51 +0200
 fix rounding issues in mssql money tests
 r7237 at Thesaurus (orig r7234):  caelum | 2009-08-05 20:09:03 +0200
 better money value comparison in tests
 r7239 at Thesaurus (orig r7236):  frew | 2009-08-05 20:53:32 +0200
 whitespace jfklds;ajfklds;a
 r7240 at Thesaurus (orig r7237):  frew | 2009-08-05 20:54:41 +0200
 Fix testing bug.  Windows only.
 r7256 at Thesaurus (orig r7253):  ribasushi | 2009-08-07 11:19:35 +0200
  r7232 at Thesaurus (orig r7229):  jnapiorkowski | 2009-08-05 16:56:32 +0200
  added test for the new default force pool behavior in PK->discard_changes and cleaned up the related tests a bit to give more meaningful info
  r7233 at Thesaurus (orig r7230):  jnapiorkowski | 2009-08-05 16:57:45 +0200
  opps typo in test status messages
  r7234 at Thesaurus (orig r7231):  jnapiorkowski | 2009-08-05 17:03:46 +0200
  added the default attrs to solve the failing test recently commited
  r7235 at Thesaurus (orig r7232):  jnapiorkowski | 2009-08-05 17:58:44 +0200
  added test to make sure you can override the default attributes to discard_changes
  r7241 at Thesaurus (orig r7238):  jnapiorkowski | 2009-08-05 22:00:58 +0200
  added replication as an optional feature to make installing it easier
  r7253 at Thesaurus (orig r7250):  ribasushi | 2009-08-07 11:06:41 +0200
  Streamline makefile dep handling
  r7254 at Thesaurus (orig r7251):  ribasushi | 2009-08-07 11:07:14 +0200
  Switch to done_testing
  r7255 at Thesaurus (orig r7252):  ribasushi | 2009-08-07 11:19:13 +0200
  Move discard_changes code to Row.pm, better docs
 
 r7257 at Thesaurus (orig r7254):  ribasushi | 2009-08-07 11:21:35 +0200
 Remove merged branch
 r7259 at Thesaurus (orig r7256):  ribasushi | 2009-08-07 14:16:13 +0200
 Fix bogus POD
 r7261 at Thesaurus (orig r7258):  ribasushi | 2009-08-07 17:22:58 +0200
 per mst: no optional deps
 r7262 at Thesaurus (orig r7259):  ribasushi | 2009-08-08 17:02:39 +0200
 Stop using discard_changes() in Ordered (if I knew it will be *that* complex I would not touch it)
 r7265 at Thesaurus (orig r7262):  ribasushi | 2009-08-08 17:49:19 +0200
  r7032 at Thesaurus (orig r7031):  caelum | 2009-07-11 11:28:52 +0200
  new branch to reduce connected() calls
  r7033 at Thesaurus (orig r7032):  caelum | 2009-07-11 13:07:41 +0200
  added failing test
  r7034 at Thesaurus (orig r7033):  caelum | 2009-07-11 14:36:53 +0200
  minor optimization
  r7048 at Thesaurus (orig r7047):  caelum | 2009-07-14 15:09:47 +0200
  substantially reduced ping count, dynamic cursors support for mssql through odbc
  r7050 at Thesaurus (orig r7049):  caelum | 2009-07-14 16:06:39 +0200
  a couple more options for odbc/mssql
  r7052 at Thesaurus (orig r7051):  caelum | 2009-07-15 00:14:09 +0200
  unfuck ensure_connected for odbc/mssql
  r7055 at Thesaurus (orig r7054):  caelum | 2009-07-15 21:10:27 +0200
  rename _scope_identity to _identity for odbc/mssql
  r7056 at Thesaurus (orig r7055):  caelum | 2009-07-16 00:41:45 +0200
  add IC::DT tests for odbc/mssql
  r7069 at Thesaurus (orig r7068):  caelum | 2009-07-17 11:47:31 +0200
  don't run connection actions if ->_rebless does not connect
  r7108 at Thesaurus (orig r7105):  caelum | 2009-07-24 07:26:13 +0200
  moving test to another branch
  r7110 at Thesaurus (orig r7107):  caelum | 2009-07-24 07:52:33 +0200
  revert odbc/mssql code to trunk and move it to another branch
  r7111 at Thesaurus (orig r7108):  caelum | 2009-07-24 08:13:35 +0200
  revert t/746mssql.t to trunk and move to another branch
  r7224 at Thesaurus (orig r7221):  caelum | 2009-08-05 11:48:04 +0200
  update branch after pull
  r7225 at Thesaurus (orig r7222):  ribasushi | 2009-08-05 12:09:07 +0200
  Rename last_dbh and turn it into a public method
  r7226 at Thesaurus (orig r7223):  ribasushi | 2009-08-05 12:12:20 +0200
  Whoopsie - more renames
  r7227 at Thesaurus (orig r7224):  ribasushi | 2009-08-05 12:32:09 +0200
  Changes and a deploy() fix
  r7228 at Thesaurus (orig r7225):  ribasushi | 2009-08-05 12:36:01 +0200
  We do not count pings during deploy - they are expected
  r7229 at Thesaurus (orig r7226):  ribasushi | 2009-08-05 12:49:06 +0200
  Clarify autocommit default
  r7238 at Thesaurus (orig r7235):  caelum | 2009-08-05 20:39:47 +0200
  fix up txn_begin and the ping_count test
  r7263 at Thesaurus (orig r7260):  ribasushi | 2009-08-08 17:40:19 +0200
  A more straightforward txn_begin fix, some more test fixes
 
 r7270 at Thesaurus (orig r7267):  ribasushi | 2009-08-09 00:34:31 +0200
  r6822 at Thesaurus (orig r6821):  caelum | 2009-06-28 14:38:12 +0200
  branch
  r6825 at Thesaurus (orig r6824):  caelum | 2009-06-28 14:40:37 +0200
  ->table(\"table")
  r6827 at Thesaurus (orig r6826):  caelum | 2009-06-28 14:55:06 +0200
  revert
  r6829 at Thesaurus (orig r6828):  caelum | 2009-06-28 15:57:40 +0200
   r5742 at hlagh (orig r6819):  ribasushi | 2009-06-28 04:00:03 -0700
   The prefetch+group_by is a complex problem - branch
  
  r6834 at Thesaurus (orig r6833):  caelum | 2009-06-28 23:24:47 +0200
  ->table(\"foo") now works
  r6835 at Thesaurus (orig r6834):  caelum | 2009-06-29 03:54:31 +0200
  another test
  r6849 at Thesaurus (orig r6848):  caelum | 2009-06-29 21:39:26 +0200
  separated table ref test out, changed CDTableRef to a view with less rels
  r6852 at Thesaurus (orig r6851):  caelum | 2009-06-29 22:56:45 +0200
  changed CD to ->table(\"cd")
  r6853 at Thesaurus (orig r6852):  caelum | 2009-06-29 23:13:48 +0200
  fix t/80unique.t
  r6857 at Thesaurus (orig r6856):  caelum | 2009-06-29 23:45:19 +0200
  branch pushed, removing
  r6858 at Thesaurus (orig r6857):  caelum | 2009-06-29 23:46:54 +0200
  removing debug statement
  r6860 at Thesaurus (orig r6859):  ribasushi | 2009-06-30 00:03:21 +0200
  Minor fixes
  r6861 at Thesaurus (orig r6860):  ribasushi | 2009-06-30 00:25:27 +0200
  This is sloppy, but sqlt is sloppy too. All tests pass now, all we really need is to intercept name() set-calls, and use a virtual view (the only legit setter is the new() call in ResultSourceProxy::Table
  r6867 at Thesaurus (orig r6866):  caelum | 2009-06-30 03:34:02 +0200
  forgot to use Scalar::Util ()
  r7007 at Thesaurus (orig r7006):  caelum | 2009-07-09 07:37:22 +0200
   r5766 at hlagh (orig r6843):  abraxxa | 2009-06-29 02:02:17 -0700
   fixed typo in test
   
   r5779 at hlagh (orig r6847):  ribasushi | 2009-06-29 10:09:00 -0700
   Minor Ordered optimization (don't use count)
   r5787 at hlagh (orig r6855):  caelum | 2009-06-29 14:42:11 -0700
    r5451 at hlagh (orig r6605):  caelum | 2009-06-10 09:23:44 -0700
    new branch to implement on_connect_call
    r5484 at hlagh (orig r6633):  caelum | 2009-06-11 11:03:10 -0700
    on_connect_call implementation and set_datetime_format support for Oracle
    r5492 at hlagh (orig r6641):  caelum | 2009-06-11 16:39:28 -0700
    connect_call_set_datetime_format for Oracle, I have no idea why this didn't get committed before...
    r5504 at hlagh (orig r6655):  caelum | 2009-06-12 17:28:06 -0700
    finished up on_connect_call stuff
    r5507 at hlagh (orig r6658):  caelum | 2009-06-13 04:03:36 -0700
    fixup _setup_connect_do, other minor cleanups
    r5508 at hlagh (orig r6659):  caelum | 2009-06-13 04:35:33 -0700
    make the on_(dis)?connect_do accessors returnn the original structure
    r5509 at hlagh (orig r6660):  caelum | 2009-06-13 08:31:52 -0700
    allow undef for _setup_connect_do
    r5522 at hlagh (orig r6679):  caelum | 2009-06-14 09:56:40 -0700
    rename connect_do store
    r5621 at hlagh (orig r6769):  caelum | 2009-06-23 07:38:33 -0700
    minor doc update
    r5628 at hlagh (orig r6777):  caelum | 2009-06-23 16:36:12 -0700
    properly test nanosecond precision with oracle and datetime_setup
    r5669 at hlagh (orig r6784):  caelum | 2009-06-24 10:49:25 -0700
    IC::DT does support timestamp with timezone
    r5768 at hlagh (orig r6846):  caelum | 2009-06-29 08:20:32 -0700
    remove DateTime from 73oracle.t
    r5781 at hlagh (orig r6849):  caelum | 2009-06-29 13:07:43 -0700
    remove the _store stuff for on_connect_do
    r5785 at hlagh (orig r6853):  ribasushi | 2009-06-29 14:38:30 -0700
    Some beautification
   
   r5802 at hlagh (orig r6870):  ribasushi | 2009-06-30 01:09:03 -0700
   Cleanup dependency handling a bit
   r5806 at hlagh (orig r6874):  ribasushi | 2009-06-30 03:39:06 -0700
   Allow broken resultsource-class-derived objects to still work
   r5807 at hlagh (orig r6875):  ribasushi | 2009-06-30 03:40:46 -0700
   clarify
   r5835 at hlagh (orig r6877):  ash | 2009-06-30 04:48:13 -0700
   Update POD on Dynamic sub-classing
   
   r5837 at hlagh (orig r6882):  ribasushi | 2009-06-30 08:36:38 -0700
    r6815 at Thesaurus (orig r6814):  ribasushi | 2009-06-28 10:32:42 +0200
    Branch to explore double joins on search_related
    r6816 at Thesaurus (orig r6815):  ribasushi | 2009-06-28 10:34:16 +0200
    Thetest case that started it all
    r6817 at Thesaurus (orig r6816):  ribasushi | 2009-06-28 10:35:11 +0200
    The proposed fix (do not add an extra join if it is already present in the topmost join)
    r6818 at Thesaurus (orig r6817):  ribasushi | 2009-06-28 11:04:26 +0200
    Minor omission
    r6819 at Thesaurus (orig r6818):  ribasushi | 2009-06-28 11:07:33 +0200
    Adjust a couple of tests for new behavior (thus all of this might be backwards incompatible to the point of being useless):
    The counts in t/90join_torture.t are now 5*3, not 5*3*3, as a second join is not induced by search_related
    The raw sql scan in t/prefetch/standard.t is just silly, won't even try to understand it
    Just to maintain the TreeLike folding, I add a 3rd children join which was inserted by search_related before the code changes
   
   r5843 at hlagh (orig r6888):  ribasushi | 2009-06-30 10:36:11 -0700
   Todoify test for now
   r5844 at hlagh (orig r6889):  ribasushi | 2009-06-30 10:37:05 -0700
   Todoify test for now (2)
   r5846 at hlagh (orig r6891):  ribasushi | 2009-06-30 10:52:31 -0700
   Todoify test for now (3)
   r5850 at hlagh (orig r6902):  ribasushi | 2009-06-30 23:46:12 -0700
   Fixed deadlock test
   r5851 at hlagh (orig r6903):  ribasushi | 2009-07-01 03:22:00 -0700
   Clarify exception text
   r5854 at hlagh (orig r6906):  ribasushi | 2009-07-01 04:23:46 -0700
    r6821 at Thesaurus (orig r6820):  ribasushi | 2009-06-28 13:09:11 +0200
    Branch for prefetch+group play
    r6823 at Thesaurus (orig r6822):  ribasushi | 2009-06-28 14:38:36 +0200
    Normalize group_by
    r6824 at Thesaurus (orig r6823):  ribasushi | 2009-06-28 14:39:54 +0200
    Proper prefetch+group test
    r6826 at Thesaurus (orig r6825):  ribasushi | 2009-06-28 14:42:48 +0200
    Whoops
    r6828 at Thesaurus (orig r6827):  ribasushi | 2009-06-28 15:06:57 +0200
    Lose the literal sql bits - castaway is right it's silly to support those
    r6833 at Thesaurus (orig r6832):  ribasushi | 2009-06-28 22:38:43 +0200
    Rogue comments
    r6837 at Thesaurus (orig r6836):  ribasushi | 2009-06-29 09:44:25 +0200
    A couple of test fixes
    r6838 at Thesaurus (orig r6837):  ribasushi | 2009-06-29 09:46:13 +0200
    Support for -select/-as in SQLAHacks field selection
    r6839 at Thesaurus (orig r6838):  ribasushi | 2009-06-29 09:49:53 +0200
    This is tested elsewhere
    r6840 at Thesaurus (orig r6839):  ribasushi | 2009-06-29 09:50:43 +0200
    This is tested elsewhere (2)
    r6841 at Thesaurus (orig r6840):  ribasushi | 2009-06-29 10:07:09 +0200
    Test cleanups
    r6842 at Thesaurus (orig r6841):  ribasushi | 2009-06-29 10:11:13 +0200
    Most of the grouped prefetch solution
    r6843 at Thesaurus (orig r6842):  ribasushi | 2009-06-29 10:14:45 +0200
    clearer
    r6845 at Thesaurus (orig r6844):  ribasushi | 2009-06-29 12:05:37 +0200
    And score! (all works)
    r6882 at Thesaurus (orig r6881):  ribasushi | 2009-06-30 16:23:06 +0200
    rs->get_column now properly recognizes prefetch and collapses if at all possible
    r6886 at Thesaurus (orig r6885):  ribasushi | 2009-06-30 17:39:58 +0200
    Whoops
   
   r5857 at hlagh (orig r6909):  ribasushi | 2009-07-01 04:27:15 -0700
   Optimize set_column on uninserted objects
   r5867 at hlagh (orig r6920):  caelum | 2009-07-01 08:40:32 -0700
    r5859 at hlagh (orig r6912):  caelum | 2009-07-01 06:21:30 -0700
    new connected() for dbd::sybase users
    r5860 at hlagh (orig r6913):  caelum | 2009-07-01 06:25:46 -0700
    add a couple of dbd::sybase reconnection tests
    r5861 at hlagh (orig r6914):  caelum | 2009-07-01 06:35:07 -0700
    better connection test
    r5862 at hlagh (orig r6915):  caelum | 2009-07-01 06:45:05 -0700
    use dbh->do for connected instead of prepare_cached
    r5863 at hlagh (orig r6916):  ribasushi | 2009-07-01 06:55:21 -0700
    Segfault
    r5864 at hlagh (orig r6917):  caelum | 2009-07-01 07:03:22 -0700
    use ->do instead of ->prepare_cached in oracle's connected() too
    r5865 at hlagh (orig r6918):  caelum | 2009-07-01 08:20:52 -0700
    fix segfault with old DBD::Sybase
    r5866 at hlagh (orig r6919):  caelum | 2009-07-01 08:39:18 -0700
    move connection tests into _ping()
   
   r5873 at hlagh (orig r6923):  ijw | 2009-07-01 10:34:32 -0700
   Added a test for a resultset to related-resultset join for 0 related records
   r5874 at hlagh (orig r6927):  ijw | 2009-07-01 11:04:16 -0700
   Additional tests on prefetch - illustrates the bug with left-join has_many (NULL row returned) and the one that results from the trivial fix (prefetch gives no artist)
   r5876 at hlagh (orig r6931):  ribasushi | 2009-07-01 23:08:33 -0700
   Another candidate for somethingawful.com (fix left join-ed count)
   r5877 at hlagh (orig r6933):  ribasushi | 2009-07-02 00:04:13 -0700
   Changelog
   r5878 at hlagh (orig r6934):  ribasushi | 2009-07-02 02:23:48 -0700
   cleanup
   r5879 at hlagh (orig r6935):  ijw | 2009-07-02 03:41:01 -0700
   Check fetched rows == count for related resultsets
   r5880 at hlagh (orig r6936):  ijw | 2009-07-02 03:43:47 -0700
   Confirm prefetch doesn't affect main row fetch, and main row fetch works with and without counting
   r5881 at hlagh (orig r6937):  ribasushi | 2009-07-02 03:52:51 -0700
   More fail (fix is known but needs work)
   r5882 at hlagh (orig r6938):  ribasushi | 2009-07-02 04:07:22 -0700
   And more fail
   r5883 at hlagh (orig r6939):  ribasushi | 2009-07-02 04:16:46 -0700
   These tests are in prefetch/count.t
   r5884 at hlagh (orig r6940):  ribasushi | 2009-07-02 04:38:31 -0700
   cleanup
   r5885 at hlagh (orig r6941):  ribasushi | 2009-07-02 04:38:49 -0700
   Solve more prefetch inflation crap
   r5886 at hlagh (orig r6942):  ribasushi | 2009-07-02 04:47:41 -0700
   Make the code readable
   r5887 at hlagh (orig r6943):  ribasushi | 2009-07-02 06:52:35 -0700
   Everything works, just need to fix join-path chaining over search_related (to guard against obscure db quirks)
   r5889 at hlagh (orig r6945):  caelum | 2009-07-02 12:06:32 -0700
   add sybase reconnect test
   r5891 at hlagh (orig r6947):  ribasushi | 2009-07-02 13:20:21 -0700
   Last part of the join handling puzzle
   r5894 at hlagh (orig r6950):  ribasushi | 2009-07-02 15:14:50 -0700
    r6360 at Thesaurus (orig r6359):  arcanez | 2009-05-21 20:18:52 +0200
    branch to work on prefetch/select
    r6361 at Thesaurus (orig r6360):  arcanez | 2009-05-21 20:32:46 +0200
    failing test
    r6373 at Thesaurus (orig r6372):  ribasushi | 2009-05-22 11:07:26 +0200
    Simplify unresolvable test by arcanez
    r6905 at Thesaurus (orig r6904):  ribasushi | 2009-07-01 12:54:03 +0200
    Extend test
    r6950 at Thesaurus (orig r6949):  ribasushi | 2009-07-03 00:14:09 +0200
    Apparent fix - simply delay the in_storage flagging of the main object until all prefetched objects are inflated. The rest of the changes are just cosmetics, preparing for the collapse_result rewrite
   
   r5896 at hlagh (orig r6952):  ribasushi | 2009-07-02 15:17:22 -0700
   Changes
   r5909 at hlagh (orig r6964):  ribasushi | 2009-07-03 04:19:27 -0700
   Add set_ansi_mode on_connect_call for mysql
   Also switch to _do_query instead of plain dbh->do (shows up in the trace)
   r5910 at hlagh (orig r6965):  ribasushi | 2009-07-03 04:37:06 -0700
   Capitalize mysql commands
   r5911 at hlagh (orig r6966):  ribasushi | 2009-07-03 06:07:49 -0700
   Double an existing might_have test as has_one
   r5912 at hlagh (orig r6967):  ribasushi | 2009-07-03 07:36:32 -0700
   Extra test to demonstrate has_one working, and a POD clarification of multicreate
   r5917 at hlagh (orig r6972):  ribasushi | 2009-07-03 11:20:42 -0700
    r6554 at Thesaurus (orig r6553):  frew | 2009-06-09 00:06:42 +0200
    branch for mssql top issues
    r6572 at Thesaurus (orig r6571):  frew | 2009-06-09 23:18:46 +0200
    more tests for SQL Server!
    r6573 at Thesaurus (orig r6572):  frew | 2009-06-09 23:49:10 +0200
    Added AmbiguousGlob.pm for silly servers like mssql and mysql.  See docs for more info
    r6574 at Thesaurus (orig r6573):  frew | 2009-06-09 23:55:22 +0200
    fix plan
    r6602 at Thesaurus (orig r6601):  frew | 2009-06-10 17:03:30 +0200
    more failing tests
    r6608 at Thesaurus (orig r6607):  frew | 2009-06-10 20:05:53 +0200
    don't use eval!
    r6610 at Thesaurus (orig r6609):  frew | 2009-06-10 20:07:49 +0200
    beginning of DWIM for IDENTITY_INSERT
    r6628 at Thesaurus (orig r6627):  frew | 2009-06-11 18:13:02 +0200
    still busted :-(
    r6631 at Thesaurus (orig r6630):  frew | 2009-06-11 19:39:00 +0200
    general function to go from column names and ident to result source
    r6632 at Thesaurus (orig r6631):  frew | 2009-06-11 19:40:11 +0200
    Use new _resolve_column_sources method and begin insert_bulk method
    r6635 at Thesaurus (orig r6634):  frew | 2009-06-11 20:12:38 +0200
    updated _resolve_column_source to _resolve_column_info as per ribasushi's suggestion
    r6650 at Thesaurus (orig r6649):  frew | 2009-06-12 17:13:32 +0200
    Now I just need to check if the actual values are set...
    r6651 at Thesaurus (orig r6650):  frew | 2009-06-12 17:26:53 +0200
    Insert Identity works!
    r6652 at Thesaurus (orig r6651):  frew | 2009-06-12 17:34:13 +0200
    silly warns.
    r6684 at Thesaurus (orig r6683):  frew | 2009-06-15 16:49:00 +0200
    failing test
    r6686 at Thesaurus (orig r6685):  ribasushi | 2009-06-15 18:10:26 +0200
    make all resolved attrs visible to sqla
    r6698 at Thesaurus (orig r6697):  ribasushi | 2009-06-17 02:31:37 +0200
    Half way working stuff, needs a LOT of tweaking still
    r6729 at Thesaurus (orig r6728):  ribasushi | 2009-06-19 19:49:27 +0200
    Merge badness
    r6730 at Thesaurus (orig r6729):  ribasushi | 2009-06-19 19:49:40 +0200
    fix eol
    r6731 at Thesaurus (orig r6730):  ribasushi | 2009-06-19 19:55:47 +0200
    augment inheritance
    r6735 at Thesaurus (orig r6734):  ribasushi | 2009-06-20 10:34:42 +0200
    Maybe I've nailed it
    r6746 at Thesaurus (orig r6745):  ribasushi | 2009-06-20 23:53:55 +0200
    Test and merge fixes
    r6747 at Thesaurus (orig r6746):  ribasushi | 2009-06-21 00:01:09 +0200
    Really fix tests
    r6748 at Thesaurus (orig r6747):  ribasushi | 2009-06-21 00:01:54 +0200
    Really fix tests
    r6749 at Thesaurus (orig r6748):  ribasushi | 2009-06-21 00:18:33 +0200
    Now really final
    r6750 at Thesaurus (orig r6749):  ribasushi | 2009-06-21 00:22:23 +0200
    whoops
    r6751 at Thesaurus (orig r6750):  ribasushi | 2009-06-21 00:42:18 +0200
    That should be all
    r6752 at Thesaurus (orig r6751):  ribasushi | 2009-06-21 08:54:00 +0200
    Make sure quoting works
    r6755 at Thesaurus (orig r6754):  ribasushi | 2009-06-21 15:21:23 +0200
    Groundwork for sanification of the toplimit test
    r6863 at Thesaurus (orig r6862):  ribasushi | 2009-06-30 01:13:49 +0200
    Make sure storage classes use c3, just like the rest of dbic (tested on 5.8 as well)
    r6869 at Thesaurus (orig r6868):  ribasushi | 2009-06-30 09:53:27 +0200
    Some fixes after review
    r6874 at Thesaurus (orig r6873):  ribasushi | 2009-06-30 11:54:34 +0200
    Fix borked next invocation
    r6896 at Thesaurus (orig r6895):  frew | 2009-06-30 21:38:26 +0200
    silly misspells and trailing whitespace
    r6955 at Thesaurus (orig r6954):  ribasushi | 2009-07-03 01:21:28 +0200
    Some hack consolidation
    r6962 at Thesaurus (orig r6961):  ribasushi | 2009-07-03 12:06:57 +0200
    Fix some mssql shortcommings when confronted with the new subequeried prefetch sql
    r6963 at Thesaurus (orig r6962):  ribasushi | 2009-07-03 12:47:57 +0200
    Ask for newer DBD::Pg in author mode, suggest the newer version otherwise (proper array support). Make test more resilient as well
    r6964 at Thesaurus (orig r6963):  ribasushi | 2009-07-03 12:49:16 +0200
    Switch to C3 mro throughout the ::Storage hierarchy (DBIx::Class brings in MRO::Compat, and all ::Storage's are based on it, tested on 5.8
    r6969 at Thesaurus (orig r6968):  ribasushi | 2009-07-03 19:54:04 +0200
    Duh
    r6970 at Thesaurus (orig r6969):  frew | 2009-07-03 19:59:48 +0200
    fix tests for new codez
    r6971 at Thesaurus (orig r6970):  ribasushi | 2009-07-03 20:18:53 +0200
    detabify
    r6972 at Thesaurus (orig r6971):  ribasushi | 2009-07-03 20:20:07 +0200
    changes
   
   r5920 at hlagh (orig r6979):  ribasushi | 2009-07-04 02:34:08 -0700
   Hide devel documentation from the indexer
   r5921 at hlagh (orig r6980):  ribasushi | 2009-07-04 02:37:25 -0700
   Add set_ansi_mode POD
   r5922 at hlagh (orig r6981):  ribasushi | 2009-07-04 02:45:24 -0700
   Backout mysql changes for further polishing
   r5925 at hlagh (orig r6984):  ribasushi | 2009-07-04 03:08:16 -0700
   Missing newline
   r5926 at hlagh (orig r6985):  ribasushi | 2009-07-04 03:11:18 -0700
   typo
   r5927 at hlagh (orig r6986):  ribasushi | 2009-07-04 03:40:47 -0700
   Fix POD
   r5928 at hlagh (orig r6987):  ribasushi | 2009-07-04 04:09:39 -0700
   todos are shorter now
   r5929 at hlagh (orig r6989):  castaway | 2009-07-05 13:00:55 -0700
   Added Pod::Inherit use to Makefile.PL at author-time, comments/suggestions as to whether its too "noisy" welcome.
   
   r5930 at hlagh (orig r6990):  ribasushi | 2009-07-05 15:06:52 -0700
   Couple of makefile fixes:
   use is compile time, use require
   recommends is for distro maintainers only, push the dependency into the authors hash (it is not to be executed by mere mortals)
   
   r5931 at hlagh (orig r6991):  ribasushi | 2009-07-05 15:55:36 -0700
   Forgotten pod exclusions
   r5932 at hlagh (orig r6992):  ribasushi | 2009-07-05 16:07:05 -0700
   Temporarily backout Pod::Inherit changes
   r5933 at hlagh (orig r6993):  ribasushi | 2009-07-05 16:10:22 -0700
   Put Pod::Inherit stuff back after proper copy
  
  r7027 at Thesaurus (orig r7026):  caelum | 2009-07-10 23:25:56 +0200
   r5941 at hlagh (orig r7009):  ribasushi | 2009-07-09 03:45:02 -0700
    r6995 at Thesaurus (orig r6994):  ribasushi | 2009-07-06 01:12:57 +0200
    Where 08108 will come from
   
  
  r7029 at Thesaurus (orig r7028):  caelum | 2009-07-10 23:59:31 +0200
   r5959 at hlagh (orig r7027):  caelum | 2009-07-10 14:56:57 -0700
   fix PodInherit call in Makefile.PL
  
  r7067 at Thesaurus (orig r7066):  caelum | 2009-07-17 10:18:24 +0200
   r5961 at hlagh (orig r7029):  robkinyon | 2009-07-10 18:03:07 -0400
   Applied patch from kados regarding use of a DateTime::Format class to validate
   r5962 at hlagh (orig r7030):  caelum | 2009-07-11 05:26:40 -0400
   reword IC::DT doc patch
   r6009 at hlagh (orig r7037):  dandv | 2009-07-13 08:06:08 -0400
   PK::Auto has moved into Core since 2007
   r6010 at hlagh (orig r7038):  dandv | 2009-07-13 08:15:13 -0400
   Fixed has_many example in Intro.pod
   r6011 at hlagh (orig r7039):  dandv | 2009-07-13 16:58:45 -0400
   Fixed run-on sentences in FAQ
   r6012 at hlagh (orig r7040):  dandv | 2009-07-13 17:18:11 -0400
   Minor POD fixes in Example.pod
   r6013 at hlagh (orig r7041):  dandv | 2009-07-13 17:48:18 -0400
   Favored using ->single to get the topmost result over less readable ->slice(0)
   r6014 at hlagh (orig r7042):  dandv | 2009-07-13 18:56:31 -0400
   Minor POD fixes in Cookbook
   r6015 at hlagh (orig r7045):  ribasushi | 2009-07-14 07:30:55 -0400
   Minor logic cleanup
   r6016 at hlagh (orig r7046):  ribasushi | 2009-07-14 08:07:11 -0400
   grouped prefetch fix
   r6023 at hlagh (orig r7053):  ijw | 2009-07-15 12:55:35 -0400
   Added SQLA link for more comprehensive documentation of order_by options available
   r6026 at hlagh (orig r7056):  caelum | 2009-07-15 18:54:22 -0400
   add "smalldatetime" support to IC::DT
   r6029 at hlagh (orig r7059):  ribasushi | 2009-07-16 00:29:41 -0400
    r7013 at Thesaurus (orig r7012):  jnapiorkowski | 2009-07-09 17:00:22 +0200
    new branch
    r7014 at Thesaurus (orig r7013):  jnapiorkowski | 2009-07-09 20:06:44 +0200
    changed the way transactions are detected for replication to work with the standard way to do this, minor doc updates, fix to the force pool so you can force a particular slave, changes to the way the debugging is created
    r7015 at Thesaurus (orig r7014):  jnapiorkowski | 2009-07-09 20:17:03 +0200
    more changes to the way debug output works
    r7016 at Thesaurus (orig r7015):  jnapiorkowski | 2009-07-09 22:26:47 +0200
    big update to the test suite so that we now check to make sure the storage that was expected was actually used
    r7017 at Thesaurus (orig r7016):  jnapiorkowski | 2009-07-09 23:23:37 +0200
    set correct number of tests, changed the debuggin output to not warn on DDL, minor change to a test resultclass so we can deploy to mysql properly
    r7018 at Thesaurus (orig r7017):  jnapiorkowski | 2009-07-09 23:26:59 +0200
    corrected the number of skipped tests
    r7019 at Thesaurus (orig r7018):  jnapiorkowski | 2009-07-09 23:52:22 +0200
    fixed test resultclass formatting, added a few more DBIC::Storage::DBI methods that I might need to delegate.
    r7020 at Thesaurus (orig r7019):  jnapiorkowski | 2009-07-10 01:23:07 +0200
    some documention updates and changed the way we find paths for the sqlite dbfiles to use File::Spec, which I hope will solve some of the Win32 error messages
    r7023 at Thesaurus (orig r7022):  jnapiorkowski | 2009-07-10 18:00:38 +0200
    pod cleanup, fixed broken pod links, and new Introduction pod
    r7024 at Thesaurus (orig r7023):  jnapiorkowski | 2009-07-10 19:10:57 +0200
    updated Changes file to reflect work completed
    r7025 at Thesaurus (orig r7024):  jnapiorkowski | 2009-07-10 19:37:53 +0200
    a few more Moose Type related fixes and added diag to the replication test to report the moose and types version used, to help us debug some of the moose related errors being reported
    r7058 at Thesaurus (orig r7057):  ribasushi | 2009-07-16 06:28:44 +0200
    A couple of typos, and general whitespace cleanup (ick)
   
   r6031 at hlagh (orig r7062):  jnapiorkowski | 2009-07-16 11:03:32 -0400
   increased Moose version requirements due to changes in the way type constraints get validated, which is not backwardly compatible
   r6032 at hlagh (orig r7063):  dandv | 2009-07-16 21:37:28 -0400
   Minor POD grammar: it's -> its where appropriate
  
  r7105 at Thesaurus (orig r7102):  caelum | 2009-07-24 06:34:56 +0200
   r6075 at hlagh (orig r7074):  tomboh | 2009-07-20 12:20:37 -0400
   Fix POD changes from r7040.
   r6081 at hlagh (orig r7077):  norbi | 2009-07-20 18:59:30 -0400
   
   r6082 at hlagh (orig r7078):  norbi | 2009-07-20 18:59:58 -0400
    r7232 at vger:  mendel | 2009-07-21 00:58:12 +0200
    Fixed documentation and added test for the "Arbitrary SQL through a custom ResultSource" Cookbook alternate (subclassing) recipe.
   
   r6083 at hlagh (orig r7079):  norbi | 2009-07-20 19:05:32 -0400
    r7235 at vger:  mendel | 2009-07-21 01:05:18 +0200
    Fixed 'typo' (removed a word that I left there by accident).
   
   r6084 at hlagh (orig r7080):  norbi | 2009-07-21 04:06:21 -0400
    r7237 at vger:  mendel | 2009-07-21 10:06:05 +0200
    Fixing what my svk client screwed up.
   
   r6085 at hlagh (orig r7081):  caelum | 2009-07-21 10:51:55 -0400
   update Storage::Replicated prereqs
   r6086 at hlagh (orig r7082):  caelum | 2009-07-21 12:16:34 -0400
   show Oracle datetime_setup alter session statements in debug output
   r6088 at hlagh (orig r7085):  ribasushi | 2009-07-21 21:50:57 -0400
   Lazy folks do not run the whole test suite before merging >:( 
   r6287 at hlagh (orig r7097):  caelum | 2009-07-23 14:14:11 -0400
    r6092 at hlagh (orig r7090):  caelum | 2009-07-23 08:24:39 -0400
    new branch for fixing the MONEY type in MSSQL
    r6093 at hlagh (orig r7091):  caelum | 2009-07-23 08:34:01 -0400
    add test
    r6283 at hlagh (orig r7093):  caelum | 2009-07-23 10:31:08 -0400
    fix money columns
    r6284 at hlagh (orig r7094):  caelum | 2009-07-23 10:34:06 -0400
    minor change
    r6285 at hlagh (orig r7095):  caelum | 2009-07-23 11:01:37 -0400
    add test for updating money value to NULL
    r6286 at hlagh (orig r7096):  caelum | 2009-07-23 14:09:26 -0400
    add money type tests to dbd::sybase+mssql tests
   
  
  r7135 at Thesaurus (orig r7132):  caelum | 2009-07-28 19:10:40 +0200
   r6365 at hlagh (orig r7126):  caelum | 2009-07-27 20:03:47 -0400
   add postgres "timestamp without time zone" support
  
  r7244 at Thesaurus (orig r7241):  caelum | 2009-08-06 17:12:49 +0200
  add warning for custom resultsources through ->name(SCALARREF) on ->deploy
  r7245 at Thesaurus (orig r7242):  caelum | 2009-08-06 17:54:33 +0200
  improve the ->name(REF) warning code
  r7268 at Thesaurus (orig r7265):  ribasushi | 2009-08-09 00:23:24 +0200
  Clarify POD and cleanup the ->name-hack warning
  r7269 at Thesaurus (orig r7266):  ribasushi | 2009-08-09 00:34:09 +0200
  Fix a corner case and improve comments
 



Property changes on: DBIx-Class/0.08/branches/sybase
___________________________________________________________________
Name: svk:merge
   - 168d5346-440b-0410-b799-f706be625ff1:/DBIx-Class-current:2207
462d4d0c-b505-0410-bf8e-ce8f877b3390:/local/bast/DBIx-Class:3159
4d5fae46-8e6a-4e08-abee-817e9fb894a2:/local/bast/DBIx-Class/0.08/branches/resultsetcolumn_custom_columns:5160
4d5fae46-8e6a-4e08-abee-817e9fb894a2:/local/bast/DBIx-Class/0.08/branches/sqla_1.50_compat:5414
4d5fae46-8e6a-4e08-abee-817e9fb894a2:/local/bast/DBIx-Class/0.08/trunk:7237
9c88509d-e914-0410-b01c-b9530614cbfe:/local/DBIx-Class:32260
9c88509d-e914-0410-b01c-b9530614cbfe:/local/DBIx-Class-CDBICompat:54993
9c88509d-e914-0410-b01c-b9530614cbfe:/vendor/DBIx-Class:31122
ab17426e-7cd3-4704-a2a2-80b7c0a611bb:/local/dbic_column_attr:10946
ab17426e-7cd3-4704-a2a2-80b7c0a611bb:/local/dbic_trunk:11788
bd5ac9a7-f185-4d95-9186-dbb8b392a572:/local/os/bast/DBIx-Class/0.08/trunk:2798
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/belongs_to_null_col_fix:5244
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/cdbicompat_integration:4160
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/column_attr:5074
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/complex_join_rels:4589
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/count_distinct:6218
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/count_rs:6741
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/diamond_relationships:6310
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/file_column:3920
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/fix-update-and-delete-as_query:6162
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/grouped_prefetch:6885
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/joined_count:6323
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/mssql_money_type:7096
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/mssql_storage_minor_refactor:7210
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/mssql_top_fixes:6971
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/multi_stuff:5565
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/mysql_ansi:7175
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/mystery_join:6589
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/new_replication_transaction_fixup:7058
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/on_connect_call:6854
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/on_disconnect_do:3694
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/oracle-tweaks:6222
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/oracle_sequence:4173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/order_by_refactor:6475
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/parser_fk_index:4485
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/prefetch:5699
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/prefetch_limit:6724
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/prefetch_redux:7206
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/replication_dedux:4600
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/rsrc_in_storage:6577
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/rt_bug_41083:5437
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/savepoints:4223
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/search_related_prefetch:6818
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/sqla_1.50_compat:5321
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/storage-ms-access:4142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/storage-tweaks:6262
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/subclassed_rsset:5930
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/subquery:5617
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/syb_connected:6919
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/sybase_mssql:6125
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/top_limit_altfix:6429
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/type_aware_update:6619
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/unresolvable_prefetch:6949
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/versioned_enhancements:4125
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/versioning:4578
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/views:5585
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/tags/0.08108_prerelease_please_do_not_pull_into_it:7008
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/trunk:7215
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-C3:318
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-current:2222
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-joins:173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-resultset:570
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/datetime:1716
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_compat:1855
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_unique_query_fixes:2142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/inflate:1988
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/many_to_many:2025
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/re_refactor_bugfix:1944
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/reorganize_tests:1827
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset-new-refactor:1766
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_2_electric_boogaloo:2175
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_cleanup:2102
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/sqlt_tests_refactor:2043
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/trunk/DBIx-Class:3606
fe160bb6-dc1c-0410-9f2b-d64a711b54a5:/local/DBIC-trunk-0.08:10510
   + 168d5346-440b-0410-b799-f706be625ff1:/DBIx-Class-current:2207
462d4d0c-b505-0410-bf8e-ce8f877b3390:/local/bast/DBIx-Class:3159
4d5fae46-8e6a-4e08-abee-817e9fb894a2:/local/bast/DBIx-Class/0.08/branches/resultsetcolumn_custom_columns:5160
4d5fae46-8e6a-4e08-abee-817e9fb894a2:/local/bast/DBIx-Class/0.08/branches/sqla_1.50_compat:5414
4d5fae46-8e6a-4e08-abee-817e9fb894a2:/local/bast/DBIx-Class/0.08/trunk:7237
9c88509d-e914-0410-b01c-b9530614cbfe:/local/DBIx-Class:32260
9c88509d-e914-0410-b01c-b9530614cbfe:/local/DBIx-Class-CDBICompat:54993
9c88509d-e914-0410-b01c-b9530614cbfe:/vendor/DBIx-Class:31122
ab17426e-7cd3-4704-a2a2-80b7c0a611bb:/local/dbic_column_attr:10946
ab17426e-7cd3-4704-a2a2-80b7c0a611bb:/local/dbic_trunk:11788
bd5ac9a7-f185-4d95-9186-dbb8b392a572:/local/os/bast/DBIx-Class/0.08/trunk:2798
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/_abandoned_but_possibly_useful/table_name_ref:7266
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/belongs_to_null_col_fix:5244
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/cdbicompat_integration:4160
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/column_attr:5074
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/complex_join_rels:4589
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/count_distinct:6218
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/count_rs:6741
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/diamond_relationships:6310
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/discard_changes_replication_fix:7252
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/file_column:3920
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/fix-update-and-delete-as_query:6162
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/grouped_prefetch:6885
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/joined_count:6323
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/mssql_money_type:7096
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/mssql_storage_minor_refactor:7210
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/mssql_top_fixes:6971
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/multi_stuff:5565
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/mysql_ansi:7175
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/mystery_join:6589
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/new_replication_transaction_fixup:7058
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/on_connect_call:6854
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/on_disconnect_do:3694
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/oracle-tweaks:6222
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/oracle_sequence:4173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/order_by_refactor:6475
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/parser_fk_index:4485
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/prefetch:5699
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/prefetch_limit:6724
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/prefetch_redux:7206
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/reduce_pings:7261
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/replication_dedux:4600
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/rsrc_in_storage:6577
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/rt_bug_41083:5437
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/savepoints:4223
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/search_related_prefetch:6818
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/sqla_1.50_compat:5321
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/storage-ms-access:4142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/storage-tweaks:6262
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/subclassed_rsset:5930
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/subquery:5617
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/syb_connected:6919
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/sybase_mssql:6125
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/table_name_ref:7132
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/top_limit_altfix:6429
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/type_aware_update:6619
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/unresolvable_prefetch:6949
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/versioned_enhancements:4125
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/versioning:4578
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/branches/views:5585
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/tags/0.08108_prerelease_please_do_not_pull_into_it:7008
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/DBIx-Class/0.08/trunk:7267
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-C3:318
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-current:2222
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-joins:173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-resultset:570
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/datetime:1716
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_compat:1855
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_unique_query_fixes:2142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/inflate:1988
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/many_to_many:2025
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/re_refactor_bugfix:1944
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/reorganize_tests:1827
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset-new-refactor:1766
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_2_electric_boogaloo:2175
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_cleanup:2102
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/sqlt_tests_refactor:2043
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/trunk/DBIx-Class:3606
fe160bb6-dc1c-0410-9f2b-d64a711b54a5:/local/DBIC-trunk-0.08:10510
Name: svn:mergeinfo
   + 

Modified: DBIx-Class/0.08/branches/sybase/Changes
===================================================================
--- DBIx-Class/0.08/branches/sybase/Changes	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/Changes	2009-08-08 22:41:12 UTC (rev 7269)
@@ -10,6 +10,8 @@
           - Fixed the way we detect transaction to make this more reliable
             and forward looking.
           - Fixed some trouble with the way Moose Types are used.
+          - Made discard_chages/get_from_storage replication aware (they
+            now read from the master storage by default)
         - Refactor of MSSQL storage drivers, with some new features:
           - Support for placeholders for MSSQL via DBD::Sybase with proper
             autodetection
@@ -38,9 +40,13 @@
             problems with search_related chaining
           - Deal with the distinct => 1 attribute properly when using
             prefetch
+        - Massive optimization of the DBI storage layer - reduce the
+          amount of connected() calls
+        - New ::Storage::DBI method last_dbh() - it will still return a
+          newly connected $dbh if we start unconnected, but will not ping
+          the server on every invocation unlike dbh()
         - Multiple POD improvements
 
-
 0.08108 2009-07-05 23:15:00 (UTC)
         - Fixed the has_many prefetch with limit/group deficiency -
           it is now possible to select "top 5 commenters" while

Modified: DBIx-Class/0.08/branches/sybase/Makefile.PL
===================================================================
--- DBIx-Class/0.08/branches/sybase/Makefile.PL	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/Makefile.PL	2009-08-08 22:41:12 UTC (rev 7269)
@@ -18,6 +18,7 @@
 
 test_requires 'File::Temp'          => 0.22;
 
+
 # Core
 requires 'List::Util'               => 0;
 requires 'Scalar::Util'             => 0;
@@ -45,23 +46,17 @@
 
 recommends 'SQL::Translator'        => 0.09004;
 
-install_script (qw|
-    script/dbicadmin
-|);
+my %replication_requires = (
+  'Moose',                    => 0.87,
+  'MooseX::AttributeHelpers'  => 0.21,
+  'MooseX::Types',            => 0.16,
+  'namespace::clean'          => 0.11,
+  'Hash::Merge',              => 0.11,
+);
 
-tests_recursive (qw|
-    t
-|);
+my %force_requires_if_author = (
+  %replication_requires,
 
-resources 'IRC'         => 'irc://irc.perl.org/#dbix-class';
-resources 'license'     => 'http://dev.perl.org/licenses/';
-resources 'repository'  => 'http://dev.catalyst.perl.org/svnweb/bast/browse/DBIx-Class/';
-resources 'MailingList' => 'http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class';
-
-
-# re-build README and require extra modules for testing if we're in a checkout
-
-my %force_requires_if_author = (
 #  'Module::Install::Pod::Inherit' => 0.01,
   'Test::Pod::Coverage'       => 1.04,
   'SQL::Translator'           => 0.09007,
@@ -85,13 +80,6 @@
   # t/96_is_deteministic_value.t
   'DateTime::Format::Strptime'=> 0,
 
-  # t/93storage_replication.t
-  'Moose',                    => 0.87,
-  'MooseX::AttributeHelpers'  => 0.21,
-  'MooseX::Types',            => 0.16,
-  'namespace::clean'          => 0.11,
-  'Hash::Merge',              => 0.11,
-
   # database-dependent reqs
   #
   $ENV{DBICTEST_PG_DSN}
@@ -121,6 +109,23 @@
   ,
 );
 
+
+install_script (qw|
+    script/dbicadmin
+|);
+
+tests_recursive (qw|
+    t
+|);
+
+resources 'IRC'         => 'irc://irc.perl.org/#dbix-class';
+resources 'license'     => 'http://dev.perl.org/licenses/';
+resources 'repository'  => 'http://dev.catalyst.perl.org/svnweb/bast/browse/DBIx-Class/';
+resources 'MailingList' => 'http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class';
+
+
+# re-build README and require extra modules for testing if we're in a checkout
+
 if ($Module::Install::AUTHOR) {
   warn <<'EOW';
 ******************************************************************************
@@ -145,8 +150,8 @@
     unlink 'MANIFEST';
   }
 
-#  eval { require Module::Install::Pod::Inherit };
-#  PodInherit() if !$@;
+#  require Module::Install::Pod::Inherit;
+#  PodInherit();
 }
 
 auto_install();

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Manual/Cookbook.pod
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Manual/Cookbook.pod	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Manual/Cookbook.pod	2009-08-08 22:41:12 UTC (rev 7269)
@@ -19,6 +19,8 @@
 
   return $rs->all(); # all records for page 1
 
+  return $rs->page(2); # records for page 2
+
 You can get a L<Data::Page> object for the resultset (suitable for use
 in e.g. a template) using the C<pager> method:
 
@@ -59,12 +61,12 @@
 
 =head2 Retrieve one and only one row from a resultset
 
-Sometimes you need only the first "top" row of a resultset. While this can be
-easily done with L<< $rs->first|DBIx::Class::ResultSet/first >>, it is suboptimal,
-as a full blown cursor for the resultset will be created and then immediately
-destroyed after fetching the first row object.
-L<< $rs->single|DBIx::Class::ResultSet/single >> is
-designed specifically for this case - it will grab the first returned result
+Sometimes you need only the first "top" row of a resultset. While this
+can be easily done with L<< $rs->first|DBIx::Class::ResultSet/first
+>>, it is suboptimal, as a full blown cursor for the resultset will be
+created and then immediately destroyed after fetching the first row
+object.  L<< $rs->single|DBIx::Class::ResultSet/single >> is designed
+specifically for this case - it will grab the first returned result
 without even instantiating a cursor.
 
 Before replacing all your calls to C<first()> with C<single()> please observe the
@@ -73,14 +75,16 @@
 =over
 
 =item *
+
 While single() takes a search condition just like search() does, it does
 _not_ accept search attributes. However one can always chain a single() to
 a search():
 
-  my $top_cd = $cd_rs -> search({}, { order_by => 'rating' }) -> single;
+  my $top_cd = $cd_rs->search({}, { order_by => 'rating' })->single;
 
 
 =item *
+
 Since single() is the engine behind find(), it is designed to fetch a
 single row per database query. Thus a warning will be issued when the
 underlying SELECT returns more than one row. Sometimes however this usage
@@ -88,7 +92,7 @@
 at the top of the charts at any given time. If you know what you are doing,
 you can silence the warning by explicitly limiting the resultset size:
 
-  my $top_cd = $cd_rs -> search ({}, { order_by => 'rating', rows => 1 }) -> single;
+  my $top_cd = $cd_rs->search ({}, { order_by => 'rating', rows => 1 })->single;
 
 =back
 
@@ -98,80 +102,63 @@
 (e.g. it contains Unions, Sub-Selects, Stored Procedures, etc.) or has to
 be optimized for your database in a special way, but you still want to
 get the results as a L<DBIx::Class::ResultSet>.
-The recommended way to accomplish this is by defining a separate ResultSource
-for your query. You can then inject complete SQL statements using a scalar
-reference (this is a feature of L<SQL::Abstract>).
 
-Say you want to run a complex custom query on your user data, here's what
-you have to add to your User class:
+This is accomplished by defining a
+L<ResultSource::View|DBIx::Class::ResultSource::View> for your query,
+almost like you would define a regular ResultSource.
 
-  package My::Schema::Result::User;
-
+  package My::Schema::Result::UserFriendsComplex;
+  use strict;
+  use warnings;
   use base qw/DBIx::Class/;
 
-  # ->load_components, ->table, ->add_columns, etc.
+  __PACKAGE__->load_components('Core');
+  __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
 
-  # Make a new ResultSource based on the User class
-  my $source = __PACKAGE__->result_source_instance();
-  my $new_source = $source->new( $source );
-  $new_source->source_name( 'UserFriendsComplex' );
+  # ->table, ->add_columns, etc.
 
-  # Hand in your query as a scalar reference
-  # It will be added as a sub-select after FROM,
-  # so pay attention to the surrounding brackets!
-  $new_source->name( \<<SQL );
-  ( SELECT u.* FROM user u
-  INNER JOIN user_friends f ON u.id = f.user_id
-  WHERE f.friend_user_id = ?
-  UNION
-  SELECT u.* FROM user u
-  INNER JOIN user_friends f ON u.id = f.friend_user_id
-  WHERE f.user_id = ? )
-  SQL
+  # do not attempt to deploy() this view
+  __PACKAGE__->result_source_instance->is_virtual(1);
 
-  # Finally, register your new ResultSource with your Schema
-  My::Schema->register_extra_source( 'UserFriendsComplex' => $new_source );
+  __PACKAGE__->result_source_instance->view_definition(q[
+    SELECT u.* FROM user u
+    INNER JOIN user_friends f ON u.id = f.user_id
+    WHERE f.friend_user_id = ?
+    UNION
+    SELECT u.* FROM user u
+    INNER JOIN user_friends f ON u.id = f.friend_user_id
+    WHERE f.user_id = ?
+  ]);
 
 Next, you can execute your complex query using bind parameters like this:
 
-  my $friends = [ $schema->resultset( 'UserFriendsComplex' )->search( {},
+  my $friends = $schema->resultset( 'UserFriendsComplex' )->search( {},
     {
       bind  => [ 12345, 12345 ]
     }
-  ) ];
+  );
 
 ... and you'll get back a perfect L<DBIx::Class::ResultSet> (except, of course,
 that you cannot modify the rows it contains, ie. cannot call L</update>,
 L</delete>, ...  on it).
 
-If you prefer to have the definitions of these custom ResultSources in separate
-files (instead of stuffing all of them into the same ResultSource class), you
-can achieve the same with subclassing the ResultSource class and defining the
-new ResultSource there:
+Note that you cannot have bind parameters unless is_virtual is set to true.
 
-  package My::Schema::Result::UserFriendsComplex;
+=over
 
-  use base qw/My::Schema::Result::User/;
+=item * NOTE
 
-  __PACKAGE__->table('dummy');  # currently must be called before anything else
+If you're using the old deprecated C<< $rsrc_instance->name(\'( SELECT ...') >>
+method for custom SQL execution, you are highly encouraged to update your code 
+to use a virtual view as above. If you do not want to change your code, and just
+want to suppress the deprecation warning when you call
+L<DBIx::Class::Schema/deploy>, add this line to your source definition, so that
+C<deploy> will exclude this "table":
 
-  # Hand in your query as a scalar reference
-  # It will be added as a sub-select after FROM,
-  # so pay attention to the surrounding brackets!
-  __PACKAGE__->result_source_instance->name( \<<SQL );
-  ( SELECT u.* FROM user u
-  INNER JOIN user_friends f ON u.id = f.user_id
-  WHERE f.friend_user_id = ?
-  UNION
-  SELECT u.* FROM user u
-  INNER JOIN user_friends f ON u.id = f.friend_user_id
-  WHERE f.user_id = ? )
-  SQL
+  sub sqlt_deploy_hook { $_[1]->schema->drop_table ($_[1]) }
 
-  1;
+=back
 
-TIMTOWDI.
-
 =head2 Using specific columns
 
 When you only want specific columns from a table, you can use

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Ordered.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Ordered.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Ordered.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -362,38 +362,58 @@
     my( $self, $to_position ) = @_;
     return 0 if ( $to_position < 1 );
 
-    my $from_position = $self->_position;
-    return 0 if ( $from_position == $to_position );
-
     my $position_column = $self->position_column;
 
-    {
-        my $guard = $self->result_source->schema->txn_scope_guard;
+    my $guard;
 
-        my ($direction, @between);
-        if ( $from_position < $to_position ) {
-            $direction = -1;
-            @between = map { $self->_position_value ($_) } ( $from_position + 1, $to_position );
-        }
-        else {
-            $direction = 1;
-            @between = map { $self->_position_value ($_) } ( $to_position, $from_position - 1 );
-        }
+    if ($self->is_column_changed ($position_column) ) {
+      # something changed our position, we have no idea where we
+      # used to be - requery without using discard_changes
+      # (we need only a specific column back)
 
-        my $new_pos_val = $self->_position_value ($to_position);                              # record this before the shift
+      $guard = $self->result_source->schema->txn_scope_guard;
 
-        # we need to null-position the moved row if the position column is part of a constraint
-        if (grep { $_ eq $position_column } ( map { @$_ } (values %{{ $self->result_source->unique_constraints }} ) ) ) {
-            $self->_ordered_internal_update({ $position_column => $self->null_position_value });
-        }
+      my $cursor = $self->result_source->resultset->search(
+        $self->ident_condition,
+        { select => $position_column },
+      )->cursor;
 
-        $self->_shift_siblings ($direction, @between);
-        $self->_ordered_internal_update({ $position_column => $new_pos_val });
+      my ($pos) = $cursor->next;
+      $self->$position_column ($pos);
+      delete $self->{_dirty_columns}{$position_column};
+    }
 
-        $guard->commit;
+    my $from_position = $self->_position;
 
-        return 1;
+    if ( $from_position == $to_position ) {   # FIXME this will not work for non-numeric order
+      $guard->commit if $guard;
+      return 0;
     }
+
+    $guard ||= $self->result_source->schema->txn_scope_guard;
+
+    my ($direction, @between);
+    if ( $from_position < $to_position ) {
+      $direction = -1;
+      @between = map { $self->_position_value ($_) } ( $from_position + 1, $to_position );
+    }
+    else {
+      $direction = 1;
+      @between = map { $self->_position_value ($_) } ( $to_position, $from_position - 1 );
+    }
+
+    my $new_pos_val = $self->_position_value ($to_position);  # record this before the shift
+
+    # we need to null-position the moved row if the position column is part of a constraint
+    if (grep { $_ eq $position_column } ( map { @$_ } (values %{{ $self->result_source->unique_constraints }} ) ) ) {
+      $self->_ordered_internal_update({ $position_column => $self->null_position_value });
+    }
+
+    $self->_shift_siblings ($direction, @between);
+    $self->_ordered_internal_update({ $position_column => $new_pos_val });
+
+    $guard->commit;
+    return 1;
 }
 
 =head2 move_to_group
@@ -428,43 +448,71 @@
     my $position_column = $self->position_column;
 
     return 0 if ( defined($to_position) and $to_position < 1 );
+
+    # check if someone changed the _grouping_columns - this will
+    # prevent _is_in_group working, so we need to requery the db
+    # for the original values
+    my (@dirty_cols, %values, $guard);
+    for ($self->_grouping_columns) {
+      $values{$_} = $self->get_column ($_);
+      push @dirty_cols, $_ if $self->is_column_changed ($_);
+    }
+
+    # re-query only the dirty columns, and restore them on the
+    # object (subsequent code will update them to the correct
+    # after-move values)
+    if (@dirty_cols) {
+      $guard = $self->result_source->schema->txn_scope_guard;
+
+      my $cursor = $self->result_source->resultset->search(
+        $self->ident_condition,
+        { select => \@dirty_cols },
+      )->cursor;
+
+      my @original_values = $cursor->next;
+      $self->set_inflated_columns ({ %values, map { $_ => shift @original_values } (@dirty_cols) });
+    }
+
     if ($self->_is_in_group ($to_group) ) {
-        return 0 if not defined $to_position;
-        return $self->move_to ($to_position);
+      my $ret;
+      if (defined $to_position) {
+        $ret = $self->move_to ($to_position);
+      }
+
+      $guard->commit if $guard;
+      return $ret||0;
     }
 
-    {
-        my $guard = $self->result_source->schema->txn_scope_guard;
+    $guard ||= $self->result_source->schema->txn_scope_guard;
 
-        # Move to end of current group to adjust siblings
-        $self->move_last;
+    # Move to end of current group to adjust siblings
+    $self->move_last;
 
-        $self->set_inflated_columns({ %$to_group, $position_column => undef });
-        my $new_group_last_posval = $self->_last_sibling_posval;
-        my $new_group_last_position = $self->_position_from_value (
-          $new_group_last_posval
-        );
+    $self->set_inflated_columns({ %$to_group, $position_column => undef });
+    my $new_group_last_posval = $self->_last_sibling_posval;
+    my $new_group_last_position = $self->_position_from_value (
+      $new_group_last_posval
+    );
 
-        if ( not defined($to_position) or $to_position > $new_group_last_position) {
-            $self->set_column(
-                $position_column => $new_group_last_position
-                    ? $self->_next_position_value ( $new_group_last_posval )
-                    : $self->_initial_position_value
-            );
-        }
-        else {
-            my $bumped_pos_val = $self->_position_value ($to_position);
-            my @between = ($to_position, $new_group_last_position);
-            $self->_shift_siblings (1, @between);   #shift right
-            $self->set_column( $position_column => $bumped_pos_val );
-        }
+    if ( not defined($to_position) or $to_position > $new_group_last_position) {
+      $self->set_column(
+        $position_column => $new_group_last_position
+          ? $self->_next_position_value ( $new_group_last_posval )
+          : $self->_initial_position_value
+      );
+    }
+    else {
+      my $bumped_pos_val = $self->_position_value ($to_position);
+      my @between = ($to_position, $new_group_last_position);
+      $self->_shift_siblings (1, @between);   #shift right
+      $self->set_column( $position_column => $bumped_pos_val );
+    }
 
-        $self->_ordered_internal_update;
+    $self->_ordered_internal_update;
 
-        $guard->commit;
+    $guard->commit;
 
-        return 1;
-    }
+    return 1;
 }
 
 =head2 insert
@@ -508,16 +556,47 @@
     # this is set by _ordered_internal_update()
     return $self->next::method(@_) if $self->{_ORDERED_INTERNAL_UPDATE};
 
-    my $upd = shift;
-    $self->set_inflated_columns($upd) if $upd;
-    my %changes = $self->get_dirty_columns;
-    $self->discard_changes;
-
     my $position_column = $self->position_column;
+    my @ordering_columns = ($self->_grouping_columns, $position_column);
 
+
+    # these steps are necessary to keep the external appearance of
+    # ->update($upd) so that other things overloading update() will
+    # work properly
+    my %original_values = $self->get_inflated_columns;
+    my %existing_changes = $self->get_dirty_columns;
+
+    # See if any of the *supplied* changes would affect the ordering
+    # The reason this is so contrived, is that we want to leverage
+    # the datatype aware value comparing, while at the same time
+    # keep the original value intact (it will be updated later by the
+    # corresponding routine)
+
+    my %upd = %{shift || {}};
+    my %changes = %existing_changes;
+
+    for (@ordering_columns) {
+        next unless exists $upd{$_};
+
+        # we do not want to keep propagating this to next::method
+        # as it will be a done deal by the time get there
+        my $value = delete $upd{$_};
+        $self->set_inflated_columns ({ $_ => $value });
+
+        # see if an update resulted in a dirty column
+        # it is important to preserve the old value, as it
+        # will be needed to carry on a successfull move()
+        # operation without re-querying the database
+        if ($self->is_column_changed ($_) && not exists $existing_changes{$_}) {
+            $changes{$_} = $value;
+            $self->set_inflated_columns ({ $_ => $original_values{$_} });
+            delete $self->{_dirty_columns}{$_};
+        }
+    }
+
     # if nothing group/position related changed - short circuit
-    if (not grep { exists $changes{$_} } ($self->_grouping_columns, $position_column) ) {
-        return $self->next::method( \%changes, @_ );
+    if (not grep { exists $changes{$_} } ( @ordering_columns ) ) {
+        return $self->next::method( \%upd, @_ );
     }
 
     {
@@ -529,37 +608,37 @@
             # create new_group by taking the current group and inserting changes
             my $new_group = {$self->_grouping_clause};
             foreach my $col (keys %$new_group) {
-                if (exists $changes{$col}) {
-                    $new_group->{$col} = delete $changes{$col}; # don't want to pass this on to next::method
-                }
+                $new_group->{$col} = $changes{$col} if exists $changes{$col};
             }
 
             $self->move_to_group(
                 $new_group,
                 (exists $changes{$position_column}
-                    # The FIXME bit contradicts the documentation: when changing groups without supplying explicit
-                    # positions in move_to_group(), we push the item to the end of the group.
-                    # However when I was rewriting this, the position from the old group was clearly passed to the new one
+                    # The FIXME bit contradicts the documentation: POD states that
+                    # when changing groups without supplying explicit positions in
+                    # move_to_group(), we push the item to the end of the group.
+                    # However when I was rewriting this, the position from the old
+                    # group was clearly passed to the new one
                     # Probably needs to go away (by ribasushi)
-                    ? delete $changes{$position_column}     # means there was a position change supplied with the update too
-                    : $self->_position                      # FIXME!
+                    ? $changes{$position_column}    # means there was a position change supplied with the update too
+                    : $self->_position              # FIXME! (replace with undef)
                 ),
             );
         }
         elsif (exists $changes{$position_column}) {
-            $self->move_to(delete $changes{$position_column});
+            $self->move_to($changes{$position_column});
         }
 
         my @res;
         my $want = wantarray();
         if (not defined $want) {
-            $self->next::method( \%changes, @_ );
+            $self->next::method( \%upd, @_ );
         }
         elsif ($want) {
-            @res = $self->next::method( \%changes, @_ );
+            @res = $self->next::method( \%upd, @_ );
         }
         else {
-            $res[0] = $self->next::method( \%changes, @_ );
+            $res[0] = $self->next::method( \%upd, @_ );
         }
 
         $guard->commit;
@@ -790,8 +869,8 @@
 =head2 _grouping_clause
 
 This method returns one or more name=>value pairs for limiting a search
-by the grouping column(s).  If the grouping column is not
-defined then this will return an empty list.
+by the grouping column(s).  If the grouping column is not defined then 
+this will return an empty list.
 
 =cut
 sub _grouping_clause {

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/PK.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/PK.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/PK.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -20,45 +20,6 @@
 
 =cut
 
-sub _ident_values {
-  my ($self) = @_;
-  return (map { $self->{_column_data}{$_} } $self->primary_columns);
-}
-
-=head2 discard_changes ($attrs)
-
-Re-selects the row from the database, losing any changes that had
-been made.
-
-This method can also be used to refresh from storage, retrieving any
-changes made since the row was last read from storage.
-
-$attrs is expected to be a hashref of attributes suitable for passing as the
-second argument to $resultset->search($cond, $attrs);
-
-=cut
-
-sub discard_changes {
-  my ($self, $attrs) = @_;
-  delete $self->{_dirty_columns};
-  return unless $self->in_storage; # Don't reload if we aren't real!
-
-  if( my $current_storage = $self->get_from_storage($attrs)) {
-
-    # Set $self to the current.
-  	%$self = %$current_storage;
-
-    # Avoid a possible infinite loop with
-    # sub DESTROY { $_[0]->discard_changes }
-    bless $current_storage, 'Do::Not::Exist';
-
-    return $self;  	
-  } else {
-    $self->in_storage(0);
-    return $self;  	
-  }
-}
-
 =head2 id
 
 Returns the primary key(s) for a row. Can't be called as
@@ -74,12 +35,28 @@
   return (wantarray ? @pk : $pk[0]);
 }
 
+sub _ident_values {
+  my ($self) = @_;
+  return (map { $self->{_column_data}{$_} } $self->primary_columns);
+}
+
 =head2 ID
 
 Returns a unique id string identifying a row object by primary key.
 Used by L<DBIx::Class::CDBICompat::LiveObjectIndex> and
 L<DBIx::Class::ObjectCache>.
 
+=over
+
+=item WARNING
+
+The default C<_create_ID> method used by this function orders the returned
+values by the alphabetical order of the primary column names, B<unlike>
+the L</id> method, which follows the same order in which columns were fed
+to L<DBIx::Class::ResultSource/set_primary_key>.
+
+=back
+
 =cut
 
 sub ID {

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/ResultSource/View.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/ResultSource/View.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/ResultSource/View.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -19,7 +19,7 @@
 
   package MyDB::Schema::Result::Year2000CDs;
 
-  use DBIx::Class::ResultSource::View;
+  use base qw/DBIx::Class/;
 
   __PACKAGE__->load_components('Core');
   __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
@@ -28,17 +28,30 @@
   __PACKAGE__->result_source_instance->is_virtual(1);
   __PACKAGE__->result_source_instance->view_definition(
       "SELECT cdid, artist, title FROM cd WHERE year ='2000'"
-      );
+  );
+  __PACKAGE__->add_columns(
+    'cdid' => {
+      data_type => 'integer',
+      is_auto_increment => 1,
+    },
+    'artist' => {
+      data_type => 'integer',
+    },
+    'title' => {
+      data_type => 'varchar',
+      size      => 100,
+    },
+  );
 
 =head1 DESCRIPTION
 
 View object that inherits from L<DBIx::Class::ResultSource>
 
-This class extends ResultSource to add basic view support. 
+This class extends ResultSource to add basic view support.
 
-A view has a L</view_definition>, which contains an SQL query. The
-query cannot have parameters. It may contain JOINs, sub selects and
-any other SQL your database supports.
+A view has a L</view_definition>, which contains a SQL query. The query can
+only have parameters if L</is_virtual> is set to true. It may contain JOINs,
+sub selects and any other SQL your database supports.
 
 View definition SQL is deployed to your database on
 L<DBIx::Class::Schema/deploy> unless you set L</is_virtual> to true.
@@ -50,6 +63,37 @@
 exist in your database as a real view. The L</view_definition> in this
 case replaces the view name in a FROM clause in a subselect.
 
+=head1 EXAMPLES
+
+Having created the MyDB::Schema::Year2000CDs schema as shown in the SYNOPSIS
+above, you can then:
+
+  $2000_cds = $schema->resultset('Year2000CDs')
+                     ->search()
+                     ->all();
+  $count    = $schema->resultset('Year2000CDs')
+                     ->search()
+                     ->count();
+
+If you modified the schema to include a placeholder
+
+  __PACKAGE__->result_source_instance->view_definition(
+      "SELECT cdid, artist, title FROM cd WHERE year ='?'"
+  );
+
+and ensuring you have is_virtual set to true:
+
+  __PACKAGE__->result_source_instance->is_virtual(1);
+
+You could now say:
+
+  $2001_cds = $schema->resultset('Year2000CDs')
+                     ->search({}, { bind => [2001] })
+                     ->all();
+  $count    = $schema->resultset('Year2000CDs')
+                     ->search({}, { bind => [2001] })
+                     ->count();
+
 =head1 SQL EXAMPLES
 
 =over

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/ResultSource.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/ResultSource.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/ResultSource.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -40,8 +40,6 @@
   # Create a query (view) based result source, in a result class
   package MyDB::Schema::Result::Year2000CDs;
 
-  use DBIx::Class::ResultSource::View;
-
   __PACKAGE__->load_components('Core');
   __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
 
@@ -586,7 +584,10 @@
 sub name_unique_constraint {
   my ($self, $cols) = @_;
 
-  return join '_', $self->name, @$cols;
+  my $name = $self->name;
+  $name = $$name if (ref $name eq 'SCALAR');
+
+  return join '_', $name, @$cols;
 }
 
 =head2 unique_constraints

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/ResultSourceProxy/Table.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/ResultSourceProxy/Table.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/ResultSourceProxy/Table.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -6,6 +6,7 @@
 use base qw/DBIx::Class::ResultSourceProxy/;
 
 use DBIx::Class::ResultSource::Table;
+use Scalar::Util ();
 
 __PACKAGE__->mk_classdata(table_class => 'DBIx::Class::ResultSource::Table');
 
@@ -22,8 +23,11 @@
     my $class_has_table_instance = ($table and $table->result_class eq $class);
     return $table if $class_has_table_instance;
 
+    my $table_class = $class->table_class;
+    $class->ensure_class_loaded($table_class);
+
     if( $table ) {
-        $table = $class->table_class->new({
+        $table = $table_class->new({
             %$table,
             result_class => $class,
             source_name => undef,
@@ -31,7 +35,7 @@
         });
     }
     else {
-        $table = $class->table_class->new({
+        $table = $table_class->new({
             name            => undef,
             result_class    => $class,
             source_name     => undef,
@@ -75,8 +79,13 @@
 sub table {
   my ($class, $table) = @_;
   return $class->result_source_instance->name unless $table;
-  unless (ref $table) {
-    $table = $class->table_class->new({
+
+  unless (Scalar::Util::blessed($table) && $table->isa($class->table_class)) {
+
+    my $table_class = $class->table_class;
+    $class->ensure_class_loaded($table_class);
+
+    $table = $table_class->new({
         $class->can('result_source_instance') ?
           %{$class->result_source_instance||{}} : (),
         name => $table,

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Row.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Row.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Row.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -1277,12 +1277,51 @@
     my $resultset = $self->result_source->resultset;
 
     if(defined $attrs) {
-    	$resultset = $resultset->search(undef, $attrs);
+      $resultset = $resultset->search(undef, $attrs);
     }
 
     return $resultset->find($self->{_orig_ident} || $self->ident_condition);
 }
 
+=head2 discard_changes ($attrs)
+
+Re-selects the row from the database, losing any changes that had
+been made.
+
+This method can also be used to refresh from storage, retrieving any
+changes made since the row was last read from storage.
+
+$attrs is expected to be a hashref of attributes suitable for passing as the
+second argument to $resultset->search($cond, $attrs);
+
+=cut
+
+sub discard_changes {
+  my ($self, $attrs) = @_;
+  delete $self->{_dirty_columns};
+  return unless $self->in_storage; # Don't reload if we aren't real!
+
+  # add a replication default to read from the master only
+  $attrs = { force_pool => 'master', %{$attrs||{}} };
+
+  if( my $current_storage = $self->get_from_storage($attrs)) {
+
+    # Set $self to the current.
+    %$self = %$current_storage;
+
+    # Avoid a possible infinite loop with
+    # sub DESTROY { $_[0]->discard_changes }
+    bless $current_storage, 'Do::Not::Exist';
+
+    return $self;
+  }
+  else {
+    $self->in_storage(0);
+    return $self;
+  }
+}
+
+
 =head2 throw_exception
 
 See L<DBIx::Class::Schema/throw_exception>.

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/SQLAHacks/MySQL.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/SQLAHacks/MySQL.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/SQLAHacks/MySQL.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -12,7 +12,7 @@
   my $self = shift;
 
   my $table = $_[0];
-  $table = $self->_quote($table) unless ref($table);
+  $table = $self->_quote($table);
 
   if (! $_[1] or (ref $_[1] eq 'HASH' and !keys %{$_[1]} ) ) {
     return "INSERT INTO ${table} () VALUES ()"

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/SQLAHacks.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/SQLAHacks.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/SQLAHacks.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -329,12 +329,10 @@
 
   $self->{"${_}_bind"} = [] for (qw/having from order/);
 
-  if (ref $table eq 'SCALAR') {
-    $table = $$table;
-  }
-  elsif (not ref $table) {
+  if (not ref($table) or ref($table) eq 'SCALAR') {
     $table = $self->_quote($table);
   }
+
   local $self->{rownum_hack_count} = 1
     if (defined $rest[0] && $self->{limit_dialect} eq 'RowNum');
   @rest = (-1) unless defined $rest[0];
@@ -354,7 +352,7 @@
 sub insert {
   my $self = shift;
   my $table = shift;
-  $table = $self->_quote($table) unless ref($table);
+  $table = $self->_quote($table);
 
   # SQLA will emit INSERT INTO $table ( ) VALUES ( )
   # which is sadly understood only by MySQL. Change default behavior here,
@@ -370,7 +368,7 @@
 sub update {
   my $self = shift;
   my $table = shift;
-  $table = $self->_quote($table) unless ref($table);
+  $table = $self->_quote($table);
   $self->SUPER::update($table, @_);
 }
 
@@ -378,7 +376,7 @@
 sub delete {
   my $self = shift;
   my $table = shift;
-  $table = $self->_quote($table) unless ref($table);
+  $table = $self->_quote($table);
   $self->SUPER::delete($table, @_);
 }
 
@@ -584,6 +582,7 @@
 sub _quote {
   my ($self, $label) = @_;
   return '' unless defined $label;
+  return $$label if ref($label) eq 'SCALAR';
   return "*" if $label eq '*';
   return $label unless $self->{quote_char};
   if(ref $self->{quote_char} eq "ARRAY"){

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Schema.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Schema.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Schema.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -42,7 +42,7 @@
     $dsn,
     $user,
     $password,
-    { AutoCommit => 0 },
+    { AutoCommit => 1 },
   );
 
   my $schema2 = Library::Schema->connect($coderef_returning_dbh);

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/MSSQL.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/MSSQL.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/MSSQL.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -30,14 +30,14 @@
 
   if ($identity_insert) {
     my $table = $source->from;
-    $self->dbh->do("SET IDENTITY_INSERT $table ON");
+    $self->last_dbh->do("SET IDENTITY_INSERT $table ON");
   }
 
   $self->next::method(@_);
 
   if ($identity_insert) {
     my $table = $source->from;
-    $self->dbh->do("SET IDENTITY_INSERT $table OFF");
+    $self->last_dbh->do("SET IDENTITY_INSERT $table OFF");
   }
 }
 
@@ -68,7 +68,7 @@
     grep { not exists $to_insert->{$_} } (@pk_guids, @auto_guids);
 
   for my $guid_col (@get_guids_for) {
-    my ($new_guid) = $self->dbh->selectrow_array('SELECT NEWID()');
+    my ($new_guid) = $self->last_dbh->selectrow_array('SELECT NEWID()');
     $updated_cols->{$guid_col} = $to_insert->{$guid_col} = $new_guid;
   }
 
@@ -145,7 +145,7 @@
 sub _svp_begin {
   my ($self, $name) = @_;
 
-  $self->dbh->do("SAVE TRANSACTION $name");
+  $self->last_dbh->do("SAVE TRANSACTION $name");
 }
 
 # A new SAVE TRANSACTION with the same name releases the previous one.
@@ -154,7 +154,7 @@
 sub _svp_rollback {
   my ($self, $name) = @_;
 
-  $self->dbh->do("ROLLBACK TRANSACTION $name");
+  $self->last_dbh->do("ROLLBACK TRANSACTION $name");
 }
 
 sub build_datetime_parser {

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/ODBC.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/ODBC.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/ODBC.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -8,7 +8,8 @@
 sub _rebless {
     my ($self) = @_;
 
-    my $dbtype = eval { $self->dbh->get_info(17) };
+    my $dbtype = eval { $self->last_dbh->get_info(17) };
+
     unless ( $@ ) {
         # Translate the backend name into a perl identifier
         $dbtype =~ s/\W/_/gi;

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -76,7 +76,7 @@
 
 sub _sequence_fetch {
   my ( $self, $type, $seq ) = @_;
-  my ($id) = $self->dbh->selectrow_array("SELECT ${seq}.${type} FROM DUAL");
+  my ($id) = $self->last_dbh->selectrow_array("SELECT ${seq}.${type} FROM DUAL");
   return $id;
 }
 
@@ -253,7 +253,7 @@
 sub _svp_begin {
     my ($self, $name) = @_;
 
-    $self->dbh->do("SAVEPOINT $name");
+    $self->last_dbh->do("SAVEPOINT $name");
 }
 
 # Oracle automatically releases a savepoint when you start another one with the
@@ -263,7 +263,7 @@
 sub _svp_rollback {
     my ($self, $name) = @_;
 
-    $self->dbh->do("ROLLBACK TO SAVEPOINT $name")
+    $self->last_dbh->do("ROLLBACK TO SAVEPOINT $name")
 }
 
 =head1 AUTHOR

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Oracle.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Oracle.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Oracle.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -9,7 +9,7 @@
 sub _rebless {
     my ($self) = @_;
 
-    my $version = eval { $self->dbh->get_info(18); };
+    my $version = eval { $self->last_dbh->get_info(18); };
 
     if ( !$@ ) {
         my ($major, $minor, $patchlevel) = split(/\./, $version);

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Pg.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Pg.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Pg.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -15,7 +15,7 @@
 sub with_deferred_fk_checks {
   my ($self, $sub) = @_;
 
-  $self->dbh->do('SET CONSTRAINTS ALL DEFERRED');
+  $self->last_dbh->do('SET CONSTRAINTS ALL DEFERRED');
   $sub->();
 }
 
@@ -52,9 +52,17 @@
   my ($self,$source,$col) = @_;
 
   my @pri = $source->primary_columns;
-  my ($schema,$table) = $source->name =~ /^(.+)\.(.+)$/ ? ($1,$2)
-    : (undef,$source->name);
 
+  my $schema;
+  my $table = $source->name;
+
+  if (ref $table eq 'SCALAR') {
+    $table = $$table;
+  }
+  elsif ($table =~ /^(.+)\.(.+)$/) {
+    ($schema, $table) = ($1, $2);
+  }
+
   $self->dbh_do('_dbh_get_autoinc_seq', $schema, $table, @pri);
 }
 
@@ -82,26 +90,26 @@
 
 sub _sequence_fetch {
   my ( $self, $type, $seq ) = @_;
-  my ($id) = $self->dbh->selectrow_array("SELECT nextval('${seq}')");
+  my ($id) = $self->last_dbh->selectrow_array("SELECT nextval('${seq}')");
   return $id;
 }
 
 sub _svp_begin {
     my ($self, $name) = @_;
 
-    $self->dbh->pg_savepoint($name);
+    $self->last_dbh->pg_savepoint($name);
 }
 
 sub _svp_release {
     my ($self, $name) = @_;
 
-    $self->dbh->pg_release($name);
+    $self->last_dbh->pg_release($name);
 }
 
 sub _svp_rollback {
     my ($self, $name) = @_;
 
-    $self->dbh->pg_rollback_to($name);
+    $self->last_dbh->pg_rollback_to($name);
 }
 
 1;

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Sybase/Base.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Sybase/Base.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Sybase/Base.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -44,7 +44,7 @@
 
 sub placeholders_supported {
   my $self = shift;
-  my $dbh  = $self->_dbh;
+  my $dbh  = $self->last_dbh;
 
   return eval {
 # There's also $dbh->{syb_dynamic_supported} but it can be inaccurate for this

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Sybase/Microsoft_SQL_Server.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Sybase/Microsoft_SQL_Server.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Sybase/Microsoft_SQL_Server.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -11,7 +11,7 @@
 
 sub _rebless {
   my $self = shift;
-  my $dbh  = $self->_dbh;
+  my $dbh  = $self->last_dbh;
 
   if (not $self->placeholders_with_type_conversion_supported) {
     bless $self,

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Sybase.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Sybase.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/Sybase.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -48,7 +48,7 @@
 
   if (ref($self) eq 'DBIx::Class::Storage::DBI::Sybase') {
     my $dbtype = eval {
-      @{$self->dbh->selectrow_arrayref(qq{sp_server_info \@attribute_id=1})}[2]
+      @{$self->last_dbh->selectrow_arrayref(qq{sp_server_info \@attribute_id=1})}[2]
     } || '';
 
     my $exception = $@;

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/mysql.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/mysql.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI/mysql.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -40,28 +40,28 @@
 sub _svp_begin {
     my ($self, $name) = @_;
 
-    $self->dbh->do("SAVEPOINT $name");
+    $self->last_dbh->do("SAVEPOINT $name");
 }
 
 sub _svp_release {
     my ($self, $name) = @_;
 
-    $self->dbh->do("RELEASE SAVEPOINT $name");
+    $self->last_dbh->do("RELEASE SAVEPOINT $name");
 }
 
 sub _svp_rollback {
     my ($self, $name) = @_;
 
-    $self->dbh->do("ROLLBACK TO SAVEPOINT $name")
+    $self->last_dbh->do("ROLLBACK TO SAVEPOINT $name")
 }
 
 sub is_replicating {
-    my $status = shift->dbh->selectrow_hashref('show slave status');
+    my $status = shift->last_dbh->selectrow_hashref('show slave status');
     return ($status->{Slave_IO_Running} eq 'Yes') && ($status->{Slave_SQL_Running} eq 'Yes');
 }
 
 sub lag_behind_master {
-    return shift->dbh->selectrow_hashref('show slave status')->{Seconds_Behind_Master};
+    return shift->last_dbh->selectrow_hashref('show slave status')->{Seconds_Behind_Master};
 }
 
 # MySql can not do subquery update/deletes, only way is slow per-row operations.
@@ -81,7 +81,7 @@
 Storage::DBI autodetects the underlying MySQL database, and re-blesses the
 C<$storage> object into this class.
 
-  my $schema = MyDb::Schema->connect( $dsn, $user, $pass, { set_strict_mode => 1 } );
+  my $schema = MyDb::Schema->connect( $dsn, $user, $pass, { on_connect_call => 'set_strict_mode' } );
 
 =head1 DESCRIPTION
 

Modified: DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/DBIx/Class/Storage/DBI.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -437,12 +437,24 @@
     }
   }
 
-  %attrs = () if (ref $args[0] eq 'CODE');  # _connect() never looks past $args[0] in this case
+  if (ref $args[0] eq 'CODE') {
+    # _connect() never looks past $args[0] in this case
+    %attrs = ()
+  } else {
+    %attrs = (
+      %{ $self->_default_dbi_connect_attributes || {} },
+      %attrs,
+    );
+  }
 
   $self->_dbi_connect_info([@args, keys %attrs ? \%attrs : ()]);
   $self->_connect_info;
 }
 
+sub _default_dbi_connect_attributes {
+  return { AutoCommit => 1 };
+}
+
 =head2 on_connect_do
 
 This method is deprecated in favour of setting via L</connect_info>.
@@ -589,7 +601,7 @@
     my $exception = $@;
     if(!$exception) { return $want_array ? @result : $result[0] }
 
-    if($tried++ > 0 || $self->connected) {
+    if($tried++ || $self->connected) {
       eval { $self->txn_rollback };
       my $rollback_exception = $@;
       if($rollback_exception) {
@@ -621,7 +633,7 @@
 sub disconnect {
   my ($self) = @_;
 
-  if( $self->connected ) {
+  if( $self->_dbh ) {
     my @actions;
 
     push @actions, ( $self->on_disconnect_call || () );
@@ -659,6 +671,22 @@
   $sub->();
 }
 
+=head2 connected
+
+=over
+
+=item Arguments: none
+
+=item Return Value: 1|0
+
+=back
+
+Verifies that the the current database handle is active and ready to execute
+an SQL statement (i.e. the connection did not get stale, server is still
+answering, etc.) This method is used internally by L</dbh>.
+
+=cut
+
 sub connected {
   my ($self) = @_;
 
@@ -710,21 +738,48 @@
 
 =head2 dbh
 
-Returns the dbh - a data base handle of class L<DBI>.
+Returns a C<$dbh> - a data base handle of class L<DBI>. The returned handle
+is guaranteed to be healthy by implicitly calling L</connected>, and if
+necessary performing a reconnection before returning.
 
 =cut
 
 sub dbh {
   my ($self) = @_;
 
-  $self->ensure_connected;
+  if (not $self->_dbh) {
+    $self->_populate_dbh;
+  } else {
+    $self->ensure_connected;
+  }
   return $self->_dbh;
 }
 
+=head2 last_dbh
+
+This returns the B<last> available C<$dbh> if any, or attempts to
+connect and returns the resulting handle. This method differs from
+L</dbh> by not validating if a preexisting handle is still healthy
+via L</connected>. Make sure you take appropriate precautions
+when using this method, as the C<$dbh> may be useless at this point.
+
+=cut
+
+sub last_dbh {
+  my $self = shift;
+  $self->_populate_dbh unless $self->_dbh;
+  return $self->_dbh;
+}
+
 sub _sql_maker_args {
     my ($self) = @_;
 
-    return ( bindtype=>'columns', array_datatypes => 1, limit_dialect => $self->dbh, %{$self->_sql_maker_opts} );
+    return (
+      bindtype=>'columns',
+      array_datatypes => 1,
+      limit_dialect => $self->last_dbh,
+      %{$self->_sql_maker_opts}
+    );
 }
 
 sub sql_maker {
@@ -741,6 +796,7 @@
 
 sub _populate_dbh {
   my ($self) = @_;
+
   my @info = @{$self->_dbi_connect_info || []};
   $self->_dbh($self->_connect(@info));
 
@@ -753,6 +809,11 @@
   #  there is no transaction in progress by definition
   $self->{transaction_depth} = $self->_dbh_autocommit ? 0 : 1;
 
+  $self->_run_connection_actions unless $self->{_in_determine_driver};
+}
+
+sub _run_connection_actions {
+  my $self = shift;
   my @actions;
 
   push @actions, ( $self->on_connect_call || () );
@@ -765,15 +826,18 @@
   my ($self) = @_;
 
   if (not $self->_driver_determined) {
+    my $started_unconnected = 0;
+    local $self->{_in_determine_driver} = 1;
+
     if (ref($self) eq __PACKAGE__) {
       my $driver;
-
       if ($self->_dbh) { # we are connected
         $driver = $self->_dbh->{Driver}{Name};
       } else {
         # try to use dsn to not require being connected, the driver may still
         # force a connection in _rebless to determine version
         ($driver) = $self->_dbi_connect_info->[0] =~ /dbi:([^:]+):/i;
+        $started_unconnected = 1;
       }
 
       my $storage_class = "DBIx::Class::Storage::DBI::${driver}";
@@ -785,6 +849,9 @@
     }
 
     $self->_driver_determined(1);
+
+    $self->_run_connection_actions
+        if $started_unconnected && defined $self->_dbh;
   }
 }
 
@@ -984,15 +1051,12 @@
 
 sub txn_begin {
   my $self = shift;
-  $self->ensure_connected();
   if($self->{transaction_depth} == 0) {
     $self->debugobj->txn_begin()
       if $self->debug;
-    # this isn't ->_dbh-> because
-    #  we should reconnect on begin_work
-    #  for AutoCommit users
     $self->_dbh_begin_work;
-  } elsif ($self->auto_savepoint) {
+  }
+  elsif ($self->auto_savepoint) {
     $self->svp_begin;
   }
   $self->{transaction_depth}++;
@@ -1000,7 +1064,12 @@
 
 sub _dbh_begin_work {
   my $self = shift;
-  $self->dbh->begin_work;
+  # being here implies we have AutoCommit => 1
+  # if the user is utilizing txn_do - good for
+  # him, otherwise we need to ensure that the
+  # $dbh is healthy on BEGIN
+  my $dbh_method = $self->{_in_dbh_do} ? '_dbh' : 'dbh';
+  $self->$dbh_method->begin_work;
 }
 
 sub txn_commit {
@@ -1178,7 +1247,11 @@
       my $col_info = $source->column_info($col);
 
       if ( $col_info->{auto_nextval} ) {
-        $updated_cols->{$col} = $to_insert->{$col} = $self->_sequence_fetch( 'nextval', $col_info->{sequence} || $self->_dbh_get_autoinc_seq($self->dbh, $source) );
+        $updated_cols->{$col} = $to_insert->{$col} = $self->_sequence_fetch(
+          'nextval',
+          $col_info->{sequence} ||
+            $self->_dbh_get_autoinc_seq($self->last_dbh, $source)
+        );
       }
     }
   }
@@ -1199,6 +1272,8 @@
   @colvalues{@$cols} = (0..$#$cols);
   my ($sql, @bind) = $self->sql_maker->insert($table, \%colvalues);
 
+  $self->_determine_driver;
+
   $self->_query_start( $sql, @bind );
   my $sth = $self->sth($sql);
 
@@ -1258,6 +1333,7 @@
 sub update {
   my $self = shift @_;
   my $source = shift @_;
+  $self->_determine_driver;
   my $bind_attributes = $self->source_bind_attributes($source);
 
   return $self->_execute('update' => [], $source, $bind_attributes, @_);
@@ -1267,7 +1343,7 @@
 sub delete {
   my $self = shift @_;
   my $source = shift @_;
-
+  $self->_determine_driver;
   my $bind_attrs = $self->source_bind_attributes($source);
 
   return $self->_execute('delete' => [], $source, $bind_attrs, @_);
@@ -1964,7 +2040,7 @@
 
 =cut
 
-sub sqlt_type { shift->dbh->{Driver}->{Name} }
+sub sqlt_type { shift->last_dbh->{Driver}->{Name} }
 
 =head2 bind_attribute_by_data_type
 
@@ -2211,7 +2287,7 @@
 sub deployment_statements {
   my ($self, $schema, $type, $version, $dir, $sqltargs) = @_;
   # Need to be connected to get the correct sqlt_type
-  $self->ensure_connected() unless $type;
+  $self->last_dbh() unless $type;
   $type ||= $self->sqlt_type;
   $version ||= $schema->schema_version || '1.x';
   $dir ||= './';
@@ -2256,7 +2332,10 @@
     return if $line =~ /^\s+$/; # skip whitespace only
     $self->_query_start($line);
     eval {
-      $self->dbh->do($line); # shouldn't be using ->dbh ?
+      # a previous error may invalidate $dbh - thus we need to use dbh()
+      # to guarantee a healthy $dbh (this is temporary until we get
+      # proper error handling on deploy() )
+      $self->dbh->do($line);
     };
     if ($@) {
       carp qq{$@ (running "${line}")};
@@ -2285,7 +2364,7 @@
 sub datetime_parser {
   my $self = shift;
   return $self->{datetime_parser} ||= do {
-    $self->ensure_connected;
+    $self->last_dbh;
     $self->build_datetime_parser(@_);
   };
 }
@@ -2386,7 +2465,7 @@
 
 DBIx::Class can do some wonderful magic with handling exceptions,
 disconnections, and transactions when you use C<< AutoCommit => 1 >>
-combined with C<txn_do> for transaction support.
+(the default) combined with C<txn_do> for transaction support.
 
 If you set C<< AutoCommit => 0 >> in your connect info, then you are always
 in an assumed transaction between commits, and you're telling us you'd
@@ -2398,7 +2477,6 @@
 be with raw DBI.
 
 
-
 =head1 AUTHORS
 
 Matt S. Trout <mst at shadowcatsystems.co.uk>

Modified: DBIx-Class/0.08/branches/sybase/lib/SQL/Translator/Parser/DBIx/Class.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/lib/SQL/Translator/Parser/DBIx/Class.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/lib/SQL/Translator/Parser/DBIx/Class.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -82,8 +82,9 @@
         my $source = $dbicschema->source($moniker);
         my $table_name = $source->name;
 
-        # Skip custom query sources
-        next if ref $table_name;
+        # FIXME - this isn't the right way to do it, but sqlt does not
+        # support quoting properly to be signaled about this
+        $table_name = $$table_name if ref $table_name eq 'SCALAR';
 
         # Its possible to have multiple DBIC sources using the same table
         next if $tables{$table_name};
@@ -142,6 +143,10 @@
             my $othertable = $source->related_source($rel);
             my $rel_table = $othertable->name;
 
+            # FIXME - this isn't the right way to do it, but sqlt does not
+            # support quoting properly to be signaled about this
+            $rel_table = $$rel_table if ref $rel_table eq 'SCALAR';
+
             my $reverse_rels = $source->reverse_relationship_info($rel);
             my ($otherrelname, $otherrelationship) = each %{$reverse_rels};
 
@@ -251,15 +256,33 @@
     ) {
       $schema->add_table ($tables{$table}{object});
       $tables{$table}{source} -> _invoke_sqlt_deploy_hook( $tables{$table}{object} );
+
+      # the hook might have already removed the table
+      if ($schema->get_table($table) && $table =~ /^ \s* \( \s* SELECT \s+/ix) {
+        warn <<'EOW';
+
+Custom SQL through ->name(\'( SELECT ...') is DEPRECATED, for more details see
+"Arbitrary SQL through a custom ResultSource" in DBIx::Class::Manual::Cookbook
+or http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class/Manual/Cookbook.pod
+
+EOW
+
+        # remove the table as there is no way someone might want to
+        # actually deploy this
+        $schema->drop_table ($table);
+      }
     }
 
-
     my %views;
     foreach my $moniker (sort @view_monikers)
     {
         my $source = $dbicschema->source($moniker);
         my $view_name = $source->name;
 
+        # FIXME - this isn't the right way to do it, but sqlt does not
+        # support quoting properly to be signaled about this
+        $view_name = $$view_name if ref $view_name eq 'SCALAR';
+
         # Skip custom query sources
         next if ref $view_name;
 

Modified: DBIx-Class/0.08/branches/sybase/t/19quotes.t
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/19quotes.t	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/t/19quotes.t	2009-08-08 22:41:12 UTC (rev 7269)
@@ -36,7 +36,7 @@
 eval { $rs->count };
 is_same_sql_bind(
   $sql, \@bind,
-  "SELECT COUNT( * ) FROM `cd` `me`  JOIN `artist` `artist` ON ( `artist`.`artistid` = `me`.`artist` ) WHERE ( `artist`.`name` = ? AND `me`.`year` = ? )", ["'Caterwauler McCrae'", "'2001'"],
+  "SELECT COUNT( * ) FROM cd `me`  JOIN `artist` `artist` ON ( `artist`.`artistid` = `me`.`artist` ) WHERE ( `artist`.`name` = ? AND `me`.`year` = ? )", ["'Caterwauler McCrae'", "'2001'"],
   'got correct SQL for count query with quoting'
 );
 
@@ -60,7 +60,7 @@
 eval { $rs->count };
 is_same_sql_bind(
   $sql, \@bind,
-  "SELECT COUNT( * ) FROM [cd] [me]  JOIN [artist] [artist] ON ( [artist].[artistid] = [me].[artist] ) WHERE ( [artist].[name] = ? AND [me].[year] = ? )", ["'Caterwauler McCrae'", "'2001'"],
+  "SELECT COUNT( * ) FROM cd [me]  JOIN [artist] [artist] ON ( [artist].[artistid] = [me].[artist] ) WHERE ( [artist].[name] = ? AND [me].[year] = ? )", ["'Caterwauler McCrae'", "'2001'"],
   'got correct SQL for count query with bracket quoting'
 );
 

Modified: DBIx-Class/0.08/branches/sybase/t/19quotes_newstyle.t
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/19quotes_newstyle.t	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/t/19quotes_newstyle.t	2009-08-08 22:41:12 UTC (rev 7269)
@@ -42,7 +42,7 @@
 eval { $rs->count };
 is_same_sql_bind(
   $sql, \@bind,
-  "SELECT COUNT( * ) FROM `cd` `me`  JOIN `artist` `artist` ON ( `artist`.`artistid` = `me`.`artist` ) WHERE ( `artist`.`name` = ? AND `me`.`year` = ? )", ["'Caterwauler McCrae'", "'2001'"],
+  "SELECT COUNT( * ) FROM cd `me`  JOIN `artist` `artist` ON ( `artist`.`artistid` = `me`.`artist` ) WHERE ( `artist`.`name` = ? AND `me`.`year` = ? )", ["'Caterwauler McCrae'", "'2001'"],
   'got correct SQL for count query with quoting'
 );
 
@@ -73,7 +73,7 @@
 eval { $rs->count };
 is_same_sql_bind(
   $sql, \@bind,
-  "SELECT COUNT( * ) FROM [cd] [me]  JOIN [artist] [artist] ON ( [artist].[artistid] = [me].[artist] ) WHERE ( [artist].[name] = ? AND [me].[year] = ? )", ["'Caterwauler McCrae'", "'2001'"],
+  "SELECT COUNT( * ) FROM cd [me]  JOIN [artist] [artist] ON ( [artist].[artistid] = [me].[artist] ) WHERE ( [artist].[name] = ? AND [me].[year] = ? )", ["'Caterwauler McCrae'", "'2001'"],
   'got correct SQL for count query with bracket quoting'
 );
 

Modified: DBIx-Class/0.08/branches/sybase/t/746mssql.t
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/746mssql.t	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/t/746mssql.t	2009-08-08 22:41:12 UTC (rev 7269)
@@ -158,13 +158,14 @@
   $row = $rs->create({ amount => 100 });
 } 'inserted a money value';
 
-is $rs->find($row->id)->amount, '100.00', 'money value round-trip';
+cmp_ok $rs->find($row->id)->amount, '==', 100, 'money value round-trip';
 
 lives_ok {
   $row->update({ amount => 200 });
 } 'updated a money value';
 
-is $rs->find($row->id)->amount, '200.00', 'updated money value round-trip';
+cmp_ok $rs->find($row->id)->amount, '==', 200,
+  'updated money value round-trip';
 
 lives_ok {
   $row->update({ amount => undef });
@@ -260,7 +261,7 @@
     is ($owners->page(3)->count, 2, 'has-many prefetch returns correct count');
     is ($owners->page(3)->count_rs->next, 2, 'has-many prefetch returns correct count_rs');
 
-    # make sure count does not become overly complex FIXME
+    # make sure count does not become overly complex
     is_same_sql_bind (
       $owners->page(3)->count_rs->as_query,
       '(
@@ -300,7 +301,7 @@
     is ($books->page(2)->count, 1, 'Prefetched grouped search returns correct count');
     is ($books->page(2)->count_rs->next, 1, 'Prefetched grouped search returns correct count_rs');
 
-    # make sure count does not become overly complex FIXME
+    # make sure count does not become overly complex (FIXME - the distinct-induced group_by is incorrect)
     is_same_sql_bind (
       $books->page(2)->count_rs->as_query,
       '(
@@ -310,7 +311,7 @@
               FROM [books] [me]
               JOIN [owners] [owner] ON [owner].[id] = [me].[owner]
             WHERE ( ( ( [owner].[name] = ? OR [owner].[name] = ? ) AND [source] = ? ) )
-            GROUP BY [me].[id], [me].[source], [me].[owner], [me].[title], [me].[price], [owner].[id], [owner].[name]
+            GROUP BY [me].[id], [me].[source], [me].[owner], [me].[title], [me].[price]
             ORDER BY [me].[id] DESC
           ) [count_subq]
       )',

Modified: DBIx-Class/0.08/branches/sybase/t/74mssql.t
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/74mssql.t	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/t/74mssql.t	2009-08-08 22:41:12 UTC (rev 7269)
@@ -103,12 +103,10 @@
       my ($storage, $dbh) = @_;
       eval { $dbh->do("DROP TABLE money_test") };
       $dbh->do(<<'SQL');
-
   CREATE TABLE money_test (
      id INT IDENTITY PRIMARY KEY,
      amount MONEY NULL
   )
-
 SQL
 
   });
@@ -120,19 +118,21 @@
     $row = $rs->create({ amount => 100 });
   } 'inserted a money value';
 
-  is $rs->find($row->id)->amount, 100, 'money value round-trip';
+  cmp_ok $rs->find($row->id)->amount, '==', 100, 'money value round-trip';
 
   lives_ok {
     $row->update({ amount => 200 });
   } 'updated a money value';
 
-  is $rs->find($row->id)->amount, 200, 'updated money value round-trip';
+  cmp_ok $rs->find($row->id)->amount, '==', 200,
+    'updated money value round-trip';
 
   lives_ok {
     $row->update({ amount => undef });
   } 'updated a money value to NULL';
 
-  is $rs->find($row->id)->amount, undef,'updated money value to NULL round-trip';
+  is $rs->find($row->id)->amount,
+    undef, 'updated money value to NULL round-trip';
 }
 
 # clean up our mess

Modified: DBIx-Class/0.08/branches/sybase/t/76select.t
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/76select.t	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/t/76select.t	2009-08-08 22:41:12 UTC (rev 7269)
@@ -64,6 +64,7 @@
 cmp_ok ($cds->count, '>', 2, 'Initially populated with more than 2 CDs');
 
 my $table = $cds->result_source->name;
+$table = $$table if ref $table eq 'SCALAR';
 my $subsel = $cds->search ({}, {
     columns => [qw/cdid title/],
     from => \ "(SELECT cdid, title FROM $table LIMIT 2) me",

Modified: DBIx-Class/0.08/branches/sybase/t/87ordered.t
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/87ordered.t	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/t/87ordered.t	2009-08-08 22:41:12 UTC (rev 7269)
@@ -10,8 +10,6 @@
 
 my $schema = DBICTest->init_schema();
 
-plan tests => 1269;
-
 my $employees = $schema->resultset('Employee');
 $employees->delete();
 
@@ -42,11 +40,9 @@
 my $group_3 = $employees->search({group_id=>3});
 my $to_group = 1;
 my $to_pos = undef;
-# now that we have transactions we need to work around stupid sqlite
 {
   my @empl = $group_3->all;
   while (my $employee = shift @empl) {
-    $employee->discard_changes;     # since we are effective shift()ing the $rs while doing this
     $employee->move_to_group($to_group, $to_pos);
     $to_pos++;
     $to_group = $to_group==1 ? 2 : 1;
@@ -54,7 +50,6 @@
 }
 foreach my $group_id (1..4) {
     my $group_employees = $employees->search({group_id=>$group_id});
-    $group_employees->all();
     ok( check_rs($group_employees), "group positions after move_to_group" );
 }
 
@@ -129,7 +124,6 @@
 my $to_group_2 = 1;
 $to_pos = undef;
 
-# now that we have transactions we need to work around stupid sqlite
 {
   my @empl = $group_3->all;
   while (my $employee = shift @empl) {
@@ -143,7 +137,6 @@
 foreach my $group_id_2 (1..4) {
     foreach my $group_id_3 (1..4) {
         my $group_employees = $employees->search({group_id_2=>$group_id_2,group_id_3=>$group_id_3});
-        $group_employees->all();
         ok( check_rs($group_employees), "group positions after move_to_group" );
     }
 }
@@ -275,3 +268,4 @@
     return 1;
 }
 
+done_testing;

Added: DBIx-Class/0.08/branches/sybase/t/92storage_ping_count.t
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/92storage_ping_count.t	                        (rev 0)
+++ DBIx-Class/0.08/branches/sybase/t/92storage_ping_count.t	2009-08-08 22:41:12 UTC (rev 7269)
@@ -0,0 +1,63 @@
+use strict;
+use warnings;  
+
+use Test::More;
+use lib qw(t/lib);
+use DBICTest;
+use Data::Dumper;
+use DBIC::SqlMakerTest;
+
+my $ping_count = 0;
+
+{
+  local $SIG{__WARN__} = sub {};
+  require DBIx::Class::Storage::DBI;
+
+  my $ping = \&DBIx::Class::Storage::DBI::_ping;
+
+  *DBIx::Class::Storage::DBI::_ping = sub {
+    $ping_count++;
+    goto &$ping;
+  };
+}
+
+
+# We do not count pings during deploy() because of the flux
+# around sqlt. Eventually there should be no pings at all
+my $schema = DBICTest->init_schema( sqlite_use_file => 1, no_populate => 1 );
+
+TODO: {
+  local $TODO = 'Unable to fix before proper deploy() error handling';
+  is ($ping_count, 0, 'no _ping() calls during deploy');
+  $ping_count = 0;
+}
+
+DBICTest->populate_schema ($schema);
+
+# perform some operations and make sure they don't ping
+
+$schema->resultset('CD')->create({
+  cdid => 6, artist => 3, title => 'mtfnpy', year => 2009
+});
+
+$schema->resultset('CD')->create({
+  cdid => 7, artist => 3, title => 'mtfnpy2', year => 2009
+});
+
+$schema->storage->_dbh->disconnect;
+
+$schema->resultset('CD')->create({
+  cdid => 8, artist => 3, title => 'mtfnpy3', year => 2009
+});
+
+$schema->storage->_dbh->disconnect;
+
+$schema->txn_do(sub {
+ $schema->resultset('CD')->create({
+   cdid => 9, artist => 3, title => 'mtfnpy4', year => 2009
+ });
+});
+
+is $ping_count, 0, 'no _ping() calls';
+
+done_testing;

Modified: DBIx-Class/0.08/branches/sybase/t/93storage_replication.t
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/93storage_replication.t	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/t/93storage_replication.t	2009-08-08 22:41:12 UTC (rev 7269)
@@ -11,9 +11,7 @@
 
 BEGIN {
     eval "use DBIx::Class::Storage::DBI::Replicated; use Test::Moose";
-    plan $@
-        ? ( skip_all => "Deps not installed: $@" )
-        : ( tests => 126 );
+    plan skip_all => "Deps not installed: $@" if $@;
 }
 
 use_ok 'DBIx::Class::Storage::DBI::Replicated::Pool';
@@ -33,7 +31,7 @@
     will try to test those.  If you do that, it will assume the setup is properly
     replicating.  Your results may vary, but I have demonstrated this to work with
     mysql native replication.
-    
+
 =cut
 
 
@@ -46,26 +44,26 @@
     ## --------------------------------------------------------------------- ##
     ## Create an object to contain your replicated stuff.
     ## --------------------------------------------------------------------- ##
-    
+
     package DBIx::Class::DBI::Replicated::TestReplication;
-   
+
     use DBICTest;
     use base qw/Class::Accessor::Fast/;
-    
+
     __PACKAGE__->mk_accessors( qw/schema/ );
 
     ## Initialize the object
-    
-	sub new {
-	    my ($class, $schema_method) = (shift, shift);
-	    my $self = $class->SUPER::new(@_);
-	
-	    $self->schema( $self->init_schema($schema_method) );
-	    return $self;
-	}
-    
+
+    sub new {
+        my ($class, $schema_method) = (shift, shift);
+        my $self = $class->SUPER::new(@_);
+
+        $self->schema( $self->init_schema($schema_method) );
+        return $self;
+    }
+
     ## Get the Schema and set the replication storage type
-    
+
     sub init_schema {
         # current SQLT SQLite producer does not handle DROP TABLE IF EXISTS, trap warnings here
         local $SIG{__WARN__} = sub { warn @_ unless $_[0] =~ /no such table.+DROP TABLE/ };
@@ -86,7 +84,7 @@
             balancer_type=>'::Random',
             balancer_args=>{
               auto_validate_every=>100,
-	      master_read_weight => 1
+          master_read_weight => 1
             },
           }
         },
@@ -103,7 +101,7 @@
         balancer_type=>'::Random',
         balancer_args=> {
           auto_validate_every=>100,
-	  master_read_weight => 1
+      master_read_weight => 1
         },
         deploy_args=>{
           add_drop_table => 1,
@@ -135,50 +133,50 @@
 
     no Moose;
     }
-  
+
     ## --------------------------------------------------------------------- ##
     ## Subclass for when you are using SQLite for testing, this provides a fake
     ## replication support.
     ## --------------------------------------------------------------------- ##
-        
+
     package DBIx::Class::DBI::Replicated::TestReplication::SQLite;
 
     use DBICTest;
-    use File::Copy;    
+    use File::Copy;
     use base 'DBIx::Class::DBI::Replicated::TestReplication';
-    
+
     __PACKAGE__->mk_accessors(qw/master_path slave_paths/);
-    
+
     ## Set the master path from DBICTest
-    
-	sub new {
-	    my $class = shift @_;
-	    my $self = $class->SUPER::new(@_);
-	
-	    $self->master_path( DBICTest->_sqlite_dbfilename );
-	    $self->slave_paths([
-			File::Spec->catfile(qw/t var DBIxClass_slave1.db/),
-			File::Spec->catfile(qw/t var DBIxClass_slave2.db/),
-		]);
-        
-	    return $self;
-	}    
-	
+
+    sub new {
+        my $class = shift @_;
+        my $self = $class->SUPER::new(@_);
+
+        $self->master_path( DBICTest->_sqlite_dbfilename );
+        $self->slave_paths([
+            File::Spec->catfile(qw/t var DBIxClass_slave1.db/),
+            File::Spec->catfile(qw/t var DBIxClass_slave2.db/),
+        ]);
+
+        return $self;
+    }
+
     ## Return an Array of ArrayRefs where each ArrayRef is suitable to use for
     ## $storage->connect_info to be used for connecting replicants.
-    
+
     sub generate_replicant_connect_info {
         my $self = shift @_;
         my @dsn = map {
             "dbi:SQLite:${_}";
         } @{$self->slave_paths};
-        
+
         my @connect_infos = map { [$_,'','',{AutoCommit=>1}] } @dsn;
 
-		## Make sure nothing is left over from a failed test
-		$self->cleanup;
+        ## Make sure nothing is left over from a failed test
+        $self->cleanup;
 
-		## try a hashref too
+        ## try a hashref too
         my $c = $connect_infos[0];
         $connect_infos[0] = {
           dsn => $c->[0],
@@ -193,25 +191,25 @@
     ## Do a 'good enough' replication by copying the master dbfile over each of
     ## the slave dbfiles.  If the master is SQLite we do this, otherwise we
     ## just do a one second pause to let the slaves catch up.
-    
+
     sub replicate {
         my $self = shift @_;
         foreach my $slave (@{$self->slave_paths}) {
             copy($self->master_path, $slave);
         }
     }
-    
+
     ## Cleanup after ourselves.  Unlink all gthe slave paths.
-    
+
     sub cleanup {
         my $self = shift @_;
         foreach my $slave (@{$self->slave_paths}) {
-			if(-e $slave) {
-				unlink $slave;
-			}
-        }     
+            if(-e $slave) {
+                unlink $slave;
+            }
+        }
     }
-    
+
     ## --------------------------------------------------------------------- ##
     ## Subclass for when you are setting the databases via custom export vars
     ## This is for when you have a replicating database setup that you are
@@ -219,25 +217,25 @@
     ## two slave databases to test against, as well as a replication system
     ## that will replicate in less than 1 second.
     ## --------------------------------------------------------------------- ##
-        
-    package DBIx::Class::DBI::Replicated::TestReplication::Custom; 
+
+    package DBIx::Class::DBI::Replicated::TestReplication::Custom;
     use base 'DBIx::Class::DBI::Replicated::TestReplication';
-    
+
     ## Return an Array of ArrayRefs where each ArrayRef is suitable to use for
     ## $storage->connect_info to be used for connecting replicants.
-    
-    sub generate_replicant_connect_info { 
+
+    sub generate_replicant_connect_info {
         return (
             [$ENV{"DBICTEST_SLAVE0_DSN"}, $ENV{"DBICTEST_SLAVE0_DBUSER"}, $ENV{"DBICTEST_SLAVE0_DBPASS"}, {AutoCommit => 1}],
-            [$ENV{"DBICTEST_SLAVE1_DSN"}, $ENV{"DBICTEST_SLAVE1_DBUSER"}, $ENV{"DBICTEST_SLAVE1_DBPASS"}, {AutoCommit => 1}],           
+            [$ENV{"DBICTEST_SLAVE1_DSN"}, $ENV{"DBICTEST_SLAVE1_DBUSER"}, $ENV{"DBICTEST_SLAVE1_DBPASS"}, {AutoCommit => 1}],
         );
     }
-    
-    ## pause a bit to let the replication catch up 
-    
+
+    ## pause a bit to let the replication catch up
+
     sub replicate {
-    	sleep 1;
-    } 
+        sleep 1;
+    }
 }
 
 ## ----------------------------------------------------------------------------
@@ -253,12 +251,13 @@
 my $replicated;
 
 for my $method (qw/by_connect_info by_storage_type/) {
+  undef $replicated;
   ok $replicated = $replicated_class->new($method)
       => "Created a replication object $method";
-      
+
   isa_ok $replicated->schema
       => 'DBIx::Class::Schema';
-      
+
   isa_ok $replicated->schema->storage
       => 'DBIx::Class::Storage::DBI::Replicated';
 
@@ -269,15 +268,15 @@
 
 ok $replicated->schema->storage->meta
     => 'has a meta object';
-    
+
 isa_ok $replicated->schema->storage->master
     => 'DBIx::Class::Storage::DBI';
-    
+
 isa_ok $replicated->schema->storage->pool
     => 'DBIx::Class::Storage::DBI::Replicated::Pool';
-    
+
 does_ok $replicated->schema->storage->balancer
-    => 'DBIx::Class::Storage::DBI::Replicated::Balancer'; 
+    => 'DBIx::Class::Storage::DBI::Replicated::Balancer';
 
 ok my @replicant_connects = $replicated->generate_replicant_connect_info
     => 'got replication connect information';
@@ -288,14 +287,14 @@
 our %debug;
 $replicated->schema->storage->debug(1);
 $replicated->schema->storage->debugcb(sub {
-	my ($op, $info) = @_;
-	##warn "\n$op, $info\n";
-	%debug = (
-		op => $op,
-		info => $info,
-		dsn => ($info=~m/\[(.+)\]/)[0],
-		storage_type => $info=~m/REPLICANT/ ? 'REPLICANT' : 'MASTER',
-	);
+    my ($op, $info) = @_;
+    ##warn "\n$op, $info\n";
+    %debug = (
+        op => $op,
+        info => $info,
+        dsn => ($info=~m/\[(.+)\]/)[0],
+        storage_type => $info=~m/REPLICANT/ ? 'REPLICANT' : 'MASTER',
+    );
 });
 
 ok my @all_storages = $replicated->schema->storage->all_storages
@@ -316,7 +315,7 @@
 is ((grep $_->{master_option}, @all_storage_opts),
     3
     => 'connect_info was merged from master to replicants');
- 
+
 my @replicant_names = keys %{ $replicated->schema->storage->replicants };
 
 ok @replicant_names, "found replicant names @replicant_names";
@@ -325,29 +324,29 @@
 ## sqlite dbs.
 $replicated->schema->storage->debugobj->silence(1)
   if first { m{^t/} } @replicant_names;
-   
+
 isa_ok $replicated->schema->storage->balancer->current_replicant
-    => 'DBIx::Class::Storage::DBI'; 
+    => 'DBIx::Class::Storage::DBI';
 
 $replicated->schema->storage->debugobj->silence(0);
 
 ok $replicated->schema->storage->pool->has_replicants
-    => 'does have replicants';     
+    => 'does have replicants';
 
 is $replicated->schema->storage->pool->num_replicants => 2
     => 'has two replicants';
-       
+
 does_ok $replicated_storages[0]
     => 'DBIx::Class::Storage::DBI::Replicated::Replicant';
 
 does_ok $replicated_storages[1]
     => 'DBIx::Class::Storage::DBI::Replicated::Replicant';
-    
+
 does_ok $replicated->schema->storage->replicants->{$replicant_names[0]}
     => 'DBIx::Class::Storage::DBI::Replicated::Replicant';
 
 does_ok $replicated->schema->storage->replicants->{$replicant_names[1]}
-    => 'DBIx::Class::Storage::DBI::Replicated::Replicant';  
+    => 'DBIx::Class::Storage::DBI::Replicated::Replicant';
 
 ## Add some info to the database
 
@@ -358,11 +357,11 @@
         [ 4, "Ozric Tentacles"],
     ]);
 
-	is $debug{storage_type}, 'MASTER', 
-		"got last query from a master: $debug{dsn}";
-	
-	like $debug{info}, qr/INSERT/, 'Last was an insert';
-                
+    is $debug{storage_type}, 'MASTER',
+        "got last query from a master: $debug{dsn}";
+
+    like $debug{info}, qr/INSERT/, 'Last was an insert';
+
 ## Make sure all the slaves have the table definitions
 
 $replicated->replicate;
@@ -373,7 +372,7 @@
 ## sqlite dbs.
 $replicated->schema->storage->debugobj->silence(1)
   if first { m{^t/} } @replicant_names;
- 
+
 $replicated->schema->storage->pool->validate_replicants;
 
 $replicated->schema->storage->debugobj->silence(0);
@@ -385,12 +384,12 @@
 
 ## We removed testing here since master read weight is on, so we can't tell in
 ## advance what storage to expect.  We turn master read weight off a bit lower
-## is $debug{storage_type}, 'REPLICANT' 
-## 	=> "got last query from a replicant: $debug{dsn}, $debug{info}";
+## is $debug{storage_type}, 'REPLICANT'
+##     => "got last query from a replicant: $debug{dsn}, $debug{info}";
 
 isa_ok $artist1
     => 'DBICTest::Artist';
-    
+
 is $artist1->name, 'Ozric Tentacles'
     => 'Found expected name for first result';
 
@@ -400,7 +399,7 @@
 
     local
     *DBIx::Class::Storage::DBI::Replicated::Balancer::Random::_random_number =
-	sub { 999 };
+    sub { 999 };
 
     $replicated->schema->storage->balancer->increment_storage;
 
@@ -426,11 +425,11 @@
         [ 7, "Watergate"],
     ]);
 
-	is $debug{storage_type}, 'MASTER', 
-		"got last query from a master: $debug{dsn}";
-	
-	like $debug{info}, qr/INSERT/, 'Last was an insert';
+    is $debug{storage_type}, 'MASTER',
+        "got last query from a master: $debug{dsn}";
 
+    like $debug{info}, qr/INSERT/, 'Last was an insert';
+
 ## Make sure all the slaves have the table definitions
 $replicated->replicate;
 
@@ -439,12 +438,12 @@
 ok my $artist2 = $replicated->schema->resultset('Artist')->find(5)
     => 'Sync succeed';
 
-is $debug{storage_type}, 'REPLICANT' 
-	=> "got last query from a replicant: $debug{dsn}";
-	    
+is $debug{storage_type}, 'REPLICANT'
+    => "got last query from a replicant: $debug{dsn}";
+
 isa_ok $artist2
     => 'DBICTest::Artist';
-    
+
 is $artist2->name, "Doom's Children"
     => 'Found expected name for first result';
 
@@ -452,7 +451,7 @@
 
 is $replicated->schema->storage->pool->connected_replicants => 2
     => "both replicants are connected";
-    
+
 $replicated->schema->storage->replicants->{$replicant_names[0]}->disconnect;
 $replicated->schema->storage->replicants->{$replicant_names[1]}->disconnect;
 
@@ -464,51 +463,51 @@
 ok my $artist3 = $replicated->schema->resultset('Artist')->find(6)
     => 'Still finding stuff.';
 
-is $debug{storage_type}, 'REPLICANT' 
-	=> "got last query from a replicant: $debug{dsn}";
-	    
+is $debug{storage_type}, 'REPLICANT'
+    => "got last query from a replicant: $debug{dsn}";
+
 isa_ok $artist3
     => 'DBICTest::Artist';
-    
+
 is $artist3->name, "Dead On Arrival"
     => 'Found expected name for first result';
 
 is $replicated->schema->storage->pool->connected_replicants => 1
     => "At Least One replicant reconnected to handle the job";
-    
+
 ## What happens when we try to select something that doesn't exist?
 
 ok ! $replicated->schema->resultset('Artist')->find(666)
     => 'Correctly failed to find something.';
 
-is $debug{storage_type}, 'REPLICANT' 
-	=> "got last query from a replicant: $debug{dsn}";
-		    
+is $debug{storage_type}, 'REPLICANT'
+    => "got last query from a replicant: $debug{dsn}";
+
 ## test the reliable option
 
 TESTRELIABLE: {
-	
-	$replicated->schema->storage->set_reliable_storage;
-	
-	ok $replicated->schema->resultset('Artist')->find(2)
-	    => 'Read from master 1';
 
-	is $debug{storage_type}, 'MASTER', 
-		"got last query from a master: $debug{dsn}";
-			
-	ok $replicated->schema->resultset('Artist')->find(5)
-	    => 'Read from master 2';
+    $replicated->schema->storage->set_reliable_storage;
 
-	is $debug{storage_type}, 'MASTER', 
-		"got last query from a master: $debug{dsn}";
-			    
-    $replicated->schema->storage->set_balanced_storage;	    
-	    
-	ok $replicated->schema->resultset('Artist')->find(3)
+    ok $replicated->schema->resultset('Artist')->find(2)
+        => 'Read from master 1';
+
+    is $debug{storage_type}, 'MASTER',
+        "got last query from a master: $debug{dsn}";
+
+    ok $replicated->schema->resultset('Artist')->find(5)
+        => 'Read from master 2';
+
+    is $debug{storage_type}, 'MASTER',
+        "got last query from a master: $debug{dsn}";
+
+    $replicated->schema->storage->set_balanced_storage;
+
+    ok $replicated->schema->resultset('Artist')->find(3)
         => 'Read from replicant';
 
-	is $debug{storage_type}, 'REPLICANT', 
-		"got last query from a replicant: $debug{dsn}";
+    is $debug{storage_type}, 'REPLICANT',
+        "got last query from a replicant: $debug{dsn}";
 }
 
 ## Make sure when reliable goes out of scope, we are using replicants again
@@ -516,14 +515,14 @@
 ok $replicated->schema->resultset('Artist')->find(1)
     => 'back to replicant 1.';
 
-	is $debug{storage_type}, 'REPLICANT', 
-		"got last query from a replicant: $debug{dsn}";
-		    
+    is $debug{storage_type}, 'REPLICANT',
+        "got last query from a replicant: $debug{dsn}";
+
 ok $replicated->schema->resultset('Artist')->find(2)
     => 'back to replicant 2.';
 
-	is $debug{storage_type}, 'REPLICANT', 
-		"got last query from a replicant: $debug{dsn}";
+    is $debug{storage_type}, 'REPLICANT',
+        "got last query from a replicant: $debug{dsn}";
 
 ## set all the replicants to inactive, and make sure the balancer falls back to
 ## the master.
@@ -538,13 +537,13 @@
     $replicated->schema->storage->debugfh($debugfh);
 
     ok $replicated->schema->resultset('Artist')->find(2)
-		=> 'Fallback to master';
+        => 'Fallback to master';
 
-	is $debug{storage_type}, 'MASTER', 
-		"got last query from a master: $debug{dsn}";
+    is $debug{storage_type}, 'MASTER',
+        "got last query from a master: $debug{dsn}";
 
     like $fallback_warning, qr/falling back to master/
-		=> 'emits falling back to master warning';
+        => 'emits falling back to master warning';
 
     $replicated->schema->storage->debugfh($oldfh);
 }
@@ -556,7 +555,7 @@
 ## sqlite dbs.
 $replicated->schema->storage->debugobj->silence(1)
   if first { m{^t/} } @replicant_names;
- 
+
 $replicated->schema->storage->pool->validate_replicants;
 
 $replicated->schema->storage->debugobj->silence(0);
@@ -564,89 +563,89 @@
 ok $replicated->schema->resultset('Artist')->find(2)
     => 'Returned to replicates';
 
-is $debug{storage_type}, 'REPLICANT', 
-	"got last query from a replicant: $debug{dsn}";
-    
+is $debug{storage_type}, 'REPLICANT',
+    "got last query from a replicant: $debug{dsn}";
+
 ## Getting slave status tests
 
 SKIP: {
     ## We skip this tests unless you have a custom replicants, since the default
     ## sqlite based replication tests don't support these functions.
-    
-    skip 'Cannot Test Replicant Status on Non Replicating Database', 10 
+
+    skip 'Cannot Test Replicant Status on Non Replicating Database', 10
      unless DBICTest->has_custom_dsn && $ENV{"DBICTEST_SLAVE0_DSN"};
 
     $replicated->replicate; ## Give the slaves a chance to catchup.
 
-	ok $replicated->schema->storage->replicants->{$replicant_names[0]}->is_replicating
-	    => 'Replicants are replicating';
-	    
-	is $replicated->schema->storage->replicants->{$replicant_names[0]}->lag_behind_master, 0
-	    => 'Replicant is zero seconds behind master';
-	    
-	## Test the validate replicants
-	
-	$replicated->schema->storage->pool->validate_replicants;
-	
-	is $replicated->schema->storage->pool->active_replicants, 2
-	    => 'Still have 2 replicants after validation';
-	    
-	## Force the replicants to fail the validate test by required their lag to
-	## be negative (ie ahead of the master!)
-	
+    ok $replicated->schema->storage->replicants->{$replicant_names[0]}->is_replicating
+        => 'Replicants are replicating';
+
+    is $replicated->schema->storage->replicants->{$replicant_names[0]}->lag_behind_master, 0
+        => 'Replicant is zero seconds behind master';
+
+    ## Test the validate replicants
+
+    $replicated->schema->storage->pool->validate_replicants;
+
+    is $replicated->schema->storage->pool->active_replicants, 2
+        => 'Still have 2 replicants after validation';
+
+    ## Force the replicants to fail the validate test by required their lag to
+    ## be negative (ie ahead of the master!)
+
     $replicated->schema->storage->pool->maximum_lag(-10);
     $replicated->schema->storage->pool->validate_replicants;
-    
+
     is $replicated->schema->storage->pool->active_replicants, 0
         => 'No way a replicant be be ahead of the master';
-        
+
     ## Let's be fair to the replicants again.  Let them lag up to 5
-	
+
     $replicated->schema->storage->pool->maximum_lag(5);
     $replicated->schema->storage->pool->validate_replicants;
-    
+
     is $replicated->schema->storage->pool->active_replicants, 2
-        => 'Both replicants in good standing again';	
-        
-	## Check auto validate
-	
-	is $replicated->schema->storage->balancer->auto_validate_every, 100
-	    => "Got the expected value for auto validate";
-	    
-		## This will make sure we auto validatge everytime
-		$replicated->schema->storage->balancer->auto_validate_every(0);
-		
-		## set all the replicants to inactive, and make sure the balancer falls back to
-		## the master.
-		
-		$replicated->schema->storage->replicants->{$replicant_names[0]}->active(0);
-		$replicated->schema->storage->replicants->{$replicant_names[1]}->active(0);
-		
-		## Ok, now when we go to run a query, autovalidate SHOULD reconnect
-	
-	is $replicated->schema->storage->pool->active_replicants => 0
-	    => "both replicants turned off";
-	    	
-	ok $replicated->schema->resultset('Artist')->find(5)
-	    => 'replicant reactivated';
+        => 'Both replicants in good standing again';
 
-	is $debug{storage_type}, 'REPLICANT',
-		"got last query from a replicant: $debug{dsn}";
-	    
-	is $replicated->schema->storage->pool->active_replicants => 2
-	    => "both replicants reactivated";        
+    ## Check auto validate
+
+    is $replicated->schema->storage->balancer->auto_validate_every, 100
+        => "Got the expected value for auto validate";
+
+        ## This will make sure we auto validatge everytime
+        $replicated->schema->storage->balancer->auto_validate_every(0);
+
+        ## set all the replicants to inactive, and make sure the balancer falls back to
+        ## the master.
+
+        $replicated->schema->storage->replicants->{$replicant_names[0]}->active(0);
+        $replicated->schema->storage->replicants->{$replicant_names[1]}->active(0);
+
+        ## Ok, now when we go to run a query, autovalidate SHOULD reconnect
+
+    is $replicated->schema->storage->pool->active_replicants => 0
+        => "both replicants turned off";
+
+    ok $replicated->schema->resultset('Artist')->find(5)
+        => 'replicant reactivated';
+
+    is $debug{storage_type}, 'REPLICANT',
+        "got last query from a replicant: $debug{dsn}";
+
+    is $replicated->schema->storage->pool->active_replicants => 2
+        => "both replicants reactivated";
 }
 
 ## Test the reliably callback
 
 ok my $reliably = sub {
-	
+
     ok $replicated->schema->resultset('Artist')->find(5)
         => 'replicant reactivated';
 
-	is $debug{storage_type}, 'MASTER',
-		"got last query from a master: $debug{dsn}";
-	
+    is $debug{storage_type}, 'MASTER',
+        "got last query from a master: $debug{dsn}";
+
 } => 'created coderef properly';
 
 $replicated->schema->storage->execute_reliably($reliably);
@@ -654,95 +653,95 @@
 ## Try something with an error
 
 ok my $unreliably = sub {
-    
+
     ok $replicated->schema->resultset('ArtistXX')->find(5)
-        => 'replicant reactivated'; 
-    
+        => 'replicant reactivated';
+
 } => 'created coderef properly';
 
-throws_ok {$replicated->schema->storage->execute_reliably($unreliably)} 
+throws_ok {$replicated->schema->storage->execute_reliably($unreliably)}
     qr/Can't find source for ArtistXX/
     => 'Bad coderef throws proper error';
-    
+
 ## Make sure replication came back
 
 ok $replicated->schema->resultset('Artist')->find(3)
     => 'replicant reactivated';
 
 is $debug{storage_type}, 'REPLICANT', "got last query from a replicant: $debug{dsn}";
-    
+
 ## make sure transactions are set to execute_reliably
 
 ok my $transaction = sub {
-	
-	my $id = shift @_;
-	
-	$replicated
-	    ->schema
-	    ->populate('Artist', [
-	        [ qw/artistid name/ ],
-	        [ $id, "Children of the Grave"],
-	    ]);
-	    
+
+    my $id = shift @_;
+
+    $replicated
+        ->schema
+        ->populate('Artist', [
+            [ qw/artistid name/ ],
+            [ $id, "Children of the Grave"],
+        ]);
+
     ok my $result = $replicated->schema->resultset('Artist')->find($id)
         => "Found expected artist for $id";
 
-	is $debug{storage_type}, 'MASTER',
-		"got last query from a master: $debug{dsn}";
-			        
+    is $debug{storage_type}, 'MASTER',
+        "got last query from a master: $debug{dsn}";
+
     ok my $more = $replicated->schema->resultset('Artist')->find(1)
         => 'Found expected artist again for 1';
 
-	is $debug{storage_type}, 'MASTER',
-		"got last query from a master: $debug{dsn}";
-			        
+    is $debug{storage_type}, 'MASTER',
+        "got last query from a master: $debug{dsn}";
+
    return ($result, $more);
-   
+
 } => 'Created a coderef properly';
 
 ## Test the transaction with multi return
 {
-	ok my @return = $replicated->schema->txn_do($transaction, 666)
-	    => 'did transaction';
-	    
-	    is $return[0]->id, 666
-	        => 'first returned value is correct';
+    ok my @return = $replicated->schema->txn_do($transaction, 666)
+        => 'did transaction';
 
-		is $debug{storage_type}, 'MASTER',
-		    "got last query from a master: $debug{dsn}";
-	        
-	    is $return[1]->id, 1
-	        => 'second returned value is correct';
+        is $return[0]->id, 666
+            => 'first returned value is correct';
 
-		is $debug{storage_type}, 'MASTER',
-		     "got last query from a master: $debug{dsn}";
+        is $debug{storage_type}, 'MASTER',
+            "got last query from a master: $debug{dsn}";
 
+        is $return[1]->id, 1
+            => 'second returned value is correct';
+
+        is $debug{storage_type}, 'MASTER',
+             "got last query from a master: $debug{dsn}";
+
 }
 
 ## Test that asking for single return works
 {
-	ok my @return = $replicated->schema->txn_do($transaction, 777)
-	    => 'did transaction';
-	    
-	    is $return[0]->id, 777
-	        => 'first returned value is correct';
-	        
-	    is $return[1]->id, 1
-	        => 'second returned value is correct';
+    ok my @return = $replicated->schema->txn_do($transaction, 777)
+        => 'did transaction';
+
+        is $return[0]->id, 777
+            => 'first returned value is correct';
+
+        is $return[1]->id, 1
+            => 'second returned value is correct';
 }
 
 ## Test transaction returning a single value
 
 {
-	ok my $result = $replicated->schema->txn_do(sub {
-		ok my $more = $replicated->schema->resultset('Artist')->find(1)
-		=> 'found inside a transaction';
-		is $debug{storage_type}, 'MASTER', "got last query from a master: $debug{dsn}";
-		return $more;
-	}) => 'successfully processed transaction';
-	
-	is $result->id, 1
-	   => 'Got expected single result from transaction';
+    ok my $result = $replicated->schema->txn_do(sub {
+        ok my $more = $replicated->schema->resultset('Artist')->find(1)
+        => 'found inside a transaction';
+        is $debug{storage_type}, 'MASTER', "got last query from a master: $debug{dsn}";
+        return $more;
+    }) => 'successfully processed transaction';
+
+    is $result->id, 1
+       => 'Got expected single result from transaction';
 }
 
 ## Make sure replication came back
@@ -751,88 +750,104 @@
     => 'replicant reactivated';
 
 is $debug{storage_type}, 'REPLICANT', "got last query from a replicant: $debug{dsn}";
-    
+
 ## Test Discard changes
 
 {
-	ok my $artist = $replicated->schema->resultset('Artist')->find(2)
-	    => 'got an artist to test discard changes';
+    ok my $artist = $replicated->schema->resultset('Artist')->find(2)
+        => 'got an artist to test discard changes';
 
-	is $debug{storage_type}, 'REPLICANT', "got last query from a replicant: $debug{dsn}";
+    is $debug{storage_type}, 'REPLICANT', "got last query from a replicant: $debug{dsn}";
 
-	ok $artist->get_from_storage({force_pool=>'master'})
-	   => 'properly discard changes';
+    ok $artist->get_from_storage({force_pool=>'master'})
+       => 'properly discard changes';
 
-	is $debug{storage_type}, 'MASTER', "got last query from a master: $debug{dsn}";
+    is $debug{storage_type}, 'MASTER', "got last query from a master: $debug{dsn}";
 
+    ok $artist->discard_changes({force_pool=>'master'})
+       => 'properly called discard_changes against master (manual attrs)';
+
+    is $debug{storage_type}, 'MASTER', "got last query from a master: $debug{dsn}";
+
+    ok $artist->discard_changes()
+       => 'properly called discard_changes against master (default attrs)';
+
+    is $debug{storage_type}, 'MASTER', "got last query from a master: $debug{dsn}";
+
+    ok $artist->discard_changes({force_pool=>$replicant_names[0]})
+       => 'properly able to override the default attributes';
+
+    is $debug{storage_type}, 'REPLICANT', "got last query from a replicant: $debug{dsn}"
 }
 
 ## Test some edge cases, like trying to do a transaction inside a transaction, etc
 
 {
     ok my $result = $replicated->schema->txn_do(sub {
-    	return $replicated->schema->txn_do(sub {
-	        ok my $more = $replicated->schema->resultset('Artist')->find(1)
-	        => 'found inside a transaction inside a transaction';
-			is $debug{storage_type}, 'MASTER', "got last query from a master: $debug{dsn}";
-	        return $more;    		
-    	});
+        return $replicated->schema->txn_do(sub {
+            ok my $more = $replicated->schema->resultset('Artist')->find(1)
+            => 'found inside a transaction inside a transaction';
+            is $debug{storage_type}, 'MASTER', "got last query from a master: $debug{dsn}";
+            return $more;
+        });
     }) => 'successfully processed transaction';
-    
+
     is $result->id, 1
-       => 'Got expected single result from transaction';	  
+       => 'Got expected single result from transaction';
 }
 
 {
     ok my $result = $replicated->schema->txn_do(sub {
-    	return $replicated->schema->storage->execute_reliably(sub {
-	    	return $replicated->schema->txn_do(sub {
-	    		return $replicated->schema->storage->execute_reliably(sub {
-			        ok my $more = $replicated->schema->resultset('Artist')->find(1)
-			          => 'found inside crazy deep transactions and execute_reliably';
-					is $debug{storage_type}, 'MASTER', "got last query from a master: $debug{dsn}";
-			        return $more; 	    			
-	    		});
-	    	});    	
-    	});
+        return $replicated->schema->storage->execute_reliably(sub {
+            return $replicated->schema->txn_do(sub {
+                return $replicated->schema->storage->execute_reliably(sub {
+                    ok my $more = $replicated->schema->resultset('Artist')->find(1)
+                      => 'found inside crazy deep transactions and execute_reliably';
+                    is $debug{storage_type}, 'MASTER', "got last query from a master: $debug{dsn}";
+                    return $more;
+                });
+            });
+        });
     }) => 'successfully processed transaction';
-    
+
     is $result->id, 1
-       => 'Got expected single result from transaction';	  
-}     
+       => 'Got expected single result from transaction';
+}
 
 ## Test the force_pool resultset attribute.
 
 {
-	ok my $artist_rs = $replicated->schema->resultset('Artist')
+    ok my $artist_rs = $replicated->schema->resultset('Artist')
         => 'got artist resultset';
-	   
-	## Turn on Forced Pool Storage
-	ok my $reliable_artist_rs = $artist_rs->search(undef, {force_pool=>'master'})
+
+    ## Turn on Forced Pool Storage
+    ok my $reliable_artist_rs = $artist_rs->search(undef, {force_pool=>'master'})
         => 'Created a resultset using force_pool storage';
-	   
-    ok my $artist = $reliable_artist_rs->find(2) 
+
+    ok my $artist = $reliable_artist_rs->find(2)
         => 'got an artist result via force_pool storage';
 
-	is $debug{storage_type}, 'MASTER', "got last query from a master: $debug{dsn}";
+    is $debug{storage_type}, 'MASTER', "got last query from a master: $debug{dsn}";
 }
 
 ## Test the force_pool resultset attribute part two.
 
 {
-	ok my $artist_rs = $replicated->schema->resultset('Artist')
+    ok my $artist_rs = $replicated->schema->resultset('Artist')
         => 'got artist resultset';
-	   
-	## Turn on Forced Pool Storage
-	ok my $reliable_artist_rs = $artist_rs->search(undef, {force_pool=>$replicant_names[0]})
+
+    ## Turn on Forced Pool Storage
+    ok my $reliable_artist_rs = $artist_rs->search(undef, {force_pool=>$replicant_names[0]})
         => 'Created a resultset using force_pool storage';
-	   
-    ok my $artist = $reliable_artist_rs->find(2) 
+
+    ok my $artist = $reliable_artist_rs->find(2)
         => 'got an artist result via force_pool storage';
 
-	is $debug{storage_type}, 'REPLICANT', "got last query from a replicant: $debug{dsn}";
+    is $debug{storage_type}, 'REPLICANT', "got last query from a replicant: $debug{dsn}";
 }
 ## Delete the old database files
 $replicated->cleanup;
 
+done_testing;
+
 # vim: sw=4 sts=4 :

Modified: DBIx-Class/0.08/branches/sybase/t/99dbic_sqlt_parser.t
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/99dbic_sqlt_parser.t	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/t/99dbic_sqlt_parser.t	2009-08-08 22:41:12 UTC (rev 7269)
@@ -29,7 +29,7 @@
 	my $sqlt_schema = create_schema({ schema => $schema, args => { parser_args => { } } });
 
 	foreach my $source (@sources) {
-		my $table = $sqlt_schema->get_table($schema->source($source)->from);
+		my $table = get_table($sqlt_schema, $schema, $source);
 
 		my $fk_count = scalar(grep { $_->type eq 'FOREIGN KEY' } $table->get_constraints);
 		my @indices = $table->get_indices;
@@ -43,7 +43,7 @@
 	my $sqlt_schema = create_schema({ schema => $schema, args => { parser_args => { add_fk_index => 1 } } });
 
 	foreach my $source (@sources) {
-		my $table = $sqlt_schema->get_table($schema->source($source)->from);
+		my $table = get_table($sqlt_schema, $schema, $source);
 
 		my $fk_count = scalar(grep { $_->type eq 'FOREIGN KEY' } $table->get_constraints);
 		my @indices = $table->get_indices;
@@ -57,7 +57,7 @@
 	my $sqlt_schema = create_schema({ schema => $schema, args => { parser_args => { add_fk_index => 0 } } });
 
 	foreach my $source (@sources) {
-		my $table = $sqlt_schema->get_table($schema->source($source)->from);
+		my $table = get_table($sqlt_schema, $schema, $source);
 
 		my @indices = $table->get_indices;
 		my $index_count = scalar(@indices);
@@ -83,3 +83,12 @@
 	$sqlt->parser('SQL::Translator::Parser::DBIx::Class');
 	return $sqlt->translate({ data => $schema }) or die $sqlt->error;
 }
+
+sub get_table {
+    my ($sqlt_schema, $schema, $source) = @_;
+
+    my $table_name = $schema->source($source)->from;
+    $table_name    = $$table_name if ref $table_name;
+
+    return $sqlt_schema->get_table($table_name);
+}

Modified: DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/CD.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/CD.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/CD.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -3,7 +3,10 @@
 
 use base qw/DBICTest::BaseResult/;
 
-__PACKAGE__->table('cd');
+# this tests table name as scalar ref
+# DO NOT REMOVE THE \
+__PACKAGE__->table(\'cd');
+
 __PACKAGE__->add_columns(
   'cdid' => {
     data_type => 'integer',

Modified: DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/CustomSql.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/CustomSql.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/CustomSql.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -12,4 +12,6 @@
   WHERE cd.year = ?)
 SQL
 
+sub sqlt_deploy_hook { $_[1]->schema->drop_table($_[1]) }
+
 1;

Modified: DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/Year1999CDs.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/Year1999CDs.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/Year1999CDs.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -3,7 +3,6 @@
 ## Used in 104view.t
 
 use base qw/DBICTest::BaseResult/;
-use DBIx::Class::ResultSource::View;
 
 __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
 

Modified: DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/Year2000CDs.pm
===================================================================
--- DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/Year2000CDs.pm	2009-08-08 22:35:40 UTC (rev 7268)
+++ DBIx-Class/0.08/branches/sybase/t/lib/DBICTest/Schema/Year2000CDs.pm	2009-08-08 22:41:12 UTC (rev 7269)
@@ -3,7 +3,6 @@
 ## Used in 104view.t
 
 use base qw/DBICTest::BaseResult/;
-use DBIx::Class::ResultSource::View;
 
 __PACKAGE__->table_class('DBIx::Class::ResultSource::View');
 




More information about the Bast-commits mailing list