Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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.
//
// [....]
// [....]
// [....]
//-----------------------------------------------------------------------------
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- precedingsibling.cs
- DocumentReference.cs
- IconBitmapDecoder.cs
- AnnotationResource.cs
- ProviderConnectionPoint.cs
- ManagementScope.cs
- DoubleLinkListEnumerator.cs
- PackWebRequestFactory.cs
- ReadOnlyDictionary.cs
- CorePropertiesFilter.cs
- PartitionResolver.cs
- SafeCryptContextHandle.cs
- SmiRequestExecutor.cs
- ConnectionInterfaceCollection.cs
- NavigateEvent.cs
- ResourcePart.cs
- FormViewDeletedEventArgs.cs
- StateManager.cs
- CreateUserWizardStep.cs
- XmlEntity.cs
- Polyline.cs
- SymDocumentType.cs
- ColorKeyFrameCollection.cs
- MethodMessage.cs
- SetterBaseCollection.cs
- EventItfInfo.cs
- User.cs
- ApplicationSettingsBase.cs
- SpotLight.cs
- UriTemplateVariablePathSegment.cs
- GregorianCalendarHelper.cs
- SqlCharStream.cs
- Border.cs
- BufferedOutputStream.cs
- ConstraintCollection.cs
- PropertyEntry.cs
- Cursors.cs
- HtmlControlPersistable.cs
- ConstNode.cs
- BodyGlyph.cs
- DataGridViewRowPrePaintEventArgs.cs
- ObjectReaderCompiler.cs
- Empty.cs
- TextTreeUndoUnit.cs
- LabelAutomationPeer.cs
- DataServiceProcessingPipeline.cs
- SR.cs
- IncrementalReadDecoders.cs
- InfoCardSymmetricCrypto.cs
- WpfGeneratedKnownTypes.cs
- oledbconnectionstring.cs
- StringSource.cs
- SecurityContext.cs
- PageSettings.cs
- FacetDescriptionElement.cs
- EventLogPermissionAttribute.cs
- ConstructorExpr.cs
- CanonicalXml.cs
- RequiredAttributeAttribute.cs
- LayoutEvent.cs
- ToolBarDesigner.cs
- RectangleGeometry.cs
- GeneralTransform3D.cs
- ReachIDocumentPaginatorSerializerAsync.cs
- TypeUtil.cs
- CorrelationHandle.cs
- StrongNameMembershipCondition.cs
- Application.cs
- DropAnimation.xaml.cs
- ChildrenQuery.cs
- MaterializeFromAtom.cs
- VisualTarget.cs
- DataGridViewCellValueEventArgs.cs
- ChooseAction.cs
- ItemMap.cs
- InternalCache.cs
- Executor.cs
- Version.cs
- FileLogRecordHeader.cs
- FileSecurity.cs
- BamlStream.cs
- FunctionNode.cs
- HttpWebRequest.cs
- SafeRightsManagementHandle.cs
- AtomicFile.cs
- WebPartsPersonalizationAuthorization.cs
- CommonGetThemePartSize.cs
- TextBlock.cs
- DeflateEmulationStream.cs
- TransformerInfoCollection.cs
- UserControl.cs
- ButtonBase.cs
- namescope.cs
- FontStretch.cs
- CqlQuery.cs
- AttachedPropertyDescriptor.cs
- PageAdapter.cs
- CalendarDayButton.cs
- SegmentTree.cs
- WebBrowserNavigatingEventHandler.cs