1 //---------------------------------------------------------------------
2 // <copyright file="UpdateExpressionVisitor.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
8 //---------------------------------------------------------------------
10 namespace System.Data.Mapping.Update.Internal
12 using System.Data.Common.CommandTrees;
15 /// Abstract implementation of node visitor that allows the specification of visit methods
16 /// for different node types (VisitPre virtual methods) and evaluation of nodes with respect
17 /// to the typed (TReturn) return values of their children.
20 /// This is not a general purpose class. It is tailored to the needs of the update pipeline.
22 /// All virtual methods throw NotSupportedException (must be explicitly overridden by each visitor).
24 /// <typeparam name="TReturn">Return type for the visitor</typeparam>
25 internal abstract class UpdateExpressionVisitor<TReturn> : DbExpressionVisitor<TReturn>
28 /// Gets the name of this visitor for debugging and tracing purposes.
30 protected abstract string VisitorName
36 /// Utility method to generate an exception when unsupported node types are encountered.
38 /// <param name="node">Unsupported node</param>
39 /// <returns>Not supported exception</returns>
40 protected NotSupportedException ConstructNotSupportedException(DbExpression node)
42 string nodeKind = null == node ? null :
43 node.ExpressionKind.ToString();
45 return EntityUtil.NotSupported(
46 System.Data.Entity.Strings.Update_UnsupportedExpressionKind(nodeKind, VisitorName));
49 #region IExpressionVisitor<TReturn> Members
50 public override TReturn Visit(DbExpression expression)
52 if (null != expression)
54 return expression.Accept(this);
58 throw ConstructNotSupportedException(expression);
62 public override TReturn Visit(DbAndExpression expression)
64 throw ConstructNotSupportedException(expression);
67 public override TReturn Visit(DbApplyExpression expression)
69 throw ConstructNotSupportedException(expression);
72 public override TReturn Visit(DbArithmeticExpression expression)
74 throw ConstructNotSupportedException(expression);
77 public override TReturn Visit(DbCaseExpression expression)
79 throw ConstructNotSupportedException(expression);
82 public override TReturn Visit(DbCastExpression expression)
84 throw ConstructNotSupportedException(expression);
87 public override TReturn Visit(DbComparisonExpression expression)
89 throw ConstructNotSupportedException(expression);
92 public override TReturn Visit(DbConstantExpression expression)
94 throw ConstructNotSupportedException(expression);
97 public override TReturn Visit(DbCrossJoinExpression expression)
99 throw ConstructNotSupportedException(expression);
102 public override TReturn Visit(DbDerefExpression expression)
104 throw ConstructNotSupportedException(expression);
107 public override TReturn Visit(DbDistinctExpression expression)
109 throw ConstructNotSupportedException(expression);
112 public override TReturn Visit(DbElementExpression expression)
114 throw ConstructNotSupportedException(expression);
117 public override TReturn Visit(DbExceptExpression expression)
119 throw ConstructNotSupportedException(expression);
122 public override TReturn Visit(DbFilterExpression expression)
124 throw ConstructNotSupportedException(expression);
127 public override TReturn Visit(DbFunctionExpression expression)
129 throw ConstructNotSupportedException(expression);
132 public override TReturn Visit(DbLambdaExpression expression)
134 throw ConstructNotSupportedException(expression);
137 public override TReturn Visit(DbEntityRefExpression expression)
139 throw ConstructNotSupportedException(expression);
142 public override TReturn Visit(DbRefKeyExpression expression)
144 throw ConstructNotSupportedException(expression);
147 public override TReturn Visit(DbGroupByExpression expression)
149 throw ConstructNotSupportedException(expression);
152 public override TReturn Visit(DbIntersectExpression expression)
154 throw ConstructNotSupportedException(expression);
157 public override TReturn Visit(DbIsEmptyExpression expression)
159 throw ConstructNotSupportedException(expression);
162 public override TReturn Visit(DbIsNullExpression expression)
164 throw ConstructNotSupportedException(expression);
167 public override TReturn Visit(DbIsOfExpression expression)
169 throw ConstructNotSupportedException(expression);
172 public override TReturn Visit(DbJoinExpression expression)
174 throw ConstructNotSupportedException(expression);
177 public override TReturn Visit(DbLikeExpression expression)
179 throw ConstructNotSupportedException(expression);
182 public override TReturn Visit(DbLimitExpression expression)
184 throw ConstructNotSupportedException(expression);
187 #if METHOD_EXPRESSION
188 public override TReturn Visit(MethodExpression expression)
190 throw ConstructNotSupportedException(expression);
194 public override TReturn Visit(DbNewInstanceExpression expression)
196 throw ConstructNotSupportedException(expression);
199 public override TReturn Visit(DbNotExpression expression)
201 throw ConstructNotSupportedException(expression);
204 public override TReturn Visit(DbNullExpression expression)
206 throw ConstructNotSupportedException(expression);
209 public override TReturn Visit(DbOfTypeExpression expression)
211 throw ConstructNotSupportedException(expression);
214 public override TReturn Visit(DbOrExpression expression)
216 throw ConstructNotSupportedException(expression);
219 public override TReturn Visit(DbParameterReferenceExpression expression)
221 throw ConstructNotSupportedException(expression);
224 public override TReturn Visit(DbProjectExpression expression)
226 throw ConstructNotSupportedException(expression);
229 public override TReturn Visit(DbPropertyExpression expression)
231 throw ConstructNotSupportedException(expression);
234 public override TReturn Visit(DbQuantifierExpression expression)
236 throw ConstructNotSupportedException(expression);
239 public override TReturn Visit(DbRefExpression expression)
241 throw ConstructNotSupportedException(expression);
244 public override TReturn Visit(DbRelationshipNavigationExpression expression)
246 throw ConstructNotSupportedException(expression);
249 public override TReturn Visit(DbSkipExpression expression)
251 throw ConstructNotSupportedException(expression);
254 public override TReturn Visit(DbSortExpression expression)
256 throw ConstructNotSupportedException(expression);
259 public override TReturn Visit(DbTreatExpression expression)
261 throw ConstructNotSupportedException(expression);
264 public override TReturn Visit(DbUnionAllExpression expression)
266 throw ConstructNotSupportedException(expression);
269 public override TReturn Visit(DbVariableReferenceExpression expression)
271 throw ConstructNotSupportedException(expression);
274 public override TReturn Visit(DbScanExpression expression)
276 throw ConstructNotSupportedException(expression);