Skip to content

Commit

Permalink
fix: add precision in query method
Browse files Browse the repository at this point in the history
Signed-off-by: zhiheng123 <[email protected]>
  • Loading branch information
zhiheng123 committed Aug 28, 2024
1 parent 1c74863 commit a28c488
Show file tree
Hide file tree
Showing 6 changed files with 149 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,27 @@

@Getter
public enum Precision {
PRECISIONNANOSECOND("PrecisionNanoSecond", TimeUnit.NANOSECONDS),
PRECISIONNANOSECOND("PrecisionNanoSecond", TimeUnit.NANOSECONDS, "ns"),

PRECISIONMICROSECOND("PrecisionMicrosecond", TimeUnit.MICROSECONDS),
PRECISIONMICROSECOND("PrecisionMicrosecond", TimeUnit.MICROSECONDS, "u"),

PRECISIONMILLISECOND("PrecisionMillisecond", TimeUnit.MILLISECONDS),
PRECISIONMILLISECOND("PrecisionMillisecond", TimeUnit.MILLISECONDS, "ms"),

PRECISIONSECOND("PrecisionSecond", TimeUnit.SECONDS),
PRECISIONSECOND("PrecisionSecond", TimeUnit.SECONDS, "s"),

PRECISIONMINUTE("PrecisionMinute", TimeUnit.MINUTES),
PRECISIONMINUTE("PrecisionMinute", TimeUnit.MINUTES, "m"),

PRECISIONHOUR("PrecisionHour", TimeUnit.HOURS);
PRECISIONHOUR("PrecisionHour", TimeUnit.HOURS, "h");

private final String description;

private final TimeUnit timeUnit;

Precision(String description, TimeUnit timeUnit) {
private final String epoch;

Precision(String description, TimeUnit timeUnit, String epoch) {
this.description = description;
this.timeUnit = timeUnit;
this.epoch = epoch;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,18 @@ public class Query {
*/
private String retentionPolicy;

/*
* the precision of the time in query result
*/
private Precision precision;

public Query(String command) {
this.command = command;
}

public Query(String command, String database, String retentionPolicy) {
this.command = command;
this.database = database;
this.retentionPolicy = retentionPolicy;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
import io.opengemini.client.api.OpenGeminiException;
import io.opengemini.client.api.Point;
import io.opengemini.client.api.Pong;
import io.opengemini.client.api.Precision;
import io.opengemini.client.api.Query;
import io.opengemini.client.api.QueryResult;
import io.opengemini.client.api.RetentionPolicy;
import io.opengemini.client.api.RpConfig;
import io.opengemini.client.api.Series;
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
Expand Down Expand Up @@ -288,4 +290,45 @@ private static Point testPoint(String measurementName, int valueIndex, int field
testPoint.setFields(fields);
return testPoint;
}

@SneakyThrows
@Test
void testQueryPrecision() {
String databaseName = "query_precision_0001";
CompletableFuture<Void> createdb = openGeminiAsyncHttpClient.createDatabase(databaseName);
createdb.get();

String measurementName = "query_precision_ms_0001";
Point testPoint1 = testPoint(measurementName, 1, 1);
Point testPoint2 = testPoint(measurementName, 2, 1);
Point testPoint3 = testPoint(measurementName, 3, 1);

CompletableFuture<Void> writeRsp = openGeminiAsyncHttpClient.write(databaseName,
Arrays.asList(testPoint1, testPoint2, testPoint3));
writeRsp.get();
Thread.sleep(3000);

Query selectQuery = new Query("select * from " + measurementName, databaseName, "");
CompletableFuture<QueryResult> rst = openGeminiAsyncHttpClient.query(selectQuery);
QueryResult queryResult = rst.get();

Series x = queryResult.getResults().get(0).getSeries().get(0);
Object timeValue = x.getValues().get(0).get(0);
Assertions.assertInstanceOf(String.class, timeValue);
String timeValueStr = (String) timeValue;
Assertions.assertTrue(timeValueStr.startsWith("20") && timeValueStr.endsWith("Z"));

selectQuery = new Query("select * from " + measurementName, databaseName, "", Precision.PRECISIONNANOSECOND);
rst = openGeminiAsyncHttpClient.query(selectQuery);
queryResult = rst.get();

x = queryResult.getResults().get(0).getSeries().get(0);
timeValue = x.getValues().get(0).get(0);
Assertions.assertInstanceOf(Long.class, timeValue);
long timeValueDouble = (Long) timeValue;
Assertions.assertTrue(timeValueDouble > 1724778721457052741L);

CompletableFuture<Void> dropdb = openGeminiAsyncHttpClient.dropDatabase(databaseName);
dropdb.get();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ protected String getQueryUrl(Query query) {
if (query.getRetentionPolicy() != null) {
queryUrl += "&rp=" + query.getRetentionPolicy();
}

if (query.getPrecision() != null) {
queryUrl += "&epoch=" + query.getPrecision().getEpoch();
}
return queryUrl;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import io.opengemini.client.api.OpenGeminiException;
import io.opengemini.client.api.Point;
import io.opengemini.client.api.Pong;
import io.opengemini.client.api.Precision;
import io.opengemini.client.api.Query;
import io.opengemini.client.api.QueryResult;
import io.opengemini.client.api.RetentionPolicy;
Expand Down Expand Up @@ -284,4 +285,41 @@ void ping() throws Exception {
Assertions.assertNotNull(pong.getVersion());
}

@SneakyThrows
@Test
void testQueryPrecision() {
String databaseName = "query_precision_0001";
CompletableFuture<Void> createdb = openGeminiJdkClient.createDatabase(databaseName);
createdb.get();

String measurementName = "query_precision_ms_0001";
Point testPoint = generalTestPoint(measurementName, 1, 1);

CompletableFuture<Void> writeRsp = openGeminiJdkClient.write(databaseName, testPoint);
writeRsp.get();
Thread.sleep(3000);

Query selectQuery = new Query("select * from " + measurementName, databaseName, "");
CompletableFuture<QueryResult> rst = openGeminiJdkClient.query(selectQuery);
QueryResult queryResult = rst.get();

Series x = queryResult.getResults().get(0).getSeries().get(0);
Object timeValue = x.getValues().get(0).get(0);
Assertions.assertInstanceOf(String.class, timeValue);
String timeValueStr = (String) timeValue;
Assertions.assertTrue(timeValueStr.startsWith("20") && timeValueStr.endsWith("Z"));

selectQuery = new Query("select * from " + measurementName, databaseName, "", Precision.PRECISIONNANOSECOND);
rst = openGeminiJdkClient.query(selectQuery);
queryResult = rst.get();

x = queryResult.getResults().get(0).getSeries().get(0);
timeValue = x.getValues().get(0).get(0);
Assertions.assertInstanceOf(Long.class, timeValue);
long timeValueDouble = (Long) timeValue;
Assertions.assertTrue(timeValueDouble > 1724778721457052741L);

CompletableFuture<Void> dropdb = openGeminiJdkClient.dropDatabase(databaseName);
dropdb.get();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
import io.opengemini.client.api.OpenGeminiException;
import io.opengemini.client.api.Point;
import io.opengemini.client.api.Pong;
import io.opengemini.client.api.Precision;
import io.opengemini.client.api.Query;
import io.opengemini.client.api.QueryResult;
import io.opengemini.client.api.RetentionPolicy;
import io.opengemini.client.api.RpConfig;
import io.opengemini.client.api.Series;
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
Expand Down Expand Up @@ -287,4 +289,46 @@ private static Point testPoint(String measurementName, int valueIndex, int field
testPoint.setFields(fields);
return testPoint;
}


@SneakyThrows
@Test
void testQueryPrecision() {
String databaseName = "query_precision_0001";
CompletableFuture<Void> createdb = openGeminiOkhttpClient.createDatabase(databaseName);
createdb.get();

String measurementName = "query_precision_ms_0001";
Point testPoint1 = testPoint(measurementName, 1, 1);
Point testPoint2 = testPoint(measurementName, 2, 1);
Point testPoint3 = testPoint(measurementName, 3, 1);

CompletableFuture<Void> writeRsp = openGeminiOkhttpClient.write(databaseName,
Arrays.asList(testPoint1, testPoint2, testPoint3));
writeRsp.get();
Thread.sleep(3000);

Query selectQuery = new Query("select * from " + measurementName, databaseName, "");
CompletableFuture<QueryResult> rst = openGeminiOkhttpClient.query(selectQuery);
QueryResult queryResult = rst.get();

Series x = queryResult.getResults().get(0).getSeries().get(0);
Object timeValue = x.getValues().get(0).get(0);
Assertions.assertInstanceOf(String.class, timeValue);
String timeValueStr = (String) timeValue;
Assertions.assertTrue(timeValueStr.startsWith("20") && timeValueStr.endsWith("Z"));

selectQuery = new Query("select * from " + measurementName, databaseName, "", Precision.PRECISIONNANOSECOND);
rst = openGeminiOkhttpClient.query(selectQuery);
queryResult = rst.get();

x = queryResult.getResults().get(0).getSeries().get(0);
timeValue = x.getValues().get(0).get(0);
Assertions.assertInstanceOf(Long.class, timeValue);
long timeValueDouble = (Long) timeValue;
Assertions.assertTrue(timeValueDouble > 1724778721457052741L);

CompletableFuture<Void> dropdb = openGeminiOkhttpClient.dropDatabase(databaseName);
dropdb.get();
}
}

0 comments on commit a28c488

Please sign in to comment.