You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2016/03/29 09:40:40 UTC

tajo git commit: TAJO-2105: Apply new identifier system to new schema.

Repository: tajo
Updated Branches:
  refs/heads/master 49d592024 -> 4046310a1


TAJO-2105: Apply new identifier system to new schema.

Closes #989


Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/4046310a
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/4046310a
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/4046310a

Branch: refs/heads/master
Commit: 4046310a17100136540e9c1a3883aff8104e855e
Parents: 49d5920
Author: Hyunsik Choi <hy...@apache.org>
Authored: Tue Mar 29 16:38:30 2016 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Tue Mar 29 16:38:30 2016 +0900

----------------------------------------------------------------------
 .../java/org/apache/tajo/schema/Identifier.java | 20 ++++++++
 .../apache/tajo/schema/QualifiedIdentifier.java | 32 +++++++++++-
 .../java/org/apache/tajo/schema/Schema.java     | 16 +++---
 .../schema/TestANSISQLIdentifierPolicy.java     | 14 ++---
 .../org/apache/tajo/schema/TestIdentifier.java  | 41 +++++++++++++++
 .../java/org/apache/tajo/schema/TestSchema.java | 24 +++++++--
 .../apache/tajo/schema/TestTajoIdentifier.java  | 54 --------------------
 .../tajo/schema/TestTajoIdentifierPolicy.java   | 54 ++++++++++++++++++++
 8 files changed, 179 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/4046310a/tajo-common/src/main/java/org/apache/tajo/schema/Identifier.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/schema/Identifier.java b/tajo-common/src/main/java/org/apache/tajo/schema/Identifier.java
index ef4c2bf..99fe6ba 100644
--- a/tajo-common/src/main/java/org/apache/tajo/schema/Identifier.java
+++ b/tajo-common/src/main/java/org/apache/tajo/schema/Identifier.java
@@ -20,6 +20,8 @@ package org.apache.tajo.schema;
 
 import org.apache.tajo.schema.IdentifierPolicy.IdentifierCase;
 
+import java.util.Objects;
+
 /**
  * Identifier Element
  */
@@ -67,7 +69,25 @@ public class Identifier {
     }
   }
 
+  @Override
   public String toString() {
     return displayString(IdentifierPolicy.DefaultPolicy());
   }
+
+  public int hashCode() {
+    return Objects.hash(name, quoted);
+  }
+
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    }
+
+    if (obj instanceof Identifier) {
+      Identifier other = (Identifier) obj;
+      return other.name == other.name && quoted == other.quoted;
+    }
+
+    return false;
+  }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/4046310a/tajo-common/src/main/java/org/apache/tajo/schema/QualifiedIdentifier.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/schema/QualifiedIdentifier.java b/tajo-common/src/main/java/org/apache/tajo/schema/QualifiedIdentifier.java
index 6f00ee9..b252d82 100644
--- a/tajo-common/src/main/java/org/apache/tajo/schema/QualifiedIdentifier.java
+++ b/tajo-common/src/main/java/org/apache/tajo/schema/QualifiedIdentifier.java
@@ -18,6 +18,7 @@
 
 package org.apache.tajo.schema;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
 import org.apache.tajo.util.StringUtils;
@@ -43,15 +44,42 @@ public class QualifiedIdentifier {
     });
   }
 
+  @Override
   public String toString() {
     return displayString(DefaultPolicy());
   }
 
-  public static QualifiedIdentifier QualifiedIdentifier(Collection<Identifier> names) {
+  @Override
+  public int hashCode() {
+    return names.hashCode();
+  }
+
+  public boolean equals(Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    if (obj instanceof QualifiedIdentifier) {
+      QualifiedIdentifier other = (QualifiedIdentifier) obj;
+      return names.equals(other.names);
+    }
+
+    return false;
+  }
+
+  public static QualifiedIdentifier $(Collection<Identifier> names) {
     return new QualifiedIdentifier(ImmutableList.copyOf(names));
   }
 
-  public static QualifiedIdentifier QualifiedIdentifier(Identifier...names) {
+  public static QualifiedIdentifier $(Identifier...names) {
     return new QualifiedIdentifier(ImmutableList.copyOf(names));
   }
+
+  @VisibleForTesting
+  public static QualifiedIdentifier $(String...names) {
+    ImmutableList.Builder<Identifier> builder = new ImmutableList.Builder();
+    for (String n :names) {
+      builder.add(Identifier._(n));
+    }
+    return new QualifiedIdentifier(builder.build());
+  }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/4046310a/tajo-common/src/main/java/org/apache/tajo/schema/Schema.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/schema/Schema.java b/tajo-common/src/main/java/org/apache/tajo/schema/Schema.java
index 332f622..b939f30 100644
--- a/tajo-common/src/main/java/org/apache/tajo/schema/Schema.java
+++ b/tajo-common/src/main/java/org/apache/tajo/schema/Schema.java
@@ -51,26 +51,26 @@ public class Schema {
     return StringUtils.join(namedTypes, ",");
   }
 
-  public static NamedStructType Struct(String name, NamedType... namedTypes) {
+  public static NamedStructType Struct(QualifiedIdentifier name, NamedType... namedTypes) {
     return Struct(name, Arrays.asList(namedTypes));
   }
 
-  public static NamedStructType Struct(String name, Collection<NamedType> namedTypes) {
+  public static NamedStructType Struct(QualifiedIdentifier name, Collection<NamedType> namedTypes) {
     return new NamedStructType(name, namedTypes);
   }
 
-  public static NamedPrimitiveType Field(String name, Type type) {
+  public static NamedPrimitiveType Field(QualifiedIdentifier name, Type type) {
     return new NamedPrimitiveType(name, type);
   }
 
   public static abstract class NamedType {
-    protected final String name;
+    protected final QualifiedIdentifier name;
 
-    public NamedType(String name) {
+    public NamedType(QualifiedIdentifier name) {
       this.name = name;
     }
 
-    public String name() {
+    public QualifiedIdentifier name() {
       return this.name;
     }
   }
@@ -78,7 +78,7 @@ public class Schema {
   public static class NamedPrimitiveType extends NamedType {
     private final Type type;
 
-    NamedPrimitiveType(String name, Type type) {
+    NamedPrimitiveType(QualifiedIdentifier name, Type type) {
       super(name);
       Preconditions.checkArgument(type.baseType() != RECORD);
       this.type = type;
@@ -93,7 +93,7 @@ public class Schema {
   public static class NamedStructType extends NamedType {
     private final ImmutableList<NamedType> namedTypes;
 
-    public NamedStructType(String name, Collection<NamedType> namedTypes) {
+    public NamedStructType(QualifiedIdentifier name, Collection<NamedType> namedTypes) {
       super(name);
       this.namedTypes = ImmutableList.copyOf(namedTypes);
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/4046310a/tajo-common/src/test/java/org/apache/tajo/schema/TestANSISQLIdentifierPolicy.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/schema/TestANSISQLIdentifierPolicy.java b/tajo-common/src/test/java/org/apache/tajo/schema/TestANSISQLIdentifierPolicy.java
index 9643a89..f7dca27 100644
--- a/tajo-common/src/test/java/org/apache/tajo/schema/TestANSISQLIdentifierPolicy.java
+++ b/tajo-common/src/test/java/org/apache/tajo/schema/TestANSISQLIdentifierPolicy.java
@@ -22,9 +22,9 @@ import org.junit.Test;
 
 import static org.apache.tajo.schema.Identifier._;
 import static org.apache.tajo.schema.IdentifierPolicy.ANSISQLPolicy;
-import static org.apache.tajo.schema.QualifiedIdentifier.QualifiedIdentifier;
-import static org.apache.tajo.schema.TestTajoIdentifier.assertIdentifier;
-import static org.apache.tajo.schema.TestTajoIdentifier.assertQualifiedIdentifier;
+import static org.apache.tajo.schema.QualifiedIdentifier.$;
+import static org.apache.tajo.schema.TestTajoIdentifierPolicy.assertIdentifier;
+import static org.apache.tajo.schema.TestTajoIdentifierPolicy.assertQualifiedIdentifier;
 
 public class TestANSISQLIdentifierPolicy {
 
@@ -39,10 +39,10 @@ public class TestANSISQLIdentifierPolicy {
 
   @Test
   public void testQualifiedIdentifiers() throws Exception {
-    assertQualifiedIdentifier(ANSISQLPolicy(), QualifiedIdentifier(_("xyz"), _("opq")), "XYZ.OPQ");
-    assertQualifiedIdentifier(ANSISQLPolicy(), QualifiedIdentifier(_("XYZ"), _("opq")), "XYZ.OPQ");
+    assertQualifiedIdentifier(ANSISQLPolicy(), $(_("xyz"), _("opq")), "XYZ.OPQ");
+    assertQualifiedIdentifier(ANSISQLPolicy(), $(_("XYZ"), _("opq")), "XYZ.OPQ");
 
-    assertQualifiedIdentifier(ANSISQLPolicy(), QualifiedIdentifier(_("xyz", true), _("opq", false)), "'xyz'.OPQ");
-    assertQualifiedIdentifier(ANSISQLPolicy(), QualifiedIdentifier(_("xYz", true), _("opq", true)), "'xYz'.'opq'");
+    assertQualifiedIdentifier(ANSISQLPolicy(), $(_("xyz", true), _("opq", false)), "'xyz'.OPQ");
+    assertQualifiedIdentifier(ANSISQLPolicy(), $(_("xYz", true), _("opq", true)), "'xYz'.'opq'");
   }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/4046310a/tajo-common/src/test/java/org/apache/tajo/schema/TestIdentifier.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/schema/TestIdentifier.java b/tajo-common/src/test/java/org/apache/tajo/schema/TestIdentifier.java
new file mode 100644
index 0000000..c1acf49
--- /dev/null
+++ b/tajo-common/src/test/java/org/apache/tajo/schema/TestIdentifier.java
@@ -0,0 +1,41 @@
+/*
+ * Lisensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.schema;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class TestIdentifier {
+
+  @Test
+  public void testHashCode() throws Exception {
+    Identifier aId = Identifier._("xyz");
+    Identifier same = Identifier._("xyz");
+    Identifier sameButQuoted = Identifier._("xyz", true);
+
+    assertEquals(aId.hashCode(), same.hashCode());
+    assertNotEquals(aId.hashCode(), sameButQuoted.hashCode());
+  }
+
+  @Test
+  public void equals() throws Exception {
+
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/4046310a/tajo-common/src/test/java/org/apache/tajo/schema/TestSchema.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/schema/TestSchema.java b/tajo-common/src/test/java/org/apache/tajo/schema/TestSchema.java
index da5a4d3..03cc223 100644
--- a/tajo-common/src/test/java/org/apache/tajo/schema/TestSchema.java
+++ b/tajo-common/src/test/java/org/apache/tajo/schema/TestSchema.java
@@ -20,7 +20,11 @@ package org.apache.tajo.schema;
 
 import org.junit.Test;
 
+import static org.apache.tajo.schema.Identifier._;
+import static org.apache.tajo.schema.QualifiedIdentifier.$;
 import static org.apache.tajo.schema.Schema.*;
+import static org.apache.tajo.schema.Schema.Schema;
+import static org.apache.tajo.schema.Schema.Struct;
 import static org.apache.tajo.type.Type.*;
 import static org.junit.Assert.assertEquals;
 
@@ -28,8 +32,8 @@ public class TestSchema {
 
   @Test
   public final void testSchema1() {
-    NamedType struct1 = Struct("f12", Field("f1", Int8()), Field("f2", Int4()));
-    NamedType struct2 = Struct("f34", Field("f3", Int8()), Field("f4", Int4()));
+    NamedType struct1 = Struct($("f12"), Field($("f1"), Int8()), Field($("f2"), Int4()));
+    NamedType struct2 = Struct($("f34"), Field($("f3"), Int8()), Field($("f4"), Int4()));
     Schema schema = Schema(struct1, struct2);
 
     assertEquals(schema.toString(), "f12 record (f1 int8,f2 int4),f34 record (f3 int8,f4 int4)");
@@ -37,11 +41,21 @@ public class TestSchema {
 
   @Test
   public final void testSchema2() {
-    NamedType f1 = Field("x", Array(Int8()));
-    NamedType f2 = Field("y", Int8());
-    NamedType f3 = Struct("z", Field("z-1", Time()), Field("z-2", Array(Int8())));
+    NamedType f1 = Field($("x"), Array(Int8()));
+    NamedType f2 = Field($("y"), Int8());
+    NamedType f3 = Struct($("z"), Field($("z-1"), Time()), Field($("z-2"), Array(Int8())));
     Schema schema = Schema(f1, f2, f3);
 
     assertEquals(schema.toString(), "x array<int8>,y int8,z record (z-1 time,z-2 array<int8>)");
   }
+
+  @Test
+  public final void testSchemaWithIdentifiers() {
+    NamedType f1 = Field($("x", "y"), Array(Int8()));
+    NamedType f2 = Field($(_("y"), _("B", true)), Int8());
+    NamedType f3 = Struct($("z"), Field($("z-1"), Time()), Field($("z-2"), Array(Int8())));
+    Schema schema = Schema(f1, f2, f3);
+
+    assertEquals(schema.toString(), "x.y array<int8>,y.'B' int8,z record (z-1 time,z-2 array<int8>)");
+  }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/4046310a/tajo-common/src/test/java/org/apache/tajo/schema/TestTajoIdentifier.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/schema/TestTajoIdentifier.java b/tajo-common/src/test/java/org/apache/tajo/schema/TestTajoIdentifier.java
deleted file mode 100644
index 675f631..0000000
--- a/tajo-common/src/test/java/org/apache/tajo/schema/TestTajoIdentifier.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Lisensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tajo.schema;
-
-import org.junit.Test;
-
-import static org.apache.tajo.schema.Identifier._;
-import static org.apache.tajo.schema.IdentifierPolicy.DefaultPolicy;
-import static org.apache.tajo.schema.QualifiedIdentifier.QualifiedIdentifier;
-import static org.junit.Assert.assertEquals;
-
-public class TestTajoIdentifier {
-  @Test
-  public void testIdentifiers() throws Exception {
-    assertIdentifier(DefaultPolicy(), _("xyz"), "xyz");
-    assertIdentifier(DefaultPolicy(), _("XYZ"), "xyz");
-
-    assertIdentifier(DefaultPolicy(), _("xyz", true), "'xyz'");
-    assertIdentifier(DefaultPolicy(), _("xYz", true), "'xYz'");
-  }
-
-  @Test
-  public void testQualifiedIdentifiers() throws Exception {
-    assertQualifiedIdentifier(DefaultPolicy(), QualifiedIdentifier(_("xyz"), _("opq")), "xyz.opq");
-    assertQualifiedIdentifier(DefaultPolicy(), QualifiedIdentifier(_("XYZ"), _("opq")), "xyz.opq");
-
-    assertQualifiedIdentifier(DefaultPolicy(), QualifiedIdentifier(_("xyz", true), _("opq", false)), "'xyz'.opq");
-    assertQualifiedIdentifier(DefaultPolicy(), QualifiedIdentifier(_("xYz", true), _("opq", true)), "'xYz'.'opq'");
-  }
-
-  public static void assertIdentifier(IdentifierPolicy p, Identifier id, String expected) {
-    assertEquals(expected, id.displayString(p));
-  }
-
-  public static void assertQualifiedIdentifier(IdentifierPolicy p, QualifiedIdentifier id, String expected) {
-    assertEquals(expected, id.displayString(p));
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/4046310a/tajo-common/src/test/java/org/apache/tajo/schema/TestTajoIdentifierPolicy.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/schema/TestTajoIdentifierPolicy.java b/tajo-common/src/test/java/org/apache/tajo/schema/TestTajoIdentifierPolicy.java
new file mode 100644
index 0000000..72027fe
--- /dev/null
+++ b/tajo-common/src/test/java/org/apache/tajo/schema/TestTajoIdentifierPolicy.java
@@ -0,0 +1,54 @@
+/*
+ * Lisensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.schema;
+
+import org.junit.Test;
+
+import static org.apache.tajo.schema.Identifier._;
+import static org.apache.tajo.schema.IdentifierPolicy.DefaultPolicy;
+import static org.apache.tajo.schema.QualifiedIdentifier.$;
+import static org.junit.Assert.assertEquals;
+
+public class TestTajoIdentifierPolicy {
+  @Test
+  public void testIdentifiers() throws Exception {
+    assertIdentifier(DefaultPolicy(), _("xyz"), "xyz");
+    assertIdentifier(DefaultPolicy(), _("XYZ"), "xyz");
+
+    assertIdentifier(DefaultPolicy(), _("xyz", true), "'xyz'");
+    assertIdentifier(DefaultPolicy(), _("xYz", true), "'xYz'");
+  }
+
+  @Test
+  public void testQualifiedIdentifiers() throws Exception {
+    assertQualifiedIdentifier(DefaultPolicy(), $(_("xyz"), _("opq")), "xyz.opq");
+    assertQualifiedIdentifier(DefaultPolicy(), $(_("XYZ"), _("opq")), "xyz.opq");
+
+    assertQualifiedIdentifier(DefaultPolicy(), $(_("xyz", true), _("opq", false)), "'xyz'.opq");
+    assertQualifiedIdentifier(DefaultPolicy(), $(_("xYz", true), _("opq", true)), "'xYz'.'opq'");
+  }
+
+  public static void assertIdentifier(IdentifierPolicy p, Identifier id, String expected) {
+    assertEquals(expected, id.displayString(p));
+  }
+
+  public static void assertQualifiedIdentifier(IdentifierPolicy p, QualifiedIdentifier id, String expected) {
+    assertEquals(expected, id.displayString(p));
+  }
+}
\ No newline at end of file