Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / System.Data.Entity / System / Data / Mapping / Update / Internal / UpdateExpressionVisitor.cs
1 //---------------------------------------------------------------------
2 // <copyright file="UpdateExpressionVisitor.cs" company="Microsoft">
3 //      Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 //
6 // @owner Microsoft
7 // @backupOwner Microsoft
8 //---------------------------------------------------------------------
9
10 namespace System.Data.Mapping.Update.Internal
11 {
12     using System.Data.Common.CommandTrees;
13
14     /// <summary>
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.
18     /// </summary>
19     /// <remarks>
20     /// This is not a general purpose class. It is tailored to the needs of the update pipeline.
21     /// 
22     /// All virtual methods throw NotSupportedException (must be explicitly overridden by each visitor).
23     /// </remarks>
24     /// <typeparam name="TReturn">Return type for the visitor</typeparam>
25     internal abstract class UpdateExpressionVisitor<TReturn> : DbExpressionVisitor<TReturn>
26     {
27         /// <summary>
28         /// Gets the name of this visitor for debugging and tracing purposes.
29         /// </summary>
30         protected abstract string VisitorName
31         {
32             get;
33         }
34
35         /// <summary>
36         /// Utility method to generate an exception when unsupported node types are encountered.
37         /// </summary>
38         /// <param name="node">Unsupported node</param>
39         /// <returns>Not supported exception</returns>
40         protected NotSupportedException ConstructNotSupportedException(DbExpression node)
41         {
42             string nodeKind = null == node ? null :
43                 node.ExpressionKind.ToString();
44
45             return EntityUtil.NotSupported(
46                 System.Data.Entity.Strings.Update_UnsupportedExpressionKind(nodeKind, VisitorName));
47         }
48
49         #region IExpressionVisitor<TReturn> Members
50         public override TReturn Visit(DbExpression expression)
51         {
52             if (null != expression)
53             {
54                 return expression.Accept(this);
55             }
56             else
57             {
58                 throw ConstructNotSupportedException(expression);
59             }
60         }
61
62         public override TReturn Visit(DbAndExpression expression)
63         {
64             throw ConstructNotSupportedException(expression);
65         }
66
67         public override TReturn Visit(DbApplyExpression expression)
68         {
69             throw ConstructNotSupportedException(expression);
70         }
71
72         public override TReturn Visit(DbArithmeticExpression expression)
73         {
74             throw ConstructNotSupportedException(expression);
75         }
76
77         public override TReturn Visit(DbCaseExpression expression)
78         {
79             throw ConstructNotSupportedException(expression);
80         }
81
82         public override TReturn Visit(DbCastExpression expression)
83         {
84             throw ConstructNotSupportedException(expression);
85         }
86
87         public override TReturn Visit(DbComparisonExpression expression)
88         {
89             throw ConstructNotSupportedException(expression);
90         }
91
92         public override TReturn Visit(DbConstantExpression expression)
93         {
94             throw ConstructNotSupportedException(expression);
95         }
96
97         public override TReturn Visit(DbCrossJoinExpression expression)
98         {
99             throw ConstructNotSupportedException(expression);
100         }
101
102         public override TReturn Visit(DbDerefExpression expression)
103         {
104             throw ConstructNotSupportedException(expression);
105         }
106
107         public override TReturn Visit(DbDistinctExpression expression)
108         {
109             throw ConstructNotSupportedException(expression);
110         }
111
112         public override TReturn Visit(DbElementExpression expression)
113         {
114             throw ConstructNotSupportedException(expression);
115         }
116
117         public override TReturn Visit(DbExceptExpression expression)
118         {
119             throw ConstructNotSupportedException(expression);
120         }
121
122         public override TReturn Visit(DbFilterExpression expression)
123         {
124             throw ConstructNotSupportedException(expression);
125         }
126
127         public override TReturn Visit(DbFunctionExpression expression)
128         {
129             throw ConstructNotSupportedException(expression);
130         }
131
132         public override TReturn Visit(DbLambdaExpression expression)
133         {
134             throw ConstructNotSupportedException(expression);
135         }
136
137         public override TReturn Visit(DbEntityRefExpression expression)
138         {
139             throw ConstructNotSupportedException(expression);
140         }
141
142         public override TReturn Visit(DbRefKeyExpression expression)
143         {
144             throw ConstructNotSupportedException(expression);
145         }
146
147         public override TReturn Visit(DbGroupByExpression expression)
148         {
149             throw ConstructNotSupportedException(expression);
150         }
151
152         public override TReturn Visit(DbIntersectExpression expression)
153         {
154             throw ConstructNotSupportedException(expression);
155         }
156
157         public override TReturn Visit(DbIsEmptyExpression expression)
158         {
159             throw ConstructNotSupportedException(expression);
160         }
161
162         public override TReturn Visit(DbIsNullExpression expression)
163         {
164             throw ConstructNotSupportedException(expression);
165         }
166
167         public override TReturn Visit(DbIsOfExpression expression)
168         {
169             throw ConstructNotSupportedException(expression);
170         }
171
172         public override TReturn Visit(DbJoinExpression expression)
173         {
174             throw ConstructNotSupportedException(expression);
175         }
176
177         public override TReturn Visit(DbLikeExpression expression)
178         {
179             throw ConstructNotSupportedException(expression);
180         }
181
182         public override TReturn Visit(DbLimitExpression expression)
183         {
184             throw ConstructNotSupportedException(expression);
185         }
186
187 #if METHOD_EXPRESSION
188         public override TReturn Visit(MethodExpression expression)
189         {
190             throw ConstructNotSupportedException(expression);
191         }
192 #endif
193
194         public override TReturn Visit(DbNewInstanceExpression expression)
195         {
196             throw ConstructNotSupportedException(expression);
197         }
198
199         public override TReturn Visit(DbNotExpression expression)
200         {
201             throw ConstructNotSupportedException(expression);
202         }
203
204         public override TReturn Visit(DbNullExpression expression)
205         {
206             throw ConstructNotSupportedException(expression);
207         }
208
209         public override TReturn Visit(DbOfTypeExpression expression)
210         {
211             throw ConstructNotSupportedException(expression);
212         }
213
214         public override TReturn Visit(DbOrExpression expression)
215         {
216             throw ConstructNotSupportedException(expression);
217         }
218
219         public override TReturn Visit(DbParameterReferenceExpression expression)
220         {
221             throw ConstructNotSupportedException(expression);
222         }
223
224         public override TReturn Visit(DbProjectExpression expression)
225         {
226             throw ConstructNotSupportedException(expression);
227         }
228
229         public override TReturn Visit(DbPropertyExpression expression)
230         {
231             throw ConstructNotSupportedException(expression);
232         }
233
234         public override TReturn Visit(DbQuantifierExpression expression)
235         {
236             throw ConstructNotSupportedException(expression);
237         }
238
239         public override TReturn Visit(DbRefExpression expression)
240         {
241             throw ConstructNotSupportedException(expression);
242         }
243
244         public override TReturn Visit(DbRelationshipNavigationExpression expression)
245         {
246             throw ConstructNotSupportedException(expression);
247         }
248
249         public override TReturn Visit(DbSkipExpression expression)
250         {
251             throw ConstructNotSupportedException(expression);
252         }
253
254         public override TReturn Visit(DbSortExpression expression)
255         {
256             throw ConstructNotSupportedException(expression);
257         }
258
259         public override TReturn Visit(DbTreatExpression expression)
260         {
261             throw ConstructNotSupportedException(expression);
262         }
263
264         public override TReturn Visit(DbUnionAllExpression expression)
265         {
266             throw ConstructNotSupportedException(expression);
267         }
268
269         public override TReturn Visit(DbVariableReferenceExpression expression)
270         {
271             throw ConstructNotSupportedException(expression);
272         }
273
274         public override TReturn Visit(DbScanExpression expression)
275         {
276             throw ConstructNotSupportedException(expression);
277         }
278         #endregion
279     }
280 }