> On Nov 12, 2014, at 10:12 PM, Sébastien de Menten <sdemen...@gmail.com> wrote:
> 
> On Thursday, November 13, 2014, John Ralls <jra...@ceridwen.us 
> <mailto:jra...@ceridwen.us>> wrote:
> 
>> On Nov 12, 2014, at 12:08 PM, Sébastien de Menten <sdemen...@gmail.com <>> 
>> wrote:
>> 
>> On Wednesday, November 12, 2014, John Ralls <jra...@ceridwen.us <>> wrote:
>> 
>> > On Nov 11, 2014, at 1:10 PM, Sébastien de Menten <sdemen...@gmail.com <>> 
>> > wrote:
>> > ....
>> >
>> > I would be genuinely interested to have more specific documentation on the
>> > risks of going the SQL way.
>> 
>> There's nothing wrong with reading the database to generate reports. That is 
>> indeed easier for many people via SQL query than writing custom report 
>> plugins in Scheme.
>> 
>> It may also be easier to go with the SQL than with the std python binding 
>> for reporting but also to change the GnuCash book.
> 
> It might be, but I doubt it. You won’t be able to implement the business 
> logic in SQL alone.
> 
> 
> The python interface uses SQLAlchemy (an ORM) only to handle the backend 
> (retrieve and save objects), all business logic is in the python code. For 
> instance, when creating a transaction and the related splits, it is the 
> python code that ensures the business logic (for instance that the sum of the 
> splits = 0). This is close to what GnuCash does. 
> Moreover, there are some basic SQL integrity constrains (we cannot remove a 
> split without removing the related transaction) that are added in the ORM 
> layer as they do not exist in the SQL backend. 
>>  
>> 
>> I have mainly used the basic objects from GnuCash required for basic 
>> personal finance (so no invoice, no budget, ...) and did not found any 
>> issues while handling lot of accounts/transactions/splits and stock prices. 
>> I had the impression that GnuCash does indeed calculations when the book is 
>> opened but that it does not save them in the SQL backend. Hence, if we 
>> access the book when it's not opened by GnuCash at the same time, risks are 
>> quite reduced, would this be a "wrong" impression ?
>> 
> 
> I’m not sure I follow you about calculations when the book is opened that 
> aren’t saved. 
> I was thinking about temporary results/cached calculations/etc that are not 
> saved to the back ends (if there are any). 
>  
> With the SQL backend, everything is written back to the database when a 
> change is committed, so the *results* of the calculations are immediately 
> saved. What GnuCash doesn’t do is *read* the database after the initial load, 
> nor does it use any database concurrency control, so there are two potential 
> ways to screw things up with two programs (even two instances of GnuCash) 
> using the same database: A change made by one instance could be overwritten 
> by a change made in the other or, much worse, the two instances could try 
> writing the same records at the same time, corrupting those records.
> 
> Indeed, if GnuCash has opened the file and is using it (ie there is a lock in 
> the table gnc_lock), we are almost 100% sure to have the issues you mentions 
> if we change the file in parallel through SQL.  There is a check in pyscash 
> that raises an exception in this case (it can be overruled but at user's own 
> risk.  


What’s your goal here? I don’t think that reimplementing GnuCash in Python with 
GnuCash’s SQL schema is a particularly good approach: It’s not exactly the most 
efficient design. Rather, it’s designed to mirror the XML schema. You’ll have a 
better design if you relegate GnuCash SQL to import/export.

An aside about the name: Pyscash is likely to be pronounced by English speakers 
with a short “i” sound where the y goes.  That conveys a rather unfortunate 
meaning.

Regards,
John Ralls

_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to