r21517 - gnucash/trunk/src/libqof/qof - Add is_readonly

Christian Stimming christian at cstimming.de
Sun Nov 6 16:14:15 EST 2011

Am Samstag, 5. November 2011 schrieb John Ralls:
> >> Why do we need this? QofBook already has a read-only attribute which
> >> prevents even editing instances, so there shouldn't ever be anything to
> >> save in a read-only session.
> > 
> > My goal is to implement a "read-only" operation mode of gnucash, so that
> > our infamous "The database is locked" dialog offers the choice "Open
> > read-only" (instead of or additionally to "Open anyway").
> > 
> > For this, the read-only attribute needs to be stored in the same place as
> > the database URL. That one is stored in QofSession, so the fact it's a
> > read-only URL needs to be stored in QofSession, too.
> Christian,
> That's an excellent idea, but I think you need to re-analyze the code a
> bit. In particular, this section of src/gnome-utils/gnc-file.c, in
> gnc_post_file_open():
> 870        if (uh_oh && (io_err == ERR_SQL_DB_TOO_OLD ||
> 871                      io_err == ERR_SQL_DB_TOO_NEW))
> 872        {
> 873            qof_book_mark_readonly(qof_session_get_book(new_session));
> 874            uh_oh = FALSE;
> 875        }
> This is the *same function* that displays that dialog box. All that you
> need is a button on the dialog box to set a local variable in that
> function and add the variable as a condition to the above conditional and
> you're done.
> While QofSession has facilities for multiple books, it really only made
> sense to do that in the old "gemini" book-closing scheme, which was never
> fully implemented (and a large part of which I removed over the summer) --
> and in any case it allows only one open/active book
> (qof_session_get_book() doesn't return a list). What use-case do you have
> in mind that would need multiple books in a session, especially multiple
> *active* books?

Ok, I'll re-consider the need for an additional flag in QofSession. As you 
might already notice in r21526, I checked whether a second book is ever added 
to a QofSession, which is not the case and due to this I've removed the 
function to do so. Subsequently, the 1:N relation of session and book can and 
should be simplified to a 1:1 relation and in that case the read-only flag is 
most likely sufficient in QofBook. I'll revert r21517 when I implement more 
parts of the feature I need.

> qof_session_safe_save() is for upgrading the sql database in place. I can
> understand that if the file/session/db is to be read-only that that should
> be blocked, but that can be accomplished inside of gnc_post_file_open(),
> the only place that safe_save() is called.

Ok, I'll check that. Thanks. 

Best Regards,


More information about the gnucash-devel mailing list