[Dbix-class] dirty-flag on inflated columns
marc at questright.com
Tue May 12 20:51:00 GMT 2009
* Matt S Trout <dbix-class at trout.me.uk> [090512 11:34]:
> On Mon, May 11, 2009 at 12:14:07PM -0700, Marc Mims wrote:
> > * Matt S Trout <dbix-class at trout.me.uk> [090511 10:29]:
> > > Thoughts on whether make_column_dirty should clear the deflated value if an
> > > inflated one is present, guys?
> > That would break DBIx::Class::InflateColumn::FS, causing it to leave an
> > orphaned file in the file system.
FS uses the deflated value to determine whether it needs to overwrite an
existing file or create a new file. If the deflated value is cleared by
make_column_dirty, FS will always make a copy, potentially orphaning a
file in fs_column_path.
The deflated value is a unique filename in a path specified by
fs_column_path. On deflation:
- If the inflated value (a Path::Class::File object) and the deflated
value represent the SAME file in fs_column_path, deflation is a
- If there is no deflated value, a new, unique file is created in
- Otherwise, the contents of the file specified by the deflated value
is overwritten by the contents of the file represented by the
Then FS clears the inflated value (the Path::Class::File object, NOT the
source file itself). That forces re-inflation on the next access so
that the inflated Path::Class::File points to the unique file in
fs_column_path, not the source file it was copied from.
If make_column_dirty clears the deflated value, all three cases above
will be treated like the second case. In the first case, X will be
copied to a new, unique file, leaving X orphaned.
If make_column_dirty clears the deflated value, I will have some work to
do on FS to accommodate the change.
More information about the DBIx-Class