Skip to content

Commit a015210

Browse files
committed
Introduced new GetTopicId() extension method
The logic for retrieving a `TopicID` is a bit different than retrieving an attribute that happens to be an integer since it doesn't require a conversion, and can be retrieved directly as an integer. By sharing `GetInteger()` for both use cases, we were requiring that the `TopicID` be converted to a string and then back to an integer for _every single topic_—and sometimes more frequently (for relationships). By introducing the `GetTopicId()` extension, we prevent this unnecessary overhead. It's a relatively trivial improvement, but it doesn't require much code, and it also provides a bit more specific semantics (i.e., `GetTopicId()` instead of `GetInteger("TopicID")`.
1 parent f25a063 commit a015210

2 files changed

Lines changed: 16 additions & 6 deletions

File tree

OnTopic.Data.Sql/SqlDataReaderExtensions.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ internal static class SqlDataReaderExtensions {
3434
/// <param name="columnName">The name of the column to retrieve the value from.</param>
3535
internal static int GetInteger(this SqlDataReader reader, string columnName) =>
3636
GetValue<int>(reader, columnName, Int32.TryParse, -1);
37+
/*==========================================================================================================================
38+
| METHOD: GET TOPIC ID
39+
\-------------------------------------------------------------------------------------------------------------------------*/
40+
/// <summary>
41+
/// Retrieves a <see cref="Topic.Id"/> value by column name.
42+
/// </summary>
43+
/// <param name="reader">The <see cref="SqlDataReader"/> object.</param>
44+
/// <param name="columnName">The name of the column to retrieve the value from.</param>
45+
internal static int GetTopicId(this SqlDataReader reader, string columnName = "TopicID") =>
46+
reader.GetInt32(reader.GetOrdinal(columnName));
3747

3848
/*==========================================================================================================================
3949
| METHOD: GET STRING

OnTopic.Data.Sql/SqlTopicRepository.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ private static void AddTopic(SqlDataReader reader, Dictionary<int, Topic> topics
6969
/*------------------------------------------------------------------------------------------------------------------------
7070
| Identify attributes
7171
\-----------------------------------------------------------------------------------------------------------------------*/
72-
var id = reader.GetInteger("TopicID");
72+
var id = reader.GetTopicId();
7373
var key = reader.GetString("TopicKey");
7474
var contentType = reader.GetString("ContentType");
7575
var parentId = reader.GetInteger("ParentID");
@@ -98,7 +98,7 @@ private static void SetIndexedAttributes(SqlDataReader reader, Dictionary<int, T
9898
/*------------------------------------------------------------------------------------------------------------------------
9999
| Identify attributes
100100
\-----------------------------------------------------------------------------------------------------------------------*/
101-
var id = reader.GetInteger("TopicID");
101+
var id = reader.GetTopicId();
102102
var name = reader.GetString("AttributeKey");
103103
var value = reader.GetString("AttributeValue");
104104
var version = DateTime.Now;
@@ -149,7 +149,7 @@ private static void SetExtendedAttributes(SqlDataReader reader, Dictionary<int,
149149
/*------------------------------------------------------------------------------------------------------------------------
150150
| Identify attributes
151151
\-----------------------------------------------------------------------------------------------------------------------*/
152-
var id = reader.GetInteger("TopicID");
152+
var id = reader.GetTopicId();
153153
var version = DateTime.Now;
154154

155155
//Check field count to avoid breaking changes with the 4.0.0 release, which didn't include a "Version" column
@@ -225,8 +225,8 @@ private static void SetRelationships(SqlDataReader reader, Dictionary<int, Topic
225225
/*------------------------------------------------------------------------------------------------------------------------
226226
| Identify attributes
227227
\-----------------------------------------------------------------------------------------------------------------------*/
228-
var sourceTopicId = reader.GetInteger("Source_TopicID");
229-
var targetTopicId = reader.GetInteger("Target_TopicID");
228+
var sourceTopicId = reader.GetTopicId("Source_TopicID");
229+
var targetTopicId = reader.GetTopicId("Target_TopicID");
230230
var relationshipKey = reader.GetString("RelationshipKey");
231231

232232
/*------------------------------------------------------------------------------------------------------------------------
@@ -296,7 +296,7 @@ private static void SetVersionHistory(SqlDataReader reader, Dictionary<int, Topi
296296
/*------------------------------------------------------------------------------------------------------------------------
297297
| Identify attributes
298298
\-----------------------------------------------------------------------------------------------------------------------*/
299-
var sourceTopicId = reader.GetInteger("TopicID");
299+
var sourceTopicId = reader.GetTopicId();
300300
var dateTime = reader.GetVersion();
301301

302302
/*------------------------------------------------------------------------------------------------------------------------

0 commit comments

Comments
 (0)