Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 public SubPartitionDetailDataProviderInternal(SubPartitionDetailsModel dataModel, bool includeInMemorySettings)
     : base(null)
 {
     _subPartitionOwner       = dataModel.Owner;
     _subPartitionDataModel   = dataModel;
     _includeInMemorySettings = includeInMemorySettings;
 }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
		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;
		}
Esempio n. 6
0
 public ColumnDetailInMemoryDataProvider(ColumnDetailsModel dataModel, OracleObjectIdentifier objectIdentifier, string columnName, Version oracleVersion)
     : base(dataModel)
 {
     _objectIdentifier = objectIdentifier;
     _columnName       = columnName;
     _oracleVersion    = oracleVersion;
 }
Esempio n. 7
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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));
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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());
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        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));
        }
Esempio n. 17
0
        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);
        }
Esempio n. 18
0
 private OracleObjectIdentifier[] GetCurrentAndPublicSchemaIdentifiers(string name)
 {
     return
         (new[]
     {
         OracleObjectIdentifier.Create(CurrentSchema, name),
         OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, name)
     });
 }
Esempio n. 19
0
        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();
                }
            }
        }
Esempio n. 20
0
        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();
        }
Esempio n. 21
0
        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);
        }
Esempio n. 23
0
        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));
        }
Esempio n. 24
0
        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);
        }
Esempio n. 25
0
        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"])
            });
        }
Esempio n. 26
0
        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);
        }
Esempio n. 27
0
        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));
        }
Esempio n. 28
0
        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);
        }
Esempio n. 29
0
        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);
        }
Esempio n. 30
0
        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}");
        }
Esempio n. 31
0
        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;
        }
Esempio n. 32
0
		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);
		}
Esempio n. 33
0
		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);
		}
Esempio n. 34
0
		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());
		}
Esempio n. 35
0
		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
				};
		}
Esempio n. 36
0
		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;
		}
Esempio n. 37
0
		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;
		}
Esempio n. 38
0
		private static string GetObjectTitle(OracleObjectIdentifier schemaObjectIdentifier, string objectType)
		{
			return $"{schemaObjectIdentifier} ({CultureInfo.InvariantCulture.TextInfo.ToTitleCase(objectType)})";
		}
Esempio n. 39
0
		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
				};
		}
Esempio n. 40
0
		private static bool TryGetDataDictionaryObjectDocumentation(OracleObjectIdentifier objectIdentifier, out DocumentationDataDictionaryObject documentation)
		{
			return OracleHelpProvider.DataDictionaryObjectDocumentation.TryGetValue(objectIdentifier, out documentation);
		}
Esempio n. 41
0
		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);
		}
Esempio n. 42
0
		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);
		}
Esempio n. 43
0
		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}";
		}
Esempio n. 44
0
		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);
		}