Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / Filter / UnaryNode.cs / 1305376 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- UIElementCollection.cs
- Timer.cs
- AudioSignalProblemOccurredEventArgs.cs
- ProcessHostServerConfig.cs
- TraceUtility.cs
- ExpressionConverter.cs
- SmiConnection.cs
- SortedList.cs
- ChannelManager.cs
- WebServiceTypeData.cs
- SecurityTokenTypes.cs
- Converter.cs
- DbMetaDataCollectionNames.cs
- shaperfactory.cs
- ErrorHandlerFaultInfo.cs
- WorkflowTraceTransfer.cs
- ZipIOExtraFieldPaddingElement.cs
- SingleObjectCollection.cs
- GridViewRowCollection.cs
- ReadOnlyAttribute.cs
- DataDocumentXPathNavigator.cs
- PageAdapter.cs
- TableColumn.cs
- SystemFonts.cs
- String.cs
- HtmlInputSubmit.cs
- SymbolUsageManager.cs
- DesignerActionUIStateChangeEventArgs.cs
- ScrollProperties.cs
- StylusTip.cs
- PieceNameHelper.cs
- XmlReflectionMember.cs
- EntityDataSourceChangedEventArgs.cs
- LineServicesRun.cs
- AppDomainFactory.cs
- GB18030Encoding.cs
- CompilerParameters.cs
- StateChangeEvent.cs
- XMLSchema.cs
- ConstraintEnumerator.cs
- WhileDesigner.cs
- M3DUtil.cs
- ColumnMapVisitor.cs
- BaseUriHelper.cs
- HttpListenerRequest.cs
- DurableInstancingOptions.cs
- WindowProviderWrapper.cs
- ObjectStateEntry.cs
- InputLanguageManager.cs
- RawUIStateInputReport.cs
- CacheDependency.cs
- ViewGenerator.cs
- HwndHostAutomationPeer.cs
- DataKey.cs
- PropertyTabAttribute.cs
- IIS7WorkerRequest.cs
- ScriptManagerProxy.cs
- Dictionary.cs
- ViewKeyConstraint.cs
- BufferedReceiveManager.cs
- VScrollBar.cs
- SelectionEditingBehavior.cs
- ProfilePropertySettings.cs
- FileNotFoundException.cs
- LogWriteRestartAreaAsyncResult.cs
- Clause.cs
- DurationConverter.cs
- PermissionSet.cs
- SecurityRuntime.cs
- SqlConnectionPoolProviderInfo.cs
- HwndSourceKeyboardInputSite.cs
- HtmlInputPassword.cs
- CompilerInfo.cs
- TimeSpanOrInfiniteValidator.cs
- ApplicationGesture.cs
- Queue.cs
- WebPartsSection.cs
- SqlHelper.cs
- ControlHelper.cs
- BreakRecordTable.cs
- EditingCoordinator.cs
- sortedlist.cs
- ResourceAttributes.cs
- TextRangeSerialization.cs
- ReferenceConverter.cs
- EntityDataSourceContextCreatedEventArgs.cs
- CompressedStack.cs
- BatchParser.cs
- Rfc2898DeriveBytes.cs
- DNS.cs
- FixedSOMTableRow.cs
- InternalSafeNativeMethods.cs
- EventLogPermissionHolder.cs
- IUnknownConstantAttribute.cs
- XhtmlBasicListAdapter.cs
- SafeFileMappingHandle.cs
- SystemColors.cs
- BoolExpression.cs
- followingsibling.cs
- ListViewPagedDataSource.cs