Esempio n. 1
0
		private static void ExecutionHandlerImplementation(ActionExecutionContext executionContext)
		{
			var commandInstance = new FindUsagesCommand(executionContext);
			if (commandInstance.CanExecute())
			{
				commandInstance.ExecuteFindUsages();
			}
		}
Esempio n. 2
0
		private UnnestInlineViewCommand(ActionExecutionContext executionContext)
			: base(executionContext)
		{
			_parentQueryBlock = SemanticModel?.QueryBlocks
				.Select(qb => qb.ObjectReferences.FirstOrDefault(o => o.Type == ReferenceType.InlineView && o.QueryBlocks.Count == 1 && o.QueryBlocks.First() == CurrentQueryBlock))
				.Where(o => o != null)
				.Select(o => o.Owner)
				.FirstOrDefault();
		}
Esempio n. 3
0
		private FindUsagesCommand(ActionExecutionContext executionContext)
		{
			if (executionContext.DocumentRepository == null || executionContext.DocumentRepository.StatementText != executionContext.StatementText)
			{
				return;
			}

			_currentNode = GetFindUsagesCompatibleTerminal(executionContext.DocumentRepository.Statements, executionContext.CaretOffset);
			if (_currentNode == null)
			{
				return;
			}

			_semanticModel = (OracleStatementSemanticModel)executionContext.DocumentRepository.ValidationModels[_currentNode.Statement].SemanticModel;
			_queryBlock = _semanticModel.GetQueryBlock(_currentNode);
			_executionContext = executionContext;
		}
Esempio n. 4
0
        public static void ExecuteEditCommand(SqlDocumentRepository documentRepository, SqlTextEditor editor, Action <ActionExecutionContext> executionHandler)
        {
            if (editor.IsReadOnly || !String.Equals(documentRepository.StatementText, editor.Text))
            {
                return;
            }

            var executionContext = ActionExecutionContext.Create(editor, documentRepository);

            try
            {
                executionHandler(executionContext);
                UpdateDocument(editor, executionContext);
            }
            catch (Exception exception)
            {
                App.LogErrorAndShowMessage(exception);
            }
        }
Esempio n. 5
0
        public static void UpdateDocument(SqlTextEditor editor, ActionExecutionContext executionContext)
        {
            var caretOffset     = editor.CaretOffset;
            var selectionLength = editor.SelectionLength;

            editor.ReplaceTextSegments(executionContext.SegmentsToReplace);

            var caretOffsetChanged = executionContext.CaretOffset != caretOffset;

            if (executionContext.SelectionLength != selectionLength)
            {
                editor.SelectionStart  = caretOffsetChanged ? executionContext.CaretOffset : editor.CaretOffset;
                editor.SelectionLength = executionContext.SelectionLength;
            }

            if (caretOffsetChanged)
            {
                editor.CaretOffset = executionContext.CaretOffset;
                editor.ScrollToCaret();
            }
        }
Esempio n. 6
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;
					}
				}
			}
		}
Esempio n. 7
0
			public StandardStatementFormatter(ActionExecutionContext executionContext) : base(executionContext)
			{
				_formatSelectionOnly = ExecutionContext.SelectionLength > 0;
			}
Esempio n. 8
0
		private ToggleFullyQualifiedReferencesCommand(ActionExecutionContext executionContext)
			: base(executionContext)
		{
		}
Esempio n. 9
0
		private static MultiNodeEditorData GetMultiNodeEditorData(string sqlText, int caretOffset)
		{
			DocumentRepository.UpdateStatements(sqlText);
			var executionContext = new ActionExecutionContext(sqlText, caretOffset, caretOffset, 0, DocumentRepository);
			return MultiNodeEditorDataProvider.GetMultiNodeEditorData(executionContext);
		}
Esempio n. 10
0
		private AddMissingColumnCommand(ActionExecutionContext executionContext)
			: base(executionContext)
		{
		}
Esempio n. 11
0
		private AddAliasCommand(ActionExecutionContext executionContext)
			: base(executionContext)
		{
		}
Esempio n. 12
0
		public AliasCommandHelper(ActionExecutionContext executionContext)
		{
			_executionContext = executionContext;
		}
Esempio n. 13
0
		private CreateScriptCommand(ActionExecutionContext executionContext)
			: base(executionContext)
		{
		}
Esempio n. 14
0
		public MultiNodeEditorData GetMultiNodeEditorData(ActionExecutionContext executionContext)
		{
			var multiNodeData = new MultiNodeEditorData { SynchronizedSegments = new SourcePosition[0] };
			var terminal = executionContext.DocumentRepository.Statements.GetTerminalAtPosition(executionContext.CaretOffset, n => !String.Equals(n.Id, Terminals.Comma) && !String.Equals(n.Id, Terminals.Dot) && !String.Equals(n.Id, Terminals.RightParenthesis));
			if (executionContext.SelectionLength > 0 || terminal?.Id.IsIdentifierOrAlias() != true)
			{
				return multiNodeData;
			}

			multiNodeData.CurrentNode = terminal;

			var semanticModel = (OracleStatementSemanticModel)executionContext.DocumentRepository.ValidationModels[terminal.Statement].SemanticModel;

			OracleColumnReference columnReference;
			OracleQueryBlock cteQueryBlock;
			switch (terminal.Id)
			{
				case Terminals.ObjectAlias:
					var objectReference = semanticModel.AllReferenceContainers
						.SelectMany(c => c.ObjectReferences)
						.SingleOrDefault(o => o.AliasNode == terminal);

					var synchronizedSegments = new List<SourcePosition>();
					cteQueryBlock = semanticModel.QueryBlocks.SingleOrDefault(qb => qb.AliasNode == terminal);
					if (objectReference == null && cteQueryBlock != null)
					{
						synchronizedSegments.AddRange(GetDataObjectReferences(cteQueryBlock).Select(o => o.ObjectNode.SourcePosition));
					}

					var objectQualifiedColumnSynchronizedSegments = semanticModel.AllReferenceContainers
						.SelectMany(c => c.ColumnReferences)
						.Where(c => c.ObjectNode != null && c.ValidObjectReference != null && (c.ValidObjectReference == objectReference || IsCommonTableExpressionColumnReference(cteQueryBlock, c)))
						.Concat(GetCommonTableExpressionObjectPrefixedColumnReferences(cteQueryBlock))
						.Select(c => c.ObjectNode.SourcePosition);

					synchronizedSegments.AddRange(objectQualifiedColumnSynchronizedSegments);
					multiNodeData.SynchronizedSegments = synchronizedSegments.AsReadOnly();

					break;

				case Terminals.ObjectIdentifier:
					var editNodes = new List<SourcePosition>();

					columnReference = semanticModel.GetReference<OracleColumnReference>(terminal);

					var objectReferences = new HashSet<OracleDataObjectReference>();
					var dataObjectReferenceCandidate = columnReference?.ValidObjectReference as OracleDataObjectReference;
					if (dataObjectReferenceCandidate != null)
					{
						objectReferences.Add(dataObjectReferenceCandidate);
					}
					else
					{
						dataObjectReferenceCandidate = semanticModel.GetReference<OracleDataObjectReference>(terminal);
					}

					if (dataObjectReferenceCandidate?.Type == ReferenceType.CommonTableExpression)
					{
						objectReferences.Add(dataObjectReferenceCandidate);

						if (dataObjectReferenceCandidate.QueryBlocks.Count == 1)
						{
							cteQueryBlock = dataObjectReferenceCandidate.QueryBlocks.First();
							var cteColumnReferences = GetCommonTableExpressionObjectPrefixedColumnReferences(cteQueryBlock);
							editNodes.AddRange(cteColumnReferences.Select(c => c.ObjectNode.SourcePosition));
							editNodes.AddRange(GetDataObjectReferences(cteQueryBlock).Where(o => o != dataObjectReferenceCandidate).Select(o => o.ObjectNode.SourcePosition));

							StatementGrammarNode cteAliasNode;
							if (cteQueryBlock.AliasNode == null)
							{
								cteQueryBlock = cteQueryBlock.AllPrecedingConcatenatedQueryBlocks.Last();
								cteAliasNode = cteQueryBlock.AliasNode;
								var referencesToCte = semanticModel.AllReferenceContainers.SelectMany(c => c.ObjectReferences).Where(o => o.QueryBlocks.Count == 1 && o.QueryBlocks.First() == cteQueryBlock);
								objectReferences.UnionWith(referencesToCte);
							}
							else
							{
								cteAliasNode = cteQueryBlock.AliasNode;
							}

							editNodes.Add(cteAliasNode.SourcePosition);
						}
					}

					foreach (var dataObjectReference in objectReferences)
					{
						if (dataObjectReference.AliasNode != null && columnReference != null)
						{
							editNodes.Add(dataObjectReference.AliasNode.SourcePosition);
						}
						else if (dataObjectReference.Type == ReferenceType.CommonTableExpression && dataObjectReference.ObjectNode != terminal)
						{
							editNodes.Add(dataObjectReference.ObjectNode.SourcePosition);
						}

						if (dataObjectReference.AliasNode == null || columnReference != null)
						{
							var editNodesSource = semanticModel.AllReferenceContainers
								.SelectMany(c => c.ColumnReferences)
								.Where(r => r.ObjectNode != null && r != columnReference && r.ValidObjectReference == dataObjectReference)
								.Select(r => r.ObjectNode.SourcePosition);

							editNodes.AddRange(editNodesSource);
						}
					}

					multiNodeData.SynchronizedSegments = editNodes.AsReadOnly();
					break;

				case Terminals.BindVariableIdentifier:
					var bindVariable = FindUsagesCommand.GetBindVariable(semanticModel, terminal.Token.Value);
					multiNodeData.SynchronizedSegments = bindVariable.Nodes.Where(n => n != terminal).Select(t => t.SourcePosition).ToArray();
					break;

				case Terminals.ColumnAlias:
					var selectListColumn = semanticModel.AllReferenceContainers
						.OfType<OracleSelectListColumn>()
						.SingleOrDefault(c => c.AliasNode == terminal);

					if (selectListColumn != null)
					{
						multiNodeData.SynchronizedSegments = FindUsagesCommand.GetParentQueryBlockColumnUsages(selectListColumn)
							.TakeWhile(t => String.Equals(t.Token.Value.ToQuotedIdentifier(), selectListColumn.NormalizedName))
							.Select(t => t.SourcePosition)
							.ToArray();
					}
					else
					{
						goto case Terminals.Identifier;
					}

					break;

				case Terminals.Identifier:
					multiNodeData.SynchronizedSegments = FindUsagesCommand.GetColumnUsages(semanticModel, terminal, true)
						.Where(t => t != terminal)
						.Select(t => t.SourcePosition)
						.ToArray();
					break;
			}

			return multiNodeData;
		}
Esempio n. 15
0
		private BindVariableLiteralConversionCommand(ActionExecutionContext executionContext, BindVariableConfiguration bindVariable, bool allOccurences)
			: base(executionContext)
		{
			_bindVariable = bindVariable;
			_allOccurences = allOccurences;
		}
Esempio n. 16
0
		private List<TextSegment> FindUsagesOrdered(string statementText, int currentPosition)
		{
			_documentRepository.UpdateStatements(statementText);
			var executionContext = new ActionExecutionContext(statementText, currentPosition, currentPosition, 0, _documentRepository);
			FindUsagesCommand.FindUsages.ExecutionHandler(executionContext);
			return executionContext.SegmentsToReplace.OrderBy(s => s.IndextStart).ToList();
		}
Esempio n. 17
0
			protected StatementFormatterBase(ActionExecutionContext executionContext)
			{
				ExecutionContext = executionContext;
			}
Esempio n. 18
0
		private LiteralBindVariableConversionCommand(ActionExecutionContext executionContext, IReadOnlyList<StatementGrammarNode> literalTerminals, string requiredPrecedingTerminalId)
			: base(executionContext)
		{
			_literalTerminals = literalTerminals;
			_requiredPrecedingTerminalId = requiredPrecedingTerminalId;
		}
Esempio n. 19
0
			public StatementNormalizer(ActionExecutionContext executionContext)
				: base(executionContext)
			{
			}
Esempio n. 20
0
		private AddInsertIntoColumnListCommand(ActionExecutionContext executionContext)
			: base(executionContext)
		{
		}
Esempio n. 21
0
			public SingleLineStatementFormatter(ActionExecutionContext executionContext)
				: base(executionContext)
			{
			}
Esempio n. 22
0
		private ExpandAsteriskCommand(ActionExecutionContext executionContext)
			: base(executionContext)
		{
		}
Esempio n. 23
0
		private GenerateCustomTypeCSharpWrapperClassCommand(ActionExecutionContext executionContext)
			: base(executionContext)
		{
		}