http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericAddSubMulDivTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericAddSubMulDivTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericAddSubMulDivTypeComputer.java deleted file mode 100644 index c0c595d..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericAddSubMulDivTypeComputer.java +++ /dev/null @@ -1,343 +0,0 @@ -/* - * 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.asterix.om.typecomputer.impl; - -import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.types.ATypeTag; -import org.apache.asterix.om.types.AUnionType; -import org.apache.asterix.om.types.BuiltinType; -import org.apache.asterix.om.types.IAType; -import org.apache.asterix.om.util.NonTaggedFormatUtil; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; - -public class NonTaggedNumericAddSubMulDivTypeComputer implements IResultTypeComputer { - - private static final String errMsg = "Arithmetic operations are not implemented for "; - - public static final NonTaggedNumericAddSubMulDivTypeComputer INSTANCE = new NonTaggedNumericAddSubMulDivTypeComputer(); - - private NonTaggedNumericAddSubMulDivTypeComputer() { - } - - @Override - public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, - IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expression; - ILogicalExpression arg1 = fce.getArguments().get(0).getValue(); - ILogicalExpression arg2 = fce.getArguments().get(1).getValue(); - IAType t1; - IAType t2; - try { - t1 = (IAType) env.getType(arg1); - t2 = (IAType) env.getType(arg2); - } catch (AlgebricksException e) { - throw new AlgebricksException(e); - } - if (t1 == null || t2 == null) { - return null; - } - - ATypeTag tag1, tag2; - if (NonTaggedFormatUtil.isOptional(t1)) - tag1 = ((AUnionType) t1).getNullableType().getTypeTag(); - else - tag1 = t1.getTypeTag(); - - if (NonTaggedFormatUtil.isOptional(t2)) - tag2 = ((AUnionType) t2).getNullableType().getTypeTag(); - else - tag2 = t2.getTypeTag(); - - if (tag1 == ATypeTag.NULL || tag2 == ATypeTag.NULL) { - return BuiltinType.ANULL; - } - - IAType type; - - switch (tag1) { - case DOUBLE: { - switch (tag2) { - case INT8: - case INT16: - case INT32: - case INT64: - case FLOAT: - case DOUBLE: - type = BuiltinType.ADOUBLE; - break; - case ANY: - return BuiltinType.ANY; - default: { - throw new NotImplementedException(errMsg + t2.getTypeName()); - } - } - break; - } - case FLOAT: { - switch (tag2) { - case INT8: - case INT16: - case INT32: - case INT64: - case FLOAT: - type = BuiltinType.AFLOAT; - break; - case DOUBLE: - type = BuiltinType.ADOUBLE; - break; - case ANY: - return BuiltinType.ANY; - default: { - throw new NotImplementedException(errMsg + t2.getTypeName()); - } - } - break; - } - case INT64: { - switch (tag2) { - case INT8: - case INT16: - case INT32: - case INT64: - type = BuiltinType.AINT64; - break; - case FLOAT: - type = BuiltinType.AFLOAT; - break; - case DOUBLE: - type = BuiltinType.ADOUBLE; - break; - case ANY: - return BuiltinType.ANY; - default: { - throw new NotImplementedException(errMsg + t2.getTypeName()); - } - } - break; - } - case INT32: { - switch (tag2) { - case INT8: - case INT16: - case INT32: - type = BuiltinType.AINT32; - break; - case INT64: - type = BuiltinType.AINT64; - break; - case FLOAT: - type = BuiltinType.AFLOAT; - break; - case DOUBLE: - type = BuiltinType.ADOUBLE; - break; - case ANY: - return BuiltinType.ANY; - default: { - throw new NotImplementedException(errMsg + tag2); - } - } - break; - } - case INT16: { - switch (tag2) { - case INT8: - case INT16: - type = BuiltinType.AINT16; - break; - case INT32: - type = BuiltinType.AINT32; - break; - case INT64: - type = BuiltinType.AINT64; - break; - case FLOAT: - type = BuiltinType.AFLOAT; - break; - case DOUBLE: - type = BuiltinType.ADOUBLE; - break; - case ANY: - return BuiltinType.ANY; - default: { - throw new NotImplementedException(errMsg + tag2); - } - } - break; - } - case INT8: { - switch (tag2) { - case INT8: - type = BuiltinType.AINT8; - break; - case INT16: - type = BuiltinType.AINT16; - break; - case INT32: - type = BuiltinType.AINT32; - break; - case INT64: - type = BuiltinType.AINT64; - break; - case FLOAT: - type = BuiltinType.AFLOAT; - break; - case DOUBLE: - type = BuiltinType.ADOUBLE; - break; - case ANY: - return BuiltinType.ANY; - default: { - throw new NotImplementedException(errMsg + tag2); - } - } - break; - } - case ANY: { - switch (tag2) { - case INT8: - case INT16: - case INT32: - case INT64: - case FLOAT: - case ANY: - case DOUBLE: - return BuiltinType.ANY; - default: { - throw new NotImplementedException(errMsg + tag2); - } - } - } - case DATE: { - switch (tag2) { - case DATE: - type = BuiltinType.ADURATION; - break; - case YEARMONTHDURATION: - case DAYTIMEDURATION: - case DURATION: - type = BuiltinType.ADATE; - break; - default: { - throw new NotImplementedException(errMsg + tag2); - } - } - break; - } - case TIME: { - switch (tag2) { - case TIME: - type = BuiltinType.ADURATION; - break; - case YEARMONTHDURATION: - case DAYTIMEDURATION: - case DURATION: - type = BuiltinType.ATIME; - break; - default: { - throw new NotImplementedException(errMsg + tag2); - } - } - break; - } - case DATETIME: { - switch (tag2) { - case DATETIME: - type = BuiltinType.ADURATION; - break; - case YEARMONTHDURATION: - case DAYTIMEDURATION: - case DURATION: - type = BuiltinType.ADATETIME; - break; - default: { - throw new NotImplementedException(errMsg + tag2); - } - } - break; - } - case DURATION: { - switch (tag2) { - case DATE: - type = BuiltinType.ADATE; - break; - case TIME: - type = BuiltinType.ATIME; - break; - case DATETIME: - type = BuiltinType.ADATETIME; - break; - default: { - throw new NotImplementedException(errMsg + tag2); - } - } - break; - } - case YEARMONTHDURATION: { - switch (tag2) { - case DATE: - type = BuiltinType.ADATE; - break; - case TIME: - type = BuiltinType.ATIME; - break; - case DATETIME: - type = BuiltinType.ADATETIME; - break; - case YEARMONTHDURATION: - type = BuiltinType.AYEARMONTHDURATION; - break; - default: { - throw new NotImplementedException(errMsg + tag2); - } - } - break; - } - case DAYTIMEDURATION: { - switch (tag2) { - case DATE: - type = BuiltinType.ADATE; - break; - case TIME: - type = BuiltinType.ATIME; - break; - case DATETIME: - type = BuiltinType.ADATETIME; - break; - case DAYTIMEDURATION: - type = BuiltinType.ADAYTIMEDURATION; - break; - default: { - throw new NotImplementedException(errMsg + tag2); - } - } - break; - } - default: { - throw new NotImplementedException(errMsg + tag1); - } - } - return AUnionType.createNullableType(type, "ArithemitcResult"); - } -}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericAggTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericAggTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericAggTypeComputer.java deleted file mode 100644 index 1642293..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericAggTypeComputer.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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.asterix.om.typecomputer.impl; - -import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.types.ATypeTag; -import org.apache.asterix.om.types.AUnionType; -import org.apache.asterix.om.types.BuiltinType; -import org.apache.asterix.om.types.IAType; -import org.apache.asterix.om.util.NonTaggedFormatUtil; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; - -public class NonTaggedNumericAggTypeComputer implements IResultTypeComputer { - - private static final String errMsg = "Aggregator is not implemented for "; - - public static final NonTaggedNumericAggTypeComputer INSTANCE = new NonTaggedNumericAggTypeComputer(); - - private NonTaggedNumericAggTypeComputer() { - } - - @Override - public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, - IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expression; - ILogicalExpression arg1 = fce.getArguments().get(0).getValue(); - IAType t1 = (IAType) env.getType(arg1); - if (t1 == null) { - return null; - } - - ATypeTag tag1; - if (NonTaggedFormatUtil.isOptional(t1)) { - tag1 = ((AUnionType) t1).getNullableType().getTypeTag(); - } else { - tag1 = t1.getTypeTag(); - } - - IAType type; - switch (tag1) { - case DOUBLE: - type = BuiltinType.ADOUBLE; - break; - case FLOAT: - type = BuiltinType.AFLOAT; - break; - case INT64: - type = BuiltinType.AINT64; - break; - case INT32: - type = BuiltinType.AINT32; - break; - case INT16: - type = BuiltinType.AINT16; - break; - case INT8: - type = BuiltinType.AINT8; - break; - case ANY: - return BuiltinType.ANY; - default: { - throw new NotImplementedException(errMsg + tag1); - } - } - return AUnionType.createNullableType(type, "SumResult"); - } -} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericRoundHalfToEven2TypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericRoundHalfToEven2TypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericRoundHalfToEven2TypeComputer.java deleted file mode 100644 index aed28c9..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericRoundHalfToEven2TypeComputer.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * 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. - */ -/* - * Numeric round half to even - * Author : Xiaoyu Ma@UC Irvine - * 01/30/2012 - */ -package org.apache.asterix.om.typecomputer.impl; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.types.ATypeTag; -import org.apache.asterix.om.types.AUnionType; -import org.apache.asterix.om.types.BuiltinType; -import org.apache.asterix.om.types.IAType; -import org.apache.asterix.om.util.NonTaggedFormatUtil; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; - -public class NonTaggedNumericRoundHalfToEven2TypeComputer implements IResultTypeComputer { - - public static final NonTaggedNumericRoundHalfToEven2TypeComputer INSTANCE = new NonTaggedNumericRoundHalfToEven2TypeComputer(); - - private NonTaggedNumericRoundHalfToEven2TypeComputer() { - } - - @Override - public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, - IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expression; - if (fce.getArguments().size() < 2) - throw new AlgebricksException("Argument number invalid."); - - ILogicalExpression arg1 = fce.getArguments().get(0).getValue(); - ILogicalExpression arg2 = fce.getArguments().get(1).getValue(); - - IAType t1 = (IAType) env.getType(arg1); - IAType t2 = (IAType) env.getType(arg2); - - List<IAType> unionList = new ArrayList<IAType>(); - unionList.add(BuiltinType.ANULL); - - ATypeTag tag1, tag2; - if (NonTaggedFormatUtil.isOptional(t1)) - tag1 = ((AUnionType) t1).getNullableType().getTypeTag(); - else - tag1 = t1.getTypeTag(); - - if (NonTaggedFormatUtil.isOptional(t2)) - tag2 = ((AUnionType) t2).getNullableType().getTypeTag(); - else - tag2 = t2.getTypeTag(); - - switch (tag2) { - case INT8: - case INT16: - case INT32: - case INT64: - break; - default: - throw new AlgebricksException("Argument $precision cannot be type " + t2.getTypeName()); - } - - IAType type; - switch (tag1) { - case INT8: - type = BuiltinType.AINT8; - break; - case INT16: - type = BuiltinType.AINT16; - break; - case INT32: - type = BuiltinType.AINT32; - break; - case INT64: - type = BuiltinType.AINT64; - break; - case FLOAT: - type = BuiltinType.AFLOAT; - break; - case DOUBLE: - type = BuiltinType.ADOUBLE; - break; - case NULL: - return BuiltinType.ANULL; - default: { - throw new NotImplementedException("Arithmetic operations are not implemented for " + t1.getTypeName()); - } - } - - return AUnionType.createNullableType(type, "NumericFuncionsResult"); - } -} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericUnaryFunctionTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericUnaryFunctionTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericUnaryFunctionTypeComputer.java deleted file mode 100644 index 40e13ac..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedNumericUnaryFunctionTypeComputer.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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. - */ -/* - * Numeric Unary Functions like abs - * Author : Xiaoyu Ma@UC Irvine - * 01/30/2012 - */ -package org.apache.asterix.om.typecomputer.impl; - -import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.types.AUnionType; -import org.apache.asterix.om.types.BuiltinType; -import org.apache.asterix.om.types.IAType; -import org.apache.asterix.om.util.NonTaggedFormatUtil; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; - -public class NonTaggedNumericUnaryFunctionTypeComputer implements IResultTypeComputer { - - private static final String errMsg = "Arithmetic operations are not implemented for "; - public static final NonTaggedNumericUnaryFunctionTypeComputer INSTANCE = new NonTaggedNumericUnaryFunctionTypeComputer(); - - private NonTaggedNumericUnaryFunctionTypeComputer() { - } - - @Override - public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, - IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expression; - if (fce.getArguments().isEmpty()) - throw new AlgebricksException("Wrong Argument Number."); - - ILogicalExpression arg1 = fce.getArguments().get(0).getValue(); - - IAType t = (IAType) env.getType(arg1); - - if (NonTaggedFormatUtil.isOptional(t)) { - return (IAType) env.getType(arg1); - } - - IAType type; - switch (t.getTypeTag()) { - case INT8: - type = BuiltinType.AINT8; - break; - case INT16: - type = BuiltinType.AINT16; - break; - case INT32: - type = BuiltinType.AINT32; - break; - case INT64: - type = BuiltinType.AINT64; - break; - case FLOAT: - type = BuiltinType.AFLOAT; - break; - case DOUBLE: - type = BuiltinType.ADOUBLE; - break; - case NULL: - return BuiltinType.ANULL; - case ANY: - return BuiltinType.ANY; - default: { - throw new NotImplementedException(errMsg + t.getTypeName()); - } - } - - return AUnionType.createNullableType(type, "NumericUnaryFuncionsResult"); - } -} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedSwitchCaseComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedSwitchCaseComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedSwitchCaseComputer.java deleted file mode 100644 index cef24c4..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedSwitchCaseComputer.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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.asterix.om.typecomputer.impl; - -import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.types.IAType; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; - -public class NonTaggedSwitchCaseComputer implements IResultTypeComputer { - - private static final String errMsg1 = "switch case should have at least 3 parameters "; - private static final String errMsg2 = "every case expression should have the same return type"; - private static final String errMsg3 = "swith conditon type should be compatible with each case type"; - - public static IResultTypeComputer INSTANCE = new NonTaggedSwitchCaseComputer(); - - @Override - public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, - IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expression; - if (fce.getArguments().size() < 3) - throw new AlgebricksException(errMsg1); - - TypeCompatibilityChecker tcc = new TypeCompatibilityChecker(); - for (int i = 2; i < fce.getArguments().size(); i += 2) { - IAType ti = (IAType) env.getType(fce.getArguments().get(i).getValue()); - tcc.addPossibleType(ti); - } - IAType valueType = tcc.getCompatibleType(); - if (valueType == null) { - throw new AlgebricksException(errMsg2); - } - - IAType switchType = (IAType) env.getType(fce.getArguments().get(0).getValue()); - tcc.reset(); - tcc.addPossibleType(switchType); - for (int i = 1; i < fce.getArguments().size(); i += 2) { - IAType ti = (IAType) env.getType(fce.getArguments().get(i).getValue()); - tcc.addPossibleType(ti); - } - IAType caseType = tcc.getCompatibleType(); - if (caseType == null) { - throw new AlgebricksException(errMsg3); - } - return valueType; - } -} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedUnaryMinusTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedUnaryMinusTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedUnaryMinusTypeComputer.java deleted file mode 100644 index 446953a..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedUnaryMinusTypeComputer.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.asterix.om.typecomputer.impl; - -import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.types.AUnionType; -import org.apache.asterix.om.types.IAType; -import org.apache.asterix.om.util.NonTaggedFormatUtil; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; - -public class NonTaggedUnaryMinusTypeComputer implements IResultTypeComputer { - - public static final NonTaggedUnaryMinusTypeComputer INSTANCE = new NonTaggedUnaryMinusTypeComputer(); - - private NonTaggedUnaryMinusTypeComputer() { - } - - @Override - public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, - IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expression; - ILogicalExpression arg1 = fce.getArguments().get(0).getValue(); - IAType envType = (IAType) env.getType(arg1); - if (NonTaggedFormatUtil.isOptional(envType)) - return envType; - return AUnionType.createNullableType(envType, "UnaryMinusResult"); - } -} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NotMissingTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NotMissingTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NotMissingTypeComputer.java new file mode 100644 index 0000000..68444c4 --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NotMissingTypeComputer.java @@ -0,0 +1,77 @@ +/* + * 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.asterix.om.typecomputer.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; +import org.apache.asterix.om.types.ATypeTag; +import org.apache.asterix.om.types.AUnionType; +import org.apache.asterix.om.types.IAType; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; +import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; +import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; +import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; + +/** + * This class is the type computer for not-missing function. + * If the input type is not a union, we just return it. + * If the input type is a union, + * case 1: we return a new union without missing if the new union still has more than one types; + * case 2: we return the non-missing item type in the original union if there are only missing + * and it in the original union. + */ +public class NotMissingTypeComputer implements IResultTypeComputer { + + public static final NotMissingTypeComputer INSTANCE = new NotMissingTypeComputer(); + + @Override + public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, + IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { + AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expression; + IAType type = (IAType) env.getType(f.getArguments().get(0).getValue()); + if (type.getTypeTag() != ATypeTag.UNION) { + // directly return the input type if it is not a union + return type; + } + + AUnionType unionType = (AUnionType) type; + List<IAType> items = new ArrayList<>(); + // copy the item types + items.addAll(unionType.getUnionList()); + + // remove missing + for (int i = items.size() - 1; i >= 0; i--) { + IAType itemType = items.get(i); + if (itemType.getTypeTag() == ATypeTag.MISSING) { + items.remove(i); + } + } + if (items.size() == 1) { + //only one type is left + return items.get(0); + } else { + //more than two types are left + return new AUnionType(items, unionType.getTypeName()); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NotNullTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NotNullTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NotNullTypeComputer.java deleted file mode 100644 index 0fd169c..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NotNullTypeComputer.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.asterix.om.typecomputer.impl; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.types.ATypeTag; -import org.apache.asterix.om.types.AUnionType; -import org.apache.asterix.om.types.IAType; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; - -/** - * This class is the type computer for not-null function. - * If the input type is not a union, we just return it. - * If the input type is a union, - * case 1: we return a new union without null if the new union still has more than one types; - * case 2: we return the non-null item type in the original union if there are only null and it in the original union. - */ -public class NotNullTypeComputer implements IResultTypeComputer { - - public static final NotNullTypeComputer INSTANCE = new NotNullTypeComputer(); - - @Override - public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, - IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { - AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expression; - IAType type = (IAType) env.getType(f.getArguments().get(0).getValue()); - if (type.getTypeTag() != ATypeTag.UNION) { - // directly return the input type if it is not a union - return type; - } - - AUnionType unionType = (AUnionType) type; - List<IAType> items = new ArrayList<IAType>(); - // copy the item types - items.addAll(unionType.getUnionList()); - - // remove null - for (int i = items.size() - 1; i >= 0; i--) { - IAType itemType = items.get(i); - if (itemType.getTypeTag() == ATypeTag.NULL) { - items.remove(i); - } - } - if (items.size() == 1) { - //only one type is left - return items.get(0); - } else { - //more than two types are left - return new AUnionType(items, unionType.getTypeName()); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NullableDoubleTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NullableDoubleTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NullableDoubleTypeComputer.java new file mode 100644 index 0000000..94c75d2 --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NullableDoubleTypeComputer.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.asterix.om.typecomputer.impl; + +import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; +import org.apache.asterix.om.types.AUnionType; +import org.apache.asterix.om.types.BuiltinType; +import org.apache.asterix.om.types.IAType; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; +import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; +import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; + +public class NullableDoubleTypeComputer implements IResultTypeComputer { + + public static final NullableDoubleTypeComputer INSTANCE = new NullableDoubleTypeComputer(); + + private NullableDoubleTypeComputer() { + } + + @Override + public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, + IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { + return AUnionType.createMissableType(BuiltinType.ADOUBLE, "OptionalDouble"); + } +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java new file mode 100644 index 0000000..f9223e4 --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java @@ -0,0 +1,305 @@ +/* + * 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.asterix.om.typecomputer.impl; + +import org.apache.asterix.om.typecomputer.base.AbstractResultTypeComputer; +import org.apache.asterix.om.types.ATypeTag; +import org.apache.asterix.om.types.BuiltinType; +import org.apache.asterix.om.types.IAType; +import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException; + +public class NumericAddSubMulDivTypeComputer extends AbstractResultTypeComputer { + + private static final String ERR_MSG = "Arithmetic operations are not implemented for "; + + public static final NumericAddSubMulDivTypeComputer INSTANCE = new NumericAddSubMulDivTypeComputer(); + + private NumericAddSubMulDivTypeComputer() { + } + + @Override + protected IAType getResultType(IAType... strippedInputTypes) { + IAType t1 = strippedInputTypes[0]; + IAType t2 = strippedInputTypes[1]; + ATypeTag tag1 = t1.getTypeTag(); + ATypeTag tag2 = t2.getTypeTag(); + + IAType type; + switch (tag1) { + case DOUBLE: + switch (tag2) { + case INT8: + case INT16: + case INT32: + case INT64: + case FLOAT: + case DOUBLE: + type = BuiltinType.ADOUBLE; + break; + case ANY: + type = BuiltinType.ANY; + break; + default: + throw new NotImplementedException(ERR_MSG + t2.getTypeName()); + } + break; + case FLOAT: + switch (tag2) { + case INT8: + case INT16: + case INT32: + case INT64: + case FLOAT: + type = BuiltinType.AFLOAT; + break; + case DOUBLE: + type = BuiltinType.ADOUBLE; + break; + case ANY: + type = BuiltinType.ANY; + break; + default: + throw new NotImplementedException(ERR_MSG + t2.getTypeName()); + } + break; + case INT64: + switch (tag2) { + case INT8: + case INT16: + case INT32: + case INT64: + type = BuiltinType.AINT64; + break; + case FLOAT: + type = BuiltinType.AFLOAT; + break; + case DOUBLE: + type = BuiltinType.ADOUBLE; + break; + case ANY: + type = BuiltinType.ANY; + break; + default: + throw new NotImplementedException(ERR_MSG + t2.getTypeName()); + } + break; + case INT32: + switch (tag2) { + case INT8: + case INT16: + case INT32: + type = BuiltinType.AINT32; + break; + case INT64: + type = BuiltinType.AINT64; + break; + case FLOAT: + type = BuiltinType.AFLOAT; + break; + case DOUBLE: + type = BuiltinType.ADOUBLE; + break; + case ANY: + type = BuiltinType.ANY; + break; + default: + throw new NotImplementedException(ERR_MSG + tag2); + } + break; + case INT16: + switch (tag2) { + case INT8: + case INT16: + type = BuiltinType.AINT16; + break; + case INT32: + type = BuiltinType.AINT32; + break; + case INT64: + type = BuiltinType.AINT64; + break; + case FLOAT: + type = BuiltinType.AFLOAT; + break; + case DOUBLE: + type = BuiltinType.ADOUBLE; + break; + case ANY: + type = BuiltinType.ANY; + break; + default: + throw new NotImplementedException(ERR_MSG + tag2); + } + break; + case INT8: + switch (tag2) { + case INT8: + type = BuiltinType.AINT8; + break; + case INT16: + type = BuiltinType.AINT16; + break; + case INT32: + type = BuiltinType.AINT32; + break; + case INT64: + type = BuiltinType.AINT64; + break; + case FLOAT: + type = BuiltinType.AFLOAT; + break; + case DOUBLE: + type = BuiltinType.ADOUBLE; + break; + case ANY: + type = BuiltinType.ANY; + break; + default: + throw new NotImplementedException(ERR_MSG + tag2); + } + break; + case ANY: + switch (tag2) { + case INT8: + case INT16: + case INT32: + case INT64: + case FLOAT: + case ANY: + case DOUBLE: + type = BuiltinType.ANY; + break; + default: + throw new NotImplementedException(ERR_MSG + tag2); + } + break; + case DATE: + switch (tag2) { + case DATE: + type = BuiltinType.ADURATION; + break; + case YEARMONTHDURATION: + case DAYTIMEDURATION: + case DURATION: + type = BuiltinType.ADATE; + break; + case ANY: + type = BuiltinType.ANY; + break; + default: + throw new NotImplementedException(ERR_MSG + tag2); + } + break; + case TIME: + switch (tag2) { + case TIME: + type = BuiltinType.ADURATION; + break; + case YEARMONTHDURATION: + case DAYTIMEDURATION: + case DURATION: + type = BuiltinType.ATIME; + break; + case ANY: + type = BuiltinType.ANY; + break; + default: + throw new NotImplementedException(ERR_MSG + tag2); + } + break; + case DATETIME: + switch (tag2) { + case DATETIME: + type = BuiltinType.ADURATION; + break; + case YEARMONTHDURATION: + case DAYTIMEDURATION: + case DURATION: + type = BuiltinType.ADATETIME; + break; + default: + throw new NotImplementedException(ERR_MSG + tag2); + } + break; + case DURATION: + switch (tag2) { + case DATE: + type = BuiltinType.ADATE; + break; + case TIME: + type = BuiltinType.ATIME; + break; + case DATETIME: + type = BuiltinType.ADATETIME; + break; + case ANY: + type = BuiltinType.ANY; + break; + default: + throw new NotImplementedException(ERR_MSG + tag2); + } + break; + case YEARMONTHDURATION: + switch (tag2) { + case DATE: + type = BuiltinType.ADATE; + break; + case TIME: + type = BuiltinType.ATIME; + break; + case DATETIME: + type = BuiltinType.ADATETIME; + break; + case YEARMONTHDURATION: + type = BuiltinType.AYEARMONTHDURATION; + break; + case ANY: + type = BuiltinType.ANY; + break; + default: + throw new NotImplementedException(ERR_MSG + tag2); + } + break; + case DAYTIMEDURATION: + switch (tag2) { + case DATE: + type = BuiltinType.ADATE; + break; + case TIME: + type = BuiltinType.ATIME; + break; + case DATETIME: + type = BuiltinType.ADATETIME; + break; + case DAYTIMEDURATION: + type = BuiltinType.ADAYTIMEDURATION; + break; + case ANY: + type = BuiltinType.ANY; + break; + default: + throw new NotImplementedException(ERR_MSG + tag2); + } + break; + default: + throw new NotImplementedException(ERR_MSG + tag1); + } + return type; + } +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulTypeDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulTypeDescriptor.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulTypeDescriptor.java deleted file mode 100644 index 2796022..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulTypeDescriptor.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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.asterix.om.typecomputer.impl; - -import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.types.BuiltinType; -import org.apache.asterix.om.types.IAType; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; - -public class NumericAddSubMulTypeDescriptor implements IResultTypeComputer { - - private static final String errMsg = "Arithmetic operations are only implemented for AINT32 and ADOUBLE."; - - @Override - public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, - IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expression; - ILogicalExpression arg1 = fce.getArguments().get(0).getValue(); - ILogicalExpression arg2 = fce.getArguments().get(1).getValue(); - IAType t1; - IAType t2; - try { - t1 = (IAType) env.getType(arg1); - t2 = (IAType) env.getType(arg2); - } catch (AlgebricksException e) { - throw new AlgebricksException(e); - } - if (t1 == null || t2 == null) { - return null; - } - switch (t1.getTypeTag()) { - case INT32: { - switch (t2.getTypeTag()) { - case INT32: { - return BuiltinType.AINT32; - } - case DOUBLE: { - return BuiltinType.ADOUBLE; - } - default: { - throw new NotImplementedException(errMsg); - } - } - } - case DOUBLE: { - switch (t2.getTypeTag()) { - case INT32: - case DOUBLE: { - return BuiltinType.ADOUBLE; - } - default: { - throw new NotImplementedException(errMsg); - } - } - } - default: { - throw new NotImplementedException(errMsg); - } - } - } - -} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java new file mode 100644 index 0000000..691ee7a --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java @@ -0,0 +1,73 @@ +/* + * 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.asterix.om.typecomputer.impl; + +import org.apache.asterix.om.typecomputer.base.AbstractResultTypeComputer; +import org.apache.asterix.om.types.ATypeTag; +import org.apache.asterix.om.types.AUnionType; +import org.apache.asterix.om.types.IAType; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException; + +public class NumericAggTypeComputer extends AbstractResultTypeComputer { + + private static final String ERR_MSG = "Aggregator is not implemented for "; + + public static final NumericAggTypeComputer INSTANCE = new NumericAggTypeComputer(); + + private NumericAggTypeComputer() { + } + + @Override + protected void checkArgType(int argIndex, IAType type) throws AlgebricksException { + ATypeTag tag = type.getTypeTag(); + switch (tag) { + case DOUBLE: + case FLOAT: + case INT64: + case INT32: + case INT16: + case INT8: + case ANY: + break; + default: + throw new NotImplementedException(ERR_MSG + tag); + } + } + + @Override + protected IAType getResultType(IAType... strippedInputTypes) { + ATypeTag tag = strippedInputTypes[0].getTypeTag(); + IAType type; + switch (tag) { + case DOUBLE: + case FLOAT: + case INT64: + case INT32: + case INT16: + case INT8: + case ANY: + type = strippedInputTypes[0]; + break; + default: + throw new NotImplementedException(ERR_MSG + tag); + } + return AUnionType.createNullableType(type, "AggResult"); + } +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRoundHalfToEven2TypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRoundHalfToEven2TypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRoundHalfToEven2TypeComputer.java new file mode 100644 index 0000000..675d1f0 --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRoundHalfToEven2TypeComputer.java @@ -0,0 +1,86 @@ +/* + * 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. + */ +/* + * Numeric round half to even + * Author : Xiaoyu Ma@UC Irvine + * 01/30/2012 + */ +package org.apache.asterix.om.typecomputer.impl; + +import org.apache.asterix.om.typecomputer.base.AbstractResultTypeComputer; +import org.apache.asterix.om.types.ATypeTag; +import org.apache.asterix.om.types.IAType; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException; + +public class NumericRoundHalfToEven2TypeComputer extends AbstractResultTypeComputer { + + public static final NumericRoundHalfToEven2TypeComputer INSTANCE = new NumericRoundHalfToEven2TypeComputer(); + + private NumericRoundHalfToEven2TypeComputer() { + + } + + @Override + protected void checkArgType(int argIndex, IAType type) throws AlgebricksException { + ATypeTag tag = type.getTypeTag(); + if (argIndex == 0) { + switch (tag) { + case INT8: + case INT16: + case INT32: + case INT64: + case FLOAT: + case DOUBLE: + break; + default: + throw new NotImplementedException( + "Arithmetic operations are not implemented for " + type.getDisplayName()); + } + } + if (argIndex == 1) { + switch (tag) { + case INT8: + case INT16: + case INT32: + case INT64: + break; + default: + throw new AlgebricksException("Argument $precision cannot be type " + type.getDisplayName()); + } + } + } + + @Override + protected IAType getResultType(IAType... strippedInputTypes) { + ATypeTag tag = strippedInputTypes[0].getTypeTag(); + switch (tag) { + case INT8: + case INT16: + case INT32: + case INT64: + case FLOAT: + case DOUBLE: + case ANY: + return strippedInputTypes[0]; + default: + return null; + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericUnaryFunctionTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericUnaryFunctionTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericUnaryFunctionTypeComputer.java new file mode 100644 index 0000000..017e178 --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericUnaryFunctionTypeComputer.java @@ -0,0 +1,72 @@ +/* + * 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. + */ +/* + * Numeric Unary Functions like abs + * Author : Xiaoyu Ma@UC Irvine + * 01/30/2012 + */ +package org.apache.asterix.om.typecomputer.impl; + +import org.apache.asterix.om.typecomputer.base.AbstractResultTypeComputer; +import org.apache.asterix.om.types.ATypeTag; +import org.apache.asterix.om.types.IAType; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; + +public class NumericUnaryFunctionTypeComputer extends AbstractResultTypeComputer { + + private static final String ERR_MSG = "Arithmetic operations are not implemented for "; + public static final NumericUnaryFunctionTypeComputer INSTANCE = new NumericUnaryFunctionTypeComputer(); + + private NumericUnaryFunctionTypeComputer() { + } + + @Override + protected void checkArgType(int argIndex, IAType type) throws AlgebricksException { + ATypeTag tag = type.getTypeTag(); + switch (tag) { + case INT8: + case INT16: + case INT32: + case INT64: + case FLOAT: + case DOUBLE: + case ANY: + break; + default: + throw new AlgebricksException(ERR_MSG + type.getDisplayName()); + } + } + + @Override + protected IAType getResultType(IAType... strippedInputTypes) { + ATypeTag tag = strippedInputTypes[0].getTypeTag(); + switch (tag) { + case INT8: + case INT16: + case INT32: + case INT64: + case FLOAT: + case DOUBLE: + case ANY: + return strippedInputTypes[0]; + default: + return null; + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenARecordTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenARecordTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenARecordTypeComputer.java new file mode 100644 index 0000000..4a041d4 --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenARecordTypeComputer.java @@ -0,0 +1,43 @@ +/* + * 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.asterix.om.typecomputer.impl; + +import org.apache.asterix.om.pointables.base.DefaultOpenFieldType; +import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; +import org.apache.asterix.om.types.AUnionType; +import org.apache.asterix.om.types.IAType; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; +import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; +import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; + +public class OpenARecordTypeComputer implements IResultTypeComputer { + + public static final OpenARecordTypeComputer INSTANCE = new OpenARecordTypeComputer(); + + private OpenARecordTypeComputer() { + } + + @Override + public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, + IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { + return AUnionType.createUnknownableType(DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE, "UnknownableOpenRecord"); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java index 862d1cd..3e1955d 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java @@ -26,7 +26,7 @@ import java.util.List; import org.apache.asterix.om.base.AString; import org.apache.asterix.om.constants.AsterixConstantValue; import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.typecomputer.base.TypeComputerUtilities; +import org.apache.asterix.om.typecomputer.base.TypeCastUtils; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.IAType; import org.apache.asterix.om.types.TypeHelper; @@ -51,7 +51,7 @@ public class OpenRecordConstructorResultType implements IResultTypeComputer { /** * if type has been top-down propagated, use the enforced type */ - ARecordType type = (ARecordType) TypeComputerUtilities.getRequiredType(f); + ARecordType type = (ARecordType) TypeCastUtils.getRequiredType(f); if (type != null) return type; http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalABinaryTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalABinaryTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalABinaryTypeComputer.java deleted file mode 100644 index 9831665..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalABinaryTypeComputer.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.asterix.om.typecomputer.impl; - -import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.typecomputer.base.TypeComputerUtilities; -import org.apache.asterix.om.types.AUnionType; -import org.apache.asterix.om.types.BuiltinType; -import org.apache.asterix.om.types.IAType; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; - -public class OptionalABinaryTypeComputer implements IResultTypeComputer { - public static final OptionalABinaryTypeComputer INSTANCE = new OptionalABinaryTypeComputer(); - - private OptionalABinaryTypeComputer() { - - } - - @Override - public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, - IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { - if (TypeComputerUtilities.inputInferednullableType(expression, env)) { - return AUnionType.createNullableType(BuiltinType.ABINARY, "OptionalBinary"); - } else { - return BuiltinType.ABINARY; - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalABooleanTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalABooleanTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalABooleanTypeComputer.java deleted file mode 100644 index 3e91d23..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalABooleanTypeComputer.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.asterix.om.typecomputer.impl; - -import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.typecomputer.base.TypeComputerUtilities; -import org.apache.asterix.om.types.AUnionType; -import org.apache.asterix.om.types.BuiltinType; -import org.apache.asterix.om.types.IAType; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; - -public class OptionalABooleanTypeComputer implements IResultTypeComputer { - - public static final OptionalABooleanTypeComputer INSTANCE = new OptionalABooleanTypeComputer(); - - private OptionalABooleanTypeComputer() { - } - - @Override - public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, - IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { - if (TypeComputerUtilities.inputInferednullableType(expression, env)) { - return AUnionType.createNullableType(BuiltinType.ABOOLEAN, "OptionalBoolean"); - } else { - return BuiltinType.ABOOLEAN; - } - } - -} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalACircleTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalACircleTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalACircleTypeComputer.java deleted file mode 100644 index 244156d..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalACircleTypeComputer.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.asterix.om.typecomputer.impl; - -import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.typecomputer.base.TypeComputerUtilities; -import org.apache.asterix.om.types.AUnionType; -import org.apache.asterix.om.types.BuiltinType; -import org.apache.asterix.om.types.IAType; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; - -public class OptionalACircleTypeComputer implements IResultTypeComputer { - - public static final OptionalACircleTypeComputer INSTANCE = new OptionalACircleTypeComputer(); - - private OptionalACircleTypeComputer() { - } - - @Override - public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, - IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { - if (TypeComputerUtilities.inputInferednullableType(expression, env)) { - return AUnionType.createNullableType(BuiltinType.ACIRCLE, "OptionalCircle"); - } else { - return BuiltinType.ACIRCLE; - } - } - -} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalADateTimeTypeComputer.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalADateTimeTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalADateTimeTypeComputer.java deleted file mode 100644 index 04729bf..0000000 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OptionalADateTimeTypeComputer.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.asterix.om.typecomputer.impl; - -import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; -import org.apache.asterix.om.typecomputer.base.TypeComputerUtilities; -import org.apache.asterix.om.types.AUnionType; -import org.apache.asterix.om.types.BuiltinType; -import org.apache.asterix.om.types.IAType; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; -import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; - -public class OptionalADateTimeTypeComputer implements IResultTypeComputer { - - public static final OptionalADateTimeTypeComputer INSTANCE = new OptionalADateTimeTypeComputer(); - - private OptionalADateTimeTypeComputer() { - } - - @Override - public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env, - IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException { - if (TypeComputerUtilities.inputInferednullableType(expression, env)) { - return AUnionType.createNullableType(BuiltinType.ADATETIME, "OptionalDatetime"); - } else { - return BuiltinType.ADATETIME; - } - } - -}
