#![cfg(feature = "std")]
use graphitesql::{Connection, Value};
fn rows(c: &Connection, sql: &str) -> Vec<Vec<Value>> {
c.query(sql).unwrap().rows
}
fn one(c: &Connection, sql: &str) -> Value {
rows(c, sql)[0][0].clone()
}
#[test]
fn star_excludes_the_hidden_json_and_root_columns() {
let c = Connection::open_memory().unwrap();
let r = rows(&c, "SELECT * FROM json_each('[7,8]')");
assert_eq!(r.len(), 2);
assert_eq!(r[0].len(), 8);
let r = rows(&c, "SELECT je.* FROM json_each('[7]') je");
assert_eq!(r[0].len(), 8);
let r = rows(&c, "SELECT * FROM json_each('[1]') a, json_each('[2]') b");
assert_eq!(r[0].len(), 16);
}
#[test]
fn json_column_echoes_the_document_argument() {
let c = Connection::open_memory().unwrap();
let r = rows(&c, "SELECT json FROM json_each('[1,2]')");
assert_eq!(r.len(), 2);
assert_eq!(r[0][0], Value::Text("[1,2]".into()));
assert_eq!(r[1][0], Value::Text("[1,2]".into()));
assert_eq!(
one(&c, "SELECT json FROM json_each('5')"),
Value::Text("5".into())
);
assert_eq!(
one(&c, "SELECT json FROM json_tree('{\"a\":1}')"),
Value::Text("{\"a\":1}".into())
);
}
#[test]
fn root_column_is_the_path_argument() {
let c = Connection::open_memory().unwrap();
assert_eq!(
one(&c, "SELECT root FROM json_each('[1,2]')"),
Value::Text("$".into())
);
assert_eq!(
one(&c, "SELECT root FROM json_each('{\"a\":9}','$.a')"),
Value::Text("$.a".into())
);
}
#[test]
fn hidden_columns_are_usable_in_where_and_explicit_select() {
let c = Connection::open_memory().unwrap();
let r = rows(
&c,
"SELECT value, json, root FROM json_each('[1,2]') WHERE json='[1,2]'",
);
assert_eq!(r.len(), 2);
assert_eq!(r[0][1], Value::Text("[1,2]".into()));
assert_eq!(r[0][2], Value::Text("$".into()));
let r = rows(&c, "SELECT value FROM json_each('[1,2]') WHERE root='$'");
assert_eq!(r.len(), 2);
}