[CARBONDATA-2734] Fix struct of date issue in create table problem: Struct of date is not supported currently in create table flow as date datatype check is missing during parsing. Hence child date column was not appended with parent name, leading to StringOutOfIndex exception.
solution: Handle the date DataType as a complex child during column formation. This closes #2494 Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/18381e3d Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/18381e3d Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/18381e3d Branch: refs/heads/carbonstore Commit: 18381e3db164802258b28b794c15d45cbf687f2f Parents: 56e7dad Author: ajantha-bhat <ajanthab...@gmail.com> Authored: Wed Jul 11 17:28:45 2018 +0530 Committer: ravipesala <ravi.pes...@gmail.com> Committed: Fri Jul 13 11:58:45 2018 +0530 ---------------------------------------------------------------------- .../testsuite/complexType/TestComplexDataType.scala | 15 +++++++++++++++ .../spark/sql/catalyst/CarbonDDLSqlParser.scala | 6 ++++++ 2 files changed, 21 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/carbondata/blob/18381e3d/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/complexType/TestComplexDataType.scala ---------------------------------------------------------------------- diff --git a/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/complexType/TestComplexDataType.scala b/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/complexType/TestComplexDataType.scala index 276ed30..1068ba2 100644 --- a/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/complexType/TestComplexDataType.scala +++ b/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/complexType/TestComplexDataType.scala @@ -667,4 +667,19 @@ class TestComplexDataType extends QueryTest with BeforeAndAfterAll { checkAnswer(sql("select a.b from test where id=3 or a.c=3"),Seq(Row(5),Row(2))) } + /* test struct of date*/ + test("test struct complex type with date") { + var backupdateFormat = CarbonProperties.getInstance().getProperty( + CarbonCommonConstants.CARBON_DATE_FORMAT, CarbonCommonConstants.CARBON_DATE_DEFAULT_FORMAT) + CarbonProperties.getInstance() + .addProperty(CarbonCommonConstants.CARBON_DATE_FORMAT, + CarbonCommonConstants.CARBON_DATE_DEFAULT_FORMAT) + sql("DROP TABLE IF EXISTS test") + sql("create table test(a struct<b:date>) stored by 'carbondata'") + sql("insert into test select '1992-02-19' ") + checkAnswer(sql("select * from test "), Row(Row(java.sql.Date.valueOf("1992-02-19")))) + CarbonProperties.getInstance() + .addProperty(CarbonCommonConstants.CARBON_DATE_FORMAT, + backupdateFormat) + } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/18381e3d/integration/spark-common/src/main/scala/org/apache/spark/sql/catalyst/CarbonDDLSqlParser.scala ---------------------------------------------------------------------- diff --git a/integration/spark-common/src/main/scala/org/apache/spark/sql/catalyst/CarbonDDLSqlParser.scala b/integration/spark-common/src/main/scala/org/apache/spark/sql/catalyst/CarbonDDLSqlParser.scala index 0a0b49f..44adff3 100644 --- a/integration/spark-common/src/main/scala/org/apache/spark/sql/catalyst/CarbonDDLSqlParser.scala +++ b/integration/spark-common/src/main/scala/org/apache/spark/sql/catalyst/CarbonDDLSqlParser.scala @@ -1254,6 +1254,10 @@ abstract class CarbonDDLSqlParser extends AbstractCarbonSparkSQLParser { Field(field.column, Some("Timestamp"), field.name, Some(null), field.parent, field.storeType, field.schemaOrdinal, field.precision, field.scale, field.rawSchema, field.columnComment) + case "date" => + Field(field.column, Some("Date"), field.name, Some(null), + field.parent, field.storeType, field.schemaOrdinal, + field.precision, field.scale, field.rawSchema, field.columnComment) case "numeric" => Field(field.column, Some("Numeric"), field.name, Some(null), field.parent, field.storeType, field.schemaOrdinal, field.precision, field.scale, field.rawSchema, field.columnComment) @@ -1326,6 +1330,8 @@ abstract class CarbonDDLSqlParser extends AbstractCarbonSparkSQLParser { Some(parentName + "." + field.name.getOrElse(None)), Some(null), parentName) case "Timestamp" => Field(parentName + "." + field.column, Some("Timestamp"), Some(parentName + "." + field.name.getOrElse(None)), Some(null), parentName) + case "Date" => Field(parentName + "." + field.column, Some("Date"), + Some(parentName + "." + field.name.getOrElse(None)), Some(null), parentName) case "Numeric" => Field(parentName + "." + field.column, Some("Numeric"), Some(parentName + "." + field.name.getOrElse(None)), Some(null), parentName) case "Array" => Field(parentName + "." + field.column, Some("Array"),