コード例 #1
0
        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()));
        }
コード例 #2
0
        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));
        }