Imports System
Imports System.Collections.Generic
Imports System.Drawing
Imports System.IO
Imports System.Windows.Controls
Imports System.Windows.Media.Imaging
Imports EnvDTE
Imports Microsoft.SqlServer.TransactSql.ScriptDom
Imports Microsoft.VisualStudio.Shell
'''
''' Interaction logic for ToolWindow1Control.xaml
'''
Partial Public Class ToolWindow1Control
Inherits System.Windows.Controls.UserControl
Public Sub New()
' This call is required by the designer.
InitializeComponent()
AddFiles(False)
' Add any initialization after the InitializeComponent() call.
End Sub
Function AddFiles(Optional Interactive As Boolean = True)
FileMenuTemplates.Items.Clear()
Dim Folder = SettingManager.GetTemplatesFolder()
If My.Computer.FileSystem.DirectoryExists(Folder) Then
Dim i As Integer = 1
CreateCommands(FileMenuTemplates, Folder, i)
Else
If Interactive Then
System.Windows.MessageBox.Show("Folder '" + Folder + "' doesn't exist!")
End If
End If
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)
End Function
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)
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")
Dim mi = New MenuItem
mi.Header = FI.Name
mi.ToolTip = File
mi.Icon = ObjImage
'mi.Icon = My.Resources.ResourceManager.GetObject("sql-file-format")
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()
System.Windows.MessageBox.Show("Templates have been refreshed!")
End Sub
Private Sub insert_template(ByVal sender As Object, ByVal e As System.EventArgs)
Try
Dim FileName As String = sender.ToolTip
Dim FileContent = My.Computer.FileSystem.ReadAllText(FileName)
Dim dte As DTE = TryCast(Package.GetGlobalService(GetType(DTE)), DTE)
Dim selection As TextSelection = DirectCast(dte.ActiveDocument.Selection, TextSelection)
selection.Delete()
selection.Insert(FileContent.Trim)
Catch ex As Exception
System.Windows.MessageBox.Show(ex.Message)
End Try
End Sub
'''
''' Handles click on the button by displaying a message box.
'''
''' The event sender.
''' The event args.
Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
FormatSelection()
End Sub
Private Sub ComboBox_SelectionChanged(sender As Object, e As System.Windows.Controls.SelectionChangedEventArgs)
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
Dim TargetVersion As String = "2019" 'SettingManager.GetTSQLFormatVersion()
If TargetVersion = "2008" Then
SqlParser = New TSql100Parser(False)
ElseIf TargetVersion = "2012" Then
SqlParser = New TSql110Parser(False)
ElseIf TargetVersion = "2014" Then
SqlParser = New TSql120Parser(False)
ElseIf TargetVersion = "2016" Then
SqlParser = New TSql130Parser(False)
ElseIf TargetVersion = "2017" Then
SqlParser = New TSql140Parser(False)
ElseIf TargetVersion = "2019" Then
SqlParser = New TSql150Parser(False)
Else
SqlParser = New TSql140Parser(False)
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
If TargetVersion = "2008" Then
Gen = New Sql100ScriptGenerator
ElseIf TargetVersion = "2012" Then
Gen = New Sql110ScriptGenerator
ElseIf TargetVersion = "2014" Then
Gen = New Sql120ScriptGenerator
ElseIf TargetVersion = "2016" Then
Gen = New Sql130ScriptGenerator
ElseIf TargetVersion = "2017" Then
Gen = New Sql140ScriptGenerator
ElseIf TargetVersion = "2019" Then
Gen = New Sql150ScriptGenerator
Else
Gen = New Sql140ScriptGenerator
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
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
End Class