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