Scott,

   Because of the issues that you have raised I realized that multiple
configuration commands rolled into one transaction is not a good idea and is
not necessary. The router will act on a single command from any CLI session.
As far as command action goes it will be connection less towards CLI
sessions. When any user asks to show configuration I will show running
configuration to that user. I think a complicated design is a bad design.

Thanks!
-Alex

On Thu, Apr 17, 2008 at 8:17 PM, Scott Hess <[EMAIL PROTECTED]> wrote:

> What will happen if you use BEGIN is that multiple users can get into
> the configuration mode, but once one user gets past BEGIN and runs
> anything which updates the database, the updates in other transactions
> will start throwing SQLITE_LOCKED.  Spin up two sqlite3 command-line
> tools against the same database and check it out.
>
> If you use BEGIN IMMEDIATE, then this problem won't occur, because
> multiple threads can't get past BEGIN IMMEDIATE on the same database
> in the first place :-).
>
> What you have is basically a revision-control problem.  If you let
> multiple users configure at the same time, you're going to handle
> merging the config changes in a sensible way and handle conflicts.
>
> -scott
>
>
> On Thu, Apr 17, 2008 at 5:08 PM, Alex Katebi <[EMAIL PROTECTED]>
> wrote:
> > Scott,
> >
> >   Every user will have thier own sqlite connection. So multiple users
> are
> > allowed for configuration. There will be one router connection to
> actually
> > act on the commited configurations. The router will act on
> > individual configuration rows. The router and the users interact with
> each
> > other via the database file only. They run on seperate processes. All
> the
> > router sees is configuration rows being inserted deleted or updated by
> > whomever. It does not care. So here is my next question. If I have
> temporary
> > triggers for the CLI users to keep track of the uncommited rows. Then I
> have
> > another temoprary trigger for the router to act on the configurations
> after
> > being committed, would this work?  Would the temporary trigger in the
> router
> > connection actually trigger? I guess I need to try this out.
> >
> >   This is my own home project. I am my own boss. Once I have my design
> > figured out I will post it for analysis.
> >
> > Thanks,
> > -Alex
> >
> >
> > On Thu, Apr 17, 2008 at 7:26 PM, Scott Hess <[EMAIL PROTECTED]> wrote:
> >
> >> OK.  I suspect that you might find exposing the SQLite transaction
> >> semantics as part of your user interface may be ... unsatisfactory.
> >> For instance, by keeping a long-lived transaction in this way, you
> >> cannot set any of the _other_ data in the config and commit it.  This
> >> would include other users, so, for instance, while one user is
> >> configuring something really complex, like firewall rules, another
> >> user would not be able to set the timezone, or turn on logging, or
> >> something like that.  I don't know, this may be satisfactory, but it
> >> seems like a regrettable thing to design into the system at such a low
> >> level (not letting multiple people configure so that they don't screw
> >> up is good, but not allowing it just because your design didn't allow
> >> it, less good).
> >>
> >> As an alternative, you might consider layering your config-management
> >> over something like the undo/redo example (*).  Since this is more
> >> explicit (_you_ craft the structures in terms of SQLite, rather than
> >> relying on SQLite's internal semantics), when upper management comes
> >> to you with some crazy feature request which does not conform to the
> >> SQL transaction model, you'll be able to change things without too
> >> much pain.
> >>
> >> -scott
> >>
> >> (*) http://www.sqlite.org/cvstrac/wiki?p=UndoRedo
> >>
> >>
> >> On Thu, Apr 17, 2008 at 3:56 PM, Alex Katebi <[EMAIL PROTECTED]>
> >> wrote:
> >> >   I am glad you asked. I am designing an interactive command line
> >> > interface to an ip router. A user will begin a transaction and start
> >> > configuring. At any time he can query for his configurations since
> the
> >> > begining of the transaction. When he is satisfied with his
> configuration
> >> he
> >> > will commit the configuration. After this his query should show
> nothing
> >> > until he begins another transaction. Also he might press the ?mark
> key
> >> on
> >> > his keyboard at anytime for help information or tab key for automatic
> >> > command token completion.
> >> >
> >> > So I will have to know what are the list of commands since the
> beginning
> >> > of his transaction.
> >> >
> >> >
> >> >
> >> > On Thu, Apr 17, 2008 at 3:53 PM, Scott Hess <[EMAIL PROTECTED]> wrote:
> >> >
> >> >> I don't mean in a separate database table - I mean in an in-memory
> >> >> hashtable or array or something of the sort.  Depending on what the
> >> >> real goal you're trying to accomplish is, you might use triggers to
> >> >> call  custom function to accomplish this.
> >> >>
> >> >> You presumably desire to get this information in the interests of
> >> >> implementing a solution to a problem.  You should perhaps post
> asking
> >> >> for suggestions on how to solve the problem.  I think the question
> >> >> itself probably indicates that there's a disconnect in how you're
> >> >> trying to model the problem, but without knowing what the problem
> is,
> >> >> it's hard to do much.
> >> >>
> >> >> -scott
> >> >>
> >> >> On Thu, Apr 17, 2008 at 12:43 PM, Alex Katebi <[EMAIL PROTECTED]
> >
> >> >> wrote:
> >> >> > The reason I did not keep track in a seperate table was because I
> >> wanted
> >> >> to
> >> >> > do it using triggers. But triggers don't trigger until commit.
> >> >> >
> >> >> > On Thu, Apr 17, 2008 at 3:36 PM, Scott Hess <[EMAIL PROTECTED]>
> wrote:
> >> >> >
> >> >> >> Until the data is committed, it's not really in the database.  If
> >> you
> >> >> >> crash, it will be rolled back.  So if it's really important to
> know
> >> >> >> what data has been written to the database but not committed, why
> >> >> >> don't you just track what you're writing to the database in an
> >> >> >> in-memory data structure of some sort?  Or, to save space, just
> >> track
> >> >> >> the rowid of the rows you modify.
> >> >> >>
> >> >> >> -scott
> >> >> >>
> >> >> >>
> >> >> >> On Thu, Apr 17, 2008 at 12:33 PM, Alex Katebi <
> [EMAIL PROTECTED]
> >> >
> >> >> >> wrote:
> >> >> >> > Hi Richard,
> >> >> >> >
> >> >> >> > create table t1 (name);
> >> >> >> > insert into t1 values ('Alex');
> >> >> >> > begin;
> >> >> >> > insert into t1 values ('Richard');
> >> >> >> > select * from t1;
> >> >> >> >
> >> >> >> > How can I select only the second row in the above example?
> >> >> >> > If there is not an easy way to do this I would probably have to
> >> use
> >> >> >> another
> >> >> >> > connection then diff the two selects right?
> >> >> >> >
> >> >> >> > Thanks,
> >> >> >> > -Alex
> >> >> >> >
> >> >> >> >
> >> >> >> >
> >> >> >> >
> >> >> >> >
> >> >> >> > On Thu, Apr 17, 2008 at 2:38 PM, D. Richard Hipp <[EMAIL PROTECTED]
> >
> >> >> wrote:
> >> >> >> >
> >> >> >> >>
> >> >> >> >> On Apr 17, 2008, at 2:35 PM, Alex Katebi wrote:
> >> >> >> >> > Is there a way to select rows that have not been committed
> yet?
> >> >> >> >> >
> >> >> >> >>
> >> >> >> >> No.  SQLite doesn't really commit rows.  It commits pages.  A
> >> >> >> >> single page might hold multiple rows, only some of which might
> >> >> >> >> have changed.  Or a single row might span multiple pages.
> >> >> >> >>
> >> >> >> >>
> >> >> >> >> D. Richard Hipp
> >> >> >> >> [EMAIL PROTECTED]
> >> >> >> >>
> >> >> >> >>
> >> >> >> >>
> >> >> >> >> _______________________________________________
> >> >> >> >> sqlite-users mailing list
> >> >> >> >> sqlite-users@sqlite.org
> >> >> >> >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >> >> >> >>
> >> >> >> > _______________________________________________
> >> >> >> > sqlite-users mailing list
> >> >> >> > sqlite-users@sqlite.org
> >> >> >> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >> >> >> >
> >> >> >> _______________________________________________
> >> >> >> sqlite-users mailing list
> >> >> >> sqlite-users@sqlite.org
> >> >> >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >> >> >>
> >> >> > _______________________________________________
> >> >> > sqlite-users mailing list
> >> >> > sqlite-users@sqlite.org
> >> >> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >> >> >
> >> >> _______________________________________________
> >> >> sqlite-users mailing list
> >> >> sqlite-users@sqlite.org
> >> >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >> >>
> >> > _______________________________________________
> >> > sqlite-users mailing list
> >> > sqlite-users@sqlite.org
> >> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >> >
> >> _______________________________________________
> >> sqlite-users mailing list
> >> sqlite-users@sqlite.org
> >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >>
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@sqlite.org
> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to