Code:
/ FX-1434 / FX-1434 / 1.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
- EntityClassGenerator.cs
- QuotedPrintableStream.cs
- ActivityInstanceReference.cs
- DesignerAttribute.cs
- KeyPressEvent.cs
- AsymmetricKeyExchangeFormatter.cs
- TextBox.cs
- RequestQueue.cs
- IteratorFilter.cs
- DocComment.cs
- ApplicationSecurityManager.cs
- ServicePoint.cs
- WebPartDeleteVerb.cs
- RenderDataDrawingContext.cs
- HtmlListAdapter.cs
- CodeGenerator.cs
- SerialErrors.cs
- StrokeNodeOperations.cs
- SplitterEvent.cs
- RtfToken.cs
- DataControlField.cs
- ConfigurationManagerInternal.cs
- Highlights.cs
- XmlRawWriter.cs
- HostingEnvironment.cs
- XmlStrings.cs
- DeploymentExceptionMapper.cs
- DotExpr.cs
- OdbcUtils.cs
- LineServicesCallbacks.cs
- DoubleLinkListEnumerator.cs
- FileUtil.cs
- PropertyKey.cs
- HandleCollector.cs
- WebPartConnectionsConnectVerb.cs
- WorkerRequest.cs
- WindowAutomationPeer.cs
- AVElementHelper.cs
- DateTime.cs
- ReachSerializableProperties.cs
- CombinedGeometry.cs
- WebPartConnectionsConfigureVerb.cs
- PeerNeighborManager.cs
- XmlSigningNodeWriter.cs
- ListBoxDesigner.cs
- HandleExceptionArgs.cs
- ListSortDescriptionCollection.cs
- UndirectedGraph.cs
- TextTrailingCharacterEllipsis.cs
- DescendantQuery.cs
- WebPartManager.cs
- EnumBuilder.cs
- MiniParameterInfo.cs
- TableLayoutStyle.cs
- PropagatorResult.cs
- MessageParameterAttribute.cs
- ServicePoint.cs
- Vector3DKeyFrameCollection.cs
- BinHexEncoder.cs
- __FastResourceComparer.cs
- PasswordBoxAutomationPeer.cs
- ReadingWritingEntityEventArgs.cs
- DockingAttribute.cs
- RuntimeEnvironment.cs
- XsdDuration.cs
- SmtpNetworkElement.cs
- EventLogPermissionEntry.cs
- ReadOnlyDictionary.cs
- PeerTransportListenAddressValidatorAttribute.cs
- GifBitmapDecoder.cs
- FormViewRow.cs
- SQLStringStorage.cs
- SQLByte.cs
- DirectoryLocalQuery.cs
- sqlmetadatafactory.cs
- CompatibleIComparer.cs
- RSAOAEPKeyExchangeFormatter.cs
- EncryptedType.cs
- PowerStatus.cs
- SecureEnvironment.cs
- SQLBoolean.cs
- AnnotationResourceChangedEventArgs.cs
- Material.cs
- GuidelineCollection.cs
- UserPreference.cs
- CodeTypeDeclarationCollection.cs
- EDesignUtil.cs
- PasswordBox.cs
- SecuritySessionServerSettings.cs
- XmlArrayAttribute.cs
- ExpressionBindingCollection.cs
- DocumentReference.cs
- Number.cs
- ChangeBlockUndoRecord.cs
- BinaryMessageEncodingBindingElement.cs
- RightsManagementInformation.cs
- TextElementEnumerator.cs
- ScriptReferenceBase.cs
- WebPartDesigner.cs
- ToolStripControlHost.cs