Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / Data / System / Data / Filter / DataExpression.cs / 1 / DataExpression.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data { using System; using System.Diagnostics; using System.Collections.Generic; using System.ComponentModel; using System.Data.SqlTypes; using System.Data.Common; internal sealed class DataExpression : IFilter { internal string originalExpression = null; // original, unoptimized string private bool parsed = false; private bool bound = false; private ExpressionNode expr = null; private DataTable table = null; private readonly StorageType _storageType; private readonly Type _dataType; // This set if the expression is part of ExpressionCoulmn private DataColumn[] dependency = DataTable.zeroColumns; internal DataExpression(DataTable table, string expression) : this(table, expression, null) { } internal DataExpression(DataTable table, string expression, Type type) { ExpressionParser parser = new ExpressionParser(table); parser.LoadExpression(expression); originalExpression = expression; expr = null; if (expression != null) { _storageType = DataStorage.GetStorageType(type); _dataType = type; expr = parser.Parse(); parsed = true; if (expr != null && table != null) { this.Bind(table); } else { bound = false; } } } internal string Expression { get { return (originalExpression != null ? originalExpression : ""); // } } internal ExpressionNode ExpressionNode { get { return expr; } } internal bool HasValue { get { return (null != expr); } } internal void Bind(DataTable table) { this.table = table; if (table == null) return; if (expr != null) { Debug.Assert(parsed, "Invalid calling order: Bind() before Parse()"); Listlist = new List (); expr.Bind(table, list); expr = expr.Optimize(); this.table = table; bound = true; dependency = list.ToArray(); } } internal bool DependsOn(DataColumn column) { if (expr != null) { return expr.DependsOn(column); } else { return false; } } internal object Evaluate() { return Evaluate((DataRow)null, DataRowVersion.Default); } internal object Evaluate(DataRow row, DataRowVersion version) { object result; if (!bound) { this.Bind(this.table); } if (expr != null) { result = expr.Eval(row, version); // if the type is a SqlType (StorageType.Uri < _storageType), convert DBNull values. if (result != DBNull.Value || StorageType.Uri < _storageType) { // we need to convert the return value to the column.Type; try { if (StorageType.Object != _storageType) { result = SqlConvert.ChangeType2(result, _storageType, _dataType, table.FormatProvider); } } catch (Exception e) { // if (!ADP.IsCatchableExceptionType(e)) { throw; } ExceptionBuilder.TraceExceptionForCapture(e); // throw ExprException.DatavalueConvertion(result, _dataType, e); } } } else { result = null; } return result; } internal object Evaluate(DataRow[] rows) { return Evaluate(rows, DataRowVersion.Default); } internal object Evaluate(DataRow[] rows, DataRowVersion version) { if (!bound) { this.Bind(this.table); } if (expr != null) { List recordList = new List (); foreach(DataRow row in rows) { if (row.RowState == DataRowState.Deleted) continue; if (version == DataRowVersion.Original && row.oldRecord == -1) continue; recordList.Add(row.GetRecordFromVersion(version)); } int[] records = recordList.ToArray(); return expr.Eval(records); } else { return DBNull.Value; } } public bool Invoke(DataRow row, DataRowVersion version) { if (expr == null) return true; if (row == null) { throw ExprException.InvokeArgument(); } object val = expr.Eval(row, version); bool result; try { result = ToBoolean(val); } catch (EvaluateException) { throw ExprException.FilterConvertion(Expression); } return result; } internal DataColumn[] GetDependency() { Debug.Assert(dependency != null, "GetDependencies: null, we should have created an empty list"); return dependency; } internal bool IsTableAggregate() { if (expr != null) return expr.IsTableConstant(); else return false; } internal static bool IsUnknown(object value) { return DataStorage.IsObjectNull(value); } internal bool HasLocalAggregate() { if (expr != null) return expr.HasLocalAggregate(); else return false; } internal bool HasRemoteAggregate() { if (expr != null) return expr.HasRemoteAggregate(); else return false; } internal static bool ToBoolean(object value) { if (IsUnknown(value)) return false; if (value is bool) return(bool)value; if (value is SqlBoolean){ return (((SqlBoolean)value).IsTrue); } //check for SqlString is not added, value for true and false should be given with String, not with SqlString if (value is string) { try { return Boolean.Parse((string)value); } catch (Exception e) { // if (!ADP.IsCatchableExceptionType(e)) { throw; } ExceptionBuilder.TraceExceptionForCapture(e); // throw ExprException.DatavalueConvertion(value, typeof(bool), e); } } throw ExprException.DatavalueConvertion(value, typeof(bool), null); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data { using System; using System.Diagnostics; using System.Collections.Generic; using System.ComponentModel; using System.Data.SqlTypes; using System.Data.Common; internal sealed class DataExpression : IFilter { internal string originalExpression = null; // original, unoptimized string private bool parsed = false; private bool bound = false; private ExpressionNode expr = null; private DataTable table = null; private readonly StorageType _storageType; private readonly Type _dataType; // This set if the expression is part of ExpressionCoulmn private DataColumn[] dependency = DataTable.zeroColumns; internal DataExpression(DataTable table, string expression) : this(table, expression, null) { } internal DataExpression(DataTable table, string expression, Type type) { ExpressionParser parser = new ExpressionParser(table); parser.LoadExpression(expression); originalExpression = expression; expr = null; if (expression != null) { _storageType = DataStorage.GetStorageType(type); _dataType = type; expr = parser.Parse(); parsed = true; if (expr != null && table != null) { this.Bind(table); } else { bound = false; } } } internal string Expression { get { return (originalExpression != null ? originalExpression : ""); // } } internal ExpressionNode ExpressionNode { get { return expr; } } internal bool HasValue { get { return (null != expr); } } internal void Bind(DataTable table) { this.table = table; if (table == null) return; if (expr != null) { Debug.Assert(parsed, "Invalid calling order: Bind() before Parse()"); Listlist = new List (); expr.Bind(table, list); expr = expr.Optimize(); this.table = table; bound = true; dependency = list.ToArray(); } } internal bool DependsOn(DataColumn column) { if (expr != null) { return expr.DependsOn(column); } else { return false; } } internal object Evaluate() { return Evaluate((DataRow)null, DataRowVersion.Default); } internal object Evaluate(DataRow row, DataRowVersion version) { object result; if (!bound) { this.Bind(this.table); } if (expr != null) { result = expr.Eval(row, version); // if the type is a SqlType (StorageType.Uri < _storageType), convert DBNull values. if (result != DBNull.Value || StorageType.Uri < _storageType) { // we need to convert the return value to the column.Type; try { if (StorageType.Object != _storageType) { result = SqlConvert.ChangeType2(result, _storageType, _dataType, table.FormatProvider); } } catch (Exception e) { // if (!ADP.IsCatchableExceptionType(e)) { throw; } ExceptionBuilder.TraceExceptionForCapture(e); // throw ExprException.DatavalueConvertion(result, _dataType, e); } } } else { result = null; } return result; } internal object Evaluate(DataRow[] rows) { return Evaluate(rows, DataRowVersion.Default); } internal object Evaluate(DataRow[] rows, DataRowVersion version) { if (!bound) { this.Bind(this.table); } if (expr != null) { List recordList = new List (); foreach(DataRow row in rows) { if (row.RowState == DataRowState.Deleted) continue; if (version == DataRowVersion.Original && row.oldRecord == -1) continue; recordList.Add(row.GetRecordFromVersion(version)); } int[] records = recordList.ToArray(); return expr.Eval(records); } else { return DBNull.Value; } } public bool Invoke(DataRow row, DataRowVersion version) { if (expr == null) return true; if (row == null) { throw ExprException.InvokeArgument(); } object val = expr.Eval(row, version); bool result; try { result = ToBoolean(val); } catch (EvaluateException) { throw ExprException.FilterConvertion(Expression); } return result; } internal DataColumn[] GetDependency() { Debug.Assert(dependency != null, "GetDependencies: null, we should have created an empty list"); return dependency; } internal bool IsTableAggregate() { if (expr != null) return expr.IsTableConstant(); else return false; } internal static bool IsUnknown(object value) { return DataStorage.IsObjectNull(value); } internal bool HasLocalAggregate() { if (expr != null) return expr.HasLocalAggregate(); else return false; } internal bool HasRemoteAggregate() { if (expr != null) return expr.HasRemoteAggregate(); else return false; } internal static bool ToBoolean(object value) { if (IsUnknown(value)) return false; if (value is bool) return(bool)value; if (value is SqlBoolean){ return (((SqlBoolean)value).IsTrue); } //check for SqlString is not added, value for true and false should be given with String, not with SqlString if (value is string) { try { return Boolean.Parse((string)value); } catch (Exception e) { // if (!ADP.IsCatchableExceptionType(e)) { throw; } ExceptionBuilder.TraceExceptionForCapture(e); // throw ExprException.DatavalueConvertion(value, typeof(bool), e); } } throw ExprException.DatavalueConvertion(value, typeof(bool), null); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PageHandlerFactory.cs
- TypeDescriptorFilterService.cs
- TemplateControlCodeDomTreeGenerator.cs
- XmlSchemaSimpleType.cs
- ItemCollection.cs
- Closure.cs
- ReaderOutput.cs
- PageAsyncTask.cs
- OdbcConnectionPoolProviderInfo.cs
- JsonDeserializer.cs
- FormatException.cs
- InheritablePropertyChangeInfo.cs
- XmlIncludeAttribute.cs
- ValidatorCompatibilityHelper.cs
- DataGridViewCell.cs
- Serialization.cs
- URLIdentityPermission.cs
- ExtractCollection.cs
- HttpHandlerAction.cs
- GradientStopCollection.cs
- CommonDialog.cs
- SafeRsaProviderHandle.cs
- OrderByQueryOptionExpression.cs
- CodeFieldReferenceExpression.cs
- StringExpressionSet.cs
- LoginAutoFormat.cs
- TemplatedWizardStep.cs
- Int16Converter.cs
- TableLayoutSettings.cs
- ReverseInheritProperty.cs
- BufferedGraphicsContext.cs
- SqlCacheDependencySection.cs
- WebServiceData.cs
- RectConverter.cs
- HostExecutionContextManager.cs
- TypedMessageConverter.cs
- ParserExtension.cs
- UnsafeNativeMethodsCLR.cs
- TiffBitmapDecoder.cs
- DataGridViewCell.cs
- TextEffectResolver.cs
- ManifestResourceInfo.cs
- XmlToDatasetMap.cs
- Brushes.cs
- AuthorizationRule.cs
- SchemaDeclBase.cs
- BitmapScalingModeValidation.cs
- EncoderFallback.cs
- UriExt.cs
- RowTypeElement.cs
- DecoderFallback.cs
- DynamicScriptObject.cs
- KeyFrames.cs
- UmAlQuraCalendar.cs
- SqlException.cs
- MasterPageBuildProvider.cs
- SourceFileInfo.cs
- EntityConnection.cs
- TextTreeRootNode.cs
- AsymmetricSignatureFormatter.cs
- MultiBindingExpression.cs
- CountdownEvent.cs
- GlyphRunDrawing.cs
- _SafeNetHandles.cs
- CryptoApi.cs
- DataExpression.cs
- BitmapEffectGroup.cs
- HotSpot.cs
- BamlRecordHelper.cs
- CodeMethodInvokeExpression.cs
- XslNumber.cs
- SessionPageStatePersister.cs
- GregorianCalendar.cs
- HostProtectionException.cs
- Lasso.cs
- InstancePersistenceContext.cs
- WindowAutomationPeer.cs
- RemotingAttributes.cs
- OleDbError.cs
- WindowsListViewItemCheckBox.cs
- EntityDataSourceConfigureObjectContextPanel.cs
- SafePointer.cs
- Sql8ConformanceChecker.cs
- TreeSet.cs
- EmissiveMaterial.cs
- ParseHttpDate.cs
- MimeReflector.cs
- MemoryFailPoint.cs
- DynamicILGenerator.cs
- ReflectionUtil.cs
- ImageKeyConverter.cs
- TextUtf8RawTextWriter.cs
- DataGridViewHeaderCell.cs
- RecognizerInfo.cs
- TypeElement.cs
- CodeStatement.cs
- ExpressionLexer.cs
- _ChunkParse.cs
- SpellerInterop.cs
- SourceElementsCollection.cs