diff --git a/plugin/sql/sql-proto/src/main/java/org/elasticsearch/xpack/sql/type/DataType.java b/plugin/sql/sql-proto/src/main/java/org/elasticsearch/xpack/sql/type/DataType.java index 5608e4286cd..fd762a1f3ae 100644 --- a/plugin/sql/sql-proto/src/main/java/org/elasticsearch/xpack/sql/type/DataType.java +++ b/plugin/sql/sql-proto/src/main/java/org/elasticsearch/xpack/sql/type/DataType.java @@ -128,11 +128,11 @@ public enum DataType { } /** - * Returns true if value is signed, false if it is unsigned or null if the type doesn't represent a number + * Returns true if value is signed, false otherwise (including if the type is not numeric) */ - public Boolean isSigned() { + public boolean isSigned() { // For now all numeric values that es supports are signed - return isNumeric() ? true : null; + return isNumeric(); } public boolean isString() { diff --git a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysColumns.java b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysColumns.java index 84dd1bacb53..3c01736cebe 100644 --- a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysColumns.java +++ b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysColumns.java @@ -63,7 +63,7 @@ public class SysColumns extends Command { field("DATA_TYPE", INTEGER), keyword("TYPE_NAME"), field("COLUMN_SIZE", INTEGER), - field("BUFFER_LENGTH", NULL), + field("BUFFER_LENGTH", INTEGER), field("DECIMAL_DIGITS", INTEGER), field("NUM_PREC_RADIX", INTEGER), field("NULLABLE", INTEGER), diff --git a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysTypes.java b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysTypes.java index 4be5000dc37..880735d8bbb 100644 --- a/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysTypes.java +++ b/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysTypes.java @@ -81,7 +81,7 @@ public class SysTypes extends Command { // everything is searchable, DatabaseMetaData.typeSearchable, // only numerics are signed - t.isSigned(), + !t.isSigned(), //no fixed precision scale SQL_FALSE 0, null, diff --git a/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysParserTests.java b/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysParserTests.java index 3fec283f0b9..e09da4a8858 100644 --- a/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysParserTests.java +++ b/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/plan/logical/command/sys/SysParserTests.java @@ -16,6 +16,7 @@ import org.elasticsearch.xpack.sql.expression.function.FunctionRegistry; import org.elasticsearch.xpack.sql.parser.SqlParser; import org.elasticsearch.xpack.sql.plan.logical.command.Command; import org.elasticsearch.xpack.sql.session.SqlSession; +import org.elasticsearch.xpack.sql.type.DataType; import org.elasticsearch.xpack.sql.type.EsField; import org.elasticsearch.xpack.sql.type.TypesTests; import org.joda.time.DateTimeZone; @@ -62,7 +63,10 @@ public class SysParserTests extends ESTestCase { cmd.execute(null, ActionListener.wrap(r -> { assertEquals(19, r.columnCount()); assertEquals(17, r.size()); - + assertFalse(r.schema().types().contains(DataType.NULL)); + // test numeric as signed + assertFalse(r.column(9, Boolean.class)); + for (int i = 0; i < r.size(); i++) { assertEquals(names.get(i), r.column(0)); r.advanceRow(); diff --git a/qa/sql/src/main/resources/setup_mock_metadata_get_columns.sql b/qa/sql/src/main/resources/setup_mock_metadata_get_columns.sql index 32a5874e219..3d8cf470894 100644 --- a/qa/sql/src/main/resources/setup_mock_metadata_get_columns.sql +++ b/qa/sql/src/main/resources/setup_mock_metadata_get_columns.sql @@ -5,7 +5,7 @@ CREATE TABLE mock ( DATA_TYPE INTEGER, TYPE_NAME VARCHAR, COLUMN_SIZE INTEGER, - BUFFER_LENGTH NULL, + BUFFER_LENGTH INTEGER, DECIMAL_DIGITS INTEGER, NUM_PREC_RADIX INTEGER, NULLABLE INTEGER, @@ -23,27 +23,27 @@ CREATE TABLE mock ( IS_AUTOINCREMENT VARCHAR, IS_GENERATEDCOLUMN VARCHAR ) AS -SELECT null, 'test1', 'name', 12, 'TEXT', 0, null, null, null, +SELECT null, 'test1', 'name', 12, 'TEXT', 0, 2147483647, null, null, 1, -- columnNullable null, null, 12, null, 2147483647, 1, 'YES', null, null, null, null, 'NO', 'NO' FROM DUAL UNION ALL -SELECT null, 'test1', 'name.keyword', 12, 'KEYWORD', 0, null, null, null, +SELECT null, 'test1', 'name.keyword', 12, 'KEYWORD', 0, 2147483647, null, null, 1, -- columnNullable null, null, 12, null, 2147483647, 1, 'YES', null, null, null, null, 'NO', 'NO' FROM DUAL UNION ALL -SELECT null, 'test2', 'date', 93, 'DATE', 20, null, null, null, +SELECT null, 'test2', 'date', 93, 'DATE', 20, 8, null, null, 1, -- columnNullable null, null, 93, null, null, 1, 'YES', null, null, null, null, 'NO', 'NO' FROM DUAL UNION ALL -SELECT null, 'test2', 'float', 7, 'FLOAT', 15, null, null, 2, +SELECT null, 'test2', 'float', 7, 'FLOAT', 15, 4, null, 2, 1, -- columnNullable null, null, 7, null, null, 2, 'YES', null, null, null, null, 'NO', 'NO' FROM DUAL UNION ALL -SELECT null, 'test2', 'number', -5, 'LONG', 20, null, null, 10, +SELECT null, 'test2', 'number', -5, 'LONG', 20, 8, null, 10, 1, -- columnNullable null, null, -5, null, null, 3, 'YES', null, null, null, null, 'NO', 'NO' FROM DUAL