Re: Question about update-records-from-instance
David Thole <[email protected]>
| Newsgroups | gmane.lisp.clsql.general |
|---|---|
| Message-ID | <[email protected]> |
Even though the docs say it this way, I wonder if it'd be more intuitive that if :database is passed, that it overrides what's in that slot. That is, if they are different then do an insert, else an update. From my standpoint, I can see this being a bit more intuitive anyways, and useful. -David On Thu, Dec 17, 2009 at 4:32 PM, Thijs Oppermann <[email protected]<thijso%[email protected]> > wrote: > Ah, right... I misread your original code... > > It seems logical, as the slot in the object that you get from your > dbms database is set to 'dbms', when you try to > 'update-records-from-instance' it will just try to update them in the > view-database it already knows, which is dbms, so nothing changes... > > So setting the view-database slot in the object to nil seems like a > good way to override that. On the other hand, you would maybe expect > the :database option to 'update-records-from-instance' to override > that... > > Ah, no, actually... the docs explicitly say: > > 'database' specifies the database in which the update is made only if > object is not associated with a database. > > > Thijs > > On Thu, Dec 17, 2009 at 10:06 PM, David Thole <[email protected]> wrote: > > Thanks Thijs for the reply. > > I looked at other alternatives, digging through the code like mad during > > lunch today, and came up with this solution as well: > > ... > > (dolist (obj (query ...)) > > (setf (slot-value obj (intern "VIEW-DATABASE" 'clsql-sys)) nil) > > (clsql:update-records-from ...)).. > > I found that this works pretty well too, since the slot for the object is > > set to the database instance - which evaluates to true, so the > > update-records-from will always execute. > > Thanks for the tip on the debug output, I'll definitely be sure to use > that > > a lot, since this is a big project for me at the moment. > > -David > > > > On Thu, Dec 17, 2009 at 11:16 AM, Thijs Oppermann < > [email protected] <thijso%[email protected]>> > > wrote: > >> > >> I'd start by doing: > >> > >> (start-sql-recording :type :both) > >> > >> This outputs all the statements clsql is running against the database > >> in your REPL. Handy for debugging. > >> > >> For the rest, update-records-from-instance is for adding or updating > >> based on OODML, i.e. from an object created by def-view-class. I think > >> you need to actually build the correct sql statement if you want to do > >> what you seem to want to do in your code snippet (sorry, hurried > >> reply... ) > >> > >> Gr, > >> Thijs > >> > >> On Wed, Dec 16, 2009 at 10:31 PM, David Thole <[email protected]> wrote: > >> > Hey all, > >> > I'm trying to run the code, something like below: > >> > (defun build-sqlite-db () > >> > (with-generic-wordnet-mssql-connection (dbms) > >> > (with-generic-wordnet-sqlite-connection (sqlitedb) > >> > ; (clsql:create-view-from-class 'worddef :database sqlitedb) > >> > > >> > > >> > (dolist (obj (query-db :word "cat" :tbl 'worddef :db dbms)) > >> > (clsql:update-records-from-instance obj :database > sqlitedb))))) > >> > > >> > Error: > >> > While accessing database #<SQLITE3-DATABASE db/wordnet.sqlite3 OPEN > >> > {1003013921}> > >> > > >> > with expression "UPDATE WORD_DEFS SET LEMMA = 'cat',POS = > >> > 'n',DEFIN...": > >> > > >> > > >> > Error 1 / no such table: WORD_DEFS > >> > > >> > > >> > has occurred. > >> > [Condition of type CLSQL-SYS:SQL-DATABASE-DATA-ERROR] > >> > The goal I'm trying to do is query from MSSQL (which works), and then > >> > insert > >> > the data into the sqlite database. I wanted to generate the error, to > >> > illustrate what the update-records is doing. With it uncommented out, > >> > it'll > >> > execute just fine...just not insert records. > >> > Is there a good way to accomplish what I'm trying to do? I was hoping > >> > for > >> > an insert-records-from-instance, but couldn't find anything that did > >> > that. > >> > -David > >> > _______________________________________________ > >> > CLSQL mailing list > >> > [email protected] > >> > http://lists.b9.com/cgi-bin/mailman/listinfo/clsql > >> > > >> > > >> _______________________________________________ > >> CLSQL mailing list > >> [email protected] > >> http://lists.b9.com/cgi-bin/mailman/listinfo/clsql > > > > > _______________________________________________ CLSQL mailing list [email protected] http://lists.b9.com/cgi-bin/mailman/listinfo/clsql