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