Add size for column tests (elastic/x-pack-elasticsearch#2685)
Add displaySize to columnInfo Original commit: elastic/x-pack-elasticsearch@ed1d265e98
This commit is contained in:
parent
c9a41e111e
commit
2026198dd4
|
@ -35,8 +35,8 @@ public class SqlActionIT extends AbstractSqlIntegTestCase {
|
||||||
assertThat(response.columns(), hasSize(2));
|
assertThat(response.columns(), hasSize(2));
|
||||||
int dataIndex = dataBeforeCount ? 0 : 1;
|
int dataIndex = dataBeforeCount ? 0 : 1;
|
||||||
int countIndex = dataBeforeCount ? 1 : 0;
|
int countIndex = dataBeforeCount ? 1 : 0;
|
||||||
assertEquals(new ColumnInfo("data", "text", JDBCType.VARCHAR), response.columns().get(dataIndex));
|
assertEquals(new ColumnInfo("data", "text", JDBCType.VARCHAR, 0), response.columns().get(dataIndex));
|
||||||
assertEquals(new ColumnInfo("count", "long", JDBCType.BIGINT), response.columns().get(countIndex));
|
assertEquals(new ColumnInfo("count", "long", JDBCType.BIGINT, 20), response.columns().get(countIndex));
|
||||||
|
|
||||||
assertThat(response.rows(), hasSize(2));
|
assertThat(response.rows(), hasSize(2));
|
||||||
assertEquals("bar", response.rows().get(0).get(dataIndex));
|
assertEquals("bar", response.rows().get(0).get(dataIndex));
|
||||||
|
|
|
@ -13,9 +13,10 @@ import java.util.Objects;
|
||||||
|
|
||||||
public class ColumnInfo {
|
public class ColumnInfo {
|
||||||
public String catalog, schema, table, label, name;
|
public String catalog, schema, table, label, name;
|
||||||
|
public int displaySize;
|
||||||
public JDBCType type;
|
public JDBCType type;
|
||||||
|
|
||||||
public ColumnInfo(String name, JDBCType type, String table, String catalog, String schema, String label) {
|
public ColumnInfo(String name, JDBCType type, String table, String catalog, String schema, String label, int displaySize) {
|
||||||
if (name == null) {
|
if (name == null) {
|
||||||
throw new IllegalArgumentException("[name] must not be null");
|
throw new IllegalArgumentException("[name] must not be null");
|
||||||
}
|
}
|
||||||
|
@ -40,6 +41,7 @@ public class ColumnInfo {
|
||||||
this.catalog = catalog;
|
this.catalog = catalog;
|
||||||
this.schema = schema;
|
this.schema = schema;
|
||||||
this.label = label;
|
this.label = label;
|
||||||
|
this.displaySize = displaySize;
|
||||||
}
|
}
|
||||||
|
|
||||||
ColumnInfo(DataInput in) throws IOException {
|
ColumnInfo(DataInput in) throws IOException {
|
||||||
|
@ -49,6 +51,7 @@ public class ColumnInfo {
|
||||||
catalog = in.readUTF();
|
catalog = in.readUTF();
|
||||||
schema = in.readUTF();
|
schema = in.readUTF();
|
||||||
label = in.readUTF();
|
label = in.readUTF();
|
||||||
|
displaySize = in.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
void writeTo(DataOutput out) throws IOException {
|
void writeTo(DataOutput out) throws IOException {
|
||||||
|
@ -58,11 +61,12 @@ public class ColumnInfo {
|
||||||
out.writeUTF(catalog);
|
out.writeUTF(catalog);
|
||||||
out.writeUTF(schema);
|
out.writeUTF(schema);
|
||||||
out.writeUTF(label);
|
out.writeUTF(label);
|
||||||
|
out.writeInt(displaySize);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int displaySize() {
|
public int displaySize() {
|
||||||
// NOCOMMIT look at this one.....
|
// 0 - means unknown
|
||||||
return -1;
|
return displaySize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -95,11 +99,12 @@ public class ColumnInfo {
|
||||||
&& table.equals(other.table)
|
&& table.equals(other.table)
|
||||||
&& catalog.equals(other.catalog)
|
&& catalog.equals(other.catalog)
|
||||||
&& schema.equals(other.schema)
|
&& schema.equals(other.schema)
|
||||||
&& label.equals(other.label);
|
&& label.equals(other.label)
|
||||||
|
&& displaySize == other.displaySize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(name, type, table, catalog, schema, label);
|
return Objects.hash(name, type, table, catalog, schema, label, displaySize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,15 +14,15 @@ import static org.elasticsearch.xpack.sql.test.RoundTripTestUtils.assertRoundTri
|
||||||
|
|
||||||
public class ColumnInfoTests extends ESTestCase {
|
public class ColumnInfoTests extends ESTestCase {
|
||||||
static ColumnInfo varcharInfo(String name) {
|
static ColumnInfo varcharInfo(String name) {
|
||||||
return new ColumnInfo(name, JDBCType.VARCHAR, "", "", "", "");
|
return new ColumnInfo(name, JDBCType.VARCHAR, "", "", "", "", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ColumnInfo intInfo(String name) {
|
static ColumnInfo intInfo(String name) {
|
||||||
return new ColumnInfo(name, JDBCType.INTEGER, "", "", "", "");
|
return new ColumnInfo(name, JDBCType.INTEGER, "", "", "", "", 11);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ColumnInfo doubleInfo(String name) {
|
static ColumnInfo doubleInfo(String name) {
|
||||||
return new ColumnInfo(name, JDBCType.DOUBLE, "", "", "", "");
|
return new ColumnInfo(name, JDBCType.DOUBLE, "", "", "", "", 25);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Object randomValueFor(ColumnInfo info) {
|
static Object randomValueFor(ColumnInfo info) {
|
||||||
|
@ -37,7 +37,7 @@ public class ColumnInfoTests extends ESTestCase {
|
||||||
|
|
||||||
static ColumnInfo randomColumnInfo() {
|
static ColumnInfo randomColumnInfo() {
|
||||||
return new ColumnInfo(randomAlphaOfLength(5), randomFrom(JDBCType.values()), randomAlphaOfLength(5), randomAlphaOfLength(5),
|
return new ColumnInfo(randomAlphaOfLength(5), randomFrom(JDBCType.values()), randomAlphaOfLength(5), randomAlphaOfLength(5),
|
||||||
randomAlphaOfLength(5), randomAlphaOfLength(5));
|
randomAlphaOfLength(5), randomAlphaOfLength(5), randomInt(25));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testRoundTrip() throws IOException {
|
public void testRoundTrip() throws IOException {
|
||||||
|
@ -46,9 +46,9 @@ public class ColumnInfoTests extends ESTestCase {
|
||||||
|
|
||||||
public void testToString() {
|
public void testToString() {
|
||||||
assertEquals("test.doc.a<type=[VARCHAR] catalog=[as] schema=[ads] label=[lab]>",
|
assertEquals("test.doc.a<type=[VARCHAR] catalog=[as] schema=[ads] label=[lab]>",
|
||||||
new ColumnInfo("a", JDBCType.VARCHAR, "test.doc", "as", "ads", "lab").toString());
|
new ColumnInfo("a", JDBCType.VARCHAR, "test.doc", "as", "ads", "lab", 0).toString());
|
||||||
assertEquals("test.doc.a<type=[VARCHAR]>",
|
assertEquals("test.doc.a<type=[VARCHAR]>",
|
||||||
new ColumnInfo("a", JDBCType.VARCHAR, "test.doc", "", "", "").toString());
|
new ColumnInfo("a", JDBCType.VARCHAR, "test.doc", "", "", "", 0).toString());
|
||||||
assertEquals("string<type=[VARCHAR]>", varcharInfo("string").toString());
|
assertEquals("string<type=[VARCHAR]>", varcharInfo("string").toString());
|
||||||
assertEquals("int<type=[INTEGER]>", intInfo("int").toString());
|
assertEquals("int<type=[INTEGER]>", intInfo("int").toString());
|
||||||
assertEquals("d<type=[DOUBLE]>", doubleInfo("d").toString());
|
assertEquals("d<type=[DOUBLE]>", doubleInfo("d").toString());
|
||||||
|
|
|
@ -760,14 +760,14 @@ class JdbcDatabaseMetaData implements DatabaseMetaData, JdbcWrapper {
|
||||||
public ResultSet getCatalogs() throws SQLException {
|
public ResultSet getCatalogs() throws SQLException {
|
||||||
Object[][] data = { { defaultCatalog() } };
|
Object[][] data = { { defaultCatalog() } };
|
||||||
return memorySet(con.cfg, columnInfo("CATALOGS",
|
return memorySet(con.cfg, columnInfo("CATALOGS",
|
||||||
"TABLE_CAT"), data);
|
"TABLE_CAT"), data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSet getTableTypes() throws SQLException {
|
public ResultSet getTableTypes() throws SQLException {
|
||||||
Object[][] data = { { "TABLE" } };
|
Object[][] data = { { "TABLE" } };
|
||||||
return memorySet(con.cfg, columnInfo("TABLE_TYPES",
|
return memorySet(con.cfg, columnInfo("TABLE_TYPES",
|
||||||
"TABLE_TYPE"), data);
|
"TABLE_TYPE"), data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1200,7 +1200,7 @@ class JdbcDatabaseMetaData implements DatabaseMetaData, JdbcWrapper {
|
||||||
}
|
}
|
||||||
// it's not, use the default and move on
|
// it's not, use the default and move on
|
||||||
}
|
}
|
||||||
columns.add(new ColumnInfo(name, type, tableName, "INFORMATION_SCHEMA", EMPTY, EMPTY));
|
columns.add(new ColumnInfo(name, type, tableName, "INFORMATION_SCHEMA", EMPTY, EMPTY, 0));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw new JdbcException("Invalid metadata schema definition");
|
throw new JdbcException("Invalid metadata schema definition");
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class WeekOfWeekYear extends DateTimeFunction {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ChronoField chronoField() {
|
protected ChronoField chronoField() {
|
||||||
return ChronoField.ALIGNED_WEEK_OF_YEAR; // NOCOMMIT is this right?
|
return ChronoField.ALIGNED_WEEK_OF_YEAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -56,6 +56,7 @@ import java.util.regex.Pattern;
|
||||||
import static java.util.stream.Collectors.toList;
|
import static java.util.stream.Collectors.toList;
|
||||||
import static org.elasticsearch.common.Strings.hasText;
|
import static org.elasticsearch.common.Strings.hasText;
|
||||||
import static org.elasticsearch.rest.RestRequest.Method.POST;
|
import static org.elasticsearch.rest.RestRequest.Method.POST;
|
||||||
|
import static org.elasticsearch.xpack.sql.util.StringUtils.EMPTY;
|
||||||
|
|
||||||
public class RestSqlJdbcAction extends AbstractSqlProtocolRestAction {
|
public class RestSqlJdbcAction extends AbstractSqlProtocolRestAction {
|
||||||
private final SqlLicenseChecker sqlLicenseChecker;
|
private final SqlLicenseChecker sqlLicenseChecker;
|
||||||
|
@ -158,7 +159,7 @@ public class RestSqlJdbcAction extends AbstractSqlProtocolRestAction {
|
||||||
List<ColumnInfo> columns = new ArrayList<>(response.columns().size());
|
List<ColumnInfo> columns = new ArrayList<>(response.columns().size());
|
||||||
for (SqlResponse.ColumnInfo info : response.columns()) {
|
for (SqlResponse.ColumnInfo info : response.columns()) {
|
||||||
types.add(info.jdbcType());
|
types.add(info.jdbcType());
|
||||||
columns.add(new ColumnInfo(info.name(), info.jdbcType(), "", "", "", ""));
|
columns.add(new ColumnInfo(info.name(), info.jdbcType(), EMPTY, EMPTY, EMPTY, EMPTY, info.displaySize()));
|
||||||
}
|
}
|
||||||
return new QueryInitResponse(System.nanoTime() - start, serializeCursor(response.cursor(), types), columns,
|
return new QueryInitResponse(System.nanoTime() - start, serializeCursor(response.cursor(), types), columns,
|
||||||
new SqlResponsePayload(types, response.rows()));
|
new SqlResponsePayload(types, response.rows()));
|
||||||
|
@ -174,7 +175,7 @@ public class RestSqlJdbcAction extends AbstractSqlProtocolRestAction {
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new IllegalArgumentException("error reading the cursor");
|
throw new IllegalArgumentException("error reading the cursor");
|
||||||
}
|
}
|
||||||
SqlRequest sqlRequest = new SqlRequest("", SqlRequest.DEFAULT_TIME_ZONE, 0, cursor);
|
SqlRequest sqlRequest = new SqlRequest(EMPTY, SqlRequest.DEFAULT_TIME_ZONE, 0, cursor);
|
||||||
long start = System.nanoTime();
|
long start = System.nanoTime();
|
||||||
return channel -> client.execute(SqlAction.INSTANCE, sqlRequest, toActionListener(request, channel, response -> {
|
return channel -> client.execute(SqlAction.INSTANCE, sqlRequest, toActionListener(request, channel, response -> {
|
||||||
return new QueryPageResponse(System.nanoTime() - start, serializeCursor(response.cursor(), types),
|
return new QueryPageResponse(System.nanoTime() - start, serializeCursor(response.cursor(), types),
|
||||||
|
@ -197,4 +198,4 @@ public class RestSqlJdbcAction extends AbstractSqlProtocolRestAction {
|
||||||
throw new RuntimeException("unexpected trouble building the cursor", e);
|
throw new RuntimeException("unexpected trouble building the cursor", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -170,17 +170,20 @@ public class SqlResponse extends ActionResponse implements ToXContentObject {
|
||||||
private final String name;
|
private final String name;
|
||||||
private final String esType;
|
private final String esType;
|
||||||
private final JDBCType jdbcType;
|
private final JDBCType jdbcType;
|
||||||
|
private final int displaySize;
|
||||||
|
|
||||||
public ColumnInfo(String name, String esType, JDBCType jdbcType) {
|
public ColumnInfo(String name, String esType, JDBCType jdbcType, int displaySize) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.esType = esType;
|
this.esType = esType;
|
||||||
this.jdbcType = jdbcType;
|
this.jdbcType = jdbcType;
|
||||||
|
this.displaySize = displaySize;
|
||||||
}
|
}
|
||||||
|
|
||||||
ColumnInfo(StreamInput in) throws IOException {
|
ColumnInfo(StreamInput in) throws IOException {
|
||||||
name = in.readString();
|
name = in.readString();
|
||||||
esType = in.readString();
|
esType = in.readString();
|
||||||
jdbcType = JDBCType.valueOf(in.readVInt());
|
jdbcType = JDBCType.valueOf(in.readVInt());
|
||||||
|
displaySize = in.readVInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -188,6 +191,7 @@ public class SqlResponse extends ActionResponse implements ToXContentObject {
|
||||||
out.writeString(name);
|
out.writeString(name);
|
||||||
out.writeString(esType);
|
out.writeString(esType);
|
||||||
out.writeVInt(jdbcType.getVendorTypeNumber());
|
out.writeVInt(jdbcType.getVendorTypeNumber());
|
||||||
|
out.writeVInt(displaySize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -220,6 +224,13 @@ public class SqlResponse extends ActionResponse implements ToXContentObject {
|
||||||
return jdbcType;
|
return jdbcType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used by JDBC
|
||||||
|
*/
|
||||||
|
public int displaySize() {
|
||||||
|
return displaySize;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object obj) {
|
public boolean equals(Object obj) {
|
||||||
if (obj == null || obj.getClass() != getClass()) {
|
if (obj == null || obj.getClass() != getClass()) {
|
||||||
|
@ -228,12 +239,13 @@ public class SqlResponse extends ActionResponse implements ToXContentObject {
|
||||||
ColumnInfo other = (ColumnInfo) obj;
|
ColumnInfo other = (ColumnInfo) obj;
|
||||||
return name.equals(other.name)
|
return name.equals(other.name)
|
||||||
&& esType.equals(other.esType)
|
&& esType.equals(other.esType)
|
||||||
&& jdbcType.equals(other.jdbcType);
|
&& jdbcType.equals(other.jdbcType)
|
||||||
|
&& displaySize == other.displaySize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(name, esType, jdbcType);
|
return Objects.hash(name, esType, jdbcType, displaySize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -69,7 +69,7 @@ public class TransportSqlAction extends HandledTransportAction<SqlRequest, SqlRe
|
||||||
if (includeColumnMetadata) {
|
if (includeColumnMetadata) {
|
||||||
columns = new ArrayList<>(cursor.schema().types().size());
|
columns = new ArrayList<>(cursor.schema().types().size());
|
||||||
for (Schema.Entry entry : cursor.schema()) {
|
for (Schema.Entry entry : cursor.schema()) {
|
||||||
columns.add(new ColumnInfo(entry.name(), entry.type().esName(), entry.type().sqlType()));
|
columns.add(new ColumnInfo(entry.name(), entry.type().esName(), entry.type().sqlType(), entry.type().displaySize()));
|
||||||
}
|
}
|
||||||
columns = unmodifiableList(columns);
|
columns = unmodifiableList(columns);
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,10 +69,10 @@ abstract class JdbcUtils {
|
||||||
case FLOAT:
|
case FLOAT:
|
||||||
case DOUBLE: return 25;
|
case DOUBLE: return 25;
|
||||||
case VARCHAR:
|
case VARCHAR:
|
||||||
case VARBINARY: return -1;
|
case VARBINARY: return 0;
|
||||||
case TIMESTAMP: return 20;
|
case TIMESTAMP: return 20;
|
||||||
default:
|
default:
|
||||||
return -1;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,11 +18,11 @@ import static org.hamcrest.Matchers.arrayWithSize;
|
||||||
public class CliFormatterTests extends ESTestCase {
|
public class CliFormatterTests extends ESTestCase {
|
||||||
private final SqlResponse firstResponse = new SqlResponse(Cursor.EMPTY, 10, 5,
|
private final SqlResponse firstResponse = new SqlResponse(Cursor.EMPTY, 10, 5,
|
||||||
Arrays.asList(
|
Arrays.asList(
|
||||||
new ColumnInfo("foo", "string", JDBCType.VARCHAR),
|
new ColumnInfo("foo", "string", JDBCType.VARCHAR, 0),
|
||||||
new ColumnInfo("bar", "long", JDBCType.BIGINT),
|
new ColumnInfo("bar", "long", JDBCType.BIGINT, 15),
|
||||||
new ColumnInfo("15charwidename!", "double", JDBCType.DOUBLE),
|
new ColumnInfo("15charwidename!", "double", JDBCType.DOUBLE, 25),
|
||||||
new ColumnInfo("superduperwidename!!!", "double", JDBCType.DOUBLE),
|
new ColumnInfo("superduperwidename!!!", "double", JDBCType.DOUBLE, 25),
|
||||||
new ColumnInfo("baz", "keyword", JDBCType.VARCHAR)),
|
new ColumnInfo("baz", "keyword", JDBCType.VARCHAR, 0)),
|
||||||
Arrays.asList(
|
Arrays.asList(
|
||||||
Arrays.asList("15charwidedata!", 1, 6.888, 12, "rabbit"),
|
Arrays.asList("15charwidedata!", 1, 6.888, 12, "rabbit"),
|
||||||
Arrays.asList("dog", 1.7976931348623157E308, 123124.888, 9912, "goat")));
|
Arrays.asList("dog", 1.7976931348623157E308, 123124.888, 9912, "goat")));
|
||||||
|
|
|
@ -9,7 +9,6 @@ import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||||
import org.elasticsearch.test.AbstractStreamableTestCase;
|
import org.elasticsearch.test.AbstractStreamableTestCase;
|
||||||
import org.elasticsearch.xpack.sql.execution.search.ScrollCursorTests;
|
import org.elasticsearch.xpack.sql.execution.search.ScrollCursorTests;
|
||||||
import org.elasticsearch.xpack.sql.plugin.SqlPlugin;
|
import org.elasticsearch.xpack.sql.plugin.SqlPlugin;
|
||||||
import org.elasticsearch.xpack.sql.plugin.sql.action.SqlResponse;
|
|
||||||
import org.elasticsearch.xpack.sql.plugin.sql.action.SqlResponse.ColumnInfo;
|
import org.elasticsearch.xpack.sql.plugin.sql.action.SqlResponse.ColumnInfo;
|
||||||
import org.elasticsearch.xpack.sql.session.Cursor;
|
import org.elasticsearch.xpack.sql.session.Cursor;
|
||||||
|
|
||||||
|
@ -36,7 +35,7 @@ public class SqlResponseTests extends AbstractStreamableTestCase<SqlResponse> {
|
||||||
if (randomBoolean()) {
|
if (randomBoolean()) {
|
||||||
columns = new ArrayList<>(columnCount);
|
columns = new ArrayList<>(columnCount);
|
||||||
for (int i = 0; i < columnCount; i++) {
|
for (int i = 0; i < columnCount; i++) {
|
||||||
columns.add(new ColumnInfo(randomAlphaOfLength(10), randomAlphaOfLength(10), randomFrom(JDBCType.values())));
|
columns.add(new ColumnInfo(randomAlphaOfLength(10), randomAlphaOfLength(10), randomFrom(JDBCType.values()), randomInt(25)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue