/// <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 }
/// <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()); } }
/// <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); }