Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 27 additions & 5 deletions jdbc/src/main/java/tech/ydb/jdbc/context/YdbContext.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package tech.ydb.jdbc.context;

import java.nio.charset.StandardCharsets;
import java.sql.SQLDataException;
import java.sql.SQLException;
import java.time.Duration;
Expand All @@ -10,10 +11,13 @@
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;

Expand Down Expand Up @@ -50,12 +54,15 @@
import tech.ydb.table.description.TableDescription;
import tech.ydb.table.impl.PooledTableClient;
import tech.ydb.table.query.DataQuery;
import tech.ydb.table.query.DataQueryResult;
import tech.ydb.table.query.ExplainDataQueryResult;
import tech.ydb.table.result.ResultSetReader;
import tech.ydb.table.rpc.grpc.GrpcTableRpc;
import tech.ydb.table.settings.DescribeTableSettings;
import tech.ydb.table.settings.ExplainDataQuerySettings;
import tech.ydb.table.settings.PrepareDataQuerySettings;
import tech.ydb.table.settings.RequestSettings;
import tech.ydb.table.transaction.TxControl;
import tech.ydb.table.values.Type;

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

private final boolean autoResizeSessionPool;
private final AtomicInteger connectionsCount = new AtomicInteger();
Expand Down Expand Up @@ -144,15 +152,14 @@ public YdbTypes getTypes() {
return types;
}

/**
* Grpc Transport for other API YDB server clients
*
* @return grpcTransport for YDB
*/
public GrpcTransport getGrpcTransport() {
return grpcTransport;
}

public String getDatabaseVersion() {
return version.get();
}

public YdbTracer getTracer() {
return config.isTxTracedEnabled() ? YdbTracer.current() : YdbTracerNone.DISABLED;
}
Expand Down Expand Up @@ -338,6 +345,21 @@ public static YdbContext createContext(YdbConfig config) throws SQLException {
}
}

private String readVersion() {
Result<DataQueryResult> res = retryCtx.supplyResult(
s -> s.executeDataQuery("SELECT version();", TxControl.snapshotRo())
).join();

if (res.isSuccess()) {
ResultSetReader rs = res.getValue().getResultSet(0);
if (rs.next()) {
return rs.getColumn(0).getBytesAsString(StandardCharsets.UTF_8);
}
}
return "unknown";
}


public <T extends RequestSettings<?>> T withDefaultTimeout(T settings) {
Duration operation = operationOptions.getDeadlineTimeout();
if (!operation.isZero() && !operation.isNegative()) {
Expand Down
22 changes: 11 additions & 11 deletions jdbc/src/main/java/tech/ydb/jdbc/impl/YdbDatabaseMetaDataImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,17 @@ public String getDatabaseProductName() {

@Override
public String getDatabaseProductVersion() {
return "unspecified"; // TODO: don't know how to get YDB version
return connection.getCtx().getDatabaseVersion();
}

@Override
public int getDatabaseMajorVersion() {
return 0; // unknown
}

@Override
public int getDatabaseMinorVersion() {
return 0; // unknown
}

@Override
Expand Down Expand Up @@ -1233,16 +1243,6 @@ public int getResultSetHoldability() throws SQLException {
return connection.getHoldability();
}

@Override
public int getDatabaseMajorVersion() {
return 0; // unknown
}

@Override
public int getDatabaseMinorVersion() {
return 0; // unknown
}

@Override
public int getJDBCMajorVersion() {
return YdbDriverInfo.JDBC_MAJOR_VERSION;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public void metaDataValuesTest() throws SQLException {
Assertions.assertFalse(metaData.nullsAreSortedAtStart());
Assertions.assertFalse(metaData.nullsAreSortedAtEnd());
Assertions.assertEquals("YDB", metaData.getDatabaseProductName());
Assertions.assertEquals("unspecified", metaData.getDatabaseProductVersion());
Assertions.assertFalse(metaData.getDatabaseProductVersion().isEmpty());

Assertions.assertEquals(YdbDriverInfo.DRIVER_NAME, metaData.getDriverName());
Assertions.assertEquals(YdbDriverInfo.DRIVER_VERSION, metaData.getDriverVersion());
Expand Down