equal
deleted
inserted
replaced
55 } |
55 } |
56 |
56 |
57 |
57 |
58 /* source files */ |
58 /* source files */ |
59 |
59 |
60 sealed case class Source_File(name: String, digest: SHA1.Digest, compressed: Boolean, body: Bytes) |
60 sealed case class Source_File( |
|
61 name: String, |
|
62 digest: SHA1.Digest, |
|
63 compressed: Boolean, |
|
64 body: Bytes, |
|
65 cache: Compress.Cache |
|
66 ) { |
|
67 def bytes: Bytes = if (compressed) body.uncompress(cache = cache) else body |
|
68 def text: String = bytes.text |
|
69 } |
61 |
70 |
62 object Sources { |
71 object Sources { |
63 val session_name = SQL.Column.string("session_name").make_primary_key |
72 val session_name = SQL.Column.string("session_name").make_primary_key |
64 val name = SQL.Column.string("name").make_primary_key |
73 val name = SQL.Column.string("name").make_primary_key |
65 val digest = SQL.Column.string("digest") |
74 val digest = SQL.Column.string("digest") |
86 case Some(source_file) => if (source_file.digest == digest) sources else err(path) |
95 case Some(source_file) => if (source_file.digest == digest) sources else err(path) |
87 case None => |
96 case None => |
88 val bytes = Bytes.read(path) |
97 val bytes = Bytes.read(path) |
89 if (bytes.sha1_digest == digest) { |
98 if (bytes.sha1_digest == digest) { |
90 val (compressed, body) = bytes.maybe_compress(Compress.Options_Zstd(), cache = cache) |
99 val (compressed, body) = bytes.maybe_compress(Compress.Options_Zstd(), cache = cache) |
91 val file = Source_File(name, digest, compressed, body) |
100 val file = Source_File(name, digest, compressed, body, cache) |
92 sources + (name -> file) |
101 sources + (name -> file) |
93 } |
102 } |
94 else err(path) |
103 else err(path) |
95 } |
104 } |
96 } |
105 } |
1650 } |
1659 } |
1651 } |
1660 } |
1652 } |
1661 } |
1653 } |
1662 } |
1654 |
1663 |
1655 def read_sources(db: SQL.Database, session_name: String, name: String): Option[Bytes] = { |
1664 def read_sources(db: SQL.Database, session_name: String, name: String): Option[Source_File] = { |
1656 val sql = |
1665 val sql = |
1657 Sources.table.select(List(Sources.compressed, Sources.body), |
1666 Sources.table.select(Nil, Sources.where_equal(session_name, name = name)) |
1658 Sources.where_equal(session_name, name = name)) |
|
1659 db.using_statement(sql) { stmt => |
1667 db.using_statement(sql) { stmt => |
1660 val res = stmt.execute_query() |
1668 val res = stmt.execute_query() |
1661 if (!res.next()) None |
1669 if (!res.next()) None |
1662 else { |
1670 else { |
|
1671 val digest = SHA1.fake_digest(res.string(Sources.digest)) |
1663 val compressed = res.bool(Sources.compressed) |
1672 val compressed = res.bool(Sources.compressed) |
1664 val bs = res.bytes(Sources.body) |
1673 val body = res.bytes(Sources.body) |
1665 Some(if (compressed) bs.uncompress(cache = cache.compress) else bs) |
1674 Some(Source_File(name, digest, compressed, body, cache.compress)) |
1666 } |
1675 } |
1667 } |
1676 } |
1668 } |
1677 } |
1669 } |
1678 } |
1670 } |
1679 } |