Beispiel #1
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();
                }
            }
        }
Beispiel #2
0
        public void ShowHelp(ActionExecutionContext executionContext)
        {
            var statement = executionContext.DocumentRepository.Statements.GetStatementAtPosition(executionContext.CaretOffset);

            if (statement == null)
            {
                return;
            }

            var semanticModel = (OracleStatementSemanticModel)executionContext.DocumentRepository.ValidationModels[statement].SemanticModel;
            var terminal      = statement.GetTerminalAtPosition(executionContext.CaretOffset, n => !String.Equals(n.Id, Terminals.Comma) && !String.Equals(n.Id, Terminals.Dot) && !String.Equals(n.Id, Terminals.RightParenthesis) && !String.Equals(n.Id, Terminals.LeftParenthesis));

            if (terminal == null)
            {
                return;
            }

            EnsureDocumentationDictionaries();

            var programReference = semanticModel.GetProgramReference(terminal);

            if (programReference?.Metadata != null && programReference.Metadata.Type != ProgramType.StatementFunction)
            {
                ShowSqlFunctionDocumentation(programReference.Metadata.Identifier);
                return;
            }

            var objectReference = semanticModel.GetReference <OracleReference>(terminal);

            if (objectReference != null)
            {
                var targetObject = objectReference.SchemaObject.GetTargetSchemaObject();
                DocumentationDataDictionaryObject dataDictionaryObject = null;
                var dataDictionaryObjectDocumentationFound             = targetObject != null && _dataDictionaryObjects.TryGetValue(targetObject.FullyQualifiedName, out dataDictionaryObject);
                if (dataDictionaryObjectDocumentationFound)
                {
                    Process.Start(dataDictionaryObject.Url);
                }
            }

            var firstFourTerminals = terminal.RootNode.Terminals.Where(t => t.IsRequiredIncludingParent).Take(4).ToList();

            if (!terminal.Id.IsIdentifierOrAlias() && firstFourTerminals.IndexOf(terminal) != -1)
            {
                for (var i = 4; i > 0; i--)
                {
                    var statementDocumentationKey = String.Join(" ", firstFourTerminals.Take(i).Select(t => ((OracleToken)t.Token).UpperInvariantValue));
                    foreach (var documentation in _statementDocumentation[statementDocumentationKey])
                    {
                        Process.Start(documentation.Url);
                        return;
                    }
                }
            }
        }
Beispiel #3
0
		private static void EnsureDocumentationDictionaries()
		{
			if (_packageProgramDocumentations != null)
			{
				return;
			}

			lock (LockObject)
			{
				if (_packageProgramDocumentations != null)
				{
					return;
				}

				var folder = new Uri(Path.GetDirectoryName(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();
				}
			}
		}