Skip to content

Commit 2e06b65

Browse files
committed
use generators for query results
1 parent 6b9dab7 commit 2e06b65

File tree

2 files changed

+42
-15
lines changed

2 files changed

+42
-15
lines changed

src/SQLiteGraph.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ end
151151
Base.getindex(db::DB, ids::AbstractArray{<:Integer}) = getindex.(db, ids)
152152
function Base.getindex(db::DB, ::Colon)
153153
res = execute(db, "SELECT props from nodes")
154-
[Node(i,row.props) for (i,row) in enumerate(res)]
154+
(Node(i,row.props) for (i,row) in enumerate(res))
155155
end
156156
function Base.deleteat!(db::DB, id::Integer)
157157
execute(db, "DELETE FROM nodes WHERE id = ?", (id,))
@@ -166,11 +166,11 @@ function find_nodes(db::DB; kw...)
166166
end, " AND ")
167167

168168
res = execute(db, "SELECT * FROM nodes WHERE $param")
169-
isempty(res) ? nothing : [Node(row...) for row in res]
169+
isempty(res) ? nothing : (Node(row...) for row in res)
170170
end
171171
function find_nodes(db::DB, r::Regex)
172172
res = execute(db, "SELECT * FROM nodes WHERE props REGEXP ?", (r.pattern,))
173-
isempty(res) ? nothing : [Node(row...) for row in res]
173+
isempty(res) ? nothing : (Node(row...) for row in res)
174174
end
175175

176176

@@ -191,15 +191,15 @@ function Base.getindex(db::DB, is::AbstractArray{<:Integer}, js::AbstractArray{<
191191
end
192192
function Base.getindex(db::DB, i::Integer, ::Colon)
193193
res = execute(db, "SELECT * FROM edges WHERE source=?", (i,))
194-
isempty(res) ? nothing : [Edge(row...) for row in res]
194+
isempty(res) ? nothing : (Edge(row...) for row in res)
195195
end
196196
function Base.getindex(db::DB, ::Colon, j::Integer)
197197
res = execute(db, "SELECT * FROM edges WHERE target=?", (j,))
198-
isempty(res) ? nothing : [Edge(row...) for row in res]
198+
isempty(res) ? nothing : (Edge(row...) for row in res)
199199
end
200200
function Base.getindex(db::DB, ::Colon, ::Colon)
201201
res = execute(db, "SELECT * from edges")
202-
isempty(res) ? nothing : [Edge(row...) for row in res]
202+
isempty(res) ? nothing : (Edge(row...) for row in res)
203203
end
204204
Base.getindex(db::DB, is::AbstractArray{<:Integer}, ::Colon) = filter!(!isnothing, getindex.(db, is, :))
205205
Base.getindex(db::DB, ::Colon, js::AbstractArray{<:Integer}) = filter!(!isnothing, getindex.(db, :, js))
@@ -217,11 +217,11 @@ function find_edges(db::DB; kw...)
217217
end, " AND ")
218218

219219
res = execute(db, "SELECT * FROM edges WHERE $param")
220-
isempty(res) ? nothing : [Edge(row...) for row in res]
220+
isempty(res) ? nothing : (Edge(row...) for row in res)
221221
end
222222
function find_edges(db::DB, r::Regex)
223223
res = execute(db, "SELECT * FROM edges WHERE props REGEXP ?", (r.pattern,))
224-
isempty(res) ? nothing : [Edge(row...) for row in res]
224+
isempty(res) ? nothing : (Edge(row...) for row in res)
225225
end
226226

227227
end

test/runtests.jl

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,51 @@ using JSON3
44

55
@testset "SQLiteGraph.jl" begin
66
db = DB()
7+
node1 = (x=1, y=2)
8+
node2 = (x=1, y=3)
9+
edge1 = (a=1, b=2)
10+
edge2 = (a=3, b=4)
11+
712
@testset "empty DB" begin
813
@test length(db) == 0
914
@test size(db) == (nodes=0, edges=0)
1015
@test_throws BoundsError db[5]
1116
@test isnothing(db[1,2])
1217
end
1318
@testset "setindex! & getindex" begin
14-
db[1] = (x=1, y=2)
15-
db[2] = (x=1, y=3)
16-
db[1,2] = (a=1, b=2)
19+
db[1] = node1
20+
db[2] = node2
21+
db[1,2] = edge1
22+
db[2,1] = edge2
1723
@test db[1] isa Node{String}
1824
@test db[2] isa Node{String}
1925
@test db[1,2] isa Edge{String}
2026
@testset "getindex Range" begin
21-
@test db[1:2] isa Vector{Node{String}}
22-
@test db[1:2][1] == Node(1, JSON3.write((x=1,y=2)))
23-
@test db[1:2][2] == Node(2, JSON3.write((x=1,y=3)))
24-
@test db[1:2,2] == [Edge(1,2,JSON3.write((a=1,b=2)))]
27+
@test collect(db[1:2]) isa Vector{Node{String}}
28+
q = collect(db[1:2])
29+
@test q[1] == Node(1, JSON3.write(node1))
30+
@test q[2] == Node(2, JSON3.write(node2))
31+
@test first(db[1:2,2]) == Edge(1,2,JSON3.write(edge1))
2532
end
2633
end
34+
@testset "find_nodes / find_edges" begin
35+
res = collect(find_nodes(db, y=2))
36+
@test length(res) == 1
37+
@test res[1] == Node(1, JSON3.write(node1))
38+
39+
res = collect(find_nodes(db, r"y"))
40+
@test length(res) == 2
41+
@test res[1] == Node(1, JSON3.write(node1))
42+
@test res[2] == Node(2, JSON3.write(node2))
43+
44+
res = collect(find_edges(db, a=1))
45+
@test length(res) == 1
46+
@test res[1] == Edge(1,2, JSON3.write(edge1))
47+
48+
res = collect(find_edges(db, r"a"))
49+
@test length(res) == 2
50+
@test res[1] == Edge(1,2, JSON3.write(edge1))
51+
@test res[2] == Edge(2,1, JSON3.write(edge2))
52+
53+
end
2754
end

0 commit comments

Comments
 (0)