xref: /OpenGrok/opengrok-indexer/src/test/resources/analysis/sql/sample.sql (revision eeb7e5b33d1bcc524fcc9d1d560447b044e286a4)
1*eeb7e5b3SAdam Hornáček/*======================================================================================
2*eeb7e5b3SAdam HornáčekMicrosoft SQL Server Sample Code
3*eeb7e5b3SAdam Hornáček
4*eeb7e5b3SAdam HornáčekCopyright (c) Microsoft Corporation
5*eeb7e5b3SAdam Hornáček
6*eeb7e5b3SAdam HornáčekAll rights reserved.
7*eeb7e5b3SAdam Hornáček
8*eeb7e5b3SAdam HornáčekMIT License.
9*eeb7e5b3SAdam Hornáček
10*eeb7e5b3SAdam HornáčekPermission is hereby granted, free of charge, to any person obtaining a copy
11*eeb7e5b3SAdam Hornáčekof this software and associated documentation files (the "Software"), to
12*eeb7e5b3SAdam Hornáčekdeal in the Software without restriction, including without limitation the
13*eeb7e5b3SAdam Hornáčekrights to use, copy, modify, merge, publish, distribute, sublicense, and/or
14*eeb7e5b3SAdam Hornáčeksell copies of the Software, and to permit persons to whom the Software is
15*eeb7e5b3SAdam Hornáčekfurnished to do so, subject to the following conditions:
16*eeb7e5b3SAdam Hornáček
17*eeb7e5b3SAdam HornáčekThe above copyright notice and this permission notice shall be included in
18*eeb7e5b3SAdam Hornáčekall copies or substantial portions of the Software.
19*eeb7e5b3SAdam Hornáček
20*eeb7e5b3SAdam HornáčekTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21*eeb7e5b3SAdam HornáčekIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22*eeb7e5b3SAdam HornáčekFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23*eeb7e5b3SAdam HornáčekAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24*eeb7e5b3SAdam HornáčekLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25*eeb7e5b3SAdam HornáčekFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
26*eeb7e5b3SAdam HornáčekIN THE SOFTWARE.
27*eeb7e5b3SAdam Hornáček
28*eeb7e5b3SAdam HornáčekScript: aspstate_sql2016_with_retry.sql
29*eeb7e5b3SAdam Hornáček
30*eeb7e5b3SAdam HornáčekDescription:
31*eeb7e5b3SAdam HornáčekThis script is based on the InstallSqlState.sql script but works with SQL 2016 In-Memory OLTP by replacing the following objects
32*eeb7e5b3SAdam Hornáčekto in-memory and natively compiled stored procedures.
33*eeb7e5b3SAdam Hornáček
34*eeb7e5b3SAdam Hornáček** Tables:
35*eeb7e5b3SAdam Hornáček	Converted the following table to In-Memory table:
36*eeb7e5b3SAdam Hornáček		- [dbo].[ASPStateTempSessions] (SessionId: NONCLUSTERED HASH PK (Bucket Count=33554432))
37*eeb7e5b3SAdam Hornáček
38*eeb7e5b3SAdam Hornáček** Stored Procedures:
39*eeb7e5b3SAdam Hornáček	Converted the following SPs to Native Compiled SPs:
40*eeb7e5b3SAdam Hornáček		- dbo.TempGetStateItemExclusive3
41*eeb7e5b3SAdam Hornáček		- dbo.TempInsertStateItemShort
42*eeb7e5b3SAdam Hornáček	- dbo.TempUpdateStateItemLong
43*eeb7e5b3SAdam Hornáček	- dbo.TempUpdateStateItemLongNullShort
44*eeb7e5b3SAdam Hornáček	- dbo.TempUpdateStateItemShort
45*eeb7e5b3SAdam Hornáček======================================================================================*/
46*eeb7e5b3SAdam Hornáček
47*eeb7e5b3SAdam HornáčekUSE [master]
48*eeb7e5b3SAdam HornáčekGO
49*eeb7e5b3SAdam Hornáček
50*eeb7e5b3SAdam HornáčekDECLARE @SQLDataFolder nvarchar(max) = cast(SERVERPROPERTY('InstanceDefaultDataPath') as nvarchar(max))
51*eeb7e5b3SAdam HornáčekDECLARE @SQL nvarchar(max) = N'';
52*eeb7e5b3SAdam Hornáček
53*eeb7e5b3SAdam HornáčekSET @SQL = N'
54*eeb7e5b3SAdam HornáčekCREATE DATABASE [ASPState]
55*eeb7e5b3SAdam Hornáček CONTAINMENT = NONE
56*eeb7e5b3SAdam Hornáček ON  PRIMARY
57*eeb7e5b3SAdam Hornáček	(NAME = N''ASPState'', FILENAME = N''' + @SQLDataFolder + 'ASPState.mdf'' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB ),
58*eeb7e5b3SAdam Hornáček FILEGROUP [ASPState_mod] CONTAINS MEMORY_OPTIMIZED_DATA  DEFAULT
59*eeb7e5b3SAdam Hornáček	(NAME = N''ASPState_mod'', FILENAME = N''' + @SQLDataFolder + 'ASPState_mod'' , MAXSIZE = UNLIMITED)
60*eeb7e5b3SAdam Hornáček LOG ON
61*eeb7e5b3SAdam Hornáček	(NAME = N''ASPState_log'', FILENAME = N''' + @SQLDataFolder + 'ASPState_log.ldf'' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB );
62*eeb7e5b3SAdam Hornáček
63*eeb7e5b3SAdam HornáčekALTER DATABASE [ASPState] SET COMPATIBILITY_LEVEL = 130; ALTER DATABASE [ASPState] SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT=ON;'
64*eeb7e5b3SAdam Hornáček
65*eeb7e5b3SAdam HornáčekEXECUTE (@SQL)
66*eeb7e5b3SAdam HornáčekGO
67*eeb7e5b3SAdam Hornáček
68*eeb7e5b3SAdam HornáčekUSE [AspState]
69*eeb7e5b3SAdam HornáčekGO
70*eeb7e5b3SAdam Hornáček
71*eeb7e5b3SAdam HornáčekCREATE ROLE [ASPStateExecute];
72*eeb7e5b3SAdam HornáčekCREATE ROLE [ASPStateResetRole];
73*eeb7e5b3SAdam HornáčekCREATE ROLE [ASPStateRole];
74*eeb7e5b3SAdam Hornáček
75*eeb7e5b3SAdam HornáčekCREATE TYPE [dbo].[tAppName] FROM [varchar](280) NOT NULL;
76*eeb7e5b3SAdam HornáčekCREATE TYPE [dbo].[tSessionId] FROM [nvarchar](88) NOT NULL;
77*eeb7e5b3SAdam HornáčekCREATE TYPE [dbo].[tSessionItemLong] FROM [image] NULL;
78*eeb7e5b3SAdam HornáčekCREATE TYPE [dbo].[tSessionItemShort] FROM [varbinary](7000) NULL;
79*eeb7e5b3SAdam HornáčekCREATE TYPE [dbo].[tTextPtr] FROM [varbinary](max) NULL;
80*eeb7e5b3SAdam Hornáček
81*eeb7e5b3SAdam Hornáček
82*eeb7e5b3SAdam HornáčekCREATE TABLE [dbo].[ASPStateTempSessions]
83*eeb7e5b3SAdam Hornáček(
84*eeb7e5b3SAdam Hornáček	[SessionId] [nvarchar](88) COLLATE Latin1_General_100_BIN2 NOT NULL,
85*eeb7e5b3SAdam Hornáček	[Created] [datetime] NOT NULL DEFAULT (getutcdate()),
86*eeb7e5b3SAdam Hornáček	[Expires] [datetime] NOT NULL,
87*eeb7e5b3SAdam Hornáček	[LockDate] [datetime] NOT NULL,
88*eeb7e5b3SAdam Hornáček	[LockDateLocal] [datetime] NOT NULL,
89*eeb7e5b3SAdam Hornáček	[LockCookie] [int] NOT NULL,
90*eeb7e5b3SAdam Hornáček	[Timeout] [int] NOT NULL,
91*eeb7e5b3SAdam Hornáček	[Locked] [bit] NOT NULL,
92*eeb7e5b3SAdam Hornáček	[SessionItemShort] [varbinary](7000) NULL,
93*eeb7e5b3SAdam Hornáček	[SessionItemLong] [varbinary](max) NULL,
94*eeb7e5b3SAdam Hornáček	[Flags] [int] NOT NULL DEFAULT ((0)),
95*eeb7e5b3SAdam Hornáček
96*eeb7e5b3SAdam HornáčekINDEX [Index_Expires] NONCLUSTERED
97*eeb7e5b3SAdam Hornáček(
98*eeb7e5b3SAdam Hornáček	[Expires] ASC
99*eeb7e5b3SAdam Hornáček),
100*eeb7e5b3SAdam HornáčekPRIMARY KEY NONCLUSTERED HASH
101*eeb7e5b3SAdam Hornáček(
102*eeb7e5b3SAdam Hornáček	[SessionId]
103*eeb7e5b3SAdam Hornáček)WITH ( BUCKET_COUNT = 33554432)
104*eeb7e5b3SAdam Hornáček)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_ONLY )
105*eeb7e5b3SAdam HornáčekGO
106*eeb7e5b3SAdam Hornáček
107*eeb7e5b3SAdam HornáčekCREATE TABLE [dbo].[ASPStateTempApplications](
108*eeb7e5b3SAdam Hornáček	[AppId] [int] NOT NULL,
109*eeb7e5b3SAdam Hornáček	[AppName] [char](280) NOT NULL,
110*eeb7e5b3SAdam HornáčekPRIMARY KEY CLUSTERED
111*eeb7e5b3SAdam Hornáček(
112*eeb7e5b3SAdam Hornáček	[AppId] ASC
113*eeb7e5b3SAdam Hornáček)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
114*eeb7e5b3SAdam Hornáček) ON [PRIMARY]
115*eeb7e5b3SAdam Hornáček
116*eeb7e5b3SAdam HornáčekGO
117*eeb7e5b3SAdam Hornáček
118*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItemExclusive3_HK]
119*eeb7e5b3SAdam Hornáček			@id         nvarchar(88),
120*eeb7e5b3SAdam Hornáček            @itemShort  varbinary(7000) OUTPUT,
121*eeb7e5b3SAdam Hornáček            @locked     bit OUTPUT,
122*eeb7e5b3SAdam Hornáček            @lockAge    int OUTPUT,
123*eeb7e5b3SAdam Hornáček            @lockCookie int OUTPUT,
124*eeb7e5b3SAdam Hornáček            @actionFlags int OUTPUT
125*eeb7e5b3SAdam HornáčekWITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
126*eeb7e5b3SAdam HornáčekAS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')
127*eeb7e5b3SAdam Hornáček
128*eeb7e5b3SAdam Hornáček    DECLARE @textptr AS varbinary(max)
129*eeb7e5b3SAdam Hornáček    DECLARE @length AS int
130*eeb7e5b3SAdam Hornáček    DECLARE @now AS datetime
131*eeb7e5b3SAdam Hornáček    DECLARE @nowLocal AS datetime
132*eeb7e5b3SAdam Hornáček
133*eeb7e5b3SAdam Hornáček    SET @now = GETUTCDATE()
134*eeb7e5b3SAdam Hornáček    SET @nowLocal = GETDATE()
135*eeb7e5b3SAdam Hornáček
136*eeb7e5b3SAdam Hornáček	DECLARE @LockedCheck bit
137*eeb7e5b3SAdam Hornáček	DECLARE @Flags int
138*eeb7e5b3SAdam Hornáček
139*eeb7e5b3SAdam Hornáček	SELECT @LockedCheck=Locked, @Flags=Flags FROM dbo.ASPStateTempSessions WHERE SessionID=@id
140*eeb7e5b3SAdam Hornáček
141*eeb7e5b3SAdam Hornáček	IF @Flags&1 <> 0
142*eeb7e5b3SAdam Hornáček	BEGIN
143*eeb7e5b3SAdam Hornáček		SET @actionFlags=1
144*eeb7e5b3SAdam Hornáček		UPDATE dbo.ASPStateTempSessions SET Flags=Flags& ~1 WHERE SessionID=@id
145*eeb7e5b3SAdam Hornáček	END
146*eeb7e5b3SAdam Hornáček	ELSE
147*eeb7e5b3SAdam Hornáček		SET @actionFlags=0
148*eeb7e5b3SAdam Hornáček
149*eeb7e5b3SAdam Hornáček	IF @LockedCheck=1
150*eeb7e5b3SAdam Hornáček	BEGIN
151*eeb7e5b3SAdam Hornáček		UPDATE dbo.ASPStateTempSessions
152*eeb7e5b3SAdam Hornáček        SET Expires = DATEADD(n, Timeout, @now),
153*eeb7e5b3SAdam Hornáček            @lockAge = DATEDIFF(second, LockDate, @now),
154*eeb7e5b3SAdam Hornáček            @lockCookie = LockCookie,
155*eeb7e5b3SAdam Hornáček            @itemShort = NULL,
156*eeb7e5b3SAdam Hornáček            --@textptr = NULL,
157*eeb7e5b3SAdam Hornáček            @length = NULL,
158*eeb7e5b3SAdam Hornáček            @locked = 1
159*eeb7e5b3SAdam Hornáček        WHERE SessionId = @id
160*eeb7e5b3SAdam Hornáček	END
161*eeb7e5b3SAdam Hornáček	ELSE
162*eeb7e5b3SAdam Hornáček	BEGIN
163*eeb7e5b3SAdam Hornáček		UPDATE dbo.ASPStateTempSessions
164*eeb7e5b3SAdam Hornáček        SET Expires = DATEADD(n, Timeout, @now),
165*eeb7e5b3SAdam Hornáček            LockDate = @now,
166*eeb7e5b3SAdam Hornáček            LockDateLocal = @nowlocal,
167*eeb7e5b3SAdam Hornáček            @lockAge = 0,
168*eeb7e5b3SAdam Hornáček            @lockCookie = LockCookie = LockCookie + 1,
169*eeb7e5b3SAdam Hornáček            @itemShort = SessionItemShort,
170*eeb7e5b3SAdam Hornáček            @textptr = SessionItemLong,
171*eeb7e5b3SAdam Hornáček            @length = 1,
172*eeb7e5b3SAdam Hornáček            @locked = 0,
173*eeb7e5b3SAdam Hornáček            Locked = 1
174*eeb7e5b3SAdam Hornáček        WHERE SessionId = @id
175*eeb7e5b3SAdam Hornáček
176*eeb7e5b3SAdam Hornáček		IF @TextPtr IS NOT NULL
177*eeb7e5b3SAdam Hornáček			SELECT @TextPtr
178*eeb7e5b3SAdam Hornáček
179*eeb7e5b3SAdam Hornáček	END
180*eeb7e5b3SAdam HornáčekEND
181*eeb7e5b3SAdam HornáčekGO
182*eeb7e5b3SAdam Hornáček
183*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItemExclusive3]
184*eeb7e5b3SAdam Hornáček			@id         nvarchar(88),
185*eeb7e5b3SAdam Hornáček            @itemShort  varbinary(7000) OUTPUT,
186*eeb7e5b3SAdam Hornáček            @locked     bit OUTPUT,
187*eeb7e5b3SAdam Hornáček            @lockAge    int OUTPUT,
188*eeb7e5b3SAdam Hornáček            @lockCookie int OUTPUT,
189*eeb7e5b3SAdam Hornáček            @actionFlags int OUTPUT
190*eeb7e5b3SAdam HornáčekAS
191*eeb7e5b3SAdam HornáčekBEGIN
192*eeb7e5b3SAdam Hornáček    DECLARE @retry INT = 10;
193*eeb7e5b3SAdam Hornáček
194*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
195*eeb7e5b3SAdam Hornáček    BEGIN
196*eeb7e5b3SAdam Hornáček        BEGIN TRY
197*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
198*eeb7e5b3SAdam Hornáček				EXEC dbo.TempGetStateItemExclusive3_HK
199*eeb7e5b3SAdam Hornáček					 @id,
200*eeb7e5b3SAdam Hornáček					 @itemShort = @itemShort OUTPUT,
201*eeb7e5b3SAdam Hornáček					 @locked = @locked OUTPUT,
202*eeb7e5b3SAdam Hornáček					 @lockAge = @lockAge OUTPUT,
203*eeb7e5b3SAdam Hornáček					 @lockCookie = @lockCookie OUTPUT,
204*eeb7e5b3SAdam Hornáček					 @actionFlags = @actionFlags OUTPUT
205*eeb7e5b3SAdam Hornáček
206*eeb7e5b3SAdam Hornáček            COMMIT TRANSACTION;
207*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
208*eeb7e5b3SAdam Hornáček        END TRY
209*eeb7e5b3SAdam Hornáček
210*eeb7e5b3SAdam Hornáček        BEGIN CATCH
211*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
212*eeb7e5b3SAdam Hornáček
213*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
214*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
215*eeb7e5b3SAdam Hornáček                )
216*eeb7e5b3SAdam Hornáček            BEGIN
217*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
218*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
219*eeb7e5b3SAdam Hornáček
220*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
221*eeb7e5b3SAdam Hornáček            END
222*eeb7e5b3SAdam Hornáček            ELSE
223*eeb7e5b3SAdam Hornáček            BEGIN
224*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
225*eeb7e5b3SAdam Hornáček                THROW;
226*eeb7e5b3SAdam Hornáček            END
227*eeb7e5b3SAdam Hornáček        END CATCH
228*eeb7e5b3SAdam Hornáček
229*eeb7e5b3SAdam Hornáček    END -- //While loop
230*eeb7e5b3SAdam HornáčekEND;
231*eeb7e5b3SAdam HornáčekGO
232*eeb7e5b3SAdam Hornáček
233*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempInsertStateItemShort_HK]
234*eeb7e5b3SAdam Hornáček	@id	nvarchar(88),
235*eeb7e5b3SAdam Hornáček	@itemShort varbinary(7000),
236*eeb7e5b3SAdam Hornáček	@timeout int
237*eeb7e5b3SAdam HornáčekWITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
238*eeb7e5b3SAdam HornáčekAS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')
239*eeb7e5b3SAdam Hornáček
240*eeb7e5b3SAdam Hornáček	DECLARE @now AS datetime
241*eeb7e5b3SAdam Hornáček	DECLARE @nowLocal AS datetime
242*eeb7e5b3SAdam Hornáček
243*eeb7e5b3SAdam Hornáček	SET @now = GETUTCDATE()
244*eeb7e5b3SAdam Hornáček	SET @nowLocal = GETDATE()
245*eeb7e5b3SAdam Hornáček
246*eeb7e5b3SAdam Hornáček	INSERT dbo.ASPStateTempSessions
247*eeb7e5b3SAdam Hornáček		(SessionId,
248*eeb7e5b3SAdam Hornáček		SessionItemShort,
249*eeb7e5b3SAdam Hornáček		Timeout,
250*eeb7e5b3SAdam Hornáček		Expires,
251*eeb7e5b3SAdam Hornáček		Locked,
252*eeb7e5b3SAdam Hornáček		LockDate,
253*eeb7e5b3SAdam Hornáček		LockDateLocal,
254*eeb7e5b3SAdam Hornáček		LockCookie,
255*eeb7e5b3SAdam Hornáček		Created,
256*eeb7e5b3SAdam Hornáček		Flags,
257*eeb7e5b3SAdam Hornáček		SessionItemLong)
258*eeb7e5b3SAdam Hornáček	VALUES
259*eeb7e5b3SAdam Hornáček		(@id,
260*eeb7e5b3SAdam Hornáček		@itemShort,
261*eeb7e5b3SAdam Hornáček		@timeout,
262*eeb7e5b3SAdam Hornáček		DATEADD(n, @timeout, @now),
263*eeb7e5b3SAdam Hornáček		0,
264*eeb7e5b3SAdam Hornáček		@now,
265*eeb7e5b3SAdam Hornáček		@nowLocal,
266*eeb7e5b3SAdam Hornáček		1,
267*eeb7e5b3SAdam Hornáček		@now,
268*eeb7e5b3SAdam Hornáček		0,
269*eeb7e5b3SAdam Hornáček		NULL)
270*eeb7e5b3SAdam Hornáček
271*eeb7e5b3SAdam Hornáček	RETURN 0
272*eeb7e5b3SAdam HornáčekEND
273*eeb7e5b3SAdam HornáčekGO
274*eeb7e5b3SAdam Hornáček
275*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempInsertStateItemShort]
276*eeb7e5b3SAdam Hornáček	@id	nvarchar(88),
277*eeb7e5b3SAdam Hornáček	@itemShort varbinary(7000),
278*eeb7e5b3SAdam Hornáček	@timeout int
279*eeb7e5b3SAdam HornáčekAS
280*eeb7e5b3SAdam HornáčekBEGIN
281*eeb7e5b3SAdam Hornáček    DECLARE @retry INT = 10;
282*eeb7e5b3SAdam Hornáček
283*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
284*eeb7e5b3SAdam Hornáček    BEGIN
285*eeb7e5b3SAdam Hornáček        BEGIN TRY
286*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
287*eeb7e5b3SAdam Hornáček				EXEC dbo.TempInsertStateItemShort_HK @id, @itemShort, @timeout
288*eeb7e5b3SAdam Hornáček
289*eeb7e5b3SAdam Hornáček            COMMIT TRANSACTION;
290*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
291*eeb7e5b3SAdam Hornáček        END TRY
292*eeb7e5b3SAdam Hornáček
293*eeb7e5b3SAdam Hornáček        BEGIN CATCH
294*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
295*eeb7e5b3SAdam Hornáček
296*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
297*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
298*eeb7e5b3SAdam Hornáček                )
299*eeb7e5b3SAdam Hornáček            BEGIN
300*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
301*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
302*eeb7e5b3SAdam Hornáček
303*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
304*eeb7e5b3SAdam Hornáček            END
305*eeb7e5b3SAdam Hornáček            ELSE
306*eeb7e5b3SAdam Hornáček            BEGIN
307*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
308*eeb7e5b3SAdam Hornáček                THROW;
309*eeb7e5b3SAdam Hornáček            END
310*eeb7e5b3SAdam Hornáček        END CATCH
311*eeb7e5b3SAdam Hornáček
312*eeb7e5b3SAdam Hornáček    END -- //While loop
313*eeb7e5b3SAdam HornáčekEND;
314*eeb7e5b3SAdam HornáčekGO
315*eeb7e5b3SAdam Hornáček
316*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemLong_HK]
317*eeb7e5b3SAdam Hornáček    @id         nvarchar(88),
318*eeb7e5b3SAdam Hornáček    @itemLong   varbinary(max),
319*eeb7e5b3SAdam Hornáček    @timeout    int,
320*eeb7e5b3SAdam Hornáček    @lockCookie int
321*eeb7e5b3SAdam HornáčekWITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
322*eeb7e5b3SAdam HornáčekAS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')
323*eeb7e5b3SAdam Hornáček
324*eeb7e5b3SAdam Hornáček	UPDATE	dbo.ASPStateTempSessions
325*eeb7e5b3SAdam Hornáček    SET		Expires = DATEADD(n, @timeout, GETUTCDATE()),
326*eeb7e5b3SAdam Hornáček            SessionItemLong = @itemLong,
327*eeb7e5b3SAdam Hornáček            Timeout = @timeout,
328*eeb7e5b3SAdam Hornáček            Locked = 0
329*eeb7e5b3SAdam Hornáček    WHERE	SessionId = @id AND LockCookie = @lockCookie
330*eeb7e5b3SAdam Hornáček
331*eeb7e5b3SAdam Hornáček	RETURN 0
332*eeb7e5b3SAdam HornáčekEND
333*eeb7e5b3SAdam HornáčekGO
334*eeb7e5b3SAdam Hornáček
335*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemLong]
336*eeb7e5b3SAdam Hornáček    @id         nvarchar(88),
337*eeb7e5b3SAdam Hornáček    @itemLong   varbinary(max),
338*eeb7e5b3SAdam Hornáček    @timeout    int,
339*eeb7e5b3SAdam Hornáček    @lockCookie int
340*eeb7e5b3SAdam HornáčekAS
341*eeb7e5b3SAdam HornáčekBEGIN
342*eeb7e5b3SAdam Hornáček    DECLARE @retry INT = 10;
343*eeb7e5b3SAdam Hornáček
344*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
345*eeb7e5b3SAdam Hornáček    BEGIN
346*eeb7e5b3SAdam Hornáček        BEGIN TRY
347*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
348*eeb7e5b3SAdam Hornáček				EXEC dbo.TempUpdateStateItemLong_HK @id, @itemLong, @timeout, @lockCookie
349*eeb7e5b3SAdam Hornáček
350*eeb7e5b3SAdam Hornáček            COMMIT TRANSACTION;
351*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
352*eeb7e5b3SAdam Hornáček        END TRY
353*eeb7e5b3SAdam Hornáček
354*eeb7e5b3SAdam Hornáček        BEGIN CATCH
355*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
356*eeb7e5b3SAdam Hornáček
357*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
358*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
359*eeb7e5b3SAdam Hornáček                )
360*eeb7e5b3SAdam Hornáček            BEGIN
361*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
362*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
363*eeb7e5b3SAdam Hornáček
364*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
365*eeb7e5b3SAdam Hornáček            END
366*eeb7e5b3SAdam Hornáček            ELSE
367*eeb7e5b3SAdam Hornáček            BEGIN
368*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
369*eeb7e5b3SAdam Hornáček                THROW;
370*eeb7e5b3SAdam Hornáček            END
371*eeb7e5b3SAdam Hornáček        END CATCH
372*eeb7e5b3SAdam Hornáček
373*eeb7e5b3SAdam Hornáček    END -- //While loop
374*eeb7e5b3SAdam HornáčekEND;
375*eeb7e5b3SAdam HornáčekGO
376*eeb7e5b3SAdam Hornáček
377*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemLongNullShort_HK]
378*eeb7e5b3SAdam Hornáček    @id         nvarchar(88),
379*eeb7e5b3SAdam Hornáček    @itemLong   varbinary(max),
380*eeb7e5b3SAdam Hornáček    @timeout    int,
381*eeb7e5b3SAdam Hornáček    @lockCookie int
382*eeb7e5b3SAdam HornáčekWITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
383*eeb7e5b3SAdam HornáčekAS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')
384*eeb7e5b3SAdam Hornáček
385*eeb7e5b3SAdam Hornáček    UPDATE	dbo.ASPStateTempSessions
386*eeb7e5b3SAdam Hornáček    SET		Expires = DATEADD(n, @timeout, GETUTCDATE()),
387*eeb7e5b3SAdam Hornáček			SessionItemLong = @itemLong,
388*eeb7e5b3SAdam Hornáček			SessionItemShort = NULL,
389*eeb7e5b3SAdam Hornáček			Timeout = @timeout,
390*eeb7e5b3SAdam Hornáček			Locked = 0
391*eeb7e5b3SAdam Hornáček    WHERE	SessionId = @id AND LockCookie = @lockCookie
392*eeb7e5b3SAdam Hornáček
393*eeb7e5b3SAdam Hornáček    RETURN 0
394*eeb7e5b3SAdam HornáčekEND
395*eeb7e5b3SAdam HornáčekGO
396*eeb7e5b3SAdam Hornáček
397*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemLongNullShort]
398*eeb7e5b3SAdam Hornáček    @id         nvarchar(88),
399*eeb7e5b3SAdam Hornáček    @itemLong   varbinary(max),
400*eeb7e5b3SAdam Hornáček    @timeout    int,
401*eeb7e5b3SAdam Hornáček    @lockCookie int
402*eeb7e5b3SAdam HornáčekAS
403*eeb7e5b3SAdam HornáčekBEGIN
404*eeb7e5b3SAdam Hornáček    DECLARE @retry INT = 10;
405*eeb7e5b3SAdam Hornáček
406*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
407*eeb7e5b3SAdam Hornáček    BEGIN
408*eeb7e5b3SAdam Hornáček        BEGIN TRY
409*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
410*eeb7e5b3SAdam Hornáček				EXEC dbo.TempUpdateStateItemLongNullShort_HK @id, @itemLong, @timeout, @lockCookie
411*eeb7e5b3SAdam Hornáček
412*eeb7e5b3SAdam Hornáček            COMMIT TRANSACTION;
413*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
414*eeb7e5b3SAdam Hornáček        END TRY
415*eeb7e5b3SAdam Hornáček
416*eeb7e5b3SAdam Hornáček        BEGIN CATCH
417*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
418*eeb7e5b3SAdam Hornáček
419*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
420*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
421*eeb7e5b3SAdam Hornáček                )
422*eeb7e5b3SAdam Hornáček            BEGIN
423*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
424*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
425*eeb7e5b3SAdam Hornáček
426*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
427*eeb7e5b3SAdam Hornáček            END
428*eeb7e5b3SAdam Hornáček            ELSE
429*eeb7e5b3SAdam Hornáček            BEGIN
430*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
431*eeb7e5b3SAdam Hornáček                THROW;
432*eeb7e5b3SAdam Hornáček            END
433*eeb7e5b3SAdam Hornáček        END CATCH
434*eeb7e5b3SAdam Hornáček
435*eeb7e5b3SAdam Hornáček    END -- //While loop
436*eeb7e5b3SAdam HornáčekEND;
437*eeb7e5b3SAdam HornáčekGO
438*eeb7e5b3SAdam Hornáček
439*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemShort_HK]
440*eeb7e5b3SAdam Hornáček    @id         nvarchar(88),
441*eeb7e5b3SAdam Hornáček    @itemShort  varbinary(7000),
442*eeb7e5b3SAdam Hornáček    @timeout    int,
443*eeb7e5b3SAdam Hornáček    @lockCookie int
444*eeb7e5b3SAdam HornáčekWITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
445*eeb7e5b3SAdam HornáčekAS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english' )
446*eeb7e5b3SAdam Hornáček
447*eeb7e5b3SAdam Hornáček    UPDATE	dbo.ASPStateTempSessions
448*eeb7e5b3SAdam Hornáček    SET		Expires = DATEADD(n, @timeout, GETUTCDATE()),
449*eeb7e5b3SAdam Hornáček			SessionItemShort = @itemShort,
450*eeb7e5b3SAdam Hornáček			Timeout = @timeout,
451*eeb7e5b3SAdam Hornáček			Locked = 0
452*eeb7e5b3SAdam Hornáček    WHERE	SessionId = @id AND LockCookie = @lockCookie
453*eeb7e5b3SAdam Hornáček
454*eeb7e5b3SAdam Hornáček    RETURN 0
455*eeb7e5b3SAdam HornáčekEND
456*eeb7e5b3SAdam HornáčekGO
457*eeb7e5b3SAdam Hornáček
458*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemShort]
459*eeb7e5b3SAdam Hornáček    @id         nvarchar(88),
460*eeb7e5b3SAdam Hornáček    @itemShort   varbinary(max),
461*eeb7e5b3SAdam Hornáček    @timeout    int,
462*eeb7e5b3SAdam Hornáček    @lockCookie int
463*eeb7e5b3SAdam HornáčekAS
464*eeb7e5b3SAdam HornáčekBEGIN
465*eeb7e5b3SAdam Hornáček    DECLARE @retry INT = 10;
466*eeb7e5b3SAdam Hornáček
467*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
468*eeb7e5b3SAdam Hornáček    BEGIN
469*eeb7e5b3SAdam Hornáček        BEGIN TRY
470*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
471*eeb7e5b3SAdam Hornáček				EXEC dbo.TempUpdateStateItemShort_HK @id, @itemShort, @timeout, @lockCookie
472*eeb7e5b3SAdam Hornáček
473*eeb7e5b3SAdam Hornáček            COMMIT TRANSACTION;
474*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
475*eeb7e5b3SAdam Hornáček        END TRY
476*eeb7e5b3SAdam Hornáček
477*eeb7e5b3SAdam Hornáček        BEGIN CATCH
478*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
479*eeb7e5b3SAdam Hornáček
480*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
481*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
482*eeb7e5b3SAdam Hornáček                )
483*eeb7e5b3SAdam Hornáček            BEGIN
484*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
485*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
486*eeb7e5b3SAdam Hornáček
487*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
488*eeb7e5b3SAdam Hornáček            END
489*eeb7e5b3SAdam Hornáček            ELSE
490*eeb7e5b3SAdam Hornáček            BEGIN
491*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
492*eeb7e5b3SAdam Hornáček                THROW;
493*eeb7e5b3SAdam Hornáček            END
494*eeb7e5b3SAdam Hornáček        END CATCH
495*eeb7e5b3SAdam Hornáček
496*eeb7e5b3SAdam Hornáček    END -- //While loop
497*eeb7e5b3SAdam HornáčekEND;
498*eeb7e5b3SAdam HornáčekGO
499*eeb7e5b3SAdam Hornáček
500*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[CreateTempTables]
501*eeb7e5b3SAdam HornáčekAS
502*eeb7e5b3SAdam Hornáček    CREATE TABLE ASPStateTempSessions (
503*eeb7e5b3SAdam Hornáček        SessionId           nvarchar(88)    COLLATE Latin1_General_100_BIN2 NOT NULL,
504*eeb7e5b3SAdam Hornáček        Created             datetime        NOT NULL DEFAULT GETUTCDATE(),
505*eeb7e5b3SAdam Hornáček        Expires             datetime        NOT NULL,
506*eeb7e5b3SAdam Hornáček        LockDate            datetime        NOT NULL,
507*eeb7e5b3SAdam Hornáček        LockDateLocal       datetime        NOT NULL,
508*eeb7e5b3SAdam Hornáček        LockCookie          int             NOT NULL,
509*eeb7e5b3SAdam Hornáček        Timeout             int             NOT NULL,
510*eeb7e5b3SAdam Hornáček        Locked              bit             NOT NULL,
511*eeb7e5b3SAdam Hornáček        SessionItemShort    VARBINARY(7000) NULL,
512*eeb7e5b3SAdam Hornáček        SessionItemLong     VARBINARY(max)  NULL,
513*eeb7e5b3SAdam Hornáček        Flags               int             NOT NULL DEFAULT 0,
514*eeb7e5b3SAdam Hornáček
515*eeb7e5b3SAdam Hornáček		PRIMARY KEY NONCLUSTERED HASH
516*eeb7e5b3SAdam Hornáček		(
517*eeb7e5b3SAdam Hornáček			[SessionId]
518*eeb7e5b3SAdam Hornáček		)WITH ( BUCKET_COUNT = 33554432),
519*eeb7e5b3SAdam Hornáček		INDEX Index_Expires (Expires)
520*eeb7e5b3SAdam Hornáček
521*eeb7e5b3SAdam Hornáček	)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_ONLY )
522*eeb7e5b3SAdam Hornáček
523*eeb7e5b3SAdam Hornáček    CREATE TABLE dbo.ASPStateTempApplications (
524*eeb7e5b3SAdam Hornáček        AppId               int             NOT NULL PRIMARY KEY,
525*eeb7e5b3SAdam Hornáček        AppName             char(280)       NOT NULL,
526*eeb7e5b3SAdam Hornáček    )
527*eeb7e5b3SAdam Hornáček    CREATE NONCLUSTERED INDEX Index_AppName ON ASPStateTempApplications(AppName)
528*eeb7e5b3SAdam Hornáček
529*eeb7e5b3SAdam HornáčekRETURN 0
530*eeb7e5b3SAdam HornáčekGO
531*eeb7e5b3SAdam Hornáček
532*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[DeleteExpiredSessions]
533*eeb7e5b3SAdam HornáčekAS
534*eeb7e5b3SAdam Hornáček    SET NOCOUNT ON
535*eeb7e5b3SAdam Hornáček    SET DEADLOCK_PRIORITY LOW
536*eeb7e5b3SAdam Hornáček
537*eeb7e5b3SAdam Hornáček    DECLARE @now datetime
538*eeb7e5b3SAdam Hornáček    SET @now = GETUTCDATE()
539*eeb7e5b3SAdam Hornáček
540*eeb7e5b3SAdam Hornáček    CREATE TABLE #tblExpiredSessions
541*eeb7e5b3SAdam Hornáček    (
542*eeb7e5b3SAdam Hornáček        SessionId nvarchar(88) NOT NULL PRIMARY KEY
543*eeb7e5b3SAdam Hornáček    )
544*eeb7e5b3SAdam Hornáček
545*eeb7e5b3SAdam Hornáček    INSERT #tblExpiredSessions (SessionId)
546*eeb7e5b3SAdam Hornáček        SELECT SessionId
547*eeb7e5b3SAdam Hornáček        FROM ASPStateTempSessions WITH (SNAPSHOT)
548*eeb7e5b3SAdam Hornáček        WHERE Expires < @now
549*eeb7e5b3SAdam Hornáček
550*eeb7e5b3SAdam Hornáček    IF @@ROWCOUNT <> 0
551*eeb7e5b3SAdam Hornáček    BEGIN
552*eeb7e5b3SAdam Hornáček        DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY
553*eeb7e5b3SAdam Hornáček        FOR SELECT SessionId FROM #tblExpiredSessions
554*eeb7e5b3SAdam Hornáček
555*eeb7e5b3SAdam Hornáček        DECLARE @SessionId nvarchar(88)
556*eeb7e5b3SAdam Hornáček
557*eeb7e5b3SAdam Hornáček        OPEN ExpiredSessionCursor
558*eeb7e5b3SAdam Hornáček
559*eeb7e5b3SAdam Hornáček        FETCH NEXT FROM ExpiredSessionCursor INTO @SessionId
560*eeb7e5b3SAdam Hornáček
561*eeb7e5b3SAdam Hornáček        WHILE @@FETCH_STATUS = 0
562*eeb7e5b3SAdam Hornáček            BEGIN
563*eeb7e5b3SAdam Hornáček                DELETE FROM ASPStateTempSessions WHERE SessionId = @SessionId AND Expires < @now
564*eeb7e5b3SAdam Hornáček                FETCH NEXT FROM ExpiredSessionCursor INTO @SessionId
565*eeb7e5b3SAdam Hornáček            END
566*eeb7e5b3SAdam Hornáček
567*eeb7e5b3SAdam Hornáček        CLOSE ExpiredSessionCursor
568*eeb7e5b3SAdam Hornáček
569*eeb7e5b3SAdam Hornáček        DEALLOCATE ExpiredSessionCursor
570*eeb7e5b3SAdam Hornáček
571*eeb7e5b3SAdam Hornáček    END
572*eeb7e5b3SAdam Hornáček
573*eeb7e5b3SAdam Hornáček    DROP TABLE #tblExpiredSessions
574*eeb7e5b3SAdam Hornáček
575*eeb7e5b3SAdam HornáčekRETURN 0
576*eeb7e5b3SAdam HornáčekGO
577*eeb7e5b3SAdam Hornáček
578*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[GetHashCode]
579*eeb7e5b3SAdam Hornáček    @input tAppName,
580*eeb7e5b3SAdam Hornáček    @hash int OUTPUT
581*eeb7e5b3SAdam HornáčekAS
582*eeb7e5b3SAdam Hornáček    /*
583*eeb7e5b3SAdam Hornáček       This sproc is based on this C# hash function:
584*eeb7e5b3SAdam Hornáček
585*eeb7e5b3SAdam Hornáček        int GetHashCode(string s)
586*eeb7e5b3SAdam Hornáček        {
587*eeb7e5b3SAdam Hornáček            int     hash = 5381;
588*eeb7e5b3SAdam Hornáček            int     len = s.Length;
589*eeb7e5b3SAdam Hornáček
590*eeb7e5b3SAdam Hornáček            for (int i = 0; i < len; i++) {
591*eeb7e5b3SAdam Hornáček                int     c = Convert.ToInt32(s[i]);
592*eeb7e5b3SAdam Hornáček                hash = ((hash << 5) + hash) ^ c;
593*eeb7e5b3SAdam Hornáček            }
594*eeb7e5b3SAdam Hornáček
595*eeb7e5b3SAdam Hornáček            return hash;
596*eeb7e5b3SAdam Hornáček        }
597*eeb7e5b3SAdam Hornáček
598*eeb7e5b3SAdam Hornáček        However, SQL 7 doesn't provide a 32-bit integer
599*eeb7e5b3SAdam Hornáček        type that allows rollover of bits, we have to
600*eeb7e5b3SAdam Hornáček        divide our 32bit integer into the upper and lower
601*eeb7e5b3SAdam Hornáček        16 bits to do our calculation.
602*eeb7e5b3SAdam Hornáček    */
603*eeb7e5b3SAdam Hornáček
604*eeb7e5b3SAdam Hornáček    DECLARE @hi_16bit   int
605*eeb7e5b3SAdam Hornáček    DECLARE @lo_16bit   int
606*eeb7e5b3SAdam Hornáček    DECLARE @hi_t       int
607*eeb7e5b3SAdam Hornáček    DECLARE @lo_t       int
608*eeb7e5b3SAdam Hornáček    DECLARE @len        int
609*eeb7e5b3SAdam Hornáček    DECLARE @i          int
610*eeb7e5b3SAdam Hornáček    DECLARE @c          int
611*eeb7e5b3SAdam Hornáček    DECLARE @carry      int
612*eeb7e5b3SAdam Hornáček
613*eeb7e5b3SAdam Hornáček    SET @hi_16bit = 0
614*eeb7e5b3SAdam Hornáček    SET @lo_16bit = 5381
615*eeb7e5b3SAdam Hornáček
616*eeb7e5b3SAdam Hornáček    SET @len = DATALENGTH(@input)
617*eeb7e5b3SAdam Hornáček    SET @i = 1
618*eeb7e5b3SAdam Hornáček
619*eeb7e5b3SAdam Hornáček    WHILE (@i <= @len)
620*eeb7e5b3SAdam Hornáček    BEGIN
621*eeb7e5b3SAdam Hornáček        SET @c = ASCII(SUBSTRING(@input, @i, 1))
622*eeb7e5b3SAdam Hornáček
623*eeb7e5b3SAdam Hornáček        /* Formula:
624*eeb7e5b3SAdam Hornáček           hash = ((hash << 5) + hash) ^ c */
625*eeb7e5b3SAdam Hornáček
626*eeb7e5b3SAdam Hornáček        /* hash << 5 */
627*eeb7e5b3SAdam Hornáček        SET @hi_t = @hi_16bit * 32 /* high 16bits << 5 */
628*eeb7e5b3SAdam Hornáček        SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */
629*eeb7e5b3SAdam Hornáček
630*eeb7e5b3SAdam Hornáček        SET @lo_t = @lo_16bit * 32 /* low 16bits << 5 */
631*eeb7e5b3SAdam Hornáček
632*eeb7e5b3SAdam Hornáček        SET @carry = @lo_16bit & 0x1F0000 /* move low 16bits carryover to hi 16bits */
633*eeb7e5b3SAdam Hornáček        SET @carry = @carry / 0x10000 /* >> 16 */
634*eeb7e5b3SAdam Hornáček        SET @hi_t = @hi_t + @carry
635*eeb7e5b3SAdam Hornáček        SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */
636*eeb7e5b3SAdam Hornáček
637*eeb7e5b3SAdam Hornáček        /* + hash */
638*eeb7e5b3SAdam Hornáček        SET @lo_16bit = @lo_16bit + @lo_t
639*eeb7e5b3SAdam Hornáček        SET @hi_16bit = @hi_16bit + @hi_t + (@lo_16bit / 0x10000)
640*eeb7e5b3SAdam Hornáček        /* delay clearing the overflow */
641*eeb7e5b3SAdam Hornáček
642*eeb7e5b3SAdam Hornáček        /* ^c */
643*eeb7e5b3SAdam Hornáček        SET @lo_16bit = @lo_16bit ^ @c
644*eeb7e5b3SAdam Hornáček
645*eeb7e5b3SAdam Hornáček        /* Now clear the overflow bits */
646*eeb7e5b3SAdam Hornáček        SET @hi_16bit = @hi_16bit & 0xFFFF
647*eeb7e5b3SAdam Hornáček        SET @lo_16bit = @lo_16bit & 0xFFFF
648*eeb7e5b3SAdam Hornáček
649*eeb7e5b3SAdam Hornáček        SET @i = @i + 1
650*eeb7e5b3SAdam Hornáček    END
651*eeb7e5b3SAdam Hornáček
652*eeb7e5b3SAdam Hornáček    /* Do a sign extension of the hi-16bit if needed */
653*eeb7e5b3SAdam Hornáček    IF (@hi_16bit & 0x8000 <> 0)
654*eeb7e5b3SAdam Hornáček        SET @hi_16bit = 0xFFFF0000 | @hi_16bit
655*eeb7e5b3SAdam Hornáček
656*eeb7e5b3SAdam Hornáček    /* Merge hi and lo 16bit back together */
657*eeb7e5b3SAdam Hornáček    SET @hi_16bit = @hi_16bit * 0x10000 /* << 16 */
658*eeb7e5b3SAdam Hornáček    SET @hash = @hi_16bit | @lo_16bit
659*eeb7e5b3SAdam Hornáček
660*eeb7e5b3SAdam Hornáček    RETURN 0
661*eeb7e5b3SAdam Hornáček
662*eeb7e5b3SAdam HornáčekGO
663*eeb7e5b3SAdam Hornáček
664*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[GetMajorVersion]
665*eeb7e5b3SAdam Hornáček    @@ver int OUTPUT
666*eeb7e5b3SAdam HornáčekAS
667*eeb7e5b3SAdam HornáčekBEGIN
668*eeb7e5b3SAdam Hornáček    DECLARE @version        nchar(100)
669*eeb7e5b3SAdam Hornáček    DECLARE @dot            int
670*eeb7e5b3SAdam Hornáček    DECLARE @hyphen         int
671*eeb7e5b3SAdam Hornáček    DECLARE @SqlToExec      nchar(4000)
672*eeb7e5b3SAdam Hornáček
673*eeb7e5b3SAdam Hornáček    SELECT @@ver = 7
674*eeb7e5b3SAdam Hornáček    SELECT @version = @@Version
675*eeb7e5b3SAdam Hornáček    SELECT @hyphen  = CHARINDEX(N' - ', @version)
676*eeb7e5b3SAdam Hornáček    IF (NOT(@hyphen IS NULL) AND @hyphen > 0)
677*eeb7e5b3SAdam Hornáček    BEGIN
678*eeb7e5b3SAdam Hornáček            SELECT @hyphen = @hyphen + 3
679*eeb7e5b3SAdam Hornáček            SELECT @dot    = CHARINDEX(N'.', @version, @hyphen)
680*eeb7e5b3SAdam Hornáček            IF (NOT(@dot IS NULL) AND @dot > @hyphen)
681*eeb7e5b3SAdam Hornáček            BEGIN
682*eeb7e5b3SAdam Hornáček                    SELECT @version = SUBSTRING(@version, @hyphen, @dot - @hyphen)
683*eeb7e5b3SAdam Hornáček                    SELECT @@ver     = CONVERT(int, @version)
684*eeb7e5b3SAdam Hornáček            END
685*eeb7e5b3SAdam Hornáček    END
686*eeb7e5b3SAdam HornáčekEND
687*eeb7e5b3SAdam HornáčekGO
688*eeb7e5b3SAdam Hornáček
689*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetAppID]
690*eeb7e5b3SAdam Hornáček	@appName	VARCHAR(280), --@appName    tAppName,
691*eeb7e5b3SAdam Hornáček	@appId      int OUTPUT
692*eeb7e5b3SAdam HornáčekAS
693*eeb7e5b3SAdam Hornáček	SET @appName = LOWER(@appName)
694*eeb7e5b3SAdam Hornáček	SET @appId = NULL
695*eeb7e5b3SAdam Hornáček
696*eeb7e5b3SAdam Hornáček	SELECT @appId = AppId
697*eeb7e5b3SAdam Hornáček	FROM ASPStateTempApplications
698*eeb7e5b3SAdam Hornáček	WHERE AppName = @appName
699*eeb7e5b3SAdam Hornáček
700*eeb7e5b3SAdam Hornáček	IF @appId IS NULL BEGIN
701*eeb7e5b3SAdam Hornáček		BEGIN TRAN
702*eeb7e5b3SAdam Hornáček
703*eeb7e5b3SAdam Hornáček		SELECT @appId = AppId
704*eeb7e5b3SAdam Hornáček		FROM ASPStateTempApplications WITH (TABLOCKX)
705*eeb7e5b3SAdam Hornáček		WHERE AppName = @appName
706*eeb7e5b3SAdam Hornáček
707*eeb7e5b3SAdam Hornáček		IF @appId IS NULL
708*eeb7e5b3SAdam Hornáček		BEGIN
709*eeb7e5b3SAdam Hornáček			EXEC GetHashCode @appName, @appId OUTPUT
710*eeb7e5b3SAdam Hornáček
711*eeb7e5b3SAdam Hornáček			INSERT ASPStateTempApplications
712*eeb7e5b3SAdam Hornáček			VALUES
713*eeb7e5b3SAdam Hornáček			(@appId, @appName)
714*eeb7e5b3SAdam Hornáček
715*eeb7e5b3SAdam Hornáček			IF @@ERROR = 2627
716*eeb7e5b3SAdam Hornáček			BEGIN
717*eeb7e5b3SAdam Hornáček				DECLARE @dupApp tAppName
718*eeb7e5b3SAdam Hornáček
719*eeb7e5b3SAdam Hornáček				SELECT @dupApp = RTRIM(AppName)
720*eeb7e5b3SAdam Hornáček				FROM ASPStateTempApplications
721*eeb7e5b3SAdam Hornáček				WHERE AppId = @appId
722*eeb7e5b3SAdam Hornáček
723*eeb7e5b3SAdam Hornáček				RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.',
724*eeb7e5b3SAdam Hornáček							18, 1, @appName, @dupApp)
725*eeb7e5b3SAdam Hornáček			END
726*eeb7e5b3SAdam Hornáček		END
727*eeb7e5b3SAdam Hornáček		COMMIT
728*eeb7e5b3SAdam Hornáček	END
729*eeb7e5b3SAdam Hornáček
730*eeb7e5b3SAdam HornáčekRETURN 0
731*eeb7e5b3SAdam Hornáček
732*eeb7e5b3SAdam HornáčekGO
733*eeb7e5b3SAdam Hornáček
734*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItem]
735*eeb7e5b3SAdam Hornáček    @id         tSessionId,
736*eeb7e5b3SAdam Hornáček    @itemShort  tSessionItemShort OUTPUT,
737*eeb7e5b3SAdam Hornáček    @locked     bit OUTPUT,
738*eeb7e5b3SAdam Hornáček    @lockDate   datetime OUTPUT,
739*eeb7e5b3SAdam Hornáček    @lockCookie int OUTPUT
740*eeb7e5b3SAdam HornáčekAS
741*eeb7e5b3SAdam Hornáček    DECLARE @textptr AS tTextPtr
742*eeb7e5b3SAdam Hornáček    DECLARE @length AS int
743*eeb7e5b3SAdam Hornáček    DECLARE @now AS datetime
744*eeb7e5b3SAdam Hornáček    SET @now = GETUTCDATE()
745*eeb7e5b3SAdam Hornáček
746*eeb7e5b3SAdam Hornáček	DECLARE @retry INT = 10;
747*eeb7e5b3SAdam Hornáček
748*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
749*eeb7e5b3SAdam Hornáček    BEGIN
750*eeb7e5b3SAdam Hornáček        BEGIN TRY
751*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
752*eeb7e5b3SAdam Hornáček
753*eeb7e5b3SAdam Hornáček				UPDATE ASPStateTempSessions
754*eeb7e5b3SAdam Hornáček				SET Expires = DATEADD(n, Timeout, @now),
755*eeb7e5b3SAdam Hornáček					@locked = Locked,
756*eeb7e5b3SAdam Hornáček					@lockDate = LockDateLocal,
757*eeb7e5b3SAdam Hornáček					@lockCookie = LockCookie,
758*eeb7e5b3SAdam Hornáček					@itemShort = CASE @locked
759*eeb7e5b3SAdam Hornáček						WHEN 0 THEN SessionItemShort
760*eeb7e5b3SAdam Hornáček						ELSE NULL
761*eeb7e5b3SAdam Hornáček						END,
762*eeb7e5b3SAdam Hornáček					@textptr = CASE @locked
763*eeb7e5b3SAdam Hornáček						WHEN 0 THEN SessionItemLong
764*eeb7e5b3SAdam Hornáček						ELSE NULL
765*eeb7e5b3SAdam Hornáček						END,
766*eeb7e5b3SAdam Hornáček					@length = CASE @locked
767*eeb7e5b3SAdam Hornáček						WHEN 0 THEN DATALENGTH(SessionItemLong)
768*eeb7e5b3SAdam Hornáček						ELSE NULL
769*eeb7e5b3SAdam Hornáček						END
770*eeb7e5b3SAdam Hornáček				WHERE SessionId = @id
771*eeb7e5b3SAdam Hornáček				IF @length IS NOT NULL BEGIN
772*eeb7e5b3SAdam Hornáček					SELECT @textptr
773*eeb7e5b3SAdam Hornáček				END
774*eeb7e5b3SAdam Hornáček				COMMIT TRANSACTION;
775*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
776*eeb7e5b3SAdam Hornáček        END TRY
777*eeb7e5b3SAdam Hornáček
778*eeb7e5b3SAdam Hornáček        BEGIN CATCH
779*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
780*eeb7e5b3SAdam Hornáček
781*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
782*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
783*eeb7e5b3SAdam Hornáček                )
784*eeb7e5b3SAdam Hornáček            BEGIN
785*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
786*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
787*eeb7e5b3SAdam Hornáček
788*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
789*eeb7e5b3SAdam Hornáček            END
790*eeb7e5b3SAdam Hornáček            ELSE
791*eeb7e5b3SAdam Hornáček            BEGIN
792*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
793*eeb7e5b3SAdam Hornáček                THROW;
794*eeb7e5b3SAdam Hornáček            END
795*eeb7e5b3SAdam Hornáček        END CATCH
796*eeb7e5b3SAdam Hornáček
797*eeb7e5b3SAdam Hornáček    END -- //While loop
798*eeb7e5b3SAdam Hornáček    RETURN 0
799*eeb7e5b3SAdam HornáčekGO
800*eeb7e5b3SAdam Hornáček
801*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItem2]
802*eeb7e5b3SAdam Hornáček    @id         tSessionId,
803*eeb7e5b3SAdam Hornáček    @itemShort  tSessionItemShort OUTPUT,
804*eeb7e5b3SAdam Hornáček    @locked     bit OUTPUT,
805*eeb7e5b3SAdam Hornáček    @lockAge    int OUTPUT,
806*eeb7e5b3SAdam Hornáček    @lockCookie int OUTPUT
807*eeb7e5b3SAdam HornáčekAS
808*eeb7e5b3SAdam Hornáček    DECLARE @textptr AS tTextPtr
809*eeb7e5b3SAdam Hornáček    DECLARE @length AS int
810*eeb7e5b3SAdam Hornáček    DECLARE @now AS datetime
811*eeb7e5b3SAdam Hornáček    SET @now = GETUTCDATE()
812*eeb7e5b3SAdam Hornáček
813*eeb7e5b3SAdam Hornáček	DECLARE @retry INT = 10;
814*eeb7e5b3SAdam Hornáček
815*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
816*eeb7e5b3SAdam Hornáček    BEGIN
817*eeb7e5b3SAdam Hornáček        BEGIN TRY
818*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
819*eeb7e5b3SAdam Hornáček				UPDATE ASPStateTempSessions
820*eeb7e5b3SAdam Hornáček				SET Expires = DATEADD(n, Timeout, @now),
821*eeb7e5b3SAdam Hornáček					@locked = Locked,
822*eeb7e5b3SAdam Hornáček					@lockAge = DATEDIFF(second, LockDate, @now),
823*eeb7e5b3SAdam Hornáček					@lockCookie = LockCookie,
824*eeb7e5b3SAdam Hornáček					@itemShort = CASE @locked
825*eeb7e5b3SAdam Hornáček						WHEN 0 THEN SessionItemShort
826*eeb7e5b3SAdam Hornáček						ELSE NULL
827*eeb7e5b3SAdam Hornáček						END,
828*eeb7e5b3SAdam Hornáček					@textptr = CASE @locked
829*eeb7e5b3SAdam Hornáček						WHEN 0 THEN SessionItemLong
830*eeb7e5b3SAdam Hornáček						ELSE NULL
831*eeb7e5b3SAdam Hornáček						END,
832*eeb7e5b3SAdam Hornáček					@length = CASE @locked
833*eeb7e5b3SAdam Hornáček						WHEN 0 THEN DATALENGTH(SessionItemLong)
834*eeb7e5b3SAdam Hornáček						ELSE NULL
835*eeb7e5b3SAdam Hornáček						END
836*eeb7e5b3SAdam Hornáček				WHERE SessionId = @id
837*eeb7e5b3SAdam Hornáček				IF @length IS NOT NULL BEGIN
838*eeb7e5b3SAdam Hornáček					SELECT @textptr
839*eeb7e5b3SAdam Hornáček				END
840*eeb7e5b3SAdam Hornáček			COMMIT TRANSACTION;
841*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
842*eeb7e5b3SAdam Hornáček        END TRY
843*eeb7e5b3SAdam Hornáček
844*eeb7e5b3SAdam Hornáček        BEGIN CATCH
845*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
846*eeb7e5b3SAdam Hornáček
847*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
848*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
849*eeb7e5b3SAdam Hornáček                )
850*eeb7e5b3SAdam Hornáček            BEGIN
851*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
852*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
853*eeb7e5b3SAdam Hornáček
854*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
855*eeb7e5b3SAdam Hornáček            END
856*eeb7e5b3SAdam Hornáček            ELSE
857*eeb7e5b3SAdam Hornáček            BEGIN
858*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
859*eeb7e5b3SAdam Hornáček                THROW;
860*eeb7e5b3SAdam Hornáček            END
861*eeb7e5b3SAdam Hornáček        END CATCH
862*eeb7e5b3SAdam Hornáček
863*eeb7e5b3SAdam Hornáček    END -- //While loop
864*eeb7e5b3SAdam Hornáček    RETURN 0
865*eeb7e5b3SAdam HornáčekGO
866*eeb7e5b3SAdam Hornáček
867*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItem3]
868*eeb7e5b3SAdam Hornáček	@id         nvarchar(88),
869*eeb7e5b3SAdam Hornáček    @itemShort  varbinary(7000) OUTPUT,
870*eeb7e5b3SAdam Hornáček    @locked     bit OUTPUT,
871*eeb7e5b3SAdam Hornáček    @lockAge    int OUTPUT,
872*eeb7e5b3SAdam Hornáček    @lockCookie int OUTPUT,
873*eeb7e5b3SAdam Hornáček    @actionFlags int OUTPUT
874*eeb7e5b3SAdam HornáčekAS
875*eeb7e5b3SAdam Hornáček    DECLARE @textptr AS tTextPtr
876*eeb7e5b3SAdam Hornáček    DECLARE @length AS int
877*eeb7e5b3SAdam Hornáček    DECLARE @now AS datetime
878*eeb7e5b3SAdam Hornáček    SET @now = GETUTCDATE()
879*eeb7e5b3SAdam Hornáček
880*eeb7e5b3SAdam Hornáček	DECLARE @retry INT = 10;
881*eeb7e5b3SAdam Hornáček
882*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
883*eeb7e5b3SAdam Hornáček    BEGIN
884*eeb7e5b3SAdam Hornáček        BEGIN TRY
885*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
886*eeb7e5b3SAdam Hornáček				UPDATE ASPStateTempSessions
887*eeb7e5b3SAdam Hornáček				SET Expires = DATEADD(n, Timeout, @now),
888*eeb7e5b3SAdam Hornáček					@locked = Locked,
889*eeb7e5b3SAdam Hornáček					@lockAge = DATEDIFF(second, LockDate, @now),
890*eeb7e5b3SAdam Hornáček					@lockCookie = LockCookie,
891*eeb7e5b3SAdam Hornáček					@itemShort = CASE @locked
892*eeb7e5b3SAdam Hornáček						WHEN 0 THEN SessionItemShort
893*eeb7e5b3SAdam Hornáček						ELSE NULL
894*eeb7e5b3SAdam Hornáček						END,
895*eeb7e5b3SAdam Hornáček					@textptr = CASE @locked
896*eeb7e5b3SAdam Hornáček						WHEN 0 THEN SessionItemLong
897*eeb7e5b3SAdam Hornáček						ELSE NULL
898*eeb7e5b3SAdam Hornáček						END,
899*eeb7e5b3SAdam Hornáček					@length = CASE @locked
900*eeb7e5b3SAdam Hornáček						WHEN 0 THEN DATALENGTH(SessionItemLong)
901*eeb7e5b3SAdam Hornáček						ELSE NULL
902*eeb7e5b3SAdam Hornáček						END,
903*eeb7e5b3SAdam Hornáček
904*eeb7e5b3SAdam Hornáček					/* If the Uninitialized flag (0x1) if it is set,
905*eeb7e5b3SAdam Hornáček						remove it and return InitializeItem (0x1) in actionFlags */
906*eeb7e5b3SAdam Hornáček					Flags = CASE
907*eeb7e5b3SAdam Hornáček						WHEN (Flags & 1) <> 0 THEN (Flags & ~1)
908*eeb7e5b3SAdam Hornáček						ELSE Flags
909*eeb7e5b3SAdam Hornáček						END,
910*eeb7e5b3SAdam Hornáček					@actionFlags = CASE
911*eeb7e5b3SAdam Hornáček						WHEN (Flags & 1) <> 0 THEN 1
912*eeb7e5b3SAdam Hornáček						ELSE 0
913*eeb7e5b3SAdam Hornáček						END
914*eeb7e5b3SAdam Hornáček				WHERE SessionId = @id
915*eeb7e5b3SAdam Hornáček				IF @length IS NOT NULL BEGIN
916*eeb7e5b3SAdam Hornáček					SELECT @textptr
917*eeb7e5b3SAdam Hornáček				END
918*eeb7e5b3SAdam Hornáček			COMMIT TRANSACTION;
919*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
920*eeb7e5b3SAdam Hornáček        END TRY
921*eeb7e5b3SAdam Hornáček
922*eeb7e5b3SAdam Hornáček        BEGIN CATCH
923*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
924*eeb7e5b3SAdam Hornáček
925*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
926*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
927*eeb7e5b3SAdam Hornáček                )
928*eeb7e5b3SAdam Hornáček            BEGIN
929*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
930*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
931*eeb7e5b3SAdam Hornáček
932*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
933*eeb7e5b3SAdam Hornáček            END
934*eeb7e5b3SAdam Hornáček            ELSE
935*eeb7e5b3SAdam Hornáček            BEGIN
936*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
937*eeb7e5b3SAdam Hornáček                THROW;
938*eeb7e5b3SAdam Hornáček            END
939*eeb7e5b3SAdam Hornáček        END CATCH
940*eeb7e5b3SAdam Hornáček
941*eeb7e5b3SAdam Hornáček    END -- //While loop
942*eeb7e5b3SAdam Hornáček    RETURN 0
943*eeb7e5b3SAdam HornáčekGO
944*eeb7e5b3SAdam Hornáček
945*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItemExclusive]
946*eeb7e5b3SAdam Hornáček    @id         tSessionId,
947*eeb7e5b3SAdam Hornáček    @itemShort  tSessionItemShort OUTPUT,
948*eeb7e5b3SAdam Hornáček    @locked     bit OUTPUT,
949*eeb7e5b3SAdam Hornáček    @lockDate   datetime OUTPUT,
950*eeb7e5b3SAdam Hornáček    @lockCookie int OUTPUT
951*eeb7e5b3SAdam HornáčekAS
952*eeb7e5b3SAdam Hornáček    DECLARE @textptr AS tTextPtr
953*eeb7e5b3SAdam Hornáček    DECLARE @length AS int
954*eeb7e5b3SAdam Hornáček    DECLARE @now AS datetime
955*eeb7e5b3SAdam Hornáček    DECLARE @nowLocal AS datetime
956*eeb7e5b3SAdam Hornáček
957*eeb7e5b3SAdam Hornáček    SET @now = GETUTCDATE()
958*eeb7e5b3SAdam Hornáček    SET @nowLocal = GETDATE()
959*eeb7e5b3SAdam Hornáček
960*eeb7e5b3SAdam Hornáček	DECLARE @retry INT = 10;
961*eeb7e5b3SAdam Hornáček
962*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
963*eeb7e5b3SAdam Hornáček    BEGIN
964*eeb7e5b3SAdam Hornáček        BEGIN TRY
965*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
966*eeb7e5b3SAdam Hornáček				UPDATE ASPStateTempSessions
967*eeb7e5b3SAdam Hornáček				SET Expires = DATEADD(n, Timeout, @now),
968*eeb7e5b3SAdam Hornáček					LockDate = CASE Locked
969*eeb7e5b3SAdam Hornáček						WHEN 0 THEN @now
970*eeb7e5b3SAdam Hornáček						ELSE LockDate
971*eeb7e5b3SAdam Hornáček						END,
972*eeb7e5b3SAdam Hornáček					@lockDate = LockDateLocal = CASE Locked
973*eeb7e5b3SAdam Hornáček						WHEN 0 THEN @nowLocal
974*eeb7e5b3SAdam Hornáček						ELSE LockDateLocal
975*eeb7e5b3SAdam Hornáček						END,
976*eeb7e5b3SAdam Hornáček					@lockCookie = LockCookie = CASE Locked
977*eeb7e5b3SAdam Hornáček						WHEN 0 THEN LockCookie + 1
978*eeb7e5b3SAdam Hornáček						ELSE LockCookie
979*eeb7e5b3SAdam Hornáček						END,
980*eeb7e5b3SAdam Hornáček					@itemShort = CASE Locked
981*eeb7e5b3SAdam Hornáček						WHEN 0 THEN SessionItemShort
982*eeb7e5b3SAdam Hornáček						ELSE NULL
983*eeb7e5b3SAdam Hornáček						END,
984*eeb7e5b3SAdam Hornáček					@textptr = CASE Locked
985*eeb7e5b3SAdam Hornáček						WHEN 0 THEN SessionItemLong
986*eeb7e5b3SAdam Hornáček						ELSE NULL
987*eeb7e5b3SAdam Hornáček						END,
988*eeb7e5b3SAdam Hornáček					@length = CASE Locked
989*eeb7e5b3SAdam Hornáček						WHEN 0 THEN DATALENGTH(SessionItemLong)
990*eeb7e5b3SAdam Hornáček						ELSE NULL
991*eeb7e5b3SAdam Hornáček						END,
992*eeb7e5b3SAdam Hornáček					@locked = Locked,
993*eeb7e5b3SAdam Hornáček					Locked = 1
994*eeb7e5b3SAdam Hornáček				WHERE SessionId = @id
995*eeb7e5b3SAdam Hornáček				IF @length IS NOT NULL BEGIN
996*eeb7e5b3SAdam Hornáček					SELECT @textptr
997*eeb7e5b3SAdam Hornáček				END
998*eeb7e5b3SAdam Hornáček			COMMIT TRANSACTION;
999*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
1000*eeb7e5b3SAdam Hornáček        END TRY
1001*eeb7e5b3SAdam Hornáček
1002*eeb7e5b3SAdam Hornáček        BEGIN CATCH
1003*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
1004*eeb7e5b3SAdam Hornáček
1005*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
1006*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
1007*eeb7e5b3SAdam Hornáček                )
1008*eeb7e5b3SAdam Hornáček            BEGIN
1009*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
1010*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
1011*eeb7e5b3SAdam Hornáček
1012*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
1013*eeb7e5b3SAdam Hornáček            END
1014*eeb7e5b3SAdam Hornáček            ELSE
1015*eeb7e5b3SAdam Hornáček            BEGIN
1016*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
1017*eeb7e5b3SAdam Hornáček                THROW;
1018*eeb7e5b3SAdam Hornáček            END
1019*eeb7e5b3SAdam Hornáček        END CATCH
1020*eeb7e5b3SAdam Hornáček
1021*eeb7e5b3SAdam Hornáček    END -- //While loop
1022*eeb7e5b3SAdam Hornáček    RETURN 0
1023*eeb7e5b3SAdam HornáčekGO
1024*eeb7e5b3SAdam Hornáček
1025*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetStateItemExclusive2]
1026*eeb7e5b3SAdam Hornáček    @id         tSessionId,
1027*eeb7e5b3SAdam Hornáček    @itemShort  tSessionItemShort OUTPUT,
1028*eeb7e5b3SAdam Hornáček    @locked     bit OUTPUT,
1029*eeb7e5b3SAdam Hornáček    @lockAge    int OUTPUT,
1030*eeb7e5b3SAdam Hornáček    @lockCookie int OUTPUT
1031*eeb7e5b3SAdam HornáčekAS
1032*eeb7e5b3SAdam Hornáček    DECLARE @textptr AS tTextPtr
1033*eeb7e5b3SAdam Hornáček    DECLARE @length AS int
1034*eeb7e5b3SAdam Hornáček    DECLARE @now AS datetime
1035*eeb7e5b3SAdam Hornáček    DECLARE @nowLocal AS datetime
1036*eeb7e5b3SAdam Hornáček
1037*eeb7e5b3SAdam Hornáček    SET @now = GETUTCDATE()
1038*eeb7e5b3SAdam Hornáček    SET @nowLocal = GETDATE()
1039*eeb7e5b3SAdam Hornáček
1040*eeb7e5b3SAdam Hornáček	DECLARE @retry INT = 10;
1041*eeb7e5b3SAdam Hornáček
1042*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
1043*eeb7e5b3SAdam Hornáček    BEGIN
1044*eeb7e5b3SAdam Hornáček        BEGIN TRY
1045*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
1046*eeb7e5b3SAdam Hornáček				UPDATE ASPStateTempSessions
1047*eeb7e5b3SAdam Hornáček				SET Expires = DATEADD(n, Timeout, @now),
1048*eeb7e5b3SAdam Hornáček					LockDate = CASE Locked
1049*eeb7e5b3SAdam Hornáček						WHEN 0 THEN @now
1050*eeb7e5b3SAdam Hornáček						ELSE LockDate
1051*eeb7e5b3SAdam Hornáček						END,
1052*eeb7e5b3SAdam Hornáček					LockDateLocal = CASE Locked
1053*eeb7e5b3SAdam Hornáček						WHEN 0 THEN @nowLocal
1054*eeb7e5b3SAdam Hornáček						ELSE LockDateLocal
1055*eeb7e5b3SAdam Hornáček						END,
1056*eeb7e5b3SAdam Hornáček					@lockAge = CASE Locked
1057*eeb7e5b3SAdam Hornáček						WHEN 0 THEN 0
1058*eeb7e5b3SAdam Hornáček						ELSE DATEDIFF(second, LockDate, @now)
1059*eeb7e5b3SAdam Hornáček						END,
1060*eeb7e5b3SAdam Hornáček					@lockCookie = LockCookie = CASE Locked
1061*eeb7e5b3SAdam Hornáček						WHEN 0 THEN LockCookie + 1
1062*eeb7e5b3SAdam Hornáček						ELSE LockCookie
1063*eeb7e5b3SAdam Hornáček						END,
1064*eeb7e5b3SAdam Hornáček					@itemShort = CASE Locked
1065*eeb7e5b3SAdam Hornáček						WHEN 0 THEN SessionItemShort
1066*eeb7e5b3SAdam Hornáček						ELSE NULL
1067*eeb7e5b3SAdam Hornáček						END,
1068*eeb7e5b3SAdam Hornáček					@textptr = CASE Locked
1069*eeb7e5b3SAdam Hornáček						WHEN 0 THEN SessionItemLong
1070*eeb7e5b3SAdam Hornáček						ELSE NULL
1071*eeb7e5b3SAdam Hornáček						END,
1072*eeb7e5b3SAdam Hornáček					@length = CASE Locked
1073*eeb7e5b3SAdam Hornáček						WHEN 0 THEN DATALENGTH(SessionItemLong)
1074*eeb7e5b3SAdam Hornáček						ELSE NULL
1075*eeb7e5b3SAdam Hornáček						END,
1076*eeb7e5b3SAdam Hornáček					@locked = Locked,
1077*eeb7e5b3SAdam Hornáček					Locked = 1
1078*eeb7e5b3SAdam Hornáček				WHERE SessionId = @id
1079*eeb7e5b3SAdam Hornáček				IF @length IS NOT NULL BEGIN
1080*eeb7e5b3SAdam Hornáček					SELECT @textptr
1081*eeb7e5b3SAdam Hornáček				END
1082*eeb7e5b3SAdam Hornáček			COMMIT TRANSACTION;
1083*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
1084*eeb7e5b3SAdam Hornáček        END TRY
1085*eeb7e5b3SAdam Hornáček
1086*eeb7e5b3SAdam Hornáček        BEGIN CATCH
1087*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
1088*eeb7e5b3SAdam Hornáček
1089*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
1090*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
1091*eeb7e5b3SAdam Hornáček                )
1092*eeb7e5b3SAdam Hornáček            BEGIN
1093*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
1094*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
1095*eeb7e5b3SAdam Hornáček
1096*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
1097*eeb7e5b3SAdam Hornáček            END
1098*eeb7e5b3SAdam Hornáček            ELSE
1099*eeb7e5b3SAdam Hornáček            BEGIN
1100*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
1101*eeb7e5b3SAdam Hornáček                THROW;
1102*eeb7e5b3SAdam Hornáček            END
1103*eeb7e5b3SAdam Hornáček        END CATCH
1104*eeb7e5b3SAdam Hornáček
1105*eeb7e5b3SAdam Hornáček    END -- //While loop
1106*eeb7e5b3SAdam Hornáček    RETURN 0
1107*eeb7e5b3SAdam HornáčekGO
1108*eeb7e5b3SAdam Hornáček
1109*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempGetVersion]
1110*eeb7e5b3SAdam Hornáček    @ver      char(10) OUTPUT
1111*eeb7e5b3SAdam HornáčekAS
1112*eeb7e5b3SAdam Hornáček    SELECT @ver = '2'
1113*eeb7e5b3SAdam Hornáček    RETURN 0
1114*eeb7e5b3SAdam HornáčekGO
1115*eeb7e5b3SAdam Hornáček
1116*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempInsertStateItemLong]
1117*eeb7e5b3SAdam Hornáček    @id         nvarchar(88),
1118*eeb7e5b3SAdam Hornáček    @itemLong   image,
1119*eeb7e5b3SAdam Hornáček    @timeout    int
1120*eeb7e5b3SAdam HornáčekAS
1121*eeb7e5b3SAdam Hornáček    DECLARE @now AS datetime
1122*eeb7e5b3SAdam Hornáček    DECLARE @nowLocal AS datetime
1123*eeb7e5b3SAdam Hornáček
1124*eeb7e5b3SAdam Hornáček    SET @now = GETUTCDATE()
1125*eeb7e5b3SAdam Hornáček    SET @nowLocal = GETDATE()
1126*eeb7e5b3SAdam Hornáček
1127*eeb7e5b3SAdam Hornáček	DECLARE @retry INT = 10;
1128*eeb7e5b3SAdam Hornáček
1129*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
1130*eeb7e5b3SAdam Hornáček    BEGIN
1131*eeb7e5b3SAdam Hornáček        BEGIN TRY
1132*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
1133*eeb7e5b3SAdam Hornáček				INSERT ASPStateTempSessions
1134*eeb7e5b3SAdam Hornáček					(SessionId,
1135*eeb7e5b3SAdam Hornáček						SessionItemLong,
1136*eeb7e5b3SAdam Hornáček						Timeout,
1137*eeb7e5b3SAdam Hornáček						Expires,
1138*eeb7e5b3SAdam Hornáček						Locked,
1139*eeb7e5b3SAdam Hornáček						LockDate,
1140*eeb7e5b3SAdam Hornáček						LockDateLocal,
1141*eeb7e5b3SAdam Hornáček						LockCookie)
1142*eeb7e5b3SAdam Hornáček				VALUES
1143*eeb7e5b3SAdam Hornáček					(@id,
1144*eeb7e5b3SAdam Hornáček						@itemLong,
1145*eeb7e5b3SAdam Hornáček						@timeout,
1146*eeb7e5b3SAdam Hornáček						DATEADD(n, @timeout, @now),
1147*eeb7e5b3SAdam Hornáček						0,
1148*eeb7e5b3SAdam Hornáček						@now,
1149*eeb7e5b3SAdam Hornáček						@nowLocal,
1150*eeb7e5b3SAdam Hornáček						1)
1151*eeb7e5b3SAdam Hornáček			COMMIT TRANSACTION;
1152*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
1153*eeb7e5b3SAdam Hornáček        END TRY
1154*eeb7e5b3SAdam Hornáček
1155*eeb7e5b3SAdam Hornáček        BEGIN CATCH
1156*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
1157*eeb7e5b3SAdam Hornáček
1158*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
1159*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
1160*eeb7e5b3SAdam Hornáček                )
1161*eeb7e5b3SAdam Hornáček            BEGIN
1162*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
1163*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
1164*eeb7e5b3SAdam Hornáček
1165*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
1166*eeb7e5b3SAdam Hornáček            END
1167*eeb7e5b3SAdam Hornáček            ELSE
1168*eeb7e5b3SAdam Hornáček            BEGIN
1169*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
1170*eeb7e5b3SAdam Hornáček                THROW;
1171*eeb7e5b3SAdam Hornáček            END
1172*eeb7e5b3SAdam Hornáček        END CATCH
1173*eeb7e5b3SAdam Hornáček
1174*eeb7e5b3SAdam Hornáček    END -- //While loop
1175*eeb7e5b3SAdam Hornáček    RETURN 0
1176*eeb7e5b3SAdam HornáčekGO
1177*eeb7e5b3SAdam Hornáček
1178*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempInsertUninitializedItem]
1179*eeb7e5b3SAdam Hornáček    @id         nvarchar(88),
1180*eeb7e5b3SAdam Hornáček    @itemShort  varbinary(7000),
1181*eeb7e5b3SAdam Hornáček    @timeout    int
1182*eeb7e5b3SAdam HornáčekAS
1183*eeb7e5b3SAdam Hornáček
1184*eeb7e5b3SAdam Hornáček    DECLARE @now AS datetime
1185*eeb7e5b3SAdam Hornáček    DECLARE @nowLocal AS datetime
1186*eeb7e5b3SAdam Hornáček
1187*eeb7e5b3SAdam Hornáček    SET @now = GETUTCDATE()
1188*eeb7e5b3SAdam Hornáček    SET @nowLocal = GETDATE()
1189*eeb7e5b3SAdam Hornáček
1190*eeb7e5b3SAdam Hornáček	DECLARE @retry INT = 10;
1191*eeb7e5b3SAdam Hornáček
1192*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
1193*eeb7e5b3SAdam Hornáček    BEGIN
1194*eeb7e5b3SAdam Hornáček        BEGIN TRY
1195*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
1196*eeb7e5b3SAdam Hornáček				INSERT ASPStateTempSessions
1197*eeb7e5b3SAdam Hornáček					(SessionId,
1198*eeb7e5b3SAdam Hornáček					SessionItemShort,
1199*eeb7e5b3SAdam Hornáček					Timeout,
1200*eeb7e5b3SAdam Hornáček					Expires,
1201*eeb7e5b3SAdam Hornáček					Locked,
1202*eeb7e5b3SAdam Hornáček					LockDate,
1203*eeb7e5b3SAdam Hornáček					LockDateLocal,
1204*eeb7e5b3SAdam Hornáček					LockCookie,
1205*eeb7e5b3SAdam Hornáček					Flags)
1206*eeb7e5b3SAdam Hornáček				VALUES
1207*eeb7e5b3SAdam Hornáček					(@id,
1208*eeb7e5b3SAdam Hornáček					@itemShort,
1209*eeb7e5b3SAdam Hornáček					@timeout,
1210*eeb7e5b3SAdam Hornáček					DATEADD(n, @timeout, @now),
1211*eeb7e5b3SAdam Hornáček					0,
1212*eeb7e5b3SAdam Hornáček					@now,
1213*eeb7e5b3SAdam Hornáček					@nowLocal,
1214*eeb7e5b3SAdam Hornáček					1,
1215*eeb7e5b3SAdam Hornáček					1)
1216*eeb7e5b3SAdam Hornáček			COMMIT TRANSACTION;
1217*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
1218*eeb7e5b3SAdam Hornáček        END TRY
1219*eeb7e5b3SAdam Hornáček
1220*eeb7e5b3SAdam Hornáček        BEGIN CATCH
1221*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
1222*eeb7e5b3SAdam Hornáček
1223*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
1224*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
1225*eeb7e5b3SAdam Hornáček                )
1226*eeb7e5b3SAdam Hornáček            BEGIN
1227*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
1228*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
1229*eeb7e5b3SAdam Hornáček
1230*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
1231*eeb7e5b3SAdam Hornáček            END
1232*eeb7e5b3SAdam Hornáček            ELSE
1233*eeb7e5b3SAdam Hornáček            BEGIN
1234*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
1235*eeb7e5b3SAdam Hornáček                THROW;
1236*eeb7e5b3SAdam Hornáček            END
1237*eeb7e5b3SAdam Hornáček        END CATCH
1238*eeb7e5b3SAdam Hornáček
1239*eeb7e5b3SAdam Hornáček    END -- //While loop
1240*eeb7e5b3SAdam Hornáček    RETURN 0
1241*eeb7e5b3SAdam HornáčekGO
1242*eeb7e5b3SAdam Hornáček
1243*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempReleaseStateItemExclusive]
1244*eeb7e5b3SAdam Hornáček    @id         nvarchar(88),
1245*eeb7e5b3SAdam Hornáček    @lockCookie int
1246*eeb7e5b3SAdam HornáčekAS
1247*eeb7e5b3SAdam HornáčekDECLARE @retry INT = 10;
1248*eeb7e5b3SAdam Hornáček
1249*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
1250*eeb7e5b3SAdam Hornáček    BEGIN
1251*eeb7e5b3SAdam Hornáček        BEGIN TRY
1252*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
1253*eeb7e5b3SAdam Hornáček				UPDATE	ASPStateTempSessions
1254*eeb7e5b3SAdam Hornáček				SET		Expires = DATEADD(n, Timeout, GETUTCDATE()),
1255*eeb7e5b3SAdam Hornáček						Locked = 0
1256*eeb7e5b3SAdam Hornáček				WHERE	SessionId = @id AND LockCookie = @lockCookie
1257*eeb7e5b3SAdam Hornáček			COMMIT TRANSACTION;
1258*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
1259*eeb7e5b3SAdam Hornáček        END TRY
1260*eeb7e5b3SAdam Hornáček
1261*eeb7e5b3SAdam Hornáček        BEGIN CATCH
1262*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
1263*eeb7e5b3SAdam Hornáček
1264*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
1265*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
1266*eeb7e5b3SAdam Hornáček                )
1267*eeb7e5b3SAdam Hornáček            BEGIN
1268*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
1269*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
1270*eeb7e5b3SAdam Hornáček
1271*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
1272*eeb7e5b3SAdam Hornáček            END
1273*eeb7e5b3SAdam Hornáček            ELSE
1274*eeb7e5b3SAdam Hornáček            BEGIN
1275*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
1276*eeb7e5b3SAdam Hornáček                THROW;
1277*eeb7e5b3SAdam Hornáček            END
1278*eeb7e5b3SAdam Hornáček        END CATCH
1279*eeb7e5b3SAdam Hornáček
1280*eeb7e5b3SAdam Hornáček    END -- //While loop
1281*eeb7e5b3SAdam Hornáček
1282*eeb7e5b3SAdam Hornáček    RETURN 0
1283*eeb7e5b3SAdam HornáčekGO
1284*eeb7e5b3SAdam Hornáček
1285*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempRemoveStateItem]
1286*eeb7e5b3SAdam Hornáček    @id         nvarchar(88),
1287*eeb7e5b3SAdam Hornáček    @lockCookie int
1288*eeb7e5b3SAdam HornáčekAS
1289*eeb7e5b3SAdam Hornáček
1290*eeb7e5b3SAdam HornáčekDECLARE @retry INT = 10;
1291*eeb7e5b3SAdam Hornáček
1292*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
1293*eeb7e5b3SAdam Hornáček    BEGIN
1294*eeb7e5b3SAdam Hornáček        BEGIN TRY
1295*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
1296*eeb7e5b3SAdam Hornáček				DELETE	ASPStateTempSessions
1297*eeb7e5b3SAdam Hornáček				WHERE	SessionId = @id AND LockCookie = @lockCookie
1298*eeb7e5b3SAdam Hornáček			COMMIT TRANSACTION;
1299*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
1300*eeb7e5b3SAdam Hornáček        END TRY
1301*eeb7e5b3SAdam Hornáček
1302*eeb7e5b3SAdam Hornáček        BEGIN CATCH
1303*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
1304*eeb7e5b3SAdam Hornáček
1305*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
1306*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
1307*eeb7e5b3SAdam Hornáček                )
1308*eeb7e5b3SAdam Hornáček            BEGIN
1309*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
1310*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
1311*eeb7e5b3SAdam Hornáček
1312*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
1313*eeb7e5b3SAdam Hornáček            END
1314*eeb7e5b3SAdam Hornáček            ELSE
1315*eeb7e5b3SAdam Hornáček            BEGIN
1316*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
1317*eeb7e5b3SAdam Hornáček                THROW;
1318*eeb7e5b3SAdam Hornáček            END
1319*eeb7e5b3SAdam Hornáček        END CATCH
1320*eeb7e5b3SAdam Hornáček
1321*eeb7e5b3SAdam Hornáček    END -- //While loop
1322*eeb7e5b3SAdam Hornáček	RETURN 0
1323*eeb7e5b3SAdam HornáčekGO
1324*eeb7e5b3SAdam Hornáček
1325*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempResetTimeout]
1326*eeb7e5b3SAdam Hornáček    @id         nvarchar(88)
1327*eeb7e5b3SAdam HornáčekAS
1328*eeb7e5b3SAdam HornáčekDECLARE @retry INT = 10;
1329*eeb7e5b3SAdam Hornáček
1330*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
1331*eeb7e5b3SAdam Hornáček    BEGIN
1332*eeb7e5b3SAdam Hornáček        BEGIN TRY
1333*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
1334*eeb7e5b3SAdam Hornáček				UPDATE	ASPStateTempSessions
1335*eeb7e5b3SAdam Hornáček				SET		Expires = DATEADD(n, Timeout, GETUTCDATE())
1336*eeb7e5b3SAdam Hornáček				WHERE	SessionId = @id
1337*eeb7e5b3SAdam Hornáček			COMMIT TRANSACTION;
1338*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
1339*eeb7e5b3SAdam Hornáček        END TRY
1340*eeb7e5b3SAdam Hornáček
1341*eeb7e5b3SAdam Hornáček        BEGIN CATCH
1342*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
1343*eeb7e5b3SAdam Hornáček
1344*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
1345*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
1346*eeb7e5b3SAdam Hornáček                )
1347*eeb7e5b3SAdam Hornáček            BEGIN
1348*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
1349*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
1350*eeb7e5b3SAdam Hornáček
1351*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
1352*eeb7e5b3SAdam Hornáček            END
1353*eeb7e5b3SAdam Hornáček            ELSE
1354*eeb7e5b3SAdam Hornáček            BEGIN
1355*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
1356*eeb7e5b3SAdam Hornáček                THROW;
1357*eeb7e5b3SAdam Hornáček            END
1358*eeb7e5b3SAdam Hornáček        END CATCH
1359*eeb7e5b3SAdam Hornáček
1360*eeb7e5b3SAdam Hornáček    END -- //While loop
1361*eeb7e5b3SAdam Hornáček
1362*eeb7e5b3SAdam Hornáček	RETURN 0
1363*eeb7e5b3SAdam HornáčekGO
1364*eeb7e5b3SAdam Hornáček
1365*eeb7e5b3SAdam HornáčekCREATE PROCEDURE [dbo].[TempUpdateStateItemShortNullLong]
1366*eeb7e5b3SAdam Hornáček    @id         nvarchar(88),
1367*eeb7e5b3SAdam Hornáček    @itemShort  varbinary(7000),
1368*eeb7e5b3SAdam Hornáček    @timeout    int,
1369*eeb7e5b3SAdam Hornáček    @lockCookie int
1370*eeb7e5b3SAdam HornáčekAS
1371*eeb7e5b3SAdam HornáčekDECLARE @retry INT = 10;
1372*eeb7e5b3SAdam Hornáček
1373*eeb7e5b3SAdam Hornáček    WHILE (@retry > 0)
1374*eeb7e5b3SAdam Hornáček    BEGIN
1375*eeb7e5b3SAdam Hornáček        BEGIN TRY
1376*eeb7e5b3SAdam Hornáček            BEGIN TRANSACTION;
1377*eeb7e5b3SAdam Hornáček				UPDATE	ASPStateTempSessions
1378*eeb7e5b3SAdam Hornáček				SET		Expires = DATEADD(n, @timeout, GETUTCDATE()),
1379*eeb7e5b3SAdam Hornáček						SessionItemShort = @itemShort,
1380*eeb7e5b3SAdam Hornáček						SessionItemLong = NULL,
1381*eeb7e5b3SAdam Hornáček						Timeout = @timeout,
1382*eeb7e5b3SAdam Hornáček						Locked = 0
1383*eeb7e5b3SAdam Hornáček				WHERE	SessionId = @id AND LockCookie = @lockCookie
1384*eeb7e5b3SAdam Hornáček			COMMIT TRANSACTION;
1385*eeb7e5b3SAdam Hornáček            SET @retry = 0;  -- //Stops the loop.
1386*eeb7e5b3SAdam Hornáček        END TRY
1387*eeb7e5b3SAdam Hornáček
1388*eeb7e5b3SAdam Hornáček        BEGIN CATCH
1389*eeb7e5b3SAdam Hornáček            SET @retry -= 1;
1390*eeb7e5b3SAdam Hornáček
1391*eeb7e5b3SAdam Hornáček            IF (@retry > 0 AND
1392*eeb7e5b3SAdam Hornáček                ERROR_NUMBER() in (41302, 41305, 41325, 41301, 41839, 1205)
1393*eeb7e5b3SAdam Hornáček                )
1394*eeb7e5b3SAdam Hornáček            BEGIN
1395*eeb7e5b3SAdam Hornáček                IF XACT_STATE() = -1
1396*eeb7e5b3SAdam Hornáček                    ROLLBACK TRANSACTION;
1397*eeb7e5b3SAdam Hornáček
1398*eeb7e5b3SAdam Hornáček                WAITFOR DELAY '00:00:00.001';
1399*eeb7e5b3SAdam Hornáček            END
1400*eeb7e5b3SAdam Hornáček            ELSE
1401*eeb7e5b3SAdam Hornáček            BEGIN
1402*eeb7e5b3SAdam Hornáček                PRINT 'Suffered an error for which Retry is inappropriate.';
1403*eeb7e5b3SAdam Hornáček                THROW;
1404*eeb7e5b3SAdam Hornáček            END
1405*eeb7e5b3SAdam Hornáček        END CATCH
1406*eeb7e5b3SAdam Hornáček
1407*eeb7e5b3SAdam Hornáček    END -- //While loop
1408*eeb7e5b3SAdam Hornáček
1409*eeb7e5b3SAdam Hornáček    RETURN 0
1410*eeb7e5b3SAdam HornáčekGO
1411*eeb7e5b3SAdam Hornáček/*http://example.com.*/
1412*eeb7e5b3SAdam Hornáček/* comment /* comment */
1413*eeb7e5b3SAdam Hornáčekcomment
1414*eeb7e5b3SAdam Hornáček*/
1415