-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSQLServer-Reminders.sql
144 lines (135 loc) · 3.1 KB
/
SQLServer-Reminders.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
-- Orleans Reminders table - https://dotnet.github.io/orleans/Documentation/Core-Features/Timers-and-Reminders.html
CREATE TABLE OrleansRemindersTable
(
ServiceId NVARCHAR(150) NOT NULL,
GrainId VARCHAR(150) NOT NULL,
ReminderName NVARCHAR(150) NOT NULL,
StartTime DATETIME2(3) NOT NULL,
Period INT NOT NULL,
GrainHash INT NOT NULL,
Version INT NOT NULL,
CONSTRAINT PK_RemindersTable_ServiceId_GrainId_ReminderName PRIMARY KEY(ServiceId, GrainId, ReminderName)
);
INSERT INTO OrleansQuery(QueryKey, QueryText)
VALUES
(
'UpsertReminderRowKey','
DECLARE @Version AS INT = 0;
SET XACT_ABORT, NOCOUNT ON;
BEGIN TRANSACTION;
UPDATE OrleansRemindersTable WITH(UPDLOCK, ROWLOCK, HOLDLOCK)
SET
StartTime = @StartTime,
Period = @Period,
GrainHash = @GrainHash,
@Version = Version = Version + 1
WHERE
ServiceId = @ServiceId AND @ServiceId IS NOT NULL
AND GrainId = @GrainId AND @GrainId IS NOT NULL
AND ReminderName = @ReminderName AND @ReminderName IS NOT NULL;
INSERT INTO OrleansRemindersTable
(
ServiceId,
GrainId,
ReminderName,
StartTime,
Period,
GrainHash,
Version
)
SELECT
@ServiceId,
@GrainId,
@ReminderName,
@StartTime,
@Period,
@GrainHash,
0
WHERE
@@ROWCOUNT=0;
SELECT @Version AS Version;
COMMIT TRANSACTION;
');
INSERT INTO OrleansQuery(QueryKey, QueryText)
VALUES
(
'ReadReminderRowsKey','
SELECT
GrainId,
ReminderName,
StartTime,
Period,
Version
FROM OrleansRemindersTable
WHERE
ServiceId = @ServiceId AND @ServiceId IS NOT NULL
AND GrainId = @GrainId AND @GrainId IS NOT NULL;
');
INSERT INTO OrleansQuery(QueryKey, QueryText)
VALUES
(
'ReadReminderRowKey','
SELECT
GrainId,
ReminderName,
StartTime,
Period,
Version
FROM OrleansRemindersTable
WHERE
ServiceId = @ServiceId AND @ServiceId IS NOT NULL
AND GrainId = @GrainId AND @GrainId IS NOT NULL
AND ReminderName = @ReminderName AND @ReminderName IS NOT NULL;
');
INSERT INTO OrleansQuery(QueryKey, QueryText)
VALUES
(
'ReadRangeRows1Key','
SELECT
GrainId,
ReminderName,
StartTime,
Period,
Version
FROM OrleansRemindersTable
WHERE
ServiceId = @ServiceId AND @ServiceId IS NOT NULL
AND GrainHash > @BeginHash AND @BeginHash IS NOT NULL
AND GrainHash <= @EndHash AND @EndHash IS NOT NULL;
');
INSERT INTO OrleansQuery(QueryKey, QueryText)
VALUES
(
'ReadRangeRows2Key','
SELECT
GrainId,
ReminderName,
StartTime,
Period,
Version
FROM OrleansRemindersTable
WHERE
ServiceId = @ServiceId AND @ServiceId IS NOT NULL
AND ((GrainHash > @BeginHash AND @BeginHash IS NOT NULL)
OR (GrainHash <= @EndHash AND @EndHash IS NOT NULL));
');
INSERT INTO OrleansQuery(QueryKey, QueryText)
VALUES
(
'DeleteReminderRowKey','
DELETE FROM OrleansRemindersTable
WHERE
ServiceId = @ServiceId AND @ServiceId IS NOT NULL
AND GrainId = @GrainId AND @GrainId IS NOT NULL
AND ReminderName = @ReminderName AND @ReminderName IS NOT NULL
AND Version = @Version AND @Version IS NOT NULL;
SELECT @@ROWCOUNT;
');
INSERT INTO OrleansQuery(QueryKey, QueryText)
VALUES
(
'DeleteReminderRowsKey','
DELETE FROM OrleansRemindersTable
WHERE
ServiceId = @ServiceId AND @ServiceId IS NOT NULL;
');