diff --git a/Makefile.am b/Makefile.am index 98f89f9f28a3d061ea0824c393d59b26883b2e07..17a73f09f5b8a6da49bbfe99987bf4d8fc8a18ee 100644 --- a/Makefile.am +++ b/Makefile.am @@ -84,7 +84,8 @@ dist_sql_DATA = \ src/sql/upgrade-12.sql \ src/sql/upgrade-13.sql \ src/sql/upgrade-14.sql \ - src/sql/upgrade-15.sql + src/sql/upgrade-15.sql \ + src/sql/upgrade-16.sql dist_css_DATA = \ src/static/css/cuirass.css \ diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm index 94060b70a198b820f590383cd21252f5e2b274f5..9b17c675609854ea3ec328c21b74bb6ec93f507e 100644 --- a/src/cuirass/database.scm +++ b/src/cuirass/database.scm @@ -734,7 +734,9 @@ path) VALUES (" (#:starttime . 0) (#:stoptime . 0)))) (if period - (let* ((time (db-get-time-since-previous-build job-name)) + (let* ((spec (db-get-evaluation-specification eval-id)) + (time + (db-get-time-since-previous-build job-name spec)) (add-build? (cond ((not time) #t) ((> time period) #t) @@ -1082,14 +1084,15 @@ ORDER BY ~a;" (let ((key (if (number? derivation-or-id) 'id 'derivation))) (expect-one-row (db-get-builds `((,key . ,derivation-or-id))))))) -(define (db-get-time-since-previous-build job-name) +(define (db-get-time-since-previous-build job-name specification) "Return the time difference in seconds between the current time and the -registration time of the last build for JOB-NAME." +registration time of the last build for JOB-NAME and SPECIFICATION." (with-db-worker-thread db (let ((rows (sqlite-exec db " -SELECT strftime('%s', 'now') - timestamp FROM Builds -WHERE job_name = " job-name -"ORDER BY timestamp DESC LIMIT 1"))) +SELECT strftime('%s', 'now') - Builds.timestamp FROM Builds +INNER JOIN Evaluations on Builds.evaluation = Evaluations.id +WHERE job_name = " job-name "AND specification = " specification +"ORDER BY Builds.timestamp DESC LIMIT 1"))) (and=> (expect-one-row rows) (cut vector-ref <> 0))))) (define (db-add-event type timestamp details) diff --git a/src/schema.sql b/src/schema.sql index 1eeac80e294f0392c5c513625bef3f5f0eaccca1..6b08b7eb707e2c0f3ce459482b3e5d3e350fc3d0 100644 --- a/src/schema.sql +++ b/src/schema.sql @@ -99,6 +99,7 @@ CREATE TABLE Events ( -- an index. It is also preferable for the other tables. CREATE INDEX Builds_status_index ON Builds (status); CREATE INDEX Builds_evaluation_index ON Builds (evaluation, status); +CREATE INDEX Builds_job_name_timestamp on Builds(job_name, timestamp); CREATE INDEX Builds_nix_name ON Builds (nix_name COLLATE NOCASE); CREATE INDEX Builds_timestamp_stoptime on Builds(timestamp, stoptime); CREATE INDEX Builds_stoptime on Builds(stoptime DESC); diff --git a/src/sql/upgrade-16.sql b/src/sql/upgrade-16.sql new file mode 100644 index 0000000000000000000000000000000000000000..47d498ca3cccad9cb40316643dbf50cce387f782 --- /dev/null +++ b/src/sql/upgrade-16.sql @@ -0,0 +1,5 @@ +BEGIN TRANSACTION; + +CREATE INDEX Builds_job_name_timestamp on Builds(job_name, timestamp); + +COMMIT;