2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

93_DbRep: contrib 8.51.0

git-svn-id: https://svn.fhem.de/fhem/trunk@26972 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2023-01-06 08:48:34 +00:00
parent b6c5eba364
commit 2d4f1e594f

View File

@ -1295,20 +1295,22 @@ sub DbRep_Get {
return "Dump is running - try again later !" if($hash->{HELPER}{RUNNING_BACKUP_CLIENT});
return "The operation \"$opt\" isn't available with database type $dbmodel" if($dbmodel ne 'MYSQL');
DbRep_delread ($hash); # Readings löschen die nicht in der Ausnahmeliste (Attr readingPreventFromDel) stehen
DbRep_setLastCmd (@a);
DbRep_Main ($hash, $opt, $prop);
}
elsif ($opt eq "svrinfo") {
return "Dump is running - try again later !" if($hash->{HELPER}{RUNNING_BACKUP_CLIENT});
DbRep_delread ($hash); # Readings löschen die nicht in der Ausnahmeliste (Attr readingPreventFromDel) stehen
DbRep_setLastCmd (@a);
DbRep_Main ($hash, $opt, $prop);
}
elsif ($opt eq "blockinginfo") {
return "Dump is running - try again later !" if($hash->{HELPER}{RUNNING_BACKUP_CLIENT});
DbRep_delread ($hash); # Readings löschen die nicht in der Ausnahmeliste (Attr readingPreventFromDel) stehen
DbRep_setLastCmd (@a);
DbRep_delread ($hash);
ReadingsSingleUpdateValue ($hash, "state", "running", 1);
DbRep_getblockinginfo ($hash);
}
@ -1318,7 +1320,6 @@ sub DbRep_Get {
$hash->{HELPER}{IDRETRIES} = 3; # Anzahl wie oft versucht wird initiale Daten zu holen
DbRep_setLastCmd (@a);
DbRep_delread ($hash);
ReadingsSingleUpdateValue ($hash, "state", "running", 1);
$prop //= '';
@ -1333,7 +1334,14 @@ sub DbRep_Get {
my $sqlcmd = join ' ', @cmd;
$sqlcmd =~ tr/ A-Za-z0-9!"#$§%&'()*+,-.\/:;<=>?@[\\]^_`{|}~äöüÄÖÜ߀/ /cs;
$sqlcmd .= ';' if ($sqlcmd !~ m/\;$/xs);
$sqlcmd .= ';' if ($sqlcmd !~ m/\;$/x);
$sqlcmd = _DbRep_sqlFormOnline ($hash, $sqlcmd); # SQL Statement online formatieren
$sqlcmd = DbRep_trim ($sqlcmd);
$data{DbRep}{$name}{sqlcache}{temp} = $sqlcmd; # SQL incl. Formatierung zwischenspeichern
@cmd = split /\s+/, $sqlcmd;
$sqlcmd = join ' ', @cmd;
DbRep_setLastCmd ($name, $opt, $sqlcmd);
@ -1341,6 +1349,7 @@ sub DbRep_Get {
return "Attribute 'allowDeletion = 1' is needed for command '$sqlcmd'. Use it with care !";
}
DbRep_delread ($hash); # Readings löschen die nicht in der Ausnahmeliste (Attr readingPreventFromDel) stehen
ReadingsSingleUpdateValue ($hash, "state", "running", 1);
return DbRep_sqlCmdBlocking($name,$sqlcmd);
@ -6722,12 +6731,9 @@ sub DbRep_sqlCmdBlocking {
my ($ret);
readingsDelete ($hash, "errortext");
ReadingsSingleUpdateValue ($hash, "state", "running", 1);
my ($err,$dbh,$dbmodel) = DbRep_dbConnect($name);
if ($err) {
_DbRep_setErrorState ($name, $err);
_DbRep_setErrorState ($hash, $err);
return $err;
}
@ -6743,25 +6749,25 @@ sub DbRep_sqlCmdBlocking {
$err = _DbRep_setSessAttrVars ($name, $dbh);
if ($err) {
_DbRep_setErrorState ($name, $err);
_DbRep_setErrorState ($hash, $err);
return $err;
}
$err = _DbRep_setSessVars ($name, $dbh, \$sql);
if ($err) {
_DbRep_setErrorState ($name, $err);
_DbRep_setErrorState ($hash, $err);
return $err;
}
$err = _DbRep_setSessPragma ($name, $dbh, \$sql);
if ($err) {
_DbRep_setErrorState ($name, $err);
_DbRep_setErrorState ($hash, $err);
return $err;
}
$err = _DbRep_execSessPrepare ($name, $dbh, \$sql);
if ($err) {
_DbRep_setErrorState ($name, $err);
_DbRep_setErrorState ($hash, $err);
return $err;
}
@ -6801,13 +6807,12 @@ sub DbRep_sqlCmdBlocking {
Log3 ($name, 2, "DbRep $name - $err");
my $encerr = encode_base64($err, "");
$sth->finish if($sth);
$dbh->disconnect;
readingsBeginUpdate ($hash);
ReadingsBulkUpdateValue ($hash, 'errortext', $err);
ReadingsBulkUpdateValue ($hash, 'state', 'error');
readingsEndUpdate ($hash, 1);
_DbRep_setErrorState ($hash, $encerr);
return $err;
}
@ -6826,7 +6831,7 @@ sub DbRep_sqlCmdBlocking {
$err = DbRep_commitOnly ($name, $dbh);
if ($err) {
_DbRep_setErrorState ($name, $err);
_DbRep_setErrorState ($hash, $err);
return $err;
}
@ -6842,6 +6847,12 @@ sub DbRep_sqlCmdBlocking {
Log3 ($name, 4, "DbRep $name - Number of entries processed in db $hash->{DATABASE}: $nrows");
readingsBeginUpdate ($hash);
if (defined $data{DbRep}{$name}{sqlcache}{temp}) { # SQL incl. Formatierung aus Zwischenspeicherzwischenspeichern
my $tmpsql = delete $data{DbRep}{$name}{sqlcache}{temp};
ReadingsBulkUpdateValue ($hash, 'sqlCmd', $tmpsql);
}
ReadingsBulkUpdateTimeState ($hash, undef, $rt, 'done');
readingsEndUpdate ($hash, 1);
@ -6982,6 +6993,12 @@ sub _DbRep_setErrorState {
Log3 ($name, 2, "DbRep $name - ERROR - $err");
readingsBeginUpdate ($hash);
if (defined $data{DbRep}{$name}{sqlcache}{temp}) { # SQL incl. Formatierung aus Zwischenspeicherzwischenspeichern
my $tmpsql = delete $data{DbRep}{$name}{sqlcache}{temp};
ReadingsBulkUpdateValue ($hash, 'sqlCmd', $tmpsql);
}
ReadingsBulkUpdateValue ($hash, 'errortext', $err);
ReadingsBulkUpdateValue ($hash, 'state', 'error');
readingsEndUpdate ($hash, 1);
@ -7061,11 +7078,16 @@ sub DbRep_sqlCmdDone {
delete($hash->{HELPER}{RUNNING_PID});
my $tmpsql = delete $data{DbRep}{$name}{sqlcache}{temp}; # SQL incl. Formatierung aus Zwischenspeicher holen
my ($erread, $state) = DbRep_afterproc ($hash, $hash->{LASTCMD}); # Befehl nach Procedure ausführen
if ($err) {
ReadingsSingleUpdateValue ($hash, "errortext", $err, 1);
ReadingsSingleUpdateValue ($hash, "state", "error", 1);
readingsBeginUpdate ($hash);
ReadingsBulkUpdateValue ($hash, 'sqlCmd', $tmpsql);
ReadingsBulkUpdateValue ($hash, "errortext", $err );
ReadingsBulkUpdateValue ($hash, "state", "error");
readingsEndUpdate ($hash, 1);
return;
}
@ -7078,7 +7100,7 @@ sub DbRep_sqlCmdDone {
no warnings 'uninitialized';
readingsBeginUpdate ($hash);
ReadingsBulkUpdateValue ($hash, 'sqlCmd', $data{DbRep}{$name}{sqlcache}{temp}); # SQL incl. Formatierung aus Zwischenspeicherzwischenspeichern
ReadingsBulkUpdateValue ($hash, 'sqlCmd', $tmpsql);
ReadingsBulkUpdateValue ($hash, 'sqlResultNumRows', $nrows);
DbRep_addSQLcmdCache ($name); # Drop-Down Liste bisherige sqlCmd-Befehle füllen und in Key-File sichern
@ -7092,6 +7114,7 @@ sub DbRep_sqlCmdDone {
my $res = "<html><table border=2 bordercolor='darkgreen' cellspacing=0>";
my @rows = split( /§/, $rowstring );
my $row;
for $row ( @rows ) {
$row =~ s/\|°escaped°\|/§/g;
$row =~ s/$srs/\|/g if($srs !~ /\|/);
@ -7106,6 +7129,7 @@ sub DbRep_sqlCmdDone {
my $res = "<html>";
my @rows = split( /§/, $rowstring );
my $row;
for $row ( @rows ) {
$row =~ s/\|°escaped°\|/§/g;
$res .= $row."<br>";
@ -7120,6 +7144,7 @@ sub DbRep_sqlCmdDone {
my $numd = ceil(log10($bigint));
my $formatstr = sprintf('%%%d.%dd', $numd, $numd);
my $i = 0;
for my $row ( @rows ) {
$i++;
$row =~ s/\|°escaped°\|/§/g;
@ -7134,6 +7159,7 @@ sub DbRep_sqlCmdDone {
my $numd = ceil(log10($bigint));
my $formatstr = sprintf('%%%d.%dd', $numd, $numd);
my $i = 0;
for my $row ( @rows ) {
$i++;
$row =~ s/\|°escaped°\|/§/g;
@ -10261,7 +10287,10 @@ sub DbRep_ParseAborted {
my $state = $cause.$erread;
$dbh->disconnect() if(defined($dbh));
ReadingsSingleUpdateValue ($hash, "state", $state, 1);
readingsBeginUpdate ($hash);
ReadingsBulkUpdateValue ($hash, "state", $state);
readingsEndUpdate ($hash, 1);
Log3 ($name, 2, "DbRep $name - Database command aborted: \"$cause\" ");
@ -13504,8 +13533,12 @@ return;
# Associated Devices setzen
###################################################################################
sub DbRep_modAssociatedWith {
my ($hash,$cmd,$awdev) = @_;
my $hash = shift;
my $cmd = shift;
my $awdev = shift;
my $name = $hash->{NAME};
my (@naw,@edvs,@edvspcs,$edevswc);
my ($edevs,$idevice,$edevice) = ('','','');
@ -13518,14 +13551,16 @@ sub DbRep_modAssociatedWith {
if($edevice) {
@edvs = split(",",$edevice);
foreach my $e (@edvs) {
for my $e (@edvs) {
$e =~ s/%/\.*/g if($e !~ /^%$/); # SQL Wildcard % auflösen
@edvspcs = devspec2array($e);
@edvspcs = map { my $e = $_; $e =~ s/\.\*/%/xg; } @edvspcs;
if((map {$_ =~ /%/;} @edvspcs) && $edevice !~ /^%$/) { # Devices mit Wildcard (%) aussortieren, die nicht aufgelöst werden konnten
$edevswc .= "|" if($edevswc);
$edevswc .= join(" ",@edvspcs);
} else {
}
else {
$edevs .= "|" if($edevs);
$edevs .= join("|",@edvspcs);
}
@ -13534,10 +13569,12 @@ sub DbRep_modAssociatedWith {
if($idevice) {
my @nadev = split("[, ]", $idevice);
foreach my $d (@nadev) {
for my $d (@nadev) {
$d =~ s/%/\.*/g if($d !~ /^%$/); # SQL Wildcard % in Regex
my @a = devspec2array($d);
foreach(@a) {
for (@a) {
next if(!$defs{$_});
push(@naw, $_) if($_ !~ /$edevs/);
}
@ -13546,7 +13583,8 @@ sub DbRep_modAssociatedWith {
if(@naw) {
ReadingsSingleUpdateValue ($hash, ".associatedWith", join(" ",@naw), 0);
} else {
}
else {
readingsDelete($hash, ".associatedWith");
}