[SPARK-15749][SQL] make the error message more meaningful

## What changes were proposed in this pull request?

For table test1 (C1 varchar (10), C2 varchar (10)), when I insert a row using
```
sqlContext.sql("insert into test1 values ('abc', 'def', 1)")
```
I got error message

```
Exception in thread "main" java.lang.RuntimeException: RelationC1#0,C2#1 JDBCRelation(test1)
requires that the query in the SELECT clause of the INSERT INTO/OVERWRITE statement
generates the same number of columns as its schema.
```
The error message is a little confusing. In my simple insert statement, it doesn't have a SELECT clause.

I will change the error message to a more general one

```
Exception in thread "main" java.lang.RuntimeException: RelationC1#0,C2#1 JDBCRelation(test1)
requires that the data to be inserted have the same number of columns as the target table.
```

## How was this patch tested?

I tested the patch using my simple unit test, but it's a very trivial change and I don't think I need to check in any test.

Author: Huaxin Gao <huaxing@us.ibm.com>

Closes #13492 from huaxingao/spark-15749.
This commit is contained in:
Huaxin Gao 2016-06-16 14:37:10 -07:00 committed by Andrew Or
parent e849285df0
commit 62d2fa5e99
2 changed files with 4 additions and 3 deletions

View file

@ -78,8 +78,9 @@ private[sql] object PreInsertCastAndRename extends Rule[LogicalPlan] {
// schema of the relation.
if (l.output.size != child.output.size) {
sys.error(
s"$l requires that the query in the SELECT clause of the INSERT INTO/OVERWRITE " +
s"statement generates the same number of columns as its schema.")
s"$l requires that the data to be inserted have the same number of columns as the " +
s"target table: target table has ${l.output.size} column(s) but " +
s"the inserted data has ${child.output.size} column(s).")
}
castAndRenameChildOutput(i, l.output, child)
}

View file

@ -95,7 +95,7 @@ class InsertSuite extends DataSourceTest with SharedSQLContext {
""".stripMargin)
}.getMessage
assert(
message.contains("generates the same number of columns as its schema"),
message.contains("requires that the data to be inserted have the same number of columns"),
"SELECT clause generating a different number of columns should not be not allowed."
)
}