Leaked source code of windows server 2003
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

-- 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