Skip to content

Commit 3dd9a81

Browse files
authored
Added returning of database version to metadata (#126)
2 parents 5738f59 + e33a730 commit 3dd9a81

File tree

3 files changed

+39
-17
lines changed

3 files changed

+39
-17
lines changed

jdbc/src/main/java/tech/ydb/jdbc/context/YdbContext.java

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package tech.ydb.jdbc.context;
22

3+
import java.nio.charset.StandardCharsets;
34
import java.sql.SQLDataException;
45
import java.sql.SQLException;
56
import java.time.Duration;
@@ -10,10 +11,13 @@
1011
import java.util.List;
1112
import java.util.Map;
1213
import java.util.concurrent.Executors;
14+
import java.util.concurrent.TimeUnit;
1315
import java.util.concurrent.atomic.AtomicInteger;
1416
import java.util.logging.Level;
1517
import java.util.logging.Logger;
1618

19+
import com.google.common.base.Supplier;
20+
import com.google.common.base.Suppliers;
1721
import com.google.common.cache.Cache;
1822
import com.google.common.cache.CacheBuilder;
1923

@@ -50,12 +54,15 @@
5054
import tech.ydb.table.description.TableDescription;
5155
import tech.ydb.table.impl.PooledTableClient;
5256
import tech.ydb.table.query.DataQuery;
57+
import tech.ydb.table.query.DataQueryResult;
5358
import tech.ydb.table.query.ExplainDataQueryResult;
59+
import tech.ydb.table.result.ResultSetReader;
5460
import tech.ydb.table.rpc.grpc.GrpcTableRpc;
5561
import tech.ydb.table.settings.DescribeTableSettings;
5662
import tech.ydb.table.settings.ExplainDataQuerySettings;
5763
import tech.ydb.table.settings.PrepareDataQuerySettings;
5864
import tech.ydb.table.settings.RequestSettings;
65+
import tech.ydb.table.transaction.TxControl;
5966
import tech.ydb.table.values.Type;
6067

6168
/**
@@ -87,6 +94,7 @@ public class YdbContext implements AutoCloseable {
8794
private final Cache<String, QueryStat> statsCache;
8895
private final Cache<String, Map<String, Type>> queryParamsCache;
8996
private final Cache<String, TableDescription> tableDescribeCache;
97+
private final Supplier<String> version = Suppliers.memoizeWithExpiration(this::readVersion, 1, TimeUnit.HOURS);
9098

9199
private final boolean autoResizeSessionPool;
92100
private final AtomicInteger connectionsCount = new AtomicInteger();
@@ -144,15 +152,14 @@ public YdbTypes getTypes() {
144152
return types;
145153
}
146154

147-
/**
148-
* Grpc Transport for other API YDB server clients
149-
*
150-
* @return grpcTransport for YDB
151-
*/
152155
public GrpcTransport getGrpcTransport() {
153156
return grpcTransport;
154157
}
155158

159+
public String getDatabaseVersion() {
160+
return version.get();
161+
}
162+
156163
public YdbTracer getTracer() {
157164
return config.isTxTracedEnabled() ? YdbTracer.current() : YdbTracerNone.DISABLED;
158165
}
@@ -338,6 +345,21 @@ public static YdbContext createContext(YdbConfig config) throws SQLException {
338345
}
339346
}
340347

348+
private String readVersion() {
349+
Result<DataQueryResult> res = retryCtx.supplyResult(
350+
s -> s.executeDataQuery("SELECT version();", TxControl.snapshotRo())
351+
).join();
352+
353+
if (res.isSuccess()) {
354+
ResultSetReader rs = res.getValue().getResultSet(0);
355+
if (rs.next()) {
356+
return rs.getColumn(0).getBytesAsString(StandardCharsets.UTF_8);
357+
}
358+
}
359+
return "unknown";
360+
}
361+
362+
341363
public <T extends RequestSettings<?>> T withDefaultTimeout(T settings) {
342364
Duration operation = operationOptions.getDeadlineTimeout();
343365
if (!operation.isZero() && !operation.isNegative()) {

jdbc/src/main/java/tech/ydb/jdbc/impl/YdbDatabaseMetaDataImpl.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,17 @@ public String getDatabaseProductName() {
114114

115115
@Override
116116
public String getDatabaseProductVersion() {
117-
return "unspecified"; // TODO: don't know how to get YDB version
117+
return connection.getCtx().getDatabaseVersion();
118+
}
119+
120+
@Override
121+
public int getDatabaseMajorVersion() {
122+
return 0; // unknown
123+
}
124+
125+
@Override
126+
public int getDatabaseMinorVersion() {
127+
return 0; // unknown
118128
}
119129

120130
@Override
@@ -1233,16 +1243,6 @@ public int getResultSetHoldability() throws SQLException {
12331243
return connection.getHoldability();
12341244
}
12351245

1236-
@Override
1237-
public int getDatabaseMajorVersion() {
1238-
return 0; // unknown
1239-
}
1240-
1241-
@Override
1242-
public int getDatabaseMinorVersion() {
1243-
return 0; // unknown
1244-
}
1245-
12461246
@Override
12471247
public int getJDBCMajorVersion() {
12481248
return YdbDriverInfo.JDBC_MAJOR_VERSION;

jdbc/src/test/java/tech/ydb/jdbc/impl/YdbDatabaseMetaDataImplTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public void metaDataValuesTest() throws SQLException {
126126
Assertions.assertFalse(metaData.nullsAreSortedAtStart());
127127
Assertions.assertFalse(metaData.nullsAreSortedAtEnd());
128128
Assertions.assertEquals("YDB", metaData.getDatabaseProductName());
129-
Assertions.assertEquals("unspecified", metaData.getDatabaseProductVersion());
129+
Assertions.assertFalse(metaData.getDatabaseProductVersion().isEmpty());
130130

131131
Assertions.assertEquals(YdbDriverInfo.DRIVER_NAME, metaData.getDriverName());
132132
Assertions.assertEquals(YdbDriverInfo.DRIVER_VERSION, metaData.getDriverVersion());

0 commit comments

Comments
 (0)