The xml file backend has 2 functions to handle a commodity reference. The first, dom_tree_to_commodity_ref_no_engine(), gets the two pieces of the reference (space and id) and creates a new gnc_commodity from them. The second, dom_tree_to_commodity_ref(), calls dom_tree_to_commodity_ref_no_engine() and then looks up the commodity in the engine. This has the result of only leaving 1 gnc_commodity per commodity.
In the places where commodity refs are used, dom parsers for prices and transactions call dom_tree_to_commodity_ref() but the parser for accounts calls dom_tree_to_commodity_ref_no_engine(). Can anyone explain why? In the sql backend, this is causing problems for scheduled transactions and template accounts/commodities. The xml file has template commodities with space/id = template/template. When the xml file is loaded, dom_tree_to_commodity_ref_no_engine() creates 1 template commodity per template account, each with its own guid. When saved to an sqlite file, there is still 1 template commodity per template account. However, when I load the commodities from an sqlite file, I need to force the guids (for currencies for example) to be what the sqlite file expects to them to be. I do this by calling gnc_commodity_lookup() and then changing the commodity guid. This is fine for currencies, but for template commodities, I end up with 1 template commodity with the last guid in the file and all of the other template commodities are thrown away and the references in the template accounts are invalid. Josh, does the sx code need a separate template commodity per account? Should the account xml parser use dom_tree_to_commodity_ref() to merge these? Should the sql backends only merge currencies, not any other commodities? Phil _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel