aboutsummaryrefslogtreecommitdiff
path: root/sqitch/sqlite
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2021-12-22 11:41:27 +0000
committerChristopher Baines <mail@cbaines.net>2021-12-22 11:41:27 +0000
commit26a440be76e17df608407700302e12599d7dd681 (patch)
treec950d3ce71bb904262564dc4f0e422acb64bb5a2 /sqitch/sqlite
parent0504521fa8b7dbd3f854540c6675e777cb64121a (diff)
downloadbuild-coordinator-26a440be76e17df608407700302e12599d7dd681.tar
build-coordinator-26a440be76e17df608407700302e12599d7dd681.tar.gz
Fix unprocessed_builds_with_derived_priorities
A couple of the queries were wrong, this fixes it.
Diffstat (limited to 'sqitch/sqlite')
-rw-r--r--sqitch/sqlite/deploy/recreate_unprocessed_builds_with_derived_priorities.sql70
-rw-r--r--sqitch/sqlite/revert/recreate_unprocessed_builds_with_derived_priorities.sql7
-rw-r--r--sqitch/sqlite/verify/recreate_unprocessed_builds_with_derived_priorities.sql7
3 files changed, 84 insertions, 0 deletions
diff --git a/sqitch/sqlite/deploy/recreate_unprocessed_builds_with_derived_priorities.sql b/sqitch/sqlite/deploy/recreate_unprocessed_builds_with_derived_priorities.sql
new file mode 100644
index 0000000..dc56ce8
--- /dev/null
+++ b/sqitch/sqlite/deploy/recreate_unprocessed_builds_with_derived_priorities.sql
@@ -0,0 +1,70 @@
+-- Deploy guix-build-coordinator:recreate_unprocessed_builds_with_derived_priorities to sqlite
+
+BEGIN;
+
+DROP TABLE unprocessed_builds_with_derived_priorities;
+
+CREATE TABLE unprocessed_builds_with_derived_priorities (
+ build_id INTEGER PRIMARY KEY REFERENCES builds (id),
+ derived_priority INTEGER NOT NULL,
+ all_inputs_built BOOLEAN NOT NULL
+);
+
+INSERT INTO unprocessed_builds_with_derived_priorities WITH RECURSIVE unprocessed_builds AS (
+ SELECT id
+ FROM builds
+ WHERE processed = 0
+ AND canceled = 0
+ AND (
+ deferred_until IS NULL
+ OR
+ deferred_until < datetime('now')
+ )
+), builds_with_derived_priority(
+ id, derivation_id, derived_priority
+ ) AS (
+ SELECT builds.id, builds.derivation_id, builds.priority
+ FROM builds
+ INNER JOIN unprocessed_builds
+ ON builds.id = unprocessed_builds.id
+UNION
+ SELECT builds.id, builds.derivation_id,
+ max(builds.priority, builds_with_derived_priority.derived_priority)
+ FROM builds_with_derived_priority
+ INNER JOIN derivation_inputs
+ ON builds_with_derived_priority.derivation_id = derivation_inputs.derivation_id
+ INNER JOIN derivation_outputs
+ ON derivation_inputs.derivation_output_id = derivation_outputs.id
+ INNER JOIN unbuilt_outputs
+ ON unbuilt_outputs.output_id = derivation_outputs.output_id
+ INNER JOIN derivation_outputs AS all_derivation_outputs
+ ON all_derivation_outputs.output_id = unbuilt_outputs.output_id
+ INNER JOIN builds
+ ON builds.processed = 0
+ AND builds.derivation_id = all_derivation_outputs.derivation_id
+), data AS (
+ SELECT builds.id AS build_id, MAX(derived_priority)
+ FROM builds_with_derived_priority
+ INNER JOIN builds
+ ON builds.id = builds_with_derived_priority.id
+ WHERE builds.processed = 0
+ GROUP BY builds.id
+)
+SELECT data.*,
+ NOT EXISTS (
+ SELECT 1
+ FROM derivation_inputs
+ INNER JOIN derivation_outputs
+ ON derivation_inputs.derivation_output_id = derivation_outputs.id
+ INNER JOIN unbuilt_outputs
+ ON unbuilt_outputs.output_id = derivation_outputs.output_id
+ WHERE builds.derivation_id = derivation_inputs.derivation_id
+ )
+FROM data
+INNER JOIN builds ON builds.id = data.build_id;
+
+CREATE INDEX unprocessed_builds_with_derived_priorities_derived_priorities_index_for_all_inputs_built
+ ON unprocessed_builds_with_derived_priorities (derived_priority)
+ WHERE all_inputs_built = 1;
+
+COMMIT;
diff --git a/sqitch/sqlite/revert/recreate_unprocessed_builds_with_derived_priorities.sql b/sqitch/sqlite/revert/recreate_unprocessed_builds_with_derived_priorities.sql
new file mode 100644
index 0000000..652a2df
--- /dev/null
+++ b/sqitch/sqlite/revert/recreate_unprocessed_builds_with_derived_priorities.sql
@@ -0,0 +1,7 @@
+-- Revert guix-build-coordinator:recreate_unprocessed_builds_with_derived_priorities from sqlite
+
+BEGIN;
+
+-- XXX Add DDLs here.
+
+COMMIT;
diff --git a/sqitch/sqlite/verify/recreate_unprocessed_builds_with_derived_priorities.sql b/sqitch/sqlite/verify/recreate_unprocessed_builds_with_derived_priorities.sql
new file mode 100644
index 0000000..fcb94c6
--- /dev/null
+++ b/sqitch/sqlite/verify/recreate_unprocessed_builds_with_derived_priorities.sql
@@ -0,0 +1,7 @@
+-- Verify guix-build-coordinator:recreate_unprocessed_builds_with_derived_priorities on sqlite
+
+BEGIN;
+
+-- XXX Add verifications here.
+
+ROLLBACK;