-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathGetTopics.sql
149 lines (136 loc) · 5.28 KB
/
GetTopics.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
145
146
147
148
149
--------------------------------------------------------------------------------------------------------------------------------
-- GET TOPICS
--------------------------------------------------------------------------------------------------------------------------------
-- Gets the tree of current topics rooted FROM the provided TopicID. If no TopicID is provided then the sproc returns
-- everything under the topic with the lowest id.
--------------------------------------------------------------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[GetTopics]
@TopicID INT = -1,
@DeepLoad BIT = 1,
@UniqueKey NVARCHAR(255) = NULL
AS
--------------------------------------------------------------------------------------------------------------------------------
-- GET TOPIC ID IF UNKNOWN.
--------------------------------------------------------------------------------------------------------------------------------
IF @UniqueKey IS NOT NULL
BEGIN
SET @TopicID = dbo.GetTopicID(@UniqueKey)
END
IF @TopicID < 0
BEGIN
SET @TopicID = dbo.GetTopicID('Root')
END
--------------------------------------------------------------------------------------------------------------------------------
-- CREATE TEMP TABLES
--------------------------------------------------------------------------------------------------------------------------------
CREATE
TABLE #Topics (
TopicID INT,
SortOrder INT
)
CREATE
CLUSTERED INDEX IX_C_Topics_TopicID
ON #Topics(
TopicID
)
--------------------------------------------------------------------------------------------------------------------------------
-- SELECT TOPIC AND DESCENDENTS
--------------------------------------------------------------------------------------------------------------------------------
IF @DeepLoad = 1
BEGIN
INSERT #Topics (
TopicID,
SortOrder
)
SELECT T1.TopicID,
T1.RangeLeft
FROM Topics AS T1
INNER JOIN Topics AS T2
ON T1.RangeLeft
BETWEEN T2.RangeLeft
AND T2.RangeRight
AND T2.TopicID = @TopicID
ORDER BY T1.RangeLeft
OPTION (
OPTIMIZE
FOR ( @TopicID = 1
)
)
END
--------------------------------------------------------------------------------------------------------------------------------
-- SELECT TOPIC ONLY
--------------------------------------------------------------------------------------------------------------------------------
ELSE
BEGIN
INSERT #Topics (
TopicID,
SortOrder
)
SELECT TopicID,
1
FROM Topics
WHERE TopicID = @TopicID
OPTION (
OPTIMIZE
FOR ( @TopicID UNKNOWN
)
)
END
--------------------------------------------------------------------------------------------------------------------------------
-- SELECT KEY ATTRIBUTES
--------------------------------------------------------------------------------------------------------------------------------
SELECT Topics.TopicID,
ContentType,
ParentID,
TopicKey,
SortOrder
FROM Topics AS Topics
JOIN #Topics AS Storage
ON Storage.TopicID = Topics.TopicID
ORDER BY SortOrder
--------------------------------------------------------------------------------------------------------------------------------
-- SELECT TOPIC ATTRIBUTES
--------------------------------------------------------------------------------------------------------------------------------
SELECT Attributes.TopicID,
AttributeKey,
AttributeValue,
Version
FROM AttributeIndex AS Attributes
JOIN #Topics AS Storage
ON Storage.TopicID = Attributes.TopicID
--------------------------------------------------------------------------------------------------------------------------------
-- SELECT EXTENDED ATTRIBUTES
--------------------------------------------------------------------------------------------------------------------------------
SELECT Attributes.TopicID,
AttributesXml,
Version
FROM ExtendedAttributeIndex AS Attributes
JOIN #Topics AS Storage
ON Storage.TopicID = Attributes.TopicID
--------------------------------------------------------------------------------------------------------------------------------
-- SELECT RELATIONSHIPS
--------------------------------------------------------------------------------------------------------------------------------
SELECT Source_TopicID,
RelationshipKey,
Target_TopicID,
IsDeleted
FROM RelationshipIndex AS Relationships
JOIN #Topics AS Storage
ON Storage.TopicID = Relationships.Source_TopicID
--------------------------------------------------------------------------------------------------------------------------------
-- SELECT REFERENCES
--------------------------------------------------------------------------------------------------------------------------------
SELECT Source_TopicID,
ReferenceKey,
Target_TopicID
FROM ReferenceIndex AS TopicReferences
JOIN #Topics AS Storage
ON Storage.TopicID = TopicReferences.Source_TopicID
--------------------------------------------------------------------------------------------------------------------------------
-- SELECT HISTORY
--------------------------------------------------------------------------------------------------------------------------------
SELECT History.TopicID,
Version
FROM VersionHistoryIndex AS History
JOIN #Topics AS Storage
ON Storage.TopicID = History.TopicID;