mirror of
https://github.com/Blah-IM/blahrs.git
synced 2025-05-21 17:41:09 +00:00
test: add method to dump query plans
This commit is contained in:
parent
5c4dfd4a96
commit
8876480732
2 changed files with 36 additions and 2 deletions
2
.github/workflows/ci.yaml
vendored
2
.github/workflows/ci.yaml
vendored
|
@ -51,7 +51,7 @@ jobs:
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install sqlite
|
- name: Install sqlite
|
||||||
run: sudo apt-get install --no-install-recommends -y libsqlite3-dev
|
run: sudo apt-get install --no-install-recommends -y libsqlite3-dev sqlite3
|
||||||
|
|
||||||
- name: Disable high-priority rust-toolchain.toml
|
- name: Disable high-priority rust-toolchain.toml
|
||||||
run: rm rust-toolchain.toml
|
run: rm rust-toolchain.toml
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
#![expect(clippy::print_stdout, reason = "allowed in tests for debugging")]
|
#![expect(clippy::print_stdout, reason = "allowed in tests for debugging")]
|
||||||
|
use std::fmt::Write;
|
||||||
|
use std::fs;
|
||||||
|
use std::process::{Command, Stdio};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
const SRC_PATH: &str = "src/database.rs";
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn init_sql_valid() {
|
fn init_sql_valid() {
|
||||||
let conn = Connection::open_in_memory().unwrap();
|
let conn = Connection::open_in_memory().unwrap();
|
||||||
|
@ -20,7 +26,7 @@ fn init_sql_valid() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn stmt_cache_capacity() {
|
fn stmt_cache_capacity() {
|
||||||
let src = std::fs::read_to_string("src/database.rs").unwrap();
|
let src = fs::read_to_string(SRC_PATH).unwrap();
|
||||||
let sql_cnt = src.matches("prepare_cached_and_bind!").count();
|
let sql_cnt = src.matches("prepare_cached_and_bind!").count();
|
||||||
println!("found {sql_cnt} SQLs");
|
println!("found {sql_cnt} SQLs");
|
||||||
assert_ne!(sql_cnt, 0);
|
assert_ne!(sql_cnt, 0);
|
||||||
|
@ -29,3 +35,31 @@ fn stmt_cache_capacity() {
|
||||||
"stmt cache capacity {STMT_CACHE_CAPACITY} is too small, found {sql_cnt} SQLs",
|
"stmt cache capacity {STMT_CACHE_CAPACITY} is too small, found {sql_cnt} SQLs",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[ignore = "only for debugging"]
|
||||||
|
fn dump_query_plan() {
|
||||||
|
let src = fs::read_to_string(SRC_PATH).unwrap();
|
||||||
|
let mut cmds = String::new();
|
||||||
|
for (pos, _) in src.match_indices("prepare_cached_and_bind!") {
|
||||||
|
let line = src[..pos].matches('\n').count() + 1;
|
||||||
|
let sql = src[pos..]
|
||||||
|
.lines()
|
||||||
|
// Skip macro call, first argument, `r"`.
|
||||||
|
.skip(3)
|
||||||
|
.take_while(|line| line.trim() != "\"")
|
||||||
|
.flat_map(|line| [line.trim(), "\n"])
|
||||||
|
.collect::<String>();
|
||||||
|
writeln!(cmds, "SELECT '{SRC_PATH}:{line}';").unwrap();
|
||||||
|
writeln!(cmds, "EXPLAIN QUERY PLAN {sql};").unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
let st = Command::new("sqlite3")
|
||||||
|
.stdin(Stdio::null())
|
||||||
|
.stdout(Stdio::inherit())
|
||||||
|
.stderr(Stdio::inherit())
|
||||||
|
.args([":memory:", ".read ./schema.sql", &cmds])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
assert!(st.success());
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue