private static OracleTypeCollection MapCollectionTypeAttributes(IDataRecord reader, IDictionary <OracleObjectIdentifier, OracleSchemaObject> allObjects) { var typeFullyQualifiedName = OracleObjectIdentifier.Create(QualifyStringObject(reader["OWNER"]), QualifyStringObject(reader["TYPE_NAME"])); if (!allObjects.TryGetValue(typeFullyQualifiedName, out OracleSchemaObject typeObject)) { return(null); } var collectionType = (OracleTypeCollection)typeObject; var elementTypeIdentifier = OracleObjectIdentifier.Create(QualifyStringObject(reader["ELEM_TYPE_OWNER"]), QualifyStringObject(reader["ELEM_TYPE_NAME"])); var dataType = new OracleDataType { FullyQualifiedName = elementTypeIdentifier, Length = OracleReaderValueConvert.ToInt32(reader["LENGTH"]), Precision = OracleReaderValueConvert.ToInt32(reader["PRECISION"]), Scale = OracleReaderValueConvert.ToInt32(reader["SCALE"]) }; ResolveDataUnit(dataType, reader["CHARACTER_SET_NAME"]); collectionType.ElementDataType = dataType; collectionType.CollectionType = (string)reader["COLL_TYPE"] == OracleTypeCollection.OracleCollectionTypeNestedTable ? OracleCollectionType.Table : OracleCollectionType.VarryingArray; collectionType.UpperBound = OracleReaderValueConvert.ToInt32(reader["UPPER_BOUND"]); return(collectionType); }
public SubPartitionDetailDataProviderInternal(SubPartitionDetailsModel dataModel, bool includeInMemorySettings) : base(null) { _subPartitionOwner = dataModel.Owner; _subPartitionDataModel = dataModel; _includeInMemorySettings = includeInMemorySettings; }
private static KeyValuePair <OracleObjectIdentifier, OracleColumn> MapTableColumn(IDataRecord reader, Version version) { var dataTypeIdentifier = OracleObjectIdentifier.Create(QualifyStringObject(reader["DATA_TYPE_OWNER"]), QualifyStringObject(reader["DATA_TYPE"])); var dataType = new OracleDataType { FullyQualifiedName = dataTypeIdentifier, Length = Convert.ToInt32(reader["DATA_LENGTH"]), Precision = OracleReaderValueConvert.ToInt32(reader["DATA_PRECISION"]), Scale = OracleReaderValueConvert.ToInt32(reader["DATA_SCALE"]) }; ResolveDataUnit(dataType, reader["CHAR_USED"]); var column = new OracleColumn { Name = QualifyStringObject(reader["COLUMN_NAME"]), DataType = dataType, Nullable = String.Equals((string)reader["NULLABLE"], "Y"), Virtual = String.Equals((string)reader["VIRTUAL_COLUMN"], "YES"), DefaultValue = OracleReaderValueConvert.ToString(reader["DATA_DEFAULT"]), CharacterSize = Convert.ToInt32(reader["CHAR_LENGTH"]), UserGenerated = true }; if (version.Major >= 12) { column.Hidden = String.Equals((string)reader["HIDDEN_COLUMN"], "YES"); column.UserGenerated = String.Equals((string)reader["USER_GENERATED"], "YES"); } return(new KeyValuePair <OracleObjectIdentifier, OracleColumn>( OracleObjectIdentifier.Create(QualifyStringObject(reader["OWNER"]), QualifyStringObject(reader["TABLE_NAME"])), column)); }
private async Task <IReadOnlyList <OracleDecimal> > GetCollectionIndexes(OracleObjectIdentifier objectIdentifier, string variable, CancellationToken cancellationToken) { _debuggerSessionCommand.CommandText = OracleDatabaseCommands.GetDebuggerCollectionIndexes; _debuggerSessionCommand.Parameters.Clear(); _debuggerSessionCommand.AddSimpleParameter("RESULT", null, TerminalValues.Number); _debuggerSessionCommand.AddSimpleParameter("OWNER", objectIdentifier.HasOwner ? objectIdentifier.NormalizedOwner.Trim('"') : null); _debuggerSessionCommand.AddSimpleParameter("NAME", String.IsNullOrEmpty(objectIdentifier.Name) ? null : objectIdentifier.NormalizedName.Trim('"')); _debuggerSessionCommand.AddSimpleParameter("VARIABLE_NAME", variable, TerminalValues.Varchar2); var entriesParameter = _debuggerSessionCommand.CreateParameter(); entriesParameter.Direction = ParameterDirection.Output; entriesParameter.OracleDbType = OracleDbType.Decimal; entriesParameter.CollectionType = OracleCollectionType.PLSQLAssociativeArray; entriesParameter.ParameterName = "ENTRIES"; entriesParameter.Size = 32767; entriesParameter.Value = new int[0]; _debuggerSessionCommand.Parameters.Add(entriesParameter); await _debuggerSessionCommand.ExecuteNonQueryAsynchronous(cancellationToken); var result = (ValueInfoStatus)GetValueFromOracleDecimal(_debuggerSessionCommand.Parameters["RESULT"]); var entries = (OracleDecimal[])entriesParameter.Value; TraceLog.WriteLine($"Get indexes '{variable}' result: {result}; indexes retrieved: {entries.Length}"); return(entries); }
public async Task<string> ExtractViewTextAsync(OracleObjectIdentifier viewIdentifier, CancellationToken cancellationToken) { var dataModel = new ViewDetailModel(); var viewDetailsDataProvider = new ViewDetailDataProvider(dataModel, viewIdentifier, _databaseModel.Version); await UpdateDataModel(cancellationToken, viewDetailsDataProvider); return dataModel.Text; }
public ColumnDetailInMemoryDataProvider(ColumnDetailsModel dataModel, OracleObjectIdentifier objectIdentifier, string columnName, Version oracleVersion) : base(dataModel) { _objectIdentifier = objectIdentifier; _columnName = columnName; _oracleVersion = oracleVersion; }
public async Task GetLineMap(OracleObjectIdentifier objectIdentifier, CancellationToken cancellationToken) { _debuggerSessionCommand.CommandText = OracleDatabaseCommands.GetDebuggerLineMap; _debuggerSessionCommand.Parameters.Clear(); _debuggerSessionCommand.AddSimpleParameter("OWNER", objectIdentifier.HasOwner ? objectIdentifier.NormalizedOwner.Trim('"') : null); _debuggerSessionCommand.AddSimpleParameter("NAME", String.IsNullOrEmpty(objectIdentifier.Name) ? null : objectIdentifier.NormalizedName.Trim('"')); var maxLineParameter = _debuggerSessionCommand.AddSimpleParameter("MAXLINE", null, TerminalValues.Number); var numberOfEntryPointsParameter = _debuggerSessionCommand.AddSimpleParameter("NUMBER_OF_ENTRY_POINTS", null, TerminalValues.Number); var lineMapParameter = _debuggerSessionCommand.AddSimpleParameter("LINEMAP", null, TerminalValues.Raw, 32767); var resultParameter = _debuggerSessionCommand.AddSimpleParameter("RESULT", null, TerminalValues.Number); _debuggerConnection.ActionName = "Get line map"; await _debuggerSessionCommand.ExecuteNonQueryAsynchronous(cancellationToken); var result = GetValueFromOracleDecimal(resultParameter); if (result != 0) { return; } var maxLine = GetValueFromOracleDecimal(maxLineParameter); var numberOfEntryPoints = GetValueFromOracleDecimal(numberOfEntryPointsParameter); var lineMap = ((OracleBinary)lineMapParameter.Value).Value; }
public OracleDatabaseLink GetFirstDatabaseLink(params OracleObjectIdentifier[] identifiers) { DatabaseLinks.TryGetFirstValue(out var databaseLink, identifiers); if (databaseLink == null) { foreach (var link in DatabaseLinks.Values) { var databaseLinkNormalizedName = link.FullyQualifiedName.NormalizedName; var instanceQualifierIndex = databaseLinkNormalizedName.IndexOf("@", StringComparison.InvariantCulture); if (instanceQualifierIndex == -1) { continue; } var shortName = databaseLinkNormalizedName.Substring(1, instanceQualifierIndex - 1).ToQuotedIdentifier(); var shortIdentifier = OracleObjectIdentifier.Create(link.FullyQualifiedName.Owner, shortName); if (identifiers.Any(i => i == shortIdentifier)) { databaseLink = link; break; } } } return(databaseLink); }
public void TestBasicInitialization() { var plsqlText = $"CREATE OR REPLACE FUNCTION TEST_FUNCTION(p1 IN NUMBER DEFAULT 0, p2 IN OUT VARCHAR2, p3 OUT NOCOPY CLOB) RETURN RAW IS {TestPlSqlProgramBase}"; var statement = (OracleStatement)Parser.Parse(plsqlText).Single(); statement.ParseStatus.ShouldBe(ParseStatus.Success); var expectedObjectIdentifier = OracleObjectIdentifier.Create("HUSQVIK", "TEST_FUNCTION"); var semanticModel = new OraclePlSqlStatementSemanticModel(plsqlText, statement, TestFixture.DatabaseModel).Build(CancellationToken.None); semanticModel.Programs.Count.ShouldBe(1); var mainProgram = semanticModel.Programs[0]; mainProgram.ObjectIdentifier.ShouldBe(expectedObjectIdentifier); mainProgram.Name.ShouldBe("\"TEST_FUNCTION\""); mainProgram.Parameters.Count.ShouldBe(3); mainProgram.Parameters[0].Name.ShouldBe("\"P1\""); mainProgram.Parameters[0].Direction.ShouldBe(ParameterDirection.Input); mainProgram.Parameters[1].Name.ShouldBe("\"P2\""); mainProgram.Parameters[1].Direction.ShouldBe(ParameterDirection.InputOutput); mainProgram.Parameters[2].Name.ShouldBe("\"P3\""); mainProgram.Parameters[2].Direction.ShouldBe(ParameterDirection.Output); mainProgram.ReturnParameter.ShouldNotBe(null); AssertMainProgram(mainProgram, expectedObjectIdentifier); }
public override async Task UpdateViewDetailsAsync(OracleObjectIdentifier objectIdentifier, ObjectDetailsModel dataModel, CancellationToken cancellationToken) { var viewCommentDataProvider = new CommentDataProvider(dataModel, objectIdentifier, null); var columnConstraintDataProvider = new ConstraintDataProvider(dataModel, objectIdentifier, null); await UpdateModelAsync(true, cancellationToken, viewCommentDataProvider, columnConstraintDataProvider); }
public static bool TryGetPlSqlUnitName(StatementBase statement, out OracleObjectIdentifier objectIdentifier) { objectIdentifier = OracleObjectIdentifier.Empty; switch (statement.RootNode.Id) { case NonTerminals.CreatePlSqlStatement: var createPlSqlObjectClause = statement.RootNode[NonTerminals.CreatePlSqlObjectClause]; if (createPlSqlObjectClause != null && createPlSqlObjectClause.ChildNodes.Count == 1) { var createFunctionNode = createPlSqlObjectClause[NonTerminals.CreateFunction, NonTerminals.PlSqlFunctionSource]; createPlSqlObjectClause = createFunctionNode ?? createPlSqlObjectClause.ChildNodes[0]; objectIdentifier = GetObjectIdentifierFromNode(createPlSqlObjectClause[NonTerminals.SchemaObject]); } break; case NonTerminals.StandaloneStatement: var alterObjectClause = statement.RootNode[NonTerminals.Statement, NonTerminals.AlterStatement, NonTerminals.AlterObjectClause]; if (alterObjectClause != null && alterObjectClause.ChildNodes.Count == 1 && alterObjectClause.ChildNodes[0].Id.In(NonTerminals.AlterProcedure, NonTerminals.AlterFunction, NonTerminals.AlterPackage)) { objectIdentifier = GetObjectIdentifierFromNode(alterObjectClause.ChildNodes[0][NonTerminals.SchemaObject]); } break; } return(!String.IsNullOrEmpty(objectIdentifier.Name)); }
public PartitionDataProvider(TableDetailsModel dataModel, OracleObjectIdentifier objectIdentifier, Version oracleVersion) { var hasInMemorySupport = InMemoryHelper.HasInMemorySupport(oracleVersion); PartitionDetailDataProvider = new PartitionDetailDataProviderInternal(dataModel, objectIdentifier, hasInMemorySupport); SubPartitionDetailDataProvider = new SubPartitionDetailDataProviderInternal(dataModel, objectIdentifier, hasInMemorySupport); }
private static OracleTypeObject MapTypeAttributes(IDataRecord reader, IDictionary <OracleObjectIdentifier, OracleSchemaObject> allObjects) { var typeFullyQualifiedName = OracleObjectIdentifier.Create(QualifyStringObject(reader["OWNER"]), QualifyStringObject(reader["TYPE_NAME"])); if (!allObjects.TryGetValue(typeFullyQualifiedName, out OracleSchemaObject typeObject)) { return(null); } var type = (OracleTypeObject)typeObject; var attributeTypeIdentifier = OracleObjectIdentifier.Create(QualifyStringObject(reader["ATTR_TYPE_OWNER"]), QualifyStringObject(reader["ATTR_TYPE_NAME"])); var dataType = new OracleDataType { FullyQualifiedName = attributeTypeIdentifier, Length = OracleReaderValueConvert.ToInt32(reader["LENGTH"]), Precision = OracleReaderValueConvert.ToInt32(reader["PRECISION"]), Scale = OracleReaderValueConvert.ToInt32(reader["SCALE"]) }; ResolveDataUnit(dataType, reader["CHAR_USED"]); var attribute = new OracleTypeAttribute { Name = QualifyStringObject(reader["ATTR_NAME"]), DataType = dataType, IsInherited = String.Equals((string)reader["INHERITED"], "YES") }; type.Attributes.Add(attribute); return(type); }
public static ICollection <CommandExecutionHandler> ResolveCommandHandlers(OracleStatementSemanticModel semanticModel, StatementGrammarNode currentTerminal) { CheckParametersNotNull(semanticModel, currentTerminal); var commands = new List <CommandExecutionHandler>(); if (currentTerminal.Id != Terminals.Identifier && currentTerminal.Id != Terminals.RowIdPseudocolumn) { return(EmptyHandlerCollection); } var columnReference = semanticModel.AllReferenceContainers.SelectMany(qb => qb.ColumnReferences).SingleOrDefault(c => c.ColumnNode == currentTerminal); if (columnReference == null || columnReference.ColumnNodeObjectReferences.Count <= 1) { return(EmptyHandlerCollection); } var identifiers = OracleObjectIdentifier.GetUniqueReferences(columnReference.ColumnNodeObjectReferences.Select(r => r.FullyQualifiedObjectName).ToArray()); var actions = columnReference.ColumnNodeObjectReferences .Where(r => identifiers.Contains(r.FullyQualifiedObjectName)) .Select( r => new CommandExecutionHandler { Name = r.FullyQualifiedObjectName + "." + columnReference.Name, ExecutionHandler = c => new ResolveAmbiguousColumnCommand(c, r.FullyQualifiedObjectName + "." + columnReference.Name) .Execute(), CanExecuteHandler = c => true }); commands.AddRange(actions); return(commands.AsReadOnly()); }
private static OracleTable GetTableForPartition(IDataRecord reader, IDictionary <OracleObjectIdentifier, OracleSchemaObject> allObjects) { var tableFullyQualifiedName = OracleObjectIdentifier.Create(QualifyStringObject(reader["TABLE_OWNER"]), QualifyStringObject(reader["TABLE_NAME"])); return(allObjects.TryGetValue(tableFullyQualifiedName, out OracleSchemaObject schemaObject) ? (OracleTable)schemaObject : null); }
public override void InitializeCommand(OracleCommand command) { command.CommandText = OracleDatabaseCommands.SelectIndexColumnDescriptionCommandText; command.AddSimpleParameter("OWNER", _objectIdentifier.Owner.Trim('"')); command.AddSimpleParameter("TABLE_NAME", _objectIdentifier.Name.Trim('"')); command.AddSimpleParameter("COLUMN_NAME", String.IsNullOrEmpty(_columnName) ? null : _columnName.Trim('"')); _indexes = DataModel.IndexDetails.ToDictionary(i => OracleObjectIdentifier.Create(i.Owner, i.Name)); }
public async Task <string> ExtractViewTextAsync(OracleObjectIdentifier viewIdentifier, CancellationToken cancellationToken) { var dataModel = new ViewDetailModel(); var viewDetailsDataProvider = new ViewDetailDataProvider(dataModel, viewIdentifier, _databaseModel.Version); await UpdateDataModel(cancellationToken, viewDetailsDataProvider); return(dataModel.Text); }
private OracleObjectIdentifier[] GetCurrentAndPublicSchemaIdentifiers(string name) { return (new[] { OracleObjectIdentifier.Create(CurrentSchema, name), OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, name) }); }
private static void EnsureDocumentationDictionaries() { if (_packageProgramDocumentations != null) { return; } lock (LockObject) { if (_packageProgramDocumentations != null) { return; } var folder = Path.GetDirectoryName(new Uri(typeof(OracleHelpProvider).Assembly.CodeBase).LocalPath); using (var reader = XmlReader.Create(Path.Combine(folder, "OracleDocumentation.xml"))) { var documentation = (Documentation) new XmlSerializer(typeof(Documentation)).Deserialize(reader); _sqlFunctionDocumentation = documentation.Functions.ToLookup(f => f.Name.ToQuotedIdentifier()); _statementDocumentation = documentation.Statements.ToLookup(s => s.Name); var dataDictionaryObjects = documentation.DataDictionary.ToDictionary(o => OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaSys, o.Name)); _dataDictionaryObjects = dataDictionaryObjects.AsReadOnly(); var packageProgramDocumentations = new Dictionary <OracleProgramIdentifier, DocumentationPackageSubProgram>(); foreach (var packageDocumentation in documentation.Packages) { var packageIdentifier = OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaSys, packageDocumentation.Name); var dataDictionaryObjectDocumentation = new DocumentationDataDictionaryObject { Name = packageDocumentation.Name, Value = packageDocumentation.Description, Url = packageDocumentation.Url }; dataDictionaryObjects.Add(packageIdentifier, dataDictionaryObjectDocumentation); if (packageDocumentation.SubPrograms == null) { continue; } foreach (var subProgramDocumentation in packageDocumentation.SubPrograms) { subProgramDocumentation.PackageDocumentation = packageDocumentation; packageProgramDocumentations[OracleProgramIdentifier.CreateFromValues(OracleObjectIdentifier.SchemaSys, packageDocumentation.Name, subProgramDocumentation.Name)] = subProgramDocumentation; } } _packageProgramDocumentations = packageProgramDocumentations.AsReadOnly(); } } }
public ObjectScriptDataProvider(OracleObject schemaObject) : base(null) { if (schemaObject.Type.In(OracleObjectType.Table, OracleObjectType.View, OracleObjectType.MaterializedView)) { _commandText = OracleDatabaseCommands.SelectComplexObjectScriptCommandText; } _objectIdentifier = schemaObject.FullyQualifiedName; _objectType = schemaObject.Type.Replace(' ', '_').ToUpperInvariant(); }
public ProgramMetadataResult GetProgramMetadata(OracleProgramIdentifier identifier, int parameterCount, bool forceBuiltInFunction, bool hasAnalyticClause, bool includePlSqlObjects) { var result = new ProgramMetadataResult(); OracleSchemaObject schemaObject; IEnumerable <OracleProgramMetadata> programMetadataSource = new List <OracleProgramMetadata>(); if (String.IsNullOrEmpty(identifier.Package) && (forceBuiltInFunction || String.IsNullOrEmpty(identifier.Owner))) { var builtInProgramPackage = OracleObjectIdentifier.IdentifierBuiltInFunctionPackage; var programIdentifier = OracleProgramIdentifier.CreateFromValues(builtInProgramPackage.Owner, builtInProgramPackage.Name, identifier.Name); if (AllObjects.TryGetValue(builtInProgramPackage, out schemaObject)) { programMetadataSource = BuiltInPackageProgramMetadata[programIdentifier]; } result.Metadata = TryFindProgramOverload(programMetadataSource, identifier.Name, parameterCount, hasAnalyticClause, !forceBuiltInFunction && includePlSqlObjects); if (result.Metadata == null) { if (includePlSqlObjects && AllObjects.TryGetValue(OracleObjectIdentifier.IdentifierDbmsStandard, out schemaObject)) { programIdentifier = OracleProgramIdentifier.CreateFromValues(builtInProgramPackage.Owner, OracleObjectIdentifier.PackageDbmsStandard, identifier.Name); programMetadataSource = BuiltInPackageProgramMetadata[programIdentifier]; result.Metadata = TryFindProgramOverload(programMetadataSource, identifier.Name, parameterCount, hasAnalyticClause, true); } if (result.Metadata == null) { var nonSchemaBuiltInFunctionIdentifier = OracleProgramIdentifier.CreateBuiltIn(identifier.Name); result.Metadata = TryFindProgramOverload(NonSchemaBuiltInFunctionMetadata[nonSchemaBuiltInFunctionIdentifier], identifier.Name, parameterCount, hasAnalyticClause, includePlSqlObjects); } } result.SchemaObject = schemaObject; } if (result.Metadata == null) { var schemaObjectFound = (String.IsNullOrWhiteSpace(identifier.Package) && AllObjects.TryGetValue(OracleObjectIdentifier.Create(identifier.Owner, identifier.Name), out schemaObject)) || AllObjects.TryGetValue(OracleObjectIdentifier.Create(identifier.Owner, identifier.Package), out schemaObject); if (!schemaObjectFound || !TryGetSchemaObjectProgramMetadata(schemaObject, out programMetadataSource)) { return(result); } result.SchemaObject = schemaObject; var programName = String.IsNullOrEmpty(identifier.Package) ? schemaObject.GetTargetSchemaObject().Name : identifier.Name; result.Metadata = TryFindProgramOverload(programMetadataSource, programName, parameterCount, hasAnalyticClause, includePlSqlObjects); } return(result); }
public OracleObjectIdentifier GetExplainPlanTargetTable(string connectionName) { if ((_connectionConfigurations.TryGetValue(connectionName, out OracleConfigurationConnection configuration) && configuration.ExecutionPlan?.TargetTable != null) || _connectionConfigurations.TryGetValue(AllConnections, out configuration) && configuration.ExecutionPlan?.TargetTable != null) { var targetTable = configuration.ExecutionPlan.TargetTable; return(OracleObjectIdentifier.Create(targetTable.Schema, targetTable.Name)); } return(OracleObjectIdentifier.Empty); }
private OracleObjectIdentifier CreateObjectIdentifierFromSchemaObjectNode(StatementGrammarNode schemaObjectNode) { if (schemaObjectNode == null) { return(OracleObjectIdentifier.Empty); } var owner = schemaObjectNode[NonTerminals.SchemaPrefix, Terminals.SchemaIdentifier]?.Token.Value ?? DatabaseModel.CurrentSchema; var name = schemaObjectNode[Terminals.ObjectIdentifier]?.Token.Value; return(OracleObjectIdentifier.Create(owner, name)); }
public override async Task UpdateColumnDetailsAsync(OracleObjectIdentifier objectIdentifier, string columnName, ColumnDetailsModel dataModel, CancellationToken cancellationToken) { var columnDetailDataProvider = new ColumnDetailDataProvider(dataModel, objectIdentifier, columnName); var columnCommentDataProvider = new CommentDataProvider(dataModel, objectIdentifier, columnName); var columnConstraintDataProvider = new ConstraintDataProvider(dataModel, objectIdentifier, columnName); var columnIndexesDataProvider = new IndexDetailDataProvider(dataModel, objectIdentifier, columnName); var indexColumnDataProvider = new IndexColumnDataProvider(dataModel, objectIdentifier, columnName); var detailHistogramDataProvider = new ColumnDetailHistogramDataProvider(dataModel, objectIdentifier, columnName); var columnInMemoryDetailsDataProvider = new ColumnDetailInMemoryDataProvider(dataModel, objectIdentifier, columnName, Version); await UpdateModelAsync(true, cancellationToken, columnDetailDataProvider, columnCommentDataProvider, columnConstraintDataProvider, columnIndexesDataProvider, indexColumnDataProvider, detailHistogramDataProvider, columnInMemoryDetailsDataProvider); }
private static OracleDatabaseLink MapDatabaseLink(IDataRecord reader) { var databaseLinkFullyQualifiedName = OracleObjectIdentifier.Create(QualifyStringObject(reader["OWNER"]), QualifyStringObject(reader["DB_LINK"])); return (new OracleDatabaseLink { FullyQualifiedName = databaseLinkFullyQualifiedName, Created = (DateTime)reader["CREATED"], Host = (string)reader["HOST"], UserName = OracleReaderValueConvert.ToString(reader["USERNAME"]) }); }
public override async Task UpdateTableDetailsAsync(OracleObjectIdentifier objectIdentifier, TableDetailsModel dataModel, CancellationToken cancellationToken) { var tableDetailDataProvider = new TableDetailDataProvider(dataModel, objectIdentifier); var spaceAllocationDataProvider = new TableSpaceAllocationDataProvider(dataModel, objectIdentifier, String.Empty); var tableCommentDataProvider = new CommentDataProvider(dataModel, objectIdentifier, null); var tableInMemorySpaceAllocationDataProvider = new TableInMemorySpaceAllocationDataProvider(dataModel, objectIdentifier, Version); var indexDetailDataProvider = new IndexDetailDataProvider(dataModel, objectIdentifier, null); var indexColumnDataProvider = new IndexColumnDataProvider(dataModel, objectIdentifier, null); var partitionDataProvider = new PartitionDataProvider(dataModel, objectIdentifier, Version); var tablespaceDetailDataProvider = new TablespaceDetailDataProvider(dataModel.TablespaceDataModel); var datafileDataProvider = new TablespaceFilesDataProvider(dataModel.TablespaceDataModel); await UpdateModelAsync(true, cancellationToken, tableDetailDataProvider, tableCommentDataProvider, spaceAllocationDataProvider, tableInMemorySpaceAllocationDataProvider, indexDetailDataProvider, indexColumnDataProvider, partitionDataProvider.PartitionDetailDataProvider, partitionDataProvider.SubPartitionDetailDataProvider, tablespaceDetailDataProvider, datafileDataProvider); }
private static OracleObjectIdentifier GetObjectIdentifierFromNode(StatementGrammarNode node) { if (node == null) { return(OracleObjectIdentifier.Empty); } var schemaIdentifierTerminal = node[NonTerminals.SchemaPrefix, Terminals.SchemaIdentifier]; var objectIdentifierTerminal = node[Terminals.ObjectIdentifier]; return(objectIdentifierTerminal == null ? OracleObjectIdentifier.Empty : OracleObjectIdentifier.Create(schemaIdentifierTerminal, objectIdentifierTerminal, null)); }
private static OracleTable MapTable(IDataRecord reader, IDictionary <OracleObjectIdentifier, OracleSchemaObject> allObjects) { var tableFullyQualifiedName = OracleObjectIdentifier.Create(QualifyStringObject(reader["OWNER"]), QualifyStringObject(reader["TABLE_NAME"])); if (!allObjects.TryGetValue(tableFullyQualifiedName, out OracleSchemaObject schemaObject)) { return(null); } var table = (OracleTable)schemaObject; table.Organization = (OrganizationType)Enum.Parse(typeof(OrganizationType), (string)reader["ORGANIZATION"]); return(table); }
private static OracleDirectory MapDirectory(IDataRecord reader, IDictionary <OracleObjectIdentifier, OracleSchemaObject> allObjects) { var directoryFullyQualifiedName = OracleObjectIdentifier.Create(QualifyStringObject(reader["OWNER"]), QualifyStringObject(reader["DIRECTORY_NAME"])); if (!allObjects.TryGetValue(directoryFullyQualifiedName, out OracleSchemaObject schemaObject)) { return(null); } var directory = (OracleDirectory)schemaObject; directory.Path = (string)reader["DIRECTORY_PATH"]; return(directory); }
private static string BuildQualifiedColumnLabel(OracleObjectIdentifier columnOwner, string columnName, bool applyFormatting) { var prefix = String.IsNullOrEmpty(columnOwner.Name) ? null : $"{(applyFormatting ? columnOwner.ToFormattedString() : columnOwner.ToLabel())}."; columnName = columnName.ToSimpleIdentifier(); if (applyFormatting) { var formatOption = OracleConfiguration.Configuration.Formatter.FormatOptions.Identifier; columnName = OracleStatementFormatter.FormatTerminalValue(columnName, formatOption); } return($"{prefix}{columnName}"); }
private async Task ConfigureSettings(CancellationToken cancellationToken) { ExecutionContext.EnsureSettingsProviderAvailable(); _settingsModel = ExecutionContext.SettingsProvider.Settings; _settingsModel.IsTextInputVisible = false; var expandedColumns = new List <ColumnDescriptionItem>(); var databaseLinkReferences = new List <OracleObjectWithColumnsReference>(); _asteriskNode = FillColumnNames(expandedColumns, databaseLinkReferences, true); var useDefaultSettings = _settingsModel.UseDefaultSettings == null || _settingsModel.UseDefaultSettings(); foreach (var databaseLinkReference in databaseLinkReferences) { var databaseLinkIdentifier = String.Concat(databaseLinkReference.DatabaseLinkNode.Terminals.Select(t => t.Token.Value)); var remoteObjectIdenrifier = OracleObjectIdentifier.Create(databaseLinkReference.OwnerNode, databaseLinkReference.ObjectNode, null); var columnNames = await CurrentQueryBlock.SemanticModel.DatabaseModel.GetRemoteTableColumnsAsync(databaseLinkIdentifier, remoteObjectIdenrifier, cancellationToken); expandedColumns.AddRange( columnNames.Select( n => new ColumnDescriptionItem { OwnerIdentifier = databaseLinkReference.FullyQualifiedObjectName, ColumnName = n.ToSimpleIdentifier() })); } foreach (var expandedColumn in expandedColumns.DistinctBy(c => c.ColumnNameLabel)) { _settingsModel.AddBooleanOption( new BooleanOption { OptionIdentifier = expandedColumn.ColumnNameLabel, DescriptionContent = BuildColumnOptionDescription(expandedColumn), Value = !expandedColumn.IsPseudocolumn && !expandedColumn.IsHidden && useDefaultSettings, Tag = expandedColumn }); } _settingsModel.Title = "Expand Asterisk"; _settingsModel.Heading = _settingsModel.Title; }
public override Task UpdateTableDetailsAsync(OracleObjectIdentifier objectIdentifier, TableDetailsModel dataModel, CancellationToken cancellationToken) { dataModel.AverageRowSize = 237; dataModel.LastAnalyzed = new DateTime(2014, 8, 19, 6, 18, 12); dataModel.BlockCount = 544; dataModel.RowCount = 8312; dataModel.SampleRows = 5512; dataModel.Logging = true; dataModel.AllocatedBytes = 22546891; dataModel.LargeObjectBytes = 1546891; dataModel.Compression = "Disabled"; dataModel.InMemoryCompression = "Disabled"; dataModel.Organization = "Index"; dataModel.PartitionKeys = "COLUMN1, COLUMN2"; dataModel.SubPartitionKeys = "COLUMN3, COLUMN4"; dataModel.IsTemporary = false; dataModel.Comment = "This is a table comment. "; dataModel.ParallelDegree = "Default"; var indexDetails = new IndexDetailsModel { Blocks = 123, Bytes = 123456, ClusteringFactor = 444, Compression = "Enabled", DegreeOfParallelism = 2, DistinctKeys = 1444, IsUnique = false, LastAnalyzed = new DateTime(2015, 1, 20, 21, 28, 12), LeafBlocks = 114, Logging = true, Name = "TEST_INDEX", Owner = "HUSQVIK", PrefixLength = 2, Rows = 2000, SampleRows = 333, Status = "Valid", Type = "Normal", TablespaceName = "TEST_TABLESPACE", Columns = { new IndexColumnModel { ColumnName = "COLUMN1", SortOrder = SortOrder.Descending }, new IndexColumnModel { ColumnName = "COLUMN2" } } }; var partition1Details = new PartitionDetailsModel { Name = "PARTITION_1" }; SetPartitionDetails(partition1Details); SetTablespaceDetails(dataModel.TablespaceDataModel); var partition2Details = new PartitionDetailsModel { Name = "PARTITION_2", TablespaceName = "TEST_TABLESPACE_2", AverageRowSize = 237, LastAnalyzed = new DateTime(2015, 2, 22, 16, 22, 14), BlockCount = 272, RowCount = 4162, SampleRows = 4162, Compression = "Disabled", Logging = true, HighValue = "'Partition key 2', 2", InMemoryCompression = "Disabled" }; dataModel.IndexDetails.Add(indexDetails); dataModel.AddPartition(partition1Details); dataModel.AddPartition(partition2Details); return Task.FromResult<object>(null); }
private static void AssertMainProgram(OraclePlSqlProgram mainProgram, OracleObjectIdentifier expectedObjectIdentifier) { mainProgram.Variables.Count.ShouldBe(3); mainProgram.Variables[0].Name.ShouldBe("\"TEST_VARIABLE1\""); mainProgram.Variables[0].IsConstant.ShouldBe(false); mainProgram.Variables[0].Nullable.ShouldBe(true); mainProgram.Variables[0].DefaultExpressionNode.ShouldBe(null); mainProgram.Variables[0].DataTypeNode.ShouldNotBe(null); mainProgram.Variables[0].DataTypeNode.FirstTerminalNode.Id.ShouldBe(Terminals.Number); mainProgram.Variables[0].DataTypeNode.LastTerminalNode.Id.ShouldBe(Terminals.Number); mainProgram.Variables[1].Name.ShouldBe("\"TEST_VARIABLE2\""); mainProgram.Variables[1].IsConstant.ShouldBe(false); mainProgram.Variables[1].Nullable.ShouldBe(true); mainProgram.Variables[1].DefaultExpressionNode.ShouldBe(null); mainProgram.Variables[1].DataTypeNode.ShouldNotBe(null); mainProgram.Variables[1].DataTypeNode.FirstTerminalNode.Id.ShouldBe(Terminals.Varchar2); mainProgram.Variables[1].DataTypeNode.LastTerminalNode.Id.ShouldBe(Terminals.RightParenthesis); mainProgram.Variables[2].Name.ShouldBe("\"TEST_CONSTANT1\""); mainProgram.Variables[2].IsConstant.ShouldBe(true); mainProgram.Variables[2].Nullable.ShouldBe(false); mainProgram.Variables[2].DefaultExpressionNode.ShouldNotBe(null); mainProgram.Exceptions.Count.ShouldBe(0); mainProgram.PlSqlVariableReferences.Count.ShouldBe(1); mainProgram.PlSqlExceptionReferences.Count.ShouldBe(0); mainProgram.Types.Count.ShouldBe(2); mainProgram.Types[0].Name.ShouldBe("\"TEST_TYPE1\""); mainProgram.Types[1].Name.ShouldBe("\"TEST_TABLE_TYPE1\""); mainProgram.SubPrograms.Count.ShouldBe(2); mainProgram.SqlModels.Count.ShouldBe(2); mainProgram.ProgramReferences.Count.ShouldBe(1); var programReference = mainProgram.ProgramReferences.First(); programReference.Name.ShouldBe("put_line"); programReference.ObjectNode.Token.Value.ShouldBe("dbms_output"); programReference.ParameterListNode.ShouldNotBe(null); programReference.ParameterReferences.Count.ShouldBe(1); programReference.ParameterReferences[0].OptionalIdentifierTerminal.Token.Value.ShouldBe("item"); programReference.ParameterReferences[0].ParameterNode.LastTerminalNode.Token.Value.ShouldBe("test_constant1"); mainProgram.SubPrograms[0].ObjectIdentifier.ShouldBe(expectedObjectIdentifier); mainProgram.SubPrograms[0].Name.ShouldBe("\"TEST_INNER_PROCEDURE\""); mainProgram.SubPrograms[0].Parameters.Count.ShouldBe(1); mainProgram.SubPrograms[0].Parameters[0].Name.ShouldBe("\"P1\""); mainProgram.SubPrograms[0].Parameters[0].Direction.ShouldBe(ParameterDirection.Input); mainProgram.SubPrograms[0].ReturnParameter.ShouldBe(null); mainProgram.SubPrograms[0].Variables.Count.ShouldBe(1); mainProgram.SubPrograms[0].Variables[0].Name.ShouldBe("\"TEST_VARIABLE3\""); mainProgram.SubPrograms[0].Variables[0].IsConstant.ShouldBe(false); mainProgram.SubPrograms[0].Variables[0].Nullable.ShouldBe(false); mainProgram.SubPrograms[0].Variables[0].DefaultExpressionNode.ShouldNotBe(null); mainProgram.SubPrograms[0].Exceptions.Count.ShouldBe(0); mainProgram.SubPrograms[0].PlSqlVariableReferences.Count.ShouldBe(1); mainProgram.SubPrograms[0].PlSqlExceptionReferences.Count.ShouldBe(0); mainProgram.SubPrograms[0].Types.Count.ShouldBe(0); mainProgram.SubPrograms[0].SubPrograms.Count.ShouldBe(0); mainProgram.SubPrograms[0].SqlModels.Count.ShouldBe(0); mainProgram.SubPrograms[1].ObjectIdentifier.ShouldBe(expectedObjectIdentifier); mainProgram.SubPrograms[1].Name.ShouldBe("\"TEST_INNER_FUNCTION\""); mainProgram.SubPrograms[1].Parameters.Count.ShouldBe(1); mainProgram.SubPrograms[1].Parameters[0].Name.ShouldBe("\"P1\""); mainProgram.SubPrograms[1].Parameters[0].Direction.ShouldBe(ParameterDirection.Input); mainProgram.SubPrograms[1].ReturnParameter.ShouldNotBe(null); mainProgram.SubPrograms[1].ReturnParameter.DataTypeNode.ShouldNotBe(null); mainProgram.SubPrograms[1].ReturnParameter.DefaultExpressionNode.ShouldBe(null); mainProgram.SubPrograms[1].ReturnParameter.Nullable.ShouldBe(true); mainProgram.SubPrograms[1].ReturnParameter.Direction.ShouldBe(ParameterDirection.ReturnValue); mainProgram.SubPrograms[1].Variables.Count.ShouldBe(0); mainProgram.SubPrograms[1].Exceptions.Count.ShouldBe(1); mainProgram.SubPrograms[1].Exceptions[0].Name.ShouldBe("\"TEST_EXCEPTION1\""); mainProgram.SubPrograms[1].PlSqlExceptionReferences.Count.ShouldBe(2); mainProgram.SubPrograms[1].PlSqlExceptionReferences.ForEach(r => r.Name.ShouldBe("test_exception1")); mainProgram.SubPrograms[1].PlSqlVariableReferences.Count.ShouldBe(0); mainProgram.SubPrograms[1].Types.Count.ShouldBe(0); mainProgram.SubPrograms[1].SubPrograms.Count.ShouldBe(1); mainProgram.SubPrograms[1].SqlModels.Count.ShouldBe(1); mainProgram.SubPrograms[1].SubPrograms[0].ObjectIdentifier.ShouldBe(expectedObjectIdentifier); mainProgram.SubPrograms[1].SubPrograms[0].Name.ShouldBe("\"TEST_NESTED_PROCEDURE\""); mainProgram.SubPrograms[1].SubPrograms[0].Parameters.Count.ShouldBe(1); mainProgram.SubPrograms[1].SubPrograms[0].Parameters[0].Name.ShouldBe("\"P1\""); mainProgram.SubPrograms[1].SubPrograms[0].Parameters[0].Direction.ShouldBe(ParameterDirection.Input); mainProgram.SubPrograms[1].SubPrograms[0].ReturnParameter.ShouldBe(null); mainProgram.SubPrograms[1].SubPrograms[0].Variables.Count.ShouldBe(0); mainProgram.SubPrograms[1].SubPrograms[0].Exceptions.Count.ShouldBe(0); mainProgram.SubPrograms[1].SubPrograms[0].PlSqlVariableReferences.Count.ShouldBe(0); mainProgram.SubPrograms[1].SubPrograms[0].PlSqlExceptionReferences.Count.ShouldBe(0); mainProgram.SubPrograms[1].SubPrograms[0].Types.Count.ShouldBe(0); mainProgram.SubPrograms[1].SubPrograms[0].SubPrograms.Count.ShouldBe(0); mainProgram.SubPrograms[1].SubPrograms[0].SqlModels.Count.ShouldBe(1); }
public override Task<IReadOnlyList<string>> GetRemoteTableColumnsAsync(string databaseLink, OracleObjectIdentifier schemaObject, CancellationToken cancellationToken) { var remoteColumns = new List<string> { "\"REMOTE_COLUMN1\"", "\"RemoteColumn2\"" }; return Task.FromResult((IReadOnlyList<string>)remoteColumns.AsReadOnly()); }
public async Task<BreakpointActionResult> SetBreakpoint(OracleObjectIdentifier objectIdentifier, int line, CancellationToken cancellationToken) { _debuggerSessionCommand.CommandText = OracleDatabaseCommands.SetDebuggerBreakpoint; _debuggerSessionCommand.Parameters.Clear(); _debuggerSessionCommand.AddSimpleParameter("OWNER", objectIdentifier.HasOwner ? objectIdentifier.NormalizedOwner.Trim('"') : null); _debuggerSessionCommand.AddSimpleParameter("NAME", String.IsNullOrEmpty(objectIdentifier.Name) ? null : objectIdentifier.NormalizedName.Trim('"')); _debuggerSessionCommand.AddSimpleParameter("LINE", line); var breakpointIdentifierParameter = _debuggerSessionCommand.AddSimpleParameter("BREAKPOINT_IDENTIFIER", null, TerminalValues.Number); var resultParameter = _debuggerSessionCommand.AddSimpleParameter("RESULT", null, TerminalValues.Number); _debuggerConnection.ActionName = "Set breakpoint"; await _debuggerSessionCommand.ExecuteNonQueryAsynchronous(cancellationToken); var result = (OracleBreakpointFunctionResult)GetValueFromOracleDecimal(resultParameter); var breakpointIdentifier = GetNullableValueFromOracleDecimal(breakpointIdentifierParameter); Trace.WriteLine($"Breakpoint '{breakpointIdentifier}' set ({result}). "); return new BreakpointActionResult { BreakpointIdentifier = breakpointIdentifier, IsSuccessful = result == OracleBreakpointFunctionResult.Success }; }
private async Task<IReadOnlyList<OracleDecimal>> GetCollectionIndexes(OracleObjectIdentifier objectIdentifier, string variable, CancellationToken cancellationToken) { _debuggerSessionCommand.CommandText = OracleDatabaseCommands.GetDebuggerCollectionIndexes; _debuggerSessionCommand.Parameters.Clear(); _debuggerSessionCommand.AddSimpleParameter("RESULT", null, TerminalValues.Number); _debuggerSessionCommand.AddSimpleParameter("OWNER", objectIdentifier.HasOwner ? objectIdentifier.NormalizedOwner.Trim('"') : null); _debuggerSessionCommand.AddSimpleParameter("NAME", String.IsNullOrEmpty(objectIdentifier.Name) ? null : objectIdentifier.NormalizedName.Trim('"')); _debuggerSessionCommand.AddSimpleParameter("VARIABLE_NAME", variable, TerminalValues.Varchar2); var entriesParameter = _debuggerSessionCommand.CreateParameter(); entriesParameter.Direction = ParameterDirection.Output; entriesParameter.OracleDbType = OracleDbType.Decimal; entriesParameter.CollectionType = OracleCollectionType.PLSQLAssociativeArray; entriesParameter.ParameterName = "ENTRIES"; entriesParameter.Size = 32767; entriesParameter.Value = new int[0]; _debuggerSessionCommand.Parameters.Add(entriesParameter); await _debuggerSessionCommand.ExecuteNonQueryAsynchronous(cancellationToken); var result = (ValueInfoStatus)GetValueFromOracleDecimal(_debuggerSessionCommand.Parameters["RESULT"]); var entries = (OracleDecimal[])entriesParameter.Value; Trace.WriteLine($"Get indexes '{variable}' result: {result}; indexes retrieved: {entries.Length}"); return entries; }
private static string GetObjectTitle(OracleObjectIdentifier schemaObjectIdentifier, string objectType) { return $"{schemaObjectIdentifier} ({CultureInfo.InvariantCulture.TextInfo.ToTitleCase(objectType)})"; }
private static OracleCodeCompletionItem GenerateJoinConditionSuggestionItem(OracleObjectIdentifier sourceObject, OracleObjectIdentifier targetObject, IList<string> keySourceColumns, IList<string> keyTargetColumns, string itemCategory, bool swapSides, bool skipOnTerminal, int insertOffset, int priority) { var builder = new StringBuilder(); if (!skipOnTerminal) { builder.Append(OracleStatementFormatter.FormatTerminalValue(TerminalValues.On, FormatOptions.ReservedWord)); builder.Append(" "); } var logicalOperator = String.Empty; var formatOption = FormatOptions.Identifier; for (var i = 0; i < keySourceColumns.Count; i++) { var sourceObjectName = MergeIdentifiersIntoSimpleString(OracleStatementFormatter.FormatTerminalValue(sourceObject.Owner.ToSimpleIdentifier(), formatOption), OracleStatementFormatter.FormatTerminalValue(sourceObject.Name.ToSimpleIdentifier(), formatOption)); var targetObjectName = MergeIdentifiersIntoSimpleString(OracleStatementFormatter.FormatTerminalValue(targetObject.Owner.ToSimpleIdentifier(), formatOption), OracleStatementFormatter.FormatTerminalValue(targetObject.Name.ToSimpleIdentifier(), formatOption)); builder.Append(logicalOperator); builder.Append(swapSides ? targetObjectName : sourceObjectName); builder.Append('.'); builder.Append(OracleStatementFormatter.FormatTerminalValue((swapSides ? keyTargetColumns[i] : keySourceColumns[i]).ToSimpleIdentifier(), formatOption)); builder.Append(" = "); builder.Append(swapSides ? sourceObjectName : targetObjectName); builder.Append('.'); builder.Append(OracleStatementFormatter.FormatTerminalValue((swapSides ? keySourceColumns[i] : keyTargetColumns[i]).ToSimpleIdentifier(), formatOption)); logicalOperator = " AND "; } return new OracleCodeCompletionItem { Name = builder.ToString(), Text = builder.ToString(), InsertOffset = insertOffset, Category = itemCategory, Priority = priority }; }
private static bool TryGetDataDictionaryObjectDocumentation(OracleObjectIdentifier objectIdentifier, out DocumentationDataDictionaryObject documentation) { return OracleHelpProvider.DataDictionaryObjectDocumentation.TryGetValue(objectIdentifier, out documentation); }
public override Task UpdateColumnDetailsAsync(OracleObjectIdentifier objectIdentifier, string columnName, ColumnDetailsModel dataModel, CancellationToken cancellationToken) { dataModel.DistinctValueCount = 567; dataModel.LastAnalyzed = new DateTime(2014, 8, 19, 6, 18, 12); dataModel.SampleSize = 12346; dataModel.AverageValueSize = 7; dataModel.NullValueCount = 1344; dataModel.Comment = "This is a column comment. "; dataModel.HistogramBucketCount = 6; dataModel.HistogramType = "Frequency"; var previousValue = 0d; dataModel.HistogramValues = Enumerable.Repeat(new Random(), dataModel.HistogramBucketCount).Select(r => (previousValue += r.NextDouble())).ToArray(); return Task.FromResult<object>(null); }
public override Task UpdateViewDetailsAsync(OracleObjectIdentifier schemaObject, ObjectDetailsModel dataModel, CancellationToken cancellationToken) { dataModel.Comment = "This is a view comment. "; var constraint = new ConstraintDetailsModel { DeleteRule = "Cascade", IsDeferrable = true, IsDeferred = true, IsEnabled = true, IsValidated = true, Reliability = "Enforced", LastChange = new DateTime(2015, 1, 20, 21, 31, 12), Name = "TEST_CONSTRAINT", Owner = "HUSQVIK", Type = "Reference integrity" }; dataModel.ConstraintDetails.Add(constraint); return Task.FromResult<object>(null); }
private static string BuildQualifiedColumnLabel(OracleObjectIdentifier columnOwner, string columnName, bool applyFormatting) { var prefix = String.IsNullOrEmpty(columnOwner.Name) ? null : $"{(applyFormatting ? columnOwner.ToFormattedString() : columnOwner.ToString())}."; columnName = columnName.ToSimpleIdentifier(); if (applyFormatting) { var formatOption = OracleConfiguration.Configuration.Formatter.FormatOptions.Identifier; columnName = OracleStatementFormatter.FormatTerminalValue(columnName, formatOption); } return $"{prefix}{columnName}"; }
public static bool TryGetPlSqlUnitName(StatementBase statement, out OracleObjectIdentifier objectIdentifier) { objectIdentifier = OracleObjectIdentifier.Empty; switch (statement.RootNode.Id) { case NonTerminals.CreatePlSqlStatement: var createPlSqlObjectClause = statement.RootNode[NonTerminals.CreatePlSqlObjectClause]; if (createPlSqlObjectClause != null && createPlSqlObjectClause.ChildNodes.Count == 1) { var createFunctionNode = createPlSqlObjectClause[NonTerminals.CreateFunction, NonTerminals.PlSqlFunctionSource]; createPlSqlObjectClause = createFunctionNode ?? createPlSqlObjectClause.ChildNodes[0]; objectIdentifier = GetObjectIdentifierFromNode(createPlSqlObjectClause[NonTerminals.SchemaObject]); } break; case NonTerminals.StandaloneStatement: var alterObjectClause = statement.RootNode[NonTerminals.Statement, NonTerminals.AlterStatement, NonTerminals.AlterObjectClause]; if (alterObjectClause != null && alterObjectClause.ChildNodes.Count == 1 && alterObjectClause.ChildNodes[0].Id.In(NonTerminals.AlterProcedure, NonTerminals.AlterFunction, NonTerminals.AlterPackage)) { objectIdentifier = GetObjectIdentifierFromNode(alterObjectClause.ChildNodes[0][NonTerminals.SchemaObject]); } break; } return !String.IsNullOrEmpty(objectIdentifier.Name); }