Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SqlSupersetValidator.cs / 1305376 / SqlSupersetValidator.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace System.Data.Linq.SqlClient {
///
/// Validates the integrity of super-SQL trees.
///
internal class SqlSupersetValidator {
List validators = new List();
///
/// Add a validator to the collection of validators to run.
///
internal void AddValidator(SqlVisitor validator) {
this.validators.Add(validator);
}
///
/// Execute each current validator.
///
internal void Validate(SqlNode node) {
foreach (SqlVisitor validator in this.validators) {
validator.Visit(node);
}
}
}
///
/// Column ClrType must agree with the expression that it points to.
///
internal class ColumnTypeValidator : SqlVisitor {
internal override SqlRow VisitRow(SqlRow row) {
for (int i = 0, n = row.Columns.Count; i < n; i++) {
SqlColumn col = row.Columns[i];
SqlExpression expr = this.VisitExpression(col.Expression);
if (expr != null) {
if (TypeSystem.GetNonNullableType(col.ClrType) != TypeSystem.GetNonNullableType(expr.ClrType)) {
throw Error.ColumnClrTypeDoesNotAgreeWithExpressionsClrType();
}
}
}
return row;
}
}
///
/// A validator that ensures literal values are reasonable.
///
internal class LiteralValidator : SqlVisitor {
internal override SqlExpression VisitValue(SqlValue value) {
if (!value.IsClientSpecified
&& value.ClrType.IsClass
&& value.ClrType != typeof(string)
&& value.ClrType != typeof(Type)
&& value.Value != null) {
throw Error.ClassLiteralsNotAllowed(value.ClrType);
}
return value;
}
internal override SqlExpression VisitBinaryOperator(SqlBinary bo) {
bo.Left = this.VisitExpression(bo.Left);
return bo;
}
}
///
/// A validator which enforces rationalized boolean expressions.
///
internal class ExpectRationalizedBooleans : SqlBooleanMismatchVisitor {
internal ExpectRationalizedBooleans() {
}
internal override SqlExpression ConvertValueToPredicate(SqlExpression bitExpression) {
throw Error.ExpectedPredicateFoundBit();
}
internal override SqlExpression ConvertPredicateToValue(SqlExpression predicateExpression) {
throw Error.ExpectedBitFoundPredicate();
}
}
///
/// A validator which enforces that no more SqlMethodCall nodes exist in the tree.
///
internal class ExpectNoMethodCalls : SqlVisitor {
internal override SqlExpression VisitMethodCall(SqlMethodCall mc) {
// eventually we may support this type of stuff given the SQL CLR, but for now it is illegal
throw Error.MethodHasNoSupportConversionToSql(mc.Method.Name);
}
// check everything except selection expressions (which will be client or ignored)
internal override SqlSelect VisitSelect(SqlSelect select) {
return this.VisitSelectCore(select);
}
}
internal class ExpectNoFloatingColumns : SqlVisitor {
internal override SqlRow VisitRow(SqlRow row) {
foreach (SqlColumn c in row.Columns) {
this.Visit(c.Expression);
}
return row;
}
internal override SqlTable VisitTable(SqlTable tab) {
foreach (SqlColumn c in tab.Columns) {
this.Visit(c.Expression);
}
return tab;
}
internal override SqlExpression VisitColumn(SqlColumn col) {
throw Error.UnexpectedFloatingColumn();
}
}
internal class ExpectNoAliasRefs : SqlVisitor {
internal override SqlExpression VisitAliasRef(SqlAliasRef aref) {
throw Error.UnexpectedNode(aref.NodeType);
}
}
internal class ExpectNoSharedExpressions : SqlVisitor {
internal override SqlExpression VisitSharedExpression(SqlSharedExpression shared) {
throw Error.UnexpectedSharedExpression();
}
internal override SqlExpression VisitSharedExpressionRef(SqlSharedExpressionRef sref) {
throw Error.UnexpectedSharedExpressionReference();
}
}
///
/// Determines if there is a boolean NText/Text/Image comparison and if so throws an exception
/// because this is not valid in SQLServer.
///
internal class ValidateNoInvalidComparison : SqlVisitor {
internal override SqlExpression VisitBinaryOperator(SqlBinary bo) {
if (bo.NodeType == SqlNodeType.EQ || bo.NodeType == SqlNodeType.NE ||
bo.NodeType == SqlNodeType.EQ2V || bo.NodeType == SqlNodeType.NE2V ||
bo.NodeType == SqlNodeType.GT || bo.NodeType == SqlNodeType.GE ||
bo.NodeType == SqlNodeType.LT || bo.NodeType == SqlNodeType.LE ) {
if (!bo.Left.SqlType.SupportsComparison ||
!bo.Right.SqlType.SupportsComparison){
throw Error.UnhandledStringTypeComparison();
}
}
bo.Left = this.VisitExpression(bo.Left);
bo.Right = this.VisitExpression(bo.Right);
return bo;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ListControlConvertEventArgs.cs
- QualifierSet.cs
- TemplateParser.cs
- SettingsPropertyValue.cs
- ObjectParameter.cs
- EditingCoordinator.cs
- SchemaNotation.cs
- DataBinding.cs
- EntityParameter.cs
- SourceFilter.cs
- ICspAsymmetricAlgorithm.cs
- WebPartActionVerb.cs
- DocumentViewerAutomationPeer.cs
- DuplexChannelFactory.cs
- PersonalizationProviderHelper.cs
- NotSupportedException.cs
- PcmConverter.cs
- PrintDocument.cs
- DocumentCollection.cs
- VScrollBar.cs
- SafeNativeMethods.cs
- PropertyEmitter.cs
- IpcChannelHelper.cs
- OracleInternalConnection.cs
- ApplicationManager.cs
- ThreadExceptionDialog.cs
- DefaultTextStore.cs
- Classification.cs
- TextMetrics.cs
- TriggerAction.cs
- InvalidDataContractException.cs
- Vector3DCollectionConverter.cs
- LineGeometry.cs
- TextViewBase.cs
- AsymmetricSignatureFormatter.cs
- TrustManagerPromptUI.cs
- FileChangesMonitor.cs
- configsystem.cs
- Brush.cs
- ExceptionNotification.cs
- TextClipboardData.cs
- PropertyMappingExceptionEventArgs.cs
- ApplicationManager.cs
- StylusDevice.cs
- DictionaryBase.cs
- ParallelTimeline.cs
- ValidateNames.cs
- MembershipValidatePasswordEventArgs.cs
- WindowsAuthenticationEventArgs.cs
- SkinBuilder.cs
- HostedTransportConfigurationManager.cs
- _BaseOverlappedAsyncResult.cs
- WindowsAltTab.cs
- EventDescriptor.cs
- TransformerTypeCollection.cs
- ReceiveMessageContent.cs
- SharedStatics.cs
- WebSysDisplayNameAttribute.cs
- MemoryFailPoint.cs
- XpsInterleavingPolicy.cs
- RemoteWebConfigurationHostStream.cs
- DynamicUpdateCommand.cs
- DataServiceStreamResponse.cs
- QueryPageSettingsEventArgs.cs
- ToolStripContentPanelRenderEventArgs.cs
- AnimationException.cs
- RootProfilePropertySettingsCollection.cs
- coordinatorfactory.cs
- IPGlobalProperties.cs
- DbBuffer.cs
- returneventsaver.cs
- CategoryValueConverter.cs
- CompilerState.cs
- Verify.cs
- DoubleSumAggregationOperator.cs
- RequestCacheValidator.cs
- AssertSection.cs
- HttpWebResponse.cs
- PrintDocument.cs
- MulticastNotSupportedException.cs
- DateTimeUtil.cs
- RepeatInfo.cs
- XmlSchemaAttributeGroupRef.cs
- _OverlappedAsyncResult.cs
- AdCreatedEventArgs.cs
- StoragePropertyMapping.cs
- SendActivityDesigner.cs
- GiveFeedbackEventArgs.cs
- Visitor.cs
- RSAOAEPKeyExchangeFormatter.cs
- Evaluator.cs
- TableChangeProcessor.cs
- AbstractDataSvcMapFileLoader.cs
- FilteredXmlReader.cs
- ExceptionHandler.cs
- TemplateParser.cs
- ResolveMatchesCD1.cs
- Adorner.cs
- WebPartConnectVerb.cs
- PtsHost.cs