src/Pure/Thy/sessions.scala
changeset 76867 165ba28378f6
parent 76866 19bfc64a7310
child 76868 2329e106cfcd
equal deleted inserted replaced
76866:19bfc64a7310 76867:165ba28378f6
    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 }