diff --git a/fhem/contrib/DS_Starter/93_DbLog.pm b/fhem/contrib/DS_Starter/93_DbLog.pm
index 2abb05c00..f9e2d2751 100644
--- a/fhem/contrib/DS_Starter/93_DbLog.pm
+++ b/fhem/contrib/DS_Starter/93_DbLog.pm
@@ -38,7 +38,7 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch';
# Version History intern by DS_Starter:
my %DbLog_vNotesIntern = (
- "5.5.10" => "05.01.2023 more code rework (_DbLog_SBP_onRun_checkDiscDelpars), use dbh quote in _DbLog_SBP_onRun_LogBulk ",
+ "5.5.10" => "07.01.2023 more code rework (_DbLog_SBP_onRun_checkDiscDelpars), use dbh quote in _DbLog_SBP_onRun_LogBulk ",
"5.5.9" => "28.12.2022 optimize \$hash->{HELPER}{TH}, \$hash->{HELPER}{TC}, mode in Define ".
"Forum: https://forum.fhem.de/index.php/topic,130588.msg1254073.html#msg1254073 ",
"5.5.8" => "27.12.2022 two-line output of long state messages, define LONGRUN_PID threshold ",
@@ -467,7 +467,7 @@ sub _DbLog_initOnStart {
for my $r (@rdel) {
readingsDelete ($hash, $r);
}
-
+
DbLog_setSchemeTable ($hash);
DbLog_SBP_CheckAndInit ($hash);
@@ -494,12 +494,9 @@ return;
sub DbLog_Undef {
my $hash = shift;
my $name = shift;
- my $dbh = $hash->{DBHP};
delete $hash->{HELPER}{LONGRUN_PID};
- $dbh->disconnect() if(defined($dbh));
-
RemoveInternalTimer($hash);
delete $data{DbLog}{$name};
@@ -572,7 +569,6 @@ sub DbLog_Attr {
my($cmd,$name,$aName,$aVal) = @_;
my $hash = $defs{$name};
- my $dbh = $hash->{DBHP};
my $do = 0;
if ($aName eq "traceHandles") {
@@ -651,10 +647,6 @@ sub DbLog_Attr {
}
if($aName eq "commitMode") {
- if ($dbh) {
- $dbh->disconnect();
- }
-
if ($init_done == 1) {
DbLog_SBP_sendDbDisconnect ($hash, 1); # DB Verbindung und Verbindungsdaten im SubProzess löschen
@@ -710,7 +702,7 @@ sub DbLog_Attr {
}
$do = 0 if($cmd eq "del");
-
+
if ($do == 1) {
DbLog_setSchemeTable ($hash, $aVal);
}
@@ -939,13 +931,8 @@ sub _DbLog_setreopen { ## no critic "not used"
my $opt = $paref->{opt};
my $prop = $paref->{prop};
- my $dbh = $hash->{DBHP};
my $ret;
- if ($dbh) {
- $dbh->disconnect();
- }
-
DbLog_SBP_sendDbDisconnect ($hash);
if (!$prop) {
@@ -990,14 +977,8 @@ sub _DbLog_setrereadcfg { ## no critic "not used"
my $hash = $paref->{hash};
my $name = $paref->{name};
- my $dbh = $hash->{DBHP};
-
Log3 ($name, 3, "DbLog $name - Rereadcfg requested.");
- if ($dbh) {
- $dbh->disconnect();
- }
-
my $ret = DbLog_readCfg($hash);
return $ret if $ret;
@@ -1731,7 +1712,7 @@ sub DbLog_Log {
return if($hash->{HELPER}{REOPEN_RUNS}); # return wenn "reopen" mit Ablaufzeit gestartet ist
readingsSingleUpdate($hash, 'CacheUsage', $memcount, ($ce == 1 ? 1 : 0)) if($DoIt);
-
+
$err = DbLog_execMemCacheSync ($hash);
DbLog_setReadingstate ($hash, $err) if($err);
}
@@ -2237,7 +2218,7 @@ sub DbLog_execMemCacheSync {
my $memc = _DbLog_copyCache ($name);
readingsSingleUpdate($hash, 'CacheUsage', 0, 0);
-
+
$err = DbLog_SBP_sendLogData ($hash, 'log_synch', $memc); # Subprocess Prozessdaten senden, Log-Daten sind in $memc->{cdata} gespeichert
return $err if($err);
@@ -2305,7 +2286,7 @@ sub DbLog_SBP_onRun {
$attr{$name}{verbose} = $verbose if(defined $verbose); # verbose Level übergeben
my $bst = [gettimeofday]; # Background-Startzeit
-
+
$doNext = _DbLog_SBP_onRun_checkDiscDelpars ({ subprocess => $subprocess,
name => $name,
memc => $memc,
@@ -2392,7 +2373,7 @@ sub DbLog_SBP_onRun {
($error, $dbh) = _DbLog_SBP_onRun_connectDB ($params);
if ($error) {
- Log3 ($name, 2, "DbLog $name - Error: $error");
+ Log3 ($name, 2, "DbLog $name - ERROR: $error");
$ret = {
name => $name,
@@ -2423,7 +2404,7 @@ sub DbLog_SBP_onRun {
($error, $dbh) = _DbLog_SBP_onRun_connectDB ($params);
if ($error) {
- Log3 ($name, 2, "DbLog $name - Error: $error");
+ Log3 ($name, 2, "DbLog $name - ERROR: $error");
$ret = {
name => $name,
@@ -2537,7 +2518,7 @@ return;
}
###################################################################################
-# prüfen ob Datenbankverbindung beendet werden soll und ob die
+# prüfen ob Datenbankverbindung beendet werden soll und ob die
# gespeicherten Verbindungsparameter gelöscht werden sollen
###################################################################################
sub _DbLog_SBP_onRun_checkDiscDelpars {
@@ -2547,18 +2528,18 @@ sub _DbLog_SBP_onRun_checkDiscDelpars {
my $name = $paref->{name};
my $memc = $paref->{memc};
my $store = $paref->{store}; # Datenspeicher
-
+
my $dbdelpars = $memc->{dbdelpars}; # 1 -> gespeicherte DB Parameter sollen gelöscht werden
my $dbdisconn = $memc->{dbdisconn}; # 1 -> die Datenbankverbindung lösen/löschen
my $operation = $memc->{operation} // 'unknown';
my $doNext = 0;
-
- if ($dbdisconn) {
+
+ if ($dbdisconn) {
if (defined $store->{dbh}) {
my $dbh = delete $store->{dbh};
$dbh->disconnect();
}
-
+
if ($dbdelpars) {
delete $store->{dbparams};
}
@@ -2567,7 +2548,7 @@ sub _DbLog_SBP_onRun_checkDiscDelpars {
my $msg1 = 'Database disconnected by request.'.$msg0;
my $msg2 = $msg1;
$msg2 =~ s/
//xs;
-
+
Log3 ($name, 3, "DbLog $name - $msg2");
my $ret = {
@@ -2578,7 +2559,7 @@ sub _DbLog_SBP_onRun_checkDiscDelpars {
};
__DbLog_SBP_sendToParent ($subprocess, $ret);
-
+
$doNext = 1;
}
@@ -2617,7 +2598,7 @@ sub _DbLog_SBP_onRun_connectDB {
ShowErrorStatement => 1,
AutoInactiveDestroy => 1
}
- ); 1;
+ );
}
elsif ($useac == 1) {
$dbh = DBI->connect("dbi:$dbconn", $dbuser, $dbpassword, { PrintError => 0,
@@ -2626,7 +2607,7 @@ sub _DbLog_SBP_onRun_connectDB {
ShowErrorStatement => 1,
AutoInactiveDestroy => 1
}
- ); 1;
+ );
}
else { # Server default
$dbh = DBI->connect("dbi:$dbconn", $dbuser, $dbpassword, { PrintError => 0,
@@ -2634,11 +2615,12 @@ sub _DbLog_SBP_onRun_connectDB {
ShowErrorStatement => 1,
AutoInactiveDestroy => 1
}
- ); 1;
+ );
}
+ 1;
}
or do { $err = $@;
- Log3 ($name, 2, "DbLog $name - Error: $err");
+ Log3 ($name, 2, "DbLog $name - ERROR: $err");
return $err;
};
@@ -2757,20 +2739,18 @@ sub _DbLog_SBP_onRun_LogBulk {
my $row = $cdata->{$key};
my @ao = split '\\|', $row;
s/_ESC_/\|/gxs for @ao; # escaped Pipe back to "|"
-
- # TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT
-
- $ao[0] = $dbh->quote($ao[0]);
- $ao[1] = $dbh->quote($ao[1]);
- $ao[2] = $dbh->quote($ao[2]);
- $ao[3] = $dbh->quote($ao[3]);
- $ao[4] = $dbh->quote($ao[4]);
- $ao[5] = $dbh->quote($ao[5]);
- $ao[6] = $dbh->quote($ao[6]);
-
+
+ $ao[0] = $dbh->quote($ao[0]); # TIMESTAMP
+ $ao[1] = $dbh->quote($ao[1]); # DEVICE
+ $ao[2] = $dbh->quote($ao[2]); # TYPE
+ $ao[3] = $dbh->quote($ao[3]); # EVENT
+ $ao[4] = $dbh->quote($ao[4]); # READING
+ $ao[5] = $dbh->quote($ao[5]); # VALUE
+ $ao[6] = $dbh->quote($ao[6]); # UNIT
+
$sqlins .= "($ao[0],$ao[1],$ao[2],$ao[3],$ao[4],$ao[5],$ao[6]),";
}
-
+
use warnings;
chop $sqlins;
@@ -2972,7 +2952,7 @@ sub _DbLog_SBP_onRun_LogArray {
if ($error) { # Eventliste zurückgeben wenn z.B. Disk I/O Error bei SQLITE
Log3 ($name, 2, "DbLog $name - Error: $error");
- $dbh->disconnect();
+ __DbLog_SBP_disconnectOnly ($name, $dbh);
delete $store->{dbh};
$ret = {
@@ -4158,7 +4138,8 @@ sub __DbLog_SBP_beginTransaction {
eval{ if($useta && $dbh->{AutoCommit}) {
$dbh->begin_work();
Log3 ($name, 4, "DbLog $name - $info");
- }; 1;
+ };
+ 1;
}
or do { $err = $@;
Log3 ($name, 2, "DbLog $name - ERROR - $@");
@@ -4173,22 +4154,21 @@ return $err;
sub __DbLog_SBP_commitOnly {
my $name = shift;
my $dbh = shift;
- my $table = shift;
+ my $table = shift // 'unspecified';
my $err = q{};
eval{ if(!$dbh->{AutoCommit}) {
$dbh->commit();
- Log3 ($name, 4, "DbLog $name - commit inserted data table $table");
- 1;
+ Log3 ($name, 4, qq{DbLog $name - commit inserted data table >$table<});
}
else {
- Log3 ($name, 4, "DbLog $name - insert table $table committed by autocommit");
- 1;
+ Log3 ($name, 4, qq{DbLog $name - insert table >$table< committed by autocommit});
}
+ 1;
}
or do { $err = $@;
- Log3 ($name, 2, "DbLog $name - Error commit table $table - $err");
+ Log3 ($name, 2, qq{DbLog $name - ERROR commit table >$table<: $err});
};
return $err;
@@ -4207,12 +4187,11 @@ sub __DbLog_SBP_rollbackOnly {
eval{ if(!$dbh->{AutoCommit}) {
$dbh->rollback();
Log3 ($name, 4, "DbLog $name - Transaction rollback table $table");
- 1;
}
else {
Log3 ($name, 4, "DbLog $name - data auto rollback table $table");
- 1;
}
+ 1;
}
or do { $err = $@;
Log3 ($name, 2, "DbLog $name - Error - $err");
@@ -4221,6 +4200,25 @@ sub __DbLog_SBP_rollbackOnly {
return $err;
}
+####################################################################################################
+# nur Datenbank disconnect
+####################################################################################################
+sub __DbLog_SBP_disconnectOnly {
+ my $name = shift;
+ my $dbh = shift;
+
+ my $err = q{};
+
+ eval{ $dbh->disconnect() if(defined $dbh);
+ 1;
+ }
+ or do { $err = $@;
+ Log3 ($name, 2, "DbLog $name - ERROR - $@");
+ };
+
+return $err;
+}
+
#################################################################
# erstellt SQL für Insert Daten in die HISTORY! Tabelle
#################################################################
@@ -4264,20 +4262,17 @@ sub __DbLog_SBP_sthInsTable {
eval { if ($usepk && $model eq 'MYSQL') {
$sth = $dbh->prepare("INSERT IGNORE INTO $table (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)");
- 1;
}
elsif ($usepk && $model eq 'SQLITE') {
$sth = $dbh->prepare("INSERT OR IGNORE INTO $table (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)");
- 1;
}
elsif ($usepk && $model eq 'POSTGRESQL') {
$sth = $dbh->prepare("INSERT INTO $table (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?) ON CONFLICT DO NOTHING");
- 1;
}
else {
$sth = $dbh->prepare("INSERT INTO $table (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES (?,?,?,?,?,?,?)");
- 1;
}
+ 1;
}
or do { $err = $@;
};
@@ -4303,22 +4298,19 @@ sub __DbLog_SBP_sthUpdTable {
eval { if ($usepk && $model eq 'MYSQL') {
$sth = $dbh->prepare("REPLACE INTO $table (TIMESTAMP, TYPE, EVENT, VALUE, UNIT, DEVICE, READING) VALUES (?,?,?,?,?,?,?)");
- 1;
}
elsif ($usepk && $model eq 'SQLITE') {
$sth = $dbh->prepare("INSERT OR REPLACE INTO $table (TIMESTAMP, TYPE, EVENT, VALUE, UNIT, DEVICE, READING) VALUES (?,?,?,?,?,?,?)");
- 1;
}
elsif ($usepk && $model eq 'POSTGRESQL') {
$sth = $dbh->prepare("INSERT INTO $table (TIMESTAMP, TYPE, EVENT, VALUE, UNIT, DEVICE, READING) VALUES (?,?,?,?,?,?,?) ON CONFLICT ($pk)
DO UPDATE SET TIMESTAMP=EXCLUDED.TIMESTAMP, DEVICE=EXCLUDED.DEVICE, TYPE=EXCLUDED.TYPE, EVENT=EXCLUDED.EVENT, READING=EXCLUDED.READING,
VALUE=EXCLUDED.VALUE, UNIT=EXCLUDED.UNIT");
- 1;
}
else {
$sth = $dbh->prepare("UPDATE $table SET TIMESTAMP=?, TYPE=?, EVENT=?, VALUE=?, UNIT=? WHERE (DEVICE=?) AND (READING=?)");
- 1;
}
+ 1;
}
or do { $err = $@;
};
@@ -4937,8 +4929,8 @@ return;
# Neuer dbh Handle zur allegmeinen Verwendung
###################################################################################
sub _DbLog_ConnectNewDBH {
- my $hash = shift;
- my $name = $hash->{NAME};
+ my $hash = shift;
+ my $name = $hash->{NAME};
my ($useac,$useta) = DbLog_commitMode ($name, AttrVal($name, 'commitMode', $dblog_cmdef));
@@ -4962,6 +4954,38 @@ sub _DbLog_ConnectNewDBH {
return;
}
+####################################################################################################
+# SQL Query evaluieren und return ein Ergebnis-Array bei Erfolg
+####################################################################################################
+sub _DbLog_prepExecQueryOnly {
+ my $name = shift;
+ my $dbh = shift;
+ my $sql = shift;
+ my $info = shift // "SQL execute: $sql";
+
+ my $err = q{};
+ my @sr = ();
+
+ my ($sth,$result);
+
+ Log3 ($name, 4, "DbLog $name - Executing SQL: $sql");
+
+ eval{ $sth = $dbh->prepare($sql);
+ $sth->execute;
+ 1;
+ }
+ or do { $err = $@;
+ Log3 ($name, 2, "DbLog $name - ERROR - $err");
+ return $err;
+ };
+
+ @sr = $sth->fetchrow_array;
+
+ Log3 ($name, 4, "DbLog $name - SQL result: ".join ' ', @sr);
+
+return ($err, @sr);
+}
+
##########################################################################
#
# Prozedur zum Ausfuehren von SQL-Statements durch externe Module
@@ -4971,19 +4995,19 @@ return;
#
##########################################################################
sub DbLog_ExecSQL {
- my ($hash,$sql) = @_;
- my $name = $hash->{NAME};
- my $dbh = _DbLog_ConnectNewDBH($hash);
+ my $hash = shift;
+ my $sql = shift;
+
+ my $name = $hash->{NAME};
+ my $dbh = _DbLog_ConnectNewDBH($hash) || return;
Log3 ($name, 4, "DbLog $name - Backdoor executing: $sql");
- return if(!$dbh);
my $sth = DbLog_ExecSQL1($hash, $dbh, $sql);
if (!$sth) { #retry
- $dbh->disconnect();
- $dbh = _DbLog_ConnectNewDBH($hash);
- return if(!$dbh);
+ __DbLog_SBP_disconnectOnly ($name, $dbh);
+ $dbh = _DbLog_ConnectNewDBH($hash) || return;
Log3 ($name, 2, "DbLog $name - Backdoor retry: $sql");
@@ -4991,15 +5015,15 @@ sub DbLog_ExecSQL {
if(!$sth) {
Log3($name, 2, "DbLog $name - Backdoor retry failed");
- $dbh->disconnect();
- return 0;
+ __DbLog_SBP_disconnectOnly ($name, $dbh);
+ return;
}
Log3 ($name, 2, "DbLog $name - Backdoor retry ok");
}
- eval {$dbh->commit() if(!$dbh->{AutoCommit});};
- $dbh->disconnect();
+ __DbLog_SBP_commitOnly ($name, $dbh);
+ __DbLog_SBP_disconnectOnly ($name, $dbh);
return $sth;
}
@@ -5073,7 +5097,7 @@ sub DbLog_Get {
}
elsif(lc($outf) eq "webchart") { # redirect the get request to the DbLog_chartQuery function
- return DbLog_chartQuery($hash, @_);
+ return DbLog_chartQuery ($hash, @_);
}
########################
@@ -5135,8 +5159,8 @@ sub DbLog_Get {
Log3 $name, 4, "DbLog $name - ################################################################";
Log3($name, 4, "DbLog $name - main PID: $hash->{PID}, secondary PID: $$");
- $dbh = _DbLog_ConnectNewDBH($hash);
- return "Can't connect to database." if(!$dbh);
+ $dbh = _DbLog_ConnectNewDBH($hash) || return "Can't connect to database.";
+ #return "Can't connect to database." if(!$dbh);
# vorbereiten der DB-Abfrage, DB-Modell-abhaengig
if ($hash->{MODEL} eq "POSTGRESQL") {
@@ -5640,7 +5664,7 @@ sub DbLog_Get {
$data{"maxdate$k"} = $maxd[$j];
}
- $dbh->disconnect();
+ __DbLog_SBP_disconnectOnly ($name, $dbh);
if($internal) {
$internal_data = \$retval;
@@ -5703,7 +5727,7 @@ sub DbLog_configcheck {
my ($check, $rec,%dbconfig);
### verfügbare Treiber
- #######################################################################
+ ########################
my @ary = DBI->available_drivers('true');
my $dlst;
@@ -5718,17 +5742,18 @@ sub DbLog_configcheck {
$check .= "
";
### Version check
- #######################################################################
+ ###################
my $pv = sprintf("%vd",$^V); # Perl Version
my $dbi = $DBI::VERSION; # DBI Version
my %drivers = DBI->installed_drivers();
my $dv = "";
- if($dbmodel =~ /MYSQL/xi) {
+ if ($dbmodel =~ /MYSQL/xi) {
for (keys %drivers) {
$dv = $_ if($_ =~ /mysql|mariadb/x);
}
}
+
my $dbd = ($dbmodel =~ /POSTGRESQL/xi) ? "Pg: ".$DBD::Pg::VERSION: # DBD Version
($dbmodel =~ /MYSQL/xi && $dv) ? "$dv: ".$DBD::mysql::VERSION:
($dbmodel =~ /SQLITE/xi) ? "SQLite: ".$DBD::SQLite::VERSION:"Undefined";
@@ -5736,7 +5761,7 @@ sub DbLog_configcheck {
my $dbdhint = "";
my $dbdupd = 0;
- if($dbmodel =~ /MYSQL/xi && $dv) { # check DBD Mindest- und empfohlene Version
+ if ($dbmodel =~ /MYSQL/xi && $dv) { # check DBD Mindest- und empfohlene Version
my $dbdver = $DBD::mysql::VERSION * 1; # String to Zahl Konversion
if($dbdver < 4.032) {
$dbdhint = "Caution: Your DBD version doesn't support UTF8. ";
@@ -5759,11 +5784,11 @@ sub DbLog_configcheck {
$check .= "Used DBI (Database independent interface) version: $dbi
";
$check .= "Used DBD (Database driver) version $dbd
";
- if($errcm) {
+ if ($errcm) {
$check .= "Recommendation: ERROR - $errcm. $dbdhint
";
}
- if($supd) {
+ if ($supd) {
$check .= "Used DbLog version: $hash->{HELPER}{VERSION}.
$uptb
";
$check .= "Recommendation: You should update FHEM to get the recent DbLog version from repository ! $dbdhint
";
}
@@ -5797,14 +5822,19 @@ sub DbLog_configcheck {
### Connection und Encoding check
#######################################################################
+ my $st = [gettimeofday]; # Startzeit
+ my $dbh = _DbLog_ConnectNewDBH ($hash) || return "Can't connect to database.";
+ my $ct = sprintf("%.4f", tv_interval($st)); # Laufzeit ermitteln
+
my (@ce,@se);
my ($chutf8mod,$chutf8dat);
- if($dbmodel =~ /MYSQL/) {
- @ce = DbLog_sqlget($hash,"SHOW VARIABLES LIKE 'character_set_connection'");
- $chutf8mod = @ce ? uc($ce[1]) : "no result";
- @se = DbLog_sqlget($hash,"SHOW VARIABLES LIKE 'character_set_database'");
- $chutf8dat = @se ? uc($se[1]) : "no result";
+ if ($dbmodel =~ /MYSQL/) {
+ ($err, @ce) = _DbLog_prepExecQueryOnly ($name, $dbh, "SHOW VARIABLES LIKE 'character_set_connection'");
+ $chutf8mod = @ce ? uc($ce[1]) : "no result";
+
+ ($err, @se) = _DbLog_prepExecQueryOnly ($name, $dbh, "SHOW VARIABLES LIKE 'character_set_database'");
+ $chutf8dat = @se ? uc($se[1]) : "no result";
if($chutf8mod eq $chutf8dat) {
$rec = "settings o.k.";
@@ -5821,11 +5851,13 @@ sub DbLog_configcheck {
}
}
- if($dbmodel =~ /POSTGRESQL/) {
- @ce = DbLog_sqlget($hash,"SHOW CLIENT_ENCODING");
- $chutf8mod = @ce ? uc($ce[0]) : "no result";
- @se = DbLog_sqlget($hash,"select character_set_name from information_schema.character_sets");
- $chutf8dat = @se ? uc($se[0]) : "no result";
+
+ if ($dbmodel =~ /POSTGRESQL/) {
+ ($err, @ce) = _DbLog_prepExecQueryOnly ($name, $dbh, "SHOW CLIENT_ENCODING");
+ $chutf8mod = @ce ? uc($ce[0]) : "no result";
+
+ ($err, @se) = _DbLog_prepExecQueryOnly ($name, $dbh, "select character_set_name from information_schema.character_sets");
+ $chutf8dat = @se ? uc($se[0]) : "no result";
if($chutf8mod eq $chutf8dat) {
$rec = "settings o.k.";
@@ -5834,26 +5866,42 @@ sub DbLog_configcheck {
$rec = "This is only an information. PostgreSQL supports automatic character set conversion between server and client for certain character set combinations. The conversion information is stored in the pg_conversion system catalog. PostgreSQL comes with some predefined conversions.";
}
}
- if($dbmodel =~ /SQLITE/) {
- @ce = DbLog_sqlget($hash,"PRAGMA encoding");
- $chutf8dat = @ce ? uc($ce[0]) : "no result";
- @se = DbLog_sqlget($hash,"PRAGMA table_info($history)");
- $rec = "This is only an information about text encoding used by the main database.";
+
+ if ($dbmodel =~ /SQLITE/) {
+ ($err, @ce) = _DbLog_prepExecQueryOnly ($name, $dbh, "PRAGMA encoding");
+ $chutf8dat = @ce ? uc($ce[0]) : "no result";
+
+ ($err, @se) = _DbLog_prepExecQueryOnly ($name, $dbh, "PRAGMA table_info($history)");
+ $rec = "This is only an information about text encoding used by the main database.";
}
$check .= "Result of connection check
";
- if(@ce && @se) {
- $check .= "Connection to database $dbname successfully done.
";
- $check .= "Recommendation: settings o.k.
";
+ if (!$err && @ce && @se) {
+ $check .= "Connection to database $dbname successfully done.
";
+ $check .= "The time required to establish the connection was $ct seconds
";
+
+ if ($ct > 5.0) {
+ $check .= "Recommendation: The time to establish a connection is much too long. There are performance problems that hinder operation.
";
+ }
+ elsif ($ct > 1.5) {
+ $check .= "Recommendation: The time to establish a connection is too long. There are performance problems that could hinder operation.
";
+ }
+ elsif ($ct > 0.3) {
+ $check .= "Recommendation: The time to establish a connection is relatively long. This could be an indication of performance problems and should be taken into account.
";
+ }
+ else {
+ $check .= "Recommendation: settings o.k.
";
+ }
}
- if(!@ce || !@se) {
+ if ($err || !@ce || !@se) {
$check .= "Connection to database was not successful.
";
$check .= "Recommendation: Plese check logfile for further information.
";
$check .= "