diff --git a/default.nix b/default.nix
index 6f306ac..01ecf46 100644
--- a/default.nix
+++ b/default.nix
@@ -88,7 +88,7 @@ lib.makeScope pkgs.newScope (
datasette-settings = self.callPackage (
{ formats }:
(formats.json { }).generate "datasette-settings.json" {
- sql_time_limit_ms = 16000;
+ sql_time_limit_ms = 8000;
}
) { };
datasette-metadata = self.callPackage (
@@ -122,18 +122,38 @@ lib.makeScope pkgs.newScope (
CudaArtifact
s (identified by sha256
)
claiming the same (pname, version, platform)
triple
'';
- sql = builtins.readFile ./src/q/summary-cuda-conflicts.sql;
- };
- queries.cuda_pnames = {
- title = "Known CUDA Artifacts";
- description_html = ''
- Overview of known CUDA artifacts sorted by pname
+ sql = ''
+ SELECT
+ COUNT(DISTINCT sha256) AS conflicts,
+ pname.str AS pname,
+ ver.str AS ver,
+ plat.str AS plat,
+ GROUP_CONCAT(name.str, char(10)) AS name,
+ GROUP_CONCAT(tag.str, char(10)) AS tag,
+ GROUP_CONCAT(h.hash, char(10)) AS sha256
+ FROM
+ (
+ CudaArtifact AS cc,
+ Str AS name,
+ Str AS pname,
+ Str as ver,
+ Str as plat,
+ Hash as h
+ ON cc.name=name.id
+ AND cc.pname=pname.id
+ AND cc.version = ver.id
+ AND cc.platform = plat.id
+ AND cc.sha256 = h.id
+ )
+ LEFT JOIN Str AS tag
+ ON
+ cc.compat_tag=tag.id
+ GROUP BY
+ cc.pname, cc.version, cc.platform
+ HAVING
+ conflicts >= CAST(:min_conflicts AS INTEGER)
+ ORDER BY conflicts DESC
'';
- sql = builtins.readFile ./src/q/summary-cuda-pnames.sql;
- };
- queries.cuda_platforms = {
- title = "CUDA: Supported Platforms ";
- sql = builtins.readFile ./src/q/summary-cuda-platforms.sql;
};
};
};
diff --git a/src/main.rs b/src/main.rs
index 0036224..ec3a3e5 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -186,7 +186,7 @@ async fn open_context(
}
let con = rusqlite::Connection::open(&db_path).expect("Failed to construct Database object");
- con.pragma_update(None, "journal_mode", "wal").unwrap();
+ con.pragma_update(None, "jorunal_mode", "wal").unwrap();
con.pragma_update(None, "synchronous", "normal").unwrap();
con.pragma_update(None, "temp_store", "memory").unwrap();
con.pragma_update(None, "foreign_keys", "on").unwrap();
@@ -238,86 +238,6 @@ where
}
}
-trait ConnectionLike {
- #[allow(dead_code)]
- fn execute(&self, sql: &str, params: P) -> rusqlite::Result;
- fn prepare_cached(&self, sql: &str) -> rusqlite::Result>;
-}
-
-impl ConnectionLike for rusqlite::Connection {
- fn execute(&self, sql: &str, params: P) -> rusqlite::Result {
- ::execute(self, sql, params)
- }
-
- fn prepare_cached(&self, sql: &str) -> rusqlite::Result> {
- ::prepare_cached(self, sql)
- }
-}
-
-impl<'a> ConnectionLike for rusqlite::Transaction<'a> {
- fn execute(&self, sql: &str, params: P) -> rusqlite::Result {
- ::execute(self, sql, params)
- }
-
- fn prepare_cached(&self, sql: &str) -> rusqlite::Result> {
- ::prepare_cached(self, sql)
- }
-}
-
-impl<'a> ConnectionLike for rusqlite::Savepoint<'a> {
- fn execute(&self, sql: &str, params: P) -> rusqlite::Result {
- ::execute(self, sql, params)
- }
-
- fn prepare_cached(&self, sql: &str) -> rusqlite::Result> {
- ::prepare_cached(self, sql)
- }
-}
-
-fn db_add_sample(
- tx: &mut rusqlite::Transaction<'_>,
- uri: &str,
- hash: &Option,
- http_code: &Option,
- content_type: &Option,
-) -> Result<(u32, u32), Error> {
- let mut sp = tx.savepoint().context("db_add_sample")?;
- sp.set_drop_behavior(rusqlite::DropBehavior::Commit);
- {
- if let Some(h) = hash {
- db_add_blob(&mut sp, &h.clone(), None)?;
- };
- let mut add_sample = sp
- .prepare_cached(include_str!("q/add-sample.sql"))
- .context("Failed to prepare add-sample.sql")?;
- return Ok(add_sample.query_row(
- named_params! {
- ":uri": uri,
- ":hash": hash,
- ":http_code": http_code,
- ":content_type": content_type
- },
- |row| <(u32, u32)>::try_from(row),
- )?);
- }
-}
-fn db_add_blob(
- con: &mut Con,
- hash: &str,
- n_bytes: Option,
-) -> Result {
- let mut add_blob = con
- .prepare_cached(include_str!("q/upsert-blob.sql"))
- .context("Failed to prepare upsert-blob.sql")?;
- Ok(add_blob.execute(params![hash, n_bytes,])?)
-}
-fn db_add_uri(con: &mut Con, uri: &str) -> Result {
- let mut add_uri = con
- .prepare_cached(include_str!("q/upsert-uri.sql"))
- .context("Failed to prepare upsert-uri.sql")?;
- Ok(add_uri.execute(params![uri])?)
-}
-
impl SidxContext {
async fn latest_sample(&self, uri: &str) -> Result