Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Data / System / Data / Filter / ConstNode.cs / 1 / ConstNode.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.Globalization;
internal sealed class ConstNode : ExpressionNode {
internal readonly object val;
internal ConstNode(DataTable table, ValueType type, object constant) : this(table, type, constant, true) {
}
internal ConstNode(DataTable table, ValueType type, object constant, bool fParseQuotes) : base(table) {
switch (type) {
case ValueType.Null:
this.val = DBNull.Value;
break;
case ValueType.Numeric:
this.val = SmallestNumeric(constant);
break;
case ValueType.Decimal:
this.val = SmallestDecimal(constant);
break;
case ValueType.Float:
this.val = Convert.ToDouble(constant, NumberFormatInfo.InvariantInfo);
break;
case ValueType.Bool:
this.val = Convert.ToBoolean(constant, CultureInfo.InvariantCulture);
break;
case ValueType.Str:
if (fParseQuotes) {
// replace '' with one '
this.val = ((string)constant).Replace("''", "'");
}
else {
this.val = (string)constant;
}
break;
case ValueType.Date:
this.val = DateTime.Parse((string)constant, CultureInfo.InvariantCulture);
break;
case ValueType.Object:
this.val = constant;
break;
default:
Debug.Assert(false, "NYI");
goto case ValueType.Object;
}
}
internal override void Bind(DataTable table, List list) {
BindTable(table);
}
internal override object Eval() {
return val;
}
internal override object Eval(DataRow row, DataRowVersion version) {
return Eval();
}
internal override object Eval(int[] recordNos) {
return Eval();
}
internal override bool IsConstant() {
return true;
}
internal override bool IsTableConstant() {
return true;
}
internal override bool HasLocalAggregate() {
return false;
}
internal override bool HasRemoteAggregate() {
return false;
}
internal override ExpressionNode Optimize() {
return this;
}
private object SmallestDecimal(object constant) {
if (null == constant) {
return 0d;
}
else {
string sval = (constant as string);
if (null != sval) {
decimal r12;
if (Decimal.TryParse(sval, NumberStyles.Number, NumberFormatInfo.InvariantInfo, out r12)) {
return r12;
}
double r8;
if (Double.TryParse(sval, NumberStyles.Float| NumberStyles.AllowThousands, NumberFormatInfo.InvariantInfo, out r8)) {
return r8;
}
}
else {
IConvertible convertible = (constant as IConvertible);
if (null != convertible) {
try {
return convertible.ToDecimal(NumberFormatInfo.InvariantInfo);
}
catch (System.ArgumentException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.FormatException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.InvalidCastException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.OverflowException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
try {
return convertible.ToDouble(NumberFormatInfo.InvariantInfo);
}
catch (System.ArgumentException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.FormatException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.InvalidCastException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.OverflowException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
}
}
}
return constant;
}
private object SmallestNumeric(object constant) {
if (null == constant) {
return (int)0;
}
else {
string sval = (constant as string);
if (null != sval) {
int i4;
if (Int32.TryParse(sval, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out i4)) {
return i4;
}
long i8;
if (Int64.TryParse(sval, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out i8)) {
return i8;
}
double r8;
if (Double.TryParse(sval, NumberStyles.Float| NumberStyles.AllowThousands, NumberFormatInfo.InvariantInfo, out r8)) {
return r8;
}
}
else {
IConvertible convertible = (constant as IConvertible);
if (null != convertible) {
try {
return convertible.ToInt32(NumberFormatInfo.InvariantInfo);
}
catch (System.ArgumentException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.FormatException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.InvalidCastException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.OverflowException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
try {
return convertible.ToInt64(NumberFormatInfo.InvariantInfo);
}
catch (System.ArgumentException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.FormatException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.InvalidCastException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.OverflowException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
try {
return convertible.ToDouble(NumberFormatInfo.InvariantInfo);
}
catch (System.ArgumentException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.FormatException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.InvalidCastException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
catch (System.OverflowException e) {
ExceptionBuilder.TraceExceptionWithoutRethrow(e);
}
}
}
}
return constant;
}
}
}
// 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
- WindowsToolbarAsMenu.cs
- StrokeFIndices.cs
- SessionStateContainer.cs
- DetailsViewPagerRow.cs
- BmpBitmapDecoder.cs
- StrokeRenderer.cs
- DependencyObject.cs
- SystemSounds.cs
- Point3DCollection.cs
- CodeComment.cs
- BaseValidator.cs
- ButtonRenderer.cs
- SingleAnimationUsingKeyFrames.cs
- MissingMemberException.cs
- CodeParameterDeclarationExpressionCollection.cs
- XPathNavigatorException.cs
- UserNamePasswordValidator.cs
- CheckStoreFileValidityRequest.cs
- CancellationHandler.cs
- ScriptingWebServicesSectionGroup.cs
- FeedUtils.cs
- PropertyConverter.cs
- SafeUserTokenHandle.cs
- XPathScanner.cs
- FormViewCommandEventArgs.cs
- CorrelationManager.cs
- Button.cs
- DesignerCatalogPartChrome.cs
- KeyboardInputProviderAcquireFocusEventArgs.cs
- XmlSchemaComplexContentExtension.cs
- WindowsTokenRoleProvider.cs
- ContextMarshalException.cs
- PermissionSetEnumerator.cs
- SimpleTextLine.cs
- PagedDataSource.cs
- DataGridViewTextBoxColumn.cs
- CustomErrorsSection.cs
- InternalBufferOverflowException.cs
- IisTraceListener.cs
- ReadOnlyDataSourceView.cs
- ListViewInsertedEventArgs.cs
- AvTraceFormat.cs
- KeyValuePair.cs
- GifBitmapEncoder.cs
- ItemList.cs
- OdbcCommandBuilder.cs
- ObjectListCommandCollection.cs
- Typography.cs
- HorizontalAlignConverter.cs
- AliasedSlot.cs
- CheckBoxList.cs
- SlotInfo.cs
- DoubleUtil.cs
- Grant.cs
- WebContext.cs
- XmlSchemaAll.cs
- ListViewSortEventArgs.cs
- WebPartManager.cs
- ListenerAdaptersInstallComponent.cs
- OpenTypeMethods.cs
- UpdateManifestForBrowserApplication.cs
- NullableBoolConverter.cs
- SHA1.cs
- EntityCommandExecutionException.cs
- CngKeyCreationParameters.cs
- TypeLibConverter.cs
- TableLayoutCellPaintEventArgs.cs
- BeginCreateSecurityTokenRequest.cs
- ListBoxItemAutomationPeer.cs
- VerticalAlignConverter.cs
- ReflectionHelper.cs
- SqlBooleanMismatchVisitor.cs
- BitmapEffect.cs
- SafeMILHandleMemoryPressure.cs
- loginstatus.cs
- WebPartUserCapability.cs
- FilterException.cs
- EncoderBestFitFallback.cs
- ClosureBinding.cs
- ItemCollection.cs
- DetailsViewAutoFormat.cs
- DataObjectCopyingEventArgs.cs
- NullableDecimalAverageAggregationOperator.cs
- EventLogTraceListener.cs
- Base64WriteStateInfo.cs
- _AcceptOverlappedAsyncResult.cs
- NavigatingCancelEventArgs.cs
- PropertySegmentSerializer.cs
- ServiceMetadataContractBehavior.cs
- ScrollChrome.cs
- DropSource.cs
- OlePropertyStructs.cs
- SmiGettersStream.cs
- PrintDialogException.cs
- TableLayoutRowStyleCollection.cs
- PatternMatcher.cs
- MonitorWrapper.cs
- UdpMessageProperty.cs
- EdmProperty.cs
- GridViewRow.cs