Example #1
0
        public HighWaterMarkDetail Get()
        {
            HighWaterMarkDetail detail = new HighWaterMarkDetail();

            SqlStoredProcedureAccessor sp = new SqlStoredProcedureAccessor();

            sp.ProcedureName = "net_highWaterMarks_get";

            SqlDataReaderAccessor reader = sp.ExecuteReader();

            try
            {
                while (reader.Read())
                {
                    detail.HighWaterMarks.Add(
                        reader.GetString("operatorKey"),
                        reader.GetLong("USN"));
                }
            }
            finally
            {
                reader.Close();
            }

            return(detail);
        }
Example #2
0
        public ArrayList Read(SqlDataReaderAccessor reader)
        {
            ArrayList addressIDs = new ArrayList();

            if (1 == Context.ApiVersionMajor)
            {
                while (reader.Read())
                {
                    addressIDs.Add(reader.GetLong("addressID"));
                    Add(reader.GetString("sortCode"), reader.GetString("useType"));
                }
            }
            else
            {
                while (reader.Read())
                {
                    addressIDs.Add(reader.GetLong("addressID"));
                    Add(reader.GetString("sortCode"), reader.GetString("useType"), reader.GetKeyFromGuid("tModelKey"));
                }
            }

            return(addressIDs);
        }
Example #3
0
        public void Get(long contactID)
        {
            ArrayList addressIDs          = new ArrayList();
            SqlStoredProcedureAccessor sp = new SqlStoredProcedureAccessor("net_contact_addresses_get");

            sp.Parameters.Add("@contactID", SqlDbType.BigInt);
            sp.Parameters.SetLong("@contactID", contactID);

            SqlDataReaderAccessor reader = sp.ExecuteReader();

            try
            {
                addressIDs = Read(reader);
            }
            finally
            {
                reader.Close();
            }

            Populate(addressIDs);

#if never
            ArrayList addressIDs          = new ArrayList();
            SqlStoredProcedureAccessor sp = new SqlStoredProcedureAccessor();

            sp.ProcedureName = "net_contact_addresses_get";

            sp.Parameters.Add("@contactID", SqlDbType.BigInt);
            sp.Parameters.SetLong("@contactID", contactID);

            SqlDataReaderAccessor reader = sp.ExecuteReader();

            try
            {
                if (1 == Context.ApiVersionMajor)
                {
                    while (reader.Read())
                    {
                        addressIDs.Add(reader.GetLong("addressID"));
                        Add(reader.GetString("sortCode"), reader.GetString("useType"));
                    }
                }
                else
                {
                    while (reader.Read())
                    {
                        addressIDs.Add(reader.GetLong("addressID"));
                        Add(reader.GetString("sortCode"), reader.GetString("useType"), reader.GetKeyFromGuid("tModelKey"));
                    }
                }
            }
            finally
            {
                reader.Close();
            }

            //
            // Retrieve the addressLines for this address
            //
            int index = 0;

            foreach (Address address in this)
            {
                address.Get((long)addressIDs[index]);
                index++;
            }
#endif
        }
Example #4
0
        /// ****************************************************************
        ///   public Get
        /// ----------------------------------------------------------------
        ///   <summary>
        ///   </summary>
        /// ****************************************************************
        ///
        public ChangeRecordDetail Get()
        {
            Debug.VerifySetting("OperatorKey");

            ChangeRecordDetail detail = new ChangeRecordDetail();

            try
            {
                //
                // Get the list of known operators.
                //
                StringCollection operators = new StringCollection();

                SqlStoredProcedureAccessor sp = new SqlStoredProcedureAccessor();

                sp.ProcedureName = "net_operators_get";
                SqlDataReaderAccessor reader = sp.ExecuteReader();

                try
                {
                    while (reader.Read())
                    {
                        operators.Add(reader.GetGuidString("operatorKey"));
                    }
                }
                finally
                {
                    reader.Close();
                }

                //
                // Set the search criteria for change records.
                //
                foreach (string operatorKey in operators)
                {
                    long startUSN;
                    long stopUSN;

                    startUSN = 0;
                    foreach (ChangeRecordVector mark in ChangesAlreadySeen)
                    {
                        if (0 == String.Compare(operatorKey, mark.NodeID, true))
                        {
                            startUSN = mark.OriginatingUSN + 1;
                            break;
                        }
                    }

                    stopUSN = System.Int64.MaxValue;
                    foreach (ChangeRecordVector mark in ResponseLimitVector)
                    {
                        if (0 == String.Compare(operatorKey, mark.NodeID, true))
                        {
                            stopUSN = mark.OriginatingUSN;
                            break;
                        }
                    }

                    FindChangeRecords.SetRange(operatorKey, startUSN, stopUSN);
                }

                //
                // Retrieve the change records.
                //
                int limit = Config.GetInt("Replication.ResponseLimitCountDefault");

                if (ResponseLimitCount >= 0 && ResponseLimitCount <= limit)
                {
                    limit = ResponseLimitCount;
                }

                reader = FindChangeRecords.RetrieveResults(limit);

                try
                {
                    while (reader.Read())
                    {
                        XmlSerializer serializer = null;

                        switch ((ChangeRecordPayloadType)reader.GetShort("changeTypeID"))
                        {
                        case ChangeRecordPayloadType.ChangeRecordNull:
                            serializer = XmlSerializerManager.GetSerializer(typeof(ChangeRecordNull));
                            break;

                        case ChangeRecordPayloadType.ChangeRecordNewData:
                            serializer = XmlSerializerManager.GetSerializer(typeof(ChangeRecordNewData));
                            break;

                        case ChangeRecordPayloadType.ChangeRecordDelete:
                            serializer = XmlSerializerManager.GetSerializer(typeof(ChangeRecordDelete));
                            break;

                        case ChangeRecordPayloadType.ChangeRecordPublisherAssertion:
                            serializer = XmlSerializerManager.GetSerializer(typeof(ChangeRecordPublisherAssertion));
                            break;

                        case ChangeRecordPayloadType.ChangeRecordHide:
                            serializer = XmlSerializerManager.GetSerializer(typeof(ChangeRecordHide));
                            break;

                        case ChangeRecordPayloadType.ChangeRecordDeleteAssertion:
                            serializer = XmlSerializerManager.GetSerializer(typeof(ChangeRecordDeleteAssertion));
                            break;

                        case ChangeRecordPayloadType.ChangeRecordAcknowledgement:
                            serializer = XmlSerializerManager.GetSerializer(typeof(ChangeRecordAcknowledgement));
                            break;

                        case ChangeRecordPayloadType.ChangeRecordCorrection:
                            serializer = XmlSerializerManager.GetSerializer(typeof(ChangeRecordCorrection));
                            break;
                        }

                        StringReader stringReader = new StringReader(reader.GetString("changeData"));

                        try
                        {
                            ChangeRecord changeRecord = new ChangeRecord();

                            changeRecord.AcknowledgementRequested = (reader.GetInt("flag") & (int)ChangeRecordFlags.AcknowledgementRequested) > 0;
                            changeRecord.ChangeID.NodeID          = reader.GetString("OperatorKey");
                            changeRecord.ChangeID.OriginatingUSN  = reader.GetLong("USN");

                            ChangeRecordBase changeRecordBase = ( ChangeRecordBase )serializer.Deserialize(stringReader);
                            if (changeRecordBase is ChangeRecordCorrection)
                            {
                                //
                                // The query to find change records will do correction 'fixups'.  That is, the changeData of this
                                // change record will be replaced with the changeData from the correction.  The problem with this is
                                // that the original change data will now look like a correction.  To distinguish these types of
                                // change records, we look to see if the OriginatingUSN's match.  If the OriginatingUSN's match,
                                // we want they payload of the change record in this correction.  This payload will contain the
                                // corrected data that we want.
                                //
                                ChangeRecordCorrection changeRecordCorrection = ( ChangeRecordCorrection )changeRecordBase;
                                if (changeRecordCorrection.ChangeRecord.ChangeID.OriginatingUSN == changeRecord.ChangeID.OriginatingUSN)
                                {
                                    changeRecordBase = changeRecordCorrection.ChangeRecord.Payload;
                                }
                            }

                            changeRecord.Payload = changeRecordBase;

                            detail.ChangeRecords.Add(changeRecord);
                        }
                        finally
                        {
                            stringReader.Close();
                        }
                    }
                }
                finally
                {
                    reader.Close();
                }
            }
            catch (Exception e)
            {
                Debug.OperatorMessage(
                    SeverityType.Error,
                    CategoryType.Replication,
                    OperatorMessageType.None,
                    "Could not retrieve change records:\r\n" + e.ToString());

                FindChangeRecords.CleanUp();
                throw;
            }

            return(detail);
        }
Example #5
0
        static ChangeRecord CreateChangeRecord(SqlDataReaderAccessor reader)
        {
            ChangeRecord changeRecord = null;

            XmlSerializer serializer = null;

            switch ((ChangeRecordPayloadType)reader.GetShort("changeTypeID"))
            {
            case ChangeRecordPayloadType.ChangeRecordNull:
                serializer = new XmlSerializer(typeof(ChangeRecordNull));
                break;

            case ChangeRecordPayloadType.ChangeRecordNewData:
                serializer = new XmlSerializer(typeof(ChangeRecordNewData));
                break;

            case ChangeRecordPayloadType.ChangeRecordDelete:
                serializer = new XmlSerializer(typeof(ChangeRecordDelete));
                break;

            case ChangeRecordPayloadType.ChangeRecordPublisherAssertion:
                serializer = new XmlSerializer(typeof(ChangeRecordPublisherAssertion));
                break;

            case ChangeRecordPayloadType.ChangeRecordHide:
                serializer = new XmlSerializer(typeof(ChangeRecordHide));
                break;

            case ChangeRecordPayloadType.ChangeRecordDeleteAssertion:
                serializer = new XmlSerializer(typeof(ChangeRecordDeleteAssertion));
                break;

            case ChangeRecordPayloadType.ChangeRecordAcknowledgement:
                serializer = new XmlSerializer(typeof(ChangeRecordAcknowledgement));
                break;

            case ChangeRecordPayloadType.ChangeRecordCorrection:
                serializer = new XmlSerializer(typeof(ChangeRecordCorrection));
                break;
            }

            StringReader stringReader = new StringReader(reader.GetString("changeData"));

            try
            {
                changeRecord = new ChangeRecord();

                changeRecord.AcknowledgementRequested = (reader.GetInt("flag") & (int)ChangeRecordFlags.AcknowledgementRequested) > 0;
                changeRecord.ChangeID.NodeID          = reader.GetString("OperatorKey");
                changeRecord.ChangeID.OriginatingUSN  = reader.GetLong("USN");

                ChangeRecordBase changeRecordBase = ( ChangeRecordBase )serializer.Deserialize(stringReader);
                if (changeRecordBase is ChangeRecordCorrection)
                {
                    //
                    // The query to find change records will do correction 'fixups'.  That is, the changeData of this
                    // change record will be replaced with the changeData from the correction.  The problem with this is
                    // that the original change data will now look like a correction.  To distinguish these types of
                    // change records, we look to see if the OriginatingUSN's match.  If the OriginatingUSN's match,
                    // we want they payload of the change record in this correction.  This payload will contain the
                    // corrected data that we want.
                    //
                    ChangeRecordCorrection changeRecordCorrection = ( ChangeRecordCorrection )changeRecordBase;
                    if (changeRecordCorrection.ChangeRecord.ChangeID.OriginatingUSN == changeRecord.ChangeID.OriginatingUSN)
                    {
                        changeRecordBase = changeRecordCorrection.ChangeRecord.Payload;
                    }
                }

                changeRecord.Payload = changeRecordBase;
            }
            finally
            {
                stringReader.Close();
            }

            return(changeRecord);
        }