794 def update_meta_info(db: SQL.Database, log_file: Log_File) |
794 def update_meta_info(db: SQL.Database, log_file: Log_File) |
795 { |
795 { |
796 val meta_info = log_file.parse_meta_info() |
796 val meta_info = log_file.parse_meta_info() |
797 val table = Data.meta_info_table |
797 val table = Data.meta_info_table |
798 |
798 |
799 db.transaction { |
799 db.using_statement(db.insert_permissive(table))(stmt => |
800 db.using_statement(table.delete(Data.log_name.where_equal(log_file.name)))(_.execute) |
800 { |
801 db.using_statement(table.insert())(stmt => |
801 db.set_string(stmt, 1, log_file.name) |
802 { |
802 for ((c, i) <- table.columns.tail.zipWithIndex) { |
803 db.set_string(stmt, 1, log_file.name) |
803 if (c.T == SQL.Type.Date) |
804 for ((c, i) <- table.columns.tail.zipWithIndex) { |
804 db.set_date(stmt, i + 2, meta_info.get_date(c)) |
805 if (c.T == SQL.Type.Date) |
805 else |
806 db.set_date(stmt, i + 2, meta_info.get_date(c)) |
806 db.set_string(stmt, i + 2, meta_info.get(c)) |
807 else |
807 } |
808 db.set_string(stmt, i + 2, meta_info.get(c)) |
808 stmt.execute() |
809 } |
809 }) |
810 stmt.execute() |
|
811 }) |
|
812 } |
|
813 } |
810 } |
814 |
811 |
815 def update_sessions(db: SQL.Database, log_file: Log_File) |
812 def update_sessions(db: SQL.Database, log_file: Log_File) |
816 { |
813 { |
817 val build_info = log_file.parse_build_info() |
814 val build_info = log_file.parse_build_info() |
818 val table = Data.sessions_table |
815 val table = Data.sessions_table |
819 |
816 |
820 db.transaction { |
817 db.using_statement(db.insert_permissive(table))(stmt => |
821 db.using_statement(table.delete(Data.log_name.where_equal(log_file.name)))(_.execute) |
818 { |
822 db.using_statement(table.insert())(stmt => |
819 val entries_iterator = |
823 { |
820 if (build_info.sessions.isEmpty) Iterator("" -> Session_Entry.empty) |
824 val entries_iterator = |
821 else build_info.sessions.iterator |
825 if (build_info.sessions.isEmpty) Iterator("" -> Session_Entry.empty) |
822 for ((session_name, session) <- entries_iterator) { |
826 else build_info.sessions.iterator |
823 db.set_string(stmt, 1, log_file.name) |
827 for ((session_name, session) <- entries_iterator) { |
824 db.set_string(stmt, 2, session_name) |
828 db.set_string(stmt, 1, log_file.name) |
825 db.set_string(stmt, 3, session.proper_chapter) |
829 db.set_string(stmt, 2, session_name) |
826 db.set_string(stmt, 4, session.proper_groups) |
830 db.set_string(stmt, 3, session.proper_chapter) |
827 db.set_int(stmt, 5, session.threads) |
831 db.set_string(stmt, 4, session.proper_groups) |
828 db.set_long(stmt, 6, session.timing.elapsed.proper_ms) |
832 db.set_int(stmt, 5, session.threads) |
829 db.set_long(stmt, 7, session.timing.cpu.proper_ms) |
833 db.set_long(stmt, 6, session.timing.elapsed.proper_ms) |
830 db.set_long(stmt, 8, session.timing.gc.proper_ms) |
834 db.set_long(stmt, 7, session.timing.cpu.proper_ms) |
831 db.set_double(stmt, 9, session.timing.factor) |
835 db.set_long(stmt, 8, session.timing.gc.proper_ms) |
832 db.set_long(stmt, 10, session.ml_timing.elapsed.proper_ms) |
836 db.set_double(stmt, 9, session.timing.factor) |
833 db.set_long(stmt, 11, session.ml_timing.cpu.proper_ms) |
837 db.set_long(stmt, 10, session.ml_timing.elapsed.proper_ms) |
834 db.set_long(stmt, 12, session.ml_timing.gc.proper_ms) |
838 db.set_long(stmt, 11, session.ml_timing.cpu.proper_ms) |
835 db.set_double(stmt, 13, session.ml_timing.factor) |
839 db.set_long(stmt, 12, session.ml_timing.gc.proper_ms) |
836 db.set_long(stmt, 14, session.heap_size) |
840 db.set_double(stmt, 13, session.ml_timing.factor) |
837 db.set_string(stmt, 15, session.status.map(_.toString)) |
841 db.set_long(stmt, 14, session.heap_size) |
838 stmt.execute() |
842 db.set_string(stmt, 15, session.status.map(_.toString)) |
839 } |
843 stmt.execute() |
840 }) |
844 } |
|
845 }) |
|
846 } |
|
847 } |
841 } |
848 |
842 |
849 def update_ml_statistics(db: SQL.Database, log_file: Log_File) |
843 def update_ml_statistics(db: SQL.Database, log_file: Log_File) |
850 { |
844 { |
851 val build_info = log_file.parse_build_info(ml_statistics = true) |
845 val build_info = log_file.parse_build_info(ml_statistics = true) |
852 val table = Data.ml_statistics_table |
846 val table = Data.ml_statistics_table |
853 |
847 |
854 db.transaction { |
848 db.using_statement(db.insert_permissive(table))(stmt => |
855 db.using_statement(table.delete(Data.log_name.where_equal(log_file.name)))(_.execute) |
849 { |
856 db.using_statement(table.insert())(stmt => |
850 val ml_stats: List[(String, Option[Bytes])] = |
857 { |
851 Par_List.map[(String, Session_Entry), (String, Option[Bytes])]( |
858 val ml_stats: List[(String, Option[Bytes])] = |
852 { case (a, b) => (a, compress_properties(b.ml_statistics).proper) }, |
859 Par_List.map[(String, Session_Entry), (String, Option[Bytes])]( |
853 build_info.sessions.iterator.filter(p => p._2.ml_statistics.nonEmpty).toList) |
860 { case (a, b) => (a, compress_properties(b.ml_statistics).proper) }, |
854 val entries = if (ml_stats.nonEmpty) ml_stats else List("" -> None) |
861 build_info.sessions.iterator.filter(p => p._2.ml_statistics.nonEmpty).toList) |
855 for ((session_name, ml_statistics) <- entries) { |
862 val entries = if (ml_stats.nonEmpty) ml_stats else List("" -> None) |
856 db.set_string(stmt, 1, log_file.name) |
863 for ((session_name, ml_statistics) <- entries) { |
857 db.set_string(stmt, 2, session_name) |
864 db.set_string(stmt, 1, log_file.name) |
858 db.set_bytes(stmt, 3, ml_statistics) |
865 db.set_string(stmt, 2, session_name) |
859 stmt.execute() |
866 db.set_bytes(stmt, 3, ml_statistics) |
860 } |
867 stmt.execute() |
861 }) |
868 } |
|
869 }) |
|
870 } |
|
871 } |
862 } |
872 |
863 |
873 def write_info(db: SQL.Database, files: List[JFile], ml_statistics: Boolean = false) |
864 def write_info(db: SQL.Database, files: List[JFile], ml_statistics: Boolean = false) |
874 { |
865 { |
875 class Table_Status(table: SQL.Table, update_db: (SQL.Database, Log_File) => Unit) |
866 class Table_Status(table: SQL.Table, update_db: (SQL.Database, Log_File) => Unit) |