[NO ISSUE][COMP] Change SqlppStatementUtil to specify CAST option
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
Change-Id: I7a2d6dbd0d25cf3e2b5edc0c6aa26810fceb09f1
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/14245
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
Reviewed-by: Dmitry Lychagin <dmitry.lychagin@couchbase.com>
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
index c3d7bd9..01f93a4 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
@@ -879,17 +879,17 @@
ARecordType sourceType, SourceLocation srcLoc) throws AlgebricksException {
IAType fieldType = sourceType.getSubFieldType(skName);
FunctionIdentifier skFun = null;
- String fmtArg = null;
+ IAObject fmtArg = null;
if (fieldType == null) {
- Pair<FunctionIdentifier, String> castExpr = getCastExpression(index, skType, srcLoc);
+ Pair<FunctionIdentifier, IAObject> castExpr = getCastExpression(index, skType, srcLoc);
skFun = castExpr.first;
fmtArg = castExpr.second;
}
return new IndexFieldId(skSrc, skName, skType.getTypeTag(), skFun, fmtArg);
}
- private static Pair<FunctionIdentifier, String> getCastExpression(Index index, IAType skType, SourceLocation srcLoc)
- throws AlgebricksException {
+ private static Pair<FunctionIdentifier, IAObject> getCastExpression(Index index, IAType skType,
+ SourceLocation srcLoc) throws AlgebricksException {
if (IndexUtil.castDefaultNull(index)) {
return IndexUtil.getTypeConstructorDefaultNull(index, skType, srcLoc);
} else if (index.isEnforced()) {
@@ -901,7 +901,7 @@
private AbstractFunctionCallExpression createCastExpression(Index index, IAType targetType,
AbstractFunctionCallExpression inputExpr, SourceLocation sourceLoc, FunctionIdentifier castFun,
- String fmtArg) throws CompilationException {
+ IAObject fmtArg) throws CompilationException {
ScalarFunctionCallExpression castExpr;
if (IndexUtil.castDefaultNull(index)) {
castExpr = castConstructorFunction(castFun, fmtArg, inputExpr, sourceLoc);
@@ -921,14 +921,14 @@
return castExpr;
}
- private ScalarFunctionCallExpression castConstructorFunction(FunctionIdentifier typeConstructorFun, String fmt,
+ private ScalarFunctionCallExpression castConstructorFunction(FunctionIdentifier typeConstructorFun, IAObject fmt,
AbstractFunctionCallExpression inputExpr, SourceLocation srcLoc) {
BuiltinFunctionInfo typeConstructorInfo = BuiltinFunctions.getBuiltinFunctionInfo(typeConstructorFun);
ScalarFunctionCallExpression constructorExpr = new ScalarFunctionCallExpression(typeConstructorInfo);
constructorExpr.getArguments().add(new MutableObject<>(inputExpr));
// add the format argument if specified
if (fmt != null) {
- ConstantExpression fmtExpr = new ConstantExpression(new AsterixConstantValue(new AString(fmt)));
+ ConstantExpression fmtExpr = new ConstantExpression(new AsterixConstantValue(fmt));
fmtExpr.setSourceLocation(srcLoc);
constructorExpr.getArguments().add(new MutableObject<>(fmtExpr));
}
@@ -1196,10 +1196,10 @@
private final List<String> fieldName;
private final ATypeTag fieldType;
private final FunctionIdentifier funId;
- private final String extraArg; // currently, only for datetime constructor functions with the format arg
+ private final IAObject extraArg; // currently, only for datetime constructor functions with the format arg
private IndexFieldId(int indicator, List<String> fieldName, ATypeTag fieldType, FunctionIdentifier funId,
- String extraArg) {
+ IAObject extraArg) {
this.indicator = indicator;
this.fieldName = fieldName;
this.fieldType = fieldType;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
index ef73905..1acbd89 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
@@ -44,6 +44,7 @@
import org.apache.asterix.metadata.entities.Index;
import org.apache.asterix.metadata.utils.IndexUtil;
import org.apache.asterix.metadata.utils.TypeUtil;
+import org.apache.asterix.om.base.IAObject;
import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.asterix.om.types.ARecordType;
import org.apache.asterix.om.types.AUnionType;
@@ -1053,11 +1054,11 @@
return false;
}
IAType nonNullableType = Index.getNonNullableType(indexedFieldType).first;
- Pair<FunctionIdentifier, String> constructorWithFmt =
+ Pair<FunctionIdentifier, IAObject> constructorWithFmt =
IndexUtil.getTypeConstructorDefaultNull(index, nonNullableType, functionExpr.getSourceLocation());
FunctionIdentifier indexedFieldConstructorFun = constructorWithFmt.first;
- String formatInIndex = constructorWithFmt.second;
- String formatInFunction = TypeUtil.getTemporalFormatArg(functionExpr);
+ IAObject formatInIndex = constructorWithFmt.second;
+ IAObject formatInFunction = TypeUtil.getTemporalFormatArg(functionExpr);
// index has CAST (DEFAULT NULL); the applied function should be the same as the indexed field function
return funId.equals(indexedFieldConstructorFun) && Objects.equals(formatInIndex, formatInFunction);
} else {
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-selection/cast-default-null/cast-default-null-10.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-selection/cast-default-null/cast-default-null-10.sqlpp
index 937a61f..f569a58 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-selection/cast-default-null/cast-default-null-10.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-selection/cast-default-null/cast-default-null-10.sqlpp
@@ -31,5 +31,5 @@
// testing that idx5_dt_fmt is selected
SELECT VALUE v
FROM view5_dt_fmt AS v
-WHERE v.f_dt_fmt < datetime('2020-12-20T00:00:00Z')
+WHERE v.f_dt_fmt < datetime('2020-12-20T00:00:00')
ORDER BY v.id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-selection/cast-default-null/cast-default-null-13.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-selection/cast-default-null/cast-default-null-13.sqlpp
index 2d9d2ab..e3361e9 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-selection/cast-default-null/cast-default-null-13.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-selection/cast-default-null/cast-default-null-13.sqlpp
@@ -30,5 +30,5 @@
// testing that idx6_dt is selected
SELECT VALUE v
FROM view6_dt AS v
-WHERE v.f_dt < datetime('2020-12-20T00:00:00Z')
+WHERE v.f_dt < datetime('2020-12-20T00:00:00')
ORDER BY v.id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-selection/cast-default-null/cast-default-null-16.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-selection/cast-default-null/cast-default-null-16.sqlpp
index ed213f8..cb4e069 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-selection/cast-default-null/cast-default-null-16.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/btree-index-selection/cast-default-null/cast-default-null-16.sqlpp
@@ -31,5 +31,5 @@
// testing that the index idx5_dt_fmt is not selected because its datetime format is not the same as view view5_dt_fmt
SELECT VALUE v
FROM view5_dt_fmt AS v
-WHERE v.f_dt_fmt < datetime('2020-12-20T00:00:00Z')
+WHERE v.f_dt_fmt < datetime('2020-12-20T00:00:00')
ORDER BY v.id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-selection/cast-default-null/cast-default-null.12.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-selection/cast-default-null/cast-default-null.12.query.sqlpp
index c9de53b..e47124a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-selection/cast-default-null/cast-default-null.12.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-selection/cast-default-null/cast-default-null.12.query.sqlpp
@@ -21,5 +21,5 @@
SELECT VALUE v
FROM view5_dt_fmt AS v
-WHERE v.f_dt_fmt < datetime('2020-12-20T00:00:00Z')
+WHERE v.f_dt_fmt < datetime('2020-12-20T00:00:00')
ORDER BY v.id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-selection/cast-default-null/cast-default-null.15.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-selection/cast-default-null/cast-default-null.15.query.sqlpp
index e9ae3b4..7b88c3d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-selection/cast-default-null/cast-default-null.15.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/index-selection/cast-default-null/cast-default-null.15.query.sqlpp
@@ -21,5 +21,5 @@
SELECT VALUE v
FROM view6_dt AS v
-WHERE v.f_dt < datetime('2020-12-20T00:00:00Z')
+WHERE v.f_dt < datetime('2020-12-20T00:00:00')
ORDER BY v.id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.016.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.016.adm
index 2cbfa87..77ce9ac 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.016.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.016.adm
@@ -1,6 +1,6 @@
{ "values": [ null, 3 ] }
{ "values": [ null, 5 ] }
{ "values": [ null, 6 ] }
-{ "values": [ "\"date\": { 2019-01-20 }", 4 ] }
-{ "values": [ "\"date\": { 2020-02-20 }", 1 ] }
-{ "values": [ "\"date\": { 2021-11-25 }", 2 ] }
\ No newline at end of file
+{ "values": [ "date: { 2019-01-20 }", 4 ] }
+{ "values": [ "date: { 2020-02-20 }", 1 ] }
+{ "values": [ "date: { 2021-11-25 }", 2 ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.019.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.019.adm
index 2cbfa87..77ce9ac 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.019.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.019.adm
@@ -1,6 +1,6 @@
{ "values": [ null, 3 ] }
{ "values": [ null, 5 ] }
{ "values": [ null, 6 ] }
-{ "values": [ "\"date\": { 2019-01-20 }", 4 ] }
-{ "values": [ "\"date\": { 2020-02-20 }", 1 ] }
-{ "values": [ "\"date\": { 2021-11-25 }", 2 ] }
\ No newline at end of file
+{ "values": [ "date: { 2019-01-20 }", 4 ] }
+{ "values": [ "date: { 2020-02-20 }", 1 ] }
+{ "values": [ "date: { 2021-11-25 }", 2 ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.023.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.023.adm
index 2cbfa87..77ce9ac 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.023.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.023.adm
@@ -1,6 +1,6 @@
{ "values": [ null, 3 ] }
{ "values": [ null, 5 ] }
{ "values": [ null, 6 ] }
-{ "values": [ "\"date\": { 2019-01-20 }", 4 ] }
-{ "values": [ "\"date\": { 2020-02-20 }", 1 ] }
-{ "values": [ "\"date\": { 2021-11-25 }", 2 ] }
\ No newline at end of file
+{ "values": [ "date: { 2019-01-20 }", 4 ] }
+{ "values": [ "date: { 2020-02-20 }", 1 ] }
+{ "values": [ "date: { 2021-11-25 }", 2 ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.026.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.026.adm
index 2cbfa87..77ce9ac 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.026.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/ddl/index-cast-null/index-cast-null.026.adm
@@ -1,6 +1,6 @@
{ "values": [ null, 3 ] }
{ "values": [ null, 5 ] }
{ "values": [ null, 6 ] }
-{ "values": [ "\"date\": { 2019-01-20 }", 4 ] }
-{ "values": [ "\"date\": { 2020-02-20 }", 1 ] }
-{ "values": [ "\"date\": { 2021-11-25 }", 2 ] }
\ No newline at end of file
+{ "values": [ "date: { 2019-01-20 }", 4 ] }
+{ "values": [ "date: { 2020-02-20 }", 1 ] }
+{ "values": [ "date: { 2021-11-25 }", 2 ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/type_validation/type_validation.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/type_validation/type_validation.1.adm
index fc4df36..f164f97 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/type_validation/type_validation.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/external-library/type_validation/type_validation.1.adm
@@ -1 +1 @@
-"907 9.07 \"907\" 9.07 TRUE \"date\": { 2013-01-01 } datetime: { 1989-09-07T12:13:14.039 } "
+"907 9.07 \"907\" 9.07 TRUE date: { 2013-01-01 } datetime: { 1989-09-07T12:13:14.039 } "
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppStatementUtil.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppStatementUtil.java
index 437c299..6cac4c9 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppStatementUtil.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppStatementUtil.java
@@ -21,6 +21,7 @@
import java.util.List;
import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.metadata.utils.TypeUtil;
import org.apache.hyracks.util.OptionalBoolean;
public class SqlppStatementUtil {
@@ -35,6 +36,7 @@
public static final String DROP_INDEX = "DROP INDEX ";
public static final String INCLUDE_UNKNOWN_KEY = " INCLUDE UNKNOWN KEY ";
public static final String EXCLUDE_UNKNOWN_KEY = " EXCLUDE UNKNOWN KEY ";
+ public static final String CAST_DEFAULT_NULL = " CAST (DEFAULT NULL ";
public static final String ON = " ON ";
public static final String WHERE = " WHERE ";
public static final String AND = " AND ";
@@ -72,7 +74,8 @@
@SuppressWarnings("squid:S1172") // unused variable
public static StringBuilder getCreateIndexStatement(StringBuilder stringBuilder, DataverseName dataverseName,
- String datasetName, String indexName, String fields, OptionalBoolean excludeUnknown, int version) {
+ String datasetName, String indexName, String fields, OptionalBoolean excludeUnknown,
+ boolean castDefaultNull, String dateTimeFmt, String dateFmt, String timeFmt, int version) {
stringBuilder.append(CREATE_INDEX);
enclose(stringBuilder, indexName).append(ON);
StringBuilder appender = enclose(stringBuilder, dataverseName, datasetName).append(fields);
@@ -83,6 +86,22 @@
appender.append(INCLUDE_UNKNOWN_KEY);
}
}
+ if (castDefaultNull) {
+ appender.append(CAST_DEFAULT_NULL);
+ if (dateTimeFmt != null) {
+ appender.append(TypeUtil.DATETIME_PARAMETER_NAME).append(' ');
+ quote(appender, dateTimeFmt).append(' ');
+ }
+ if (dateFmt != null) {
+ appender.append(TypeUtil.DATE_PARAMETER_NAME).append(' ');
+ quote(appender, dateFmt).append(' ');
+ }
+ if (timeFmt != null) {
+ appender.append(TypeUtil.TIME_PARAMETER_NAME).append(' ');
+ quote(appender, timeFmt).append(' ');
+ }
+ appender.append(R_PARENTHESIS);
+ }
return appender.append(SEMI_COLON);
}
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
index 62d8119..bb51748 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
@@ -21,7 +21,6 @@
import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_CAST;
import static org.apache.asterix.metadata.bootstrap.MetadataRecordTypes.FIELD_NAME_DEFAULT;
-import static org.apache.asterix.om.types.AOrderedListType.FULL_OPEN_ORDEREDLIST_TYPE;
import java.util.ArrayList;
import java.util.Calendar;
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java
index 215a295..ab5b362 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java
@@ -33,6 +33,8 @@
import org.apache.asterix.metadata.entities.Dataset;
import org.apache.asterix.metadata.entities.Index;
import org.apache.asterix.metadata.entities.InternalDatasetDetails;
+import org.apache.asterix.om.base.AString;
+import org.apache.asterix.om.base.IAObject;
import org.apache.asterix.om.types.IAType;
import org.apache.asterix.runtime.job.listener.JobEventListenerFactory;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -188,7 +190,7 @@
&& ((Index.ValueIndexDetails) index.getIndexDetails()).getCastDefaultNull().getOrElse(false);
}
- public static Pair<FunctionIdentifier, String> getTypeConstructorDefaultNull(Index index, IAType type,
+ public static Pair<FunctionIdentifier, IAObject> getTypeConstructorDefaultNull(Index index, IAType type,
SourceLocation srcLoc) throws CompilationException {
Triple<String, String, String> temporalFormats = getTemporalFormats(index);
String format = temporalFormats != null ? TypeUtil.getTemporalFormat(type, temporalFormats) : null;
@@ -197,7 +199,7 @@
if (typeConstructorFun == null) {
throw new CompilationException(ErrorCode.COMPILATION_TYPE_UNSUPPORTED, srcLoc, "index", type.getTypeName());
}
- return new Pair<>(typeConstructorFun, format);
+ return new Pair<>(typeConstructorFun, withFormat ? new AString(format) : null);
}
private static Triple<String, String, String> getTemporalFormats(Index index) {
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java
index cdcfc0b..bb1bd40 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java
@@ -29,7 +29,7 @@
import org.apache.asterix.metadata.entities.Dataset;
import org.apache.asterix.metadata.entities.Index;
import org.apache.asterix.metadata.entities.InternalDatasetDetails;
-import org.apache.asterix.om.base.AString;
+import org.apache.asterix.om.base.IAObject;
import org.apache.asterix.om.constants.AsterixConstantValue;
import org.apache.asterix.om.functions.IFunctionDescriptor;
import org.apache.asterix.om.functions.IFunctionManager;
@@ -329,7 +329,7 @@
private IScalarEvaluatorFactory createConstructorFunction(IFunctionManager funManager, IDataFormat dataFormat,
IScalarEvaluatorFactory fieldEvalFactory, IAType fieldType) throws AlgebricksException {
IAType targetType = TypeComputeUtils.getActualType(fieldType);
- Pair<FunctionIdentifier, String> constructorWithFmt =
+ Pair<FunctionIdentifier, IAObject> constructorWithFmt =
IndexUtil.getTypeConstructorDefaultNull(index, targetType, sourceLoc);
FunctionIdentifier typeConstructorFun = constructorWithFmt.first;
IFunctionDescriptor typeConstructor = funManager.lookupFunction(typeConstructorFun, sourceLoc);
@@ -337,7 +337,7 @@
// add the format argument if specified
if (constructorWithFmt.second != null) {
IScalarEvaluatorFactory fmtEvalFactory =
- dataFormat.getConstantEvalFactory(new AsterixConstantValue(new AString(constructorWithFmt.second)));
+ dataFormat.getConstantEvalFactory(new AsterixConstantValue(constructorWithFmt.second));
args = new IScalarEvaluatorFactory[] { fieldEvalFactory, fmtEvalFactory };
} else {
args = new IScalarEvaluatorFactory[] { fieldEvalFactory };
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java
index 5900c8a..570757e 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/TypeUtil.java
@@ -33,6 +33,7 @@
import org.apache.asterix.metadata.entities.Dataset;
import org.apache.asterix.metadata.entities.Function;
import org.apache.asterix.metadata.entities.Index;
+import org.apache.asterix.om.base.IAObject;
import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.asterix.om.typecomputer.impl.TypeComputeUtils;
import org.apache.asterix.om.types.AOrderedListType;
@@ -65,11 +66,11 @@
private static final String FUNCTION_INLINE_TYPE_PREFIX = "$f$t$";
- private static final String DATETIME_PARAMETER_NAME = BuiltinType.ADATETIME.getTypeName();
+ public static final String DATETIME_PARAMETER_NAME = BuiltinType.ADATETIME.getTypeName();
- private static final String DATE_PARAMETER_NAME = BuiltinType.ADATE.getTypeName();
+ public static final String DATE_PARAMETER_NAME = BuiltinType.ADATE.getTypeName();
- private static final String TIME_PARAMETER_NAME = BuiltinType.ATIME.getTypeName();
+ public static final String TIME_PARAMETER_NAME = BuiltinType.ATIME.getTypeName();
private TypeUtil() {
}
@@ -167,14 +168,14 @@
}
}
- public static String getTemporalFormatArg(AbstractFunctionCallExpression funExpr) {
+ public static IAObject getTemporalFormatArg(AbstractFunctionCallExpression funExpr) {
FunctionIdentifier funId = funExpr.getFunctionIdentifier();
if (BuiltinFunctions.DATE_DEFAULT_NULL_CONSTRUCTOR_WITH_FORMAT.equals(funId)
|| BuiltinFunctions.TIME_DEFAULT_NULL_CONSTRUCTOR_WITH_FORMAT.equals(funId)
|| BuiltinFunctions.DATETIME_DEFAULT_NULL_CONSTRUCTOR_WITH_FORMAT.equals(funId)) {
List<Mutable<ILogicalExpression>> arguments = funExpr.getArguments();
if (arguments.size() > 1) {
- return ConstantExpressionUtil.getStringConstant(arguments.get(1).getValue());
+ return ConstantExpressionUtil.getConstantIaObject(arguments.get(1).getValue(), null);
}
}
return null;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ADate.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ADate.java
index 9b26ed5..63c8f31 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ADate.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ADate.java
@@ -73,7 +73,7 @@
@Override
public String toString() {
StringBuilder sbder = new StringBuilder();
- sbder.append("\"date\": { ");
+ sbder.append("date: { ");
try {
GregorianCalendarSystem.getInstance().getExtendStringRepUntilField(chrononTimeInDay * CHRONON_OF_DAY, sbder,
GregorianCalendarSystem.Fields.YEAR, GregorianCalendarSystem.Fields.DAY);