Suppose, there are two tables in db:
Table registries
:
Column | Type |
--------------------+-----------------------------+---------
registry_id | integer | not null
name | character varying | not null
...
uploaded_at | timestamp without time zone | not null
Table rows
:
Column | Type | Modifiers
---------------+-----------------------------+-----------
row_id | character varying | not null
registry_id | integer | not null
row | character varying | not null
In real world registries
is just a csv-file and rows
is lines of the files. In my scala-slick application, I want to know how many lines in each file.
registries
:
1,foo,...
2,bar,...
3,baz,...
rows
:
aaa,1,...
bbb,1,...
ccc,2,...
desired result:
1,foo,... - 2
2,bar,... - 1
3,baz,... - 0
My code now is (slick-3.0):
def getRegistryWithLength(rId: Int) = {
val q1 = registries.filter(_.registryId===rId).take(1).result.headOption
val q2 = rows.filter(_.registryId===rId).length.result
val registry = Await.result(db.run(q1), 5.seconds)
val length = Await.result(db.run(q2), 5.seconds)
(registry, length)
}
(Await
is bad idea, I know it)
How can I do getRegistryWithLength
using single sql
query?
I could add column row_n
into table registries
, but then I'll be forced to do updating column row_n
after delete/insert query of rows
table.
How can I do automatic calculation column row_n
in table registries
on db server side?