Skip to content

Commit bce548c

Browse files
Fix the parameter names used when calling aspnet_regsql SProcs. (#86)
1 parent e44995d commit bce548c

File tree

4 files changed

+83
-55
lines changed

4 files changed

+83
-55
lines changed

src/SqlSessionStateProviderAsync/SqlFxCompatSessionStateRepository.cs

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -506,17 +506,17 @@ public async Task<SessionItem> GetSessionStateItemAsync(string id, bool exclusiv
506506
// Use SProcs installed by aspnet_regsql
507507
case SessionTableType.Fx7:
508508
cmd = _commandHelper.CreateSqlCommandForSP("TempGetStateItemExclusive3");
509-
cmd.Parameters.AddSessionIdParameter(id)
510-
.AddSessionItemShortParameter()
509+
cmd.Parameters.AddSessionIdParameter(id, true)
510+
.AddSessionItemShortParameter(fxCompat: true)
511511
.AddLockedParameter()
512512
.AddLockDateParameter()
513513
.AddLockCookieParameter()
514514
.AddActionFlagsParameter();
515515
break;
516516
case SessionTableType.Fx8:
517517
cmd = _commandHelper.CreateSqlCommandForSP("TempGetStateItemExclusive3");
518-
cmd.Parameters.AddSessionIdParameter(id)
519-
.AddSessionItemShortParameter()
518+
cmd.Parameters.AddSessionIdParameter(id, true)
519+
.AddSessionItemShortParameter(fxCompat: true)
520520
.AddLockedParameter()
521521
.AddLockAgeParameter()
522522
.AddLockCookieParameter()
@@ -541,17 +541,17 @@ public async Task<SessionItem> GetSessionStateItemAsync(string id, bool exclusiv
541541
// Use SProcs installed by aspnet_regsql
542542
case SessionTableType.Fx7:
543543
cmd = _commandHelper.CreateSqlCommandForSP("TempGetStateItem3");
544-
cmd.Parameters.AddSessionIdParameter(id)
545-
.AddSessionItemShortParameter()
544+
cmd.Parameters.AddSessionIdParameter(id, true)
545+
.AddSessionItemShortParameter(fxCompat: true)
546546
.AddLockedParameter()
547547
.AddLockDateParameter()
548548
.AddLockCookieParameter()
549549
.AddActionFlagsParameter();
550550
break;
551551
case SessionTableType.Fx8:
552552
cmd = _commandHelper.CreateSqlCommandForSP("TempGetStateItem3");
553-
cmd.Parameters.AddSessionIdParameter(id)
554-
.AddSessionItemShortParameter()
553+
cmd.Parameters.AddSessionIdParameter(id, true)
554+
.AddSessionItemShortParameter(fxCompat: true)
555555
.AddLockedParameter()
556556
.AddLockAgeParameter()
557557
.AddLockCookieParameter()
@@ -628,8 +628,8 @@ public async Task CreateOrUpdateSessionStateItemAsync(bool newItem, string id, b
628628
cmd = _commandHelper.CreateSqlCommandForSP("TempUpdateStateItemShort");
629629
else
630630
cmd = _commandHelper.CreateSqlCommandForSP("TempUpdateStateItemShortNullLong");
631-
cmd.Parameters.AddSessionIdParameter(id)
632-
.AddSessionItemShortParameter(length, buf)
631+
cmd.Parameters.AddSessionIdParameter(id, true)
632+
.AddSessionItemShortParameter(length, buf, true)
633633
.AddTimeoutParameter(timeout)
634634
.AddLockCookieParameter(lockCookie);
635635
}
@@ -640,8 +640,8 @@ public async Task CreateOrUpdateSessionStateItemAsync(bool newItem, string id, b
640640
cmd = _commandHelper.CreateSqlCommandForSP("TempUpdateStateItemLong");
641641
else
642642
cmd = _commandHelper.CreateSqlCommandForSP("TempUpdateStateItemLongNullShort");
643-
cmd.Parameters.AddSessionIdParameter(id)
644-
.AddSessionItemLongImageParameter(length, buf)
643+
cmd.Parameters.AddSessionIdParameter(id, true)
644+
.AddSessionItemLongImageParameter(length, buf, true)
645645
.AddTimeoutParameter(timeout)
646646
.AddLockCookieParameter(lockCookie);
647647
}
@@ -668,15 +668,15 @@ public async Task CreateOrUpdateSessionStateItemAsync(bool newItem, string id, b
668668
if (length <= SqlSessionStateRepositoryUtil.ITEM_SHORT_LENGTH)
669669
{
670670
cmd = _commandHelper.CreateSqlCommandForSP("TempInsertStateItemShort");
671-
cmd.Parameters.AddSessionIdParameter(id)
672-
.AddSessionItemShortParameter(length, buf)
671+
cmd.Parameters.AddSessionIdParameter(id, true)
672+
.AddSessionItemShortParameter(length, buf, true)
673673
.AddTimeoutParameter(timeout);
674674
}
675675
else
676676
{
677677
cmd = _commandHelper.CreateSqlCommandForSP("TempInsertStateItemLong");
678-
cmd.Parameters.AddSessionIdParameter(id)
679-
.AddSessionItemLongImageParameter(length, buf)
678+
cmd.Parameters.AddSessionIdParameter(id, true)
679+
.AddSessionItemLongImageParameter(length, buf, true)
680680
.AddTimeoutParameter(timeout);
681681
}
682682
break;
@@ -707,13 +707,13 @@ public async Task ResetSessionItemTimeoutAsync(string id)
707707
case SessionTableType.Fx7:
708708
case SessionTableType.Fx8:
709709
cmd = _commandHelper.CreateSqlCommandForSP("TempResetTimeout");
710-
cmd.Parameters.AddSessionIdParameter(id);
710+
cmd.Parameters.AddSessionIdParameter(id, true);
711711
break;
712712

713713
// Use internal SQL statements
714714
case SessionTableType.Async11:
715715
cmd = _commandHelper.CreateSqlCommand(ResetItemTimeoutSql);
716-
cmd.Parameters.AddSessionIdParameter(id);
716+
cmd.Parameters.AddSessionIdParameter(id, true);
717717
break;
718718
}
719719

@@ -733,7 +733,7 @@ public async Task RemoveSessionItemAsync(string id, object lockId)
733733
case SessionTableType.Fx7:
734734
case SessionTableType.Fx8:
735735
cmd = _commandHelper.CreateSqlCommandForSP("TempRemoveStateItem");
736-
cmd.Parameters.AddSessionIdParameter(id)
736+
cmd.Parameters.AddSessionIdParameter(id, true)
737737
.AddLockCookieParameter(lockId);
738738
break;
739739

@@ -761,7 +761,7 @@ public async Task ReleaseSessionItemAsync(string id, object lockId)
761761
case SessionTableType.Fx7:
762762
case SessionTableType.Fx8:
763763
cmd = _commandHelper.CreateSqlCommandForSP("TempReleaseStateItemExclusive");
764-
cmd.Parameters.AddSessionIdParameter(id)
764+
cmd.Parameters.AddSessionIdParameter(id, true)
765765
.AddLockCookieParameter(lockId);
766766
break;
767767

@@ -789,16 +789,16 @@ public async Task CreateUninitializedSessionItemAsync(string id, int length, byt
789789
case SessionTableType.Fx7:
790790
case SessionTableType.Fx8:
791791
cmd = _commandHelper.CreateSqlCommandForSP("TempInsertUninitializedItem");
792-
cmd.Parameters.AddSessionIdParameter(id)
793-
.AddSessionItemShortParameter(length, buf) // TODO - Fx just assumed this was "short" - in code and SProc.
792+
cmd.Parameters.AddSessionIdParameter(id, true)
793+
.AddSessionItemShortParameter(length, buf, true) // TODO - Fx just assumed this was "short" - in code and SProc.
794794
.AddTimeoutParameter(timeout);
795795
break;
796796

797797
// Use internal SQL statements
798798
case SessionTableType.Async11:
799799
cmd = _commandHelper.CreateSqlCommand(InsertUninitializedItemSql);
800800
cmd.Parameters.AddSessionIdParameter(id)
801-
.AddSessionItemLongImageParameter(length, buf)
801+
.AddSessionItemLongImageParameter(length, buf, true)
802802
.AddTimeoutParameter(timeout);
803803
break;
804804
}

src/SqlSessionStateProviderAsync/SqlParameterCollectionExtension.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ namespace Microsoft.AspNet.SessionState
99

1010
static class SqlParameterCollectionExtension
1111
{
12-
public static SqlParameterCollection AddSessionIdParameter(this SqlParameterCollection pc, string id)
12+
public static SqlParameterCollection AddSessionIdParameter(this SqlParameterCollection pc, string id, bool fxCompat = false)
1313
{
14-
var param = new SqlParameter(SqlParameterName.SessionId, SqlDbType.NVarChar, SqlSessionStateRepositoryUtil.IdLength);
14+
var param = new SqlParameter(fxCompat ? SqlParameterName.Compat_SessionId : SqlParameterName.SessionId, SqlDbType.NVarChar, SqlSessionStateRepositoryUtil.IdLength);
1515
param.Value = id;
1616
pc.Add(param);
1717

1818
return pc;
1919
}
20-
20+
2121
public static SqlParameterCollection AddLockedParameter(this SqlParameterCollection pc)
2222
{
2323
var param = new SqlParameter(SqlParameterName.Locked, SqlDbType.Bit);
@@ -84,9 +84,9 @@ public static SqlParameterCollection AddTimeoutParameter(this SqlParameterCollec
8484
return pc;
8585
}
8686

87-
public static SqlParameterCollection AddSessionItemLongImageParameter(this SqlParameterCollection pc, int length, byte[] buf)
87+
public static SqlParameterCollection AddSessionItemLongImageParameter(this SqlParameterCollection pc, int length, byte[] buf, bool fxCompat = false)
8888
{
89-
var param = new SqlParameter(SqlParameterName.SessionItemLong, SqlDbType.Image, length);
89+
var param = new SqlParameter(fxCompat ? SqlParameterName.Compat_ItemLong : SqlParameterName.SessionItemLong, SqlDbType.Image, length);
9090
param.Value = buf;
9191
pc.Add(param);
9292

@@ -95,26 +95,26 @@ public static SqlParameterCollection AddSessionItemLongImageParameter(this SqlPa
9595

9696
public static SqlParameterCollection AddSessionItemLongVarBinaryParameter(this SqlParameterCollection pc, int length, byte[] buf)
9797
{
98-
var param = new SqlParameter(SqlParameterName.SessionItemLong, SqlDbType.VarBinary, length);
98+
SqlParameter param = new SqlParameter(SqlParameterName.SessionItemLong, SqlDbType.VarBinary, length);
9999
param.Value = buf;
100100
pc.Add(param);
101101

102102
return pc;
103103
}
104104

105-
public static SqlParameterCollection AddSessionItemShortParameter(this SqlParameterCollection pc, int length = 0, byte[] buf = null)
105+
public static SqlParameterCollection AddSessionItemShortParameter(this SqlParameterCollection pc, int length = 0, byte[] buf = null, bool fxCompat = false)
106106
{
107107
SqlParameter param;
108108

109109
if (buf == null)
110110
{
111-
param = new SqlParameter(SqlParameterName.SessionItemShort, SqlDbType.VarBinary, SqlSessionStateRepositoryUtil.ITEM_SHORT_LENGTH);
111+
param = new SqlParameter(fxCompat ? SqlParameterName.Compat_ItemShort : SqlParameterName.SessionItemShort, SqlDbType.VarBinary, SqlSessionStateRepositoryUtil.ITEM_SHORT_LENGTH);
112112
param.Direction = ParameterDirection.Output;
113113
param.Value = Convert.DBNull;
114114
}
115115
else
116116
{
117-
param = new SqlParameter(SqlParameterName.SessionItemShort, SqlDbType.VarBinary, length);
117+
param = new SqlParameter(fxCompat ? SqlParameterName.Compat_ItemShort : SqlParameterName.SessionItemShort, SqlDbType.VarBinary, length);
118118
param.Value = buf;
119119
}
120120
pc.Add(param);

src/SqlSessionStateProviderAsync/SqlSessionStateRepositoryUtil.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ static class SqlParameterName
2929
public const string LockAge = "@" + nameof(LockAge);
3030
public const string ActionFlags = "@" + nameof(ActionFlags);
3131
public const string Durablility = "@" + nameof(Durablility);
32+
public const string Compat_SessionId = "@id";
33+
public const string Compat_ItemShort = "@itemShort";
34+
public const string Compat_ItemLong = "@itemLong";
3235
}
3336

3437
static class Sec

test/Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync.Test/SqlCommandHelperTest.cs

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,21 @@ public void CreateNewSessionTableCmd_Should_Create_SqlCommand_Without_Parameters
3737
Assert.Empty(cmd.Parameters);
3838
}
3939

40-
[Fact]
41-
public void SqlCommand_AddSessionIdParameter()
40+
[Theory]
41+
[InlineData(false)]
42+
[InlineData(true)]
43+
[InlineData(null)]
44+
public void SqlCommand_AddSessionIdParameter(bool? fxCompat)
4245
{
4346
var helper = new SqlCommandHelper(SqlCommandTimeout);
4447
var cmd = helper.CreateSqlCommand(SqlStatement);
4548

46-
cmd.Parameters.AddSessionIdParameter(SessionId);
49+
if (fxCompat != null)
50+
cmd.Parameters.AddSessionIdParameter(SessionId, fxCompat.Value);
51+
else
52+
cmd.Parameters.AddSessionIdParameter(SessionId);
4753
VerifyBasicsOfSqlCommand(cmd);
48-
VerifySessionIdParameter(cmd);
54+
VerifySessionIdParameter(cmd, fxCompat);
4955
}
5056

5157
[Fact]
@@ -116,15 +122,22 @@ public void SqlCommand_AddTimeoutParameter()
116122
VerifyTimeoutParameter(cmd, SessionTimeout);
117123
}
118124

119-
[Fact]
120-
public void SqlCommand_AddSessionItemLongImageParameter()
125+
[Theory]
126+
[InlineData(false)]
127+
[InlineData(true)]
128+
[InlineData(null)]
129+
public void SqlCommand_AddSessionItemLongImageParameter(bool? fxCompat)
121130
{
122131
var helper = new SqlCommandHelper(SqlCommandTimeout);
123132
var cmd = helper.CreateSqlCommand(SqlStatement);
124133

125-
cmd.Parameters.AddSessionItemLongImageParameter(BufferLength, Buffer);
134+
if (fxCompat != null)
135+
cmd.Parameters.AddSessionItemLongImageParameter(BufferLength, Buffer, fxCompat.Value);
136+
else
137+
cmd.Parameters.AddSessionItemLongImageParameter(BufferLength, Buffer);
138+
126139
VerifyBasicsOfSqlCommand(cmd);
127-
VerifySessionItemLongParameter(cmd, SqlDbType.Image, BufferLength, Buffer);
140+
VerifySessionItemLongParameter(cmd, SqlDbType.Image, BufferLength, Buffer, fxCompat);
128141
}
129142

130143
[Fact]
@@ -135,29 +148,41 @@ public void SqlCommand_AddSessionItemLongVarBinaryParameter()
135148

136149
cmd.Parameters.AddSessionItemLongVarBinaryParameter(BufferLength, Buffer);
137150
VerifyBasicsOfSqlCommand(cmd);
138-
VerifySessionItemLongParameter(cmd, SqlDbType.VarBinary, BufferLength, Buffer);
151+
VerifySessionItemLongParameter(cmd, SqlDbType.VarBinary, BufferLength, Buffer, false);
139152
}
140153

141-
[Fact]
142-
public void SqlCommand_AddSessionItemShortParameter()
154+
[Theory]
155+
[InlineData(false)]
156+
[InlineData(true)]
157+
[InlineData(null)]
158+
public void SqlCommand_AddSessionItemShortParameter(bool? fxCompat)
143159
{
144160
var helper = new SqlCommandHelper(SqlCommandTimeout);
145161
var cmd = helper.CreateSqlCommand(SqlStatement);
146162

147-
cmd.Parameters.AddSessionItemShortParameter(BufferLength, Buffer);
163+
if (fxCompat != null)
164+
cmd.Parameters.AddSessionItemShortParameter(BufferLength, Buffer, fxCompat.Value);
165+
else
166+
cmd.Parameters.AddSessionItemShortParameter(BufferLength, Buffer);
148167
VerifyBasicsOfSqlCommand(cmd);
149-
VerifySessionItemShortParameter(cmd, BufferLength, Buffer);
168+
VerifySessionItemShortParameter(cmd, BufferLength, Buffer, fxCompat);
150169
}
151170

152-
[Fact]
153-
public void SqlCommand_AddSessionItemShortOutputParameter()
171+
[Theory]
172+
[InlineData(false)]
173+
[InlineData(true)]
174+
[InlineData(null)]
175+
public void SqlCommand_AddSessionItemShortOutputParameter(bool? fxCompat)
154176
{
155177
var helper = new SqlCommandHelper(SqlCommandTimeout);
156178
var cmd = helper.CreateSqlCommand(SqlStatement);
157179

158-
cmd.Parameters.AddSessionItemShortParameter();
180+
if (fxCompat != null)
181+
cmd.Parameters.AddSessionItemShortParameter(fxCompat: fxCompat.Value);
182+
else
183+
cmd.Parameters.AddSessionItemShortParameter();
159184
VerifyBasicsOfSqlCommand(cmd);
160-
VerifySessionItemShortParameter(cmd);
185+
VerifySessionItemShortParameter(cmd, fxCompat: fxCompat);
161186
}
162187

163188
private void VerifyBasicsOfSqlCommand(SqlCommand cmd)
@@ -167,9 +192,9 @@ private void VerifyBasicsOfSqlCommand(SqlCommand cmd)
167192
Assert.Equal(SqlCommandTimeout, cmd.CommandTimeout);
168193
}
169194

170-
private void VerifySessionIdParameter(SqlCommand cmd)
195+
private void VerifySessionIdParameter(SqlCommand cmd, bool? fxCompat)
171196
{
172-
var param = cmd.Parameters[SqlParameterName.SessionId];
197+
var param = cmd.Parameters[(fxCompat != null && fxCompat.Value) ? SqlParameterName.Compat_SessionId : SqlParameterName.SessionId];
173198
Assert.NotNull(param);
174199
Assert.Equal(SqlDbType.NVarChar, param.SqlDbType);
175200
Assert.Equal(SessionId, param.Value);
@@ -228,18 +253,18 @@ private void VerifyActionFlagsParameter(SqlCommand cmd)
228253
Assert.Equal(ParameterDirection.Output, param.Direction);
229254
}
230255

231-
private void VerifySessionItemLongParameter(SqlCommand cmd, SqlDbType sqlType, int length = 0, byte[] buf = null)
256+
private void VerifySessionItemLongParameter(SqlCommand cmd, SqlDbType sqlType, int length, byte[] buf, bool? fxCompat)
232257
{
233-
var param = cmd.Parameters[SqlParameterName.SessionItemLong];
258+
var param = cmd.Parameters[(fxCompat != null && fxCompat.Value) ? SqlParameterName.Compat_ItemLong : SqlParameterName.SessionItemLong];
234259
Assert.NotNull(param);
235260
Assert.Equal(sqlType, param.SqlDbType);
236261
Assert.Equal(length, param.Size);
237262
Assert.Equal(buf, param.Value);
238263
}
239264

240-
private void VerifySessionItemShortParameter(SqlCommand cmd, int length = 0, byte[] buf = null)
265+
private void VerifySessionItemShortParameter(SqlCommand cmd, int length = 0, byte[] buf = null, bool? fxCompat = null)
241266
{
242-
var param = cmd.Parameters[SqlParameterName.SessionItemShort];
267+
var param = cmd.Parameters[(fxCompat != null && fxCompat.Value) ? SqlParameterName.Compat_ItemShort : SqlParameterName.SessionItemShort];
243268
Assert.NotNull(param);
244269
Assert.Equal(SqlDbType.VarBinary, param.SqlDbType);
245270

0 commit comments

Comments
 (0)