Skip to content
Snippets Groups Projects
Commit 62d2fa5e authored by Huaxin Gao's avatar Huaxin Gao Committed by Andrew Or
Browse files

[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.
parent e849285d
No related branches found
No related tags found
No related merge requests found
......@@ -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)
}
......
......@@ -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."
)
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment