1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-29 08:01:23 +03:00

Update speedtest1.c with new testset "trigger" based on the tests in

speed4p.test.

FossilOrigin-Name: 7b7fa5fa0dd0dcef759ce1e22ade3a4e5fc8e8a244eac19b1abcc96d89c99721
This commit is contained in:
dan
2018-04-03 20:00:09 +00:00
parent 22f60b847c
commit b278c594f1
3 changed files with 210 additions and 7 deletions

View File

@ -1645,6 +1645,207 @@ void testset_orm(void){
speedtest1_end_test();
}
/*
*/
void testset_trigger(void){
int jj, ii;
char zNum[2000]; /* A number name */
const int NROW = 50000;
const int NROW2 = 10000;
speedtest1_exec(
"BEGIN;"
"CREATE TABLE t1(rowid INTEGER PRIMARY KEY, i INTEGER, t TEXT);"
"CREATE TABLE t2(rowid INTEGER PRIMARY KEY, i INTEGER, t TEXT);"
"CREATE TABLE t3(rowid INTEGER PRIMARY KEY, i INTEGER, t TEXT);"
"CREATE VIEW v1 AS SELECT rowid, i, t FROM t1;"
"CREATE VIEW v2 AS SELECT rowid, i, t FROM t2;"
"CREATE VIEW v3 AS SELECT rowid, i, t FROM t3;"
);
for(jj=1; jj<=3; jj++){
speedtest1_prepare("INSERT INTO t%d VALUES(NULL,?1,?2)", jj);
for(ii=0; ii<NROW; ii++){
int x1 = speedtest1_random() % NROW;
speedtest1_numbername(x1, zNum, sizeof(zNum));
sqlite3_bind_int(g.pStmt, 1, x1);
sqlite3_bind_text(g.pStmt, 2, zNum, -1, SQLITE_STATIC);
speedtest1_run();
}
}
speedtest1_exec(
"CREATE INDEX i1 ON t1(t);"
"CREATE INDEX i2 ON t2(t);"
"CREATE INDEX i3 ON t3(t);"
"COMMIT;"
);
speedtest1_begin_test(100, "speed4p-join1");
speedtest1_prepare(
"SELECT * FROM t1, t2, t3 WHERE t1.oid = t2.oid AND t2.oid = t3.oid"
);
speedtest1_run();
speedtest1_end_test();
speedtest1_begin_test(110, "speed4p-join2");
speedtest1_prepare(
"SELECT * FROM t1, t2, t3 WHERE t1.t = t2.t AND t2.t = t3.t"
);
speedtest1_run();
speedtest1_end_test();
speedtest1_begin_test(120, "speed4p-view1");
for(jj=1; jj<=3; jj++){
speedtest1_prepare("SELECT * FROM v%d WHERE rowid = ?", jj);
for(ii=0; ii<NROW2; ii+=3){
sqlite3_bind_int(g.pStmt, 1, ii*3);
speedtest1_run();
}
}
speedtest1_end_test();
speedtest1_begin_test(130, "speed4p-table1");
for(jj=1; jj<=3; jj++){
speedtest1_prepare("SELECT * FROM t%d WHERE rowid = ?", jj);
for(ii=0; ii<NROW2; ii+=3){
sqlite3_bind_int(g.pStmt, 1, ii*3);
speedtest1_run();
}
}
speedtest1_end_test();
speedtest1_begin_test(140, "speed4p-table1");
for(jj=1; jj<=3; jj++){
speedtest1_prepare("SELECT * FROM t%d WHERE rowid = ?", jj);
for(ii=0; ii<NROW2; ii+=3){
sqlite3_bind_int(g.pStmt, 1, ii*3);
speedtest1_run();
}
}
speedtest1_end_test();
speedtest1_begin_test(150, "speed4p-subselect1");
speedtest1_prepare("SELECT "
"(SELECT t FROM t1 WHERE rowid = ?1),"
"(SELECT t FROM t2 WHERE rowid = ?1),"
"(SELECT t FROM t3 WHERE rowid = ?1)"
);
for(jj=0; jj<NROW2; jj++){
sqlite3_bind_int(g.pStmt, 1, jj*3);
speedtest1_run();
}
speedtest1_end_test();
speedtest1_begin_test(160, "speed4p-rowid-update");
speedtest1_exec("BEGIN");
speedtest1_prepare("UPDATE t1 SET i=i+1 WHERE rowid=?1");
for(jj=0; jj<NROW2; jj++){
sqlite3_bind_int(g.pStmt, 1, jj);
speedtest1_run();
}
speedtest1_exec("COMMIT");
speedtest1_end_test();
speedtest1_exec("CREATE TABLE t5(t TEXT PRIMARY KEY, i INTEGER);");
speedtest1_begin_test(170, "speed4p-insert-ignore");
speedtest1_exec("INSERT OR IGNORE INTO t5 SELECT t, i FROM t1");
speedtest1_end_test();
speedtest1_exec(
"CREATE TABLE log(op TEXT, r INTEGER, i INTEGER, t TEXT);"
"CREATE TABLE t4(rowid INTEGER PRIMARY KEY, i INTEGER, t TEXT);"
"CREATE TRIGGER t4_trigger1 AFTER INSERT ON t4 BEGIN"
" INSERT INTO log VALUES('INSERT INTO t4', new.rowid, new.i, new.t);"
"END;"
"CREATE TRIGGER t4_trigger2 AFTER UPDATE ON t4 BEGIN"
" INSERT INTO log VALUES('UPDATE OF t4', new.rowid, new.i, new.t);"
"END;"
"CREATE TRIGGER t4_trigger3 AFTER DELETE ON t4 BEGIN"
" INSERT INTO log VALUES('DELETE OF t4', old.rowid, old.i, old.t);"
"END;"
"BEGIN;"
);
speedtest1_begin_test(180, "speed4p-trigger1");
speedtest1_prepare("INSERT INTO t4 VALUES(NULL, ?1, ?2)");
for(jj=0; jj<NROW2; jj++){
speedtest1_numbername(jj, zNum, sizeof(zNum));
sqlite3_bind_int(g.pStmt, 1, jj);
sqlite3_bind_text(g.pStmt, 2, zNum, -1, SQLITE_STATIC);
speedtest1_run();
}
speedtest1_end_test();
/*
** Note: Of the queries, only half actually update a row. This property
** was copied over from speed4p.test, where it was probably introduced
** inadvertantly.
*/
speedtest1_begin_test(190, "speed4p-trigger2");
speedtest1_prepare("UPDATE t4 SET i = ?1, t = ?2 WHERE rowid = ?3");
for(jj=1; jj<=NROW2*2; jj+=2){
speedtest1_numbername(jj*2, zNum, sizeof(zNum));
sqlite3_bind_int(g.pStmt, 1, jj*2);
sqlite3_bind_text(g.pStmt, 2, zNum, -1, SQLITE_STATIC);
sqlite3_bind_int(g.pStmt, 3, jj);
speedtest1_run();
}
speedtest1_end_test();
/*
** Note: Same again.
*/
speedtest1_begin_test(200, "speed4p-trigger3");
speedtest1_prepare("DELETE FROM t4 WHERE rowid = ?1");
for(jj=1; jj<=NROW2*2; jj+=2){
sqlite3_bind_int(g.pStmt, 1, jj*2);
speedtest1_run();
}
speedtest1_end_test();
speedtest1_exec("COMMIT");
/*
** The following block contains the same tests as the above block that
** tests triggers, with one crucial difference: no triggers are defined.
** So the difference in speed between these tests and the preceding ones
** is the amount of time taken to compile and execute the trigger programs.
*/
speedtest1_exec(
"DROP TABLE t4;"
"DROP TABLE log;"
"VACUUM;"
"CREATE TABLE t4(rowid INTEGER PRIMARY KEY, i INTEGER, t TEXT);"
"BEGIN;"
);
speedtest1_begin_test(210, "speed4p-notrigger1");
speedtest1_prepare("INSERT INTO t4 VALUES(NULL, ?1, ?2)");
for(jj=0; jj<NROW2; jj++){
speedtest1_numbername(jj, zNum, sizeof(zNum));
sqlite3_bind_int(g.pStmt, 1, jj);
sqlite3_bind_text(g.pStmt, 2, zNum, -1, SQLITE_STATIC);
speedtest1_run();
}
speedtest1_end_test();
speedtest1_begin_test(210, "speed4p-notrigger2");
speedtest1_prepare("UPDATE t4 SET i = ?1, t = ?2 WHERE rowid = ?3");
for(jj=1; jj<=NROW2*2; jj+=2){
speedtest1_numbername(jj*2, zNum, sizeof(zNum));
sqlite3_bind_int(g.pStmt, 1, jj*2);
sqlite3_bind_text(g.pStmt, 2, zNum, -1, SQLITE_STATIC);
sqlite3_bind_int(g.pStmt, 3, jj);
speedtest1_run();
}
speedtest1_end_test();
speedtest1_begin_test(220, "speed4p-notrigger3");
speedtest1_prepare("DELETE FROM t4 WHERE rowid = ?1");
for(jj=1; jj<=NROW2*2; jj+=2){
sqlite3_bind_int(g.pStmt, 1, jj*2);
speedtest1_run();
}
speedtest1_end_test();
speedtest1_exec("COMMIT");
}
/*
** A testset used for debugging speedtest1 itself.
*/
@ -1945,6 +2146,8 @@ int main(int argc, char **argv){
testset_cte();
}else if( strcmp(zTSet,"fp")==0 ){
testset_fp();
}else if( strcmp(zTSet,"trigger")==0 ){
testset_trigger();
}else if( strcmp(zTSet,"rtree")==0 ){
#ifdef SQLITE_ENABLE_RTREE
testset_rtree(6, 147);