Code:
/ FX-1434 / FX-1434 / 1.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
- X509Chain.cs
- PackWebRequestFactory.cs
- CanonicalFontFamilyReference.cs
- SoapExtensionStream.cs
- controlskin.cs
- Accessible.cs
- XmlDataCollection.cs
- WebPartHeaderCloseVerb.cs
- HtmlTextViewAdapter.cs
- SettingsAttributes.cs
- _AutoWebProxyScriptEngine.cs
- RegexCaptureCollection.cs
- FocusManager.cs
- FtpWebResponse.cs
- typedescriptorpermissionattribute.cs
- ServiceChannelFactory.cs
- EntityTypeEmitter.cs
- SafeFileHandle.cs
- InputBindingCollection.cs
- RectValueSerializer.cs
- SqlCommandBuilder.cs
- WorkflowCreationContext.cs
- Compress.cs
- DataGridViewButtonCell.cs
- DocumentSequence.cs
- CodeFieldReferenceExpression.cs
- ComponentResourceKey.cs
- Socket.cs
- AttributeAction.cs
- JsonServiceDocumentSerializer.cs
- WebResourceAttribute.cs
- TextTreeRootTextBlock.cs
- DesignerForm.cs
- TextRangeSerialization.cs
- OdbcDataReader.cs
- CancelEventArgs.cs
- DBNull.cs
- PointAnimationUsingKeyFrames.cs
- ProfileEventArgs.cs
- TextEndOfLine.cs
- FileUpload.cs
- ChtmlMobileTextWriter.cs
- NamespaceCollection.cs
- XpsFont.cs
- CodeMemberMethod.cs
- HtmlShim.cs
- WebPartTransformerCollection.cs
- filewebresponse.cs
- DetailsView.cs
- BufferManager.cs
- EntityStoreSchemaFilterEntry.cs
- AnyReturnReader.cs
- OracleSqlParser.cs
- SerializationInfoEnumerator.cs
- TextAnchor.cs
- DelegatingHeader.cs
- Transform3D.cs
- TextDecorationLocationValidation.cs
- AdPostCacheSubstitution.cs
- DbInsertCommandTree.cs
- DataGridBeginningEditEventArgs.cs
- ReflectTypeDescriptionProvider.cs
- XsdDateTime.cs
- SmiRequestExecutor.cs
- UTF32Encoding.cs
- JsonXmlDataContract.cs
- XmlQueryStaticData.cs
- EntityDataSourceContextCreatedEventArgs.cs
- StandardBindingImporter.cs
- PackUriHelper.cs
- TempEnvironment.cs
- PhoneCallDesigner.cs
- UnicodeEncoding.cs
- XmlSerializationWriter.cs
- ArraySortHelper.cs
- ScrollBarAutomationPeer.cs
- ManipulationPivot.cs
- SiteIdentityPermission.cs
- ClientWindowsAuthenticationMembershipProvider.cs
- PaintValueEventArgs.cs
- XPathDescendantIterator.cs
- XmlDictionaryString.cs
- FilePrompt.cs
- HtmlElementErrorEventArgs.cs
- SchemaType.cs
- CodeLabeledStatement.cs
- PathFigureCollectionValueSerializer.cs
- ChangePasswordDesigner.cs
- ArraySet.cs
- BaseInfoTable.cs
- X509RawDataKeyIdentifierClause.cs
- MDIClient.cs
- CounterCreationData.cs
- x509store.cs
- SessionStateModule.cs
- UIElementParaClient.cs
- PlatformCulture.cs
- SqlStream.cs
- PointConverter.cs
- GeometryDrawing.cs