@@ -83,12 +83,12 @@ protected virtual SqlExpression<T> CopyTo(SqlExpression<T> to)
83
83
to . modelDef = modelDef ;
84
84
to . tableDefs = tableDefs ;
85
85
86
- to . selectExpression = selectExpression ;
87
- to . OnlyFields = OnlyFields != null ? new HashSet < string > ( OnlyFields , StringComparer . OrdinalIgnoreCase ) : null ;
88
-
89
86
to . UpdateFields = UpdateFields ;
90
87
to . InsertFields = InsertFields ;
91
88
89
+ to . selectExpression = selectExpression ;
90
+ to . OnlyFields = OnlyFields != null ? new HashSet < string > ( OnlyFields , StringComparer . OrdinalIgnoreCase ) : null ;
91
+
92
92
to . TableAlias = TableAlias ;
93
93
to . fromExpression = fromExpression ;
94
94
to . whereExpression = whereExpression ;
@@ -123,18 +123,41 @@ protected virtual SqlExpression<T> CopyTo(SqlExpression<T> to)
123
123
/// </summary>
124
124
public string ComputeHash ( bool includeParams = true )
125
125
{
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
+ }
127
134
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 ( ) ;
132
143
144
+ sb . Append ( '<' ) . Append ( ModelDef . Name ) ;
145
+ foreach ( var tableDef in tableDefs )
146
+ {
147
+ sb . Append ( ',' ) . Append ( tableDef ) ;
148
+ }
149
+ sb . Append ( '>' ) . AppendLine ( ) ;
150
+
133
151
if ( ! UpdateFields . IsEmpty ( ) )
134
152
sb . AppendLine ( UpdateFields . Join ( "," ) ) ;
135
153
if ( ! InsertFields . IsEmpty ( ) )
136
154
sb . AppendLine ( InsertFields . Join ( "," ) ) ;
137
155
156
+ if ( ! string . IsNullOrEmpty ( selectExpression ) )
157
+ sb . AppendLine ( selectExpression ) ;
158
+ if ( ! OnlyFields . IsEmpty ( ) )
159
+ sb . AppendLine ( OnlyFields . Join ( "," ) ) ;
160
+
138
161
if ( ! string . IsNullOrEmpty ( TableAlias ) )
139
162
sb . AppendLine ( TableAlias ) ;
140
163
if ( ! string . IsNullOrEmpty ( fromExpression ) )
@@ -169,25 +192,23 @@ public string ComputeHash(bool includeParams=true)
169
192
sb . Append ( hasEnsureConditions ? "1" : "0" ) ;
170
193
sb . AppendLine ( ) ;
171
194
172
- if ( includeParams && Params . Count > 0 )
195
+ if ( includeParams )
173
196
{
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 )
176
199
{
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
+ }
179
205
}
180
206
}
181
207
182
208
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 ;
189
210
}
190
-
211
+
191
212
/// <summary>
192
213
/// Clear select expression. All properties will be selected.
193
214
/// </summary>
0 commit comments