[Kmymoney-devel] Bug in database upgrade
Christian Dávid
christian-david at web.de
Tue Oct 28 18:39:57 UTC 2014
Am Dienstag, 7. Oktober 2014, 22:02:24 schrieb Fernando Vilas:
> > > > _ Solution _
> > > >
> > > > I would recommend not to use readFileInfo() and writeFileInfo() in any
> > > > upgrade methods anymore and just call writeFileInfo() at the end of
> > > > the
> > > > upgrade process. Also the m_hi…Id vars need to be set somewhere.
> > >
> > > That sounds reasonable. The system was designed to make upgrades easy,
> > > but
> > > there are always cases you did not consider. I do not remember us
> > > considering removing columns, just adding/changing them, so this is new
> > > territory.
> >
> > I think this is a misunderstanding. To solve that: Where/when exactly are
> > columns added to the database? I cannot find any piece of code that
> > triggers that
>
> It looks like I was mistaken. There is code to create new tables, but it is
> in the upgradeToV<num>() calls that the call to generateDDL on the new
> columns is executed. There is probably a good way to abstract it if we want
> to automate the adding of columns. If not, the calls look like what is in
> upgradeToV1().
> > The errors I got are not caused by removed columns (I do not drop any
> > column) but it is caused by columns which are going to be created (well,
> > actually won't be created, because KMyMoney crashes first…).
I have a suggestion how to solve this problem [1]. Maybe this explains the
issue even better than my description from above.
> The upgradeDb() call that invokes upgradeToV<num>() should take care of
> adding the columns. If it still crashes afterwards, then that is a
> different bug.
I think there is no such bug.
> > We should create some database files and .xml files for each version and
> > save them for later test of the upgrade routines.
>
> Yes!!! That has been a gap in our testing until now. I usually just took a
> snapshot of my database and then practiced upgrading until it worked, then
> did it on the master copy. I tended to make a backup first, though. We
> definitely could use a version 0 file for testing the upgrade path as part
> of the test harness.
I guess that is only possible if someone extracts the database generation code
from an old git version by hand. When was the database version 0 introduced
(KMyMoney's version?)?
> Also, I hope you don't misinterpret my delays in responses or vague
> guidance. I am in the middle of a stretch of long weeks at $dayjob and
> have not been able to dedicate the time that KMM deserves. I really
> appreciate that someone else is digging into the code and improving it.
Not at all! My KMyMoney-time gets more and more limited as well. Take your
time, you should enjoy your work for KMyMoney!
A long time ago we wrote how to allow plugins to write into a database. My
last commit to add-onlinebanking [2] implements that feature (for sepa credit
transfers only at the moment). At some points it is a bit over engineered
(maybe). Short walk through:
KMyMoneyPlugin::storagePlugin shall contain the DDL and upgrade routines.
onlineTask got four new methods: one to define the DDL plugin, the save, modify
and remove routines.
A new table kmmPluginInfo contains information about installed plugins in the
database.
Maybe someone wants to comment on that.
Greetings
Christian
[1] https://git.reviewboard.kde.org/r/120499/
[2]
https://projects.kde.org/projects/extragear/office/kmymoney/repository/revisions/b2fa6231e248b0301ebad21d2152cd6425271102
More information about the KMyMoney-devel
mailing list