Ejemplo n.º 1
0
        public void SimpleQueryTest()
        {
            var facadeStub = new AVRFacadeStub(123);
            var receiver   = new AvrCacheReceiver(facadeStub);

            AvrDataTable dataTable;

            using (new StopwathTransaction("+++GetCachedQueryTable+++"))
            {
                CachedQueryResult result = receiver.GetCachedQueryTable(1, "en", false, string.Empty, new LayoutSilentValidatorWaiter());
                dataTable = result.QueryTable;
                Assert.IsNotNull(dataTable);
            }
            Assert.IsNotNull(dataTable);
            Assert.AreEqual(54 * 2, dataTable.Columns.Count);
            Assert.AreEqual(31, dataTable.Rows.Count);
            var caseIdIndex = dataTable.Columns["sflHC_CaseID"].Ordinal;

            AvrDataRowBase lastRow = dataTable.Rows.Find(r => Utils.Str(r[caseIdIndex]) == "HC1000031");

            Assert.AreEqual(new DateTime(1990, 02, 01), lastRow[0]);
            Assert.AreEqual(23, lastRow[1]);
            Assert.AreEqual(DBNull.Value, lastRow[3]);
            Assert.AreEqual("xxx", lastRow[4]);
            Assert.AreEqual("Male", lastRow[6]);
            Assert.AreEqual(DBNull.Value, lastRow[7]);
            Assert.AreEqual(DateTime.Now.Year, ((DateTime)lastRow[50]).Year);
            Assert.AreEqual(DateTime.Now.Year, lastRow[51]);
            Assert.AreEqual(25460000000m, lastRow[52]);
            Assert.AreEqual("Yes", lastRow[53]);
        }
Ejemplo n.º 2
0
        public static void DeserializeBodyPacket(int rowsCount, Type[] types, AvrDataTable table, Func <Stream> streamCreator)
        {
            Utils.CheckNotNull(types, "types");
            Utils.CheckNotNull(streamCreator, "streamCreator");
            Stream stream = streamCreator();

            if (stream == null)
            {
                throw new AvrException("Could not deserialize avr table packet: stream creator is null");
            }

            int colsCount     = types.Length;
            var internIndexes = new int[colsCount];
            var internStrings = new string[colsCount][];

            for (int i = 0; i < internStrings.Length; i++)
            {
                internStrings[i] = new string[sbyte.MaxValue];
            }

            ExpressionEvaluator filter = null;

            if (!string.IsNullOrEmpty(table.RowFilterExpression))
            {
                var descriptor       = new AvrRowEvaluatorContextDescriptor(table);
                var criteriaOperator = CriteriaOperator.Parse(table.RowFilterExpression);
                filter = new ExpressionEvaluator(descriptor, criteriaOperator);
            }

            var rowDTO = CreateAvrDataRowDTO(types);

            using (var reader = new BinaryReader(stream))
            {
                for (int i = 0; i < rowsCount; i++)
                {
                    for (int j = 0; j < colsCount; j++)
                    {
                        sbyte status = reader.ReadSByte();

                        if (status > 0)
                        {
                            Type type = types[j];

                            if (type == m_TypeOfString)
                            {
                                string val;
                                var    internIndex = internIndexes[j];
                                if (internIndex < sbyte.MaxValue)
                                {
                                    if (status == 1)
                                    {
                                        val = reader.ReadString();
                                        internStrings[j][internIndex] = val;
                                        internIndexes[j] = internIndex + 1;
                                    }
                                    else
                                    {
                                        val = internStrings[j][status - 2];
                                    }
                                }
                                else
                                {
                                    val = reader.ReadString();
                                }

                                rowDTO.SetObject(j, val);
                            }
                            else if (type == m_TypeOfDateTime)
                            {
                                var value = new DateTime(reader.ReadInt64());
                                rowDTO.SetDateTime(j, value);
                            }
                            else if (type == m_TypeOfInt32)
                            {
                                rowDTO.SetInt(j, reader.ReadInt32());
                            }
                            else if (type == m_TypeOfInt64)
                            {
                                rowDTO.SetObject(j, reader.ReadInt64());
                            }
                            else if (type == m_TypeOfInt16)
                            {
                                rowDTO.SetObject(j, reader.ReadInt16());
                            }
                            else if (type == m_TypeOfDouble)
                            {
                                rowDTO.SetObject(j, reader.ReadDouble());
                            }
                            else if (type == m_TypeOfDecimal)
                            {
                                rowDTO.SetObject(j, reader.ReadDecimal());
                            }
                            else if (type == m_TypeOfSingle)
                            {
                                rowDTO.SetObject(j, reader.ReadSingle());
                            }
                            else if (type == m_TypeOfBoolean)
                            {
                                rowDTO.SetObject(j, reader.ReadBoolean());
                            }
                            else if (type == m_TypeOfByte)
                            {
                                rowDTO.SetObject(j, reader.ReadByte());
                            }
                        }
                    }

                    AvrDataRowBase newRow = table.NewRow(rowDTO);
                    if (filter == null || filter.Fit(newRow))
                    {
                        table.ThreadSafeAdd(newRow);
                    }

                    rowDTO.Reset();
                }
            }

            stream.Dispose();
        }