public override Argument VisitNormdExpression(CalcParser.NormdExpressionContext context) { Argument arg = Visit(context.expression()); if (arg.IsNull) { return(Argument.Null); } if (arg.IsDouble || arg.IsInteger) { throw new ArgumentCastException("Argument of $NORMD macro should not be a number"); } if (arg.IsTime) { int time = arg.ToTime(); if (time != -1) { throw new ArgumentCastException("Argument of $NORMD macro should not be a number or a time"); } } if (arg.IsDate) { return(new Argument(arg.ToDate().Value)); } // argument is not a date. So, it's a field return(this._resolver.ResolveFieldValue(arg.ToString())); }
public override Query VisitNormdExpression(CalcParser.NormdExpressionContext context) { Query fieldQuery = Visit(context.expression()); string fieldName = fieldQuery.Text; FieldInfo fieldInfo = this._metadataResolver.GetField(fieldName); string queryText; switch (fieldInfo.Type) { case DFM_FIELD_TYPE.DFM_FT_DATE: queryText = "X" + fieldName; break; case DFM_FIELD_TYPE.DFM_FT_MEMO: case DFM_FIELD_TYPE.DFM_FT_STRING: queryText = this._dbTranslator.FieldToDate(fieldInfo); break; default: throw new ExpressionException("$NORMD can be applied for DATE and STRING fields only"); } return(new Query(queryText, ResultType.Date)); }