Skip to content

Commit 38163d9

Browse files
author
Gert Marginet
committed
Adding feature generate poco
1 parent 0fd3823 commit 38163d9

22 files changed

+382
-318
lines changed

src/SqlQueryTools.sln

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,17 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SqlQueryTools", "SqlQueryTo
77
EndProject
88
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{CECF109E-D547-4A4E-B312-056E93D989D2}"
99
ProjectSection(SolutionItems) = preProject
10-
..\LICENSE = ..\LICENSE
10+
..\publish.extension.manifest.json = ..\publish.extension.manifest.json
1111
..\README.md = ..\README.md
12+
..\sqlQueryTools-CI-CD.yml = ..\sqlQueryTools-CI-CD.yml
1213
EndProjectSection
1314
EndProject
15+
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Community.VisualStudio.Toolkit.Shared", "..\..\Community.VisualStudio.Toolkit\src\toolkit\Community.VisualStudio.Toolkit.Shared\Community.VisualStudio.Toolkit.Shared.shproj", "{5EC463AC-24CB-443E-9FF9-91B7ECB1F822}"
16+
EndProject
17+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Community.VisualStudio.Toolkit.17.0", "..\..\Community.VisualStudio.Toolkit\src\toolkit\Community.VisualStudio.Toolkit.17.0\Community.VisualStudio.Toolkit.17.0.csproj", "{8B63F6D1-45DA-4428-88C4-1EF1D772DCB2}"
18+
EndProject
19+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Community.VisualStudio.Toolkit.Analyzers", "..\..\Community.VisualStudio.Toolkit\src\analyzers\Community.VisualStudio.Toolkit.Analyzers\Community.VisualStudio.Toolkit.Analyzers.csproj", "{A52D9B36-DC67-489E-9500-44C1BE5ABDC5}"
20+
EndProject
1421
Global
1522
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1623
Debug|Any CPU = Debug|Any CPU
@@ -27,11 +34,31 @@ Global
2734
{2016D785-288A-44D2-A380-89DF53B478DD}.Release|Any CPU.Build.0 = Release|Any CPU
2835
{2016D785-288A-44D2-A380-89DF53B478DD}.Release|x86.ActiveCfg = Release|x86
2936
{2016D785-288A-44D2-A380-89DF53B478DD}.Release|x86.Build.0 = Release|x86
37+
{8B63F6D1-45DA-4428-88C4-1EF1D772DCB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
38+
{8B63F6D1-45DA-4428-88C4-1EF1D772DCB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
39+
{8B63F6D1-45DA-4428-88C4-1EF1D772DCB2}.Debug|x86.ActiveCfg = Debug|Any CPU
40+
{8B63F6D1-45DA-4428-88C4-1EF1D772DCB2}.Debug|x86.Build.0 = Debug|Any CPU
41+
{8B63F6D1-45DA-4428-88C4-1EF1D772DCB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
42+
{8B63F6D1-45DA-4428-88C4-1EF1D772DCB2}.Release|Any CPU.Build.0 = Release|Any CPU
43+
{8B63F6D1-45DA-4428-88C4-1EF1D772DCB2}.Release|x86.ActiveCfg = Release|Any CPU
44+
{8B63F6D1-45DA-4428-88C4-1EF1D772DCB2}.Release|x86.Build.0 = Release|Any CPU
45+
{A52D9B36-DC67-489E-9500-44C1BE5ABDC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
46+
{A52D9B36-DC67-489E-9500-44C1BE5ABDC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
47+
{A52D9B36-DC67-489E-9500-44C1BE5ABDC5}.Debug|x86.ActiveCfg = Debug|Any CPU
48+
{A52D9B36-DC67-489E-9500-44C1BE5ABDC5}.Debug|x86.Build.0 = Debug|Any CPU
49+
{A52D9B36-DC67-489E-9500-44C1BE5ABDC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
50+
{A52D9B36-DC67-489E-9500-44C1BE5ABDC5}.Release|Any CPU.Build.0 = Release|Any CPU
51+
{A52D9B36-DC67-489E-9500-44C1BE5ABDC5}.Release|x86.ActiveCfg = Release|Any CPU
52+
{A52D9B36-DC67-489E-9500-44C1BE5ABDC5}.Release|x86.Build.0 = Release|Any CPU
3053
EndGlobalSection
3154
GlobalSection(SolutionProperties) = preSolution
3255
HideSolutionNode = FALSE
3356
EndGlobalSection
3457
GlobalSection(ExtensibilityGlobals) = postSolution
3558
SolutionGuid = {F69EC221-2624-4423-9115-48CA8EC8E57A}
3659
EndGlobalSection
60+
GlobalSection(SharedMSBuildProjectFiles) = preSolution
61+
..\..\Community.VisualStudio.Toolkit\src\toolkit\Community.VisualStudio.Toolkit.Shared\VSSDK.Helpers.Shared.projitems*{5ec463ac-24cb-443e-9ff9-91b7ecb1f822}*SharedItemsImports = 13
62+
..\..\Community.VisualStudio.Toolkit\src\toolkit\Community.VisualStudio.Toolkit.Shared\VSSDK.Helpers.Shared.projitems*{8b63f6d1-45da-4428-88c4-1ef1d772dcb2}*SharedItemsImports = 5
63+
EndGlobalSection
3764
EndGlobal

src/SqlQueryTools/Commands/AddSqlFileCommand.cs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ namespace SqlQueryTools
1010
[Command(PackageIds.AddSqlFileCommand)]
1111
internal sealed class AddSqlFileCommand : BaseCommand<AddSqlFileCommand>
1212
{
13-
internal const string GenerateParameterNamesAttributeName = "GenerateParameterNames";
14-
internal const string GeneratePocoClassAttributeName = "GeneratePocoClass";
15-
1613
public OutputWindowPane OutputPane => ((SqlQueryToolsPackage)Package).OutputPane;
1714

1815
protected override Task InitializeCompletedAsync()
@@ -25,8 +22,8 @@ protected override Task InitializeCompletedAsync()
2522
protected override async Task ExecuteAsync(OleMenuCmdEventArgs e)
2623
{
2724
var solutionExplorer = await VS.Windows.GetSolutionExplorerWindowAsync();
28-
29-
var selectedItemList = (await solutionExplorer.GetSelectionAsync()).ToList();
25+
var selectedItems = await solutionExplorer.GetSelectionAsync();
26+
var selectedItemList = selectedItems.ToList();
3027
if (selectedItemList.Count != 1
3128
|| selectedItemList[0].Type != SolutionItemType.PhysicalFile
3229
|| selectedItemList[0].Name.EndsWith(".cs", StringComparison.InvariantCultureIgnoreCase) == false)
@@ -35,7 +32,7 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e)
3532
await OutputPane.WriteLineAsync("Sql file can not be added, please select a single .cs file.");
3633
return;
3734
}
38-
var selectedPhisicalFile = selectedItemList.First() as PhysicalFile;
35+
var selectedPhisicalFile = selectedItemList[0] as PhysicalFile;
3936

4037
var project = selectedPhisicalFile.ContainingProject;
4138
if (project == null)
@@ -80,16 +77,16 @@ protected override async Task ExecuteAsync(OleMenuCmdEventArgs e)
8077
var newPhisicalFile = project.GetPhysicalFile(newFileFullName);
8178
if (newPhisicalFile != null)
8279
{
83-
await newPhisicalFile.TrySetAttributeAsync(GenerateParameterNamesAttributeName, options.GenerateParameterNames);
84-
await newPhisicalFile.TrySetAttributeAsync(GeneratePocoClassAttributeName, options.GeneratePocoClass);
85-
await newPhisicalFile.TrySetAttributeAsync("New Property", "test from code");
86-
await project.SaveAsync();
80+
await newPhisicalFile.TrySetGenerateParameterNamesAsync(options.GenerateParameterNames);
81+
await newPhisicalFile.TrySetGeneratePocoClassAsync(options.GeneratePocoClass);
8782
}
8883

8984
await VS.Documents.OpenAsync(newFileFullName);
9085

9186
await OutputPane.ActivateAsync();
9287
await OutputPane.WriteLineAsync($"Successfully added sql file '{newFileFullName}'.");
88+
await OutputPane.WriteLineAsync();
89+
await OutputPane.WriteLineAsync($"Do you like this extension? Help spread the word by leaving a review on https://marketplace.visualstudio.com/items?itemName=GertMarginet.SqlQueryTools&ssr=false#review-details");
9390
}
9491
}
9592
}

src/SqlQueryTools/Dialogs/FileNameDialog.xaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<Window x:Class="SqlQueryTools.Dialogs.FileNameDialog"
22
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
33
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4-
xmlns:local="clr-namespace:SqlQueryTools.Dialogs"
4+
xmlns:toolkit="clr-namespace:Community.VisualStudio.Toolkit;assembly=Community.VisualStudio.Toolkit"
55
Title="Add new sql file" Height="250" Width="450" ResizeMode="NoResize" ShowInTaskbar="False"
66
WindowStartupLocation="CenterScreen" SizeToContent="Width"
7-
local:VsTheme.UseVsTheme="True">
7+
toolkit:Themes.UseVsTheme="True">
88
<Grid>
99
<Grid.RowDefinitions>
1010
<RowDefinition Height="auto" />
@@ -40,7 +40,7 @@
4040
<TextBox Grid.Row="2" Grid.Column="1"
4141
Name="tFileName" TextChanged="FileName_TextChanged"
4242
VerticalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Stretch"
43-
Height="23" TextWrapping="Wrap" MinWidth="210" />
43+
TextWrapping="Wrap" MinWidth="210" />
4444

4545
<Button Grid.Row="2" Grid.Column="2"
4646
Name="bAddFile" IsEnabled="False" Content="Add file" Click="AddFile_Click"

src/SqlQueryTools/Dialogs/VsTheme.cs

Lines changed: 0 additions & 137 deletions
This file was deleted.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using System.Threading.Tasks;
2+
3+
namespace SqlQueryTools.Extensions
4+
{
5+
public static class PhysicalFileExtensions
6+
{
7+
internal const string GenerateParameterNamesAttributeName = "SqlQueryToolsGenerateParameterNames";
8+
internal const string GeneratePocoClassAttributeName = "SqlQueryToolsGeneratePocoClass";
9+
10+
public static async Task<bool> GetGenerateParameterNamesAsync(this PhysicalFile physicalFile, bool defaultValue = false)
11+
{
12+
var value = await physicalFile.GetAttributeAsync(GenerateParameterNamesAttributeName);
13+
if (!string.IsNullOrWhiteSpace(value))
14+
{
15+
return bool.Parse(value);
16+
}
17+
18+
await physicalFile.TrySetGenerateParameterNamesAsync(defaultValue);
19+
return defaultValue;
20+
}
21+
22+
public static async Task<bool> TrySetGenerateParameterNamesAsync(this PhysicalFile physicalFile, bool value)
23+
{
24+
return await physicalFile.TrySetAttributeAsync(GenerateParameterNamesAttributeName, value);
25+
}
26+
27+
public static async Task<bool> GetGeneratePocoClassAsync(this PhysicalFile physicalFile, bool defaultValue = false)
28+
{
29+
var value = await physicalFile.GetAttributeAsync(GeneratePocoClassAttributeName);
30+
if (!string.IsNullOrWhiteSpace(value))
31+
{
32+
return bool.Parse(value);
33+
}
34+
35+
await physicalFile.TrySetGeneratePocoClassAsync(defaultValue);
36+
return defaultValue;
37+
}
38+
39+
public static async Task<bool> TrySetGeneratePocoClassAsync(this PhysicalFile physicalFile, bool value)
40+
{
41+
return await physicalFile.TrySetAttributeAsync(GeneratePocoClassAttributeName, value);
42+
}
43+
}
44+
}

src/SqlQueryTools/Extensions/ProjectExtensions.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
1-
using System.IO;
2-
using System.Linq;
3-
using System.Threading.Tasks;
1+
using System.Threading.Tasks;
42

53
namespace SqlQueryTools.Extensions
64
{
75
public static class ProjectExtensions
86
{
97
public const string SqlQueryToolsConnectionStringAttributeName = "SqlQueryToolsConnectionString";
108

11-
public static async Task<string> GetSqlQueryToolsConnectionStringAsync(this Project project)
9+
public static async Task<string> GetConnectionStringAsync(this Project project, string defaultValue = "")
1210
{
13-
var connectionString = await project.GetAttributeAsync(SqlQueryToolsConnectionStringAttributeName);
14-
if (string.IsNullOrWhiteSpace(connectionString))
11+
var value = await project.GetAttributeAsync(SqlQueryToolsConnectionStringAttributeName);
12+
if (!string.IsNullOrWhiteSpace(value))
1513
{
16-
connectionString = string.Empty;
17-
await project.TrySetAttributeAsync(SqlQueryToolsConnectionStringAttributeName, connectionString);
18-
await project.SaveAsync();
14+
return value;
1915
}
2016

21-
return connectionString;
17+
await project.TrySetConnectionStringAsync(defaultValue);
18+
return defaultValue;
19+
}
20+
21+
public static async Task<bool> TrySetConnectionStringAsync(this Project project, string value)
22+
{
23+
return await project.TrySetAttributeAsync(SqlQueryToolsConnectionStringAttributeName, value);
2224
}
2325

2426
public static async Task AddNestedFileAsync(this Project project, string newFilePath, PhysicalFile dependentUponFile)
@@ -29,7 +31,6 @@ public static async Task AddNestedFileAsync(this Project project, string newFile
2931
await project.AddExistingFilesAsync(newFilePath);
3032
newPhysicalFile = project.GetPhysicalFile(newFilePath);
3133
await newPhysicalFile.TrySetAttributeAsync(PhysicalFileAttribute.DependentUpon, dependentUponFile.Text);
32-
await project.SaveAsync();
3334
}
3435
}
3536

src/SqlQueryTools/FileHandlers/SqlSaveHandler.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ private async Task GenerateSqlConstStringAsync(string inputFilePath)
6565
var inputPhysicalFile = await PhysicalFile.FromFileAsync(inputFilePath);
6666
var project = inputPhysicalFile.ContainingProject;
6767

68-
var connectionString = await project.GetSqlQueryToolsConnectionStringAsync();
68+
var connectionString = await project.GetConnectionStringAsync();
6969
if(string.IsNullOrWhiteSpace(connectionString))
7070
{
7171
await outputPane.WriteLineAsync("\tCode could not be generated due to connection string not set!");
@@ -235,10 +235,8 @@ private async Task GenerateSqlConstStringAsync(string inputFilePath)
235235
contentBuilder.AppendLine($"\t{{");
236236
contentBuilder.AppendLine($"\t\tpublic const string {options.SqlStringFieldName} = @\"{sqlCode}\";");
237237

238-
var generateParameterNames = await inputPhysicalFile.GetAttributeAsync(AddSqlFileCommand.GenerateParameterNamesAttributeName);
239-
var generatePocoClass = await inputPhysicalFile.GetAttributeAsync(AddSqlFileCommand.GeneratePocoClassAttributeName);
240-
241-
if (true)
238+
var generateParameterNames = await inputPhysicalFile.GetGenerateParameterNamesAsync(options.GenerateParameterNames);
239+
if (generateParameterNames)
242240
{
243241
foreach (var name in declaredParameters.Keys)
244242
{
@@ -251,10 +249,11 @@ private async Task GenerateSqlConstStringAsync(string inputFilePath)
251249
contentBuilder.AppendLine($"\t}}");
252250
contentBuilder.AppendLine($"}}");
253251

254-
if (false)
252+
var generatePocoClass = await inputPhysicalFile.GetGeneratePocoClassAsync(options.GeneratePocoClass);
253+
if (generatePocoClass)
255254
{
256255
contentBuilder.AppendLine();
257-
contentBuilder.AppendLine($"\tpublic class {className}Dto");
256+
contentBuilder.AppendLine($"\tpublic class {className}{options.PocoClassSuffix}");
258257
contentBuilder.AppendLine($"\t{{");
259258

260259
foreach (var columnInfo in queryMetaData)

0 commit comments

Comments
 (0)