You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1003 lines
23 KiB
1003 lines
23 KiB
-- Script: uddi.v2.repl.sql
|
|
-- Author: [email protected]
|
|
-- Description: Creates replication stored procedures.
|
|
-- Note: This file is best viewed and edited with a tab width of 2.
|
|
|
|
-- =============================================
|
|
-- Section: Update routines
|
|
-- =============================================
|
|
|
|
-- =============================================
|
|
-- Name: net_changeRecord_save
|
|
-- =============================================
|
|
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_changeRecord_save' AND type = 'P')
|
|
DROP PROCEDURE net_changeRecord_save
|
|
GO
|
|
|
|
CREATE PROCEDURE net_changeRecord_save
|
|
@USN bigint = NULL, -- NULL for local changeRecords
|
|
@PUID nvarchar(450) = NULL, -- NULL for remote changeRecords
|
|
@delegatePUID nvarchar(450) = NULL, -- NULL for remote changeRecords or local changeRecords with no delegate
|
|
@operatorKey uniqueidentifier = NULL, -- NULL for local changeRecords
|
|
@entityKey uniqueidentifier = NULL, -- entityKey for top-level entity in changeRecord
|
|
@entityTypeID tinyint = NULL, -- entityType for top-level entity in changeRecord
|
|
@changeTypeID tinyint, -- changeType for current save operation
|
|
@contextID uniqueidentifier, -- contextID for current save operation
|
|
@contextTypeID tinyint, -- contextType for current save operation
|
|
@lastChange bigint, -- timestamp for changeRecord
|
|
@changeData ntext, -- payload for current save operation
|
|
@flag int = 0, -- for future use
|
|
@seqNo bigint OUTPUT -- seqNo of newly created changeRecord
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000),
|
|
@publisherID bigint,
|
|
@delegatePublisherID bigint,
|
|
@operatorID bigint,
|
|
@RC int
|
|
|
|
-- Validate parameters
|
|
IF (@PUID IS NOT NULL) AND (@operatorKey IS NOT NULL)
|
|
BEGIN
|
|
SET @error = 50009 -- E_parmError
|
|
SET @context = 'Must pass either @PUID (local) or @operatorKey (remote).'
|
|
GOTO errorLabel
|
|
END
|
|
|
|
IF (@operatorKey IS NOT NULL)
|
|
BEGIN
|
|
SET @operatorID = dbo.operatorID(@operatorKey)
|
|
|
|
IF @operatorID IS NULL
|
|
BEGIN
|
|
SET @error = 60150 -- E_unknownUser
|
|
SET @context = '@operatorKey = ' + dbo.UUIDSTR(@operatorKey)
|
|
GOTO errorLabel
|
|
END
|
|
|
|
SELECT
|
|
@PUID = PU.[PUID]
|
|
FROM
|
|
[UDO_publishers] PU
|
|
JOIN [UDO_operators] OP ON PU.[publisherID] = OP.[publisherID]
|
|
WHERE
|
|
(OP.[operatorID] = @operatorID)
|
|
|
|
IF @delegatePUID IS NOT NULL
|
|
BEGIN
|
|
SET @error = 50009 -- E_parmError
|
|
SET @context = '@delegatePUID not valid for remote changeRecords.'
|
|
GOTO errorLabel
|
|
END
|
|
|
|
SET @publisherID = dbo.publisherID(@PUID)
|
|
END -- @operatorKey
|
|
ELSE
|
|
BEGIN -- Local change records
|
|
IF @delegatePUID IS NOT NULL
|
|
BEGIN
|
|
SET @delegatePublisherID = dbo.publisherID(@delegatePUID)
|
|
|
|
IF @delegatePublisherID IS NULL
|
|
BEGIN
|
|
SET @error = 60150 -- E_unknownUser
|
|
SET @context = 'Invalid delegate PUID. Delegates must be registered as publishers prior to impersonating other users.'
|
|
GOTO errorLabel
|
|
END
|
|
END
|
|
|
|
IF @PUID IS NULL
|
|
SET @publisherID = dbo.currentOperatorID()
|
|
ELSE
|
|
SET @publisherID = dbo.publisherID(@PUID)
|
|
END
|
|
|
|
IF @publisherID IS NULL
|
|
BEGIN
|
|
SET @error = 60150 -- E_unknownUser
|
|
SET @context = 'Invalid PUID.'
|
|
GOTO errorLabel
|
|
END
|
|
ELSE
|
|
|
|
-- Insert changeRecord
|
|
INSERT [UDO_changeLog] (
|
|
[USN],
|
|
[newSeqNo],
|
|
[publisherID],
|
|
[delegatePublisherID],
|
|
[entityKey],
|
|
[entityTypeID],
|
|
[changeTypeID],
|
|
[contextID],
|
|
[contextTypeID],
|
|
[lastChange],
|
|
[changeData],
|
|
[flag])
|
|
VALUES (
|
|
@USN,
|
|
NULL,
|
|
@publisherID,
|
|
@delegatePublisherID,
|
|
@entityKey,
|
|
@entityTypeID,
|
|
@changeTypeID,
|
|
@contextID,
|
|
@contextTypeID,
|
|
@lastChange,
|
|
@changeData,
|
|
@flag)
|
|
|
|
SET @seqNo = @@IDENTITY
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_changeRecord_save
|
|
GO
|
|
|
|
-- =============================================
|
|
-- Name: net_changeRecord_update
|
|
-- =============================================
|
|
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_changeRecord_update' AND type = 'P')
|
|
DROP PROCEDURE net_changeRecord_update
|
|
GO
|
|
|
|
CREATE PROCEDURE net_changeRecord_update
|
|
@seqNo bigint = NULL, -- NULL for remote changeRecords
|
|
@USN bigint = NULL, -- NULL for local changeRecords
|
|
@operatorKey uniqueidentifier = NULL, -- NULL for local changeRecords
|
|
@newSeqNo bigint = NULL, -- seqNo of corrected changeRecord
|
|
@flag int = NULL -- updated flag value
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000),
|
|
@operatorID bigint,
|
|
@publisherID bigint
|
|
|
|
-- Check parameters
|
|
IF @seqNo IS NOT NULL AND @USN IS NOT NULL
|
|
BEGIN
|
|
SET @error = 50009 -- E_parmError
|
|
SET @context = 'Procedure accepts either @seqNo or @USN parameters, not both.'
|
|
GOTO errorLabel
|
|
END
|
|
|
|
IF @newSeqNo IS NOT NULL
|
|
BEGIN
|
|
IF NOT EXISTS(SELECT [seqNo] FROM [UDO_changeLog] WHERE (([seqNo] = @newSeqNo) AND ([changeTypeID] = dbo.changeTypeID('changeRecordCorrection'))))
|
|
BEGIN
|
|
SET @error = 50015 -- E_invalidSeqNo
|
|
SET @context = '@newSeqNo = ' + CAST(@newSeqNo AS varchar(256))
|
|
GOTO errorLabel
|
|
END
|
|
END
|
|
|
|
IF @seqNo IS NOT NULL
|
|
BEGIN
|
|
UPDATE [UDO_changeLog] SET
|
|
[newSeqNo] = ISNULL(@newSeqNo, [newSeqNo]),
|
|
[flag] = ISNULL(@flag, [flag])
|
|
WHERE
|
|
([seqNo] = @seqNo) AND
|
|
([changeTypeID] <> dbo.changeTypeID('changeRecordCorrection'))
|
|
|
|
IF @@ROWCOUNT = 0
|
|
BEGIN
|
|
SET @error = 50015 -- E_invalidSeqNo
|
|
SET @context = 'changeRecord for seqNo = ' + CAST(@seqNo AS varchar(256)) + ' is invalid.'
|
|
GOTO errorLabel
|
|
END
|
|
END
|
|
|
|
IF @USN IS NOT NULL
|
|
BEGIN
|
|
IF @operatorKey IS NULL
|
|
BEGIN
|
|
SET @error = 50009 -- E_parmError
|
|
SET @context = '@operatorKey required when annotating a USN.'
|
|
END
|
|
|
|
SET @operatorID = dbo.operatorID(@operatorKey)
|
|
|
|
IF @operatorID IS NULL
|
|
BEGIN
|
|
SET @error = 60150 -- E_unknownUser
|
|
SET @context = 'Unknown operatorKey: ' + dbo.UUIDSTR(@operatorKey)
|
|
GOTO errorLabel
|
|
END
|
|
|
|
SET @publisherID = dbo.getOperatorPublisherID(@operatorID)
|
|
|
|
UPDATE [UDO_changeLog] SET
|
|
[newSeqNo] = ISNULL(@newSeqNo, [newSeqNo]),
|
|
[flag] = ISNULL(@flag, [flag])
|
|
WHERE
|
|
([USN] = @USN) AND
|
|
([publisherID] = @publisherID) AND
|
|
([changeTypeID] <> dbo.changeTypeID('changeRecordCorrection'))
|
|
|
|
IF @@ROWCOUNT = 0
|
|
BEGIN
|
|
SET @error = 50015 -- E_invalidSeqNo
|
|
SET @context = 'changeRecord for USN = ' + CAST(@USN AS varchar(256)) + ' is invalid.'
|
|
GOTO errorLabel
|
|
END
|
|
END
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_changeRecord_update
|
|
GO
|
|
|
|
-- =============================================
|
|
-- Section: Find and get routines
|
|
-- =============================================
|
|
|
|
-- =============================================
|
|
-- Name: net_find_changeRecords
|
|
-- =============================================
|
|
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_find_changeRecords' AND type = 'P')
|
|
DROP PROCEDURE net_find_changeRecords
|
|
GO
|
|
|
|
CREATE PROCEDURE net_find_changeRecords
|
|
@contextID uniqueidentifier, -- contextID of current find operation
|
|
@operatorKey uniqueidentifier, -- operatorKey for source operator node
|
|
@startUSN bigint, -- low end of USN range, NULL for 0
|
|
@stopUSN bigint, -- high end of USN range, NULL for max
|
|
@rows bigint OUTPUT -- rows added to UDS_findResults
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000),
|
|
@operatorID bigint,
|
|
@publisherID bigint,
|
|
@i int
|
|
|
|
SET @rows = 0
|
|
|
|
IF @startUSN > @stopUSN
|
|
BEGIN
|
|
SET @error = 50009 -- E_parmError
|
|
SET @context = '@startUSN must be less than or equal to @stopUSN.'
|
|
GOTO errorLabel
|
|
END
|
|
|
|
SET @operatorID = dbo.operatorID(@operatorKey)
|
|
|
|
IF @operatorID IS NULL
|
|
BEGIN
|
|
SET @error = 60150 -- E_unknownUser
|
|
SET @context = 'operatorKey = ' + dbo.UUIDSTR(@operatorKey)
|
|
GOTO errorLabel
|
|
END
|
|
|
|
SET @publisherID = dbo.getOperatorPublisherID(@operatorID)
|
|
|
|
IF (@operatorID = dbo.currentOperatorID())
|
|
BEGIN
|
|
-- Find changeRecords for the local operator
|
|
INSERT [UDS_replResults] (
|
|
[contextID],
|
|
[seqNo])
|
|
SELECT
|
|
@contextID,
|
|
[seqNo]
|
|
FROM
|
|
[UDO_changeLog]
|
|
WHERE
|
|
([seqNo] BETWEEN @startUSN and @stopUSN) AND
|
|
([USN] IS NULL)
|
|
ORDER BY
|
|
[seqNo] ASC
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
INSERT [UDS_replResults] (
|
|
[contextID],
|
|
[seqNo])
|
|
SELECT
|
|
@contextID,
|
|
[seqNo]
|
|
FROM
|
|
[UDO_changeLog]
|
|
WHERE
|
|
([USN] BETWEEN @startUSN and @stopUSN) AND
|
|
([publisherID] = @publisherID)
|
|
ORDER BY
|
|
[seqNo] ASC
|
|
END
|
|
|
|
SET @rows = @@ROWCOUNT
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_find_changeRecords
|
|
GO
|
|
|
|
-- =============================================
|
|
-- Name: net_find_changeRecords_cleanup
|
|
-- =============================================
|
|
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_find_changeRecords_cleanup' AND type = 'P')
|
|
DROP PROCEDURE net_find_changeRecords_cleanup
|
|
GO
|
|
|
|
CREATE PROCEDURE net_find_changeRecords_cleanup
|
|
@contextID uniqueidentifier -- contextID of current find operation
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000)
|
|
|
|
DELETE
|
|
[UDS_replResults]
|
|
WHERE
|
|
([contextID] = @contextID)
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_find_changeRecords_cleanup
|
|
GO
|
|
|
|
|
|
-- =============================================
|
|
-- Name: net_find_changeRecords_commit
|
|
-- =============================================
|
|
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_find_changeRecords_commit' AND type = 'P')
|
|
DROP PROCEDURE net_find_changeRecords_commit
|
|
GO
|
|
|
|
CREATE PROCEDURE net_find_changeRecords_commit
|
|
@contextID uniqueidentifier, -- contextID of current find operation
|
|
@responseLimitCount bigint -- limits number of rows returned, 0 for all
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000),
|
|
@RC int,
|
|
@changeRecord cursor,
|
|
@seqNo bigint,
|
|
@USN bigint,
|
|
@newSeqNo bigint,
|
|
@publisherID bigint,
|
|
@changeDataSeqNo bigint,
|
|
@flag int,
|
|
@rowNum bigint
|
|
|
|
CREATE TABLE #tempResults (
|
|
[seqNo] bigint,
|
|
[USN] bigint,
|
|
[newSeqNo] bigint,
|
|
[publisherID] bigint,
|
|
[changeDataSeqNo] bigint,
|
|
[flag] int)
|
|
|
|
-- Set responseLimitCount
|
|
IF ISNULL(@responseLimitCount,0) = 0
|
|
SET @responseLimitCount = ISNULL(dbo.configValue('Replication.ResponseLimitCountDefault'),1000)
|
|
|
|
SET @changeRecord = CURSOR LOCAL FORWARD_ONLY READ_ONLY FOR
|
|
SELECT DISTINCT
|
|
CL.[seqNo],
|
|
CL.[USN],
|
|
CL.[newSeqNo],
|
|
CL.[publisherID],
|
|
CL.[flag]
|
|
FROM
|
|
[UDO_changeLog] CL
|
|
JOIN [UDS_replResults] RR ON CL.[seqNo] = RR.[seqNo]
|
|
WHERE
|
|
(RR.[contextID] = @contextID)
|
|
ORDER BY
|
|
1 ASC
|
|
|
|
OPEN @changeRecord
|
|
FETCH NEXT FROM @changeRecord INTO
|
|
@seqNo,
|
|
@USN,
|
|
@newSeqNo,
|
|
@publisherID,
|
|
@flag
|
|
|
|
SET @rowNum = 0
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
SET @rowNum = @rowNum + 1
|
|
|
|
IF @rowNum > @responseLimitCount
|
|
BREAK
|
|
|
|
IF @newSeqNo IS NULL
|
|
SET @changeDataSeqNo = @seqNo
|
|
ELSE
|
|
SET @changeDataSeqNo = @newSeqNo
|
|
|
|
INSERT #tempResults(
|
|
[seqNo],
|
|
[USN],
|
|
[newSeqNo],
|
|
[publisherID],
|
|
[changeDataSeqNo],
|
|
[flag])
|
|
VALUES (
|
|
@seqNo,
|
|
@USN,
|
|
@newSeqNo,
|
|
@publisherID,
|
|
@changeDataSeqNo,
|
|
@flag)
|
|
|
|
FETCH NEXT FROM @changeRecord INTO
|
|
@seqNo,
|
|
@USN,
|
|
@newSeqNo,
|
|
@publisherID,
|
|
@flag
|
|
END
|
|
|
|
CLOSE @changeRecord
|
|
|
|
SELECT
|
|
TR.[seqNo] AS [seqNo],
|
|
ISNULL(TR.[USN], TR.[seqNo]) AS [USN],
|
|
dbo.operatorKey(dbo.getPublisherOperatorID(TR.[publisherID])) AS [operatorKey],
|
|
CL.[changeData] AS [changeData],
|
|
CL.[changeTypeID] AS [changeTypeID],
|
|
TR.[flag] AS [flag]
|
|
FROM
|
|
#tempResults TR
|
|
JOIN [UDO_changeLog] CL ON TR.[changeDataSeqNo] = CL.[seqNo]
|
|
ORDER BY
|
|
1 ASC
|
|
|
|
EXEC @RC=net_find_changeRecords_cleanup @contextID
|
|
|
|
IF @RC <> 0
|
|
BEGIN
|
|
SET @error = 50006 -- E_subProcFailure
|
|
SET @context = ''
|
|
GOTO errorLabel
|
|
END
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_find_changeRecords_commit
|
|
GO
|
|
|
|
-- =============================================
|
|
-- Section: Operator routines
|
|
-- =============================================
|
|
|
|
-- =============================================
|
|
-- Name: net_operator_save
|
|
-- =============================================
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_operator_save' AND type = 'P')
|
|
DROP PROCEDURE net_operator_save
|
|
GO
|
|
|
|
CREATE PROCEDURE net_operator_save
|
|
@operatorKey uniqueidentifier, -- insert only
|
|
@PUID nvarchar(450) = NULL, -- insert only
|
|
@operatorStatusID tinyint = NULL, -- insert / update (NULL for no change)
|
|
@name nvarchar(450) = NULL, -- insert / update (NULL for no change)
|
|
@soapReplicationURL nvarchar(4000) = NULL, -- insert / update (NULL for no change)
|
|
@businessKey uniqueidentifier = NULL, -- insert / update (NULL for no change)
|
|
@certSerialNo nvarchar(450) = NULL, -- insert / update (NULL for no change)
|
|
@certIssuer nvarchar(225) = NULL, -- insert / update (NULL for no change)
|
|
@certSubject nvarchar(225) = NULL, -- insert / update (NULL for no change)
|
|
@certificate image -- insert / update (always required)
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000),
|
|
@publisherID bigint,
|
|
@oldOperatorStatusID tinyint,
|
|
@oldName nvarchar(4000),
|
|
@oldBusinessKey uniqueidentifier,
|
|
@oldSoapReplicationURL nvarchar(4000),
|
|
@oldCertSerialNo nvarchar(450),
|
|
@oldCertIssuer nvarchar(225),
|
|
@oldCertSubject nvarchar(225)
|
|
|
|
IF EXISTS(SELECT * FROM [UDO_operators] WHERE [operatorKey] = @operatorKey)
|
|
BEGIN
|
|
-- Update Logic
|
|
SELECT
|
|
@oldOperatorStatusID = [operatorStatusID],
|
|
@oldName = [name],
|
|
@oldBusinessKey = [businessKey],
|
|
@oldSoapReplicationURL = [soapReplicationURL],
|
|
@oldCertSerialNo = [certSerialNo],
|
|
@oldCertIssuer = [certIssuer],
|
|
@oldCertSubject = [certSubject]
|
|
FROM
|
|
[UDO_operators]
|
|
WHERE
|
|
([operatorKey] = @operatorKey)
|
|
|
|
UPDATE
|
|
[UDO_operators]
|
|
SET
|
|
[operatorStatusID] = ISNULL(@operatorStatusID, @oldOperatorStatusID),
|
|
[name] = ISNULL(@name, @oldName),
|
|
[businessKey] = ISNULL(@businessKey, @oldBusinessKey),
|
|
[soapReplicationURL] = ISNULL(@soapReplicationURL, @oldSoapReplicationURL),
|
|
[certSerialNo] = ISNULL(@certSerialNo, @oldCertSerialNo),
|
|
[certIssuer] = ISNULL(@certIssuer, @oldCertIssuer),
|
|
[certSubject] = ISNULL(@certSubject, @oldCertSubject),
|
|
[certificate] = @certificate
|
|
WHERE
|
|
([operatorKey] = @operatorKey)
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
-- Insert Logic
|
|
|
|
-- Validate @publisherID
|
|
IF @PUID IS NOT NULL
|
|
SET @publisherID = dbo.publisherID(@PUID)
|
|
|
|
IF @publisherID IS NULL
|
|
BEGIN
|
|
SET @error = 60150 -- E_unknownUser
|
|
SET @context = ''
|
|
GOTO errorLabel
|
|
END
|
|
|
|
IF EXISTS(SELECT * FROM [UDO_operators] WHERE [publisherID] = @publisherID)
|
|
BEGIN
|
|
SET @error = 60140 -- E_userMismatch
|
|
SET @context = 'Publisher is already being used by another operator.'
|
|
GOTO errorLabel
|
|
END
|
|
|
|
INSERT [UDO_operators](
|
|
[operatorKey],
|
|
[publisherID],
|
|
[operatorStatusID],
|
|
[name],
|
|
[businessKey],
|
|
[soapReplicationURL],
|
|
[certSerialNo],
|
|
[certIssuer],
|
|
[certSubject],
|
|
[certificate],
|
|
[flag])
|
|
VALUES(
|
|
@operatorKey,
|
|
@publisherID,
|
|
ISNULL(@operatorStatusID,dbo.operatorStatusID('new')),
|
|
@name,
|
|
@businessKey,
|
|
@soapReplicationURL,
|
|
@certSerialNo,
|
|
@certIssuer,
|
|
@certSubject,
|
|
@certificate,
|
|
0)
|
|
END
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_operator_save
|
|
GO
|
|
|
|
-- =============================================
|
|
-- Name: net_operator_get
|
|
-- =============================================
|
|
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_operator_get' AND type = 'P')
|
|
DROP PROCEDURE net_operator_get
|
|
GO
|
|
|
|
CREATE PROCEDURE net_operator_get
|
|
@operatorKey uniqueidentifier
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
-- Gets a single operator
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000),
|
|
@operatorID bigint
|
|
|
|
SET @operatorID = dbo.operatorID(@operatorKey)
|
|
|
|
IF @operatorID IS NULL
|
|
BEGIN
|
|
SET @error = 60150 -- E_unknownUser
|
|
SET @context = 'Invalid operatorKey: ' + dbo.UUIDSTR(@operatorKey)
|
|
GOTO errorLabel
|
|
END
|
|
|
|
SELECT
|
|
[operatorStatusID],
|
|
[name],
|
|
[soapReplicationURL],
|
|
[certSerialNo],
|
|
[certIssuer],
|
|
[certSubject],
|
|
[certificate]
|
|
FROM
|
|
[UDO_operators]
|
|
WHERE
|
|
([operatorID] = @operatorID)
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_operator_get
|
|
GO
|
|
|
|
-- =============================================
|
|
-- Name: net_operators_get
|
|
-- =============================================
|
|
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_operators_get' AND type = 'P')
|
|
DROP PROCEDURE net_operators_get
|
|
GO
|
|
|
|
CREATE PROCEDURE net_operators_get
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
-- Gets all operators
|
|
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000)
|
|
|
|
SELECT
|
|
[operatorKey],
|
|
[operatorStatusID],
|
|
[name],
|
|
[soapReplicationURL]
|
|
FROM
|
|
[UDO_operators]
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_operators_get
|
|
GO
|
|
|
|
-- =============================================
|
|
-- Name: net_operator_delete
|
|
-- =============================================
|
|
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_operator_delete' AND type = 'P')
|
|
DROP PROCEDURE net_operator_delete
|
|
GO
|
|
|
|
CREATE PROCEDURE net_operator_delete
|
|
@operatorKey uniqueidentifier
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
-- Gets a single operator
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000),
|
|
@operatorID bigint
|
|
|
|
SET @operatorID = dbo.operatorID(@operatorKey)
|
|
|
|
IF @operatorID IS NULL
|
|
BEGIN
|
|
SET @error = 60150 -- E_unknownUser
|
|
SET @context = 'Invalid operatorKey: ' + dbo.UUIDSTR(@operatorKey)
|
|
GOTO errorLabel
|
|
END
|
|
|
|
DELETE
|
|
[UDO_operators]
|
|
WHERE
|
|
([operatorID] = @operatorID)
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_operator_delete
|
|
GO
|
|
|
|
-- =============================================
|
|
-- Name: net_highWaterMarks_get
|
|
-- =============================================
|
|
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_highWaterMarks_get' AND type = 'P')
|
|
DROP PROCEDURE net_highWaterMarks_get
|
|
GO
|
|
|
|
CREATE PROCEDURE net_highWaterMarks_get
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000),
|
|
@currentOperatorID bigint,
|
|
@operatorID bigint,
|
|
@rows bigint,
|
|
@operatorCursor cursor
|
|
|
|
DECLARE @results TABLE(
|
|
[operatorKey] uniqueidentifier,
|
|
[USN] bigint)
|
|
|
|
-- Calculate current highWaterMark for local operator
|
|
SET @currentOperatorID = dbo.currentOperatorID()
|
|
|
|
SELECT
|
|
@rows = MAX([seqNo])
|
|
FROM
|
|
[UDO_changeLog]
|
|
WHERE
|
|
([publisherID] NOT IN (SELECT [publisherID] FROM [UDO_operators] WHERE [operatorID] <> @currentOperatorID))
|
|
|
|
INSERT @results VALUES(
|
|
dbo.operatorKey(@currentOperatorID),
|
|
ISNULL(@rows,0))
|
|
|
|
SET @operatorCursor = CURSOR LOCAL FORWARD_ONLY READ_ONLY FOR
|
|
SELECT
|
|
[operatorID]
|
|
FROM
|
|
[UDO_operators]
|
|
WHERE
|
|
[operatorID] <> @currentOperatorID
|
|
|
|
OPEN @operatorCursor
|
|
|
|
FETCH NEXT FROM @operatorCursor INTO
|
|
@operatorID
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
SELECT
|
|
@rows = MAX([USN])
|
|
FROM
|
|
[UDO_changeLog]
|
|
WHERE
|
|
([publisherID] = dbo.getOperatorPublisherID(@operatorID))
|
|
|
|
INSERT @results VALUES(
|
|
dbo.operatorKey(@operatorID),
|
|
ISNULL(@rows,0))
|
|
|
|
FETCH NEXT FROM @operatorCursor INTO
|
|
@operatorID
|
|
END
|
|
|
|
CLOSE @operatorCursor
|
|
|
|
SELECT * FROM @results
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_highWaterMarks_get
|
|
GO
|
|
|
|
-- =============================================
|
|
-- Name: net_operatorLog_save
|
|
-- =============================================
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_operatorLog_save' AND type = 'P')
|
|
DROP PROCEDURE net_operatorLog_save
|
|
GO
|
|
|
|
CREATE PROCEDURE net_operatorLog_save
|
|
@operatorKey uniqueidentifier,
|
|
@replStatusID tinyint,
|
|
@description nvarchar(4000) = NULL,
|
|
@lastOperatorKey uniqueidentifier = NULL,
|
|
@lastUSN bigint = NULL,
|
|
@lastChange bigint
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000),
|
|
@operatorID bigint
|
|
|
|
SET @operatorID = dbo.operatorID(@operatorKey)
|
|
|
|
IF @operatorID IS NULL
|
|
BEGIN
|
|
SET @error = 60150 -- E_unknownUser
|
|
SET @context = 'operatorKey = ' + dbo.UUIDSTR(@operatorKey)
|
|
GOTO errorLabel
|
|
END
|
|
|
|
INSERT [UDO_operatorLog] (
|
|
[operatorID],
|
|
[replStatusID],
|
|
[description],
|
|
[lastOperatorKey],
|
|
[lastUSN],
|
|
[lastChange])
|
|
VALUES (
|
|
@operatorID,
|
|
@replStatusID,
|
|
@description,
|
|
@lastOperatorKey,
|
|
@lastUSN,
|
|
@lastChange)
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_operatorLog_save
|
|
GO
|
|
|
|
-- =============================================
|
|
-- Name: net_operatorLogLast_get
|
|
-- =============================================
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_operatorLogLast_get' AND type = 'P')
|
|
DROP PROCEDURE net_operatorLogLast_get
|
|
GO
|
|
|
|
CREATE PROCEDURE net_operatorLogLast_get
|
|
@operatorKey uniqueidentifier,
|
|
@inboundStatus bit, -- specifies whether we want last inbound or outbound status
|
|
@replStatusID tinyint OUTPUT,
|
|
@description nvarchar(4000) OUTPUT,
|
|
@lastOperatorKey uniqueidentifier OUTPUT,
|
|
@lastUSN bigint OUTPUT,
|
|
@lastChange bigint OUTPUT
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000),
|
|
@operatorID bigint,
|
|
@maxSeqNo bigint
|
|
|
|
SET @operatorID = dbo.operatorID(@operatorKey)
|
|
|
|
IF @operatorID IS NULL
|
|
BEGIN
|
|
SET @error = 60150 -- E_unknownUser
|
|
SET @context = 'operatorKey = ' + dbo.UUIDSTR(@operatorKey)
|
|
GOTO errorLabel
|
|
END
|
|
|
|
IF (@inboundStatus = 0)
|
|
BEGIN
|
|
SELECT
|
|
@maxSeqNo = MAX([seqNo])
|
|
FROM
|
|
[UDO_operatorLog]
|
|
WHERE
|
|
([operatorID] = @operatorID) AND
|
|
([replStatusID] < 128 )
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SELECT
|
|
@maxSeqNo = MAX([seqNo])
|
|
FROM
|
|
[UDO_operatorLog]
|
|
WHERE
|
|
([operatorID] = @operatorID) AND
|
|
([replStatusID] >= 128 )
|
|
END
|
|
|
|
IF @maxSeqNo IS NOT NULL
|
|
BEGIN
|
|
SELECT
|
|
@replStatusID = [replStatusID],
|
|
@description = [description],
|
|
@lastOperatorKey = [lastOperatorKey],
|
|
@lastUSN = [lastUSN],
|
|
@lastChange = [lastChange]
|
|
FROM
|
|
[UDO_operatorLog]
|
|
WHERE
|
|
([operatorID] = @operatorID) AND
|
|
([seqNo] = @maxSeqNo)
|
|
END
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_operatorLogLast_get
|
|
GO
|
|
|
|
-- =============================================
|
|
-- Name: net_operatorCert_get
|
|
-- =============================================
|
|
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'net_operatorCert_get' AND type = 'P')
|
|
DROP PROCEDURE net_operatorCert_get
|
|
GO
|
|
|
|
CREATE PROCEDURE net_operatorCert_get
|
|
@certSerialNo nvarchar(450)
|
|
WITH ENCRYPTION
|
|
AS
|
|
BEGIN
|
|
DECLARE
|
|
@error int,
|
|
@context nvarchar(4000),
|
|
@operatorID bigint
|
|
|
|
SELECT
|
|
@operatorID = [operatorID]
|
|
FROM
|
|
[UDO_operators]
|
|
WHERE
|
|
([certSerialNo] = @certSerialNo)
|
|
|
|
IF (@operatorID IS NULL)
|
|
BEGIN
|
|
SET @error = 50016 -- E_invalidCert
|
|
SET @context = 'Certificate Serial Number not valid.'
|
|
GOTO errorLabel
|
|
END
|
|
|
|
SELECT
|
|
[operatorKey],
|
|
[certificate]
|
|
FROM
|
|
[UDO_operators]
|
|
WHERE
|
|
([operatorID] = @operatorID)
|
|
|
|
RETURN 0
|
|
|
|
errorLabel:
|
|
RAISERROR (@error, 16, 1, @context)
|
|
RETURN 1
|
|
END -- net_operatorCert_get
|
|
GO
|