Return-Path: X-Original-To: apmail-hive-commits-archive@www.apache.org Delivered-To: apmail-hive-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 6F73018CBE for ; Thu, 13 Aug 2015 18:25:35 +0000 (UTC) Received: (qmail 48551 invoked by uid 500); 13 Aug 2015 18:25:13 -0000 Delivered-To: apmail-hive-commits-archive@hive.apache.org Received: (qmail 48502 invoked by uid 500); 13 Aug 2015 18:25:13 -0000 Mailing-List: contact commits-help@hive.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: hive-dev@hive.apache.org Delivered-To: mailing list commits@hive.apache.org Received: (qmail 48491 invoked by uid 99); 13 Aug 2015 18:25:13 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 13 Aug 2015 18:25:13 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 0E049E6833; Thu, 13 Aug 2015 18:25:13 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sunchao@apache.org To: commits@hive.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: hive git commit: HIVE-11451: SemanticAnalyzer throws IndexOutOfBounds Exception (Aihua Xu, reviewed by Chao Sun) Date: Thu, 13 Aug 2015 18:25:13 +0000 (UTC) Repository: hive Updated Branches: refs/heads/master bd90fc349 -> db46e6e8c HIVE-11451: SemanticAnalyzer throws IndexOutOfBounds Exception (Aihua Xu, reviewed by Chao Sun) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/db46e6e8 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/db46e6e8 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/db46e6e8 Branch: refs/heads/master Commit: db46e6e8ccc4ee86fbd074dbc3d2e4fa7d88ce25 Parents: bd90fc3 Author: Aihua Xu Authored: Thu Aug 13 10:55:30 2015 -0700 Committer: Chao Sun Committed: Thu Aug 13 11:24:31 2015 -0700 ---------------------------------------------------------------------- .../hadoop/hive/ql/parse/SemanticAnalyzer.java | 15 +++++++++------ .../clientnegative/mismatch_columns_insertion.q | 4 ++++ .../clientnegative/mismatch_columns_insertion.q.out | 9 +++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/db46e6e8/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 5ea6f3f..b809a23 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -6724,6 +6724,14 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { outColumnCnt += dpCtx.getNumDPCols(); } + // The numbers of input columns and output columns should match for regular query + if (!updating() && !deleting() && inColumnCnt != outColumnCnt) { + String reason = "Table " + dest + " has " + outColumnCnt + + " columns, but query has " + inColumnCnt + " columns."; + throw new SemanticException(ErrorMsg.TARGET_TABLE_COLUMN_MISMATCH.getMsg( + qb.getParseInfo().getDestForClause(dest), reason)); + } + // Check column types boolean converted = false; int columnNumber = tableFields.size(); @@ -6830,12 +6838,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { dpCtx.mapInputToDP(rowFields.subList(tableFields.size() + 1, rowFields.size())); } } else { - if (inColumnCnt != outColumnCnt) { - String reason = "Table " + dest + " has " + outColumnCnt - + " columns, but query has " + inColumnCnt + " columns."; - throw new SemanticException(ErrorMsg.TARGET_TABLE_COLUMN_MISMATCH.getMsg( - qb.getParseInfo().getDestForClause(dest), reason)); - } else if (dynPart && dpCtx != null) { + if (dynPart && dpCtx != null) { // create the mapping from input ExprNode to dest table DP column dpCtx.mapInputToDP(rowFields.subList(tableFields.size(), rowFields.size())); } http://git-wip-us.apache.org/repos/asf/hive/blob/db46e6e8/ql/src/test/queries/clientnegative/mismatch_columns_insertion.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/mismatch_columns_insertion.q b/ql/src/test/queries/clientnegative/mismatch_columns_insertion.q new file mode 100644 index 0000000..dad1ec1 --- /dev/null +++ b/ql/src/test/queries/clientnegative/mismatch_columns_insertion.q @@ -0,0 +1,4 @@ + +create table mismatch_columns(key string, value string); + +insert overwrite table mismatch_columns select key from srcpart where ds is not null; http://git-wip-us.apache.org/repos/asf/hive/blob/db46e6e8/ql/src/test/results/clientnegative/mismatch_columns_insertion.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/mismatch_columns_insertion.q.out b/ql/src/test/results/clientnegative/mismatch_columns_insertion.q.out new file mode 100644 index 0000000..831af12 --- /dev/null +++ b/ql/src/test/results/clientnegative/mismatch_columns_insertion.q.out @@ -0,0 +1,9 @@ +PREHOOK: query: create table mismatch_columns(key string, value string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@mismatch_columns +POSTHOOK: query: create table mismatch_columns(key string, value string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@mismatch_columns +FAILED: SemanticException [Error 10044]: Line 3:23 Cannot insert into target table because column number/types are different 'mismatch_columns': Table insclause-0 has 2 columns, but query has 1 columns.