Beispiel #1
0
        public override Query VisitFieldExpression(CalcParser.FieldExpressionContext context)
        {
            Query     fieldQuery = Visit(context.expression());
            string    fieldName  = fieldQuery.Text;
            FieldInfo fieldInfo  = this._metadataResolver.GetField(fieldName);

            ResultType type = ResultType.Number;
            string     queryText;

            if (fieldInfo.Type != DFM_FIELD_TYPE.DFM_FT_STRING && fieldInfo.Type != DFM_FIELD_TYPE.DFM_FT_MEMO)
            {
                if (fieldInfo.Type == DFM_FIELD_TYPE.DFM_FT_DATE)
                {
                    type = ResultType.Date;
                }

                queryText = "X" + fieldInfo.Name;
            }
            else
            {
                queryText = this._dbTranslator.FieldToInt(fieldInfo);
            }

            return(new Query(queryText, type));
        }
Beispiel #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));
        }
Beispiel #3
0
        private FieldInfo CreateFieldInfo(string name, DFM_FIELD_TYPE type)
        {
            FieldInfo fieldInfo = new FieldInfo
            {
                Name = name,
                Type = type
            };

            return(fieldInfo);
        }
Beispiel #4
0
        public override Query VisitFldlenExpression(CalcParser.FldlenExpressionContext context)
        {
            Query  fieldQuery = Visit(context.expression());
            string fieldName  = fieldQuery.Text;

            FieldInfo fieldInfo = this._metadataResolver.GetField(fieldName);
            string    queryText = this._dbTranslator.FieldLength(fieldInfo);

            return(new Query(queryText, ResultType.Number));
        }
Beispiel #5
0
        public override string FieldLength(FieldInfo fieldInfo)
        {
            if (fieldInfo.Type == DFM_FIELD_TYPE.DFM_FT_INTEGER)
            {
                return($"CHAR_LENGTH(CAST(X{fieldInfo.Name} AS INTEGER))");
            }

            if (fieldInfo.Type == DFM_FIELD_TYPE.DFM_FT_DECIMAL)
            {
                return($"(CHAR_LENGTH(CAST(X{fieldInfo.Name} AS INTEGER)) + {fieldInfo.Precision + 1})");
            }

            return($"CHAR_LENGTH(X{fieldInfo.Name})");
        }
Beispiel #6
0
 public override string FieldToDate(FieldInfo fieldInfo)
 {
     return($"CAST(REPLACE(X{fieldInfo.Name}, 'T', ' ') AS DATE)");
 }
Beispiel #7
0
 public override string FieldToInt(FieldInfo fieldInfo)
 {
     return($"CAST(X{fieldInfo.Name} AS INTEGER)");
 }
Beispiel #8
0
 public override string FieldLength(FieldInfo fieldInfo)
 {
     return($"LEN(X{fieldInfo.Name})");
 }
Beispiel #9
0
 public override string FieldToDate(FieldInfo fieldInfo)
 {
     return($"CONVERT(datetime, X{fieldInfo.Name}, 126)");
 }
Beispiel #10
0
 public abstract string FieldToDate(FieldInfo fieldInfo);
Beispiel #11
0
 public abstract string FieldLength(FieldInfo fieldInfo);
Beispiel #12
0
 public abstract string FieldToInt(FieldInfo fieldInfo);
Beispiel #13
0
 public override string FieldToDate(FieldInfo fieldInfo)
 {
     return($"TO_DATE(X{fieldInfo.Name}, 'YYYY-MM-DD\"T\"HH24:MI:SS')");
 }
Beispiel #14
0
 public override string FieldToInt(FieldInfo fieldInfo)
 {
     return($"TO_NUMBER(X{fieldInfo.Name})");
 }