示例#1
0
        public void TestQTable()
        {
            var columns = new[] { "pos", "dates" };
            var data    = new object[] { new[] { "d1", "d2", "d3" }, new[] { 1001, 1002, 1003 } };

            var t = new QTable(columns, data);

            Assert.AreEqual(t, new QTable(columns, data));

            Assert.IsTrue(t.HasColumn("pos"));
            Assert.IsFalse(t.HasColumn("unknown"));

            Assert.AreEqual(1, t.GetColumnIndex("dates"));
            Assert.Throws <NullReferenceException>(() => t.GetColumnIndex("unknown"));

            int i = 0;
            var e = t.GetEnumerator();

            while (e.MoveNext())
            {
                var r = e.Current;
                Assert.AreEqual(t[i].ToArray(), r.ToArray());
                i++;
            }

            Assert.AreEqual(i, t.RowsCount);
        }
示例#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);
                    }
                }
            }
        }
示例#3
0
        public void TestQTable()
        {
            var columns = new[] { "pos", "dates" };
            var data = new object[] { new[] { "d1", "d2", "d3" }, new[] { 1001, 1002, 1003 } };

            var t = new QTable(columns, data);
            Assert.AreEqual(t, new QTable(columns, data));

            Assert.IsTrue(t.HasColumn("pos"));
            Assert.IsFalse(t.HasColumn("unknown"));

            Assert.AreEqual(1, t.GetColumnIndex("dates"));
            Assert.Throws<NullReferenceException>(() => t.GetColumnIndex("unknown"));

            int i = 0;
            var e = t.GetEnumerator();

            while (e.MoveNext())
            {
                var r = e.Current;
                Assert.AreEqual(t[i].ToArray(), r.ToArray());
                i++;
            }

            Assert.AreEqual(i, t.RowsCount);
        }