use of org.apache.drill.exec.proto.UserProtos.GetColumnsResp in project drill by apache.
the class TestMetadataProvider method columnsWithColumnNameFilter.
@Test
public void columnsWithColumnNameFilter() throws Exception {
// test("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%\\_p%' ESCAPE '\\'"); // SQL equivalent
GetColumnsResp resp = client.getColumns(null, null, null, LikeFilter.newBuilder().setPattern("%\\_p%").setEscape("\\").build()).get();
assertEquals(RequestStatus.OK, resp.getStatus());
List<ColumnMetadata> columns = resp.getColumnsList();
assertEquals(5, columns.size());
verifyColumn("sys", "drillbits", "user_port", columns);
verifyColumn("sys", "drillbits", "control_port", columns);
verifyColumn("sys", "drillbits", "data_port", columns);
verifyColumn("sys", "memory", "user_port", columns);
verifyColumn("sys", "threads", "user_port", columns);
}
use of org.apache.drill.exec.proto.UserProtos.GetColumnsResp in project drill by apache.
the class TestMetadataProvider method columns.
@Test
public void columns() throws Exception {
// test("SELECT * FROM INFORMATION_SCHEMA.COLUMNS"); // SQL equivalent
GetColumnsResp resp = client.getColumns(null, null, null, null).get();
assertEquals(RequestStatus.OK, resp.getStatus());
List<ColumnMetadata> columns = resp.getColumnsList();
assertEquals(71, columns.size());
// too many records to verify the output.
}
use of org.apache.drill.exec.proto.UserProtos.GetColumnsResp in project drill by apache.
the class TestMetadataProvider method columnsWithAllSupportedFilters.
@Test
public void columnsWithAllSupportedFilters() throws Exception {
// test("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE " +
// "TABLE_CATALOG LIKE '%ILL' AND TABLE_SCHEMA LIKE 'sys' AND " +
// "TABLE_NAME LIKE '%bits' AND COLUMN_NAME LIKE '%\\_p%' ESCAPE '\\'"); // SQL equivalent
GetColumnsResp resp = client.getColumns(LikeFilter.newBuilder().setPattern("%ILL").build(), LikeFilter.newBuilder().setPattern("sys").build(), LikeFilter.newBuilder().setPattern("%bits").build(), LikeFilter.newBuilder().setPattern("%\\_p%").setEscape("\\").build()).get();
assertEquals(RequestStatus.OK, resp.getStatus());
List<ColumnMetadata> columns = resp.getColumnsList();
assertEquals(3, columns.size());
verifyColumn("sys", "drillbits", "user_port", columns);
verifyColumn("sys", "drillbits", "control_port", columns);
verifyColumn("sys", "drillbits", "data_port", columns);
}
use of org.apache.drill.exec.proto.UserProtos.GetColumnsResp in project drill by apache.
the class TestMetadataProvider method columnsWithColumnNameFilterAndTableNameFilter.
@Test
public void columnsWithColumnNameFilterAndTableNameFilter() throws Exception {
// test("SELECT * FROM INFORMATION_SCHEMA.COLUMNS
// WHERE TABLE_NAME LIKE '%bits' AND COLUMN_NAME LIKE '%\\_p%' ESCAPE '\\'"); // SQL equivalent
GetColumnsResp resp = client.getColumns(null, null, LikeFilter.newBuilder().setPattern("%bits").build(), LikeFilter.newBuilder().setPattern("%\\_p%").setEscape("\\").build()).get();
assertEquals(RequestStatus.OK, resp.getStatus());
List<ColumnMetadata> columns = resp.getColumnsList();
assertEquals(3, columns.size());
verifyColumn("sys", "drillbits", "user_port", columns);
verifyColumn("sys", "drillbits", "control_port", columns);
verifyColumn("sys", "drillbits", "data_port", columns);
}
use of org.apache.drill.exec.proto.UserProtos.GetColumnsResp in project drill by apache.
the class DrillMetaImpl method serverGetColumns.
private MetaResultSet serverGetColumns(String catalog, Pat schemaPattern, Pat tableNamePattern, Pat columnNamePattern) {
final LikeFilter catalogNameFilter = newLikeFilter(quote(catalog));
final LikeFilter schemaNameFilter = newLikeFilter(schemaPattern);
final LikeFilter tableNameFilter = newLikeFilter(tableNamePattern);
final LikeFilter columnNameFilter = newLikeFilter(columnNamePattern);
return new MetadataAdapter<MetaColumn, GetColumnsResp, ColumnMetadata>(MetaColumn.class) {
@Override
protected RequestStatus getStatus(GetColumnsResp response) {
return response.getStatus();
}
@Override
protected DrillPBError getError(GetColumnsResp response) {
return response.getError();
}
@Override
protected List<ColumnMetadata> getResult(GetColumnsResp response) {
return response.getColumnsList();
}
;
private int getDataType(ColumnMetadata value) {
switch(value.getDataType()) {
case "ARRAY":
return Types.ARRAY;
case "BIGINT":
return Types.BIGINT;
case "BINARY":
return Types.BINARY;
case "BINARY LARGE OBJECT":
return Types.BLOB;
case "BINARY VARYING":
return Types.VARBINARY;
case "BIT":
return Types.BIT;
case "BOOLEAN":
return Types.BOOLEAN;
case "CHARACTER":
return Types.CHAR;
// Resolve: Not seen in Drill yet. Can it appear?:
case "CHARACTER LARGE OBJECT":
return Types.CLOB;
case "CHARACTER VARYING":
return Types.VARCHAR;
// Resolve: Not seen in Drill yet. Can it appear?:
case "DATALINK":
return Types.DATALINK;
case "DATE":
return Types.DATE;
case "DECIMAL":
return Types.DECIMAL;
// Resolve: Not seen in Drill yet. Can it appear?:
case "DISTINCT":
return Types.DISTINCT;
case "DOUBLE":
case "DOUBLE PRECISION":
return Types.DOUBLE;
case "FLOAT":
return Types.FLOAT;
case "INTEGER":
return Types.INTEGER;
case "INTERVAL":
return Types.OTHER;
// Resolve: Not seen in Drill yet. Can it ever appear?:
case "JAVA_OBJECT":
return Types.JAVA_OBJECT;
// Resolve: Not seen in Drill yet. Can it appear?:
case "LONGNVARCHAR":
return Types.LONGNVARCHAR;
// Resolve: Not seen in Drill yet. Can it appear?:
case "LONGVARBINARY":
return Types.LONGVARBINARY;
// Resolve: Not seen in Drill yet. Can it appear?:
case "LONGVARCHAR":
return Types.LONGVARCHAR;
case "MAP":
return Types.OTHER;
// Resolve: Not seen in Drill yet. Can it appear?:
case "NATIONAL CHARACTER":
return Types.NCHAR;
// Resolve: Not seen in Drill yet. Can it appear?:
case "NATIONAL CHARACTER LARGE OBJECT":
return Types.NCLOB;
// Resolve: Not seen in Drill yet. Can it appear?:
case "NATIONAL CHARACTER VARYING":
return Types.NVARCHAR;
// mapping.
case "NULL":
return Types.NULL;
// (No NUMERIC--Drill seems to map any to DECIMAL currently.)
case "NUMERIC":
return Types.NUMERIC;
// Resolve: Unexpectedly, has appeared in Drill. Should it?
case "OTHER":
return Types.OTHER;
case "REAL":
return Types.REAL;
// Resolve: Not seen in Drill yet. Can it appear?:
case "REF":
return Types.REF;
// Resolve: Not seen in Drill yet. Can it appear?:
case "ROWID":
return Types.ROWID;
case "SMALLINT":
return Types.SMALLINT;
// Resolve: Not seen in Drill yet. Can it appear?:
case "SQLXML":
return Types.SQLXML;
case "STRUCT":
return Types.STRUCT;
case "TIME":
return Types.TIME;
case "TIMESTAMP":
return Types.TIMESTAMP;
case "TINYINT":
return Types.TINYINT;
default:
return Types.OTHER;
}
}
Integer getDecimalDigits(ColumnMetadata value) {
switch(value.getDataType()) {
case "TINYINT":
case "SMALLINT":
case "INTEGER":
case "BIGINT":
case "DECIMAL":
case "NUMERIC":
return value.hasNumericScale() ? value.getNumericScale() : null;
case "REAL":
return DECIMAL_DIGITS_REAL;
case "FLOAT":
return DECIMAL_DIGITS_FLOAT;
case "DOUBLE":
return DECIMAL_DIGITS_DOUBLE;
case "DATE":
case "TIME":
case "TIMESTAMP":
case "INTERVAL":
return value.getDateTimePrecision();
default:
return null;
}
}
private Integer getNumPrecRadix(ColumnMetadata value) {
switch(value.getDataType()) {
case "TINYINT":
case "SMALLINT":
case "INTEGER":
case "BIGINT":
case "DECIMAL":
case "NUMERIC":
case "REAL":
case "FLOAT":
case "DOUBLE":
return value.getNumericPrecisionRadix();
case "INTERVAL":
return RADIX_INTERVAL;
case "DATE":
case "TIME":
case "TIMESTAMP":
return RADIX_DATETIME;
default:
return null;
}
}
private int getNullable(ColumnMetadata value) {
if (!value.hasIsNullable()) {
return DatabaseMetaData.columnNullableUnknown;
}
return value.getIsNullable() ? DatabaseMetaData.columnNullable : DatabaseMetaData.columnNoNulls;
}
private String getIsNullable(ColumnMetadata value) {
if (!value.hasIsNullable()) {
return "";
}
return value.getIsNullable() ? "YES" : "NO";
}
private Integer getCharOctetLength(ColumnMetadata value) {
if (!value.hasCharMaxLength()) {
return null;
}
switch(value.getDataType()) {
case "CHARACTER":
case "CHARACTER LARGE OBJECT":
case "CHARACTER VARYING":
case "LONGVARCHAR":
case "LONGNVARCHAR":
case "NATIONAL CHARACTER":
case "NATIONAL CHARACTER LARGE OBJECT":
case "NATIONAL CHARACTER VARYING":
return value.getCharOctetLength();
default:
return null;
}
}
@Override
protected MetaColumn adapt(ColumnMetadata value) {
return new MetaColumn(value.getCatalogName(), value.getSchemaName(), value.getTableName(), value.getColumnName(), // It might require the full SQL type
getDataType(value), value.getDataType(), value.getColumnSize(), getDecimalDigits(value), getNumPrecRadix(value), getNullable(value), getCharOctetLength(value), value.getOrdinalPosition(), getIsNullable(value));
}
}.getMeta(connection.getClient().getColumns(catalogNameFilter, schemaNameFilter, tableNameFilter, columnNameFilter));
}
Aggregations