http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogAgainstCaseSensitivity.java ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogAgainstCaseSensitivity.java b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogAgainstCaseSensitivity.java index f3933ff..6af2798 100644 --- a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogAgainstCaseSensitivity.java +++ b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogAgainstCaseSensitivity.java @@ -334,24 +334,20 @@ public class TestCatalogAgainstCaseSensitivity { String databaseName = "TestDatabase1"; String tableName = "nested_Table"; - Schema schema = SchemaFactory.newV1( - new Column[]{ - new Column("CoL1", CatalogUtil.newSimpleDataType(Type.INT4)), - new Column("CoL2", CatalogUtil.newSimpleDataType(Type.FLOAT4)), - new Column("CoL3", CatalogUtil.newSimpleDataType(Type.TEXT)), - }); - - Schema tableSchema = SchemaFactory.newV1(); - tableSchema.addColumn("RecoRd1", new TypeDesc(schema)); - tableSchema.addColumn("CoL1", CatalogUtil.newSimpleDataType(Type.INT4)); - tableSchema.addColumn("CoL3", CatalogUtil.newSimpleDataType(Type.TEXT)); - tableSchema.addColumn("RecoRd2", new TypeDesc(schema)); - tableSchema.addColumn("RecoRd3", new TypeDesc( - SchemaFactory.newV1(new Column[]{ - new Column("CoL1", CatalogUtil.newSimpleDataType(Type.INT4)), - new Column("RecoRd1", new TypeDesc(schema)), - }) - )); + Schema schema = SchemaBuilder.builder() + .add("CoL1", CatalogUtil.newSimpleDataType(Type.INT4)) + .add("CoL2", CatalogUtil.newSimpleDataType(Type.FLOAT4)) + .add("CoL3", CatalogUtil.newSimpleDataType(Type.TEXT)).build(); + + Schema tableSchema = SchemaBuilder.builder() + .add("RecoRd1", new TypeDesc(schema)) + .add("CoL1", CatalogUtil.newSimpleDataType(Type.INT4)) + .add("CoL3", CatalogUtil.newSimpleDataType(Type.TEXT)) + .add("RecoRd2", new TypeDesc(schema)) + .add("RecoRd3", new TypeDesc( + SchemaBuilder.builder() + .add("CoL1", CatalogUtil.newSimpleDataType(Type.INT4)) + .add("RecoRd1", new TypeDesc(schema)).build())).build(); TableDesc tableDesc = new TableDesc( CatalogUtil.buildFQName(databaseName, tableName),
http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogExceptions.java ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogExceptions.java b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogExceptions.java index c151e3b..8ba3d59 100644 --- a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogExceptions.java +++ b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogExceptions.java @@ -115,10 +115,11 @@ public class TestCatalogExceptions { public void testCreateTableWithWrongUri() throws Exception { // TODO: currently, wrong uri does not occur any exception. String tableName = "wrongUri"; - Schema schema = SchemaFactory.newV1(); - schema.addColumn(CatalogUtil.buildFQName(tableName, "Column"), Type.BLOB); - schema.addColumn(CatalogUtil.buildFQName(tableName, "column"), Type.INT4); - schema.addColumn(CatalogUtil.buildFQName(tableName, "cOlumn"), Type.INT8); + Schema schema = SchemaBuilder.builder() + .add(CatalogUtil.buildFQName(tableName, "Column"), Type.BLOB) + .add(CatalogUtil.buildFQName(tableName, "column"), Type.INT4) + .add(CatalogUtil.buildFQName(tableName, "cOlumn"), Type.INT8) + .build(); Path path = new Path(CommonTestingUtil.getTestDir(), tableName); catalog.createTable( new TableDesc( http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestLinkedMetadataManager.java ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestLinkedMetadataManager.java b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestLinkedMetadataManager.java index d381ebd..dece380 100644 --- a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestLinkedMetadataManager.java +++ b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestLinkedMetadataManager.java @@ -42,25 +42,25 @@ public class TestLinkedMetadataManager { static TableDesc TABLE1 = new TableDesc( "table1", - SchemaFactory.newV1(new Column[]{new Column("c1", Type.INT8)}), + SchemaBuilder.builder().addAll(new Column[]{new Column("c1", Type.INT8)}).build(), "TEXT", new KeyValueSet(), URI.create("http://space1/x/table1") ); static TableDesc TABLE2 = new TableDesc( "table2", - SchemaFactory.newV1(new Column[]{new Column("c1", Type.INT8)}), + SchemaBuilder.builder().addAll(new Column[]{new Column("c1", Type.INT8)}).build(), "TEXT", new KeyValueSet(), URI.create("http://space1/x/table2") ); static TableDesc TABLE3 = new TableDesc( "table3", - SchemaFactory.newV1(new Column[]{new Column("c1", Type.INT8)}), + SchemaBuilder.builder().addAll(new Column[]{new Column("c1", Type.INT8)}).build(), "TEXT", new KeyValueSet(), URI.create("http://space1/x/table3") ); static TableDesc TABLE4 = new TableDesc( "table4", - SchemaFactory.newV1(new Column[]{new Column("c1", Type.INT8)}), + SchemaBuilder.builder().addAll(new Column[]{new Column("c1", Type.INT8)}).build(), "TEXT", new KeyValueSet(), URI.create("http://space1/x/table4") ); @@ -211,7 +211,7 @@ public class TestLinkedMetadataManager { public void testCreateTable() throws Exception { TableDesc tb = new TableDesc( "space1.errortable", - SchemaFactory.newV1(), + SchemaBuilder.empty(), new TableMeta("x", new KeyValueSet()), URI.create("file:///")); http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-client/src/main/java/org/apache/tajo/client/TajoClientUtil.java ---------------------------------------------------------------------- diff --git a/tajo-client/src/main/java/org/apache/tajo/client/TajoClientUtil.java b/tajo-client/src/main/java/org/apache/tajo/client/TajoClientUtil.java index 733bcec..2fe67ed 100644 --- a/tajo-client/src/main/java/org/apache/tajo/client/TajoClientUtil.java +++ b/tajo-client/src/main/java/org/apache/tajo/client/TajoClientUtil.java @@ -23,7 +23,7 @@ import org.apache.tajo.QueryIdFactory; import org.apache.tajo.SessionVars; import org.apache.tajo.TajoProtos; import org.apache.tajo.catalog.CatalogUtil; -import org.apache.tajo.catalog.Schema; +import org.apache.tajo.catalog.SchemaBuilder; import org.apache.tajo.catalog.SchemaFactory; import org.apache.tajo.catalog.TableDesc; import org.apache.tajo.exception.QueryNotFoundException; @@ -107,9 +107,9 @@ public class TajoClientUtil { } public static final ResultSet NULL_RESULT_SET = - new TajoMemoryResultSet(QueryIdFactory.NULL_QUERY_ID, SchemaFactory.newV1(), null, null); + new TajoMemoryResultSet(QueryIdFactory.NULL_QUERY_ID, SchemaBuilder.empty(), null, null); public static TajoMemoryResultSet createNullResultSet(QueryId queryId) { - return new TajoMemoryResultSet(queryId, SchemaFactory.newV1(), null, null); + return new TajoMemoryResultSet(queryId, SchemaBuilder.empty(), null, null); } } http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java ---------------------------------------------------------------------- diff --git a/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java b/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java index 6e7092b..d73a713 100644 --- a/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java +++ b/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java @@ -19,7 +19,7 @@ package org.apache.tajo.jdbc; import org.apache.tajo.catalog.Schema; -import org.apache.tajo.catalog.SchemaFactory; +import org.apache.tajo.catalog.SchemaBuilder; import org.apache.tajo.common.TajoDataTypes.Type; import org.apache.tajo.storage.Tuple; @@ -36,13 +36,16 @@ public class TajoMetaDataResultSet extends TajoResultSetBase { } public TajoMetaDataResultSet(List<String> columns, List<Type> types, List<MetaDataTuple> values) { - super(null, SchemaFactory.newV1(), null); + super(null, SchemaBuilder.empty(), null); + + SchemaBuilder builder = SchemaBuilder.builder(); int index = 0; if(columns != null) { for(String columnName: columns) { - schema.addColumn(columnName, types.get(index++)); + builder.add(columnName, types.get(index++)); } } + this.schema = builder.build(); setDataTuples(values); } http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-cluster-tests/src/test/java/org/apache/tajo/BackendTestingUtil.java ---------------------------------------------------------------------- diff --git a/tajo-cluster-tests/src/test/java/org/apache/tajo/BackendTestingUtil.java b/tajo-cluster-tests/src/test/java/org/apache/tajo/BackendTestingUtil.java index 062db47..28605d3 100644 --- a/tajo-cluster-tests/src/test/java/org/apache/tajo/BackendTestingUtil.java +++ b/tajo-cluster-tests/src/test/java/org/apache/tajo/BackendTestingUtil.java @@ -22,7 +22,7 @@ import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.tajo.catalog.CatalogUtil; import org.apache.tajo.catalog.Schema; -import org.apache.tajo.catalog.SchemaFactory; +import org.apache.tajo.catalog.SchemaBuilder; import org.apache.tajo.catalog.TableMeta; import org.apache.tajo.common.TajoDataTypes.Type; import org.apache.tajo.conf.TajoConf; @@ -36,9 +36,10 @@ public class BackendTestingUtil { public final static TableMeta mockupMeta; static { - mockupSchema = SchemaFactory.newV1(); - mockupSchema.addColumn("deptname", Type.TEXT); - mockupSchema.addColumn("score", Type.INT4); + mockupSchema = SchemaBuilder.builder() + .add("deptname", Type.TEXT) + .add("score", Type.INT4) + .build(); mockupMeta = CatalogUtil.newTableMeta("TEXT"); } http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/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 99fe6ba..d71dbdc 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 @@ -55,6 +55,22 @@ public class Identifier { return sb.toString(); } + /** + * Raw string of an identifier + * @param policy Identifier Policy + * @return raw string + */ + public String raw(IdentifierPolicy policy) { + StringBuilder sb = new StringBuilder(); + if (quoted) { + appendByCase(sb, policy.storesQuotedIdentifierAs()); + } else { + appendByCase(sb, policy.storesUnquotedIdentifierAs()); + } + + return sb.toString(); + } + private void appendByCase(StringBuilder sb, IdentifierCase c) { switch (c) { case LowerCase: http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/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 b252d82..57317b5 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 @@ -20,6 +20,7 @@ package org.apache.tajo.schema; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; +import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableList; import org.apache.tajo.util.StringUtils; @@ -44,6 +45,20 @@ public class QualifiedIdentifier { }); } + /** + * Raw string of qualified identifier + * @param policy Identifier Policy + * @return raw string + */ + public String raw(final IdentifierPolicy policy) { + return StringUtils.join(names, policy.getIdentifierSeperator(), new Function<Identifier, String>() { + @Override + public String apply(@Nullable Identifier identifier) { + return identifier.raw(policy); + } + }); + } + @Override public String toString() { return displayString(DefaultPolicy()); http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/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 b939f30..dfd0b72 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 @@ -25,13 +25,15 @@ import org.apache.tajo.util.StringUtils; import java.util.Arrays; import java.util.Collection; +import java.util.Iterator; +import java.util.Objects; import static org.apache.tajo.common.TajoDataTypes.Type.RECORD; /** * A field is a pair of a name and a type. Schema is an ordered list of fields. */ -public class Schema { +public class Schema implements Iterable<Schema.NamedType> { private final ImmutableList<NamedType> namedTypes; public Schema(Collection<NamedType> namedTypes) { @@ -63,6 +65,11 @@ public class Schema { return new NamedPrimitiveType(name, type); } + @Override + public Iterator<NamedType> iterator() { + return namedTypes.iterator(); + } + public static abstract class NamedType { protected final QualifiedIdentifier name; @@ -73,34 +80,100 @@ public class Schema { public QualifiedIdentifier name() { return this.name; } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public boolean equals(Object obj) { + + if (this == obj) { + return true; + } + + if (obj instanceof NamedType) { + NamedType other = (NamedType) obj; + return this.name.equals(other.name); + } + + return false; + } } public static class NamedPrimitiveType extends NamedType { private final Type type; - NamedPrimitiveType(QualifiedIdentifier name, Type type) { + public NamedPrimitiveType(QualifiedIdentifier name, Type type) { super(name); Preconditions.checkArgument(type.baseType() != RECORD); this.type = type; } + public Type type() { + return type; + } + @Override public String toString() { return name + " " + type; } + + @Override + public int hashCode() { + return Objects.hash(name, type); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + + if (obj instanceof NamedPrimitiveType) { + NamedPrimitiveType other = (NamedPrimitiveType) obj; + return super.equals(other) && this.type.equals(type); + } + + return false; + } } public static class NamedStructType extends NamedType { - private final ImmutableList<NamedType> namedTypes; + private final ImmutableList<NamedType> fields; - public NamedStructType(QualifiedIdentifier name, Collection<NamedType> namedTypes) { + public NamedStructType(QualifiedIdentifier name, Collection<NamedType> fields) { super(name); - this.namedTypes = ImmutableList.copyOf(namedTypes); + this.fields = ImmutableList.copyOf(fields); + } + + public Collection<NamedType> fields() { + return this.fields; } @Override public String toString() { - return name + " record (" + StringUtils.join(namedTypes, ",") + ")"; + return name + " record (" + StringUtils.join(fields, ",") + ")"; + } + + @Override + public int hashCode() { + return Objects.hash(name, fields); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + + if (obj instanceof NamedStructType) { + NamedStructType other = (NamedStructType) obj; + return super.equals(other) && fields.equals(other.fields); + } + + return false; } } } http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-common/src/main/java/org/apache/tajo/type/Any.java ---------------------------------------------------------------------- diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Any.java b/tajo-common/src/main/java/org/apache/tajo/type/Any.java new file mode 100644 index 0000000..d61afae --- /dev/null +++ b/tajo-common/src/main/java/org/apache/tajo/type/Any.java @@ -0,0 +1,33 @@ +/** + * Licensed 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.type; + +import org.apache.tajo.common.TajoDataTypes; + +import java.util.Objects; + +public class Any extends Type { + + public static Any INSTANCE = new Any(); + + @Override + public TajoDataTypes.Type baseType() { + return TajoDataTypes.Type.ANY; + } +} http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-common/src/main/java/org/apache/tajo/type/Array.java ---------------------------------------------------------------------- diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Array.java b/tajo-common/src/main/java/org/apache/tajo/type/Array.java index cd02d1e..9a595fd 100644 --- a/tajo-common/src/main/java/org/apache/tajo/type/Array.java +++ b/tajo-common/src/main/java/org/apache/tajo/type/Array.java @@ -34,6 +34,11 @@ public class Array extends Type { } @Override + public boolean hasParam() { + return true; + } + + @Override public TajoDataTypes.Type baseType() { return TajoDataTypes.Type.ARRAY; } http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-common/src/main/java/org/apache/tajo/type/Char.java ---------------------------------------------------------------------- diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Char.java b/tajo-common/src/main/java/org/apache/tajo/type/Char.java index 04857ec..348e041 100644 --- a/tajo-common/src/main/java/org/apache/tajo/type/Char.java +++ b/tajo-common/src/main/java/org/apache/tajo/type/Char.java @@ -34,6 +34,11 @@ public class Char extends Type { } @Override + public boolean hasParam() { + return true; + } + + @Override public TajoDataTypes.Type baseType() { return TajoDataTypes.Type.CHAR; } http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-common/src/main/java/org/apache/tajo/type/Inet4.java ---------------------------------------------------------------------- diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Inet4.java b/tajo-common/src/main/java/org/apache/tajo/type/Inet4.java new file mode 100644 index 0000000..05dc0cf --- /dev/null +++ b/tajo-common/src/main/java/org/apache/tajo/type/Inet4.java @@ -0,0 +1,28 @@ +/** + * Licensed 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.type; + +import org.apache.tajo.common.TajoDataTypes; + +public class Inet4 extends Type { + @Override + public TajoDataTypes.Type baseType() { + return TajoDataTypes.Type.INET4; + } +} http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-common/src/main/java/org/apache/tajo/type/Interval.java ---------------------------------------------------------------------- diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Interval.java b/tajo-common/src/main/java/org/apache/tajo/type/Interval.java new file mode 100644 index 0000000..6c99526 --- /dev/null +++ b/tajo-common/src/main/java/org/apache/tajo/type/Interval.java @@ -0,0 +1,28 @@ +/** + * Licensed 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.type; + +import org.apache.tajo.common.TajoDataTypes; + +public class Interval extends Type { + @Override + public TajoDataTypes.Type baseType() { + return TajoDataTypes.Type.INTERVAL; + } +} http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-common/src/main/java/org/apache/tajo/type/Null.java ---------------------------------------------------------------------- diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Null.java b/tajo-common/src/main/java/org/apache/tajo/type/Null.java new file mode 100644 index 0000000..fe823e1 --- /dev/null +++ b/tajo-common/src/main/java/org/apache/tajo/type/Null.java @@ -0,0 +1,28 @@ +/** + * Licensed 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.type; + +import org.apache.tajo.common.TajoDataTypes; + +public class Null extends Type { + @Override + public TajoDataTypes.Type baseType() { + return TajoDataTypes.Type.NULL_TYPE; + } +} http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-common/src/main/java/org/apache/tajo/type/Protobuf.java ---------------------------------------------------------------------- diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Protobuf.java b/tajo-common/src/main/java/org/apache/tajo/type/Protobuf.java new file mode 100644 index 0000000..59d3c1a --- /dev/null +++ b/tajo-common/src/main/java/org/apache/tajo/type/Protobuf.java @@ -0,0 +1,42 @@ +/** + * Licensed 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.type; + +import org.apache.tajo.common.TajoDataTypes; + +public class Protobuf extends Type { + private String msgName; + + public Protobuf(String msgName) { + this.msgName = msgName; + } + + public String getMessageName() { + return this.msgName; + } + + @Override + public TajoDataTypes.Type baseType() { + return TajoDataTypes.Type.PROTOBUF; + } + + public boolean hasParam() { + return true; + } +} http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-common/src/main/java/org/apache/tajo/type/Type.java ---------------------------------------------------------------------- diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Type.java b/tajo-common/src/main/java/org/apache/tajo/type/Type.java index 363ffc4..e1a7180 100644 --- a/tajo-common/src/main/java/org/apache/tajo/type/Type.java +++ b/tajo-common/src/main/java/org/apache/tajo/type/Type.java @@ -24,8 +24,13 @@ import java.util.Arrays; import java.util.Collection; public abstract class Type { + public abstract TajoDataTypes.Type baseType(); + public boolean hasParam() { + return false; + } + protected static String typeName(TajoDataTypes.Type type) { return type.name().toLowerCase(); } @@ -48,6 +53,14 @@ public abstract class Type { return typeName(baseType()); } + public boolean isStruct() { + return this.baseType() == TajoDataTypes.Type.RECORD; + } + + public static Any Any() { + return Any.INSTANCE; + } + public static Bool Bool() { return new Bool(); } @@ -94,6 +107,10 @@ public abstract class Type { return new Timestamp(); } + public static Interval Interval() { + return new Interval(); + } + public static Char Char(int len) { return new Char(len); } @@ -110,6 +127,10 @@ public abstract class Type { return new Blob(); } + public static Inet4 Inet4() { + return new Inet4(); + } + public static Struct Struct(Collection<Type> types) { return new Struct(types); } @@ -125,4 +146,8 @@ public abstract class Type { public static Map Map(Type keyType, Type valueType) { return new Map(keyType, valueType); } + + public static Null Null() { + return new Null(); + } } http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-common/src/main/java/org/apache/tajo/type/Varchar.java ---------------------------------------------------------------------- diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Varchar.java b/tajo-common/src/main/java/org/apache/tajo/type/Varchar.java index 6dc2c50..fbfac17 100644 --- a/tajo-common/src/main/java/org/apache/tajo/type/Varchar.java +++ b/tajo-common/src/main/java/org/apache/tajo/type/Varchar.java @@ -39,6 +39,11 @@ public class Varchar extends Type { } @Override + public boolean hasParam() { + return true; + } + + @Override public String toString() { return "varchar(" + length + ")"; } http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/cli/tools/TestDDLBuilder.java ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/cli/tools/TestDDLBuilder.java b/tajo-core-tests/src/test/java/org/apache/tajo/cli/tools/TestDDLBuilder.java index 51a017e..8790a38 100644 --- a/tajo-core-tests/src/test/java/org/apache/tajo/cli/tools/TestDDLBuilder.java +++ b/tajo-core-tests/src/test/java/org/apache/tajo/cli/tools/TestDDLBuilder.java @@ -37,17 +37,19 @@ public class TestDDLBuilder { private static final PartitionMethodDesc partitionMethod1; static { - schema1 = SchemaFactory.newV1(); - schema1.addColumn("name", TajoDataTypes.Type.BLOB); - schema1.addColumn("addr", TajoDataTypes.Type.TEXT); + schema1 = SchemaBuilder.builder() + .add("name", TajoDataTypes.Type.BLOB) + .add("addr", TajoDataTypes.Type.TEXT) + .build(); meta1 = CatalogUtil.newTableMeta("TEXT"); meta1.putProperty(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER); meta1.putProperty(StorageConstants.COMPRESSION_CODEC, GzipCodec.class.getName()); - Schema expressionSchema = SchemaFactory.newV1(); - expressionSchema.addColumn("key", TajoDataTypes.Type.INT4); - expressionSchema.addColumn("key2", TajoDataTypes.Type.TEXT); + Schema expressionSchema = SchemaBuilder.builder() + .add("key", TajoDataTypes.Type.INT4) + .add("key2", TajoDataTypes.Type.TEXT) + .build(); partitionMethod1 = new PartitionMethodDesc( "db1", "table1", @@ -67,15 +69,17 @@ public class TestDDLBuilder { @Test public void testBuildDDLQuotedTableName() throws Exception { - Schema schema2 = SchemaFactory.newV1(); - schema2.addColumn("name", TajoDataTypes.Type.BLOB); - schema2.addColumn("addr", TajoDataTypes.Type.TEXT); - schema2.addColumn("FirstName", TajoDataTypes.Type.TEXT); - schema2.addColumn("LastName", TajoDataTypes.Type.TEXT); - schema2.addColumn("with", TajoDataTypes.Type.TEXT); - - Schema expressionSchema2 = SchemaFactory.newV1(); - expressionSchema2.addColumn("BirthYear", TajoDataTypes.Type.INT4); + Schema schema2 = SchemaBuilder.builder() + .add("name", TajoDataTypes.Type.BLOB) + .add("addr", TajoDataTypes.Type.TEXT) + .add("FirstName", TajoDataTypes.Type.TEXT) + .add("LastName", TajoDataTypes.Type.TEXT) + .add("with", TajoDataTypes.Type.TEXT) + .build(); + + Schema expressionSchema2 = SchemaBuilder.builder() + .add("BirthYear", TajoDataTypes.Type.INT4) + .build(); PartitionMethodDesc partitionMethod2 = new PartitionMethodDesc( "db1", http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java b/tajo-core-tests/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java index aea82ab..0fd29d9 100644 --- a/tajo-core-tests/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java +++ b/tajo-core-tests/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java @@ -124,7 +124,7 @@ public class TestTajoCliNegatives extends QueryTestCaseBase { client.updateQuery("CREATE TABLE TestTajoCliNegatives.table12u79 ( name RECORD(last TEXT, first TEXT) )"); assertScriptFailure("select name FROM TestTajoCliNegatives.table12u79", - "ERROR: not implemented feature: record field projection\n"); + "ERROR: org.apache.tajo.exception.NotImplementedException: not implemented feature: record projection\n"); } finally { client.updateQuery("DROP TABLE IF EXISTS TestTajoCliNegatives.table12u79"); http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/client/TestCatalogAdminClientExceptions.java ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/client/TestCatalogAdminClientExceptions.java b/tajo-core-tests/src/test/java/org/apache/tajo/client/TestCatalogAdminClientExceptions.java index 6abc3fb..d2b3a78 100644 --- a/tajo-core-tests/src/test/java/org/apache/tajo/client/TestCatalogAdminClientExceptions.java +++ b/tajo-core-tests/src/test/java/org/apache/tajo/client/TestCatalogAdminClientExceptions.java @@ -22,8 +22,7 @@ import org.apache.hadoop.fs.Path; import org.apache.tajo.QueryTestCaseBase; import org.apache.tajo.TajoTestingCluster; import org.apache.tajo.TpchTestBase; -import org.apache.tajo.catalog.Schema; -import org.apache.tajo.catalog.SchemaFactory; +import org.apache.tajo.catalog.SchemaBuilder; import org.apache.tajo.catalog.TableMeta; import org.apache.tajo.conf.TajoConf; import org.apache.tajo.exception.*; @@ -68,20 +67,20 @@ public class TestCatalogAdminClientExceptions extends QueryTestCaseBase { @Test(expected = UnavailableTableLocationException.class) public final void testCreateExternalTableUnavailableLocation() throws TajoException { - client.createExternalTable("table128237", SchemaFactory.newV1(), URI.create("/tajo/test1bcd"), + client.createExternalTable("table128237", SchemaBuilder.empty(), URI.create("/tajo/test1bcd"), new TableMeta("TEXT", new KeyValueSet())); } @Test(expected = DuplicateTableException.class) public final void testCreateExternalTableDuplicated() throws TajoException { - client.createExternalTable("default.lineitem", SchemaFactory.newV1(), URI.create("/"), + client.createExternalTable("default.lineitem", SchemaBuilder.empty(), URI.create("/"), new TableMeta("TEXT", new KeyValueSet())); } @Test(expected = InsufficientPrivilegeException.class) public final void testCreateExternalTableInsufficientPrivilege() throws TajoException { Path p = TajoConf.getWarehouseDir(conf); - client.createExternalTable("information_schema.table1237891", SchemaFactory.newV1(), p.toUri(), + client.createExternalTable("information_schema.table1237891", SchemaBuilder.empty(), p.toUri(), new TableMeta("TEXT", new KeyValueSet())); } http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/codegen/TestEvalCodeGenerator.java ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/codegen/TestEvalCodeGenerator.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/codegen/TestEvalCodeGenerator.java index cdb86a1..adbfd48 100644 --- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/codegen/TestEvalCodeGenerator.java +++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/codegen/TestEvalCodeGenerator.java @@ -21,7 +21,7 @@ package org.apache.tajo.engine.codegen; import org.apache.tajo.catalog.CatalogUtil; import org.apache.tajo.catalog.Schema; -import org.apache.tajo.catalog.SchemaFactory; +import org.apache.tajo.catalog.SchemaBuilder; import org.apache.tajo.common.TajoDataTypes; import org.apache.tajo.datum.NullDatum; import org.apache.tajo.engine.eval.ExprTestBase; @@ -30,18 +30,20 @@ import org.junit.Test; public class TestEvalCodeGenerator extends ExprTestBase { private static Schema schema; + static { - schema = SchemaFactory.newV1(); - schema.addColumn("col0", TajoDataTypes.Type.INT1); - schema.addColumn("col1", TajoDataTypes.Type.INT2); - schema.addColumn("col2", TajoDataTypes.Type.INT4); - schema.addColumn("col3", TajoDataTypes.Type.INT8); - schema.addColumn("col4", TajoDataTypes.Type.FLOAT4); - schema.addColumn("col5", TajoDataTypes.Type.FLOAT8); - schema.addColumn("col6", TajoDataTypes.Type.TEXT); - schema.addColumn("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)); - schema.addColumn("col8", TajoDataTypes.Type.BOOLEAN); - schema.addColumn("nullable", TajoDataTypes.Type.NULL_TYPE); + schema = SchemaBuilder.builder() + .add("col0", TajoDataTypes.Type.INT1) + .add("col1", TajoDataTypes.Type.INT2) + .add("col2", TajoDataTypes.Type.INT4) + .add("col3", TajoDataTypes.Type.INT8) + .add("col4", TajoDataTypes.Type.FLOAT4) + .add("col5", TajoDataTypes.Type.FLOAT8) + .add("col6", TajoDataTypes.Type.TEXT) + .add("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)) + .add("col8", TajoDataTypes.Type.BOOLEAN) + .add("nullable", TajoDataTypes.Type.NULL_TYPE) + .build(); } @Test @@ -66,18 +68,19 @@ public class TestEvalCodeGenerator extends ExprTestBase { @Test public void testNullHandling() throws TajoException { - schema = SchemaFactory.newV1(); - schema.addColumn("col0", TajoDataTypes.Type.INT1); - schema.addColumn("col1", TajoDataTypes.Type.INT2); - schema.addColumn("col2", TajoDataTypes.Type.INT4); - schema.addColumn("col3", TajoDataTypes.Type.INT8); - schema.addColumn("col4", TajoDataTypes.Type.FLOAT4); - schema.addColumn("col5", TajoDataTypes.Type.FLOAT8); - schema.addColumn("col6", TajoDataTypes.Type.TEXT); - schema.addColumn("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 1)); - schema.addColumn("col8", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)); - schema.addColumn("col9", TajoDataTypes.Type.BOOLEAN); - schema.addColumn("nullable", TajoDataTypes.Type.NULL_TYPE); + schema = SchemaBuilder.builder() + .add("col0", TajoDataTypes.Type.INT1) + .add("col1", TajoDataTypes.Type.INT2) + .add("col2", TajoDataTypes.Type.INT4) + .add("col3", TajoDataTypes.Type.INT8) + .add("col4", TajoDataTypes.Type.FLOAT4) + .add("col5", TajoDataTypes.Type.FLOAT8) + .add("col6", TajoDataTypes.Type.TEXT) + .add("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 1)) + .add("col8", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)) + .add("col9", TajoDataTypes.Type.BOOLEAN) + .add("nullable", TajoDataTypes.Type.NULL_TYPE) + .build(); testEval(schema, "table1", ",1,2,3,4.5,6.5,F6,abc,abc,t", "select col0 is null from table1;", new String [] {"t"}); testEval(schema, "table1", "0,,2,3,4.5,6.5,F6,abc,abc,t,", "select col1 is null from table1;", new String [] {"t"}); @@ -106,9 +109,10 @@ public class TestEvalCodeGenerator extends ExprTestBase { @Test public void testComparison() throws TajoException { - Schema inetSchema = SchemaFactory.newV1(); - inetSchema.addColumn("addr1", TajoDataTypes.Type.INET4); - inetSchema.addColumn("addr2", TajoDataTypes.Type.INET4); + Schema inetSchema = SchemaBuilder.builder() + .add("addr1", TajoDataTypes.Type.INET4) + .add("addr2", TajoDataTypes.Type.INET4) + .build(); testSimpleEval("select (1 > null AND false)", new String[] {"f"}); // unknown - false -> false testSimpleEval("select (1::int8 > null) is null", new String[] {"t"}); @@ -162,9 +166,10 @@ public class TestEvalCodeGenerator extends ExprTestBase { @Test public void testBetweenAsymmetric() throws TajoException { - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col1", TajoDataTypes.Type.INT4); - schema.addColumn("col2", TajoDataTypes.Type.INT4); + Schema schema = SchemaBuilder.builder() + .add("col1", TajoDataTypes.Type.INT4) + .add("col2", TajoDataTypes.Type.INT4) + .build(); testEval(schema, "table1", "0,", "select col1 between 1 and 3 from table1", new String[]{"f"}); testEval(schema, "table1", "1,", "select col1 between 1 and 3 from table1", new String[]{"t"}); testEval(schema, "table1", "2,", "select col1 between 1 and 3 from table1", new String[]{"t"}); @@ -196,9 +201,10 @@ public class TestEvalCodeGenerator extends ExprTestBase { @Test public void testBetweenSymmetric() throws TajoException { - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col1", TajoDataTypes.Type.INT4); - schema.addColumn("col2", TajoDataTypes.Type.INT4); + Schema schema = SchemaBuilder.builder() + .add("col1", TajoDataTypes.Type.INT4) + .add("col2", TajoDataTypes.Type.INT4) + .build(); testEval(schema, "table1", "0,", "select col1 between symmetric 1 and 3 from table1", new String[]{"f"}); testEval(schema, "table1", "1,", "select col1 between symmetric 1 and 3 from table1", new String[]{"t"}); testEval(schema, "table1", "2,", "select col1 between symmetric 1 and 3 from table1", new String[]{"t"}); @@ -231,16 +237,16 @@ public class TestEvalCodeGenerator extends ExprTestBase { @Test public void testUnary() throws TajoException { - schema = SchemaFactory.newV1(); - schema.addColumn("col0", TajoDataTypes.Type.INT1); - schema.addColumn("col1", TajoDataTypes.Type.INT2); - schema.addColumn("col2", TajoDataTypes.Type.INT4); - schema.addColumn("col3", TajoDataTypes.Type.INT8); - schema.addColumn("col4", TajoDataTypes.Type.FLOAT4); - schema.addColumn("col5", TajoDataTypes.Type.FLOAT8); - schema.addColumn("col6", TajoDataTypes.Type.TEXT); - schema.addColumn("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)); - schema.addColumn("col8", TajoDataTypes.Type.BOOLEAN); + schema = SchemaBuilder.builder() + .add("col0", TajoDataTypes.Type.INT1) + .add("col1", TajoDataTypes.Type.INT2) + .add("col2", TajoDataTypes.Type.INT4) + .add("col3", TajoDataTypes.Type.INT8) + .add("col4", TajoDataTypes.Type.FLOAT4) + .add("col5", TajoDataTypes.Type.FLOAT8) + .add("col6", TajoDataTypes.Type.TEXT) + .add("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)) + .add("col8", TajoDataTypes.Type.BOOLEAN).build(); // sign test @@ -303,9 +309,10 @@ public class TestEvalCodeGenerator extends ExprTestBase { testSimpleEval("select length('123456') as col1 ", new String[]{"6"}); testEval(schema, "table1", "0,1,2,3,4.5,6.5", "select 'abc' || 'bbc'", new String [] {"abcbbc"}); - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col1", TajoDataTypes.Type.TEXT); - schema.addColumn("col2", TajoDataTypes.Type.TEXT); + Schema schema = SchemaBuilder.builder() + .add("col1", TajoDataTypes.Type.TEXT) + .add("col2", TajoDataTypes.Type.TEXT) + .build(); testEval(schema, "table1", " trim, abc", "select ltrim(col1) || ltrim(col2) from table1", new String[]{"trimabc"}); } http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTree.java ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTree.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTree.java index 0b33626..e74b108 100644 --- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTree.java +++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTree.java @@ -21,7 +21,7 @@ package org.apache.tajo.engine.eval; import org.apache.tajo.catalog.CatalogUtil; import org.apache.tajo.catalog.Column; import org.apache.tajo.catalog.Schema; -import org.apache.tajo.catalog.SchemaFactory; +import org.apache.tajo.catalog.SchemaBuilder; import org.apache.tajo.common.TajoDataTypes; import org.apache.tajo.common.TajoDataTypes.DataType; import org.apache.tajo.datum.Datum; @@ -43,9 +43,10 @@ public class TestEvalTree extends ExprTestBase { FieldEval e2 = new FieldEval("table1.score", CatalogUtil.newSimpleDataType(INT4)); // it indicates assertCloneEqual(e2); - Schema schema1 = SchemaFactory.newV1(); - schema1.addColumn("table1.id", INT4); - schema1.addColumn("table1.score", INT4); + Schema schema1 = SchemaBuilder.builder() + .add("table1.id", INT4) + .add("table1.score", INT4) + .build(); BinaryEval expr = new BinaryEval(EvalType.PLUS, e1, e2); expr.bind(null, schema1); @@ -396,7 +397,7 @@ public class TestEvalTree extends ExprTestBase { assertEquals(caseWhenEval.bind(null, null).eval(null).asInt4(), 1); } - Schema schema = SchemaFactory.newV1(new Column[]{new Column("test", TajoDataTypes.Type.INT4)}); + Schema schema = SchemaBuilder.builder().addAll(new Column[]{new Column("test", TajoDataTypes.Type.INT4)}).build(); Tuple tuple = new VTuple(new Datum[]{DatumFactory.createText("aaa")}); RegexPredicateEval regexEval = new RegexPredicateEval(false, new FieldEval("test", CatalogUtil.newSimpleDataType(TajoDataTypes.Type.INT4)), new ConstEval(DatumFactory.createText("a*")), false); http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java index 9192235..2846f22 100644 --- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java +++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java @@ -31,9 +31,9 @@ import org.apache.tajo.common.TajoDataTypes; import org.apache.tajo.datum.Datum; import org.apache.tajo.datum.DatumFactory; import org.apache.tajo.engine.function.FunctionLoader; -import org.apache.tajo.parser.sql.SQLAnalyzer; import org.apache.tajo.engine.query.QueryContext; import org.apache.tajo.exception.TajoException; +import org.apache.tajo.parser.sql.SQLAnalyzer; import org.apache.tajo.plan.LogicalPlan; import org.apache.tajo.plan.LogicalPlanner; import org.apache.tajo.plan.Target; @@ -97,10 +97,11 @@ public class TestEvalTreeUtil { catalog.createTablespace(DEFAULT_TABLESPACE_NAME, "hdfs://localhost:1234/warehouse"); catalog.createDatabase(TajoConstants.DEFAULT_DATABASE_NAME, DEFAULT_TABLESPACE_NAME); - Schema schema = SchemaFactory.newV1(); - schema.addColumn("name", TajoDataTypes.Type.TEXT); - schema.addColumn("score", TajoDataTypes.Type.INT4); - schema.addColumn("age", TajoDataTypes.Type.INT4); + Schema schema = SchemaBuilder.builder() + .add("name", TajoDataTypes.Type.TEXT) + .add("score", TajoDataTypes.Type.INT4) + .add("age", TajoDataTypes.Type.INT4) + .build(); TableMeta meta = CatalogUtil.newTableMeta("TEXT"); TableDesc desc = new TableDesc( http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestPredicates.java ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestPredicates.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestPredicates.java index c3cd0a0..cc9da7f 100644 --- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestPredicates.java +++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestPredicates.java @@ -20,17 +20,26 @@ package org.apache.tajo.engine.eval; import org.apache.tajo.catalog.CatalogUtil; import org.apache.tajo.catalog.Schema; -import org.apache.tajo.catalog.SchemaFactory; +import org.apache.tajo.catalog.SchemaBuilder; import org.apache.tajo.common.TajoDataTypes; import org.apache.tajo.exception.TajoException; import org.junit.Test; -import static org.apache.tajo.common.TajoDataTypes.Type.BOOLEAN; -import static org.apache.tajo.common.TajoDataTypes.Type.INT4; -import static org.apache.tajo.common.TajoDataTypes.Type.TEXT; +import static org.apache.tajo.common.TajoDataTypes.Type.*; public class TestPredicates extends ExprTestBase { + public static final Schema FourIntSchema; + + static { + FourIntSchema = SchemaBuilder.builder() + .add("col1", INT4) + .add("col2", INT4) + .add("col3", INT4) + .add("col4", INT4) + .build(); + } + ////////////////////////////////////////////////////////////////// // Logical Operator ////////////////////////////////////////////////////////////////// @@ -87,10 +96,11 @@ public class TestPredicates extends ExprTestBase { testSimpleEval("select (not (1 > null)) is null;", new String[] {"t"}); - Schema schema1 = SchemaFactory.newV1(); - schema1.addColumn("col1", INT4); - schema1.addColumn("col2", INT4); - schema1.addColumn("col3", INT4); + Schema schema1 = SchemaBuilder.builder() + .add("col1", INT4) + .add("col2", INT4) + .add("col3", INT4) + .build(); testEval(schema1, "table1", "123,123,456,-123", @@ -111,26 +121,22 @@ public class TestPredicates extends ExprTestBase { @Test public void testComparisonEqual() throws TajoException { - - - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col0", TajoDataTypes.Type.INT1); - schema.addColumn("col1", TajoDataTypes.Type.INT2); - schema.addColumn("col2", TajoDataTypes.Type.INT4); - schema.addColumn("col3", TajoDataTypes.Type.INT8); - schema.addColumn("col4", TajoDataTypes.Type.FLOAT4); - schema.addColumn("col5", TajoDataTypes.Type.FLOAT8); - schema.addColumn("col6", TajoDataTypes.Type.TEXT); - schema.addColumn("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)); - schema.addColumn("nullable", TajoDataTypes.Type.INT4); + Schema schema = SchemaBuilder.builder() + .add("col0", TajoDataTypes.Type.INT1) + .add("col1", TajoDataTypes.Type.INT2) + .add("col2", TajoDataTypes.Type.INT4) + .add("col3", TajoDataTypes.Type.INT8) + .add("col4", TajoDataTypes.Type.FLOAT4) + .add("col5", TajoDataTypes.Type.FLOAT8) + .add("col6", TajoDataTypes.Type.TEXT) + .add("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)) + .add("nullable", TajoDataTypes.Type.INT4) + .build(); testEval(schema, "t1", "0,1,2,3,4.1,5.1,cmp,asm,", "SELECT col6 = 'cmp' from t1", new String [] {"t"}); - Schema schema1 = SchemaFactory.newV1(); - schema1.addColumn("col1", INT4); - schema1.addColumn("col2", INT4); - schema1.addColumn("col3", INT4); - schema1.addColumn("col4", INT4); + Schema schema1 = FourIntSchema; + testEval(schema1, "table1", "123,123,456,-123", "select col1 = col2, col1 = col3, col1 = col4 from table1", @@ -143,11 +149,8 @@ public class TestPredicates extends ExprTestBase { @Test public void testComparisonNotEqual() throws TajoException { - Schema schema1 = SchemaFactory.newV1(); - schema1.addColumn("col1", INT4); - schema1.addColumn("col2", INT4); - schema1.addColumn("col3", INT4); - schema1.addColumn("col4", INT4); + Schema schema1 = FourIntSchema; + testEval(schema1, "table1", "123,123,456,-123", "select col1 <> col2, col1 <> col3, col1 <> col4 from table1", @@ -160,11 +163,8 @@ public class TestPredicates extends ExprTestBase { @Test public void testComparisonLessThan() throws TajoException { - Schema schema1 = SchemaFactory.newV1(); - schema1.addColumn("col1", INT4); - schema1.addColumn("col2", INT4); - schema1.addColumn("col3", INT4); - schema1.addColumn("col4", INT4); + Schema schema1 = FourIntSchema; + testEval(schema1, "table1", "123,123,456,-123", "select col1 < col2, col1 < col3, col1 < col4 from table1", @@ -177,11 +177,8 @@ public class TestPredicates extends ExprTestBase { @Test public void testComparisonLessThanEqual() throws TajoException { - Schema schema1 = SchemaFactory.newV1(); - schema1.addColumn("col1", INT4); - schema1.addColumn("col2", INT4); - schema1.addColumn("col3", INT4); - schema1.addColumn("col4", INT4); + Schema schema1 = FourIntSchema; + testEval(schema1, "table1", "123,123,456,-123", "select col1 <= col2, col1 <= col3, col1 <= col4 from table1", @@ -194,11 +191,8 @@ public class TestPredicates extends ExprTestBase { @Test public void testComparisonGreaterThan() throws TajoException { - Schema schema1 = SchemaFactory.newV1(); - schema1.addColumn("col1", INT4); - schema1.addColumn("col2", INT4); - schema1.addColumn("col3", INT4); - schema1.addColumn("col4", INT4); + Schema schema1 = FourIntSchema; + testEval(schema1, "table1", "123,123,456,-123", "select col1 > col2, col3 > col2, col1 > col4 from table1", @@ -211,11 +205,8 @@ public class TestPredicates extends ExprTestBase { @Test public void testComparisonGreaterThanEqual() throws TajoException { - Schema schema1 = SchemaFactory.newV1(); - schema1.addColumn("col1", INT4); - schema1.addColumn("col2", INT4); - schema1.addColumn("col3", INT4); - schema1.addColumn("col4", INT4); + Schema schema1 = FourIntSchema; + testEval(schema1, "table1", "123,123,456,-123", "select col1 >= col2, col3 >= col2, col1 >= col4 from table1", @@ -232,10 +223,11 @@ public class TestPredicates extends ExprTestBase { @Test public void testBetween() throws TajoException { - Schema schema2 = SchemaFactory.newV1(); - schema2.addColumn("col1", TEXT); - schema2.addColumn("col2", TEXT); - schema2.addColumn("col3", TEXT); + Schema schema2 = SchemaBuilder.builder() + .add("col1", TEXT) + .add("col2", TEXT) + .add("col3", TEXT) + .build(); // constant checker testEval(schema2, "table1", "b,a,c", "select col1 between 'a' and 'c' from table1", new String[]{"t"}); @@ -256,11 +248,12 @@ public class TestPredicates extends ExprTestBase { @Test public void testBetween2() throws TajoException { // for TAJO-249 - Schema schema3 = SchemaFactory.newV1(); - schema3.addColumn("date_a", INT4); - schema3.addColumn("date_b", INT4); - schema3.addColumn("date_c", INT4); - schema3.addColumn("date_d", INT4); + Schema schema3 = SchemaBuilder.builder() + .add("date_a", INT4) + .add("date_b", INT4) + .add("date_c", INT4) + .add("date_d", INT4) + .build(); String query = "select " + "case " + @@ -295,10 +288,11 @@ public class TestPredicates extends ExprTestBase { @Test public void testInPredicateWithConstant() throws TajoException { - Schema schema2 = SchemaFactory.newV1(); - schema2.addColumn("col1", TEXT); - schema2.addColumn("col2", TEXT); - schema2.addColumn("col3", TEXT); + Schema schema2 = SchemaBuilder.builder() + .add("col1", TEXT) + .add("col2", TEXT) + .add("col3", TEXT) + .build(); testEval(schema2, "table1", "a,b,c", "select col1 in ('a'), col2 in ('a', 'c') from table1", new String[]{"t","f"}); testEval(schema2, "table1", "a,,c", "select col1 in ('a','b','c'), (col2 in ('a', 'c')) is null from table1", @@ -320,10 +314,11 @@ public class TestPredicates extends ExprTestBase { @Test public void testInPredicateWithSimpleExprs() throws TajoException { - Schema schema2 = SchemaFactory.newV1(); - schema2.addColumn("col1", TEXT); - schema2.addColumn("col2", INT4); - schema2.addColumn("col3", TEXT); + Schema schema2 = SchemaBuilder.builder() + .add("col1", TEXT) + .add("col2", INT4) + .add("col3", TEXT) + .build(); testEval(schema2, "table1", "abc,2,3", "select col1 in ('a'||'b'||'c'), col2 in (1 + 1, 2 * 10, 2003) from table1", new String[]{"t","t"}); @@ -344,9 +339,10 @@ public class TestPredicates extends ExprTestBase { @Test public void testIsNullPredicate() throws TajoException { - Schema schema1 = SchemaFactory.newV1(); - schema1.addColumn("col1", INT4); - schema1.addColumn("col2", INT4); + Schema schema1 = SchemaBuilder.builder() + .add("col1", INT4) + .add("col2", INT4) + .build(); testEval(schema1, "table1", "123,", "select col1 is null, col2 is null as a from table1", new String[]{"f", "t"}); testEval(schema1, "table1", "123,", "select col1 is not null, col2 is not null as a from table1", @@ -355,9 +351,10 @@ public class TestPredicates extends ExprTestBase { @Test public void testIsNullPredicateWithFunction() throws TajoException { - Schema schema2 = SchemaFactory.newV1(); - schema2.addColumn("col1", TEXT); - schema2.addColumn("col2", TEXT); + Schema schema2 = SchemaBuilder.builder() + .add("col1", TEXT) + .add("col2", TEXT) + .build(); testEval(schema2, "table1", "_123,", "select ltrim(col1, '_') is null, upper(col2) is null as a from table1", new String[]{"f", "t"}); @@ -394,9 +391,10 @@ public class TestPredicates extends ExprTestBase { @Test public void testBooleanTestOnTable() throws TajoException { - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col1", BOOLEAN); - schema.addColumn("col2", BOOLEAN); + Schema schema = SchemaBuilder.builder() + .add("col1", BOOLEAN) + .add("col2", BOOLEAN) + .build(); testEval(schema, "table1", "t,f", "select col1 is true, col2 is false from table1", new String [] {"t", "t"}); testEval(schema, "table1", "t,f", "select col1 is not true, col2 is not false from table1", new String [] {"f", "f"}); http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java index fa4561a..293b02a 100644 --- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java +++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java @@ -21,13 +21,13 @@ package org.apache.tajo.engine.eval; import org.apache.tajo.SessionVars; import org.apache.tajo.catalog.CatalogUtil; import org.apache.tajo.catalog.Schema; -import org.apache.tajo.catalog.SchemaFactory; -import org.apache.tajo.exception.UndefinedFunctionException; +import org.apache.tajo.catalog.SchemaBuilder; import org.apache.tajo.common.TajoDataTypes; import org.apache.tajo.datum.DatumFactory; import org.apache.tajo.datum.TimestampDatum; import org.apache.tajo.engine.query.QueryContext; import org.apache.tajo.exception.TajoException; +import org.apache.tajo.exception.UndefinedFunctionException; import org.apache.tajo.util.datetime.DateTimeUtil; import org.junit.Test; @@ -40,9 +40,9 @@ public class TestSQLExpression extends ExprTestBase { @Test public void testQuotedIdentifiers() throws TajoException { - Schema schema = SchemaFactory.newV1(); - schema.addColumn("컬ë¼1", TEXT); - schema.addColumn("컬ë¼2", TEXT); + Schema schema = SchemaBuilder.builder() + .add("컬ë¼1", TEXT) + .add("컬ë¼2", TEXT).build(); testEval(schema, "í ì´ë¸1", "123,234", "select \"컬ë¼1\"::float, cast (\"컬ë¼2\" as float4) as a from \"í ì´ë¸1\"", new String[]{"123.0", "234.0"}); testEval(schema, @@ -92,17 +92,24 @@ public class TestSQLExpression extends ExprTestBase { testSimpleEval("select cast (123.0 as double)", new String[] {"123.0"}); } + private static final Schema TestSchema1; + + static { + TestSchema1 = SchemaBuilder.builder() + .add("col0", INT1) + .add("col1", INT2) + .add("col2", INT4) + .add("col3", INT8) + .add("col4", FLOAT4) + .add("col5", FLOAT8) + .add("col6", TEXT) + .add("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)) + .build(); + } + @Test public void testExplicitCast() throws TajoException { - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col0", INT1); - schema.addColumn("col1", INT2); - schema.addColumn("col2", INT4); - schema.addColumn("col3", INT8); - schema.addColumn("col4", FLOAT4); - schema.addColumn("col5", FLOAT8); - schema.addColumn("col6", TEXT); - schema.addColumn("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)); + Schema schema = TestSchema1; testSimpleEval("select cast (1 as char)", new String[]{"1"}); testSimpleEval("select cast (119 as char)", new String[] {"1"}); @@ -174,15 +181,7 @@ public class TestSQLExpression extends ExprTestBase { @Test public void testImplicitCastForInt1() throws TajoException { - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col0", TajoDataTypes.Type.INT1); - schema.addColumn("col1", TajoDataTypes.Type.INT2); - schema.addColumn("col2", TajoDataTypes.Type.INT4); - schema.addColumn("col3", TajoDataTypes.Type.INT8); - schema.addColumn("col4", TajoDataTypes.Type.FLOAT4); - schema.addColumn("col5", TajoDataTypes.Type.FLOAT8); - schema.addColumn("col6", TajoDataTypes.Type.TEXT); - schema.addColumn("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)); + Schema schema = TestSchema1; testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7", "select col0 + col0 from table1;", new String [] {"0"}); testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7", "select col0 + col1 from table1;", new String [] {"1"}); @@ -276,15 +275,7 @@ public class TestSQLExpression extends ExprTestBase { @Test public void testImplicitCastForInt2() throws TajoException { - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col0", TajoDataTypes.Type.INT1); - schema.addColumn("col1", TajoDataTypes.Type.INT2); - schema.addColumn("col2", TajoDataTypes.Type.INT4); - schema.addColumn("col3", TajoDataTypes.Type.INT8); - schema.addColumn("col4", TajoDataTypes.Type.FLOAT4); - schema.addColumn("col5", TajoDataTypes.Type.FLOAT8); - schema.addColumn("col6", TajoDataTypes.Type.TEXT); - schema.addColumn("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)); + Schema schema = TestSchema1; testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7", "select col1 + col0 from table1;", new String [] {"1"}); testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7", "select col1 + col1 from table1;", new String [] {"2"}); @@ -378,15 +369,7 @@ public class TestSQLExpression extends ExprTestBase { @Test public void testImplicitCastForInt4() throws TajoException { - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col0", TajoDataTypes.Type.INT1); - schema.addColumn("col1", TajoDataTypes.Type.INT2); - schema.addColumn("col2", TajoDataTypes.Type.INT4); - schema.addColumn("col3", TajoDataTypes.Type.INT8); - schema.addColumn("col4", TajoDataTypes.Type.FLOAT4); - schema.addColumn("col5", TajoDataTypes.Type.FLOAT8); - schema.addColumn("col6", TajoDataTypes.Type.TEXT); - schema.addColumn("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)); + Schema schema = TestSchema1; testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7", "select col2 + col0 from table1;", new String [] {"2"}); testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7", "select col2 + col1 from table1;", new String [] {"3"}); @@ -481,15 +464,7 @@ public class TestSQLExpression extends ExprTestBase { @Test public void testImplicitCastForInt8() throws TajoException { - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col0", TajoDataTypes.Type.INT1); - schema.addColumn("col1", TajoDataTypes.Type.INT2); - schema.addColumn("col2", TajoDataTypes.Type.INT4); - schema.addColumn("col3", TajoDataTypes.Type.INT8); - schema.addColumn("col4", TajoDataTypes.Type.FLOAT4); - schema.addColumn("col5", TajoDataTypes.Type.FLOAT8); - schema.addColumn("col6", TajoDataTypes.Type.TEXT); - schema.addColumn("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)); + Schema schema = TestSchema1; testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7", "select col3 + col0 from table1;", new String[]{"3"}); testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7", "select col3 + col1 from table1;", new String [] {"4"}); @@ -588,15 +563,7 @@ public class TestSQLExpression extends ExprTestBase { @Test public void testImplicitCastForFloat4() throws TajoException { - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col0", TajoDataTypes.Type.INT1); - schema.addColumn("col1", TajoDataTypes.Type.INT2); - schema.addColumn("col2", TajoDataTypes.Type.INT4); - schema.addColumn("col3", TajoDataTypes.Type.INT8); - schema.addColumn("col4", TajoDataTypes.Type.FLOAT4); - schema.addColumn("col5", TajoDataTypes.Type.FLOAT8); - schema.addColumn("col6", TajoDataTypes.Type.TEXT); - schema.addColumn("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)); + Schema schema = TestSchema1; testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7", "select col4 + col0 from table1;", new String [] {"4.1"}); testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7", "select col4 + col1 from table1;", new String [] {"5.1"}); @@ -707,15 +674,7 @@ public class TestSQLExpression extends ExprTestBase { @Test public void testImplicitCastForFloat8() throws TajoException { - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col0", TajoDataTypes.Type.INT1); - schema.addColumn("col1", TajoDataTypes.Type.INT2); - schema.addColumn("col2", TajoDataTypes.Type.INT4); - schema.addColumn("col3", TajoDataTypes.Type.INT8); - schema.addColumn("col4", TajoDataTypes.Type.FLOAT4); - schema.addColumn("col5", TajoDataTypes.Type.FLOAT8); - schema.addColumn("col6", TajoDataTypes.Type.TEXT); - schema.addColumn("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)); + Schema schema = TestSchema1; testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7", "select col5 + col0 from table1;", new String [] {"5.1"}); testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7", "select col5 + col1 from table1;", new String [] {"6.1"}); @@ -827,17 +786,7 @@ public class TestSQLExpression extends ExprTestBase { @Test public void testSigned() throws TajoException { - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col0", TajoDataTypes.Type.INT1); - schema.addColumn("col1", TajoDataTypes.Type.INT2); - schema.addColumn("col2", TajoDataTypes.Type.INT4); - schema.addColumn("col3", TajoDataTypes.Type.INT8); - schema.addColumn("col4", TajoDataTypes.Type.FLOAT4); - schema.addColumn("col5", TajoDataTypes.Type.FLOAT8); - schema.addColumn("col6", TajoDataTypes.Type.TEXT); - schema.addColumn("col7", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3)); - schema.addColumn("col8", TajoDataTypes.Type.BOOLEAN); - + Schema schema = TestSchema1; // sign test testEval(schema, "table1", "0,1,2,3,4.1,5.1,6,7,t", "select +col1 from table1;", new String [] {"1"}); @@ -871,9 +820,10 @@ public class TestSQLExpression extends ExprTestBase { queryContext.put(SessionVars.TIMEZONE, "GMT-6"); TimeZone tz = TimeZone.getTimeZone("GMT-6"); - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col1", TEXT); - schema.addColumn("col2", TEXT); + Schema schema = SchemaBuilder.builder() + .add("col1", TEXT) + .add("col2", TEXT) + .build(); testEval(queryContext, schema, "table1", @@ -903,9 +853,10 @@ public class TestSQLExpression extends ExprTestBase { testSimpleEval("select true", new String[] {"t"}); testSimpleEval("select false", new String[]{"f"}); - Schema schema = SchemaFactory.newV1(); - schema.addColumn("col1", TEXT); - schema.addColumn("col2", TEXT); + Schema schema = SchemaBuilder.builder() + .add("col1", TEXT) + .add("col2", TEXT) + .build(); testEval(schema, "table1", "123,234", "select col1, col2 from table1 where true", new String[]{"123", "234"}); }
