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

93_DbRep: contrib V8.10.0

git-svn-id: https://svn.fhem.de/fhem/trunk@18334 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2019-01-19 14:03:02 +00:00
parent 5818eb7198
commit 2d24dddb25

View File

@ -57,7 +57,7 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch';
# Versions History intern # Versions History intern
our %DbRep_vNotesIntern = ( our %DbRep_vNotesIntern = (
"8.10.0" => "19.01.2019 sqlCmd may input SQL session variables, Forum:#96082", "8.10.0" => "19.01.2019 sqlCmd, dbValue may input SQL session variables, Forum:#96082 ",
"8.9.10" => "18.01.2019 fix warnings Malformed UTF-8 character during importFromFile, Forum:#96056 ", "8.9.10" => "18.01.2019 fix warnings Malformed UTF-8 character during importFromFile, Forum:#96056 ",
"8.9.9" => "06.01.2019 diffval_DoParse: 'ORDER BY TIMESTAMP' added to statements Forum:https://forum.fhem.de/index.php/topic,53584.msg882082.html#msg882082", "8.9.9" => "06.01.2019 diffval_DoParse: 'ORDER BY TIMESTAMP' added to statements Forum:https://forum.fhem.de/index.php/topic,53584.msg882082.html#msg882082",
"8.9.8" => "27.11.2018 minor fix in deviceRename, commandref revised ", "8.9.8" => "27.11.2018 minor fix in deviceRename, commandref revised ",
@ -131,7 +131,7 @@ our %DbRep_vNotesIntern = (
# Versions History extern: # Versions History extern:
our %DbRep_vNotesExtern = ( our %DbRep_vNotesExtern = (
"8.10.0" => "19.01.2019 In sqlCmd you may now take over SQL session variables like \"SET \@open:=NULL,\@closed:=NULL; SELECT ...\", Forum:#96082", "8.10.0" => "19.01.2019 In commands sqlCmd, dbValue you may now use SQL session variables like \"SET \@open:=NULL,\@closed:=NULL; SELECT ...\", Forum:#96082",
"8.9.0" => "07.11.2018 new command set delDoublets added. This command allows to delete multiple occuring identical records. ", "8.9.0" => "07.11.2018 new command set delDoublets added. This command allows to delete multiple occuring identical records. ",
"8.8.0" => "06.11.2018 new attribute 'fastStart'. Usually every DbRep-device is making a short connect to its database when " "8.8.0" => "06.11.2018 new attribute 'fastStart'. Usually every DbRep-device is making a short connect to its database when "
."FHEM is restarted. When this attribute is set, the initial connect is done when the DbRep-device is doing its " ."FHEM is restarted. When this attribute is set, the initial connect is done when the DbRep-device is doing its "
@ -5649,7 +5649,7 @@ sub sqlCmd_DoParse($) {
$rt = $rt.",".$brt; $rt = $rt.",".$brt;
return "$name|$rowstring|$opt|$sql|$nrows|$rt|$err"; return "$name|$rowstring|$opt|$cmd|$nrows|$rt|$err";
} }
#################################################################################################### ####################################################################################################
@ -9973,6 +9973,27 @@ sub DbRep_dbValue($$) {
Log3 ($name, 4, "DbRep $name - -------- New selection --------- "); Log3 ($name, 4, "DbRep $name - -------- New selection --------- ");
Log3 ($name, 4, "DbRep $name - Command: dbValue"); Log3 ($name, 4, "DbRep $name - Command: dbValue");
Log3 ($name, 4, "DbRep $name - SQL execute: $sql"); Log3 ($name, 4, "DbRep $name - SQL execute: $sql");
# split SQL-Parameter Statement falls mitgegeben
# z.B. SET @open:=NULL, @closed:=NULL; Select ...
my $set;
if($cmd =~ /^SET.*;/i) {
$cmd =~ m/^(SET.*?;)(.*)/i;
$set = $1;
$sql = $2;
}
if($set) {
Log3($name, 4, "DbRep $name - Set SQL session variables: $set");
eval {$dbh->do($set);}; # @\RB = Resetbit wenn neues Selektionsintervall beginnt
}
if ($@) {
$err = $@;
Log3 ($name, 2, "DbRep $name - $err");
ReadingsSingleUpdateValue ($hash, "errortext", $err, 1);
ReadingsSingleUpdateValue ($hash, "state", "error", 1);
return ($err);
}
# SQL-Startzeit # SQL-Startzeit
my $st = [gettimeofday]; my $st = [gettimeofday];
@ -11314,6 +11335,8 @@ return;
"allowDeletion" has to be set for security reason. <br> "allowDeletion" has to be set for security reason. <br>
The statement doesn't consider limitations by attributes "device", "reading", "time.*" The statement doesn't consider limitations by attributes "device", "reading", "time.*"
respectively "aggregation". <br> respectively "aggregation". <br>
This command also accept the setting of SQL session variables like "SET @open:=NULL,
@closed:=NULL;". <br>
If the <a href="#DbRepattr">attribute</a> "timestamp_begin" respectively "timestamp_end" If the <a href="#DbRepattr">attribute</a> "timestamp_begin" respectively "timestamp_end"
is assumed in the statement, it is possible to use placeholder "<b>§timestamp_begin§</b>" respectively is assumed in the statement, it is possible to use placeholder "<b>§timestamp_begin§</b>" respectively
"<b>§timestamp_end§</b>" on suitable place. <br><br> "<b>§timestamp_end§</b>" on suitable place. <br><br>
@ -11336,6 +11359,25 @@ return;
<li>set &lt;name&gt; sqlCmd update history set TIMESTAMP=TIMESTAMP,VALUE='Val' WHERE VALUE='TestValue' </li> <li>set &lt;name&gt; sqlCmd update history set TIMESTAMP=TIMESTAMP,VALUE='Val' WHERE VALUE='TestValue' </li>
<li>set &lt;name&gt; sqlCmd select * from history where DEVICE = "Test" </li> <li>set &lt;name&gt; sqlCmd select * from history where DEVICE = "Test" </li>
<li>set &lt;name&gt; sqlCmd insert into history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES ('2017-05-09 17:00:14','Test','manuell','manuell','Tes§e','TestValue','°C') </li> <li>set &lt;name&gt; sqlCmd insert into history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES ('2017-05-09 17:00:14','Test','manuell','manuell','Tes§e','TestValue','°C') </li>
</ul>
<br>
Here you can see an example of a more complex statement (MySQL) with setting SQL session
variables: <br><br>
<ul>
<li>set &lt;name&gt; sqlCmd SET @open:=NULL, @closed:=NULL;
SELECT
TIMESTAMP, VALUE,DEVICE,
@open AS open,
@open := IF(VALUE = 'open', TIMESTAMP, NULL) AS curr_open,
@closed := IF(VALUE = 'closed', TIMESTAMP, NULL) AS closed
FROM history WHERE
DATE(TIMESTAMP) = CURDATE() AND
DEVICE = "HT_Fensterkontakt" AND
READING = "state" AND
(VALUE = "open" OR VALUE = "closed")
ORDER BY TIMESTAMP; </li>
</ul> </ul>
<br> <br>
@ -11551,6 +11593,8 @@ return;
Executes the specified SQL-statement in <b>blocking</b> manner. Because of its mode of operation Executes the specified SQL-statement in <b>blocking</b> manner. Because of its mode of operation
this function is particular convenient for user own perl scripts. <br> this function is particular convenient for user own perl scripts. <br>
The input accepts multi line commands and delivers multi line results as well. The input accepts multi line commands and delivers multi line results as well.
This command also accept the setting of SQL session variables like "SET @open:=NULL,
@closed:=NULL;". <br>
If several fields are selected and passed back, the fieds are separated by the separator defined If several fields are selected and passed back, the fieds are separated by the separator defined
by <a href="#DbRepattr">attribute</a> "sqlResultFieldSep" (default "|"). Several result lines by <a href="#DbRepattr">attribute</a> "sqlResultFieldSep" (default "|"). Several result lines
are separated by newline ("\n"). <br> are separated by newline ("\n"). <br>
@ -13624,6 +13668,8 @@ sub bdump {
<a href="#DbRepattr">Attribut</a> "allowDeletion" gesetzt sein. <br> <a href="#DbRepattr">Attribut</a> "allowDeletion" gesetzt sein. <br>
Bei der Ausführung dieses Kommandos werden keine Einschränkungen durch gesetzte Attribute Bei der Ausführung dieses Kommandos werden keine Einschränkungen durch gesetzte Attribute
"device", "reading", "time.*" bzw. "aggregation" berücksichtigt. <br> "device", "reading", "time.*" bzw. "aggregation" berücksichtigt. <br>
Dieses Kommando akzeptiert ebenfalls das Setzen von SQL Session Variablen wie z.B.
"SET @open:=NULL, @closed:=NULL;". <br>
Sollen die im Modul gesetzten <a href="#DbRepattr">Attribute</a> "timestamp_begin" bzw. Sollen die im Modul gesetzten <a href="#DbRepattr">Attribute</a> "timestamp_begin" bzw.
"timestamp_end" im Statement berücksichtigt werden, können die Platzhalter "timestamp_end" im Statement berücksichtigt werden, können die Platzhalter
"<b>§timestamp_begin§</b>" bzw. "<b>§timestamp_end§</b>" dafür verwendet werden. <br><br> "<b>§timestamp_begin§</b>" bzw. "<b>§timestamp_end§</b>" dafür verwendet werden. <br><br>
@ -13647,7 +13693,26 @@ sub bdump {
<li>set &lt;name&gt; sqlCmd select * from history where DEVICE = "Test" </li> <li>set &lt;name&gt; sqlCmd select * from history where DEVICE = "Test" </li>
<li>set &lt;name&gt; sqlCmd insert into history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES ('2017-05-09 17:00:14','Test','manuell','manuell','Tes§e','TestValue','°C') </li> <li>set &lt;name&gt; sqlCmd insert into history (TIMESTAMP, DEVICE, TYPE, EVENT, READING, VALUE, UNIT) VALUES ('2017-05-09 17:00:14','Test','manuell','manuell','Tes§e','TestValue','°C') </li>
</ul> </ul>
<br> <br>
Nachfolgend noch ein Beispiel für ein komplexeres Statement (MySQL) unter Mitgabe von
SQL Session Variablen: <br><br>
<ul>
<li>set &lt;name&gt; sqlCmd SET @open:=NULL, @closed:=NULL;
SELECT
TIMESTAMP, VALUE,DEVICE,
@open AS open,
@open := IF(VALUE = 'open', TIMESTAMP, NULL) AS curr_open,
@closed := IF(VALUE = 'closed', TIMESTAMP, NULL) AS closed
FROM history WHERE
DATE(TIMESTAMP) = CURDATE() AND
DEVICE = "HT_Fensterkontakt" AND
READING = "state" AND
(VALUE = "open" OR VALUE = "closed")
ORDER BY TIMESTAMP; </li>
</ul>
<br>
Das Ergebnis des Statements wird im <a href="#DbRepReadings">Reading</a> "SqlResult" dargestellt. Das Ergebnis des Statements wird im <a href="#DbRepReadings">Reading</a> "SqlResult" dargestellt.
Die Ergebnis-Formatierung kann durch das <a href="#DbRepattr">Attribut</a> "sqlResultFormat" ausgewählt, sowie der verwendete Die Ergebnis-Formatierung kann durch das <a href="#DbRepattr">Attribut</a> "sqlResultFormat" ausgewählt, sowie der verwendete
@ -13868,7 +13933,9 @@ sub bdump {
<li><b> dbValue &lt;SQL-Statement&gt;</b> - <li><b> dbValue &lt;SQL-Statement&gt;</b> -
Führt das angegebene SQL-Statement <b>blockierend</b> aus. Diese Funktion ist durch ihre Arbeitsweise Führt das angegebene SQL-Statement <b>blockierend</b> aus. Diese Funktion ist durch ihre Arbeitsweise
speziell für den Einsatz in benutzerspezifischen Scripten geeignet. <br> speziell für den Einsatz in benutzerspezifischen Scripten geeignet. <br>
Die Eingabe akzeptiert Mehrzeiler und gibt ebenso mehrzeilige Ergebisse zurück. Die Eingabe akzeptiert Mehrzeiler und gibt ebenso mehrzeilige Ergebisse zurück.
Dieses Kommando akzeptiert ebenfalls das Setzen von SQL Session Variablen wie z.B.
"SET @open:=NULL, @closed:=NULL;". <br>
Werden mehrere Felder selektiert und zurückgegeben, erfolgt die Feldtrennung mit dem Trenner Werden mehrere Felder selektiert und zurückgegeben, erfolgt die Feldtrennung mit dem Trenner
des <a href="#DbRepattr">Attributes</a> "sqlResultFieldSep" (default "|"). Mehrere Ergebniszeilen des <a href="#DbRepattr">Attributes</a> "sqlResultFieldSep" (default "|"). Mehrere Ergebniszeilen
werden mit Newline ("\n") separiert. <br> werden mit Newline ("\n") separiert. <br>