@@ -2258,8 +2258,8 @@ class Analyzer(
22582258 if (expected.size < query.output.size) {
22592259 throw new AnalysisException (
22602260 s """ Cannot write to ' $tableName', too many data columns:
2261- |Table columns: ${expected.map(_ .name).mkString(" , " )}
2262- |Data columns: ${query.output.map(_ .name).mkString(" , " )}""" .stripMargin)
2261+ |Table columns: ${expected.map(c => s " ' ${c .name} ' " ).mkString(" , " )}
2262+ |Data columns: ${query.output.map(c => s " ' ${c .name} ' " ).mkString(" , " )}""" .stripMargin)
22632263 }
22642264
22652265 val errors = new mutable.ArrayBuffer [String ]()
@@ -2278,8 +2278,9 @@ class Analyzer(
22782278 if (expected.size > query.output.size) {
22792279 throw new AnalysisException (
22802280 s """ Cannot write to ' $tableName', not enough data columns:
2281- |Table columns: ${expected.map(_.name).mkString(" , " )}
2282- |Data columns: ${query.output.map(_.name).mkString(" , " )}""" .stripMargin)
2281+ |Table columns: ${expected.map(c => s " ' ${c.name}' " ).mkString(" , " )}
2282+ |Data columns: ${query.output.map(c => s " ' ${c.name}' " ).mkString(" , " )}"""
2283+ .stripMargin)
22832284 }
22842285
22852286 query.output.zip(expected).flatMap {
@@ -2301,12 +2302,15 @@ class Analyzer(
23012302 queryExpr : NamedExpression ,
23022303 addError : String => Unit ): Option [NamedExpression ] = {
23032304
2305+ // run the type check first to ensure type errors are present
2306+ val canWrite = DataType .canWrite(
2307+ queryExpr.dataType, tableAttr.dataType, resolver, tableAttr.name, addError)
2308+
23042309 if (queryExpr.nullable && ! tableAttr.nullable) {
23052310 addError(s " Cannot write nullable values to non-null column ' ${tableAttr.name}' " )
23062311 None
23072312
2308- } else if (! DataType .canWrite(
2309- tableAttr.dataType, queryExpr.dataType, resolver, tableAttr.name, addError)) {
2313+ } else if (! canWrite) {
23102314 None
23112315
23122316 } else {
0 commit comments