Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit e526881

Browse files
committed
Extract dump state into external method
1 parent cbd26c8 commit e526881

File tree

1 file changed

+41
-20
lines changed

1 file changed

+41
-20
lines changed

src/ServiceStack.OrmLite/Expressions/SqlExpression.cs

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@ protected virtual SqlExpression<T> CopyTo(SqlExpression<T> to)
8383
to.modelDef = modelDef;
8484
to.tableDefs = tableDefs;
8585

86-
to.selectExpression = selectExpression;
87-
to.OnlyFields = OnlyFields != null ? new HashSet<string>(OnlyFields, StringComparer.OrdinalIgnoreCase) : null;
88-
8986
to.UpdateFields = UpdateFields;
9087
to.InsertFields = InsertFields;
9188

89+
to.selectExpression = selectExpression;
90+
to.OnlyFields = OnlyFields != null ? new HashSet<string>(OnlyFields, StringComparer.OrdinalIgnoreCase) : null;
91+
9292
to.TableAlias = TableAlias;
9393
to.fromExpression = fromExpression;
9494
to.whereExpression = whereExpression;
@@ -123,18 +123,41 @@ protected virtual SqlExpression<T> CopyTo(SqlExpression<T> to)
123123
/// </summary>
124124
public string ComputeHash(bool includeParams=true)
125125
{
126-
var sb = StringBuilderCache.Allocate();
126+
var uniqueExpr = Dump(includeParams);
127+
// fastest up to 500 chars https://wintermute79.wordpress.com/2014/10/10/c-sha-1-benchmark/
128+
using var sha1 = new System.Security.Cryptography.SHA1Managed();
129+
var hash = sha1.ComputeHash(Encoding.ASCII.GetBytes(uniqueExpr));
130+
var hexFormat = hash.ToHex();
131+
132+
return hexFormat;
133+
}
127134

128-
if (!string.IsNullOrEmpty(selectExpression))
129-
sb.AppendLine(selectExpression);
130-
if (!OnlyFields.IsEmpty())
131-
sb.AppendLine(OnlyFields.Join(","));
135+
/// <summary>
136+
/// Dump internal state of this SqlExpression into a string
137+
/// </summary>
138+
/// <param name="includeParams"></param>
139+
/// <returns></returns>
140+
public string Dump(bool includeParams)
141+
{
142+
var sb = StringBuilderCache.Allocate();
132143

144+
sb.Append('<').Append(ModelDef.Name);
145+
foreach (var tableDef in tableDefs)
146+
{
147+
sb.Append(',').Append(tableDef);
148+
}
149+
sb.Append('>').AppendLine();
150+
133151
if (!UpdateFields.IsEmpty())
134152
sb.AppendLine(UpdateFields.Join(","));
135153
if (!InsertFields.IsEmpty())
136154
sb.AppendLine(InsertFields.Join(","));
137155

156+
if (!string.IsNullOrEmpty(selectExpression))
157+
sb.AppendLine(selectExpression);
158+
if (!OnlyFields.IsEmpty())
159+
sb.AppendLine(OnlyFields.Join(","));
160+
138161
if (!string.IsNullOrEmpty(TableAlias))
139162
sb.AppendLine(TableAlias);
140163
if (!string.IsNullOrEmpty(fromExpression))
@@ -169,25 +192,23 @@ public string ComputeHash(bool includeParams=true)
169192
sb.Append(hasEnsureConditions ? "1" : "0");
170193
sb.AppendLine();
171194

172-
if (includeParams && Params.Count > 0)
195+
if (includeParams)
173196
{
174-
sb.AppendLine("PARAMS:");
175-
for (var i = 0; i < Params.Count; i++)
197+
sb.Append("PARAMS:").Append(Params.Count).AppendLine();
198+
if (Params.Count > 0)
176199
{
177-
sb.Append(Params[i].ParameterName).Append('=');
178-
sb.AppendLine(Params[i].Value.ConvertTo<string>());
200+
foreach (var p in Params)
201+
{
202+
sb.Append(p.ParameterName).Append('=');
203+
sb.AppendLine(p.Value.ConvertTo<string>());
204+
}
179205
}
180206
}
181207

182208
var uniqueExpr = StringBuilderCache.ReturnAndFree(sb);
183-
// fastest up to 500 chars https://wintermute79.wordpress.com/2014/10/10/c-sha-1-benchmark/
184-
using var sha1 = new System.Security.Cryptography.SHA1Managed();
185-
var hash = sha1.ComputeHash(Encoding.ASCII.GetBytes(uniqueExpr));
186-
var hexFormat = hash.ToHex();
187-
188-
return hexFormat;
209+
return uniqueExpr;
189210
}
190-
211+
191212
/// <summary>
192213
/// Clear select expression. All properties will be selected.
193214
/// </summary>

0 commit comments

Comments
 (0)