fix tikv compilation

main
Ziyang Hu 2 years ago
parent dcee278e28
commit a01640df84

@ -22,6 +22,7 @@ use thiserror::Error;
use crate::algo::{AlgoImpl, CannotDetermineArity};
use crate::data::expr::Expr;
use crate::data::json::JsonValue;
use crate::data::program::{MagicAlgoApply, MagicSymbol};
use crate::data::symb::Symbol;
use crate::data::tuple::Tuple;
@ -65,7 +66,7 @@ impl AlgoImpl for JsonReader {
_ => bail!(BadFields(fields_span)),
};
let mut counter = -1i64;
let mut process_row = |row: &BTreeMap<String, DataValue>| -> Result<()> {
let mut process_row = |row: &BTreeMap<String, JsonValue>| -> Result<()> {
let mut ret = if prepend_index {
counter += 1;
vec![DataValue::from(counter)]
@ -81,7 +82,7 @@ impl AlgoImpl for JsonReader {
bail!("field {} is absent from JSON line", field);
}
}
Some(v) => v.clone(),
Some(v) => DataValue::from(v),
};
ret.push(val);
}
@ -96,13 +97,13 @@ impl AlgoImpl for JsonReader {
let line = line.into_diagnostic()?;
let line = line.trim();
if !line.is_empty() {
let row = serde_json::from_str(line).into_diagnostic()?;
let row: BTreeMap<String, JsonValue> = serde_json::from_str(line).into_diagnostic()?;
process_row(&row)?;
}
}
} else {
let content = fs::read_to_string(file_path).into_diagnostic()?;
let rows: Vec<BTreeMap<String, DataValue>> = serde_json::from_str(&content).into_diagnostic()?;
let rows: Vec<BTreeMap<String, JsonValue>> = serde_json::from_str(&content).into_diagnostic()?;
for row in &rows {
process_row(row)?;
}
@ -122,7 +123,7 @@ impl AlgoImpl for JsonReader {
}
}
} else {
let rows: Vec<BTreeMap<String, DataValue>> = serde_json::from_str(content).into_diagnostic()?;
let rows: Vec<BTreeMap<String, JsonValue>> = serde_json::from_str(content).into_diagnostic()?;
for row in &rows {
process_row(row)?;
}

@ -87,7 +87,7 @@ impl PartialOrd for RegexWrapper {
#[derive(
Clone, PartialEq, Eq, PartialOrd, Ord, serde_derive::Deserialize, serde_derive::Serialize, Hash,
)]
pub enum DataValue {
pub(crate) enum DataValue {
Null,
Bool(bool),
Num(Num),

@ -34,6 +34,7 @@
#![allow(clippy::too_many_arguments)]
use std::collections::BTreeMap;
use lazy_static::lazy_static;
pub use miette::Error;
#[allow(unused_imports)]
@ -57,7 +58,6 @@ pub use storage::tikv::{new_cozo_tikv, TiKvStorage};
pub use storage::{Storage, StoreTx};
use crate::data::json::JsonValue;
use crate::data::value::DataValue;
// pub use storage::re::{new_cozo_redb, ReStorage};
@ -113,6 +113,7 @@ impl DbInstance {
/// `options` is ignored for every kind except `tikv`.
#[allow(unused_variables)]
pub fn new(kind: &str, path: &str, options: &str) -> Result<Self> {
let options = if options.is_empty() { "{}" } else { options };
Ok(match kind {
"mem" => Self::Mem(new_cozo_mem()?),
#[cfg(feature = "storage-sqlite")]
@ -126,10 +127,10 @@ impl DbInstance {
#[derive(serde_derive::Deserialize)]
struct TiKvOpts {
end_points: Vec<String>,
#[serde(default = "Default::default()")]
#[serde(default = "Default::default")]
optimistic: bool,
}
let opts: TiKvOpts = serde_json::from_str(options)?;
let opts: TiKvOpts = serde_json::from_str(options).into_diagnostic()?;
Self::TiKv(new_cozo_tikv(opts.end_points.clone(), opts.optimistic)?)
}
kind => bail!(
@ -147,7 +148,11 @@ impl DbInstance {
Self::new(kind, path, options).map_err(|err| err.to_string())
}
/// Dispatcher method. See [crate::Db::run_script].
pub fn run_script(&self, payload: &str, params: &BTreeMap<String, DataValue>) -> Result<JsonValue> {
pub fn run_script(
&self,
payload: &str,
params: BTreeMap<String, JsonValue>,
) -> Result<JsonValue> {
match self {
DbInstance::Mem(db) => db.run_script(payload, params),
#[cfg(feature = "storage-sqlite")]
@ -162,7 +167,11 @@ impl DbInstance {
}
/// Run the CozoScript passed in. The `params` argument is a map of parameters.
/// Fold any error into the return JSON itself.
pub fn run_script_fold_err(&self, payload: &str, params: &BTreeMap<String, DataValue>) -> JsonValue {
pub fn run_script_fold_err(
&self,
payload: &str,
params: BTreeMap<String, JsonValue>,
) -> JsonValue {
match self.run_script(payload, params) {
Ok(json) => json,
Err(mut err) => {
@ -191,7 +200,7 @@ impl DbInstance {
let params_json = if params.is_empty() {
BTreeMap::default()
} else {
match serde_json::from_str::<BTreeMap<String, DataValue>>(params) {
match serde_json::from_str::<BTreeMap<String, JsonValue>>(params) {
Ok(map) => map,
Err(_) => {
return json!({"ok": false, "message": "params argument is not a JSON map"})
@ -199,7 +208,7 @@ impl DbInstance {
}
}
};
self.run_script_fold_err(payload, &params_json).to_string()
self.run_script_fold_err(payload, params_json).to_string()
}
/// Dispatcher method. See [crate::Db::export_relations].
pub fn export_relations<'a>(

@ -105,11 +105,13 @@ impl<'s, S: Storage<'s>> Db<S> {
pub fn run_script(
&'s self,
payload: &str,
params: &BTreeMap<String, DataValue>,
params: BTreeMap<String, JsonValue>,
) -> Result<JsonValue> {
#[cfg(not(feature = "wasm"))]
let start = Instant::now();
match self.do_run_script(payload, params) {
let params = params.into_iter().map(|(k, v)| (k, DataValue::from(v))).collect();
match self.do_run_script(payload, &params) {
Ok(mut json) => {
{
#[cfg(not(feature = "wasm"))]

@ -55,7 +55,7 @@ lazy_static! {
lat: Float,
lon: Float
}
"##, &Default::default()).unwrap();
"##, Default::default()).unwrap();
db.run_script(
r##"
@ -73,7 +73,7 @@ lazy_static! {
desc: String
}
"##,
&Default::default(),
Default::default(),
)
.unwrap();
@ -93,7 +93,7 @@ lazy_static! {
desc: String
}
"##,
&Default::default(),
Default::default(),
)
.unwrap();
@ -108,7 +108,7 @@ lazy_static! {
:replace idx2code { idx: Int => code: String }
"##,
&Default::default(),
Default::default(),
)
.unwrap();
@ -126,7 +126,7 @@ lazy_static! {
:replace route { fr: String, to: String => dist: Float }
"##,
&Default::default(),
Default::default(),
)
.unwrap();
@ -145,11 +145,11 @@ lazy_static! {
:replace contain { entity: String, contained: String }
"##,
&Default::default(),
Default::default(),
)
.unwrap();
db.run_script("::remove idx2code", &Default::default())
db.run_script("::remove idx2code", Default::default())
.unwrap();
dbg!(init.elapsed());
@ -159,7 +159,7 @@ lazy_static! {
fn check_db() {
let _ = TEST_DB
.run_script("?[a] <- [[1]]", &Default::default())
.run_script("?[a] <- [[1]]", Default::default())
.unwrap();
}
@ -173,7 +173,7 @@ fn dfs() {
starting[] <- [['PEK']]
?[] <~ DFS(*route[], *airport[code], starting[], condition: (code == 'LHR'))
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap().as_array().unwrap();
@ -194,7 +194,7 @@ fn empty() {
r#"
?[id, name] <- [[]]
"#,
&Default::default(),
Default::default(),
);
assert!(res.is_err());
}
@ -209,7 +209,7 @@ fn bfs() {
starting[] <- [['PEK']]
?[] <~ BFS(*route[], *airport[code], starting[], condition: (code == 'LHR'))
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap().as_array().unwrap();
@ -233,7 +233,7 @@ fn scc() {
res[] <~ StronglyConnectedComponents(*route[], *airport[code]);
?[grp, code] := res[code, grp], grp != 0;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
dbg!(scc.elapsed());
@ -249,7 +249,7 @@ fn cc() {
res[] <~ ConnectedComponents(*route[], *airport[code]);
?[grp, code] := res[code, grp], grp != 0;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
dbg!(cc.elapsed());
@ -264,7 +264,7 @@ fn astar() {
starting[code, lat, lon] := code = 'HFE', *airport{code, lat, lon};
goal[code, lat, lon] := code = 'LHR', *airport{code, lat, lon};
?[] <~ ShortestPathAStar(*route[], code_lat_lon[node, lat1, lon1], starting[], goal[goal, lat2, lon2], heuristic: haversine_deg_input(lat1, lon1, lat2, lon2) * 3963);
"#, &Default::default()).unwrap();
"#, Default::default()).unwrap();
dbg!(astar.elapsed());
}
@ -280,7 +280,7 @@ fn deg_centrality() {
:order -total;
:limit 10;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
dbg!(deg_centrality.elapsed());
@ -299,7 +299,7 @@ fn dijkstra() {
res[] <~ ShortestPathDijkstra(*route[], starting[], ending[]);
?[path] := res[src, dst, cost, path];
"#,
&Default::default(),
Default::default(),
)
.unwrap();
@ -318,7 +318,7 @@ fn yen() {
ending[] <- [['SIN']];
?[] <~ KShortestPathYen(*route[], starting[], ending[], k: 5);
"#,
&Default::default(),
Default::default(),
)
.unwrap();
@ -334,7 +334,7 @@ fn starts_with() {
r#"
?[code] := *airport{code}, starts_with(code, 'US');
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -367,7 +367,7 @@ fn range_check() {
r[code, dist] := *airport{code}, *route{fr: code, dist};
?[dist] := r['PEK', dist], dist > 7000, dist <= 7722;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -385,7 +385,7 @@ fn no_airports() {
r#"
?[desc] := *country{code, desc}, not *airport{country: code};
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -412,7 +412,7 @@ fn no_routes_airport() {
r#"
?[code] := *airport{code}, not *route{fr: code}, not *route{to: code}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -440,7 +440,7 @@ fn runway_distribution() {
r#"
?[runways, count(code)] := *airport{code, runways}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -471,7 +471,7 @@ fn most_out_routes() {
?[code, n] := route_count[code, n], n > 180;
:sort -n;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -503,7 +503,7 @@ fn most_out_routes_again() {
?[code, n] := route_count[n, code], n > 180;
:sort -n;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -536,7 +536,7 @@ fn most_routes() {
?[code, n] := route_count[code, n], n > 400
:sort -n;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -565,7 +565,7 @@ fn airport_with_one_route() {
route_count[fr, count(fr)] := *route{fr}
?[count(a)] := route_count[a, n], n == 1;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -589,7 +589,7 @@ fn single_runway_with_most_routes() {
:order -out_n;
:limit 10;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -620,7 +620,7 @@ fn most_routes_in_canada() {
:order -n_routes;
:limit 10;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -652,7 +652,7 @@ fn uk_count() {
r#"
?[region, count(region)] := *airport{country: 'UK', region}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -677,7 +677,7 @@ fn airports_by_country() {
:order count
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -728,7 +728,7 @@ fn n_airports_by_continent() {
?[cont, max(count)] := *continent{code: cont}, airports_by_continent[cont, count]
?[cont, max(count)] := *continent{code: cont}, count = 0
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -753,7 +753,7 @@ fn routes_per_airport() {
given[] <- [['A' ++ 'U' ++ 'S'],['AMS'],['JFK'],['DUB'],['MEX']]
?[code, count(code)] := given[code], *route{fr: code}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -778,7 +778,7 @@ fn airports_by_route_number() {
route_count[fr, count(fr)] := *route{fr}
?[n, collect(code)] := route_count[code, n], n = 106;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -798,7 +798,7 @@ fn out_from_aus() {
two_hops[count(a)] := *route{fr: 'AUS', to: a}, *route{fr: a}
?[max(total), collect(coll)] := two_hops[total], out_by_runways[n, ct], coll = [n, ct];
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -820,7 +820,7 @@ fn const_return() {
r#"
?[name, count(code)] := *airport{code, region: 'US-OK'}, name = 'OK';
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -845,7 +845,7 @@ fn multi_res() {
?[total, high, low, four, france] := total[total], high[high], low[low],
four[four], france[france];
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -867,7 +867,7 @@ fn multi_unification() {
target_airports[collect(code, 5)] := *airport{code}
?[a, count(a)] := target_airports[targets], a in targets, *route{fr: a}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -893,7 +893,7 @@ fn num_routes_from_eu_to_us() {
r = [fr, to]
?[n] := routes[rs], n = length(rs);
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -913,7 +913,7 @@ fn num_airports_in_us_with_routes_from_eu() {
*route{fr, to},
*airport{code: to, country: 'US'}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -932,7 +932,7 @@ fn num_routes_in_us_airports_from_eu() {
?[to, count(to)] := *contain['EU', fr], *route{fr, to}, *airport{code: to, country: 'US'}
:order count(to);
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -965,7 +965,7 @@ fn routes_from_eu_to_us_starting_with_l() {
*route{fr: eu_code, to: us_code},
*airport{code: us_code, country: 'US'}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1001,7 +1001,7 @@ fn len_of_names_count() {
*airport{code: to, city},
n = length(city)
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1024,7 +1024,7 @@ fn group_count_by_out() {
:order n;
:limit 10;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1050,7 +1050,7 @@ fn mean_group_count() {
rc[max(n), a] := route_count[n, a] or (*airport{code: a}, n = 0);
?[mean(n)] := rc[n, _];
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1070,7 +1070,7 @@ fn n_routes_from_london_uk() {
r#"
?[code, count(code)] := *airport{code, city: 'London', region: 'GB-ENG'}, *route{fr: code}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1096,7 +1096,7 @@ fn reachable_from_london_uk_in_two_hops() {
one_hop[to] := lon_uk_airports[fr], *route{fr, to}, not lon_uk_airports[to];
?[count_unique(a3)] := one_hop[a2], *route{fr: a2, to: a3}, not lon_uk_airports[a3];
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1115,7 +1115,7 @@ fn routes_within_england() {
eng_aps[code] := *airport{code, region: 'GB-ENG'}
?[fr, to] := eng_aps[fr], *route{fr, to}, eng_aps[to],
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1149,7 +1149,7 @@ fn routes_within_england_time_no_dup() {
eng_aps[code] := *airport{code, region: 'GB-ENG'}
?[pair] := eng_aps[fr], *route{fr, to}, eng_aps[to], pair = sorted([fr, to]);
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1184,7 +1184,7 @@ fn hard_route_finding() {
:limit 1;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1211,7 +1211,7 @@ fn na_from_india() {
*airport{code: na_a, country},
country in ['US', 'CA']
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1238,7 +1238,7 @@ fn eu_cities_reachable_from_fll() {
r#"
?[city] := *route{fr: 'FLL', to}, *contain['EU', to], *airport{code: to, city}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1264,7 +1264,7 @@ fn clt_to_eu_or_sa() {
r#"
?[to] := *route{fr: 'CLT', to}, c_name in ['EU', 'SA'], *contain[c_name, to]
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1291,7 +1291,7 @@ fn london_to_us() {
?[fr, to] := fr in ['LHR', 'LCY', 'LGW', 'LTN', 'STN'],
*route{fr, to}, *airport{code: to, country: 'US'}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1325,7 +1325,7 @@ fn tx_to_ny() {
?[fr, to] := *airport{code: fr, region: 'US-TX'},
*route{fr, to}, *airport{code: to, region: 'US-NY'}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1353,7 +1353,7 @@ fn denver_to_mexico() {
r#"
?[city] := *route{fr: 'DEN', to}, *airport{code: to, country: 'MX', city}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1381,7 +1381,7 @@ fn three_cities() {
three[code] := city in ['London', 'Munich', 'Paris'], *airport{code, city}
?[s, d] := three[s], *route{fr: s, to: d}, three[d]
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1412,7 +1412,7 @@ fn long_distance_from_lgw() {
?[city, dist] := *route{fr: 'LGW', to, dist},
dist > 4000, *airport{code: to, city}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1446,7 +1446,7 @@ fn long_routes_one_dir() {
r#"
?[fr, dist, to] := *route{fr, to, dist}, dist > 8000, fr < to;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1480,7 +1480,7 @@ fn longest_routes() {
:sort -dist;
:limit 20;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1510,7 +1510,7 @@ fn longest_routes_from_each_airports() {
?[fr, max(dist), choice(to)] := *route{fr, dist, to}
:limit 10;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1538,7 +1538,7 @@ fn total_distance_from_three_cities() {
three[code] := city in ['London', 'Munich', 'Paris'], *airport{code, city}
?[sum(dist)] := three[a], *route{fr: a, dist}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1560,7 +1560,7 @@ fn total_distance_within_three_cities() {
three[code] := city in ['London', 'Munich', 'Paris'], *airport{code, city}
?[sum(dist)] := three[a], *route{fr: a, dist, to}, three[to]
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1581,7 +1581,7 @@ fn specific_distance() {
r#"
?[dist] := *route{fr: 'AUS', to: 'MEX', dist}
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1601,7 +1601,7 @@ fn n_routes_between() {
?[count(fr)] := *route{fr, to, dist}, dist >= 100, dist <= 200,
us_a[fr], us_a[to]
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1623,7 +1623,7 @@ fn one_stop_distance() {
:order dist;
:limit 10;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1651,7 +1651,7 @@ fn airport_most_routes() {
:order -count(fr);
:limit 10;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1677,7 +1677,7 @@ fn north_of_77() {
r#"
?[city, latitude] := *airport{lat, city}, lat > 77, latitude = round(lat)
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1698,7 +1698,7 @@ fn greenwich_meridian() {
r#"
?[code] := *airport{lon, code}, lon > -0.1, lon < 0.1
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1721,7 +1721,7 @@ fn box_around_heathrow() {
?[code] := h_box[lhr_lon, lhr_lat], *airport{code, lon, lat},
abs(lhr_lon - lon) < 1, abs(lhr_lat - lat) < 1
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1745,7 +1745,7 @@ fn dfw_by_region() {
*airport{code: to, country: 'US', region},
region in ['US-CA', 'US-TX', 'US-FL', 'US-CO', 'US-IL']
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1776,7 +1776,7 @@ fn great_circle_distance() {
*airport{code: 'NRT', lat: b_lat, lon: b_lon},
deg_diff = round(haversine_deg_input(a_lat, a_lon, b_lat, b_lon));
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1801,7 +1801,7 @@ fn aus_to_edi() {
path = append(prev, to);
?[path] := routes['EDI', path];
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1829,7 +1829,7 @@ fn reachable_from_lhr() {
:order -len;
:limit 10;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1873,7 +1873,7 @@ fn furthest_from_lhr() {
:order -cost;
:limit 10;
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1901,7 +1901,7 @@ fn skip_limit() {
r#"
?[a] := a in [9, 9, 8, 9, 8, 7, 7, 6, 5, 9, 4, 4, 3]
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1912,7 +1912,7 @@ fn skip_limit() {
r#"
?[a] := a in [9, 9, 8, 9, 8, 7, 7, 6, 5, 9, 4, 4, 3]
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1924,7 +1924,7 @@ fn skip_limit() {
?[a] := a in [9, 9, 8, 9, 8, 7, 7, 6, 5, 9, 4, 4, 3]
:limit 2
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1937,7 +1937,7 @@ fn skip_limit() {
:limit 2
:offset 1
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();
@ -1950,7 +1950,7 @@ fn skip_limit() {
:limit 100
:offset 1
"#,
&Default::default(),
Default::default(),
)
.unwrap();
let rows = res.get("rows").unwrap();

@ -38,6 +38,10 @@ io-uring = ["cozo/io-uring"]
rayon = ["cozo/rayon"]
## Disallows the use of threads
nothread = ["cozo/nothread"]
## Enables the [Sled](https://github.com/spacejam/sled) backend
storage-sled = ["cozo/storage-sled"]
## Enables the [TiKV](https://tikv.org/) client backend
storage-tikv = ["cozo/storage-tikv"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

@ -6,6 +6,7 @@
* You can obtain one at https://mozilla.org/MPL/2.0/.
*/
use std::collections::BTreeMap;
use std::fmt::Debug;
use std::fs;
use std::net::Ipv6Addr;
@ -36,8 +37,8 @@ struct Args {
restore: Option<String>,
/// Extra config in JSON format
#[clap(short, long, default_value_t = json!({}))]
config: serde_json::Value,
#[clap(short, long, default_value_t = String::from("{}"))]
config: String,
/// Address to bind the service to
#[clap(short, long, default_value_t = String::from("127.0.0.1"))]
@ -68,10 +69,10 @@ fn main() {
eprintln!("{}", SECURITY_WARNING);
}
let db = DbInstance::new(args.kind.as_str(), args.path.as_str(), args.config.clone()).unwrap();
let db = DbInstance::new(args.kind.as_str(), args.path.as_str(), &args.config.clone()).unwrap();
if let Some(restore_path) = &args.restore {
db.restore_backup(restore_path.to_string()).unwrap();
db.restore_backup(restore_path).unwrap();
}
let conf_path = format!("{}.{}.cozo_auth", args.path, args.kind);
@ -122,11 +123,11 @@ fn main() {
#[derive(serde_derive::Serialize, serde_derive::Deserialize)]
struct QueryPayload {
script: String,
params: serde_json::Map<String, serde_json::Value>,
params: BTreeMap<String, serde_json::Value>,
}
let payload: QueryPayload = try_or_400!(rouille::input::json_input(request));
let result = db.run_script_fold_err(&payload.script, &payload.params);
let result = db.run_script_fold_err(&payload.script, payload.params);
let response = Response::json(&result);
if let Some(serde_json::Value::Bool(true)) = result.get("ok") {
response

Loading…
Cancel
Save