2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 09:16:53 +00:00

93_DbRep: contrib 8.30.6

git-svn-id: https://svn.fhem.de/fhem/trunk@21040 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2020-01-23 21:53:51 +00:00
parent ea04161b7a
commit 1bf628ae7b

View File

@ -58,6 +58,8 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch';
# Version History intern # Version History intern
our %DbRep_vNotesIntern = ( our %DbRep_vNotesIntern = (
"8.30.6" => "23.01.2020 delDoublets now are working also for PostgreSQL, calculation of number_fetched_rows corrected ",
"8.30.5" => "23.01.2020 remove adminCredentials from set of device type \"Agent\" ",
"8.30.4" => "22.01.2020 adjust behavior of OutputWriteToDB (averageValue,sumValue) - write value at every begin and also at every end of period ". "8.30.4" => "22.01.2020 adjust behavior of OutputWriteToDB (averageValue,sumValue) - write value at every begin and also at every end of period ".
"Forum: https://forum.fhem.de/index.php/topic,105787.msg1013920.html#msg1013920 ". "Forum: https://forum.fhem.de/index.php/topic,105787.msg1013920.html#msg1013920 ".
"fix Warning when Agent has detected a renamed device", "fix Warning when Agent has detected a renamed device",
@ -549,7 +551,7 @@ sub DbRep_Set($@) {
(($hash->{ROLE} ne "Agent")?"fetchrows:history,current ":""). (($hash->{ROLE} ne "Agent")?"fetchrows:history,current ":"").
(($hash->{ROLE} ne "Agent")?"diffValue:display,writeToDB ":""). (($hash->{ROLE} ne "Agent")?"diffValue:display,writeToDB ":"").
(($hash->{ROLE} ne "Agent")?"index:list_all,recreate_Search_Idx,drop_Search_Idx,recreate_Report_Idx,drop_Report_Idx ":""). (($hash->{ROLE} ne "Agent")?"index:list_all,recreate_Search_Idx,drop_Search_Idx,recreate_Report_Idx,drop_Report_Idx ":"").
(($dbmodel =~ /MYSQL/)?"adminCredentials ":""). (($hash->{ROLE} ne "Agent" && $dbmodel =~ /MYSQL/)?"adminCredentials ":"").
(($hash->{ROLE} ne "Agent")?"insert ":""). (($hash->{ROLE} ne "Agent")?"insert ":"").
(($hash->{ROLE} ne "Agent")?"reduceLog ":""). (($hash->{ROLE} ne "Agent")?"reduceLog ":"").
(($hash->{ROLE} ne "Agent")?"sqlCmd:textField-long ":""). (($hash->{ROLE} ne "Agent")?"sqlCmd:textField-long ":"").
@ -1048,7 +1050,7 @@ sub DbRep_Get($@) {
if($success) { if($success) {
$atxt = "Username: $admusername, Password: $admpassword\n"; $atxt = "Username: $admusername, Password: $admpassword\n";
} else { } else {
$atxt = "Credentials of $name couldn't be read - make sure you've set it with \"set $name adminCredentials username password\""; $atxt = "Credentials of $name couldn't be read. Make sure you've set it with \"set $name adminCredentials username password\" (only valid for DbRep device type \"Client\")";
} }
return "Stored Credentials for database default access:\n". return "Stored Credentials for database default access:\n".
@ -1196,6 +1198,7 @@ sub DbRep_Attr($$$$) {
timeDiffToNow timeDiffToNow
timeOlderThan timeOlderThan
sqlResultFormat sqlResultFormat
useAdminCredentials
); );
if ($aName eq "disable") { if ($aName eq "disable") {
@ -5176,7 +5179,7 @@ sub deldoublets_DoParse($) {
my $dbpassword = $attr{"sec$dblogname"}{secret}; my $dbpassword = $attr{"sec$dblogname"}{secret};
my $utf8 = defined($hash->{UTF8})?$hash->{UTF8}:0; my $utf8 = defined($hash->{UTF8})?$hash->{UTF8}:0;
my $limit = AttrVal($name, "limit", 1000); my $limit = AttrVal($name, "limit", 1000);
my ($err,$dbh,$sth,$sql,$rowlist,$selspec,$st,$table,$addon); my ($err,$dbh,$sth,$sql,$rowlist,$selspec,$st,$table,$addon,$dsql);
# Background-Startzeit # Background-Startzeit
my $bst = [gettimeofday]; my $bst = [gettimeofday];
@ -5241,18 +5244,19 @@ sub deldoublets_DoParse($) {
# SQL-Laufzeit ermitteln # SQL-Laufzeit ermitteln
$rt = $rt+tv_interval($st); $rt = $rt+tv_interval($st);
# Beginn Löschlogik, Zusammenstellen der löschenden DS (warping) # Beginn Löschlogik, Zusammenstellen der zu löschenden DS (warping)
# Array @warp -> die zu löschenden Datensätze # Array @warp -> die zu löschenden Datensätze
my (@warp); my (@warp);
my $i = 0; my $i = 0;
foreach my $nr (map { $_->[1]."_ESC_".$_->[2]."_ESC_".($_->[0] =~ s/ /_ESC_/r)."_ESC_".$_->[3]."_|_".($_->[4]-1) } @{$sth->fetchall_arrayref()}) { foreach my $nr (map { $_->[1]."_ESC_".$_->[2]."_ESC_".($_->[0] =~ s/ /_ESC_/r)."_ESC_".$_->[3]."_|_".($_->[4]-1) } @{$sth->fetchall_arrayref()}) {
# Reihenfolge geändert in: DEVICE,READING,DATE,TIME,VALUE,count(*) # Reihenfolge geändert in: DEVICE,READING,DATE,TIME,VALUE,count(*)
if($opt =~ /adviceDelete/) { if($opt =~ /adviceDelete/) {
push(@warp,$nr) if($#todel+1 < $limit); # die zu löschenden Datensätze (nur zur Anzeige) push(@warp,$i."_".$nr) if($#todel+1 < $limit); # die zu löschenden Datensätze (nur zur Anzeige)
} else { } else {
push (@warp,$nr); # Array der zu löschenden Datensätze push(@warp,$i."_".$nr); # Array der zu löschenden Datensätze
} }
my $c = (split("|",$nr))[-1]; my $c = (split("|",$nr))[-1];
Log3 ($name, 4, "DbRep $name - WARP: $nr, ntodel: $ntodel, c: $c");
$ntodel = $ntodel + $c; $ntodel = $ntodel + $c;
if ($opt =~ /delete/) { # delete Datensätze if ($opt =~ /delete/) { # delete Datensätze
@ -5264,9 +5268,12 @@ sub deldoublets_DoParse($) {
$val =~ s/'/''/g; # escape ' with '' $val =~ s/'/''/g; # escape ' with ''
$val =~ s/\\/\\\\/g if($model eq "MYSQL"); # escape \ with \\ für MySQL $val =~ s/\\/\\\\/g if($model eq "MYSQL"); # escape \ with \\ für MySQL
$st = [gettimeofday]; $st = [gettimeofday];
my $dsql = "delete FROM $table WHERE TIMESTAMP = '$dt' AND DEVICE = '$dev' AND READING = '$read' AND VALUE = '$val' limit $limit;"; if($model =~ /MYSQL|SQLITE/) {
my $sthd = $dbh->prepare($dsql); $dsql = "delete FROM $table WHERE TIMESTAMP = '$dt' AND DEVICE = '$dev' AND READING = '$read' AND VALUE = '$val' limit $limit;";
Log3 ($name, 4, "DbRep $name - SQL execute: $dsql"); } elsif ($model eq "POSTGRESQL") {
$dsql = "DELETE FROM $table WHERE ctid = any (array(SELECT ctid FROM $table WHERE TIMESTAMP = '$dt' AND DEVICE = '$dev' AND READING = '$read' AND VALUE = '$val' ORDER BY timestamp LIMIT $limit));";
}
my $sthd = $dbh->prepare($dsql);
eval {$sthd->execute();}; eval {$sthd->execute();};
if ($@) { if ($@) {
@ -11617,7 +11624,7 @@ return;
- Save a user / password for the privileged respectively administrative database access. - Save a user / password for the privileged respectively administrative database access.
The user is required for database operations which has to be executed by a privileged user. The user is required for database operations which has to be executed by a privileged user.
Please see also attribute <a href="#useAdminCredentials">'useAdminCredentials'</a>. <br> Please see also attribute <a href="#useAdminCredentials">'useAdminCredentials'</a>. <br>
(only valid if database type is MYSQL) (only valid if database type is MYSQL and DbRep-type "Client")
</li> <br> </li> <br>
@ -13771,7 +13778,7 @@ sub bdump {
<li><b>useAdminCredentials </b> <li><b>useAdminCredentials </b>
- If set, a before with "set &lt;aame&gt; adminCredentials" saved privileged user is used - If set, a before with "set &lt;aame&gt; adminCredentials" saved privileged user is used
for particular database operations. <br> for particular database operations. <br>
(only valid if database type is MYSQL) (only valid if database type is MYSQL and DbRep-type "Client")
</li> <br> </li> <br>
<a name="userExitFn"></a> <a name="userExitFn"></a>
@ -14105,7 +14112,7 @@ sub bdump {
- Speichert einen User / Passwort für den privilegierten bzw. administrativen - Speichert einen User / Passwort für den privilegierten bzw. administrativen
Datenbankzugriff. Er wird bei Datenbankoperationen benötigt, die mit einem privilegierten User Datenbankzugriff. Er wird bei Datenbankoperationen benötigt, die mit einem privilegierten User
ausgeführt werden müssen. Siehe auch Attribut <a href="#useAdminCredentials">'useAdminCredentials'</a>. <br> ausgeführt werden müssen. Siehe auch Attribut <a href="#useAdminCredentials">'useAdminCredentials'</a>. <br>
(nur gültig bei Datenbanktyp MYSQL) (nur gültig bei Datenbanktyp MYSQL und DbRep-Typ "Client")
</li> <br> </li> <br>
@ -16299,7 +16306,7 @@ sub bdump {
<li><b>useAdminCredentials </b> <li><b>useAdminCredentials </b>
- Wenn gesetzt, wird ein zuvor mit "set &lt;Name&gt; adminCredentials" gespeicherter - Wenn gesetzt, wird ein zuvor mit "set &lt;Name&gt; adminCredentials" gespeicherter
privilegierter User für bestimmte Datenbankoperationen verwendet. <br> privilegierter User für bestimmte Datenbankoperationen verwendet. <br>
(nur gültig für Datenbanktyp MYSQL) (nur gültig für Datenbanktyp MYSQL und DbRep-Typ "Client")
</li> <br> </li> <br>
<a name="userExitFn"></a> <a name="userExitFn"></a>