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.
 
 
 
 
 
 

1368 lines
32 KiB

-- Script: uddi.v2.publisher.sql
-- Author: [email protected]
-- Description: Stored procedures associated with a publisher
-- Note: This file is best viewed and edited with a tab width of 2.
-- =============================================
-- Section: Authentication routines
-- =============================================
-- =============================================
-- Name: net_publisher_isRegistered
-- =============================================
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'net_publisher_isRegistered' AND type = 'P')
DROP PROCEDURE net_publisher_isRegistered
GO
CREATE PROCEDURE net_publisher_isRegistered
@PUID nvarchar(450)
WITH ENCRYPTION
AS
BEGIN
DECLARE
@flag int
IF dbo.publisherExists(@PUID) = 0
RETURN 10150
RETURN 0
END
GO
-- =============================================
-- Name: net_publisher_isVerified
-- =============================================
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'net_publisher_isVerified' AND type = 'P')
DROP PROCEDURE net_publisher_isVerified
GO
CREATE PROCEDURE net_publisher_isVerified
@PUID nvarchar(450)
WITH ENCRYPTION
AS
BEGIN
DECLARE
@flag int
IF dbo.publisherExists(@PUID) = 0
RETURN 10150
SELECT
@flag = [flag]
FROM
UDO_publishers
WHERE
PUID = @PUID
IF ((@flag & 0x01) <> 0x01)
RETURN 50013
RETURN 0
END
GO
-- =============================================
-- Name: net_publisher_login
-- =============================================
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'net_publisher_login' AND type = 'P')
DROP PROCEDURE net_publisher_login
GO
CREATE PROCEDURE net_publisher_login
@PUID nvarchar(450),
@email nvarchar(100) OUTPUT,
@name nvarchar(100) OUTPUT,
@phone varchar(20) OUTPUT,
@companyName nvarchar(100) OUTPUT,
@altPhone varchar(20) OUTPUT,
@addressLine1 nvarchar(4000) OUTPUT,
@addressLine2 nvarchar(4000) OUTPUT,
@city nvarchar(100) OUTPUT,
@stateProvince nvarchar(100) OUTPUT,
@postalCode nvarchar(100) OUTPUT,
@country nvarchar(100) OUTPUT,
@isoLangCode varchar(17) OUTPUT,
@businessLimit int OUTPUT,
@businessCount int OUTPUT,
@tModelLimit int OUTPUT,
@tModelCount int OUTPUT,
@serviceLimit int OUTPUT,
@bindingLimit int OUTPUT,
@assertionLimit int OUTPUT,
@assertionCount int OUTPUT
WITH ENCRYPTION
AS
BEGIN
DECLARE
@oldEmail nvarchar(100),
@publisherStatus nvarchar(256),
@error int,
@context nvarchar(4000),
@flag int,
@publisherID bigint
-- Verify the publisher exists
SET @publisherID = dbo.publisherID(@PUID)
IF (@publisherID IS NULL)
BEGIN
SET @error = 60150 -- E_unknownUser
SET @context = 'Unknown publisher, email ''' + @email + ''''
GOTO errorLabel
END
-- Get the publisher data
SELECT
@publisherStatus = dbo.publisherStatus([publisherStatusID]),
@oldEmail = [email],
@flag = [flag]
FROM
[UDO_publishers]
WHERE
([publisherID] = @publisherID)
-- Determine which email validation mode we are in.
-- 0 = track Passport
-- 1 = custom email validation
IF ((@flag & 0x02) = 0x02)
BEGIN
-- We're using custom validation (i.e. not tracking the Passport
-- email address), so we'll ignore the @email input parameter and
-- make sure they have validated through our custom validation.
IF ((@flag & 0x01) = 0x00)
BEGIN
-- User has not validated their email address.
SET @error = 60150 -- E_unknownUser
SET @context = 'Email address has not yet been validated.'
GOTO errorLabel
END
SET @email = @oldEmail
END
ELSE
BEGIN
-- We are tracking Passport, so make sure a valid email address
-- was displayed.
IF (@email IS NULL)
BEGIN
SET @error = 60150 -- E_unknownUser
SET @context = 'Your Passport profile information is not shared. Please change your email options on the registration page or change your Passport profile to share your email address with this site.'
GOTO errorLabel
END
SET @flag = (@flag | 0x01)
END
IF (@publisherStatus = 'disabled')
BEGIN
SET @error = 50013 -- E_userDisabled
SET @context = 'Account disabled for publisher.'
GOTO errorLabel
END
-- Only update the publisher record if the email has changed
IF (ISNULL(@email,'') <> ISNULL(@oldEmail,''))
BEGIN
UPDATE
[UDO_publishers]
SET
[email] = @email,
[flag] = @flag
WHERE
[publisherID] = @publisherID
END
-- Return the publisher details
SELECT
@name = PU.[name],
@email = PU.[email],
@phone = PU.[phone],
@companyName = PU.[companyName],
@altPhone = PU.[altPhone],
@addressLine1 = PU.[addressLine1],
@addressLine2 = PU.[addressLine2],
@city = PU.[city],
@stateProvince = PU.[stateProvince],
@postalCode = PU.[postalCode],
@country = PU.[country],
@isoLangCode = PU.[isoLangCode],
@businessLimit = PU.[businessLimit],
@businessCount = (SELECT COUNT(*) FROM [UDC_businessEntities] BE WITH (READUNCOMMITTED) WHERE BE.[publisherID] = @publisherID),
@tModelLimit = PU.[tModelLimit],
@tModelCount = (SELECT COUNT(*) FROM [UDC_tModels] TM WITH (READUNCOMMITTED) WHERE TM.[publisherID] = @publisherID),
@serviceLimit = PU.[serviceLimit],
@bindingLimit = PU.[bindingLimit],
@assertionLimit = PU.[assertionLimit],
@assertionCount = (SELECT COUNT(*) FROM [UDC_assertions_BE] ASS WITH (READUNCOMMITTED) JOIN [UDC_businessEntities] BE WITH (READUNCOMMITTED) ON ASS.[fromKey] = BE.[businessKey] WHERE BE.[publisherID] = @publisherID)
FROM
[UDO_publishers] PU
WHERE
([publisherID] = @publisherID)
RETURN 0
errorLabel:
RAISERROR (@error, 16, 1, @context)
RETURN 1
END -- net_publisher_login
GO
-- =============================================
-- Section: Get routines
-- =============================================
-- =============================================
-- Name: net_publisher_businessInfos_get
-- =============================================
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'net_publisher_businessInfos_get' and type = 'P')
DROP PROCEDURE net_publisher_businessInfos_get
GO
CREATE PROCEDURE net_publisher_businessInfos_get
@PUID nvarchar(450)
WITH ENCRYPTION
AS
BEGIN
DECLARE
@error int,
@context nvarchar(4000),
@publisherID bigint
-- Validate PUID
SET @publisherID = dbo.publisherID(@PUID)
IF @publisherID IS NULL
BEGIN
SET @error = 60150 -- E_unknownUser
SET @context = 'PUID = ' + @PUID
GOTO errorLabel
END
SELECT
[businessKey]
FROM
[UDC_businessEntities]
WHERE
([publisherID] = @publisherID)
RETURN 0
errorLabel:
RAISERROR (@error, 16, 1, @context)
RETURN 1
END -- net_publisher_businessInfos_get
GO
-- =============================================
-- Name: net_publisher_tModelInfos_get
-- =============================================
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'net_publisher_tModelInfos_get' and type = 'P')
DROP PROCEDURE net_publisher_tModelInfos_get
GO
CREATE PROCEDURE net_publisher_tModelInfos_get
@PUID nvarchar(450)
WITH ENCRYPTION
AS
BEGIN
DECLARE
@error int,
@context nvarchar(4000),
@publisherID bigint
-- Validate PUID
SET @publisherID = dbo.publisherID(@PUID)
IF @publisherID IS NULL
BEGIN
SET @error = 60150 -- E_unknownUser
SET @context = 'PUID = ' + @PUID
GOTO errorLabel
END
SELECT
[tModelKey],
[name],
[flag]
FROM
[UDC_tModels]
WHERE
([publisherID] = @publisherID)
RETURN 0
errorLabel:
RAISERROR (@error, 16, 1, @context)
RETURN 1
END -- net_publisher_tModelInfos_get
GO
-- =============================================
-- Name: net_pubOperator_get
-- =============================================
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'net_pubOperator_get' AND type = 'P')
DROP PROCEDURE net_pubOperator_get
GO
CREATE PROCEDURE net_pubOperator_get
@publisherID bigint,
@operatorID bigint OUTPUT,
@replActive bit = 0 OUTPUT
WITH ENCRYPTION
AS
BEGIN
DECLARE
@error int,
@context nvarchar(4000)
SET @replActive = 0
-- Validate operator / publisher association (replication only)
IF @publisherID IN (SELECT [publisherID] FROM [UDO_operators])
BEGIN
SET @replActive = 1
IF @operatorID IS NULL
BEGIN
SELECT
@operatorID = [operatorID]
FROM
[UDO_operators]
WHERE
([publisherID] = @publisherID)
END
IF NOT EXISTS(SELECT * FROM [UDO_operators] WHERE [operatorID] = @operatorID AND [publisherID] = @publisherID)
BEGIN
SET @error = 60130 -- E_operatorMismatch
SET @context = 'Operator ''' + dbo.operatorName(@operatorID) + 'and PUID ''' + dbo.PUID(@publisherID) + ''' are not associated.'
GOTO errorLabel
END
END
ELSE
BEGIN
IF @operatorID IS NULL
SET @operatorID = dbo.currentOperatorID()
END
RETURN 0
errorLabel:
RAISERROR (@error, 16, 1, @context)
RETURN 1
END -- net_pubOperator_get
GO
-- =============================================
-- Section: Find routines
-- =============================================
-- =============================================
-- Name: net_find_publisher_name
-- =============================================
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'net_find_publisher_name' and type = 'P')
DROP PROCEDURE net_find_publisher_name
GO
CREATE PROCEDURE net_find_publisher_name
@contextID uniqueidentifier,
@name nvarchar(450),
@rows int OUTPUT
WITH ENCRYPTION
AS
BEGIN
DECLARE
@error int,
@context nvarchar(4000),
@contextRows int,
@wildCardSarg nvarchar(451)
DECLARE @tempIDs TABLE(
[publisherID] bigint,
[name] nvarchar(450))
SET @contextRows = (SELECT COUNT(*) FROM [UDS_pubResults] WHERE [contextID] = @contextID)
--
-- Do a wildcard search (default)
--
SET @wildCardSarg = @name
IF dbo.containsWildcard(@name) = 0
SET @wildCardSarg = @wildCardSarg + N'%'
IF @contextRows = 0
BEGIN
INSERT INTO @tempIDs(
[publisherID],
[name])
SELECT
[publisherID],
[name]
FROM
[UDO_publishers]
WHERE
([name] LIKE @wildCardSarg)
END
ELSE
BEGIN
INSERT INTO @tempIDs(
[publisherID],
[name])
SELECT
[publisherID],
[name]
FROM
[UDO_publishers]
WHERE
([publisherID] IN (SELECT [publisherID] FROM [UDS_pubResults] WHERE ([contextID] = @contextID))) AND
([name] LIKE @wildCardSarg)
END
INSERT [UDS_pubResults] (
[contextID],
[publisherID])
SELECT DISTINCT
@contextID,
[publisherID]
FROM
@tempIDs
SET @rows = @@ROWCOUNT
RETURN 0
errorLabel:
RAISERROR (@error, 16, 1, @context)
RETURN 1
END -- net_find_publisher_name
GO
-- =============================================
-- Name: net_find_publisher_email
-- =============================================
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'net_find_publisher_email' and type = 'P')
DROP PROCEDURE net_find_publisher_email
GO
CREATE PROCEDURE net_find_publisher_email
@contextID uniqueidentifier,
@email nvarchar(450),
@rows int OUTPUT
WITH ENCRYPTION
AS
BEGIN
DECLARE
@error int,
@context nvarchar(4000),
@contextRows int,
@wildCardSarg nvarchar(451)
DECLARE @tempIDs TABLE(
[publisherID] bigint,
[email] nvarchar(450))
SET @contextRows = (SELECT COUNT(*) FROM [UDS_pubResults] WHERE [contextID] = @contextID)
--
-- Do a wildcard search (default)
--
SET @wildCardSarg = @email
IF dbo.containsWildcard(@email) = 0
SET @wildCardSarg = @wildCardSarg + N'%'
IF @contextRows = 0
BEGIN
INSERT INTO @tempIDs(
[publisherID],
[email])
SELECT
[publisherID],
[email]
FROM
[UDO_publishers]
WHERE
([email] LIKE @wildCardSarg)
END
ELSE
BEGIN
INSERT INTO @tempIDs(
[publisherID],
[email])
SELECT
[publisherID],
[email]
FROM
[UDO_publishers]
WHERE
([publisherID] IN (SELECT [publisherID] FROM [UDS_pubResults] WHERE ([contextID] = @contextID))) AND
([email] LIKE @wildCardSarg)
END
INSERT [UDS_pubResults] (
[contextID],
[publisherID])
SELECT DISTINCT
@contextID,
[publisherID]
FROM
@tempIDs
SET @rows = @@ROWCOUNT
RETURN 0
errorLabel:
RAISERROR (@error, 16, 1, @context)
RETURN 1
END -- net_find_publisher_email
GO
-- =============================================
-- Name: net_find_publisher_companyName
-- =============================================
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'net_find_publisher_companyName' and type = 'P')
DROP PROCEDURE net_find_publisher_companyName
GO
CREATE PROCEDURE net_find_publisher_companyName
@contextID uniqueidentifier,
@companyName nvarchar(100),
@rows int OUTPUT
WITH ENCRYPTION
AS
BEGIN
DECLARE
@error int,
@context nvarchar(4000),
@contextRows int,
@wildCardSarg nvarchar(451)
DECLARE @tempIDs TABLE(
[publisherID] bigint,
[companyName] nvarchar(100))
SET @contextRows = (SELECT COUNT(*) FROM [UDS_pubResults] WHERE [contextID] = @contextID)
--
-- Do a wildcard search (default)
--
SET @wildCardSarg = @companyName
IF dbo.containsWildcard(@companyName) = 0
SET @wildCardSarg = @wildCardSarg + N'%'
IF @contextRows = 0
BEGIN
INSERT INTO @tempIDs(
[publisherID],
[companyName])
SELECT
[publisherID],
[companyName]
FROM
[UDO_publishers]
WHERE
([companyName] LIKE @wildCardSarg)
END
ELSE
BEGIN
INSERT INTO @tempIDs(
[publisherID],
[companyName])
SELECT
[publisherID],
[companyName]
FROM
[UDO_publishers]
WHERE
([publisherID] IN (SELECT [publisherID] FROM [UDS_pubResults] WHERE ([contextID] = @contextID))) AND
([companyName] LIKE @wildCardSarg)
END
INSERT [UDS_pubResults] (
[contextID],
[publisherID])
SELECT DISTINCT
@contextID,
[publisherID]
FROM
@tempIDs
SET @rows = @@ROWCOUNT
RETURN 0
errorLabel:
RAISERROR (@error, 16, 1, @context)
RETURN 1
END -- net_find_publisher_companyName
GO
-- =============================================
-- Name: net_find_publisher_cleanup
-- =============================================
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'net_find_publisher_cleanup' AND type = 'P')
DROP PROCEDURE net_find_publisher_cleanup
GO
CREATE PROCEDURE net_find_publisher_cleanup
@contextID uniqueidentifier
WITH ENCRYPTION
AS
BEGIN
-- Cleans up leftover rows in scratch table
DELETE
[UDS_pubResults]
WHERE
([contextID] = @contextID)
RETURN 0
END -- net_find_publisher_cleanup
GO
-- =============================================
-- Name: net_find_publisher_commit
-- =============================================
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'net_find_publisher_commit' AND type = 'P')
DROP PROCEDURE net_find_publisher_commit
GO
CREATE PROCEDURE net_find_publisher_commit
@contextID uniqueidentifier,
@sortByNameAsc bit = 1,
@sortByEmailAsc bit = 0,
@sortByCompanyNameAsc bit = 0
WITH ENCRYPTION
AS
BEGIN
DECLARE
@error int,
@context nvarchar(4000),
@contextRows int
SET @contextRows = (SELECT COUNT(*) FROM [UDS_pubResults] WHERE [contextID] = @contextID)
IF @contextRows = 0
RETURN 0
DECLARE @tempIDs TABLE (
[seqNo] bigint IDENTITY PRIMARY KEY ,
[publisherID] bigint,
[PUID] nvarchar(450) NULL,
[name] nvarchar(450) NULL,
[email] nvarchar(450) NULL,
[companyName] nvarchar(100) NULL)
-- Set default sorting option
IF (@sortByNameAsc = 0) AND (@sortByEmailAsc = 0) AND (@sortByCompanyNameAsc = 0)
SET @sortByNameAsc = 1
-- sortByNameAsc
IF (@sortByNameAsc = 1)
BEGIN
INSERT @tempIDs(
[publisherID],
[PUID],
[name],
[email],
[companyName])
SELECT DISTINCT
PR.[publisherID],
PU.[PUID],
PU.[name],
PU.[email],
PU.[companyName]
FROM
[UDS_pubResults] PR
JOIN [UDO_publishers] PU ON PR.[publisherID] = PU.[publisherID]
WHERE
(PR.[contextID] = @contextID)
ORDER BY
3 ASC
GOTO endLabel
END
-- sortByEmailAsc
IF (@sortByEmailAsc = 1)
BEGIN
INSERT @tempIDs(
[publisherID],
[PUID],
[name],
[email],
[companyName])
SELECT DISTINCT
PR.[publisherID],
PU.[PUID],
PU.[name],
PU.[email],
PU.[companyName]
FROM
[UDS_pubResults] PR
JOIN [UDO_publishers] PU ON PR.[publisherID] = PU.[publisherID]
WHERE
(PR.[contextID] = @contextID)
ORDER BY
4 ASC
GOTO endLabel
END
-- sortByCompanyNameAsc
IF (@sortByCompanyNameAsc = 1)
BEGIN
INSERT @tempIDs(
[publisherID],
[PUID],
[name],
[email],
[companyName])
SELECT DISTINCT
PR.[publisherID],
PU.[PUID],
PU.[name],
PU.[email],
PU.[companyName]
FROM
[UDS_pubResults] PR
JOIN [UDO_publishers] PU ON PR.[publisherID] = PU.[publisherID]
WHERE
(PR.[contextID] = @contextID)
ORDER BY
5 ASC
GOTO endLabel
END
endLabel:
-- Return results
SELECT
[PUID],
[email],
[name],
[companyName]
FROM
@tempIDs
-- Run cleanup
EXEC net_find_publisher_cleanup @contextID
RETURN 0
errorLabel:
RAISERROR (@error, 16, 1, @context)
RETURN 1
END -- net_find_publisher_commit
GO
-- =============================================
-- Section: Publisher assertions
-- =============================================
-- =============================================
-- Name: net_publisher_assertion_save
-- =============================================
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'net_publisher_assertion_save' and type = 'P')
DROP PROCEDURE net_publisher_assertion_save
GO
CREATE PROCEDURE net_publisher_assertion_save
@PUID nvarchar(450),
@fromKey uniqueidentifier,
@toKey uniqueidentifier,
@tModelKey uniqueidentifier,
@keyName nvarchar(225),
@keyValue nvarchar(225),
@flag int OUTPUT
WITH ENCRYPTION
AS
BEGIN
DECLARE
@error int,
@context nvarchar(4000),
@publisherID bigint,
@completionStatus int,
@rows int,
@keyOwnership int
SET @publisherID = dbo.publisherID(@PUID)
IF @publisherID IS NULL
BEGIN
SET @error = 60140
SET @context = 'Unknown publisher.'
GOTO errorLabel
END
-- Check for required parameters
IF (@fromKey IS NULL)
BEGIN
SET @error=60050 -- E_unsupported
SET @context='fromKey is required'
GOTO errorLabel
END
IF (@toKey IS NULL)
BEGIN
SET @error=60050 -- E_unsupported
SET @context='toKey is required'
GOTO errorLabel
END
IF (@keyName IS NULL)
BEGIN
SET @error=60050 -- E_unsupported
SET @context='keyName is required'
GOTO errorLabel
END
IF (@keyValue IS NULL)
BEGIN
SET @error=60050 -- E_unsupported
SET @context='keyValue is required'
GOTO errorLabel
END
IF (@tModelKey IS NULL)
BEGIN
SET @error=60050 -- E_unsupported
SET @context='tModelKey is required'
GOTO errorLabel
END
-- Check to see if tModelKey is a valid tModelKey
IF NOT EXISTS(SELECT * FROM [UDC_tModels] WHERE [tModelKey] = @tModelKey)
BEGIN
SET @error = 60210 -- E_invalidKey
SET @context = ' Invalid tModelKey=' + dbo.UUIDSTR(@tModelKey)
GOTO errorLabel
END
-- Check to see if fromKey is a valid business key
IF NOT EXISTS(SELECT * FROM [UDC_businessEntities] WHERE [businessKey] = @fromKey)
BEGIN
SET @error = 60210 -- E_invalidKey
SET @context = ' Invalid fromKey=' + dbo.UUIDSTR(@fromKey)
GOTO errorLabel
END
-- Check to see if toKey is a valid business key
IF NOT EXISTS(SELECT * FROM [UDC_businessEntities] WHERE [businessKey] = @toKey)
BEGIN
SET @error = 60210 -- E_invalidKey
SET @context = ' Invalid toKey=' + dbo.UUIDSTR(@toKey)
GOTO errorLabel
END
-- We want to determine what keys this publisher owns. @keyOwnership = 0 if the publisher does not own any
-- any keys, 0x2 if it owns the fromKey, 0x1 if it owns the toKey and 0x3 if it owns both keys.
-- Check to see if the publisher owns the fromKey
SET @keyOwnership = 0
IF EXISTS(SELECT * FROM [UDC_businessEntities] WHERE [businessKey] = @fromKey AND [publisherID] = @publisherID)
SET @keyOwnership = @keyOwnership | 0x2
-- Check to see if the publisher owns the toKey
IF EXISTS(SELECT * FROM [UDC_businessEntities] WHERE [businessKey] = @toKey AND [publisherID] = @publisherID)
SET @keyOwnership = @keyOwnership | 0x1
-- If the owner does not own either key, then it is an error
IF @keyOwnership = 0
BEGIN
SET @error = 60140 -- E_userMismatch
SET @context = 'Publisher must own at least one of the businesses involved in a publisher assertion (fromKey=''' + dbo.UUIDSTR(@fromKey) + ''', toKey=''' + dbo.UUIDSTR(@toKey) + ''', tModelKey=''' + dbo.UUIDSTR(@tModelKey) + ''', keyName=''' + @keyName + ''', keyValue=''' + @keyValue + ''')'
GOTO errorLabel
END
-- @flag is the status of the assertion as passed in by the caller.
IF @flag IS NULL
BEGIN
-- If @flag is NULL, then we should determine the status based on key ownership.
-- If the caller owns the formKey, the status of this assertion is set to status:toKey_incomplete (2). If the caller owns the toKey, the status of the assertion is set to
-- status:fromKey_incomplete (1). If the caller owns both keys, then the status is set to status:complete (3).
SET @completionStatus = @keyOwnership
END
ELSE
BEGIN
-- The caller has specified a status value for this assertion. This will usually happen we this assertion is being saved during
-- a replication cycle. We have to make sure that the key ownership is compatible with the flag passed. Unless the publisher
-- owns both keys, @flag and @keyOwnership have to be of the same value.
IF @flag <> @keyOwnership AND @keyOwnership <> 0x3
BEGIN
SET @error = 60140 -- E_userMismatch
-- Note that varchar(15) is just a safe choice of size; @flag should only ever be a single digit integer.
SET @context = 'This publisher is not allowed to save this assertion in this state: ' + CAST(@flag AS varchar(15)) + '.'
GOTO errorLabel
END
SET @completionStatus = @flag
END
-- At this point, @completionStatus now holds the status of this assertion that we are saving.
-- Check to see if the assertion already exists.
SELECT
@rows = COUNT(*)
FROM
[UDC_assertions_BE]
WHERE
([fromKey] = @fromKey) AND
([tModelKey] = @tModelKey) AND
([keyName] = @keyName) AND
([keyValue] = @keyValue) AND
([toKey] = @toKey)
IF @rows = 0
BEGIN
-- Add the new assertion
INSERT [UDC_assertions_BE](
[fromKey],
[toKey],
[tModelKey],
[keyName],
[keyValue],
[flag])
VALUES(
@fromKey,
@toKey,
@tModelKey,
@keyName,
@keyValue,
@completionStatus)
END
ELSE
BEGIN
-- Update the existing assertion
UPDATE
[UDC_assertions_BE]
SET
[flag] = [flag] | @completionStatus
WHERE
([fromKey] = @fromKey) AND
([tModelKey] = @tModelKey) AND
([keyValue] = @keyValue) AND
([keyName] = @keyName) AND
([toKey] = @toKey)
END
SET @flag = @completionStatus
RETURN 0
errorLabel:
RAISERROR (@error, 16, 1, @context)
RETURN 1
END -- net_publisher_assertion_save
GO
-- =============================================
-- Name: net_publisher_assertion_delete
-- =============================================
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'net_publisher_assertion_delete' and type = 'P')
DROP PROCEDURE net_publisher_assertion_delete
GO
CREATE PROCEDURE net_publisher_assertion_delete
@PUID nvarchar(450),
@fromKey uniqueidentifier,
@toKey uniqueidentifier,
@tModelKey uniqueidentifier,
@keyName nvarchar(225),
@keyValue nvarchar(225),
@flag int OUTPUT
WITH ENCRYPTION
AS
BEGIN
DECLARE
@error int,
@context nvarchar(4000),
@publisherID bigint,
@completionStatus int,
@rows int,
@keyOwnership int
SET @publisherID = dbo.publisherID(@PUID)
IF @publisherID IS NULL
BEGIN
SET @error = 60150 -- E_unknownUser
SET @context = 'Unknown publisher.'
GOTO errorLabel
END
-- Make sure the assertion exists
SELECT
@rows = COUNT(*)
FROM
[UDC_assertions_BE]
WHERE
([fromKey] = @fromKey) AND
([tModelKey] = @tModelKey) AND
([keyValue] = @keyValue) AND
([toKey] = @toKey)
IF @rows = 0
BEGIN
SET @error = 80000 -- E_assertionNotFound
SET @context = 'Publisher assertion not found (fromKey=''' + dbo.UUIDSTR(@fromKey) + ''', toKey=''' + dbo.UUIDSTR(@toKey) + ''', tModelKey=''' + dbo.UUIDSTR(@tModelKey) + ''', keyName=''' + @keyName + ''', keyValue=''' + @keyValue + ''')'
GOTO errorLabel
END
-- We want to determine what keys this publisher owns. @keyOwnership = 0 if the publisher does not own any
-- any keys, 0x2 if it owns the fromKey, 0x1 if it owns the toKey and 0x3 if it owns both keys.
-- Check to see if the publisher owns the fromKey
SET @keyOwnership = 0
IF EXISTS(SELECT * FROM [UDC_businessEntities] WHERE [businessKey] = @fromKey AND [publisherID] = @publisherID)
SET @keyOwnership = @keyOwnership | 0x2
-- Check to see if the publisher owns the toKey
IF EXISTS(SELECT * FROM [UDC_businessEntities] WHERE [businessKey] = @toKey AND [publisherID] = @publisherID)
SET @keyOwnership = @keyOwnership | 0x1
-- If the owner does not own either key, then it is an error
IF @keyOwnership = 0
BEGIN
SET @error = 60140 -- E_userMismatch
SET @context = 'Publisher must own at least one of the businesses involved in a publisher assertion (fromKey=''' + dbo.UUIDSTR(@fromKey) + ''', toKey=''' + dbo.UUIDSTR(@toKey) + ''', tModelKey=''' + dbo.UUIDSTR(@tModelKey) + ''', keyName=''' + @keyName + ''', keyValue=''' + @keyValue + ''')'
GOTO errorLabel
END
-- @flag represents the side that the caller wants to delete
IF @flag IS NULL
BEGIN
SET @completionStatus = @keyOwnership
END
ELSE
BEGIN
-- The caller has specified what side that they want to delete. This will usually happen when this assertion is being deleted
-- during a replication cycle. We have to make sure that the key ownership is compatible with the side the user wants to delete.
-- Unless the publisher owns both keys, @flag and @keyOwnership have to be of the same value.
IF @flag <> @keyOwnership AND @keyOwnership <> 0x3
BEGIN
SET @error = 60140 -- E_userMismatch
-- Note that varchar(15) is just a safe choice of size; @flag should only ever be a single digit integer.
SET @context = 'This publisher is not allowed to set this assertion to this state: ' + CAST(@flag AS varchar(15)) + '.'
GOTO errorLabel
END
SET @completionStatus = @flag
END
-- Get the assertion completion status flag
SELECT
@flag = [flag]
FROM
[UDC_assertions_BE]
WHERE
([fromKey] = @fromKey) AND
([tModelKey] = @tModelKey) AND
([keyValue] = @keyValue) AND
([toKey] = @toKey)
-- Check to see if we have to remove the assertion completely or just update it
IF (@flag = @completionStatus) OR (@completionStatus = 0x3 AND @keyOwnership = 0x3)
BEGIN
-- Remove the assertion from the database completely
DELETE
[UDC_assertions_BE]
WHERE
([fromKey] = @fromKey) AND
([tModelKey] = @tModelKey) AND
([keyValue] = @keyValue) AND
([toKey] = @toKey)
END
ELSE
BEGIN
-- If the assertion is not complete, the wrong publisher must be trying to delete this assertion, so throw an error
IF @flag <> 0x3 AND @keyOwnership <> 0x3
BEGIN
SET @error = 60140 -- E_userMismatch
SET @context = 'This publisher is not allowed to delete this assertion.'
GOTO errorLabel
END
-- Remove the publisher's portion of the assertion
UPDATE
[UDC_assertions_BE]
SET
[flag] = @flag & (~@completionStatus)
WHERE
([fromKey] = @fromKey) AND
([tModelKey] = @tModelKey) AND
([keyValue] = @keyValue) AND
([toKey] = @toKey)
END
SET @flag = @completionStatus
RETURN 0
errorLabel:
RAISERROR (@error, 16, 1, @context)
RETURN 1
END -- net_publisher_assertion_delete
GO
-- =============================================
-- Name: net_publisher_assertions_get
-- =============================================
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'net_publisher_assertions_get' and type = 'P')
DROP PROCEDURE net_publisher_assertions_get
GO
CREATE PROCEDURE net_publisher_assertions_get
@PUID nvarchar(450),
@authorizedName nvarchar(4000) OUTPUT
WITH ENCRYPTION
AS
BEGIN
DECLARE
@error int,
@context nvarchar(4000),
@publisherID bigint
DECLARE @report TABLE(
[seqNo] bigint,
[fromKey] uniqueidentifier,
[toKey] uniqueidentifier,
[keyName] nvarchar(225),
[keyValue] nvarchar(225),
[tModelKey] uniqueidentifier)
SET @publisherID = dbo.publisherID(@PUID)
IF @publisherID IS NULL
BEGIN
SET @error = 60140
SET @context = 'Unknown publisher.'
GOTO errorLabel
END
SET @authorizedName = dbo.publisherName(@publisherID)
INSERT @report(
[seqNo],
[fromKey],
[toKey],
[keyName],
[keyValue],
[tModelKey])
SELECT
PA.[seqNo],
PA.[fromKey],
PA.[toKey],
PA.[keyName],
PA.[keyValue],
PA.[tModelKey]
FROM
[UDC_assertions_BE] PA
JOIN [UDC_businessEntities] BE ON PA.[fromKey] = BE.[businessKey]
WHERE
(BE.[publisherID] = @publisherID) AND
(PA.[flag] & 0x2 = 0x2)
UNION ALL
SELECT
PA.[seqNo],
PA.[fromKey],
PA.[toKey],
PA.[keyName],
PA.[keyValue],
PA.[tModelKey]
FROM
[UDC_assertions_BE] PA
JOIN [UDC_businessEntities] BE ON PA.[toKey] = BE.[businessKey]
WHERE
(BE.[publisherID] = @publisherID) AND
(PA.[flag] & 0x1 = 0x1)
SELECT DISTINCT
[fromKey],
[toKey],
[keyName],
[keyValue],
[tModelKey],
[seqNo]
FROM
@report
ORDER BY
[seqNo] ASC
RETURN 0
errorLabel:
RAISERROR (@error, 16, 1, @context)
RETURN 1
END -- net_publisher_assertions_get
GO
-- =============================================
-- Name: net_publisher_assertionStatus_get
-- =============================================
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'net_publisher_assertionStatus_get' and type = 'P')
DROP PROCEDURE net_publisher_assertionStatus_get
GO
CREATE PROCEDURE net_publisher_assertionStatus_get
@PUID nvarchar(450),
@completionStatus int = NULL
WITH ENCRYPTION
AS
BEGIN
DECLARE
@error int,
@context nvarchar(4000),
@publisherID int
DECLARE @report TABLE(
[fromKey] uniqueidentifier,
[toKey] uniqueidentifier,
[keyName] nvarchar(225),
[keyValue] nvarchar(225),
[tModelKey] uniqueidentifier,
[flag] int,
[seqNo] bigint)
SET @publisherID = dbo.publisherID(@PUID)
IF @publisherID IS NULL
BEGIN
SET @error = 60140
SET @context = 'Unknown publisher.'
GOTO errorLabel
END
IF @completionStatus IS NULL
BEGIN
-- Get all assertions for this publisher regardless of completionStatus
INSERT @report(
[fromKey],
[toKey],
[keyName],
[keyValue],
[tModelKey],
[flag],
[seqNo])
SELECT
PA.[fromKey],
PA.[toKey],
PA.[keyName],
PA.[keyValue],
PA.[tModelKey],
PA.[flag],
PA.[seqNo]
FROM
[UDC_assertions_BE] PA
JOIN [UDC_businessEntities] BE ON PA.[fromKey] = BE.[businessKey]
WHERE
(BE.[publisherID] = @publisherID)
UNION ALL
SELECT
PA.[fromKey],
PA.[toKey],
PA.[keyName],
PA.[keyValue],
PA.[tModelKey],
PA.[flag],
PA.[seqNo]
FROM
[UDC_assertions_BE] PA
JOIN [UDC_businessEntities] BE ON PA.[toKey] = BE.[businessKey]
WHERE
(BE.[publisherID] = @publisherID)
END
ELSE
BEGIN
-- Get all assertions for this publisher for a specific completionStatus
INSERT @report(
[fromKey],
[toKey],
[keyName],
[keyValue],
[tModelKey],
[flag],
[seqNo])
SELECT
PA.[fromKey],
PA.[toKey],
PA.[keyName],
PA.[keyValue],
PA.[tModelKey],
PA.[flag],
PA.[seqNo]
FROM
[UDC_assertions_BE] PA
JOIN [UDC_businessEntities] BE ON PA.[fromKey] = BE.[businessKey]
WHERE
(BE.[publisherID] = @publisherID) AND
(PA.[flag] = @completionStatus)
UNION ALL
SELECT
PA.[fromKey],
PA.[toKey],
PA.[keyName],
PA.[keyValue],
PA.[tModelKey],
PA.[flag],
PA.[seqNo]
FROM
[UDC_assertions_BE] PA
JOIN [UDC_businessEntities] BE ON PA.[toKey] = BE.[businessKey]
WHERE
(BE.[publisherID] = @publisherID) AND
(PA.[flag] = @completionStatus)
END
SELECT DISTINCT
[fromKey],
[toKey],
[keyName],
[keyValue],
[tModelKey],
[flag],
dbo.ownerFlag(@publisherID,[fromKey],[toKey]) AS [ownerFlag],
[seqNo]
FROM
@report
ORDER BY
8 ASC
RETURN 0
errorLabel:
RAISERROR (@error, 16, 1, @context)
RETURN 1
END -- net_publisher_assertionStatus_get
GO