I've been trying out Chris Collins code and I believe there may be a bug. So here is my J session. NB. ========================================================= NB. Start of J session load 'data/jdb' [ffd=: Open_jdb_ jpath '~temp' +-+ |1| +-+ Drop__ffd 'testdb' [db=: Create__ffd 'testdb' +-+ |2| +-+ ht=: Create__db 'tblVarChar';0 : 0 field1 varchar ) ht +-+ |3| +-+ NB. At this point, we know that my server locale is 1, my database locale is 2 and the table 'tblVarChar' is in locale 3. NB. I'm going to insert a sequence of data and read the table immediately Insert__db 'tblVarChar';'a' Read__db 'from tblVarChar' +------+---+ |field1|+-+| | ||a|| | |+-+| +------+---+ ;:'bb ccc dddd eeeee ffffff' +--+---+----+-----+------+ |bb|ccc|dddd|eeeee|ffffff| +--+---+----+-----+------+ Insert__db 'tblVarChar';<<;:'bb ccc dddd eeeee ffffff' Read__db 'from tblVarChar' +------+----------------------------+ |field1|+-+--+---+----+-----+------+| | ||a|bb|ccc|dddd|eeeee|ffffff|| | |+-+--+---+----+-----+------+| +------+----------------------------+ NB. Up to this point, everything is going well, not I am going to force the JDB Insert method to fail by inserting NB. data in a format that it did not expect Insert__db 'tblVarChar';<'zz' |assertion failure: validate | 1=#~.(#@".)&>'active';Tcolmap Read__db 'from tblVarChar' |index error: readbase1 | (rws{".)&.>cls
NB. End of J Session NB. ========================================================= I believe that the data itself is not corrupted because the data can still be seen there (note that 'zz' was saved) c2__ht +-+--+---+----+-----+------+--+ |a|bb|ccc|dddd|eeeee|ffffff|zz| +-+--+---+----+-----+------+--+ >From what I remember from the discussions, JDB is transactional ... is there a >way to rollback? I feel that this should be considered a bug. r/Alex -----Original Message----- From: programming-boun...@jsoftware.com [mailto:programming-boun...@jsoftware.com] On Behalf Of christopher collins Sent: Thursday, December 17, 2009 2:12 PM To: programming@jsoftware.com Subject: [Jprogramming] Newbie JDB problem: inserting chars in a 1 column char table gives 'assertion failure' Thanks to all for your help, especially Mr. Lam. Your response, Mr. Lam, was very instructive. I used your input to explore a bit more, with a couple of questions arising. See the questions embedded below: ***************************** load 'data/jdb' ffd =: Open_jdb_ jpath , '~temp' Drop__ffd 'testdb' db =: Create__ffd 'testdb' ht=: Create__db 'tblChar';0 : 0 c1 char ) NB. JDB doc says a 'char' column is stored as a character matrix NB. The next sentence works, even though it inserts a scalar, 'a' NB. QUESTION: Is this contrary to the JDB doc? Insert__db 'tblChar';'a' ]shape =. $'a' NB. Inserts a list of shape 1 Insert__db 'tblChar';,'b' ]shape =. $ ,'b' NB. Inserts a list of shape 3 1 Insert__db 'tblChar';,.'def' ]shape =. $ ,.'def' NB. Inserts a list of shape 1 4 Insert__db 'tblChar';,:'ghih' ]shape =. $ ,:'ghih' Insert__db 'tblChar';3 5 $'123457' Insert__db 'tblChar';,:'012345678901234567890' ]shape=.$ ,:'012345678901234567890' NB. A JDB 'char' column allows chars of varying lengths to be inserted Insert__db 'tblChar';2 100$'1234567890' Reads__db 'from tblChar' NB. The insert below causes a failure NB. After this the table can no longer be read. NB. QUESTION: Is that behavior intended? NB. If so, JDB seems a little fragile for the rough, unskilled hands of newbies like me NB. This insert, where '01' is a list of shape 2, fails even though an insert of 'b', a list of shape 1 worked above. NB. QUESTION: Is this behavior consistent in a way that I am not understanding? Insert__db 'tblChar';'01' Reads__db 'from tblChar' Thanks again for the high quality help & instruction. --chris-- ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm