Fix script generated for SQL Assessment results (#1058)

* INSERT VALUES has the limit of 1000 rows. Replace with derived table.
* Remove NOT NULL restriction from the generated table.
* Fix line endings in SQL Assessment source files.
This commit is contained in:
Aleksei Guzev
2020-08-28 20:17:54 +03:00
committed by GitHub
parent 0b905fef75
commit 07700560a6
8 changed files with 1222 additions and 1212 deletions

View File

@@ -95,21 +95,26 @@ namespace Microsoft.SqlTools.ServiceLayer.SqlAssessment
@"IF (NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'AssessmentResult')) @"IF (NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'AssessmentResult'))
BEGIN BEGIN
CREATE TABLE [dbo].[AssessmentResult]( CREATE TABLE [dbo].[AssessmentResult](
[CheckName] [nvarchar](max) NOT NULL, [CheckName] [nvarchar](max),
[CheckId] [nvarchar](max) NOT NULL, [CheckId] [nvarchar](max),
[RulesetName] [nvarchar](max) NOT NULL, [RulesetName] [nvarchar](max),
[RulesetVersion] [nvarchar](max) NOT NULL, [RulesetVersion] [nvarchar](max),
[Severity] [nvarchar](max) NOT NULL, [Severity] [nvarchar](max),
[Message] [nvarchar](max) NOT NULL, [Message] [nvarchar](max),
[TargetPath] [nvarchar](max) NOT NULL, [TargetPath] [nvarchar](max),
[TargetType] [nvarchar](max) NOT NULL, [TargetType] [nvarchar](max),
[HelpLink] [nvarchar](max) NOT NULL, [HelpLink] [nvarchar](max),
[Timestamp] [datetimeoffset](7) NOT NULL [Timestamp] [datetimeoffset](7)
) )
END END
GO GO
INSERT INTO [dbo].[AssessmentResult] ([CheckName],[CheckId],[RulesetName],[RulesetVersion],[Severity],[Message],[TargetPath],[TargetType],[HelpLink],[Timestamp]) INSERT INTO [dbo].[AssessmentResult] ([CheckName],[CheckId],[RulesetName],[RulesetVersion],[Severity],[Message],[TargetPath],[TargetType],[HelpLink],[Timestamp])
VALUES"; SELECT rpt.[CheckName],rpt.[CheckId],rpt.[RulesetName],rpt.[RulesetVersion],rpt.[Severity],rpt.[Message],rpt.[TargetPath],rpt.[TargetType],rpt.[HelpLink],rpt.[Timestamp]
FROM (VALUES ";
const string scriptEpilogue =
@"
) rpt([CheckName],[CheckId],[RulesetName],[RulesetVersion],[Severity],[Message],[TargetPath],[TargetType],[HelpLink],[Timestamp])";
var sb = new StringBuilder(); var sb = new StringBuilder();
if (generateScriptParams.Items != null) if (generateScriptParams.Items != null)
@@ -122,11 +127,14 @@ VALUES";
if (item.Kind == AssessmentResultItemKind.Note) if (item.Kind == AssessmentResultItemKind.Note)
{ {
sb.Append( sb.Append(
$"\r\n('{CUtils.EscapeStringSQuote(item.DisplayName)}','{CUtils.EscapeStringSQuote(item.CheckId)}','{CUtils.EscapeStringSQuote(item.RulesetName)}','{item.RulesetVersion}','{item.Level}','{CUtils.EscapeStringSQuote(item.Message)}','{CUtils.EscapeStringSQuote(item.TargetName)}','{item.TargetType}','{CUtils.EscapeStringSQuote(item.HelpLink)}','{item.Timestamp:yyyy-MM-dd hh:mm:ss.fff zzz}'),"); $@"
('{CUtils.EscapeStringSQuote(item.DisplayName)}','{CUtils.EscapeStringSQuote(item.CheckId)}','{CUtils.EscapeStringSQuote(item.RulesetName)}','{item.RulesetVersion}','{item.Level}','{CUtils.EscapeStringSQuote(item.Message)}','{CUtils.EscapeStringSQuote(item.TargetName)}','{item.TargetType}','{CUtils.EscapeStringSQuote(item.HelpLink)}','{item.Timestamp:yyyy-MM-dd hh:mm:ss.fff zzz}'),");
} }
} }
sb.Length -= 1; sb.Length -= 1;
sb.Append(scriptEpilogue);
} }
return sb.ToString(); return sb.ToString();

View File

@@ -104,24 +104,26 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.SqlAssessment
@"IF (NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'AssessmentResult')) @"IF (NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'AssessmentResult'))
BEGIN BEGIN
CREATE TABLE [dbo].[AssessmentResult]( CREATE TABLE [dbo].[AssessmentResult](
[CheckName] [nvarchar](max) NOT NULL, [CheckName] [nvarchar](max),
[CheckId] [nvarchar](max) NOT NULL, [CheckId] [nvarchar](max),
[RulesetName] [nvarchar](max) NOT NULL, [RulesetName] [nvarchar](max),
[RulesetVersion] [nvarchar](max) NOT NULL, [RulesetVersion] [nvarchar](max),
[Severity] [nvarchar](max) NOT NULL, [Severity] [nvarchar](max),
[Message] [nvarchar](max) NOT NULL, [Message] [nvarchar](max),
[TargetPath] [nvarchar](max) NOT NULL, [TargetPath] [nvarchar](max),
[TargetType] [nvarchar](max) NOT NULL, [TargetType] [nvarchar](max),
[HelpLink] [nvarchar](max) NOT NULL, [HelpLink] [nvarchar](max),
[Timestamp] [datetimeoffset](7) NOT NULL [Timestamp] [datetimeoffset](7)
) )
END END
GO GO
INSERT INTO [dbo].[AssessmentResult] ([CheckName],[CheckId],[RulesetName],[RulesetVersion],[Severity],[Message],[TargetPath],[TargetType],[HelpLink],[Timestamp]) INSERT INTO [dbo].[AssessmentResult] ([CheckName],[CheckId],[RulesetName],[RulesetVersion],[Severity],[Message],[TargetPath],[TargetType],[HelpLink],[Timestamp])
VALUES SELECT rpt.[CheckName],rpt.[CheckId],rpt.[RulesetName],rpt.[RulesetVersion],rpt.[Severity],rpt.[Message],rpt.[TargetPath],rpt.[TargetType],rpt.[HelpLink],rpt.[Timestamp]
('DN1','C1','Microsoft Ruleset','1.3','Information','Msg''1','proj[*]_dev','Server','HL1','2001-05-25 01:42:00.000 +00:00'), FROM (VALUES
('D N2','C-2','Microsoft Ruleset','1.3','Warning','Msg''1','proj[*]_dev','Database','http://HL2','2001-05-25 01:42:00.000 +03:00'), ('DN1','C1','Microsoft Ruleset','1.3','Information','Msg''1','proj[*]_dev','Server','HL1','2001-05-25 01:42:00.000 +00:00'),
('D''N1','C''3','Microsoft Ruleset','1.3','Critical','Msg''1','proj[*]_dev','Server','HL''1','2001-05-25 01:42:00.000 -01:30')"; ('D N2','C-2','Microsoft Ruleset','1.3','Warning','Msg''1','proj[*]_dev','Database','http://HL2','2001-05-25 01:42:00.000 +03:00'),
('D''N1','C''3','Microsoft Ruleset','1.3','Critical','Msg''1','proj[*]_dev','Server','HL''1','2001-05-25 01:42:00.000 -01:30')
) rpt([CheckName],[CheckId],[RulesetName],[RulesetVersion],[Severity],[Message],[TargetPath],[TargetType],[HelpLink],[Timestamp])";
[Test] [Test]
public void GenerateScriptTest() public void GenerateScriptTest()