Le dimanche 27 décembre 2015 20:07:47 UTC+1, Jeremy Evans a écrit : > > On Sunday, December 27, 2015 at 9:47:10 AM UTC-8, Jean-Luc Derrien wrote: >> >> Hello, >> >> I'm facing an error with Sequel and sqlite described on this Gist: >> https://gist.github.com/jderrien/279556fe2edabd9a1df1 >> >> I get this error when messages are duplicated. Replacing `create` by >> `insert` will fix the problem, but I'd like to use the timestamps plugin >> which doesn't work with the `insert` method. Even if I get this error, data >> are correctly saved. >> >> Is it a bug or is it just a bad use? What would be the most elegant way >> to fix this problem? >> > > I can't replicate the issue with your gist. Here's the end of my irb > session: > > irb(main):030:0> Topic.each do |topic| > irb(main):031:1* topic.parse > irb(main):032:1> end > ==> Parse topic 'http://foo.bar/topic1' > Import message: message-1 > I, [2015-12-27T11:04:29.762455 #31282] INFO -- : (0.000036s) BEGIN > I, [2015-12-27T11:04:29.762830 #31282] INFO -- : (0.000160s) INSERT INTO > `messages` (`text`) VALUES ('message-1') > I, [2015-12-27T11:04:29.762935 #31282] INFO -- : (0.000030s) COMMIT > Import message: message-2 > I, [2015-12-27T11:04:29.763082 #31282] INFO -- : (0.000021s) BEGIN > I, [2015-12-27T11:04:29.763267 #31282] INFO -- : (0.000045s) INSERT INTO > `messages` (`text`) VALUES ('message-2') > I, [2015-12-27T11:04:29.763341 #31282] INFO -- : (0.000029s) COMMIT > Import message: message-3 > I, [2015-12-27T11:04:29.763464 #31282] INFO -- : (0.000019s) BEGIN > I, [2015-12-27T11:04:29.763620 #31282] INFO -- : (0.000042s) INSERT INTO > `messages` (`text`) VALUES ('message-3') > I, [2015-12-27T11:04:29.763691 #31282] INFO -- : (0.000030s) COMMIT > ==> Parse topic 'http://foo.bar/topic2' > Import message: message-1 > I, [2015-12-27T11:04:29.763822 #31282] INFO -- : (0.000017s) BEGIN > E, [2015-12-27T11:04:29.764058 #31282] ERROR -- : > SQLite3::ConstraintException: UNIQUE constraint failed: messages.text: > INSERT INTO `messages` (`text`) VALUES ('message-1') > I, [2015-12-27T11:04:29.764343 #31282] INFO -- : (0.000077s) ROLLBACK > Import message: message-2 > I, [2015-12-27T11:04:29.764490 #31282] INFO -- : (0.000020s) BEGIN > E, [2015-12-27T11:04:29.764649 #31282] ERROR -- : > SQLite3::ConstraintException: UNIQUE constraint failed: messages.text: > INSERT INTO `messages` (`text`) VALUES ('message-2') > I, [2015-12-27T11:04:29.764855 #31282] INFO -- : (0.000021s) ROLLBACK > Import message: message-3 > I, [2015-12-27T11:04:29.764973 #31282] INFO -- : (0.000018s) BEGIN > E, [2015-12-27T11:04:29.765123 #31282] ERROR -- : > SQLite3::ConstraintException: UNIQUE constraint failed: messages.text: > INSERT INTO `messages` (`text`) VALUES ('message-3') > I, [2015-12-27T11:04:29.765315 #31282] INFO -- : (0.000022s) ROLLBACK > I, [2015-12-27T11:04:29.765366 #31282] INFO -- : (0.003574s) SELECT * > FROM `topics` > => #<Sequel::SQLite::Dataset: "SELECT * FROM `topics`"> > > This example was run using ruby 2.2.3, ruby-sqlite3 1.3.10, and sqlite3 > 3.8.11.1, it's possible other versions have different behavior. > > In general, it is not safe to send any queries to the database inside a > Dataset#each block. You could try switching the Topic.each to Topic.all > and see if that makes a difference. > > Thanks, > Jeremy >
Hello Jeremy, You're right, it works well with Topic.all. That's the first time I use Sequel and I haven't noticed the warning on the Dataset#each method until now. Thank you for pointing it out and for your great work on Sequel as well. For info, I'm using ruby 2.0.0, ruby-sqlite3 1.3.7 and sqlite 3.7.13. Best regards. -- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/sequel-talk. For more options, visit https://groups.google.com/d/optout.
