1
0
mirror of https://github.com/alex-bochkov/ssms-addin.git synced 2025-11-23 22:04:53 +02:00
Files
ssms-addin/Addin.SSMS2018/ToolWindow1Control.xaml.vb

262 lines
7.6 KiB
VB.net
Raw Normal View History

2019-11-27 17:54:54 -08:00

Imports System
Imports System.Collections.Generic
2019-11-27 19:25:00 -08:00
Imports System.Drawing
2019-11-27 17:54:54 -08:00
Imports System.IO
2019-11-27 19:25:00 -08:00
Imports System.Windows.Controls
2019-12-01 12:19:10 -08:00
Imports System.Windows.Media.Imaging
2019-11-27 17:54:54 -08:00
Imports EnvDTE
Imports Microsoft.SqlServer.TransactSql.ScriptDom
Imports Microsoft.VisualStudio.Shell
'''<summary>
''' Interaction logic for ToolWindow1Control.xaml
'''</summary>
Partial Public Class ToolWindow1Control
Inherits System.Windows.Controls.UserControl
Public Sub New()
' This call is required by the designer.
InitializeComponent()
2019-12-01 12:19:10 -08:00
AddFiles(False)
2019-11-27 17:54:54 -08:00
' Add any initialization after the InitializeComponent() call.
End Sub
2019-12-01 12:19:10 -08:00
Function AddFiles(Optional Interactive As Boolean = True)
FileMenuTemplates.Items.Clear()
2019-11-27 17:54:54 -08:00
2019-12-01 12:19:10 -08:00
Dim Folder = SettingManager.GetTemplatesFolder()
2019-11-27 17:54:54 -08:00
2019-11-27 19:25:00 -08:00
If My.Computer.FileSystem.DirectoryExists(Folder) Then
2019-11-27 17:54:54 -08:00
2019-11-27 19:25:00 -08:00
Dim i As Integer = 1
2019-11-27 17:54:54 -08:00
2019-11-27 19:25:00 -08:00
CreateCommands(FileMenuTemplates, Folder, i)
2019-12-01 12:19:10 -08:00
Else
If Interactive Then
System.Windows.MessageBox.Show("Folder '" + Folder + "' doesn't exist!")
End If
2019-11-27 19:25:00 -08:00
End If
2019-11-27 17:54:54 -08:00
2019-12-01 12:19:10 -08:00
Dim mi = New MenuItem
mi.Header = "Refresh This List"
mi.Icon = My.Resources.ResourceManager.GetObject("sql-file-format")
AddHandler mi.Click, AddressOf buttonRefresh_Click
FileMenuTemplates.Items.Add(mi)
2019-11-27 17:54:54 -08:00
End Function
2019-11-27 19:25:00 -08:00
Function CreateCommands(MenuItem As MenuItem, Folder As String, ByRef i As Integer)
Dim Dirs = My.Computer.FileSystem.GetDirectories(Folder)
For Each DirStr In Dirs
Dim DI = My.Computer.FileSystem.GetFileInfo(DirStr)
Dim mi = New MenuItem
mi.Header = DI.Name
MenuItem.Items.Add(mi)
CreateCommands(mi, Path.Combine(Folder, DirStr), i)
i = i + 1
Next
Dim Files = My.Computer.FileSystem.GetFiles(Folder)
For Each File In Files
Dim FI = My.Computer.FileSystem.GetFileInfo(File)
2019-12-01 12:19:10 -08:00
Dim ObjImage = New System.Windows.Controls.Image
ObjImage.Source = New BitmapImage(New Uri("Resources/sql-file-format.ico", UriKind.Relative))
'ObjImage.Source = My.Resources.ResourceManager.GetObject("sql-file-format")
2019-11-27 19:25:00 -08:00
Dim mi = New MenuItem
mi.Header = FI.Name
mi.ToolTip = File
2019-12-01 12:19:10 -08:00
mi.Icon = ObjImage
'mi.Icon = My.Resources.ResourceManager.GetObject("sql-file-format")
2019-11-27 19:25:00 -08:00
AddHandler mi.Click, AddressOf insert_template
MenuItem.Items.Add(mi)
i = i + 1
Next
End Function
Private Sub buttonRefresh_Click(ByVal sender As Object, ByVal e As System.EventArgs)
AddFiles()
2019-12-01 13:06:34 -08:00
System.Windows.MessageBox.Show("The template list has been refreshed!")
2019-11-27 19:25:00 -08:00
End Sub
Private Sub insert_template(ByVal sender As Object, ByVal e As System.EventArgs)
Try
Dim FileName As String = sender.ToolTip
2019-12-01 13:06:34 -08:00
If My.Computer.FileSystem.FileExists(FileName) Then
2019-11-27 19:25:00 -08:00
2019-12-01 13:06:34 -08:00
Dim FileContent = My.Computer.FileSystem.ReadAllText(FileName)
2019-11-27 19:25:00 -08:00
2019-12-01 13:06:34 -08:00
Dim dte As DTE = TryCast(Package.GetGlobalService(GetType(DTE)), DTE)
2019-11-27 19:25:00 -08:00
2019-12-01 13:06:34 -08:00
If Not dte.ActiveDocument Is Nothing Then
2019-11-27 19:25:00 -08:00
2019-12-01 13:06:34 -08:00
Dim selection As TextSelection = DirectCast(dte.ActiveDocument.Selection, TextSelection)
selection.Delete()
selection.Insert(FileContent.Trim)
End If
Else
System.Windows.MessageBox.Show("File " + FileName + " doesn't exist!")
End If
2019-11-27 19:25:00 -08:00
Catch ex As Exception
System.Windows.MessageBox.Show(ex.Message)
End Try
End Sub
2019-11-27 17:54:54 -08:00
''' <summary>
''' Handles click on the button by displaying a message box.
''' </summary>
''' <param name="sender">The event sender.</param>
''' <param name="e">The event args.</param>
<System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1300:SpecifyMessageBoxOptions")>
Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
FormatSelection()
End Sub
Private Sub FormatSelection()
Dim dte As DTE = TryCast(Package.GetGlobalService(GetType(DTE)), DTE)
If Not dte.ActiveDocument Is Nothing Then
Dim title = "Format TSQL"
Try
Dim selection As TextSelection = DirectCast(dte.ActiveDocument.Selection, TextSelection)
Dim OldStr = selection.Text
Dim SqlParser As TSqlParser = Nothing
2019-12-01 13:06:34 -08:00
Dim TargetVersion As String = SettingManager.GetSQLParserVersion()
If TargetVersion = "SQL Server 2008" Then
2019-11-27 17:54:54 -08:00
SqlParser = New TSql100Parser(False)
2019-12-01 13:06:34 -08:00
ElseIf TargetVersion = "SQL Server 2012" Then
2019-11-27 17:54:54 -08:00
SqlParser = New TSql110Parser(False)
2019-12-01 13:06:34 -08:00
ElseIf TargetVersion = "SQL Server 2014" Then
2019-11-27 17:54:54 -08:00
SqlParser = New TSql120Parser(False)
2019-12-01 13:06:34 -08:00
ElseIf TargetVersion = "SQL Server 2016" Then
2019-11-27 17:54:54 -08:00
SqlParser = New TSql130Parser(False)
2019-12-01 13:06:34 -08:00
ElseIf TargetVersion = "SQL Server 2017" Then
2019-11-27 17:54:54 -08:00
SqlParser = New TSql140Parser(False)
2019-12-01 13:06:34 -08:00
ElseIf TargetVersion = "SQL Server 2019" Then
2019-11-27 18:25:59 -08:00
SqlParser = New TSql150Parser(False)
2019-11-27 17:54:54 -08:00
Else
2019-11-27 18:27:29 -08:00
SqlParser = New TSql140Parser(False)
2019-11-27 17:54:54 -08:00
End If
Dim parseErrors As IList(Of ParseError) = New List(Of ParseError)
Dim result As TSqlFragment = SqlParser.Parse(New StringReader(OldStr), parseErrors)
If parseErrors.Count > 0 Then
Dim ErrorStr = ""
For Each StrError In parseErrors
ErrorStr = ErrorStr + Environment.NewLine + StrError.Message
Next
Throw New System.Exception("TSqlParser unable format selected T-SQL due to a syntax error." + Environment.NewLine + ErrorStr)
End If
selection.Delete()
Dim StrAdd2 = ""
Dim Gen As SqlScriptGenerator = Nothing
2019-12-01 13:06:34 -08:00
If TargetVersion = "SQL Server 2008" Then
2019-11-27 17:54:54 -08:00
Gen = New Sql100ScriptGenerator
2019-12-01 13:06:34 -08:00
ElseIf TargetVersion = "SQL Server 2012" Then
2019-11-27 17:54:54 -08:00
Gen = New Sql110ScriptGenerator
2019-12-01 13:06:34 -08:00
ElseIf TargetVersion = "SQL Server 2014" Then
2019-11-27 17:54:54 -08:00
Gen = New Sql120ScriptGenerator
2019-12-01 13:06:34 -08:00
ElseIf TargetVersion = "SQL Server 2016" Then
2019-11-27 17:54:54 -08:00
Gen = New Sql130ScriptGenerator
2019-12-01 13:06:34 -08:00
ElseIf TargetVersion = "SQL Server 2017" Then
2019-11-27 17:54:54 -08:00
Gen = New Sql140ScriptGenerator
2019-12-01 13:06:34 -08:00
ElseIf TargetVersion = "SQL Server 2019" Then
2019-11-27 18:25:59 -08:00
Gen = New Sql150ScriptGenerator
2019-11-27 17:54:54 -08:00
Else
2019-11-27 18:27:29 -08:00
Gen = New Sql140ScriptGenerator
2019-11-27 17:54:54 -08:00
End If
Gen.Options.IncludeSemicolons = False
Gen.Options.AlignClauseBodies = False
Gen.GenerateScript(result, StrAdd2)
selection.Insert(StrAdd2.Trim)
Catch ex As Exception
System.Windows.MessageBox.Show(ex.Message)
End Try
End If
End Sub
2019-12-01 12:19:10 -08:00
Private Sub buttonHelp_Click(sender As Object, e As System.Windows.RoutedEventArgs)
Dim AboutBoxForm = New AboutBox
AboutBoxForm.ShowDialog()
AboutBoxForm.Dispose()
End Sub
Private Sub buttonSetting_Click(sender As Object, e As System.Windows.RoutedEventArgs)
Dim SettingFormForm = New SettingForm
SettingFormForm.ShowDialog()
SettingFormForm.Dispose()
End Sub
2019-11-27 17:54:54 -08:00
End Class