Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Data / System / Data / Filter / UnaryNode.cs / 1 / UnaryNode.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data { using System; using System.Collections.Generic; using System.Diagnostics; using System.Data.Common; using System.Data.SqlTypes; internal sealed class UnaryNode : ExpressionNode { internal readonly int op; internal ExpressionNode right; internal UnaryNode(DataTable table, int op, ExpressionNode right) : base(table) { this.op = op; this.right = right; } internal override void Bind(DataTable table, Listlist) { BindTable(table); right.Bind(table, list); } internal override object Eval() { return Eval(null, DataRowVersion.Default); } internal override object Eval(DataRow row, DataRowVersion version) { return EvalUnaryOp(op, right.Eval(row, version)); } internal override object Eval(int[] recordNos) { return right.Eval(recordNos); } private object EvalUnaryOp(int op, object vl) { object value = DBNull.Value; if (DataExpression.IsUnknown(vl)) return DBNull.Value; StorageType storageType; switch (op) { case Operators.Noop: return vl; case Operators.UnaryPlus: storageType = DataStorage.GetStorageType(vl.GetType()); if (ExpressionNode.IsNumericSql(storageType)) { return vl; } throw ExprException.TypeMismatch(this.ToString()); case Operators.Negative: // the have to be better way for doing this.. storageType = DataStorage.GetStorageType(vl.GetType()); if (ExpressionNode.IsNumericSql(storageType)) { switch(storageType) { case StorageType.Byte: value = -(Byte) vl; break; case StorageType.Int16: value = -(Int16) vl; break; case StorageType.Int32: value = -(Int32) vl; break; case StorageType.Int64: value = -(Int64) vl; break; case StorageType.Single: value = -(Single) vl; break; case StorageType.Double: value = -(Double) vl; break; case StorageType.Decimal: value = -(Decimal) vl; break; case StorageType.SqlDecimal: value = -(SqlDecimal) vl; break; case StorageType.SqlDouble: value = -(SqlDouble) vl; break; case StorageType.SqlSingle: value = -(SqlSingle) vl; break; case StorageType.SqlMoney: value = -(SqlMoney) vl; break; case StorageType.SqlInt64: value = -(SqlInt64) vl; break; case StorageType.SqlInt32: value = -(SqlInt32) vl; break; case StorageType.SqlInt16: value = -(SqlInt16) vl; break; default: Debug.Assert(false, "Missing a type conversion"); value = DBNull.Value; break; } return value; } throw ExprException.TypeMismatch(this.ToString()); case Operators.Not: if (vl is SqlBoolean){ if (((SqlBoolean)vl).IsFalse){ return SqlBoolean.True; } else if (((SqlBoolean)vl).IsTrue) { return SqlBoolean.False; } throw ExprException.UnsupportedOperator(op); // or should the result of not SQLNull be SqlNull ? } else{ if (DataExpression.ToBoolean(vl) != false) return false; return true; } default: throw ExprException.UnsupportedOperator(op); } } internal override bool IsConstant() { return(right.IsConstant()); } internal override bool IsTableConstant() { return(right.IsTableConstant()); } internal override bool HasLocalAggregate() { return(right.HasLocalAggregate()); } internal override bool HasRemoteAggregate() { return(right.HasRemoteAggregate()); } internal override bool DependsOn(DataColumn column) { return(right.DependsOn(column)); } internal override ExpressionNode Optimize() { right = right.Optimize(); if (this.IsConstant()) { object val = this.Eval(); return new ConstNode(table, ValueType.Object, val, false); } else return this; } } } // 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
- TraceListener.cs
- TimeEnumHelper.cs
- PerformanceCountersElement.cs
- AccessDataSource.cs
- PartitionerQueryOperator.cs
- TreeNodeStyleCollection.cs
- ParameterCollectionEditorForm.cs
- WebConfigurationHost.cs
- BitmapEffectInput.cs
- StorageComplexPropertyMapping.cs
- SafeNativeMethods.cs
- IncrementalCompileAnalyzer.cs
- ThreadInterruptedException.cs
- ContainerUtilities.cs
- SynchronizationContext.cs
- SqlParameterizer.cs
- ObjectAssociationEndMapping.cs
- mongolianshape.cs
- CompModSwitches.cs
- ThrowHelper.cs
- ModifierKeysConverter.cs
- AutoCompleteStringCollection.cs
- HtmlInputFile.cs
- StateElement.cs
- SessionIDManager.cs
- AppDomainUnloadedException.cs
- ChangePassword.cs
- X509RawDataKeyIdentifierClause.cs
- BitVector32.cs
- COM2FontConverter.cs
- FileIOPermission.cs
- CharacterBuffer.cs
- SqlInfoMessageEvent.cs
- ConfigurationElementCollection.cs
- ClientSettingsSection.cs
- FullTextLine.cs
- DetailsViewRow.cs
- ISFTagAndGuidCache.cs
- PropertyPathConverter.cs
- FrameworkContextData.cs
- FlowDocumentPageViewerAutomationPeer.cs
- basecomparevalidator.cs
- MergablePropertyAttribute.cs
- Operators.cs
- Compiler.cs
- TableLayoutColumnStyleCollection.cs
- OrderByBuilder.cs
- ParameterModifier.cs
- DataBoundLiteralControl.cs
- PeerNameRecordCollection.cs
- DPAPIProtectedConfigurationProvider.cs
- CapiSymmetricAlgorithm.cs
- StackOverflowException.cs
- GraphicsContext.cs
- TypeCollectionDesigner.xaml.cs
- LineUtil.cs
- AssemblyFilter.cs
- ConfigurationValidatorAttribute.cs
- SchemaElement.cs
- OpCodes.cs
- ProcessThreadCollection.cs
- HtmlForm.cs
- DATA_BLOB.cs
- PiiTraceSource.cs
- TemplatePropertyEntry.cs
- assemblycache.cs
- WebBrowserSiteBase.cs
- AssemblyNameProxy.cs
- NamespaceDisplay.xaml.cs
- SafeHandles.cs
- SpecularMaterial.cs
- XamlInt32CollectionSerializer.cs
- CompoundFileStorageReference.cs
- CellRelation.cs
- ExpandSegmentCollection.cs
- QuaternionAnimation.cs
- URIFormatException.cs
- FontFamily.cs
- ListBindableAttribute.cs
- UseManagedPresentationBindingElement.cs
- HostingPreferredMapPath.cs
- TraceEventCache.cs
- EventLogPermissionEntryCollection.cs
- ContextMenuStrip.cs
- PointIndependentAnimationStorage.cs
- Typography.cs
- EntityDataSourceView.cs
- XmlDocumentSerializer.cs
- TreeViewItem.cs
- OledbConnectionStringbuilder.cs
- MobileContainerDesigner.cs
- DragDrop.cs
- XPathMessageFilterElement.cs
- ColumnProvider.cs
- ScaleTransform.cs
- GenericWebPart.cs
- BaseParaClient.cs
- RotateTransform.cs
- WebPartEditVerb.cs
- ActivityMarkupSerializationProvider.cs