@@ -108,7 +108,8 @@ Broadcast.broadcastable(db::DB) = Ref(db)
108108
109109function Base. iterate (db:: DB , state = (length (db), 1 ))
110110 state[2 ] > state[1 ] && return nothing
111- single_result_execute (db, " SELECT props FROM nodes WHERE id = ?" , (state[2 ],)), (state[1 ], state[2 ] + 1 )
111+ res = single_result_execute (db, " SELECT props FROM nodes WHERE id = ?" , (state[2 ],))
112+ Node (state[2 ], res), (state[1 ], state[2 ] + 1 )
112113end
113114
114115# #-----------------------------------------------------------------------------# ReadAs
@@ -146,6 +147,16 @@ function Base.deleteat!(db::DB, id::Integer)
146147 db
147148end
148149
150+ function findnodes (db:: DB ; kw... )
151+ param = join (map (collect (kw)) do kw
152+ k, v = kw
153+ " json_extract(props, '\$ .$k ') = $v "
154+ end , " AND " )
155+
156+ res = execute (db, " SELECT * FROM nodes WHERE $param " )
157+ isempty (res) ? nothing : [Node (row... ) for row in res]
158+ end
159+
149160# -----------------------------------------------------------------------------# edges
150161function Base. setindex! (db:: DB , props, i:: Integer , j:: Integer )
151162 execute (db, " INSERT INTO edges VALUES(?, ?, json(?))" , (i, j, JSON3. write (props)))
@@ -181,4 +192,14 @@ function Base.deleteat!(db::DB, i::Integer, j::Integer)
181192 db
182193end
183194
195+ function findedges (db:: DB ; kw... )
196+ param = join (map (collect (kw)) do kw
197+ k, v = kw
198+ " json_extract(props, '\$ .$k ') = $v "
199+ end , " AND " )
200+
201+ res = execute (db, " SELECT * FROM edges WHERE $param " )
202+ isempty (res) ? nothing : [Edge (row... ) for row in res]
203+ end
204+
184205end
0 commit comments