mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-18 09:04:19 +01:00
add simple tests for offset/limit binding
This commit is contained in:
@@ -103,6 +103,20 @@ test('avg-bug', async () => {
|
|||||||
expect(await db.prepare(`select avg(distinct "b") from "aggregate_table";`).get()).toEqual({ 'avg (DISTINCT aggregate_table.b)': 42.5 });
|
expect(await db.prepare(`select avg(distinct "b") from "aggregate_table";`).get()).toEqual({ 'avg (DISTINCT aggregate_table.b)': 42.5 });
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('offset-bug', async () => {
|
||||||
|
const db = await connect(":memory:");
|
||||||
|
await db.exec(`CREATE TABLE users (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
name TEXT NOT NULL,
|
||||||
|
verified integer not null default 0
|
||||||
|
);`);
|
||||||
|
const insert = db.prepare(`INSERT INTO users (name) VALUES (?),(?);`);
|
||||||
|
await insert.run('John', 'John1');
|
||||||
|
|
||||||
|
const stmt = db.prepare(`SELECT * FROM users LIMIT ? OFFSET ?;`);
|
||||||
|
expect(await stmt.all(1, 1)).toEqual([{ id: 2, name: 'John1', verified: 0 }])
|
||||||
|
})
|
||||||
|
|
||||||
test('on-disk db', async () => {
|
test('on-disk db', async () => {
|
||||||
const path = `test-${(Math.random() * 10000) | 0}.db`;
|
const path = `test-${(Math.random() * 10000) | 0}.db`;
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -784,3 +784,37 @@ fn test_avg_agg() -> anyhow::Result<()> {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_offset_limit_bind() -> anyhow::Result<()> {
|
||||||
|
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE test (i INTEGER);", false);
|
||||||
|
let conn = tmp_db.connect_limbo();
|
||||||
|
|
||||||
|
conn.execute("INSERT INTO test VALUES (5), (4), (3), (2), (1)")?;
|
||||||
|
|
||||||
|
let mut stmt = conn.prepare("SELECT * FROM test LIMIT ? OFFSET ?")?;
|
||||||
|
stmt.bind_at(1.try_into()?, Value::Integer(2));
|
||||||
|
stmt.bind_at(2.try_into()?, Value::Integer(1));
|
||||||
|
|
||||||
|
let mut rows = Vec::new();
|
||||||
|
loop {
|
||||||
|
match stmt.step()? {
|
||||||
|
StepResult::Row => {
|
||||||
|
let row = stmt.row().unwrap();
|
||||||
|
rows.push(row.get_values().cloned().collect::<Vec<_>>());
|
||||||
|
}
|
||||||
|
StepResult::IO => stmt.run_once()?,
|
||||||
|
_ => break,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
rows,
|
||||||
|
vec![
|
||||||
|
vec![turso_core::Value::Integer(4)],
|
||||||
|
vec![turso_core::Value::Integer(3)]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user