From 0b68b1629ed173818a6b5bb6ada1c4c78744348e Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 27 Nov 2017 20:09:02 +0300 Subject: add a sanity check for tt-rss myisam tables --- include/functions.php | 15 +++++++++++++++ include/sanity_check.php | 25 ++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/functions.php b/include/functions.php index 4265692ec..ed6f78eef 100644 --- a/include/functions.php +++ b/include/functions.php @@ -2546,3 +2546,18 @@ } } + function check_mysql_tables() { + $schema = db_escape_string(DB_NAME); + + $result = db_query("SELECT engine, table_name FROM information_schema.tables WHERE + table_schema = '$schema' AND table_name LIKE 'ttrss_%' AND engine != 'InnoDB'"); + + $bad_tables = []; + + while ($line = db_fetch_assoc($result)) { + array_push($bad_tables, $line); + } + + return $bad_tables; + } + diff --git a/include/sanity_check.php b/include/sanity_check.php index 39962219f..44bcb3db4 100755 --- a/include/sanity_check.php +++ b/include/sanity_check.php @@ -156,6 +156,29 @@ if (!class_exists("DOMDocument")) { array_push($errors, "PHP support for DOMDocument is required, but was not found."); } + + if (DB_TYPE == "mysql") { + $bad_tables = check_mysql_tables(); + + if (count($bad_tables) > 0) { + $bad_tables_fmt = []; + + foreach ($bad_tables as $bt) { + array_push($bad_tables_fmt, sprintf("%s (%s)", $bt['table_name'], $bt['engine'])); + } + + $msg = "

The following tables use an unsupported MySQL engine: " . + implode(", ", $bad_tables_fmt) . ".

"; + + $msg .= "

The only supported engine on MySQL is InnoDB. MyISAM lacks functionality to run + tt-rss. + Please convert aforementioned tables to InnoDB (if possible) or re-import the schema before continuing.

+

WARNING: importing the schema would mean LOSS OF ALL YOUR DATA.

"; + + + array_push($errors, $msg); + } + } } if (count($errors) > 0 && $_SERVER['REQUEST_URI']) { ?> @@ -165,7 +188,7 @@ - +
-- cgit v1.2.3-54-g00ecf