From a14bcf0f1a8abb1804d9d8dba1f13fb2526cb66c Mon Sep 17 00:00:00 2001 From: Hyunsik Choi Date: Mon, 7 Sep 2015 14:48:47 +0900 Subject: [PATCH] TAJO-1610: Cannot find column when the same name is used for table and database. --- .../tajo/engine/query/TestSelectNestedRecord.java | 11 +++++++++++ .../queries/TestSelectNestedRecord/testTAJO_1610.sql | 1 + .../TestSelectNestedRecord/testTAJO_1610.result | 6 ++++++ .../apache/tajo/plan/nameresolver/NameResolver.java | 4 ++-- 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 tajo-core-tests/src/test/resources/queries/TestSelectNestedRecord/testTAJO_1610.sql create mode 100644 tajo-core-tests/src/test/resources/results/TestSelectNestedRecord/testTAJO_1610.result diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestSelectNestedRecord.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestSelectNestedRecord.java index 41df0fa684..da18b0af31 100644 --- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestSelectNestedRecord.java +++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestSelectNestedRecord.java @@ -69,6 +69,17 @@ public final void testSelect3() throws Exception { cleanupQuery(res); } + @Test + public final void testTAJO_1610() throws Exception { + executeString("CREATE DATABASE tweets").close(); + List tables = executeDDL("tweets_ddl.sql", "tweets", "tweets.tweets"); + assertEquals(TUtil.newList("tweets.tweets"), tables); + + ResultSet res = executeQuery(); + assertResultSet(res); + cleanupQuery(res); + } + @Test public final void testNestedFieldAsGroupbyKey1() throws Exception { List tables = executeDDL("tweets_ddl.sql", "tweets", "tweets"); diff --git a/tajo-core-tests/src/test/resources/queries/TestSelectNestedRecord/testTAJO_1610.sql b/tajo-core-tests/src/test/resources/queries/TestSelectNestedRecord/testTAJO_1610.sql new file mode 100644 index 0000000000..e0390aed58 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSelectNestedRecord/testTAJO_1610.sql @@ -0,0 +1 @@ +select "text" from tweets.tweets limit 10; \ No newline at end of file diff --git a/tajo-core-tests/src/test/resources/results/TestSelectNestedRecord/testTAJO_1610.result b/tajo-core-tests/src/test/resources/results/TestSelectNestedRecord/testTAJO_1610.result new file mode 100644 index 0000000000..12ca187af0 --- /dev/null +++ b/tajo-core-tests/src/test/resources/results/TestSelectNestedRecord/testTAJO_1610.result @@ -0,0 +1,6 @@ +text +------------------------------- +Aggressive Ponytail #freebandnames +Thee Namaste Nerdz. #FreeBandNames +Mexican Heaven, Mexican Hell #freebandnames +The Foolish Mortals #freebandnames \ No newline at end of file diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java index 7eb22d70ea..b41ef76cb7 100644 --- a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java @@ -349,7 +349,7 @@ static Pair lookupQualifierAndCanonicalName(LogicalPlan.QueryBlo } // check for tbname.column_name.nested_field - if (qualifierParts.length >= 1) { + if (columnNamePosition < 0 && qualifierParts.length >= 1) { RelationNode rel = lookupTable(block, qualifierParts[0]); if (rel != null) { guessedRelations.add(rel); @@ -358,7 +358,7 @@ static Pair lookupQualifierAndCanonicalName(LogicalPlan.QueryBlo } // column.nested_fieldX... - if (guessedRelations.size() == 0 && qualifierParts.length > 0) { + if (columnNamePosition < 0 && guessedRelations.size() == 0 && qualifierParts.length > 0) { Collection rels = lookupTableByColumns(block, StringUtils.join(qualifierParts, NestedPathUtil.PATH_DELIMITER, 0));