コード例 #1
0
        internal static QueryTablePacketDTO SerializeHeader(List <BaseColumnModel> columnModelList, bool isArchive)
        {
            BaseTablePacketDTO  baseHeader = SerializeHeader(columnModelList);
            QueryTablePacketDTO header     = QueryTablePacketDTO.FromBaseTablePacketDTO(baseHeader, isArchive);

            return(header);
        }
コード例 #2
0
        public static ViewDTO GetViewCache(long viewCacheId, bool isSchedulerCall)
        {
            ViewDTO view;

            using (var avrTran = new AvrDbTransaction())
            {
                DbManagerProxy manager   = avrTran.Manager;
                DbManager      headerCmd = manager.SetSpCommand("spAsViewCacheGetHeader",
                                                                manager.Parameter("idfViewCache", viewCacheId),
                                                                manager.Parameter("blnSchedulerCall", isSchedulerCall));

                lock (m_DbSyncLock)
                {
                    int packetCount;
                    using (IDataReader reader = headerCmd.ExecuteReader())
                    {
                        if (!reader.Read())
                        {
                            return(null);
                        }

                        BaseTableDTO viewTableDTO = new BaseTableDTO
                        {
                            Header =
                            {
                                RowCount   = (int)reader["intViewColumnCount"],
                                BinaryBody = new ChunkByteArray((byte[])reader["blbViewSchema"])
                            }
                        };

                        var binaryHeader = (byte[])reader["blbViewHeader"];
                        view = new ViewDTO(viewTableDTO, binaryHeader);

                        packetCount = (int)reader["intPacketCount"];
                    }
                    for (int packetNumber = 0; packetNumber < packetCount; packetNumber++)
                    {
                        DbManager packetCmd = manager.SetSpCommand("spAsViewCacheGetPacket",
                                                                   manager.Parameter("idfViewCache", viewCacheId),
                                                                   manager.Parameter("intViewCachePacketNumber", packetNumber));

                        var packetDTO = new BaseTablePacketDTO();
                        using (IDataReader packetReader = packetCmd.ExecuteReader())
                        {
                            if (!packetReader.Read())
                            {
                                return(null);
                            }

                            packetDTO.RowCount   = (int)packetReader["intTableRowCount"];
                            packetDTO.BinaryBody = new ChunkByteArray((byte[])packetReader["blbViewCachePacket"]);
                        }
                        view.BodyPackets.Add(packetDTO);
                    }

                    avrTran.CommitTransaction();
                }
            }
            return(view);
        }
コード例 #3
0
        internal static QueryTablePacketDTO SerializeBodyPacket
            (IDataReader reader, List <BaseColumnModel> columnModels, bool isArchive, int maxPacketRows = 0)
        {
            BaseTablePacketDTO  basePacket = SerializeBodyPacket(reader, columnModels, maxPacketRows);
            QueryTablePacketDTO packet     = QueryTablePacketDTO.FromBaseTablePacketDTO(basePacket, isArchive);

            return(packet);
        }
コード例 #4
0
        public static BaseTablePacketDTO Zip(BaseTablePacketDTO sourcePacket)
        {
            var result = new BaseTablePacketDTO
            {
                RowCount   = sourcePacket.RowCount,
                BinaryBody = Zip(sourcePacket.BinaryBody),
            };

            return(result);
        }
コード例 #5
0
        internal static List <BaseColumnModel> DeserializeHeader(BaseTablePacketDTO header)
        {
            var result = new List <BaseColumnModel>();

            using (Stream stream = new MemoryStream(header.BinaryBody.Length))
            {
                stream.Write(header.BinaryBody, 0, header.BinaryBody.Length);
                stream.Flush();
                stream.Seek(0, SeekOrigin.Begin);
                using (var reader = new BinaryReader(stream))
                {
                    for (int i = 0; i < header.RowCount; i++)
                    {
                        string name    = reader.ReadString();
                        string caption = reader.ReadString();
                        Type   type    = Type.GetType(reader.ReadString());
                        result.Add(new BaseColumnModel(name, caption, type));
                    }
                }
            }
            return(result);
        }
コード例 #6
0
        internal static BaseTablePacketDTO SerializeHeader(List <BaseColumnModel> columnModelList)
        {
            using (Stream stream = new MemoryStream())
            {
                using (var writer = new BinaryWriter(stream))
                {
                    foreach (BaseColumnModel columnModel in columnModelList)
                    {
                        writer.Write(columnModel.Name);
                        writer.Write(columnModel.Caption);
                        writer.Write(columnModel.FinalType.ToString());
                    }
                    writer.Flush();
                    var streamLength = (int)stream.Length;
                    stream.Seek(0, SeekOrigin.Begin);

                    var header = new BaseTablePacketDTO(columnModelList.Count, streamLength);
                    int readed = stream.Read(header.BinaryBody, 0, streamLength);
                    Debug.Assert(streamLength == readed, "not all bytes readed");
                    return(header);
                }
            }
        }
コード例 #7
0
        public static BaseTableDTO SerializeFromTable(DataTable table, int maxPacketRows = 0)
        {
            var columnModels = new List <BaseColumnModel>();

            foreach (DataColumn column in table.Columns)
            {
                var columnModel = new BaseColumnModel(column.ColumnName, column.Caption, column.DataType);
                columnModels.Add(columnModel);
            }

            DataTableReader    reader = table.CreateDataReader();
            BaseTablePacketDTO packet = SerializeBodyPacket(reader, columnModels, maxPacketRows);
            var result = new BaseTableDTO {
                TableName = table.TableName
            };

            while (packet.RowCount != 0)
            {
                result.BodyPackets.Add(packet);
                packet = SerializeBodyPacket(reader, columnModels, maxPacketRows);
            }
            result.Header = SerializeHeader(columnModels);
            return(result);
        }
コード例 #8
0
        public static void DeserializeBodyPacket(BaseTablePacketDTO packet, Type[] types, AvrDataTable table)
        {
            Utils.CheckNotNull(packet, "packet");

            DeserializeBodyPacket(packet.RowCount, types, table, packet.StreamCreator);
        }
コード例 #9
0
        internal static BaseTablePacketDTO SerializeBodyPacket
            (IDataReader reader, List <BaseColumnModel> columnModels, int maxPacketRows = 0)
        {
            if (maxPacketRows <= 0)
            {
                maxPacketRows = MaxPacketRows;
            }

            BaseTablePacketDTO packet;
            int rowsCount = 0;

            var internStringsDict = new Dictionary <int, List <string> >();

            for (int i = 0; i < columnModels.Count; i++)
            {
                internStringsDict[i] = new List <string>();
            }
            using (Stream stream = new MemoryStream())
            {
                using (var writer = new BinaryWriter(stream))
                {
                    while (rowsCount < maxPacketRows && reader.Read())
                    {
                        rowsCount++;
                        for (int i = 0; i < columnModels.Count; i++)
                        {
                            bool hasValue = !reader.IsDBNull(i);

                            if (hasValue)
                            {
                                if (!WriteReaderValueToStream(writer, reader, i, columnModels[i].InitilalType, internStringsDict[i]))
                                {
                                    // if value is boxed, i.e. has object type. It is usualy when uses sql_variant
                                    object value  = reader.GetValue(i);
                                    bool   result = false;
                                    if (value != null)
                                    {
                                        result = columnModels[i].TryChangeType(value.GetType())
                                            ? UnboxAndWriteObjectToStream(writer, value, columnModels[i].FinalType)
                                            : ParseAndWriteObjectToStream(writer, value.ToString(), columnModels[i].FinalType);
                                    }

                                    if (!result)
                                    {
                                        writer.Write(false);
                                    }
                                }
                            }
                            else
                            {
                                writer.Write(false);
                            }
                        }
                    }

                    stream.Flush();
                    var streamLength = (int)stream.Length;

                    packet = new BaseTablePacketDTO(rowsCount, streamLength);
                    stream.Seek(0, SeekOrigin.Begin);
                    int readed = stream.Read(packet.BinaryBody, 0, streamLength);
                    Debug.Assert(streamLength == readed, "not all bytes readed");
                }
            }
            return(packet);
        }