removed unneeded 'recursive get'
This commit is contained in:
parent
b6bba8fcd1
commit
62a76e9d92
@ -9,9 +9,7 @@ import json_serde
|
|||||||
import query
|
import query
|
||||||
import simplifile
|
import simplifile
|
||||||
import tree
|
import tree
|
||||||
import tree_events.{
|
import tree_events.{type TreeEvents, GetEvent, SetEvent, Shutdown, Snapshot}
|
||||||
type TreeEvents, GetEvent, RecursiveGetEvent, SetEvent, Shutdown, Snapshot,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub type Message {
|
pub type Message {
|
||||||
Message
|
Message
|
||||||
@ -78,15 +76,7 @@ pub fn load(snapshots_path, names) {
|
|||||||
fn handle_message(event: TreeEvents, tree) {
|
fn handle_message(event: TreeEvents, tree) {
|
||||||
case event {
|
case event {
|
||||||
GetEvent(path, client) -> {
|
GetEvent(path, client) -> {
|
||||||
let res = query.get(tree, path, False)
|
let res = query.get(tree, path)
|
||||||
actor.send(
|
|
||||||
client,
|
|
||||||
res |> result.map(fn(tree) { tree |> json_serde.serialize }),
|
|
||||||
)
|
|
||||||
actor.continue(tree)
|
|
||||||
}
|
|
||||||
RecursiveGetEvent(path, client) -> {
|
|
||||||
let res = query.get(tree, path, False)
|
|
||||||
actor.send(
|
actor.send(
|
||||||
client,
|
client,
|
||||||
res |> result.map(fn(tree) { tree |> json_serde.serialize }),
|
res |> result.map(fn(tree) { tree |> json_serde.serialize }),
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import tree_events
|
|||||||
///
|
///
|
||||||
/// Query formats:
|
/// Query formats:
|
||||||
///
|
///
|
||||||
/// - get | rget (path)
|
/// - get (path)
|
||||||
/// - set (path) (data)
|
/// - set (path) (data)
|
||||||
pub fn parse(query: String) {
|
pub fn parse(query: String) {
|
||||||
let args = query |> string.split(" ")
|
let args = query |> string.split(" ")
|
||||||
@ -23,14 +23,6 @@ pub fn parse(query: String) {
|
|||||||
|> Ok
|
|> Ok
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
["rget", path] -> {
|
|
||||||
case path |> parse_path {
|
|
||||||
Error(_) -> Error(QueryError("Wrong query format."))
|
|
||||||
Ok(#(head, tail)) ->
|
|
||||||
#(head, fn(actor) { tree_events.RecursiveGetEvent(tail, actor) })
|
|
||||||
|> Ok
|
|
||||||
}
|
|
||||||
}
|
|
||||||
["set", path, data] -> {
|
["set", path, data] -> {
|
||||||
case path |> parse_path {
|
case path |> parse_path {
|
||||||
Error(_) -> Error(QueryError("Wrong query format."))
|
Error(_) -> Error(QueryError("Wrong query format."))
|
||||||
@ -50,11 +42,8 @@ pub fn parse(query: String) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get(tree, path, recursive) -> Result(tree.Tree, QueryError) {
|
pub fn get(tree, path) -> Result(tree.Tree, QueryError) {
|
||||||
let res = case recursive {
|
let res = tree.get(tree, path)
|
||||||
False -> tree.get(tree, path)
|
|
||||||
_ -> tree.rget(tree, path)
|
|
||||||
}
|
|
||||||
case res {
|
case res {
|
||||||
Error(_) -> Error(QueryError("There is no such node."))
|
Error(_) -> Error(QueryError("There is no such node."))
|
||||||
Ok(tree) -> Ok(tree)
|
Ok(tree) -> Ok(tree)
|
||||||
|
|||||||
@ -18,10 +18,6 @@ pub fn new() {
|
|||||||
Root(dict.new())
|
Root(dict.new())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Traverses the tree along the given path.
|
|
||||||
///
|
|
||||||
/// If the last found node is a Leaf, returns it.
|
|
||||||
/// Else returns Nil
|
|
||||||
pub fn get(tree, path) {
|
pub fn get(tree, path) {
|
||||||
let res = get_step(tree, path)
|
let res = get_step(tree, path)
|
||||||
case res {
|
case res {
|
||||||
@ -30,15 +26,6 @@ pub fn get(tree, path) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Recursive Get: returns whole requsted subtree
|
|
||||||
pub fn rget(tree, path) {
|
|
||||||
let res = get_step(tree, path)
|
|
||||||
case res {
|
|
||||||
Error(_) -> Error(Nil)
|
|
||||||
Ok(_) as res -> res
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_step(tree: Tree, path: List(String)) -> Result(Tree, Nil) {
|
fn get_step(tree: Tree, path: List(String)) -> Result(Tree, Nil) {
|
||||||
case tree, path {
|
case tree, path {
|
||||||
Root(_) as rt, [] -> Ok(rt)
|
Root(_) as rt, [] -> Ok(rt)
|
||||||
|
|||||||
@ -5,11 +5,6 @@ import tree
|
|||||||
pub type TreeEvents {
|
pub type TreeEvents {
|
||||||
GetEvent(path: List(String), reply_with: Subject(Result(String, QueryError)))
|
GetEvent(path: List(String), reply_with: Subject(Result(String, QueryError)))
|
||||||
|
|
||||||
RecursiveGetEvent(
|
|
||||||
path: List(String),
|
|
||||||
reply_with: Subject(Result(String, QueryError)),
|
|
||||||
)
|
|
||||||
|
|
||||||
SetEvent(
|
SetEvent(
|
||||||
path: List(String),
|
path: List(String),
|
||||||
data: tree.LeafData,
|
data: tree.LeafData,
|
||||||
|
|||||||
@ -105,7 +105,6 @@ fn read_next(forest) {
|
|||||||
"help" |> io.println
|
"help" |> io.println
|
||||||
"exit" |> io.println
|
"exit" |> io.println
|
||||||
"get <path>" |> io.println
|
"get <path>" |> io.println
|
||||||
"rget <path>" |> io.println
|
|
||||||
"set <path> <data>" |> io.println
|
"set <path> <data>" |> io.println
|
||||||
"trees" |> io.println
|
"trees" |> io.println
|
||||||
|
|
||||||
|
|||||||
@ -50,8 +50,7 @@ fn get_100k(tree, i) {
|
|||||||
100_000 -> Nil
|
100_000 -> Nil
|
||||||
_ -> {
|
_ -> {
|
||||||
let rint = int.random(1_000_000)
|
let rint = int.random(1_000_000)
|
||||||
let assert Ok(_) =
|
let assert Ok(_) = tree |> query.get([".", rint |> int.to_string()])
|
||||||
tree |> query.get([".", rint |> int.to_string()], False)
|
|
||||||
get_100k(tree, i + 1)
|
get_100k(tree, i + 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,7 +97,7 @@ fn setup_nodes_tasks(tree, paths) {
|
|||||||
fn get_nodes(tree, paths) {
|
fn get_nodes(tree, paths) {
|
||||||
paths
|
paths
|
||||||
|> list.fold(tree, fn(tree, path) {
|
|> list.fold(tree, fn(tree, path) {
|
||||||
let _ = tree |> query.get(path, True)
|
let _ = tree |> query.get(path)
|
||||||
tree
|
tree
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,7 +31,7 @@ pub fn server_test() {
|
|||||||
|
|
||||||
let assert Ok(Nil) = mug.send(socket, <<"set root.b \"foo\"":utf8>>)
|
let assert Ok(Nil) = mug.send(socket, <<"set root.b \"foo\"":utf8>>)
|
||||||
let assert Ok(_) = mug.receive(socket, timeout_milliseconds: 100)
|
let assert Ok(_) = mug.receive(socket, timeout_milliseconds: 100)
|
||||||
let assert Ok(Nil) = mug.send(socket, <<"rget root":utf8>>)
|
let assert Ok(Nil) = mug.send(socket, <<"get root":utf8>>)
|
||||||
let assert Ok(packet) = mug.receive(socket, timeout_milliseconds: 100)
|
let assert Ok(packet) = mug.receive(socket, timeout_milliseconds: 100)
|
||||||
|
|
||||||
packet |> should.equal(<<"{\"a\":2,\"b\":\"foo\"}":utf8>>)
|
packet |> should.equal(<<"{\"a\":2,\"b\":\"foo\"}":utf8>>)
|
||||||
|
|||||||
@ -24,15 +24,15 @@ pub fn kv_test() {
|
|||||||
let assert Ok(tree) = query.set(tree, ["d"], tree.Bool(False))
|
let assert Ok(tree) = query.set(tree, ["d"], tree.Bool(False))
|
||||||
let assert Ok(tree) = query.set(tree, ["e"], tree.Null)
|
let assert Ok(tree) = query.set(tree, ["e"], tree.Null)
|
||||||
|
|
||||||
query.get(tree, ["a"], False)
|
query.get(tree, ["a"])
|
||||||
|> should.equal(tree.Leaf(tree.String("foo")) |> Ok())
|
|> should.equal(tree.Leaf(tree.String("foo")) |> Ok())
|
||||||
query.get(tree, ["b"], False)
|
query.get(tree, ["b"])
|
||||||
|> should.equal(tree.Leaf(tree.Int(42)) |> Ok())
|
|> should.equal(tree.Leaf(tree.Int(42)) |> Ok())
|
||||||
query.get(tree, ["c"], False)
|
query.get(tree, ["c"])
|
||||||
|> should.equal(tree.Leaf(tree.Float(12.34)) |> Ok())
|
|> should.equal(tree.Leaf(tree.Float(12.34)) |> Ok())
|
||||||
query.get(tree, ["d"], False)
|
query.get(tree, ["d"])
|
||||||
|> should.equal(tree.Leaf(tree.Bool(False)) |> Ok())
|
|> should.equal(tree.Leaf(tree.Bool(False)) |> Ok())
|
||||||
query.get(tree, ["e"], False)
|
query.get(tree, ["e"])
|
||||||
|> should.equal(tree.Leaf(tree.Null) |> Ok())
|
|> should.equal(tree.Leaf(tree.Null) |> Ok())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,15 +45,15 @@ pub fn tree_test() {
|
|||||||
let assert Ok(tree) = query.set(tree, ["a2", "b3"], tree.Int(42))
|
let assert Ok(tree) = query.set(tree, ["a2", "b3"], tree.Int(42))
|
||||||
let assert Ok(tree) = query.set(tree, ["a2", "b3"], tree.Int(43))
|
let assert Ok(tree) = query.set(tree, ["a2", "b3"], tree.Int(43))
|
||||||
|
|
||||||
query.get(tree, ["a", "b"], False)
|
query.get(tree, ["a", "b"])
|
||||||
|> should.equal(tree.Leaf(tree.String("new foo")) |> Ok())
|
|> should.equal(tree.Leaf(tree.String("new foo")) |> Ok())
|
||||||
|
|
||||||
query.get(tree, ["a", "b2"], True)
|
query.get(tree, ["a", "b2"])
|
||||||
|> should.equal(
|
|> should.equal(
|
||||||
tree.Node(dict.new() |> dict.insert("c", tree.Leaf(tree.String("bar"))))
|
tree.Node(dict.new() |> dict.insert("c", tree.Leaf(tree.String("bar"))))
|
||||||
|> Ok(),
|
|> Ok(),
|
||||||
)
|
)
|
||||||
query.get(tree, ["a2", "b3"], False)
|
query.get(tree, ["a2", "b3"])
|
||||||
|> should.equal(tree.Leaf(tree.Int(43)) |> Ok())
|
|> should.equal(tree.Leaf(tree.Int(43)) |> Ok())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user