[influxdb] Fix for influxdbv1 retention and table names containing keywords or special chars (#11139)

* [influxdbv1] https://github.com/openhab/openhab-addons/issues/9790 and https://github.com/openhab/openhab-addons/issues/10398 Fix for retention and table names containing InfluxQL keywords or special characters

Signed-off-by: fremel@gmail.com <fremel@gmail.com>

* Revert escaped qoutes on null items

Signed-off-by: fremel@gmail.com <fremel@gmail.com>

* Apply suggestions from code review

Signed-off-by: Fabian Wolter <github@fabian-wolter.de>

Co-authored-by: Joan Pujol <joanpujol@gmail.com>

* Apply spotless

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>

Co-authored-by: Fabian Wolter <github@fabian-wolter.de>
Co-authored-by: Joan Pujol <joanpujol@gmail.com>
Co-authored-by: Jacob Laursen <jacob-github@vindvejr.dk>
This commit is contained in:
fremel75 2022-05-29 20:54:49 +02:00 committed by GitHub
parent 531ddb37da
commit 6190867c39
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 11 deletions

View File

@ -19,7 +19,6 @@ import static org.openhab.persistence.influxdb.internal.InfluxDBStateConvertUtil
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.influxdb.dto.Query;
import org.influxdb.querybuilder.Appender;
import org.influxdb.querybuilder.BuiltQuery;
import org.influxdb.querybuilder.Select;
import org.influxdb.querybuilder.Where;
@ -117,10 +116,10 @@ public class Influx1FilterCriteriaQueryCreatorImpl implements FilterCriteriaQuer
private String fullQualifiedTableName(String retentionPolicy, String tableName, boolean escapeTableName) {
StringBuilder sb = new StringBuilder();
Appender.appendName(retentionPolicy, sb);
sb.append('"').append(retentionPolicy).append('"');
sb.append(".");
if (escapeTableName) {
Appender.appendName(tableName, sb);
sb.append('"').append(tableName).append('"');
} else {
sb.append(tableName);
}

View File

@ -76,7 +76,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest {
FilterCriteria criteria = createBaseCriteria();
String queryV1 = instanceV1.createQuery(criteria, RETENTION_POLICY);
assertThat(queryV1, equalTo("SELECT \"value\"::field,\"item\"::tag FROM origin.sampleItem;"));
assertThat(queryV1, equalTo("SELECT \"value\"::field,\"item\"::tag FROM \"origin\".\"sampleItem\";"));
String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY);
assertThat(queryV2,
@ -91,7 +91,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest {
criteria.setOrdering(null);
String queryV1 = instanceV1.createQuery(criteria, RETENTION_POLICY);
assertThat(queryV1, equalTo("SELECT \"value\"::field,\"item\"::tag FROM origin./.*/;"));
assertThat(queryV1, equalTo("SELECT \"value\"::field,\"item\"::tag FROM \"origin\"./.*/;"));
String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY);
assertThat(queryV2, equalTo("from(bucket:\"origin\")\n\t" + "|> range(start:-100y)"));
@ -107,7 +107,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest {
String queryV1 = instanceV1.createQuery(criteria, RETENTION_POLICY);
String expectedQueryV1 = String.format(
"SELECT \"value\"::field,\"item\"::tag FROM origin.sampleItem WHERE time >= '%s' AND time <= '%s';",
"SELECT \"value\"::field,\"item\"::tag FROM \"origin\".\"sampleItem\" WHERE time >= '%s' AND time <= '%s';",
now.toInstant(), tomorrow.toInstant());
assertThat(queryV1, equalTo(expectedQueryV1));
@ -127,7 +127,8 @@ public class InfluxFilterCriteriaQueryCreatorImplTest {
criteria.setState(new PercentType(90));
String query = instanceV1.createQuery(criteria, RETENTION_POLICY);
assertThat(query, equalTo("SELECT \"value\"::field,\"item\"::tag FROM origin.sampleItem WHERE value <= 90;"));
assertThat(query,
equalTo("SELECT \"value\"::field,\"item\"::tag FROM \"origin\".\"sampleItem\" WHERE value <= 90;"));
String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY);
assertThat(queryV2,
@ -144,7 +145,8 @@ public class InfluxFilterCriteriaQueryCreatorImplTest {
criteria.setPageSize(10);
String query = instanceV1.createQuery(criteria, RETENTION_POLICY);
assertThat(query, equalTo("SELECT \"value\"::field,\"item\"::tag FROM origin.sampleItem LIMIT 10 OFFSET 20;"));
assertThat(query,
equalTo("SELECT \"value\"::field,\"item\"::tag FROM \"origin\".\"sampleItem\" LIMIT 10 OFFSET 20;"));
String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY);
assertThat(queryV2, equalTo("from(bucket:\"origin\")\n\t" + "|> range(start:-100y)\n\t"
@ -158,7 +160,8 @@ public class InfluxFilterCriteriaQueryCreatorImplTest {
criteria.setOrdering(FilterCriteria.Ordering.ASCENDING);
String query = instanceV1.createQuery(criteria, RETENTION_POLICY);
assertThat(query, equalTo("SELECT \"value\"::field,\"item\"::tag FROM origin.sampleItem ORDER BY time ASC;"));
assertThat(query,
equalTo("SELECT \"value\"::field,\"item\"::tag FROM \"origin\".\"sampleItem\" ORDER BY time ASC;"));
String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY);
assertThat(queryV2,
@ -201,7 +204,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest {
String queryV1 = instanceV1.createQuery(criteria, RETENTION_POLICY);
assertThat(queryV1, equalTo(
"SELECT \"value\"::field,\"item\"::tag FROM origin.measurementName WHERE item = 'sampleItem';"));
"SELECT \"value\"::field,\"item\"::tag FROM \"origin\".\"measurementName\" WHERE item = 'sampleItem';"));
String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY);
assertThat(queryV2,
@ -214,7 +217,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest {
.thenReturn(new Metadata(metadataKey, "", Map.of("key1", "val1", "key2", "val2")));
queryV1 = instanceV1.createQuery(criteria, RETENTION_POLICY);
assertThat(queryV1, equalTo("SELECT \"value\"::field,\"item\"::tag FROM origin.sampleItem;"));
assertThat(queryV1, equalTo("SELECT \"value\"::field,\"item\"::tag FROM \"origin\".\"sampleItem\";"));
queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY);
assertThat(queryV2,