Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / System / data / design / QueryHandler.cs / 6 / QueryHandler.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All Rights Reserved. // Information Contained Herein is Proprietary and Confidential. // //----------------------------------------------------------------------------- namespace System.Data.Design { using System; using System.CodeDom; using System.CodeDom.Compiler; using System.ComponentModel.Design; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using System.Diagnostics; internal class QueryHandler { internal const string tableParameterName = "dataTable"; internal const string dataSetParameterName = "dataSet"; private TypedDataSourceCodeGenerator codeGenerator = null; private DesignTable designTable = null; private bool declarationsOnly = false; private bool languageSupportsNullables = false; internal bool DeclarationsOnly { get { return this.declarationsOnly; } set { this.declarationsOnly = value; } } internal QueryHandler(TypedDataSourceCodeGenerator codeGenerator, DesignTable designTable) { this.codeGenerator = codeGenerator; this.designTable = designTable; this.languageSupportsNullables = this.codeGenerator.CodeProvider.Supports(GeneratorSupport.GenericTypeReference); } internal QueryHandler(CodeDomProvider codeProvider, DesignTable designTable) { this.codeGenerator = new TypedDataSourceCodeGenerator(); this.codeGenerator.CodeProvider = codeProvider; this.designTable = designTable; this.languageSupportsNullables = this.codeGenerator.CodeProvider.Supports(GeneratorSupport.GenericTypeReference); } internal void AddQueriesToDataComponent(CodeTypeDeclaration classDeclaration) { AddMainQueriesToDataComponent(classDeclaration); AddSecondaryQueriesToDataComponent(classDeclaration); AddUpdateQueriesToDataComponent(classDeclaration); AddFunctionsToDataComponent(classDeclaration, false); } private void AddMainQueriesToDataComponent(CodeTypeDeclaration classDeclaration) { if(designTable == null) { throw new InternalException("Design Table should not be null."); } if(designTable.MainSource != null) { QueryGenerator queryGenerator = new QueryGenerator(codeGenerator); queryGenerator.DeclarationOnly = this.declarationsOnly; queryGenerator.MethodSource = designTable.MainSource as DbSource; queryGenerator.CommandIndex = 0; queryGenerator.DesignTable = designTable; if(queryGenerator.MethodSource.Connection != null) { queryGenerator.ProviderFactory = ProviderManager.GetFactory(queryGenerator.MethodSource.Connection.Provider); } else if (designTable.Connection != null) { queryGenerator.ProviderFactory = ProviderManager.GetFactory(designTable.Connection.Provider); } else { return; } if(queryGenerator.MethodSource.QueryType == QueryType.Rowset && queryGenerator.MethodSource.CommandOperation == CommandOperation.Select) { if(queryGenerator.MethodSource.GenerateMethods == GenerateMethodTypes.Fill || queryGenerator.MethodSource.GenerateMethods == GenerateMethodTypes.Both) { queryGenerator.MethodName = designTable.MainSource.GeneratorSourceName; this.GenerateQueries(classDeclaration, queryGenerator); if(queryGenerator.MethodSource.GeneratePagingMethods) { queryGenerator.MethodName = designTable.MainSource.GeneratorSourceNameForPaging; queryGenerator.GeneratePagingMethod = true; this.GenerateQueries(classDeclaration, queryGenerator); queryGenerator.GeneratePagingMethod = false; } } if(queryGenerator.MethodSource.GenerateMethods == GenerateMethodTypes.Get || queryGenerator.MethodSource.GenerateMethods == GenerateMethodTypes.Both) { queryGenerator.GenerateGetMethod = true; queryGenerator.MethodName = designTable.MainSource.GeneratorGetMethodName; this.GenerateQueries(classDeclaration, queryGenerator); if(queryGenerator.MethodSource.GeneratePagingMethods) { queryGenerator.MethodName = designTable.MainSource.GeneratorGetMethodNameForPaging; queryGenerator.GeneratePagingMethod = true; this.GenerateQueries(classDeclaration, queryGenerator); queryGenerator.GeneratePagingMethod = false; } } } } } private void AddSecondaryQueriesToDataComponent(CodeTypeDeclaration classDeclaration) { if(designTable == null) { throw new InternalException("Design Table should not be null."); } if(designTable.Sources == null) { return; } QueryGenerator queryGenerator = new QueryGenerator(codeGenerator); queryGenerator.DeclarationOnly = this.declarationsOnly; queryGenerator.DesignTable = designTable; if(designTable.Connection != null) { queryGenerator.ProviderFactory = ProviderManager.GetFactory(designTable.Connection.Provider); } int cmdIndex = 1; foreach(Source source in designTable.Sources) { queryGenerator.MethodSource = source as DbSource; queryGenerator.CommandIndex = cmdIndex++; if(queryGenerator.MethodSource.QueryType != QueryType.Rowset || queryGenerator.MethodSource.CommandOperation != CommandOperation.Select) { continue; } if(queryGenerator.MethodSource.Connection != null) { queryGenerator.ProviderFactory = ProviderManager.GetFactory(designTable.Connection.Provider); } if(queryGenerator.MethodSource.GenerateMethods == GenerateMethodTypes.Fill || queryGenerator.MethodSource.GenerateMethods == GenerateMethodTypes.Both) { queryGenerator.GenerateGetMethod = false; queryGenerator.MethodName = source.GeneratorSourceName; this.GenerateQueries(classDeclaration, queryGenerator); if(queryGenerator.MethodSource.GeneratePagingMethods) { queryGenerator.MethodName = source.GeneratorSourceNameForPaging; queryGenerator.GeneratePagingMethod = true; this.GenerateQueries(classDeclaration, queryGenerator); queryGenerator.GeneratePagingMethod = false; } } if(queryGenerator.MethodSource.GenerateMethods == GenerateMethodTypes.Get || queryGenerator.MethodSource.GenerateMethods == GenerateMethodTypes.Both) { queryGenerator.GenerateGetMethod = true; queryGenerator.MethodName = source.GeneratorGetMethodName; this.GenerateQueries(classDeclaration, queryGenerator); if(queryGenerator.MethodSource.GeneratePagingMethods) { queryGenerator.MethodName = source.GeneratorGetMethodNameForPaging; queryGenerator.GeneratePagingMethod = true; this.GenerateQueries(classDeclaration, queryGenerator); queryGenerator.GeneratePagingMethod = false; } } } } internal void AddFunctionsToDataComponent(CodeTypeDeclaration classDeclaration, bool isFunctionsDataComponent) { if(designTable == null) { throw new InternalException("Design Table should not be null."); } if(!isFunctionsDataComponent) { if(designTable.MainSource != null && ( ((DbSource) designTable.MainSource).QueryType != QueryType.Rowset || ((DbSource) designTable.MainSource).CommandOperation != CommandOperation.Select ) ) { AddFunctionToDataComponent(classDeclaration, (DbSource) designTable.MainSource, 0, isFunctionsDataComponent); } } if(designTable.Sources != null) { int cmdIndex = 1; if(isFunctionsDataComponent) { cmdIndex = 0; } foreach(Source source in designTable.Sources) { if( ((DbSource) source).QueryType != QueryType.Rowset || ((DbSource) source).CommandOperation != CommandOperation.Select ) { AddFunctionToDataComponent(classDeclaration, (DbSource)source, cmdIndex, isFunctionsDataComponent); } cmdIndex++; } } } private void AddFunctionToDataComponent(CodeTypeDeclaration classDeclaration, DbSource dbSource, int commandIndex, bool isFunctionsDataComponent) { if(this.DeclarationsOnly && dbSource.Modifier != MemberAttributes.Public) { // Don't generate method in interface if the function is not public return; } FunctionGenerator functionGenerator = new FunctionGenerator(this.codeGenerator); functionGenerator.DeclarationOnly = this.declarationsOnly; functionGenerator.MethodSource = dbSource; functionGenerator.CommandIndex = commandIndex; functionGenerator.DesignTable = this.designTable; functionGenerator.IsFunctionsDataComponent = isFunctionsDataComponent; if(functionGenerator.MethodSource.Connection != null) { functionGenerator.ProviderFactory = ProviderManager.GetFactory(functionGenerator.MethodSource.Connection.Provider); } else if (designTable.Connection != null) { functionGenerator.ProviderFactory = ProviderManager.GetFactory(designTable.Connection.Provider); } else { return; } functionGenerator.MethodName = dbSource.GeneratorSourceName; functionGenerator.ParameterOption = this.languageSupportsNullables ? ParameterGenerationOption.ClrTypes : ParameterGenerationOption.Objects; CodeMemberMethod currentMethod = functionGenerator.Generate(); if(currentMethod != null) { classDeclaration.Members.Add(currentMethod); } // if(functionGenerator.GenerateOverloads) { // functionGenerator.ParameterOption = ParameterGenerationOption.Objects; // currentMethod = functionGenerator.Generate(); // if(currentMethod != null) { // classDeclaration.Members.Add(currentMethod); // } // } } private void AddUpdateQueriesToDataComponent( CodeTypeDeclaration classDeclaration ) { Debug.Assert( this.codeGenerator != null ); AddUpdateQueriesToDataComponent( classDeclaration, this.codeGenerator.DataSourceName, this.codeGenerator.CodeProvider ); } internal void AddUpdateQueriesToDataComponent(CodeTypeDeclaration classDeclaration, string dataSourceClassName, CodeDomProvider codeProvider) { if(designTable == null) { throw new InternalException("Design Table should not be null."); } if( StringUtil.EmptyOrSpace(dataSourceClassName) ) { throw new InternalException("Data source class name should not be empty"); } if (designTable.HasAnyUpdateCommand) { UpdateCommandGenerator commandGenerator = new UpdateCommandGenerator(this.codeGenerator); commandGenerator.CodeProvider = codeProvider; commandGenerator.DeclarationOnly = this.declarationsOnly; commandGenerator.MethodSource = designTable.MainSource as DbSource; commandGenerator.DesignTable = designTable; if (designTable.Connection != null) { commandGenerator.ProviderFactory = ProviderManager.GetFactory(designTable.Connection.Provider); } else if (!this.declarationsOnly) { throw new InternalException("DesignTable.Connection should not be null to generate update query statements."); } CodeMemberMethod currentMethod = null; commandGenerator.MethodName = DataComponentNameHandler.UpdateMethodName; commandGenerator.ActiveCommand = commandGenerator.MethodSource.UpdateCommand; commandGenerator.MethodType = MethodTypeEnum.GenericUpdate; commandGenerator.UpdateParameterTypeReference = CodeGenHelper.GlobalType(typeof(System.Data.DataTable)); commandGenerator.UpdateParameterName = tableParameterName; commandGenerator.UpdateParameterTypeName = CodeGenHelper.GetTypeName(codeProvider, dataSourceClassName, this.designTable.GeneratorTableClassName); // DDBugs 126914: Use fully-qualified names for datasets if (this.codeGenerator.DataSetNamespace != null) { commandGenerator.UpdateParameterTypeName = CodeGenHelper.GetTypeName(this.codeGenerator.CodeProvider, this.codeGenerator.DataSetNamespace, commandGenerator.UpdateParameterTypeName); } currentMethod = commandGenerator.Generate(); if (currentMethod != null) { classDeclaration.Members.Add(currentMethod); } commandGenerator.UpdateParameterTypeReference = CodeGenHelper.GlobalType(typeof(System.Data.DataSet)); commandGenerator.UpdateParameterName = dataSetParameterName; commandGenerator.UpdateParameterTypeName = dataSourceClassName; // DDBugs 126914: Use fully-qualified names for datasets if (this.codeGenerator.DataSetNamespace != null) { commandGenerator.UpdateParameterTypeName = CodeGenHelper.GetTypeName(this.codeGenerator.CodeProvider, this.codeGenerator.DataSetNamespace, commandGenerator.UpdateParameterTypeName); } currentMethod = commandGenerator.Generate(); if (currentMethod != null) { classDeclaration.Members.Add(currentMethod); } commandGenerator.UpdateParameterTypeReference = CodeGenHelper.GlobalType(typeof(System.Data.DataRow)); commandGenerator.UpdateParameterName = "dataRow"; commandGenerator.UpdateParameterTypeName = null; currentMethod = commandGenerator.Generate(); if (currentMethod != null) { classDeclaration.Members.Add(currentMethod); } commandGenerator.UpdateParameterTypeReference = CodeGenHelper.GlobalType(typeof(System.Data.DataRow), 1); commandGenerator.UpdateParameterName = "dataRows"; commandGenerator.UpdateParameterTypeName = null; currentMethod = commandGenerator.Generate(); if (currentMethod != null) { classDeclaration.Members.Add(currentMethod); } if (commandGenerator.MethodSource.GenerateShortCommands) { commandGenerator.MethodType = MethodTypeEnum.ColumnParameters; commandGenerator.ActiveCommand = commandGenerator.MethodSource.DeleteCommand; if (commandGenerator.ActiveCommand != null) { commandGenerator.MethodName = DataComponentNameHandler.DeleteMethodName; commandGenerator.UpdateCommandName = "DeleteCommand"; commandGenerator.ParameterOption = this.languageSupportsNullables ? ParameterGenerationOption.ClrTypes : ParameterGenerationOption.Objects; currentMethod = commandGenerator.Generate(); if (currentMethod != null) { classDeclaration.Members.Add(currentMethod); } } commandGenerator.ActiveCommand = commandGenerator.MethodSource.InsertCommand; if (commandGenerator.ActiveCommand != null) { commandGenerator.MethodName = DataComponentNameHandler.InsertMethodName; commandGenerator.UpdateCommandName = "InsertCommand"; commandGenerator.ParameterOption = this.languageSupportsNullables ? ParameterGenerationOption.ClrTypes : ParameterGenerationOption.Objects; currentMethod = commandGenerator.Generate(); if (currentMethod != null) { classDeclaration.Members.Add(currentMethod); } } commandGenerator.ActiveCommand = commandGenerator.MethodSource.UpdateCommand; if (commandGenerator.ActiveCommand != null) { commandGenerator.MethodName = DataComponentNameHandler.UpdateMethodName; commandGenerator.UpdateCommandName = "UpdateCommand"; commandGenerator.ParameterOption = this.languageSupportsNullables ? ParameterGenerationOption.ClrTypes : ParameterGenerationOption.Objects; currentMethod = commandGenerator.Generate(); if (currentMethod != null) { classDeclaration.Members.Add(currentMethod); // DevDiv Bugs # 75077 -- Adding an overload Update Method // DevDiv Bugs # 106672 -- Always generate overload Update Method now currentMethod = null; commandGenerator.GenerateOverloadWithoutCurrentPKParameters = true; try { currentMethod = commandGenerator.Generate(); } finally { commandGenerator.GenerateOverloadWithoutCurrentPKParameters = false; } if (currentMethod != null) { classDeclaration.Members.Add(currentMethod); } } } } } } private void GenerateQueries(CodeTypeDeclaration classDeclaration, QueryGenerator queryGenerator) { CodeMemberMethod currentMethod = null; if(queryGenerator.DeclarationOnly) { // Don't generate the method for the interface if the query is not supposed to be public if(!queryGenerator.GenerateGetMethod && queryGenerator.MethodSource.Modifier != MemberAttributes.Public) { return; } if(queryGenerator.GenerateGetMethod && queryGenerator.MethodSource.GetMethodModifier != MemberAttributes.Public) { return; } } queryGenerator.ContainerParameterType = typeof(System.Data.DataTable); queryGenerator.ContainerParameterTypeName = CodeGenHelper.GetTypeName(this.codeGenerator.CodeProvider, this.codeGenerator.DataSourceName, this.designTable.GeneratorTableClassName); // DDBugs 126914: Use fully-qualified names for datasets if (this.codeGenerator.DataSetNamespace != null) { queryGenerator.ContainerParameterTypeName = CodeGenHelper.GetTypeName(this.codeGenerator.CodeProvider, this.codeGenerator.DataSetNamespace, queryGenerator.ContainerParameterTypeName); } queryGenerator.ContainerParameterName = tableParameterName; queryGenerator.ParameterOption = this.languageSupportsNullables ? ParameterGenerationOption.ClrTypes : ParameterGenerationOption.Objects; currentMethod = queryGenerator.Generate(); if(currentMethod != null) { classDeclaration.Members.Add(currentMethod); } } } } // 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
- ObjectSet.cs
- FastEncoder.cs
- ToolStripContentPanel.cs
- DataTableClearEvent.cs
- BooleanAnimationBase.cs
- FileIOPermission.cs
- ControlEvent.cs
- EndpointInstanceProvider.cs
- Tile.cs
- BinaryCommonClasses.cs
- SchemaCollectionCompiler.cs
- DataGridViewRowCollection.cs
- ObjectDisposedException.cs
- RegexRunner.cs
- DataShape.cs
- NumberFormatter.cs
- ComponentCommands.cs
- Int16AnimationBase.cs
- EditorZoneDesigner.cs
- LoginUtil.cs
- SqlDataSourceConfigureFilterForm.cs
- HtmlEmptyTagControlBuilder.cs
- AppDomainShutdownMonitor.cs
- EncryptedType.cs
- XmlQuerySequence.cs
- LocatorBase.cs
- __Error.cs
- DefaultMemberAttribute.cs
- QueueException.cs
- IdnMapping.cs
- RemotingServices.cs
- MsmqIntegrationBindingElement.cs
- DropShadowEffect.cs
- MD5.cs
- ThreadPool.cs
- InvalidOleVariantTypeException.cs
- KnownIds.cs
- TokenCreationParameter.cs
- ServiceModelStringsVersion1.cs
- PropertyInformation.cs
- NullableBoolConverter.cs
- MultiView.cs
- HelpInfo.cs
- Attribute.cs
- SiteMap.cs
- XmlSchemaNotation.cs
- EditorZoneBase.cs
- CharEntityEncoderFallback.cs
- RuleValidation.cs
- ErrorFormatter.cs
- IISUnsafeMethods.cs
- AsymmetricKeyExchangeFormatter.cs
- ContentElementCollection.cs
- XPathItem.cs
- DesignOnlyAttribute.cs
- PagePropertiesChangingEventArgs.cs
- WindowsClaimSet.cs
- DelayedRegex.cs
- XmlToDatasetMap.cs
- unsafenativemethodsother.cs
- MemberPath.cs
- Converter.cs
- SqlBulkCopyColumnMappingCollection.cs
- XmlDataImplementation.cs
- StringUtil.cs
- CompareValidator.cs
- ISFTagAndGuidCache.cs
- OleDbRowUpdatingEvent.cs
- TextMetrics.cs
- DataGridState.cs
- TimerEventSubscription.cs
- CompoundFileDeflateTransform.cs
- ScriptReferenceBase.cs
- OdbcConnectionOpen.cs
- PasswordBox.cs
- ToolStripItemBehavior.cs
- ListView.cs
- HMACSHA1.cs
- WhiteSpaceTrimStringConverter.cs
- DrawingContext.cs
- CaseDesigner.xaml.cs
- XmlKeywords.cs
- AttributeCollection.cs
- DataMemberFieldEditor.cs
- CodeNamespaceImportCollection.cs
- ColorConvertedBitmap.cs
- ArgumentNullException.cs
- ViewManager.cs
- TypeBinaryExpression.cs
- ByteStreamGeometryContext.cs
- DoubleAnimation.cs
- __Filters.cs
- ThemeDirectoryCompiler.cs
- DeobfuscatingStream.cs
- HandlerWithFactory.cs
- ProfilePropertyMetadata.cs
- QuadTree.cs
- DataSourceXmlSerializationAttribute.cs
- ApplicationBuildProvider.cs
- DesignerVerbCollection.cs