[Dbix-class] Versioned Cluelessness
Christopher H. Laco
claco at chrislaco.com
Tue Jul 8 14:31:06 BST 2008
luke saunders wrote:
> On Tue, Jul 8, 2008 at 1:36 PM, Christopher H. Laco <claco at chrislaco.com>=
wrote:
>> luke saunders wrote:
>>> if the db isn't versioned then it's assumed that the database is
>>> already at the current version and all that happens is that the
>>> versioned table is created. i can see that this might be confusing so
>>> i'll beef out the docs later.
>>>
>>> it probably also makes sense for Schema::Versioned to overload deploy
>>> so that the versioned table is created after that runs, then if you're
>>> starting from scratch you can deploy initially then run upgrades after
>>> that.
>> Yeah, the overloaded deploy would seem to close that gap between what
>> happens and what's expected. Having never used Versioned before, I
>> completely expected upgrade to deploy the entire schema since you're on
>> version undef.
> =
> That's fine if your database is empty but not if there is a
> preexisting database, which is why we'll just have to make it clear
> that you need to run deploy first in the former case.
If I'm asking to upgrade() a database that's not empty, would it really =
already have a different schema then the version I'm going to?
If it did, why not just insist on a -unversioned-1.sql file that handled =
the initial upgrade from no versioning tables to versioned.
>> Of course, running deply first, then upgrade just yields the
>> addition of the versioned tables, but no upgrade scripts get run (if I w=
as
>> now on $VERSION=3D2).
> =
> But what upgrade script would you expect to be run in this case?
> Versioned doesn't know what version you were on before because there
> was no versioned table.
> =
> There is an option which allows a diff of the existing database and
> the current dbic schema to be generated for your reference when
> upgrading for the first time, but the resulting SQLT diff is a big
> mess of column changes caused by database defaults which aren't
> present in the DBIC schema, so it's not that useful. Although
> logically that should be what's run to 'upgrade' to the current
> version.
While I understand the position about upgrade from the Perl perspective =
and not wanting to trash an existing database, from the new user it =
should just work perspective: it doesn't. If I create a new schema, and =
deploy, then I upgrade() to version 2, it's not unreasonable to expect =
that the version 1->2 sql script should be run. After all, I just asked =
it to upgrade the schema, yet it did not, and it didn't even try or =
complain that it doesn't want to.
In the end, setting up a new schema and versioning it seems to be harder =
than it should be. When I ask it to upgrade a schema, it should. An =
upgrade could just as well trash the db as upgrading a db with no =
version table at all. Don't get me started about the fact that I have to =
write my own scripts to to upgrade/deploy rather than dbicadmin knowing =
--op=3Ddeploy or --op=3Dupgrade.
No: perl -MMySchema -e 'MySchema->connect(...)->deploy' does not count =
as user friendly.
Take it with a grain of salt. I'm working on this: =
http://today.icantfocus.com/blog/mvc-marathon/ and I'm going to end up =
pissing off a lot of people over the next few months with what I say. So =
far, even after doing Perl/DBIC/Cat as my native language, it ends up =
pissing me off more than Rails/CakePHP/Django does. It's not new user =
friendly sometimes. It's not intuitive sometimes with things like this =
compared to others. And what distresses me the most is the Perl attitude =
about everything: just because TIMTOWTDI doesn't mean you have to refuse =
to pick a one way to do it and make the tools a lot easier for that one way.
But I digress....
-=3DChris
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 187 bytes
Desc: OpenPGP digital signature
Url : http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20080708/c4=
d79cbc/signature.pgp
More information about the DBIx-Class
mailing list