Ejemplo n.º 1
0
        private DefinitionResult GetSymbolResults(Request request, IEnumerable <LanguageSymbol> symbols)
        {
            var results = new DefinitionResult();

            results.RequestId   = request.Id;
            results.Definitions = new List <Definition>();
            foreach (var symbol in symbols)
            {
                var def = new Definition();
                def.FilePath  = request.Path;
                def.RawType   = "";
                def.Text      = symbol.Name;
                def.Kind      = symbol.Type;
                def.Container = symbol.Container ?? "";
                def.Type      = request.Lookup;
                def.Range     = new Range
                {
                    StartLine   = symbol.StartLine,
                    EndLine     = symbol.EndLine,
                    StartColumn = symbol.StartColumn,
                    EndColumn   = symbol.EndColumn
                };

                results.Definitions.Add(def);
            }
            return(results);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Script a object using the type extracted from declarationItem
 /// </summary>
 /// <param name="declarationItem">The Declaration object that matched with the selected token</param>
 /// <param name="tokenText">The text of the selected token</param>
 /// <param name="schemaName">Schema name</param>
 /// <returns></returns>
 internal DefinitionResult GetDefinitionUsingDeclarationType(DeclarationType type, string databaseQualifiedName, string tokenText, string schemaName)
 {
     if (sqlObjectTypes.ContainsKey(type))
     {
         // With SqlLogin authentication, the defaultSchema property throws an Exception when accessed.
         // This workaround ensures that a schema name is present by attempting
         // to get the schema name from the declaration item.
         // If all fails, the default schema name is assumed to be "dbo"
         if ((connectionInfo != null && connectionInfo.ConnectionDetails.AuthenticationType.Equals(Constants.SqlLoginAuthenticationType)) && string.IsNullOrEmpty(schemaName))
         {
             string fullObjectName = databaseQualifiedName;
             schemaName = this.GetSchemaFromDatabaseQualifiedName(fullObjectName, tokenText);
         }
         Location[] locations = GetSqlObjectDefinition(
             tokenText,
             schemaName,
             sqlObjectTypes[type]
             );
         DefinitionResult result = new DefinitionResult
         {
             IsErrorResult = this.error,
             Message       = this.errorMessage,
             Locations     = locations
         };
         return(result);
     }
     // If a type was found but is not in sqlScriptGetters, then the type is not supported
     return(GetDefinitionErrorResult(SR.PeekDefinitionTypeNotSupportedError));
 }
Ejemplo n.º 3
0
        private DefinitionResult ProvideDefinition(Request request)
        {
            var matches = _ctx.Symbols
                          .Include(t => t.File)
                          .Where(t => t.Name.ToUpper() == request.PossibleWord.ToUpper());

            if (!matches.Any())
            {
                return(null);
            }

            var results = new DefinitionResult();

            results.RequestId   = request.Id;
            results.Definitions = new List <Definition>();
            foreach (var match in matches)
            {
                var def = new Definition();
                def.FilePath = match.File.FilePath;
                def.RawType  = "";
                def.Text     = "";
                def.Type     = request.Lookup;
                def.Range    = new Range
                {
                    StartLine   = match.StartLine,
                    EndLine     = match.EndLine,
                    StartColumn = match.StartColumn,
                    EndColumn   = match.EndColumn
                };

                results.Definitions.Add(def);
            }

            return(results);
        }
Ejemplo n.º 4
0
        public void GetDefinitionTimeoutTest()
        {
            // Given a binding queue that will automatically time out
            var languageService = new LanguageService();
            Mock <ConnectedBindingQueue> queueMock = new Mock <ConnectedBindingQueue>();

            languageService.BindingQueue = queueMock.Object;
            ManualResetEvent mre      = new ManualResetEvent(true); // Do not block
            Mock <QueueItem> itemMock = new Mock <QueueItem>();

            itemMock.Setup(i => i.ItemProcessed).Returns(mre);

            DefinitionResult timeoutResult = null;

            queueMock.Setup(q => q.QueueBindingOperation(
                                It.IsAny <string>(),
                                It.IsAny <Func <IBindingContext, CancellationToken, object> >(),
                                It.IsAny <Func <IBindingContext, object> >(),
                                It.IsAny <int?>(),
                                It.IsAny <int?>()))
            .Callback <string, Func <IBindingContext, CancellationToken, object>, Func <IBindingContext, object>, int?, int?>(
                (key, bindOperation, timeoutOperation, t1, t2) =>
            {
                timeoutResult          = (DefinitionResult)timeoutOperation((IBindingContext)null);
                itemMock.Object.Result = timeoutResult;
            })
            .Returns(() => itemMock.Object);

            TextDocumentPosition textDocument = new TextDocumentPosition
            {
                TextDocument = new TextDocumentIdentifier {
                    Uri = OwnerUri
                },
                Position = new Position
                {
                    Line      = 0,
                    Character = 20
                }
            };
            TestConnectionResult connectionResult = TestObjects.InitLiveConnectionInfo();
            ScriptFile           scriptFile       = connectionResult.ScriptFile;
            ConnectionInfo       connInfo         = connectionResult.ConnectionInfo;

            scriptFile.Contents = "select * from dbo.func ()";

            ScriptParseInfo scriptInfo = new ScriptParseInfo {
                IsConnected = true
            };

            languageService.ScriptParseInfoMap.Add(OwnerUri, scriptInfo);

            // When I call the language service
            var result = languageService.GetDefinition(textDocument, scriptFile, connInfo);

            // Then I expect null locations and an error to be reported
            Assert.NotNull(result);
            Assert.True(result.IsErrorResult);
            // Check timeout message
            Assert.Equal(SR.PeekDefinitionTimedoutError, result.Message);
        }
        public void GetDefinitionUsingQuickInfoWithoutConnectionTest()
        {
            Scripter         peekDefinition = new Scripter(null, null);
            string           objectName     = "tableName";
            string           quickInfoText  = "table master.dbo.tableName";
            DefinitionResult result         = peekDefinition.GetDefinitionUsingQuickInfoText(quickInfoText, objectName, null);

            Assert.NotNull(result);
            Assert.True(result.IsErrorResult);
        }
        public void GetDefinitionUsingDeclarationItemWithoutConnectionTest()
        {
            Scripter         peekDefinition = new Scripter(null, null);
            string           objectName     = "tableName";
            string           fullObjectName = "master.dbo.tableName";
            DefinitionResult result         = peekDefinition.GetDefinitionUsingDeclarationType(DeclarationType.Table, fullObjectName, objectName, null);

            Assert.NotNull(result);
            Assert.True(result.IsErrorResult);
        }
Ejemplo n.º 7
0
        public DefinitionResult Map(Definition definition)
        {
            var date = FormatLastModifiedDate(definition.CreationDate);

            var definitionResult = new DefinitionResult()
            {
                Id    = definition.DefinitionId,
                Text  = definition.Text,
                Likes = definition.Likes,
                Date  = date
            };

            return(definitionResult);
        }
Ejemplo n.º 8
0
        private static void run(string type)
        {
            var project = type.ToProject();
            // list all definitions
            var definitions = DefinitionResult.List(project);

            Console.WriteLine($"{definitions.Count} definitions");
            // list all latest failed builds each definition
            foreach (var build in BuildResult.List(project, definitions.Select(d => d.Id).ToList(), true)
                     .Where(b => b.Result == "failed"))
            {
                runByBuild(project, build);
            }
        }
        public void GetDefinitionUsingDeclarationTypeWithNonexistentObjectTest()
        {
            ConnectionInfo   connInfo         = LiveConnectionHelper.InitLiveConnectionInfoForDefinition();
            ServerConnection serverConnection = LiveConnectionHelper.InitLiveServerConnectionForDefinition(connInfo);

            Scripter scripter   = new Scripter(serverConnection, connInfo);
            string   objectName = "doesNotExist";
            string   schemaName = "sys";

            DefinitionResult result = scripter.GetDefinitionUsingDeclarationType(DeclarationType.View, "master.sys.objects", objectName, schemaName);

            Assert.NotNull(result);
            Assert.True(result.IsErrorResult);
        }
Ejemplo n.º 10
0
        public void GetDefinitionWithNoResultsFoundError()
        {
            ConnectionInfo   connInfo         = TestObjects.InitLiveConnectionInfoForDefinition();
            ServerConnection serverConnection = TestObjects.InitLiveServerConnectionForDefinition(connInfo);

            PeekDefinition peekDefinition = new PeekDefinition(serverConnection, connInfo);
            string         objectName     = "from";

            List <Declaration> declarations = new List <Declaration>();
            DefinitionResult   result       = peekDefinition.GetScript(declarations, objectName, null);

            Assert.NotNull(result);
            Assert.True(result.IsErrorResult);
            Assert.Equal(SR.PeekDefinitionNoResultsError, result.Message);
        }
        public void GetUnsupportedDefinitionErrorTest()
        {
            ConnectionInfo   connInfo         = LiveConnectionHelper.InitLiveConnectionInfoForDefinition();
            ServerConnection serverConnection = LiveConnectionHelper.InitLiveServerConnectionForDefinition(connInfo);

            Scripter scripter   = new Scripter(serverConnection, connInfo);
            string   objectName = "objects";
            string   schemaName = "sys";
            // When I try to get definition for 'Collation'
            DefinitionResult result = scripter.GetDefinitionUsingDeclarationType(DeclarationType.Collation, "master.sys.objects", objectName, schemaName);

            // Then I expect non null result with error flag set
            Assert.NotNull(result);
            Assert.True(result.IsErrorResult);
        }
Ejemplo n.º 12
0
        public void GetDefinitionUsingQuickInfoTextWithNonexistentObjectTest()
        {
            ConnectionInfo   connInfo         = TestObjects.InitLiveConnectionInfoForDefinition();
            ServerConnection serverConnection = TestObjects.InitLiveServerConnectionForDefinition(connInfo);

            PeekDefinition peekDefinition = new PeekDefinition(serverConnection, connInfo);
            string         objectName     = "doesNotExist";
            string         schemaName     = "sys";
            string         quickInfoText  = "view master.sys.objects";

            DefinitionResult result = peekDefinition.GetDefinitionUsingQuickInfoText(quickInfoText, objectName, schemaName);

            Assert.NotNull(result);
            Assert.True(result.IsErrorResult);
        }
Ejemplo n.º 13
0
        public void GetDefinitionUsingDeclarationTypeWithValidObjectTest()
        {
            ConnectionInfo   connInfo         = TestObjects.InitLiveConnectionInfoForDefinition();
            ServerConnection serverConnection = TestObjects.InitLiveServerConnectionForDefinition(connInfo);

            PeekDefinition peekDefinition = new PeekDefinition(serverConnection, connInfo);
            string         objectName     = "objects";
            string         schemaName     = "sys";

            DefinitionResult result = peekDefinition.GetDefinitionUsingDeclarationType(DeclarationType.View, "master.sys.objects", objectName, schemaName);

            Assert.NotNull(result);
            Assert.NotNull(result.Locations);
            Assert.False(result.IsErrorResult);
            Cleanup(result.Locations);
        }
        public void GetDefinitionUsingQuickInfoTextWithValidObjectTest()
        {
            ConnectionInfo   connInfo         = LiveConnectionHelper.InitLiveConnectionInfoForDefinition();
            ServerConnection serverConnection = LiveConnectionHelper.InitLiveServerConnectionForDefinition(connInfo);

            Scripter scripter      = new Scripter(serverConnection, connInfo);
            string   objectName    = "objects";
            string   schemaName    = "sys";
            string   quickInfoText = "view master.sys.objects";

            DefinitionResult result = scripter.GetDefinitionUsingQuickInfoText(quickInfoText, objectName, schemaName);

            Assert.NotNull(result);
            Assert.NotNull(result.Locations);
            Assert.False(result.IsErrorResult);
            Cleanup(result.Locations);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Script an object using the type extracted from quickInfo Text
        /// </summary>
        /// <param name="quickInfoText">the text from the quickInfo for the selected token</param>
        /// <param name="tokenText">The text of the selected token</param>
        /// <param name="schemaName">Schema name</param>
        /// <returns></returns>
        internal DefinitionResult GetDefinitionUsingQuickInfoText(string quickInfoText, string tokenText, string schemaName)
        {
            if (this.Database == null)
            {
                return(GetDefinitionErrorResult(SR.PeekDefinitionDatabaseError));
            }
            StringComparison caseSensitivity = this.Database.CaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase;
            string           tokenType       = GetTokenTypeFromQuickInfo(quickInfoText, tokenText, caseSensitivity);

            if (tokenType != null)
            {
                if (sqlScriptGettersFromQuickInfo.ContainsKey(tokenType.ToLowerInvariant()))
                {
                    // With SqlLogin authentication, the defaultSchema property throws an Exception when accessed.
                    // This workaround ensures that a schema name is present by attempting
                    // to get the schema name from the declaration item.
                    // If all fails, the default schema name is assumed to be "dbo"
                    if ((connectionInfo != null && connectionInfo.ConnectionDetails.AuthenticationType.Equals(Constants.SqlLoginAuthenticationType)) && string.IsNullOrEmpty(schemaName))
                    {
                        string fullObjectName = this.GetFullObjectNameFromQuickInfo(quickInfoText, tokenText, caseSensitivity);
                        schemaName = this.GetSchemaFromDatabaseQualifiedName(fullObjectName, tokenText);
                    }
                    Location[] locations = GetSqlObjectDefinition(
                        sqlScriptGettersFromQuickInfo[tokenType.ToLowerInvariant()],
                        tokenText,
                        schemaName,
                        sqlObjectTypesFromQuickInfo[tokenType.ToLowerInvariant()]
                        );
                    DefinitionResult result = new DefinitionResult
                    {
                        IsErrorResult = this.error,
                        Message       = this.errorMessage,
                        Locations     = locations
                    };
                    return(result);
                }
                else
                {
                    // If a type was found but is not in sqlScriptGettersFromQuickInfo, then the type is not supported
                    return(GetDefinitionErrorResult(SR.PeekDefinitionTypeNotSupportedError));
                }
            }
            // no definition found
            return(GetDefinitionErrorResult(SR.PeekDefinitionNoResultsError));
        }
        public void GetDefinitionWithNoResultsFoundError()
        {
            ConnectionInfo   connInfo         = LiveConnectionHelper.InitLiveConnectionInfoForDefinition();
            ServerConnection serverConnection = LiveConnectionHelper.InitLiveServerConnectionForDefinition(connInfo);

            Scripter scripter   = new Scripter(serverConnection, connInfo);
            string   objectName = "from";
            Position position   = new Position()
            {
                Line      = 1,
                Character = 14
            };
            ScriptParseInfo scriptParseInfo = new ScriptParseInfo()
            {
                IsConnected = true
            };
            Mock <IBindingContext> bindingContextMock = new Mock <IBindingContext>();
            DefinitionResult       result             = scripter.GetScript(scriptParseInfo.ParseResult, position, bindingContextMock.Object.MetadataDisplayInfoProvider, objectName, null);

            Assert.NotNull(result);
            Assert.True(result.IsErrorResult);
            Assert.Equal(SR.PeekDefinitionNoResultsError, result.Message);
        }
Ejemplo n.º 17
0
        public void GetDefinitionTimeoutTest()
        {
            // Given a binding queue that will automatically time out
            var languageService = new LanguageService();
            Mock <ConnectedBindingQueue> queueMock = new Mock <ConnectedBindingQueue>();

            languageService.BindingQueue = queueMock.Object;
            ManualResetEvent mre      = new ManualResetEvent(true); // Do not block
            Mock <QueueItem> itemMock = new Mock <QueueItem>();

            itemMock.Setup(i => i.ItemProcessed).Returns(mre);

            DefinitionResult timeoutResult = null;

            queueMock.Setup(q => q.QueueBindingOperation(
                                It.IsAny <string>(),
                                It.IsAny <Func <IBindingContext, CancellationToken, object> >(),
                                It.IsAny <Func <IBindingContext, object> >(),
                                It.IsAny <Func <Exception, object> >(),
                                It.IsAny <int?>(),
                                It.IsAny <int?>()))
            .Callback <string, Func <IBindingContext, CancellationToken, object>, Func <IBindingContext, object>, Func <Exception, object>, int?, int?>(
                (key, bindOperation, timeoutOperation, errHandler, t1, t2) =>
            {
                if (timeoutOperation != null)
                {
                    timeoutResult = (DefinitionResult)timeoutOperation(null);
                }

                itemMock.Object.Result = timeoutResult;
            })
            .Returns(() => itemMock.Object);

            TextDocumentPosition textDocument = new TextDocumentPosition
            {
                TextDocument = new TextDocumentIdentifier {
                    Uri = OwnerUri
                },
                Position = new Position
                {
                    Line      = 0,
                    Character = 20
                }
            };

            LiveConnectionHelper.TestConnectionResult connectionResult = LiveConnectionHelper.InitLiveConnectionInfo();
            ScriptFile scriptFile = connectionResult.ScriptFile;

            scriptFile.Contents = "select * from dbo.func ()";

            ScriptParseInfo scriptInfo = new ScriptParseInfo {
                IsConnected = true
            };

            languageService.ScriptParseInfoMap.Add(scriptFile.ClientUri, scriptInfo);

            // Pass in null connection info to force doing a local parse since that hits the BindingQueue timeout
            // before we want it to (this is testing the timeout trying to fetch the definitions after the parse)
            var result = languageService.GetDefinition(textDocument, scriptFile, null);

            // Then I expect null locations and an error to be reported
            Assert.NotNull(result);
            Assert.True(result.IsErrorResult);
            // Check timeout message
            Assert.Equal(SR.PeekDefinitionTimedoutError, result.Message);
        }