mirror of
https://github.com/tursodatabase/limbo.git
synced 2025-07-07 12:35:00 +00:00
153 lines
3.8 KiB
Tcl
Executable file
153 lines
3.8 KiB
Tcl
Executable file
#!/usr/bin/env tclsh
|
|
set testdir [file dirname $argv0]
|
|
source $testdir/tester.tcl
|
|
|
|
|
|
do_execsql_test_on_specific_db {:memory:} simple-rollback {
|
|
create table t (x);
|
|
insert into t values (1);
|
|
begin;
|
|
insert into t values (2);
|
|
rollback;
|
|
select * from t;
|
|
} {1}
|
|
|
|
do_execsql_test_on_specific_db {:memory:} simple-rollback-2 {
|
|
create table t (x);
|
|
begin;
|
|
insert into t values (1);
|
|
insert into t values (2);
|
|
rollback;
|
|
select * from t;
|
|
} {}
|
|
|
|
|
|
do_execsql_test_on_specific_db {:memory:} rollback-after-update {
|
|
create table t (x);
|
|
insert into t values (1);
|
|
insert into t values (2);
|
|
begin;
|
|
update t set x = x + 10;
|
|
rollback;
|
|
select * from t;
|
|
} {1 2}
|
|
|
|
do_execsql_test_on_specific_db {:memory:} rollback-after-delete {
|
|
create table t (x);
|
|
insert into t values (1);
|
|
insert into t values (2);
|
|
insert into t values (3);
|
|
begin;
|
|
delete from t where x = 2;
|
|
rollback;
|
|
select * from t order by x;
|
|
} {1 2 3}
|
|
|
|
do_execsql_test_on_specific_db {:memory:} rollback-mixed-operations {
|
|
create table t (x);
|
|
insert into t values (1);
|
|
insert into t values (2);
|
|
begin;
|
|
insert into t values (3);
|
|
update t set x = x + 10 where x = 1;
|
|
delete from t where x = 2;
|
|
rollback;
|
|
select * from t order by x;
|
|
} {1 2}
|
|
|
|
# The point of this test was to test we drop dirty pages after rollback by inserting into another table so that
|
|
# pages used are different.
|
|
do_execsql_test_on_specific_db {:memory:} insert-after-rollback {
|
|
create table t (x);
|
|
create table t2 (x);
|
|
insert into t values (1);
|
|
insert into t values (2);
|
|
begin;
|
|
insert into t values (3);
|
|
update t set x = x + 10 where x = 1;
|
|
delete from t where x = 2;
|
|
rollback;
|
|
insert into t2 values (1);
|
|
select * from t2 order by x;
|
|
} {1}
|
|
|
|
|
|
do_execsql_test_on_specific_db {:memory:} schema-change-rollback {
|
|
begin;
|
|
create table t (x);
|
|
insert into t values (1);
|
|
rollback;
|
|
PRAGMA integrity_check;
|
|
} {ok}
|
|
|
|
do_execsql_test_on_specific_db {:memory:} schema-change-rollback-version {
|
|
begin;
|
|
create table t (x);
|
|
insert into t values (1);
|
|
rollback;
|
|
PRAGMA schema_version;
|
|
} {0}
|
|
|
|
do_execsql_test_on_specific_db {:memory:} schema-version-after-update {
|
|
create table t (x);
|
|
PRAGMA schema_version;
|
|
} {1}
|
|
|
|
do_execsql_test_on_specific_db {:memory:} schema-change-rollback-2 {
|
|
begin;
|
|
create table t (x);
|
|
rollback;
|
|
select tbl_name from sqlite_schema;
|
|
} {}
|
|
|
|
do_execsql_test_on_specific_db {:memory:} schema-change-rollback-2 {
|
|
create table before (x);
|
|
begin;
|
|
create table t (x);
|
|
rollback;
|
|
create table after (x);
|
|
select tbl_name from sqlite_schema;
|
|
} {before after}
|
|
|
|
|
|
do_execsql_test_on_specific_db {:memory:} schema-alter-rollback {
|
|
create table t (x);
|
|
begin;
|
|
alter table t add column y;
|
|
rollback;
|
|
select sql from sqlite_schema;
|
|
} {"CREATE TABLE t (x)"}
|
|
|
|
do_execsql_test_on_specific_db {:memory:} schema-alter-rollback-and-repeat {
|
|
create table t (x);
|
|
begin;
|
|
alter table t add column y;
|
|
rollback;
|
|
alter table t add column y;
|
|
select sql from sqlite_schema;
|
|
} {"CREATE TABLE t (x, y)"}
|
|
|
|
if {[info exists ::env(SQLITE_EXEC)] && ($::env(SQLITE_EXEC) eq "scripts/limbo-sqlite3-index-experimental" || $::env(SQLITE_EXEC) eq "sqlite3")} {
|
|
do_execsql_test_on_specific_db {:memory:} schema-create-index-rollback {
|
|
create table t (x);
|
|
begin;
|
|
create index i on t(x);
|
|
rollback;
|
|
select sql from sqlite_schema;
|
|
} {"CREATE TABLE t (x)"}
|
|
}
|
|
|
|
|
|
do_execsql_test_on_specific_db {:memory:} schema-drop-table-rollback {
|
|
create table t (x);
|
|
begin;
|
|
drop table t;
|
|
rollback;
|
|
select sql from sqlite_schema;
|
|
} {"CREATE TABLE t (x)"}
|
|
|
|
|
|
# TODO: add tests for:
|
|
# * create virtual table
|
|
# * drop index
|
|
# * views...
|