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 <[email protected]> Authored: Tue Mar 29 16:38:30 2016 +0900 Committer: Hyunsik Choi <[email protected]> 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
