11 years agoEven more distbuilding checks
Peter Rabbitson [Wed, 20 Feb 2013 09:35:00 +0000]
Even more distbuilding checks

Frew's environment (and *only* his environment) keeps producing weirdly
broken dists. Add an extra check for this until we figure out how exactly
his environment is broken.

Extra check tested on cygwin and strawberry for good measure.

11 years agoNew Test::Strict no longer detects Moose::Role (RT#83433) - workaround
Peter Rabbitson [Mon, 18 Feb 2013 20:22:26 +0000]
New Test::Strict no longer detects Moose::Role (RT#83433) - workaround

11 years agoReadjust the parallel no-test dependency install order
Peter Rabbitson [Sat, 16 Feb 2013 16:44:54 +0000]
Readjust the parallel no-test dependency install order

Better utilize the massive amount of CPUs we have available

11 years agoIt appears that travis drastically increased the amount of available CPUs
Peter Rabbitson [Sat, 16 Feb 2013 16:05:12 +0000]
It appears that travis drastically increased the amount of available CPUs

Well, this is awesome - we just happen to be equipped to take advantage
of this ;)

Remove the branch-name limitations - now a smoke takes fraction of the time
it used to, no point to limit what we smoke anymore.

At the same time reduce the amount of threads building the perls - older
binaries do not build very well on -j32. This is a temporary thing - the
perl-building will soon be exported away anyway.

11 years agoFix minor docs issues in ResultSet changes
Brendan Byrd [Fri, 15 Feb 2013 19:16:16 +0000]
Fix minor docs issues in ResultSet changes

11 years agoEXPERIMENTAL Release 0.08240 v0.08240
Peter Rabbitson [Thu, 14 Feb 2013 05:59:27 +0000]
EXPERIMENTAL Release 0.08240

Adjust the distbuilding to tag 240~249 releases as TRIAL, aiming for
0.08250 as "DBIC with sane prefetch".

Massive thanks to mna for enduring hours of pondering on the design and
implementation - this code would not exist without your help.

11 years agoRudimentary documentation
Peter Rabbitson [Sun, 4 Mar 2012 07:37:26 +0000]
Rudimentary documentation

11 years agoReintroduce conditional null-branch pruning and add direct-to-HRI option
Peter Rabbitson [Mon, 11 Feb 2013 16:07:16 +0000]
Reintroduce conditional null-branch pruning and add direct-to-HRI option

What we do here is heavy parameterization of the rowparser coderef generator.

The first change introduces pruning of "null" left joined branches. In the
case of the collapsing codepath things are easy - we already precalculated
definitive non-nullable column sets describing each node separately. All we
need to do is check that the *first* node-specific id is not-NULL, and we
are in business. In the case of non-collapsing parsers things get ugly - we
do not have a collapse map (it can't be calculated most of the time) and
we do not yet have lightweight "left-join-ness" analysis. So instead we treat
any branch with *all* of its values (current node + leaves) being NULL as
a "left joined" branch. This should eventually be fixed, because it prevents
reliable selection of branches with all-nullable columns.

To make matters even more complicated - we can not prune by default, because
this was not the case for older code (and the format of data fed to
inflate_result has been public API for a long time). Since DBIx::Class::Row
no longer does prunning internaly in its inflate_result we need to compromise
(it was in fact necessary to remove that naive pruning code to allow empty
intermediate objects). The pruning is engaged automatically on any
result class that inherits from DBIx::Class::Row, with the hope that any
overrides of inflate_result do superficial modifications to the data before
passing it on. If the class is entirely new (i.e. *not* part of the ::Row
inheritance chain) - we do not prune and return everything the way we did up
until 0.08206 or so.

There is currently no way to influence the pruning behavior from the user API
which is *probably* a problem, but I am punting it.

The second change introduces the hri_style flag, which alters the resulting
structure to be a direct HRI product (everything is mixed in one hashref,
relationships clobber identically named coluns). Thus we do not invoke the HRI
inflate_result() at all anymore (it is left in for the casual overrider), but
return things in a single pass. There aren't much more performance gains to
be had here, next step would be leaner ResultSet initialization.

The switch and decision-caching in ResultSet.pm that powers the above got
rather hairy, but I couldn't figure out a saner way to properly dispatch to
the necessary rowparser builder. The rest of the changes turned out
surprisingly clean and unobtrusive.

11 years agoOptimization - order only on lazy prefetch
Peter Rabbitson [Sat, 3 Mar 2012 15:56:12 +0000]
Optimization - order only on lazy prefetch

If the user wants all() without an order_by she doesn't care anyway

11 years agoAnd another collapser issue
Peter Rabbitson [Mon, 11 Feb 2013 11:19:49 +0000]
And another collapser issue

One can not infer definedness from the presence of a parent *unless* we have
a 'belongs_to'-like relationship to that parent

11 years agoYet another collapser oversight
Peter Rabbitson [Sun, 10 Feb 2013 09:15:06 +0000]
Yet another collapser oversight

One can't reuse collapsers across a left join

11 years agoSimplify collapse map contents, shuffle things around, rename most vars
Peter Rabbitson [Sat, 9 Feb 2013 11:18:15 +0000]
Simplify collapse map contents, shuffle things around, rename most vars

There are almost no functional changes, just better organize what goes where

11 years agoMove the infmap verification/exception way earlier
Peter Rabbitson [Fri, 8 Feb 2013 15:16:04 +0000]
Move the infmap verification/exception way earlier

The thing deliberately is not a method on the source, because I am not
entirely sure where it belongs *YET*. Just knew it does not belong
in the (hopefully) extractable parser-gens.

11 years agoConvert in_storage() to a simple accessor (potentially XSifyable)
Peter Rabbitson [Tue, 12 Feb 2013 13:11:36 +0000]
Convert in_storage() to a simple accessor (potentially XSifyable)

11 years agoRemove ResultSourceHandle check in inflate_result
Peter Rabbitson [Tue, 12 Feb 2013 11:47:51 +0000]
Remove ResultSourceHandle check in inflate_result

A isa() check is expensive, and it seems like the work in 4376a1574 made
it entirely superfluous

11 years agoSwitch the cursor iterator to pull data via bind_columns
Peter Rabbitson [Tue, 12 Feb 2013 11:27:10 +0000]
Switch the cursor iterator to pull data via bind_columns

While this does not help us irectly in any way (we still copy by value like
there is no tomorrow) - it will help with the software_limit fast-forwards

11 years agoMassively optimize ->cursor->next while fixing some bugs along the way
Peter Rabbitson [Wed, 19 Sep 2012 07:26:44 +0000]
Massively optimize ->cursor->next while fixing some bugs along the way

Cursor access was previously wrapped in a dbh_do() block with the intent to
restart the connection and the cursor upon a handle error. However this
arrangement overlooks our inability to restart the cursor from the same
spot (or for that matter guarantee the same dataset). Instead we remove
the dbh_do wrap entirely, and just let the exception propagate to whatever
esle might be ready to catch it (and potentially properly retry the select).

As a side effect (because anonsubs are sloooooooow) the end result
yields astonishing speed gains - one of the test cases mentioned in [1]
went (on my test rig) from 9.61058 to 0.64960 due to this commit alone.

A particular detail - the cursor private methods _dbh_next/_dbh_all are no
more as they are unused indirection now. All storage drivers (well their
respective cursors) have been adjusted, but not yet tested due to lack of
a proper environment.

[1] http://lists.scsys.co.uk/pipermail/dbix-class/2012-July/010595.html

11 years agoRestore ability to handle underdefined root (t/prefetch/incomplete.t)
Peter Rabbitson [Thu, 3 Jan 2013 03:01:36 +0000]
Restore ability to handle underdefined root (t/prefetch/incomplete.t)

In addition make things work when multiple has_many-inheriting branches
are present on the root. This squeezes in the last thing I could think
of into the row_parser maker, and allows to *properly* collapse stuff
like this:

$rs = $schema->resultset ('CD')->search ({}, {
  join => [ 'tracks', { single_track => { cd => { artist => { cds => 'tracks' } } } }  ],
  collapse => 1,
  columns => [
    { 'single_track.trackid'                    => 'single_track.trackid' },  # definitive link to root from 1:1:1:1:M:M chain
    { 'year'                                    => 'me.year' },               # non-unique
    { 'tracks.cd'                               => 'tracks.cd' },             # \ together both uniqueness for second multirel
    { 'tracks.title'                            => 'tracks.title' },          # / and definitive link back to root
    { 'single_track.cd.artist.cds.cdid'         => 'cds.cdid' },              # to give uniquiness to ...tracks.title below
    { 'single_track.cd.artist.cds.year'         => 'cds.year' },              # non-unique
    { 'single_track.cd.artist.artistid'         => 'artist.artistid' },       # uniqufies entire parental chain
    { 'single_track.cd.artist.cds.genreid'      => 'cds.genreid' },           # nullable
    { 'single_track.cd.artist.cds.tracks.title' => 'tracks_2.title' },        # unique when combined with ...cds.cdid above
  ],
  order_by => \ 'RANDOM()'
});

Which DBIC sees like this ( produced by `prove -l t/prefetch/manual.t -v` ):

 sngl_tr.trackid #        me.year #       tracks.cd #    tracks.title #        cds.cdid #        cds.year # artist.artistid #     cds.genreid #  tracks_2.title
---------------------------------------------------------------------------------------------------------------------------------------------------------------
               6 #           1978 #               3 #              e2 #               1 #            1981 #               1 #               1 #              m3
            NULL #           1977 #            NULL #            NULL #            NULL #            NULL #            NULL #            NULL #            NULL
               6 #           1978 #               3 #              e3 #               5 #            1977 #               1 #            NULL #            NULL
               6 #           1978 #               3 #              e1 #               1 #            1981 #               1 #               1 #              m1
               6 #           1978 #               3 #              e2 #               3 #            1978 #               1 #               1 #              e1
            NULL #           1981 #               1 #              m1 #            NULL #            NULL #            NULL #            NULL #            NULL
               6 #           1978 #               3 #              e2 #               1 #            1981 #               1 #               1 #              m1
               6 #           1978 #               3 #              e3 #               3 #            1978 #               1 #               1 #              e3
               6 #           1978 #               3 #              e3 #               2 #            1976 #               1 #            NULL #              o2
               6 #           1978 #               3 #              e2 #               6 #            1977 #               1 #            NULL #            NULL
            NULL #           1981 #               1 #              m3 #            NULL #            NULL #            NULL #            NULL #            NULL
               6 #           1978 #               3 #              e3 #               1 #            1981 #               1 #               1 #              m1
               6 #           1978 #               3 #              e1 #               2 #            1976 #               1 #            NULL #              o2
               6 #           1978 #               3 #              e3 #               1 #            1981 #               1 #               1 #              m3
               6 #           1978 #               3 #              e2 #               3 #            1978 #               1 #               1 #              e2
               6 #           1978 #               3 #              e2 #               4 #            1977 #               1 #            NULL #            NULL
               6 #           1978 #               3 #              e1 #               6 #            1977 #               1 #            NULL #            NULL
               6 #           1978 #               3 #              e2 #               5 #            1977 #               1 #            NULL #            NULL
               6 #           1978 #               3 #              e1 #               3 #            1978 #               1 #               1 #              e2
               6 #           1978 #               3 #              e1 #               3 #            1978 #               1 #               1 #              e1
            NULL #           1976 #               2 #              o1 #            NULL #            NULL #            NULL #            NULL #            NULL
            NULL #           1976 #               2 #              o2 #            NULL #            NULL #            NULL #            NULL #            NULL
               6 #           1978 #               3 #              e1 #               1 #            1981 #               1 #               1 #              m2
               6 #           1978 #               3 #              e1 #               5 #            1977 #               1 #            NULL #            NULL
               6 #           1978 #               3 #              e2 #               2 #            1976 #               1 #            NULL #              o1
               6 #           1978 #               3 #              e2 #               1 #            1981 #               1 #               1 #              m2
               6 #           1978 #               3 #              e1 #               1 #            1981 #               1 #               1 #              m4
               6 #           1978 #               3 #              e3 #               1 #            1981 #               1 #               1 #              m2
               6 #           1978 #               3 #              e2 #               2 #            1976 #               1 #            NULL #              o2
               6 #           1978 #               3 #              e3 #               3 #            1978 #               1 #               1 #              e1
               6 #           1978 #               3 #              e3 #               1 #            1981 #               1 #               1 #              m4
               6 #           1978 #               3 #              e1 #               3 #            1978 #               1 #               1 #              e3
            NULL #           1977 #            NULL #            NULL #            NULL #            NULL #            NULL #            NULL #            NULL
               6 #           1978 #               3 #              e1 #               1 #            1981 #               1 #               1 #              m3
               6 #           1978 #               3 #              e3 #               2 #            1976 #               1 #            NULL #              o1
               6 #           1978 #               3 #              e1 #               2 #            1976 #               1 #            NULL #              o1
               6 #           1978 #               3 #              e2 #               1 #            1981 #               1 #               1 #              m4
               6 #           1978 #               3 #              e3 #               3 #            1978 #               1 #               1 #              e2
            NULL #           1977 #            NULL #            NULL #            NULL #            NULL #            NULL #            NULL #            NULL
            NULL #           1981 #               1 #              m2 #            NULL #            NULL #            NULL #            NULL #            NULL
               6 #           1978 #               3 #              e3 #               6 #            1977 #               1 #            NULL #            NULL
               6 #           1978 #               3 #              e2 #               3 #            1978 #               1 #               1 #              e3
               6 #           1978 #               3 #              e3 #               4 #            1977 #               1 #            NULL #            NULL
               6 #           1978 #               3 #              e1 #               4 #            1977 #               1 #            NULL #            NULL
            NULL #           1981 #               1 #              m4 #            NULL #            NULL #            NULL #            NULL #            NULL

11 years agoTest for restricted prefetch (now passing again after previous commit)
Rafael Kitover [Thu, 5 Jul 2012 17:03:44 +0000]
Test for restricted prefetch (now passing again after previous commit)

11 years agoFix _resolve_collapse to always consider the entire chain of parent ids
Peter Rabbitson [Mon, 28 Jan 2013 11:20:45 +0000]
Fix _resolve_collapse to always consider the entire chain of parent ids

Instead of relying on a "local column based" resolution for a particular
node, always add all the "collapsers" of the left-side "parents".

In the process cleanup the return of _resolve_collapse, and make it more
generic (after all we are hoping to CPAN the collapser generator some
day).

The change above  solves the following problem: think of an artist with
3 CDs A, B & C:

$cd_rs->search(
  [
    { 'me.title' => 'A', 'cds.title' => { '!=' => 'B' } },
    { 'me.title' => { '!=', => 'A' }, 'cds.title' => 'B' },
  ],
  { prefetch => { artist => 'cds' } },
);

Since an artist is fully defined by its PK (which we already fetch),
an all() run will keep accumulating all 3 CDs under the same already
known hash, representing said artist, because we do not create two
distinct pigeon-hole-hashes for "artist of A" and "artist of non-A".

11 years agoETOOMANYARGS - change _resolve_collapse to take a couple hashes
Peter Rabbitson [Tue, 22 Jan 2013 14:18:23 +0000]
ETOOMANYARGS - change _resolve_collapse to take a couple hashes

No functional changes

11 years agoWrite correct odd (not even) relchain depth on primary joins
Peter Rabbitson [Sun, 27 Jan 2013 19:10:34 +0000]
Write correct odd (not even) relchain depth on primary joins

11 years agoAdded test for join and empty prefetch exception
Alexander Hartmaier [Thu, 2 Aug 2012 12:38:52 +0000]
Added test for join and empty prefetch exception

(Now passing after previous commit)

11 years agoUnset collapse in even more cases
Peter Rabbitson [Sat, 26 Jan 2013 16:25:33 +0000]
Unset collapse in even more cases

11 years agoFixups for 5.17.6+ hash randomization
Peter Rabbitson [Tue, 29 Jan 2013 00:14:10 +0000]
Fixups for 5.17.6+ hash randomization

11 years agoHit an MC hash-order bug - simplify create, and solve it another time
Peter Rabbitson [Mon, 28 Jan 2013 21:48:05 +0000]
Hit an MC hash-order bug - simplify create, and solve it another time
(test saved and augmented in another branch)

11 years agoReverting a48693f42e - the test is a fat duplicate of t/prefetch/false_colvalues.t
Peter Rabbitson [Fri, 21 Dec 2012 10:05:40 +0000]
Reverting a48693f42e - the test is a fat duplicate of t/prefetch/false_colvalues.t

11 years agoFix the silly mistake responsible for the drama around c9733800
Peter Rabbitson [Sat, 26 Jan 2013 15:44:37 +0000]
Fix the silly mistake responsible for the drama around c9733800

A perlcritic policy to catch this stuff in the future is under consideration

11 years agoMerge branch 'master' into topic/constructor_rewrite
Peter Rabbitson [Thu, 14 Feb 2013 04:58:09 +0000]
Merge branch 'master' into topic/constructor_rewrite

11 years agoMoar kwalitee - we do have pod(coverage) tests
Peter Rabbitson [Thu, 14 Feb 2013 04:41:20 +0000]
Moar kwalitee - we do have pod(coverage) tests

11 years agoAdd strict/warnings test, adjust all offenders (wow, that was a lot)
Peter Rabbitson [Wed, 13 Feb 2013 22:20:29 +0000]
Add strict/warnings test, adjust all offenders (wow, that was a lot)

Should shut kwalitee up: http://cpants.cpanauthors.org/dist/DBIx-Class

11 years agoStop shipping world writeable files in our tarball
Peter Rabbitson [Wed, 13 Feb 2013 18:39:57 +0000]
Stop shipping world writeable files in our tarball

The chain of failures would go as follows: when we prepare the tarball
we briefly copy all generated POD to our root dir so that the
manifest/distdir_copy process can pick it up. Then before the distdir is
ready we run a cleanup using ExtUtils::Install::uninstall. However
everything in the ditdir is hardlinked to our root dir, including the
files we "uninstall". EU::I::uninstall has a weird dance deep in its
source[1] where it explicitly does chmod(0666) on the file it is about
to delete (why?!). Thus we end up with world-writables in our distdir,
since the hardlinked inode still retains the result of that last chmod.

Switch to a manual cleanup, and leave EU::I alone.

[1] https://metacpan.org/source/YVES/ExtUtils-Install-1.54/lib/ExtUtils/Install.pm#L274

11 years agoFix duplicated columns for count()
André Walker [Wed, 13 Feb 2013 15:47:17 +0000]
Fix duplicated columns for count()

When a same aggregate function was used more than once in a 'having'
clause, count() added that function more than once to 'select'.

11 years agorelease v0.08206 v0.08206
Alexander Hartmaier [Mon, 11 Feb 2013 17:59:09 +0000]
release v0.08206

11 years agoTry Schwern's latest Test::Builder offering on a stock perl and a threaded blead
Peter Rabbitson [Thu, 7 Feb 2013 05:21:22 +0000]
Try Schwern's latest Test::Builder offering on a stock perl and a threaded blead

11 years agoReorganize travis stuff a little - no functional changes
Peter Rabbitson [Thu, 7 Feb 2013 05:10:43 +0000]
Reorganize travis stuff a little - no functional changes

11 years agoTry to config Fibrebird twice - it does seem to help >.<
Peter Rabbitson [Thu, 7 Feb 2013 04:06:24 +0000]
Try to config Fibrebird twice - it does seem to help >.<

Read changeset under -w

11 years agoTemporary workaround for Path::Class not being installable (RT#83143)
Peter Rabbitson [Thu, 7 Feb 2013 04:04:37 +0000]
Temporary workaround for Path::Class not being installable (RT#83143)

11 years agoChangelogging for 728f32b5 and e705f529
Peter Rabbitson [Fri, 1 Feb 2013 06:55:04 +0000]
Changelogging for 728f32b5 and e705f529

11 years agoRevert parts of 6864429a which utterly broke dbh_do() retries
Peter Rabbitson [Fri, 1 Feb 2013 06:50:15 +0000]
Revert parts of 6864429a which utterly broke dbh_do() retries

Was never noticed because of undertesting, now should behave correctly

11 years agoClarify travis timings
Peter Rabbitson [Fri, 1 Feb 2013 04:34:01 +0000]
Clarify travis timings

11 years agoNew travis build infrastructure is 'set -e' sensitive
Peter Rabbitson [Fri, 1 Feb 2013 04:28:03 +0000]
New travis build infrastructure is 'set -e' sensitive

11 years agoPrevent spurious unclean git repo state on ddl regeneration
Peter Rabbitson [Tue, 29 Jan 2013 21:52:45 +0000]
Prevent spurious unclean git repo state on ddl regeneration

11 years agoExtra sanity check of a fresh DBI handle
Peter Rabbitson [Tue, 29 Jan 2013 10:57:49 +0000]
Extra sanity check of a fresh DBI handle

11 years agoMake `perl Makefile.PL` runs more user friendly - better diagnostics
Peter Rabbitson [Fri, 25 Jan 2013 13:14:31 +0000]
Make `perl Makefile.PL` runs more user friendly - better diagnostics

11 years agoStop `perl Makefile.PL` from recursing into distdirs if present
Peter Rabbitson [Fri, 25 Jan 2013 12:25:52 +0000]
Stop `perl Makefile.PL` from recursing into distdirs if present

11 years agoMore .mailmap fixes
Peter Rabbitson [Thu, 20 Dec 2012 15:11:09 +0000]
More .mailmap fixes

11 years agoGeneral cleanup of error messages - quote identifiers/names where sensible
Peter Rabbitson [Thu, 1 Sep 2011 10:13:36 +0000]
General cleanup of error messages - quote identifiers/names where sensible

No functional changes

11 years agoRemove TODO labels from blocks not using todo_skip() - no test changes
Peter Rabbitson [Wed, 26 Dec 2012 10:31:00 +0000]
Remove TODO labels from blocks not using todo_skip() - no test changes

11 years agoRevert 344f761c - this was a stupid idea
Peter Rabbitson [Fri, 25 Jan 2013 02:26:06 +0000]
Revert 344f761c - this was a stupid idea

Way too many failures, maked CPANTesters output unusable.
Extracted and submitted as DBI RT#82942 instead

11 years ago::Storage::BlockRunner now has minimum POD, tell CPAN to noindex
Peter Rabbitson [Wed, 23 Jan 2013 12:31:50 +0000]
::Storage::BlockRunner now has minimum POD, tell CPAN to noindex

It is not ready for prime time yet

11 years agoOnly allow known globals in SQL::Translator leak allowance
Dagfinn Ilmari Mannsåker [Wed, 23 Jan 2013 12:07:33 +0000]
Only allow known globals in SQL::Translator leak allowance

11 years agorelease v0.08205 v0.08205
Arthur Axel 'fREW' Schmidt [Wed, 23 Jan 2013 01:02:54 +0000]
release v0.08205

11 years agoEnsure xt/whitespace.t executes standalone
Peter Rabbitson [Tue, 22 Jan 2013 21:04:23 +0000]
Ensure xt/whitespace.t executes standalone

This way it will not pick up anything temporary a test may have left
around, and won't complain about the whitespace contents.

11 years agoClarifying that the "around" method modifier can come from Moose
Jason McIntosh [Tue, 22 Jan 2013 03:17:47 +0000]
Clarifying that the "around" method modifier can come from Moose

Also adding a trailing semicolon to the "around" example. This way, it
better agrees with the information in Manual::FAQ.

11 years agoDo not tax travis with full pull request smoking
Peter Rabbitson [Tue, 22 Jan 2013 01:35:06 +0000]
Do not tax travis with full pull request smoking

11 years agoSome cleanups around loading/use of DBIx::Class::Exception (no func. changes)
Peter Rabbitson [Sun, 20 Jan 2013 18:23:48 +0000]
Some cleanups around loading/use of DBIx::Class::Exception (no func. changes)

11 years agoRevert workarounds for $@ broken during 5.13.x - mainly 1f870d5a
Peter Rabbitson [Sun, 20 Jan 2013 18:09:46 +0000]
Revert workarounds for $@ broken during 5.13.x - mainly 1f870d5a

Luckily reason prevailed and $@ was left alone during DESTROY time,
the complexity (mnost of it compiled away) is no longer needed

More historic info can be found here: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits/DBIx-Class-Historic.git;a=blob_plain;f=useful_guard_objects.html;h=4678884

11 years agoFurther reshuffle logic in _rs_update_delete - no functional changes
Peter Rabbitson [Fri, 11 Jan 2013 17:58:42 +0000]
Further reshuffle logic in _rs_update_delete - no functional changes

review with -w, lots of reindentation

11 years agoFix self-referential resultset update/delete on MySQL (aggravated by 31073ac7)
Peter Rabbitson [Wed, 21 Nov 2012 11:38:43 +0000]
Fix self-referential resultset update/delete on MySQL (aggravated by 31073ac7)

MySQL is unable to figure out it needs a temp-table when it is trying
to update a table with a condition it derived from that table. So what
we do here is give it a helpful nudge by rewriting any "offending"
subquery to a double subquery post-sql-generation.

Performance seems to be about the same for moderately large sets. If it
becomes a problem later we can always revisit and add the ability to
induce "row-by-row" update/deletion instead.

The implementation sucks, but is rather concise and most importantly
contained to the MySQL codepath only - it does not affect the rest of
the code flow in any way.

11 years agoFix proper handling of composite resultset heads (e.g. as_subselect_rs)
Peter Rabbitson [Mon, 19 Nov 2012 09:11:11 +0000]
Fix proper handling of composite resultset heads (e.g. as_subselect_rs)

Solves http://lists.scsys.co.uk/pipermail/dbix-class/2012-July/010650.html

11 years agoMove the *preliminary* multicol IN support to the sqlmaker
Peter Rabbitson [Fri, 11 Jan 2013 18:00:20 +0000]
Move the *preliminary* multicol IN support to the sqlmaker

It really does not belong in ResultSet.pm, but we do not have an API
either. Take a first stab at a sketch, DQ will need to wrangle it to
completion.

11 years agoFlip quoting in all of t/71mysql.t (no test changes)
Peter Rabbitson [Thu, 10 Jan 2013 21:35:51 +0000]
Flip quoting in all of t/71mysql.t (no test changes)

11 years agoSimplify dbh_do invocation, and only alias @_ when needed
Peter Rabbitson [Mon, 7 Jan 2013 18:45:05 +0000]
Simplify dbh_do invocation, and only alias @_ when needed

11 years agoScope::Upper somehow confuses pseudofork on older perls - investigation pending
Peter Rabbitson [Mon, 7 Jan 2013 18:43:40 +0000]
Scope::Upper somehow confuses pseudofork on older perls - investigation pending

View the patch with -w, lots of reindentation

11 years agoReign in (a little bit) the sprawling CRLF insanity on Win32
Peter Rabbitson [Sat, 12 Jan 2013 17:35:36 +0000]
Reign in (a little bit) the sprawling CRLF insanity on Win32

In the process join the notabs/eol tests into one file, and tighten
the WS checks even more

11 years agoEnsure the testddl is regenerated at Makefile and distdir times
Peter Rabbitson [Thu, 10 Jan 2013 18:32:19 +0000]
Ensure the testddl is regenerated at Makefile and distdir times

This will stop things constantly getting out of sync

11 years agoRegenerate SQLite testschema ddl with explicit quoting and generate FKs
Peter Rabbitson [Thu, 10 Jan 2013 18:08:31 +0000]
Regenerate SQLite testschema ddl with explicit quoting and generate FKs

We *do not* yet turn on FK checking in sqlite - many tests will need tweaking

11 years agoSQLT got a lot better lately - bump min version
Peter Rabbitson [Thu, 10 Jan 2013 17:15:52 +0000]
SQLT got a lot better lately - bump min version

Remove a large number of workarounds in the process

11 years agoRemove SQLA namespace pollution fixer - this is no longer the case since 1.73
Peter Rabbitson [Mon, 7 Jan 2013 21:50:23 +0000]
Remove SQLA namespace pollution fixer - this is no longer the case since 1.73

11 years agodeployment_statements() is not storage-dependent - only sqlt_type() is
Peter Rabbitson [Thu, 10 Jan 2013 14:03:05 +0000]
deployment_statements() is not storage-dependent - only sqlt_type() is

This fixes maint/gen_schema erroring out after 75d3bdb243

11 years agoReduce amount of calls to $rsrc->columns_info where possible
Peter Rabbitson [Mon, 7 Jan 2013 13:14:34 +0000]
Reduce amount of calls to $rsrc->columns_info where possible

11 years ago_resolve_bindattrs already expects colinfo - just pass it in where we forgot
Peter Rabbitson [Mon, 7 Jan 2013 13:09:29 +0000]
_resolve_bindattrs already expects colinfo - just pass it in where we forgot

11 years agoFix some pessimizations spotted here and there (no functional changes)
Peter Rabbitson [Thu, 13 Dec 2012 06:40:13 +0000]
Fix some pessimizations spotted here and there (no functional changes)

Mainly remove a number of unused @_ unpackings, and remove the hideous
_resolved_attrs_copy pessimizer

11 years agoRemove apparent pessimization introduced in 6a588797
Peter Rabbitson [Thu, 10 Jan 2013 13:13:21 +0000]
Remove apparent pessimization introduced in 6a588797

There is no conceivable reason why the attrs need to be recalculated on cursor
reset. All tests seem to pass as well. Removing it as the calculation is quite
expensive - if problems arise bisection will hopefully lead us here

11 years agoOptimize populate(), especially bind handling in complex populate cases
Peter Rabbitson [Sun, 23 Dec 2012 11:45:16 +0000]
Optimize populate(), especially bind handling in complex populate cases

Instead of recalculating the data slice positions on every loop, we
do it only once during the "proto bind" generation. This is because
even though all bind values can and will change (even ones supplied
via \[ ... ]), their number will always remain constant.

11 years agoSimplify/cleanup parsing of search() arguments
Peter Rabbitson [Fri, 21 Dec 2012 11:41:54 +0000]
Simplify/cleanup parsing of search() arguments

11 years agoEnsure _dbi_attrs_for_bind/bind_attribute_by_data_type are called after connecting
Peter Rabbitson [Thu, 27 Dec 2012 05:43:53 +0000]
Ensure _dbi_attrs_for_bind/bind_attribute_by_data_type are called after connecting

This way a user does not have to worry about the particular DBI/DBD being
loaded before accessing its constants

11 years agoRemove support for source_bind_attributes() as promised in 0e773352a
Peter Rabbitson [Wed, 26 Dec 2012 19:50:57 +0000]
Remove support for source_bind_attributes() as promised in 0e773352a

Original deprecation was put in place almost 2 years ago

11 years agoDeprecate emulate_limit() - can not be sanely supported by DQ
Peter Rabbitson [Thu, 10 Jan 2013 13:39:08 +0000]
Deprecate emulate_limit() - can not be sanely supported by DQ

11 years agoReorganize travis test script, I *think* no functional changes
Peter Rabbitson [Thu, 27 Dec 2012 09:43:08 +0000]
Reorganize travis test script, I *think* no functional changes

11 years agoList::Util got fixed and is again installable on 5.8
Peter Rabbitson [Sat, 5 Jan 2013 22:18:17 +0000]
List::Util got fixed and is again installable on 5.8

11 years agoMove Travis Data::Dumper installation earlier, before its dependents
Peter Rabbitson [Wed, 26 Dec 2012 10:36:23 +0000]
Move Travis Data::Dumper installation earlier, before its dependents

11 years agoInstall Carp.pm separately on Travis
Peter Rabbitson [Wed, 26 Dec 2012 10:34:01 +0000]
Install Carp.pm separately on Travis

Otherwise when the timing is right it trips up installation of the parallel job

11 years agoReorganize MSSQL/DBD::Sybase TODOs on MAS+txn tests
Peter Rabbitson [Wed, 26 Dec 2012 09:50:33 +0000]
Reorganize MSSQL/DBD::Sybase TODOs on MAS+txn tests

11 years agoFix TODO tests to only mark exactly the failing tests as TODO
Brendan Byrd [Thu, 22 Mar 2012 01:10:08 +0000]
Fix TODO tests to only mark exactly the failing tests as TODO
and run the passing tests as real tests.

11 years agoNo reason to run this test at all until MC is rewritten
Peter Rabbitson [Wed, 26 Dec 2012 09:06:54 +0000]
No reason to run this test at all until MC is rewritten

11 years agoPromote leaky rscond todo to a smoke-fail - try to establish a pattern
Peter Rabbitson [Wed, 26 Dec 2012 09:02:20 +0000]
Promote leaky rscond todo to a smoke-fail - try to establish a pattern

11 years agoFix broken DBICTest::RunMode::is_smoker() (riba got pwned by precedence)
Peter Rabbitson [Wed, 19 Dec 2012 13:04:55 +0000]
Fix broken DBICTest::RunMode::is_smoker() (riba got pwned by precedence)

11 years agoAttempt to build a dist on travis if all tests pass
Peter Rabbitson [Wed, 19 Dec 2012 11:22:45 +0000]
Attempt to build a dist on travis if all tests pass

11 years agoFixup possible crlf in generated files
Peter Rabbitson [Mon, 17 Dec 2012 08:19:00 +0000]
Fixup possible crlf in generated files

11 years agoTighten notab/eol checks even more
Peter Rabbitson [Wed, 19 Dec 2012 10:36:33 +0000]
Tighten notab/eol checks even more

11 years agoSwitch rm to rm -f - we do not care about failure
Peter Rabbitson [Tue, 18 Dec 2012 12:08:08 +0000]
Switch rm to rm -f - we do not care about failure

11 years agoMove generated README to maint/.Generated_Pod as well - simplifies cleanup
Peter Rabbitson [Mon, 17 Dec 2012 08:07:02 +0000]
Move generated README to maint/.Generated_Pod as well - simplifies cleanup

11 years agoUse plain old file concat for the dbicadmin pod-injection
Peter Rabbitson [Mon, 17 Dec 2012 07:52:13 +0000]
Use plain old file concat for the dbicadmin pod-injection

Lose the oneliner for more sanity and better cross-platform support

11 years agoCreate distinct lib/ subdir in maint/.Generated_Pod (no functional changes)
Peter Rabbitson [Sun, 16 Dec 2012 11:53:20 +0000]
Create distinct lib/ subdir in maint/.Generated_Pod (no functional changes)

11 years agoRewrite all Makefile oneliners in terms of EU::MM::oneliner
Peter Rabbitson [Sun, 16 Dec 2012 07:39:42 +0000]
Rewrite all Makefile oneliners in terms of EU::MM::oneliner

11 years agoImprove the populate docs in ::Schema and ::ResultSet
Alexander Hartmaier [Wed, 7 Nov 2012 16:17:55 +0000]
Improve the populate docs in ::Schema and ::ResultSet

11 years agoExpand notabs/eol testing to .pod and some files at the root
Peter Rabbitson [Sun, 16 Dec 2012 21:07:06 +0000]
Expand notabs/eol testing to .pod and some files at the root

11 years agoExplicitly specify Scalar::Util dep, and work around RT#80646 on travis
Peter Rabbitson [Mon, 17 Dec 2012 12:50:27 +0000]
Explicitly specify Scalar::Util dep, and work around RT#80646 on travis

The inability to install Scalar::Util did not abort the cpan runs, and
therefore revealed a nasty bug in first() that is present on all perl-bundled
List::Utils until 5.8.8