On 08/26/2015 09:03 PM, Richard Hipp wrote:
> Time stands still for multiple rows, as long as they are within the > same sqlite3_step() call. For example, if you run: > > CREATE TABLE t1(a DATETIME); > WITH RECURSIVE > c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<1000000000) > INSERT INTO t1(a) SELECT datetime('now') FROM c; > > The entire INSERT statement will be a single sqlite3_step() call, and > so all billion rows of t1 will get set to the same time. I have tested this code with version 3.8.10.2 using "DB Browser for SQLite" and it would crash; the same with SQLite Manager that uses the same version. I have decided to use the latest SQLite version available from GNU / Linux Debian testing 64-bit; it's 3.8.11.1 and something strange is happening. I hope I'm the reason behind its rather peculiar behavior. I tested the following code *sqlite> drop table if exists t1; create table t1(a datetime); begin; with recursive c(x) as (values(1) union all select x + 1 from c where x < 1000000000) insert into t1(a) select datetime('now') from c; commit;* It would take ages to finish and that is logical; it's a billion rows it has to insert, even though I have used begin - commit. Now the rather strange behavior would be when I use the up arrow key to reuse the previous code but replacing *1000000000* with *10*. It takes the same time to finish as before and that is not right; I'm dropping the table and it should take nearly 0 milliseconds for 10 rows. Can someone confirm this? Cheers.