From 0b68b1629ed173818a6b5bb6ada1c4c78744348e Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 27 Nov 2017 20:09:02 +0300 Subject: [PATCH] add a sanity check for tt-rss myisam tables --- css/utility.css | 14 +++++++++----- include/functions.php | 15 +++++++++++++++ include/sanity_check.php | 25 ++++++++++++++++++++++++- 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/css/utility.css b/css/utility.css index 01aff091..9420e05d 100644 --- a/css/utility.css +++ b/css/utility.css @@ -1,5 +1,9 @@ @import "dijit.css"; +body.sanity_failed { + background : #900; +} + body { background : #f5f5f5; color : black; @@ -132,7 +136,7 @@ h2 { font-size : 14pt; border-width : 0px 0px 1px 0px; border-color : #f0f0f0; - border-style : solid; + border-style : solid; } div.content > h2 { @@ -202,11 +206,11 @@ body#sharepopup table { padding : 5px; } -body#sharepopup form { +body#sharepopup form { height : 100%; } -body#sharepopup input { +body#sharepopup input { width : 100%; } @@ -227,7 +231,7 @@ div.autocomplete ul { font-size : 10px; } -div.autocomplete ul li.selected { +div.autocomplete ul li.selected { background-color : #fff7d5; } @@ -240,7 +244,7 @@ div.autocomplete ul li { cursor : pointer; } -fieldset { +fieldset { border-width : 0px; padding : 0px 0px 5px 0px; margin : 0px; diff --git a/include/functions.php b/include/functions.php index 4265692e..ed6f78ee 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 39962219..44bcb3db 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 @@ - +
-- 2.39.2