Пример #1
0
 /// <summary>
 ///     Gets a column index for specified name.
 /// </summary>
 /// <param name="column">Name of the column</param>
 /// <returns>0 based column index
 public int GetColumnIndex(string column)
 {
     if (_keys.HasColumn(column))
     {
         return(_keys.GetColumnIndex(column));
     }
     else
     {
         return(_values.GetColumnIndex(column) + _keys.ColumnsCount);
     }
 }
Пример #2
0
        //-------------------------------------------------------------------//        
        /// <summary>
        ///     This function applies data received from Q process to in-memory cache.
        ///     All operations are structured in a way that only data that has been subscribed is kept,
        ///     i.e.: data from columns that were not requested is simply discarded.
        /// </summary>
        /// <param name="alias">alias of the connection producing the data</param>
        /// <param name="table">name of the table</param>
        /// <param name="data">table data</param>
        private static void UpdateCache(string alias, string table, QTable data)
        {
            var symIdx = data.GetColumnIndex(_symColName);
            var cols = data.Columns;
            foreach (QTable.Row row in data)
            {
                var ra = row.ToArray();
                var symName = ra[symIdx].ToString();

                var symId = GetSymbolId(alias, table, symName);
                if (WildCardMapping.ContainsKey(alias) /*&& symId != null*/)
                {
                    for (var i = 0; i < cols.Length; i++)
                    {
                        Cache.UpdateData(alias, table, symName, cols[i], Conversions.Convert2Excel(ra[i]));

                        AllSymbols[alias][table].Add(symName);
                        if (symId == null) continue;
                        if (!WildCardMapping[alias].ContainsColumn(table, symId, cols[i])) continue;

                        foreach (var ti in WildCardMapping[alias].GetTopics(table, symId, cols[i]))
                        {
                            DataOut.AddOrUpdate(ti, "", (k, v) => "");
                            var val = string.IsNullOrEmpty(ti.History)
                                ? Conversions.Convert2Excel(ra[i])
                                : Cache.GetData(alias, table, symName, cols[i], ti.History);
                            ti.Topic.UpdateValue(val ?? ExcelEmpty.Value);
                        }
                    }
                }

                if (!Mapping.ContainsKey(alias) || !Mapping[alias].ContainsSymbol(table, symName))
                {
                    continue;
                }
                for (var i = 0; i < cols.Length; i++)
                {
                    if (!Mapping[alias].ContainsColumn(table, symName, cols[i])) continue;
                    Cache.UpdateData(alias, table, symName, cols[i], Conversions.Convert2Excel(ra[i]));
                    foreach (var ti in Mapping[alias].GetTopics(table, symName, cols[i]))
                    {
                        DataOut.AddOrUpdate(ti, "", (k, v) => "");
                        var val = string.IsNullOrEmpty(ti.History)
                            ? Conversions.Convert2Excel(ra[i])
                            : Cache.GetData(alias, table, symName, cols[i], ti.History);
                        ti.Topic.UpdateValue(val ?? ExcelEmpty.Value);
                    }
                }
            }
        }