forked from AbleOS/holey-bytes
adding import count to posts
This commit is contained in:
parent
0aa355695a
commit
b12579ff65
1
depell/src/icons/download.svg
Normal file
1
depell/src/icons/download.svg
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M480-320 280-520l56-58 104 104v-326h80v326l104-104 56 58-200 200ZM240-160q-33 0-56.5-23.5T160-240v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-160H240Z"/></svg>
|
After Width: | Height: | Size: 279 B |
|
@ -44,10 +44,11 @@ div.preview {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
div.stats {
|
div.stat {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: var(--small-gap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
margin: var(--small-gap) 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
form {
|
form {
|
||||||
|
|
|
@ -253,6 +253,7 @@ impl Post {
|
||||||
name: r.get(1)?,
|
name: r.get(1)?,
|
||||||
timestamp: r.get(2)?,
|
timestamp: r.get(2)?,
|
||||||
code: r.get(3)?,
|
code: r.get(3)?,
|
||||||
|
imports: r.get(4)?,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -322,13 +323,12 @@ impl fmt::Display for Post {
|
||||||
name
|
name
|
||||||
</span>
|
</span>
|
||||||
<span apply="timestamp">timestamp</span>
|
<span apply="timestamp">timestamp</span>
|
||||||
</div>
|
for (name, count) in [include_str!("icons/download.svg"), "runs", "deps"]
|
||||||
<div class="stats">
|
.iter()
|
||||||
for (name, count) in "inps runs deps".split(' ')
|
|
||||||
.zip([imports, runs, dependencies])
|
.zip([imports, runs, dependencies])
|
||||||
.filter(|(_, &c)| c != 0)
|
.filter(|(_, &c)| c != 0)
|
||||||
{
|
{
|
||||||
name ": "<span>count</span>
|
<div class="stat">!name count</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<pre apply="fmt">code</pre>
|
<pre apply="fmt">code</pre>
|
||||||
|
@ -759,7 +759,18 @@ mod db {
|
||||||
get_session: "SELECT username, expiration FROM session WHERE id = ?",
|
get_session: "SELECT username, expiration FROM session WHERE id = ?",
|
||||||
get_user_posts: "SELECT author, name, timestamp, code FROM post WHERE author = ?
|
get_user_posts: "SELECT author, name, timestamp, code FROM post WHERE author = ?
|
||||||
ORDER BY timestamp DESC",
|
ORDER BY timestamp DESC",
|
||||||
get_pots_before: "SELECT author, name, timestamp, code FROM post WHERE timestamp < ?",
|
// TODO: we might want to cache the recursive queries
|
||||||
|
get_pots_before: "SELECT author, name, timestamp, code, (
|
||||||
|
WITH RECURSIVE roots(name, author, code) AS (
|
||||||
|
SELECT name, author, code FROM post WHERE name = outher.name AND author = outher.author
|
||||||
|
UNION
|
||||||
|
SELECT post.name, post.author, post.code FROM
|
||||||
|
post JOIN import ON post.name = import.from_name
|
||||||
|
AND post.author = import.from_author
|
||||||
|
JOIN roots ON import.to_name = roots.name
|
||||||
|
AND import.to_author = roots.author
|
||||||
|
) SELECT (count(*) - 1) FROM roots
|
||||||
|
) AS imports FROM post AS outher WHERE timestamp < ?",
|
||||||
create_post: "INSERT INTO post (name, author, timestamp, code) VALUES(?, ?, ?, ?)",
|
create_post: "INSERT INTO post (name, author, timestamp, code) VALUES(?, ?, ?, ?)",
|
||||||
fetch_deps: "
|
fetch_deps: "
|
||||||
WITH RECURSIVE roots(name, author, code) AS (
|
WITH RECURSIVE roots(name, author, code) AS (
|
||||||
|
@ -800,8 +811,22 @@ mod db {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn init() {
|
pub fn init() {
|
||||||
|
const SCHEMA_VERSION: usize = 0;
|
||||||
|
const MIGRATIONS: &[&str] = &[include_str!("migrations/1.sql")];
|
||||||
|
|
||||||
let db = rusqlite::Connection::open("db.sqlite").unwrap();
|
let db = rusqlite::Connection::open("db.sqlite").unwrap();
|
||||||
db.execute_batch(include_str!("schema.sql")).unwrap();
|
db.execute_batch(include_str!("schema.sql")).unwrap();
|
||||||
|
|
||||||
|
let schema_version =
|
||||||
|
db.pragma_query_value(None, "user_version", |v| v.get::<_, usize>(0)).unwrap();
|
||||||
|
|
||||||
|
if schema_version != SCHEMA_VERSION {
|
||||||
|
for &mig in &MIGRATIONS[schema_version..] {
|
||||||
|
db.execute_batch(mig).expect(mig);
|
||||||
|
}
|
||||||
|
db.pragma_update(None, "user_version", SCHEMA_VERSION).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
Queries::new(&db);
|
Queries::new(&db);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
1
depell/src/migrations/1.sql
Normal file
1
depell/src/migrations/1.sql
Normal file
|
@ -0,0 +1 @@
|
||||||
|
|
|
@ -9,11 +9,7 @@ use {
|
||||||
PLoc, Sig, Types,
|
PLoc, Sig, Types,
|
||||||
},
|
},
|
||||||
alloc::{borrow::ToOwned, vec::Vec},
|
alloc::{borrow::ToOwned, vec::Vec},
|
||||||
core::{
|
core::{mem, ops::Range},
|
||||||
mem,
|
|
||||||
ops::{Range, RangeBounds},
|
|
||||||
usize,
|
|
||||||
},
|
|
||||||
hbbytecode::{self as instrs},
|
hbbytecode::{self as instrs},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue