On 2 Nov 2012, at 8:58am, Ivan Shmakov <oneing...@gmail.com> wrote: > INSERT OR IGNORE INTO "foo" ("foo") > VALUES (?1); > INSERT INTO "bar" ("foo") > VALUES ((SELECT f."rowid" FROM "foo" f WHERE f."foo" = ?1)); > > Or is there a better way to ensure that the inner SELECT either > returns a single row, or fails?
What do you mean by 'fails' ? Returning zero rows from a SELECT is not failure: it's successfully reporting that there are no such rows in the table. And there may be rows in the table even if the first INSERT failed: the rows may have already been inserted. If what you mean is that some syntax error or conflict prevented the first INSERT from working, the correct way to do it is to look at the result returned from that INSERT and see whether it is SQLITE_OK. Howwever, if you just want to know whether there are any relevant rows in the table ... Solution 1: Before doing the second INSERT command do SELECT count(*) FROM foo WHERE foo.foo = ?1 and look at the number it returns. Solution 2: Call sqlite3_last_insert_rowid(sqlite3*) both before and after the first INSERT and see whether the value changes. Simon. _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users