Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Common / CommandTrees / Internal / Util.cs / 1 / Util.cs
using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Globalization; using System.Data.Metadata.Edm; using System.Data.Common.CommandTrees; namespace System.Data.Common.CommandTrees.Internal { internal static class CommandTreeUtils { internal static ListCreateList (T element) { List retList = new List (); retList.Add(element); return retList; } internal static List CreateList (T element1, T element2) { List retList = new List (); retList.Add(element1); retList.Add(element2); return retList; } internal static System.Collections.ObjectModel.ReadOnlyCollection NewReadOnlyList (IList sourceList) { TElementType[] newList = new TElementType[sourceList.Count]; sourceList.CopyTo(newList, 0); return new System.Collections.ObjectModel.ReadOnlyCollection (newList); } internal static string FormatIndex(string arrayVarName, int idx) { System.Text.StringBuilder builder = new System.Text.StringBuilder(arrayVarName.Length + 10 + 2); return builder.Append(arrayVarName).Append('[').Append(idx).Append(']').ToString(); //return string.Format(CultureInfo.InvariantCulture, "{0}[{1}]", arrayVarName, idx); } internal delegate void CheckNamedListCallback (KeyValuePair element, int index); internal static void CheckNamedList (string listVarName, IList > list, bool bAllowEmpty, CheckNamedListCallback callBack) { if (null == list) { throw EntityUtil.ArgumentNull(listVarName); } if (0 == list.Count && !bAllowEmpty) { throw EntityUtil.Argument(System.Data.Entity.Strings.Cqt_Util_CheckListEmptyInvalid, listVarName); } List names = new List (); for (int idx = 0; idx < list.Count; idx++) { KeyValuePair element = list[idx]; string elementName = CommandTreeUtils.FormatIndex(listVarName, idx); // // Check Key for null/empty, Value for null // CommandTreeUtils.CheckNamed (elementName, element); // // Duplicate names are not allowed // int iNameIdx = names.IndexOf(element.Key); if (iNameIdx > -1) { throw EntityUtil.Argument ( System.Data.Entity.Strings.Cqt_Util_CheckListDuplicateName(iNameIdx, idx, element.Key), elementName ); } // // This element is valid, so invoke the callback // if (callBack != null) { callBack(element, idx); } } } internal static void CheckNamed (string strVarName, KeyValuePair element) { if (string.IsNullOrEmpty(element.Key)) { throw EntityUtil.ArgumentNull(string.Format(CultureInfo.InvariantCulture, "{0}.Key", strVarName)); } if (null == element.Value) { throw EntityUtil.ArgumentNull(string.Format(CultureInfo.InvariantCulture, "{0}.Value", strVarName)); } } internal static bool IsValidDataSpace(DataSpace dataSpace) { return (DataSpace.OSpace == dataSpace || DataSpace.CSpace == dataSpace || DataSpace.SSpace == dataSpace); } internal static bool TryGetPrimtiveTypeKind(Type clrType, out PrimitiveTypeKind primitiveTypeKind) { primitiveTypeKind = default(PrimitiveTypeKind); PrimitiveType primitiveType = null; if (ClrProviderManifest.Instance.TryGetPrimitiveType(clrType, out primitiveType)) { primitiveTypeKind = primitiveType.PrimitiveTypeKind; return true; } return false; } #region Expression Flattening Helpers static private readonly HashSet _associativeExpressionKinds = new HashSet (new DbExpressionKind[] { DbExpressionKind.Or, DbExpressionKind.And, DbExpressionKind.Plus, DbExpressionKind.Multiply}); /// /// Creates a flat list of the associative arguments. /// For example, for ((A1 + (A2 - A3)) + A4) it will create A1, (A2 - A3), A4 /// /// ///internal static IEnumerable FlattenAssociativeExpression(DbExpression expression) { return FlattenAssociativeExpression(expression.ExpressionKind, expression); } /// /// Creates a flat list of the associative arguments. /// For example, for ((A1 + (A2 - A3)) + A4) it will create A1, (A2 - A3), A4 /// Only 'unfolds' the given arguments that are of the given expression kind. /// /// /// ///internal static IEnumerable FlattenAssociativeExpression(DbExpressionKind expressionKind, params DbExpression[] arguments) { if (!_associativeExpressionKinds.Contains(expressionKind)) { return arguments; } List outputArguments = new List (); foreach (DbExpression argument in arguments) { ExtractAssociativeArguments(expressionKind, outputArguments, argument); } return outputArguments; } /// /// Helper method for FlattenAssociativeExpression. /// Creates a flat list of the associative arguments and appends to the given argument list. /// For example, for ((A1 + (A2 - A3)) + A4) it will add A1, (A2 - A3), A4 to the list. /// Only 'unfolds' the given expression if it is of the given expression kind. /// /// /// /// private static void ExtractAssociativeArguments(DbExpressionKind expressionKind, ListargumentList, DbExpression expression) { if (expression.ExpressionKind != expressionKind) { argumentList.Add(expression); return; } //All associative expressions are binary, thus we must be dealing with a DbBinaryExpresson or // a DbArithmeticExpression with 2 arguments. DbBinaryExpression binaryExpression = expression as DbBinaryExpression; if (binaryExpression != null) { ExtractAssociativeArguments(expressionKind, argumentList, binaryExpression.Left); ExtractAssociativeArguments(expressionKind, argumentList, binaryExpression.Right); return; } DbArithmeticExpression arithExpression = (DbArithmeticExpression)expression; ExtractAssociativeArguments(expressionKind, argumentList, arithExpression.Arguments[0]); ExtractAssociativeArguments(expressionKind, argumentList, arithExpression.Arguments[1]); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Globalization; using System.Data.Metadata.Edm; using System.Data.Common.CommandTrees; namespace System.Data.Common.CommandTrees.Internal { internal static class CommandTreeUtils { internal static List CreateList (T element) { List retList = new List (); retList.Add(element); return retList; } internal static List CreateList (T element1, T element2) { List retList = new List (); retList.Add(element1); retList.Add(element2); return retList; } internal static System.Collections.ObjectModel.ReadOnlyCollection NewReadOnlyList (IList sourceList) { TElementType[] newList = new TElementType[sourceList.Count]; sourceList.CopyTo(newList, 0); return new System.Collections.ObjectModel.ReadOnlyCollection (newList); } internal static string FormatIndex(string arrayVarName, int idx) { System.Text.StringBuilder builder = new System.Text.StringBuilder(arrayVarName.Length + 10 + 2); return builder.Append(arrayVarName).Append('[').Append(idx).Append(']').ToString(); //return string.Format(CultureInfo.InvariantCulture, "{0}[{1}]", arrayVarName, idx); } internal delegate void CheckNamedListCallback (KeyValuePair element, int index); internal static void CheckNamedList (string listVarName, IList > list, bool bAllowEmpty, CheckNamedListCallback callBack) { if (null == list) { throw EntityUtil.ArgumentNull(listVarName); } if (0 == list.Count && !bAllowEmpty) { throw EntityUtil.Argument(System.Data.Entity.Strings.Cqt_Util_CheckListEmptyInvalid, listVarName); } List names = new List (); for (int idx = 0; idx < list.Count; idx++) { KeyValuePair element = list[idx]; string elementName = CommandTreeUtils.FormatIndex(listVarName, idx); // // Check Key for null/empty, Value for null // CommandTreeUtils.CheckNamed (elementName, element); // // Duplicate names are not allowed // int iNameIdx = names.IndexOf(element.Key); if (iNameIdx > -1) { throw EntityUtil.Argument ( System.Data.Entity.Strings.Cqt_Util_CheckListDuplicateName(iNameIdx, idx, element.Key), elementName ); } // // This element is valid, so invoke the callback // if (callBack != null) { callBack(element, idx); } } } internal static void CheckNamed (string strVarName, KeyValuePair element) { if (string.IsNullOrEmpty(element.Key)) { throw EntityUtil.ArgumentNull(string.Format(CultureInfo.InvariantCulture, "{0}.Key", strVarName)); } if (null == element.Value) { throw EntityUtil.ArgumentNull(string.Format(CultureInfo.InvariantCulture, "{0}.Value", strVarName)); } } internal static bool IsValidDataSpace(DataSpace dataSpace) { return (DataSpace.OSpace == dataSpace || DataSpace.CSpace == dataSpace || DataSpace.SSpace == dataSpace); } internal static bool TryGetPrimtiveTypeKind(Type clrType, out PrimitiveTypeKind primitiveTypeKind) { primitiveTypeKind = default(PrimitiveTypeKind); PrimitiveType primitiveType = null; if (ClrProviderManifest.Instance.TryGetPrimitiveType(clrType, out primitiveType)) { primitiveTypeKind = primitiveType.PrimitiveTypeKind; return true; } return false; } #region Expression Flattening Helpers static private readonly HashSet _associativeExpressionKinds = new HashSet (new DbExpressionKind[] { DbExpressionKind.Or, DbExpressionKind.And, DbExpressionKind.Plus, DbExpressionKind.Multiply}); /// /// Creates a flat list of the associative arguments. /// For example, for ((A1 + (A2 - A3)) + A4) it will create A1, (A2 - A3), A4 /// /// ///internal static IEnumerable FlattenAssociativeExpression(DbExpression expression) { return FlattenAssociativeExpression(expression.ExpressionKind, expression); } /// /// Creates a flat list of the associative arguments. /// For example, for ((A1 + (A2 - A3)) + A4) it will create A1, (A2 - A3), A4 /// Only 'unfolds' the given arguments that are of the given expression kind. /// /// /// ///internal static IEnumerable FlattenAssociativeExpression(DbExpressionKind expressionKind, params DbExpression[] arguments) { if (!_associativeExpressionKinds.Contains(expressionKind)) { return arguments; } List outputArguments = new List (); foreach (DbExpression argument in arguments) { ExtractAssociativeArguments(expressionKind, outputArguments, argument); } return outputArguments; } /// /// Helper method for FlattenAssociativeExpression. /// Creates a flat list of the associative arguments and appends to the given argument list. /// For example, for ((A1 + (A2 - A3)) + A4) it will add A1, (A2 - A3), A4 to the list. /// Only 'unfolds' the given expression if it is of the given expression kind. /// /// /// /// private static void ExtractAssociativeArguments(DbExpressionKind expressionKind, ListargumentList, DbExpression expression) { if (expression.ExpressionKind != expressionKind) { argumentList.Add(expression); return; } //All associative expressions are binary, thus we must be dealing with a DbBinaryExpresson or // a DbArithmeticExpression with 2 arguments. DbBinaryExpression binaryExpression = expression as DbBinaryExpression; if (binaryExpression != null) { ExtractAssociativeArguments(expressionKind, argumentList, binaryExpression.Left); ExtractAssociativeArguments(expressionKind, argumentList, binaryExpression.Right); return; } DbArithmeticExpression arithExpression = (DbArithmeticExpression)expression; ExtractAssociativeArguments(expressionKind, argumentList, arithExpression.Arguments[0]); ExtractAssociativeArguments(expressionKind, argumentList, arithExpression.Arguments[1]); } #endregion } } // 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
- GetFileNameResult.cs
- DataGridToolTip.cs
- StorageComplexTypeMapping.cs
- WebRequestModuleElement.cs
- DateTimeConverter2.cs
- DateTimeOffsetStorage.cs
- ButtonBase.cs
- DataMisalignedException.cs
- StylusSystemGestureEventArgs.cs
- StreamingContext.cs
- NavigationWindow.cs
- EventsTab.cs
- CallbackException.cs
- RbTree.cs
- MultiAsyncResult.cs
- XamlRtfConverter.cs
- ClipboardData.cs
- ExtendedPropertyDescriptor.cs
- TextDecorationCollection.cs
- ParagraphResult.cs
- PolyQuadraticBezierSegment.cs
- SimpleExpression.cs
- WorkItem.cs
- FloatUtil.cs
- NameSpaceExtractor.cs
- KeyValueInternalCollection.cs
- odbcmetadatacolumnnames.cs
- WebPartZoneBase.cs
- FastPropertyAccessor.cs
- ResourceAttributes.cs
- Dictionary.cs
- FileInfo.cs
- KeyFrames.cs
- CatalogZone.cs
- DefaultHttpHandler.cs
- MsmqVerifier.cs
- UIAgentAsyncParams.cs
- XmlAttributeOverrides.cs
- WindowsEditBoxRange.cs
- WindowsIPAddress.cs
- SubMenuStyle.cs
- PeerNearMe.cs
- __Error.cs
- CodeIdentifier.cs
- QueryableDataSourceHelper.cs
- BaseAppDomainProtocolHandler.cs
- DeclaredTypeValidatorAttribute.cs
- ReadOnlyDataSource.cs
- ResourceType.cs
- RuntimeResourceSet.cs
- GridViewDeletedEventArgs.cs
- CommonDialog.cs
- XamlRtfConverter.cs
- SurrogateEncoder.cs
- MenuBase.cs
- InvalidDocumentContentsException.cs
- TempFiles.cs
- SplitContainer.cs
- Thread.cs
- SafeArrayTypeMismatchException.cs
- CatalogPartChrome.cs
- XamlRtfConverter.cs
- Exceptions.cs
- ipaddressinformationcollection.cs
- MemberProjectedSlot.cs
- FormsAuthenticationModule.cs
- ObfuscationAttribute.cs
- MetadataPropertyAttribute.cs
- RedirectionProxy.cs
- SqlInternalConnection.cs
- CalculatedColumn.cs
- StorageEndPropertyMapping.cs
- Certificate.cs
- OdbcFactory.cs
- XPathQueryGenerator.cs
- TextEffectCollection.cs
- AssemblyNameUtility.cs
- WindowsSecurityTokenAuthenticator.cs
- ProviderUtil.cs
- ProtocolsSection.cs
- XsdValidatingReader.cs
- SettingsBindableAttribute.cs
- SmtpNtlmAuthenticationModule.cs
- SqlTopReducer.cs
- CompoundFileStreamReference.cs
- BasicCellRelation.cs
- Iis7Helper.cs
- XmlDeclaration.cs
- DataGridAutoFormatDialog.cs
- ParsedAttributeCollection.cs
- StrongNamePublicKeyBlob.cs
- PrinterUnitConvert.cs
- MaskPropertyEditor.cs
- HttpWebResponse.cs
- HttpCacheVary.cs
- TextContainerChangeEventArgs.cs
- DecimalConverter.cs
- Events.cs
- AssociationTypeEmitter.cs
- ReferentialConstraint.cs