removed unneeded 'recursive get'

This commit is contained in:
Ivan Yuriev 2025-02-01 21:25:01 +03:00
parent b6bba8fcd1
commit 62a76e9d92
8 changed files with 16 additions and 57 deletions

View File

@ -9,9 +9,7 @@ import json_serde
import query
import simplifile
import tree
import tree_events.{
type TreeEvents, GetEvent, RecursiveGetEvent, SetEvent, Shutdown, Snapshot,
}
import tree_events.{type TreeEvents, GetEvent, SetEvent, Shutdown, Snapshot}
pub type Message {
Message
@ -78,15 +76,7 @@ pub fn load(snapshots_path, names) {
fn handle_message(event: TreeEvents, tree) {
case event {
GetEvent(path, client) -> {
let res = query.get(tree, path, False)
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)
let res = query.get(tree, path)
actor.send(
client,
res |> result.map(fn(tree) { tree |> json_serde.serialize }),

View File

@ -10,7 +10,7 @@ import tree_events
///
/// Query formats:
///
/// - get | rget (path)
/// - get (path)
/// - set (path) (data)
pub fn parse(query: String) {
let args = query |> string.split(" ")
@ -23,14 +23,6 @@ pub fn parse(query: String) {
|> 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] -> {
case path |> parse_path {
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) {
let res = case recursive {
False -> tree.get(tree, path)
_ -> tree.rget(tree, path)
}
pub fn get(tree, path) -> Result(tree.Tree, QueryError) {
let res = tree.get(tree, path)
case res {
Error(_) -> Error(QueryError("There is no such node."))
Ok(tree) -> Ok(tree)

View File

@ -18,10 +18,6 @@ pub fn 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) {
let res = get_step(tree, path)
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) {
case tree, path {
Root(_) as rt, [] -> Ok(rt)

View File

@ -5,11 +5,6 @@ import tree
pub type TreeEvents {
GetEvent(path: List(String), reply_with: Subject(Result(String, QueryError)))
RecursiveGetEvent(
path: List(String),
reply_with: Subject(Result(String, QueryError)),
)
SetEvent(
path: List(String),
data: tree.LeafData,

View File

@ -105,7 +105,6 @@ fn read_next(forest) {
"help" |> io.println
"exit" |> io.println
"get <path>" |> io.println
"rget <path>" |> io.println
"set <path> <data>" |> io.println
"trees" |> io.println

View File

@ -50,8 +50,7 @@ fn get_100k(tree, i) {
100_000 -> Nil
_ -> {
let rint = int.random(1_000_000)
let assert Ok(_) =
tree |> query.get([".", rint |> int.to_string()], False)
let assert Ok(_) = tree |> query.get([".", rint |> int.to_string()])
get_100k(tree, i + 1)
}
}
@ -98,7 +97,7 @@ fn setup_nodes_tasks(tree, paths) {
fn get_nodes(tree, paths) {
paths
|> list.fold(tree, fn(tree, path) {
let _ = tree |> query.get(path, True)
let _ = tree |> query.get(path)
tree
})
}

View File

@ -31,7 +31,7 @@ pub fn server_test() {
let assert Ok(Nil) = mug.send(socket, <<"set root.b \"foo\"":utf8>>)
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)
packet |> should.equal(<<"{\"a\":2,\"b\":\"foo\"}":utf8>>)

View File

@ -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, ["e"], tree.Null)
query.get(tree, ["a"], False)
query.get(tree, ["a"])
|> 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())
query.get(tree, ["c"], False)
query.get(tree, ["c"])
|> 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())
query.get(tree, ["e"], False)
query.get(tree, ["e"])
|> 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(43))
query.get(tree, ["a", "b"], False)
query.get(tree, ["a", "b"])
|> should.equal(tree.Leaf(tree.String("new foo")) |> Ok())
query.get(tree, ["a", "b2"], True)
query.get(tree, ["a", "b2"])
|> should.equal(
tree.Node(dict.new() |> dict.insert("c", tree.Leaf(tree.String("bar"))))
|> Ok(),
)
query.get(tree, ["a2", "b3"], False)
query.get(tree, ["a2", "b3"])
|> should.equal(tree.Leaf(tree.Int(43)) |> Ok())
}