equal
deleted
inserted
replaced
872 if (ssh_host == "") None |
872 if (ssh_host == "") None |
873 else Some(SSH.open_session(options, host = ssh_host, user = ssh_user, port = ssh_port)), |
873 else Some(SSH.open_session(options, host = ssh_host, user = ssh_user, port = ssh_port)), |
874 ssh_close = true) |
874 ssh_close = true) |
875 } |
875 } |
876 |
876 |
877 def update_database(db: PostgreSQL.Database, dirs: List[Path], ml_statistics: Boolean = false) |
877 def update_database( |
|
878 db: PostgreSQL.Database, dirs: List[Path], ml_statistics: Boolean = false): Unit = |
878 { |
879 { |
879 val log_files = |
880 val log_files = |
880 dirs.flatMap(dir => |
881 dirs.flatMap(dir => |
881 File.find_files(dir.file, pred = Log_File.is_log(_), follow_links = true)) |
882 File.find_files(dir.file, pred = Log_File.is_log(_), follow_links = true)) |
882 write_info(db, log_files, ml_statistics = ml_statistics) |
883 write_info(db, log_files, ml_statistics = ml_statistics) |
885 db.create_view(Data.pull_date_table(afp = true)) |
886 db.create_view(Data.pull_date_table(afp = true)) |
886 db.create_view(Data.universal_table) |
887 db.create_view(Data.universal_table) |
887 } |
888 } |
888 |
889 |
889 def snapshot_database(db: PostgreSQL.Database, sqlite_database: Path, |
890 def snapshot_database(db: PostgreSQL.Database, sqlite_database: Path, |
890 days: Int = 100, ml_statistics: Boolean = false) |
891 days: Int = 100, ml_statistics: Boolean = false): Unit = |
891 { |
892 { |
892 Isabelle_System.make_directory(sqlite_database.dir) |
893 Isabelle_System.make_directory(sqlite_database.dir) |
893 sqlite_database.file.delete |
894 sqlite_database.file.delete |
894 |
895 |
895 using(SQLite.open_database(sqlite_database))(db2 => |
896 using(SQLite.open_database(sqlite_database))(db2 => |
950 |
951 |
951 def domain(db: SQL.Database, table: SQL.Table, column: SQL.Column): Set[String] = |
952 def domain(db: SQL.Database, table: SQL.Table, column: SQL.Column): Set[String] = |
952 db.using_statement(table.select(List(column), distinct = true))(stmt => |
953 db.using_statement(table.select(List(column), distinct = true))(stmt => |
953 stmt.execute_query().iterator(_.string(column)).toSet) |
954 stmt.execute_query().iterator(_.string(column)).toSet) |
954 |
955 |
955 def update_meta_info(db: SQL.Database, log_name: String, meta_info: Meta_Info) |
956 def update_meta_info(db: SQL.Database, log_name: String, meta_info: Meta_Info): Unit = |
956 { |
957 { |
957 val table = Data.meta_info_table |
958 val table = Data.meta_info_table |
958 db.using_statement(db.insert_permissive(table))(stmt => |
959 db.using_statement(db.insert_permissive(table))(stmt => |
959 { |
960 { |
960 stmt.string(1) = log_name |
961 stmt.string(1) = log_name |
966 } |
967 } |
967 stmt.execute() |
968 stmt.execute() |
968 }) |
969 }) |
969 } |
970 } |
970 |
971 |
971 def update_sessions(db: SQL.Database, log_name: String, build_info: Build_Info) |
972 def update_sessions(db: SQL.Database, log_name: String, build_info: Build_Info): Unit = |
972 { |
973 { |
973 val table = Data.sessions_table |
974 val table = Data.sessions_table |
974 db.using_statement(db.insert_permissive(table))(stmt => |
975 db.using_statement(db.insert_permissive(table))(stmt => |
975 { |
976 { |
976 val sessions = |
977 val sessions = |
997 stmt.execute() |
998 stmt.execute() |
998 } |
999 } |
999 }) |
1000 }) |
1000 } |
1001 } |
1001 |
1002 |
1002 def update_theories(db: SQL.Database, log_name: String, build_info: Build_Info) |
1003 def update_theories(db: SQL.Database, log_name: String, build_info: Build_Info): Unit = |
1003 { |
1004 { |
1004 val table = Data.theories_table |
1005 val table = Data.theories_table |
1005 db.using_statement(db.insert_permissive(table))(stmt => |
1006 db.using_statement(db.insert_permissive(table))(stmt => |
1006 { |
1007 { |
1007 val sessions = |
1008 val sessions = |
1021 stmt.execute() |
1022 stmt.execute() |
1022 } |
1023 } |
1023 }) |
1024 }) |
1024 } |
1025 } |
1025 |
1026 |
1026 def update_ml_statistics(db: SQL.Database, log_name: String, build_info: Build_Info) |
1027 def update_ml_statistics(db: SQL.Database, log_name: String, build_info: Build_Info): Unit = |
1027 { |
1028 { |
1028 val table = Data.ml_statistics_table |
1029 val table = Data.ml_statistics_table |
1029 db.using_statement(db.insert_permissive(table))(stmt => |
1030 db.using_statement(db.insert_permissive(table))(stmt => |
1030 { |
1031 { |
1031 val ml_stats: List[(String, Option[Bytes])] = |
1032 val ml_stats: List[(String, Option[Bytes])] = |
1040 stmt.execute() |
1041 stmt.execute() |
1041 } |
1042 } |
1042 }) |
1043 }) |
1043 } |
1044 } |
1044 |
1045 |
1045 def write_info(db: SQL.Database, files: List[JFile], ml_statistics: Boolean = false) |
1046 def write_info(db: SQL.Database, files: List[JFile], ml_statistics: Boolean = false): Unit = |
1046 { |
1047 { |
1047 abstract class Table_Status(table: SQL.Table) |
1048 abstract class Table_Status(table: SQL.Table) |
1048 { |
1049 { |
1049 db.create_table(table) |
1050 db.create_table(table) |
1050 private var known: Set[String] = domain(db, table, Data.log_name) |
1051 private var known: Set[String] = domain(db, table, Data.log_name) |
1051 |
1052 |
1052 def required(file: JFile): Boolean = !known(Log_File.plain_name(file.getName)) |
1053 def required(file: JFile): Boolean = !known(Log_File.plain_name(file.getName)) |
1053 |
1054 |
1054 def update_db(db: SQL.Database, log_file: Log_File): Unit |
1055 def update_db(db: SQL.Database, log_file: Log_File): Unit |
1055 def update(log_file: Log_File) |
1056 def update(log_file: Log_File): Unit = |
1056 { |
1057 { |
1057 if (!known(log_file.name)) { |
1058 if (!known(log_file.name)) { |
1058 update_db(db, log_file) |
1059 update_db(db, log_file) |
1059 known += log_file.name |
1060 known += log_file.name |
1060 } |
1061 } |