コード例 #1
0
/// <summary>
/// Format internal form of advanced expression
/// </summary>
/// <param name="advExpr"></param>
/// <param name="q"></param>

        string  FormatAdvancedExpr(
            string advExpr,
            out Query q)
        {
            QueryTable  qt;
            QueryColumn qc;
            MetaTable   mt;
            MetaColumn  mc;

            string extExpr = advExpr;             // copy internal form to external

            q = new Query();

            Lex lex = new Lex();

            lex.OpenString(advExpr);
            while (true)
            {
                string tok = lex.Get();
                if (tok == "")
                {
                    break;
                }
                if (Lex.IsQuoted(tok, '"'))
                {
                    tok = tok.Substring(1, tok.Length - 2).Trim();
                    mc  = MetaColumn.ParseMetaTableMetaColumnName(tok);
                    if (mc == null)
                    {
                        continue;                                 // not found, may be typo, ignore for now
                    }
                    mt = mc.MetaTable;
                    if (q.GetQueryTableByName(mt.Name) == null)
                    {
                        q.AddQueryTable(new QueryTable(mt));
                    }

                    string tok2 = mt.Name + "." + mc.Label;
                    extExpr = extExpr.Replace(tok, tok2);
                }
            }

// Add any other tables from base query for convenience

            Query q2 = QueriesControl.BaseQuery;

            if (q2 != null)
            {
                foreach (QueryTable qt0 in q2.Tables)
                {
                    qt = q.GetQueryTableByName(qt0.MetaTable.Name);
                    if (qt == null)
                    {
                        q.AddQueryTable(qt0.Clone());
                    }
                }
            }

            return(extExpr);            // return external form
        }
コード例 #2
0
        /// <summary>
        /// Deserialize
        /// </summary>
        /// <param name="serializedForm"></param>
        /// <returns></returns>

        public static SasMapParms Deserialize(string serializedForm)
        {
            try
            {
                SasMapParms sm = (SasMapParms)XmlUtil.Deserialize(serializedForm, typeof(SasMapParms));

                if (Lex.IsDefined(sm._kcqcMc))
                {
                    MetaColumn mc = MetaColumn.ParseMetaTableMetaColumnName(sm._kcqcMc);
                    sm.KeyCriteriaQc          = new QueryColumn(mc);
                    sm.KeyCriteriaQc.Criteria = sm._kcqcCriteria;
                }

                if (Lex.IsDefined(sm._endpointMc))
                {
                    sm.EndpointMc = MetaColumn.ParseMetaTableMetaColumnName(sm._endpointMc);
                }

                return(sm);
            }

            catch (Exception ex)
            {
                DebugLog.Message(ex);
                return(new SasMapParms());
            }
        }
コード例 #3
0
        /// <summary>
        /// Return list of MetaColumns
        /// </summary>
        /// <returns></returns>

        public List <MetaColumn> GetInputMetaColumnList()
        {
            int mci;

            List <MetaColumn> mcList = new List <MetaColumn>();

            if (CalcType == CalcTypeEnum.Basic)
            {
                foreach (CalcFieldColumn cfc in CfCols)
                {
                    if (cfc != null && cfc.MetaColumn != null)
                    {
                        mcList.Add(cfc.MetaColumn);
                    }
                }
            }

            else if (CalcType == CalcTypeEnum.Advanced)
            {
                Lex lex = new Lex();
                lex.OpenString(AdvancedExpr);
                while (true)
                {
                    string tok = lex.Get();
                    if (tok == "")
                    {
                        break;
                    }
                    if (!Lex.IsQuoted(tok, '"'))
                    {
                        continue;
                    }
                    tok = Lex.RemoveDoubleQuotes(tok);
                    MetaColumn mc = MetaColumn.ParseMetaTableMetaColumnName(tok);
                    if (mc == null)
                    {
                        continue;
                    }
                    for (mci = 0; mci < mcList.Count; mci++)
                    {
                        if (mcList[mci] == mc)
                        {
                            break;
                        }
                    }

                    if (mci >= mcList.Count)
                    {
                        mcList.Add(mc);
                    }
                }
            }

            return(mcList);
        }