Index: ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (revision 1072913) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (working copy) @@ -27,9 +27,9 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; import java.util.TreeSet; +import java.util.Map.Entry; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; @@ -91,7 +91,6 @@ import org.apache.hadoop.hive.ql.optimizer.GenMRFileSink1; import org.apache.hadoop.hive.ql.optimizer.GenMROperator; import org.apache.hadoop.hive.ql.optimizer.GenMRProcContext; -import org.apache.hadoop.hive.ql.optimizer.GenMRProcContext.GenMapRedCtx; import org.apache.hadoop.hive.ql.optimizer.GenMRRedSink1; import org.apache.hadoop.hive.ql.optimizer.GenMRRedSink2; import org.apache.hadoop.hive.ql.optimizer.GenMRRedSink3; @@ -101,6 +100,7 @@ import org.apache.hadoop.hive.ql.optimizer.GenMapRedUtils; import org.apache.hadoop.hive.ql.optimizer.MapJoinFactory; import org.apache.hadoop.hive.ql.optimizer.Optimizer; +import org.apache.hadoop.hive.ql.optimizer.GenMRProcContext.GenMapRedCtx; import org.apache.hadoop.hive.ql.optimizer.physical.PhysicalContext; import org.apache.hadoop.hive.ql.optimizer.physical.PhysicalOptimizer; import org.apache.hadoop.hive.ql.optimizer.ppr.PartitionPruner; @@ -121,7 +121,6 @@ import org.apache.hadoop.hive.ql.plan.FetchWork; import org.apache.hadoop.hive.ql.plan.FileSinkDesc; import org.apache.hadoop.hive.ql.plan.FilterDesc; -import org.apache.hadoop.hive.ql.plan.FilterDesc.sampleDesc; import org.apache.hadoop.hive.ql.plan.ForwardDesc; import org.apache.hadoop.hive.ql.plan.GroupByDesc; import org.apache.hadoop.hive.ql.plan.HiveOperation; @@ -144,12 +143,13 @@ import org.apache.hadoop.hive.ql.plan.TableScanDesc; import org.apache.hadoop.hive.ql.plan.UDTFDesc; import org.apache.hadoop.hive.ql.plan.UnionDesc; +import org.apache.hadoop.hive.ql.plan.FilterDesc.sampleDesc; import org.apache.hadoop.hive.ql.session.SessionState; import org.apache.hadoop.hive.ql.session.SessionState.ResourceType; import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator; -import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator.Mode; import org.apache.hadoop.hive.ql.udf.generic.GenericUDFHash; import org.apache.hadoop.hive.ql.udf.generic.GenericUDTF; +import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator.Mode; import org.apache.hadoop.hive.serde.Constants; import org.apache.hadoop.hive.serde2.Deserializer; import org.apache.hadoop.hive.serde2.MetadataTypedColumnsetSerDe; @@ -157,9 +157,9 @@ import org.apache.hadoop.hive.serde2.SerDeUtils; import org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; -import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category; import org.apache.hadoop.hive.serde2.objectinspector.StructField; import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils; @@ -953,7 +953,7 @@ private boolean isPresent(String[] list, String elem) { for (String s : list) { - if (s.equals(elem)) { + if (s.toLowerCase().equals(elem)) { return true; } } @@ -4509,7 +4509,7 @@ int pos = 0; for (String src : joinTree.getBaseSrc()) { if (src != null) { - Operator srcOp = map.get(src); + Operator srcOp = map.get(src.toLowerCase()); // for left-semi join, generate an additional selection & group-by // operator before ReduceSink Index: ql/src/test/queries/clientpositive/join_casesensitive.q =================================================================== --- ql/src/test/queries/clientpositive/join_casesensitive.q (revision 0) +++ ql/src/test/queries/clientpositive/join_casesensitive.q (revision 0) @@ -0,0 +1,8 @@ + +CREATE TABLE joinone(key1 int, key2 int, value int); +LOAD DATA LOCAL INPATH '../data/files/in5.txt' INTO TABLE joinone; + +CREATE TABLE joinTwo(key1 int, key2 int, value int); +LOAD DATA LOCAL INPATH '../data/files/in6.txt' INTO TABLE joinTwo; + +SELECT * FROM joinone JOIN joinTwo ON(joinone.key2=joinTwo.key2); Index: ql/src/test/results/clientpositive/join_casesensitive.q.out =================================================================== --- ql/src/test/results/clientpositive/join_casesensitive.q.out (revision 0) +++ ql/src/test/results/clientpositive/join_casesensitive.q.out (revision 0) @@ -0,0 +1,115 @@ +PREHOOK: query: CREATE TABLE joinone(key1 int, key2 int, value int) +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE joinone(key1 int, key2 int, value int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@joinone +PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in5.txt' INTO TABLE joinone +PREHOOK: type: LOAD +POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in5.txt' INTO TABLE joinone +POSTHOOK: type: LOAD +POSTHOOK: Output: default@joinone +PREHOOK: query: CREATE TABLE joinTwo(key1 int, key2 int, value int) +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE joinTwo(key1 int, key2 int, value int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@joinTwo +PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in6.txt' INTO TABLE joinTwo +PREHOOK: type: LOAD +POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in6.txt' INTO TABLE joinTwo +POSTHOOK: type: LOAD +POSTHOOK: Output: default@jointwo +PREHOOK: query: SELECT * FROM joinone JOIN joinTwo ON(joinone.key2=joinTwo.key2) +PREHOOK: type: QUERY +PREHOOK: Input: default@joinone +PREHOOK: Input: default@jointwo +PREHOOK: Output: file:/tmp/root/hive_2011-02-22_06-34-20_426_5844000716324948890/-mr-10000 +POSTHOOK: query: SELECT * FROM joinone JOIN joinTwo ON(joinone.key2=joinTwo.key2) +POSTHOOK: type: QUERY +POSTHOOK: Input: default@joinone +POSTHOOK: Input: default@jointwo +POSTHOOK: Output: file:/tmp/root/hive_2011-02-22_06-34-20_426_5844000716324948890/-mr-10000 +5 10005 66 5 10005 66 +20 10020 66 20 10020 66 +25 10025 88 25 10025 66 +30 10030 66 30 10030 88 +35 10035 88 35 10035 88 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 40 10040 66 +80 10040 88 40 10040 88 +80 10040 88 60 10040 66 +80 10040 88 60 10040 66 +80 10040 88 70 10040 88 +80 10040 88 70 10040 88 +80 10040 88 80 10040 66 +80 10040 88 80 10040 66 +80 10040 88 40 10040 66 +80 10040 88 40 10040 88 +80 10040 88 60 10040 66 +80 10040 88 60 10040 66 +80 10040 88 70 10040 88 +80 10040 88 70 10040 88 +40 10040 66 80 10040 66 +40 10040 66 80 10040 66 +40 10040 66 40 10040 66 +40 10040 66 40 10040 88 +40 10040 66 60 10040 66 +40 10040 66 60 10040 66 +40 10040 66 70 10040 88 +40 10040 66 70 10040 88 +40 10040 88 80 10040 66 +40 10040 88 80 10040 66 +40 10040 88 40 10040 66 +40 10040 88 40 10040 88 +40 10040 88 60 10040 66 +40 10040 88 60 10040 66 +40 10040 88 70 10040 88 +40 10040 88 70 10040 88 +60 10040 66 80 10040 66 +60 10040 66 80 10040 66 +60 10040 66 40 10040 66 +60 10040 66 40 10040 88 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 70 10040 88 +60 10040 66 70 10040 88 +60 10040 66 80 10040 66 +60 10040 66 80 10040 66 +60 10040 66 40 10040 66 +60 10040 66 40 10040 88 +60 10040 66 60 10040 66 +60 10040 66 60 10040 66 +60 10040 66 70 10040 88 +60 10040 66 70 10040 88 +70 10040 66 80 10040 66 +70 10040 66 80 10040 66 +70 10040 66 40 10040 66 +70 10040 66 40 10040 88 +70 10040 66 60 10040 66 +70 10040 66 60 10040 66 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +70 10040 66 80 10040 66 +70 10040 66 80 10040 66 +70 10040 66 40 10040 66 +70 10040 66 40 10040 88 +70 10040 66 60 10040 66 +70 10040 66 60 10040 66 +70 10040 66 70 10040 88 +70 10040 66 70 10040 88 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 NULL 10050 66 +50 10050 88 50 10050 88 +50 10050 88 50 10050 66 +50 10050 88 50 10050 66 +50 10050 88 NULL 10050 66 +50 10050 88 50 10050 88 +NULL 10050 66 50 10050 66 +NULL 10050 66 50 10050 66 +NULL 10050 66 NULL 10050 66 +NULL 10050 66 50 10050 88 +50 10050 66 50 10050 66 +50 10050 66 50 10050 66 +50 10050 66 NULL 10050 66 +50 10050 66 50 10050 88