Skip to content

Commit

Permalink
Column Info
Browse files Browse the repository at this point in the history
  • Loading branch information
enqueue committed Aug 20, 2019
1 parent 2e9fd50 commit 3be7a3c
Show file tree
Hide file tree
Showing 36 changed files with 2,323 additions and 946 deletions.
21 changes: 8 additions & 13 deletions src/main/java/ru/yandex/clickhouse/ClickHouseArray.java
Original file line number Diff line number Diff line change
@@ -1,45 +1,40 @@
package ru.yandex.clickhouse;

import ru.yandex.clickhouse.util.TypeUtils;

import java.sql.Array;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.Map;

import ru.yandex.clickhouse.domain.ClickHouseDataType;

/**
* @author Dmitry Andreev <a href="mailto:AndreevDm@yandex-team.ru"></a>
*/
public class ClickHouseArray implements Array {
private int elementType;
private boolean isUnsigned;
private Object array;

public ClickHouseArray(int elementType, Object array){
this(elementType, false, array);
}
private ClickHouseDataType elementType;
private Object array;

public ClickHouseArray(int elementType, boolean isUnsigned, Object array) {
public ClickHouseArray(ClickHouseDataType elementType, Object array) {
if (array == null) {
throw new IllegalArgumentException("array cannon be null");
throw new IllegalArgumentException("array cannot be null");
}
if (!array.getClass().isArray()) {
throw new IllegalArgumentException("not array");
}
this.elementType = elementType;
this.array = array;
this.isUnsigned = isUnsigned;
}

@Override
public String getBaseTypeName() throws SQLException {
return TypeUtils.toClass(elementType, isUnsigned).getName();
return elementType.name();
}

@Override
public int getBaseType() throws SQLException {
return elementType;
return elementType.getSqlType();
}

@Override
Expand Down
43 changes: 26 additions & 17 deletions src/main/java/ru/yandex/clickhouse/ClickHouseConnectionImpl.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,5 @@
package ru.yandex.clickhouse;

import com.google.common.base.Strings;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.client.CloseableHttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.yandex.clickhouse.except.ClickHouseUnknownException;
import ru.yandex.clickhouse.settings.ClickHouseConnectionSettings;
import ru.yandex.clickhouse.settings.ClickHouseProperties;
import ru.yandex.clickhouse.util.ClickHouseHttpClientBuilder;
import ru.yandex.clickhouse.util.LogProxy;
import ru.yandex.clickhouse.util.TypeUtils;
import ru.yandex.clickhouse.util.guava.StreamUtils;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
Expand All @@ -39,11 +26,26 @@
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;

import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.client.CloseableHttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Strings;

import ru.yandex.clickhouse.domain.ClickHouseDataType;
import ru.yandex.clickhouse.except.ClickHouseUnknownException;
import ru.yandex.clickhouse.settings.ClickHouseConnectionSettings;
import ru.yandex.clickhouse.settings.ClickHouseProperties;
import ru.yandex.clickhouse.util.ClickHouseHttpClientBuilder;
import ru.yandex.clickhouse.util.LogProxy;
import ru.yandex.clickhouse.util.guava.StreamUtils;


public class ClickHouseConnectionImpl implements ClickHouseConnection {

private static final int DEFAULT_RESULTSET_TYPE = ResultSet.TYPE_FORWARD_ONLY;

private static final Logger log = LoggerFactory.getLogger(ClickHouseConnectionImpl.class);

private final CloseableHttpClient httpclient;
Expand Down Expand Up @@ -107,7 +109,7 @@ private void initTimeZone(ClickHouseProperties properties) {
public ClickHouseStatement createStatement() throws SQLException {
return createStatement(DEFAULT_RESULTSET_TYPE);
}

public ClickHouseStatement createStatement(int resultSetType) throws SQLException {
return LogProxy.wrap(ClickHouseStatement.class, new ClickHouseStatementImpl(httpclient, this, properties, resultSetType));
}
Expand Down Expand Up @@ -435,7 +437,9 @@ public Properties getClientInfo() throws SQLException {

@Override
public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
return new ClickHouseArray(TypeUtils.toSqlType(typeName), TypeUtils.isUnsigned(typeName), elements);
return new ClickHouseArray(
ClickHouseDataType.resolveDefaultArrayDataType(typeName),
elements);
}

@Override
Expand All @@ -456,22 +460,27 @@ public boolean isWrapperFor(Class<?> iface) throws SQLException {
return iface.isAssignableFrom(getClass());
}

@Override
public void setSchema(String schema) throws SQLException {
properties.setDatabase(schema);
}

@Override
public String getSchema() throws SQLException {
return properties.getDatabase();
}

@Override
public void abort(Executor executor) throws SQLException {
this.close();
}

@Override
public void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException {

}

@Override
public int getNetworkTimeout() throws SQLException {
return 0;
}
Expand Down
40 changes: 18 additions & 22 deletions src/main/java/ru/yandex/clickhouse/ClickHouseDatabaseMetadata.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ru.yandex.clickhouse.response.ClickHouseColumnInfo;
import ru.yandex.clickhouse.response.ClickHouseResultBuilder;
import ru.yandex.clickhouse.util.ClickHouseVersionNumberUtil;
import ru.yandex.clickhouse.util.TypeUtils;

import static ru.yandex.clickhouse.util.TypeUtils.NULLABLE_YES;


public class ClickHouseDatabaseMetadata implements DatabaseMetaData {
Expand Down Expand Up @@ -835,26 +833,26 @@ public ResultSet getColumns(String catalog, String schemaPattern, String tableNa
//table name
row.add(descTable.getString(2));
//column name
row.add(descTable.getString(3));
String type = descTable.getString(4);

String isNullableType = TypeUtils.isTypeNull(type);

int sqlType = TypeUtils.toSqlType(type);
ClickHouseColumnInfo columnInfo = ClickHouseColumnInfo.parse(
descTable.getString(4),
descTable.getString(3));
row.add(columnInfo.getColumnName());
//data type
row.add(Integer.toString(sqlType));
row.add(String.valueOf(columnInfo.getClickHouseDataType().getSqlType()));
//type name
row.add(TypeUtils.unwrapNullableIfApplicable(type));
row.add(columnInfo.getCleanTypeName());
// column size / precision
row.add(Integer.toString(TypeUtils.getColumnSize(type)));
row.add(String.valueOf(columnInfo.getPrecision()));
//buffer length
row.add("0");
// decimal digits
row.add(Integer.toString(TypeUtils.getDecimalDigits(type)));
row.add(String.valueOf(columnInfo.getScale()));
// radix
row.add("10");
// nullable
row.add(String.valueOf(isNullableType == NULLABLE_YES ? columnNullable : columnNoNulls));
row.add(columnInfo.isNullable()
? String.valueOf(columnNullable)
: String.valueOf(columnNoNulls));
//remarks
row.add(null);

Expand All @@ -877,7 +875,9 @@ public ResultSet getColumns(String catalog, String schemaPattern, String tableNa
colNum += 1;

//IS_NULLABLE
row.add(isNullableType);
row.add(columnInfo.isNullable()
? "YES"
: "NO");
//"SCOPE_CATALOG",
row.add(null);
//"SCOPE_SCHEMA",
Expand Down Expand Up @@ -1127,13 +1127,7 @@ public ResultSet getIndexInfo(String catalog, String schema, String table, boole

@Override
public boolean supportsResultSetType(int type) throws SQLException {
int[] types = TypeUtils.supportedTypes();
for (int i : types) {
if (i == type) {
return true;
}
}
return false;
return ResultSet.TYPE_FORWARD_ONLY == type;
}

@Override
Expand Down Expand Up @@ -1326,10 +1320,12 @@ public boolean isWrapperFor(Class<?> iface) throws SQLException {
return iface.isAssignableFrom(getClass());
}

@Override
public ResultSet getPseudoColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException {
return null;
}

@Override
public boolean generatedKeyAlwaysReturned() throws SQLException {
return false;
}
Expand Down
Loading

0 comments on commit 3be7a3c

Please sign in to comment.