On Tue, 2009-12-29 at 10:42 -0500, Derek Atkins wrote: > Phil, > > Phil Longstaff <[email protected]> writes: > > > Many of the reports work by querying the engine for a set of splits > > matching a > > specific filter, then looping and adding the values (all in scheme). Once > > the > > database backend is released in 2.4, this can be changed to a single SQL > > query. > > > > Some preparation for this could begin by adding an appropriate API to the > > engine (Account?) which takes a QofQuery for splits and returns the sum of > > the > > splits. This at least creates the abstraction needed by the scheme code > > which > > can be replaced. > > Note that in general the scheme functions are not returning a single > gnc_numeric total, but rather a list of <gnc_commodity,gnc_numeric> > tuples that sum up the amounts in each commodity. Also note that > different reports are going to want to perform different types of > currency conversions based on different requirements. For example, for > Income and Expense accounts you probably want to compute an exchange > rate based on the date of the transaction instead of the date of the > report, whereas Asset and Liabilities most likely want to compute > exchange rates based on the report date. >
Yes, exchange rates do throw a kink into it. > But yes, implementing some of this in C could possibly help improve > performance. > > I'm not sure a SQL statement would work, because it sounds like 2.4 will > still default to XML, so the reports cannot (and should not) depend on > the use of SQL in the backend. The scheme code wouldn't want to know about the backend. However, somewhere (Account? backend?), there should be a "get me the amount on a certain date" or "get me the amount according to a query" function which with an XML backend would filter and sum, and with an SQL backend would do an SQL query so that the SQL engine would filter and sum. Phil _______________________________________________ gnucash-devel mailing list [email protected] https://lists.gnucash.org/mailman/listinfo/gnucash-devel
