Hi Colin, Hi zenofmud,
Nodered: v1.1.3
Nodejs: v12.8.4.
Actual OS is Lubuntu 20.04.1 LTS (Linux 5.4.0-48-generic x64 LE)
MySQL plugin: node-red-node-mysql version 0.1.0
The issue is when I read the SQL to get some data and after that format for a dashboard table, I didn't explain correctly.
After some test I discovered that I have this problem when I run my query and filter the results with the function in SQL "BETWEEN".
The query is:
SET @columnsName = "";
SET @i = 1;
SET @i2 = 1;
SET @i3 = 1;
SET @sensorsNumber = (SELECT COUNT(*) FROM list_sensor);
SET @enableDateFilter = "{{flow.enableFilter}}";
SET @initialDate = "{{flow.startDatetime}}";
SET @endDate = "{{flow.endDatetime}}";
WHILE @i <= @sensorsNumber DO
SET @func = CONCAT("SET @descr", @i, " = (SELECT description FROM list_sensor WHERE nr=", @i, ")");
PREPARE stmt1 FROM @func;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
SET @i = @i + 1;
END WHILE;
WHILE @i2 <= @sensorsNumber DO
SET @func = CONCAT("SET @appoggio = @", "descr", @i2);
PREPARE stmt2 FROM @func;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
IF @appoggio=''
THEN
SET @func = CONCAT("SET @funcStruct", @i2, " = ''");
PREPARE stmt3 FROM @func;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;
SET @i2 = @i2 + 1;
ELSE
SET @func = CONCAT("SET @funcStruct", @i2, " = ", "', datalog_sensor.", @i2, " AS " ,"`", @appoggio, "`" , "'");
PREPARE stmt4 FROM @func;
EXECUTE stmt4;
DEALLOCATE PREPARE stmt4;
SET @i2 = @i2 + 1;
END IF;
END WHILE;
WHILE @i3 <= @sensorsNumber DO
SET @func = CONCAT("SET @columnsName = CONCAT(@columnsName, @funcStruct", @i3, ")");
PREPARE stmt5 FROM @func;
EXECUTE stmt5;
DEALLOCATE PREPARE stmt5;
SET @i3 = @i3 + 1;
END WHILE;
SET @func = CONCAT("SELECT datalog_sensor.DATETIME AS 'Orario' ", @columnsName, " FROM datalog_sensor");
IF @enableDateFilter = 1 THEN
SET @func = CONCAT(@func, " WHERE datetime Between '",@initialDate ,"' AND '",@endDate ,"'");
END IF;
SET @func = CONCAT(@func , ";");
PREPARE stmt6 FROM @func;
EXECUTE stmt6;
DEALLOCATE PREPARE stmt6;
The problem looks like to be in this part of the query, when @enableDateFilter is 1. When @enableDateFilter is 0 the query is working.
SET @func = CONCAT("SELECT datalog_sensor.DATETIME AS 'Orario' ", @columnsName, " FROM datalog_sensor");
IF @enableDateFilter = "1" THEN
SET @func = CONCAT(@func, " WHERE datetime Between '",@initialDate ,"' AND '",@endDate ,"'");
END IF;
SET @func = CONCAT(@func , ";");
PREPARE stmt6 FROM @func;
EXECUTE stmt6;
DEALLOCATE PREPARE stmt6;
In HeidiSQL if I set fixed values instead of the flow variables, the query is working good.
Thanks.
Antonio.