From ce44f59370f4f2bc8c8288c50ce12ab8675121ee Mon Sep 17 00:00:00 2001 From: Alex Bochkov Date: Sun, 1 Dec 2019 14:23:48 -0800 Subject: [PATCH] add poor man formatter --- Addin.SSMS2018/Addin.SSMS2018.vbproj | 15 +- .../My Project/Resources.Designer.vb | 42 +- Addin.SSMS2018/My Project/Resources.resx | 38 +- .../PoorMansTSqlFormatterLib35/LICENSE.txt | 620 ++++++++++++++++++ .../PoorMansTSqlFormatterLib35.dll | Bin 0 -> 134656 bytes Addin.SSMS2018/Resources/folder.png | Bin 0 -> 507 bytes Addin.SSMS2018/Resources/magic-wand.png | Bin 0 -> 967 bytes Addin.SSMS2018/Resources/refresh.png | Bin 0 -> 772 bytes Addin.SSMS2018/Resources/settings.png | Bin 0 -> 2470 bytes Addin.SSMS2018/Resources/sql-file-format.ico | Bin 45451 -> 0 bytes Addin.SSMS2018/Resources/sql-icon.png | Bin 1215 -> 0 bytes Addin.SSMS2018/Resources/sql-script.png | Bin 0 -> 618 bytes Addin.SSMS2018/SettingForm.Designer.vb | 19 +- Addin.SSMS2018/SettingForm.vb | 3 + Addin.SSMS2018/SettingManager.vb | 22 + Addin.SSMS2018/ToolWindow1Control.xaml | 24 +- Addin.SSMS2018/ToolWindow1Control.xaml.vb | 183 ++++-- 17 files changed, 857 insertions(+), 109 deletions(-) create mode 100644 Addin.SSMS2018/PoorMansTSqlFormatterLib35/LICENSE.txt create mode 100644 Addin.SSMS2018/PoorMansTSqlFormatterLib35/PoorMansTSqlFormatterLib35.dll create mode 100644 Addin.SSMS2018/Resources/folder.png create mode 100644 Addin.SSMS2018/Resources/magic-wand.png create mode 100644 Addin.SSMS2018/Resources/refresh.png create mode 100644 Addin.SSMS2018/Resources/settings.png delete mode 100644 Addin.SSMS2018/Resources/sql-file-format.ico delete mode 100644 Addin.SSMS2018/Resources/sql-icon.png create mode 100644 Addin.SSMS2018/Resources/sql-script.png diff --git a/Addin.SSMS2018/Addin.SSMS2018.vbproj b/Addin.SSMS2018/Addin.SSMS2018.vbproj index f210fbb..98a55fc 100644 --- a/Addin.SSMS2018/Addin.SSMS2018.vbproj +++ b/Addin.SSMS2018/Addin.SSMS2018.vbproj @@ -92,6 +92,10 @@ ..\..\..\..\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Extensions\Application\Microsoft.SqlServer.TransactSql.ScriptDom.dll + + False + PoorMansTSqlFormatterLib35\PoorMansTSqlFormatterLib35.dll + @@ -190,11 +194,14 @@ + + - - Always - - + + + + + diff --git a/Addin.SSMS2018/My Project/Resources.Designer.vb b/Addin.SSMS2018/My Project/Resources.Designer.vb index d0ce9fe..bcb2673 100644 --- a/Addin.SSMS2018/My Project/Resources.Designer.vb +++ b/Addin.SSMS2018/My Project/Resources.Designer.vb @@ -61,21 +61,51 @@ Namespace My.Resources End Property ''' - ''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property sql_file_format() As System.Drawing.Icon + Friend ReadOnly Property folder() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("sql-file-format", resourceCulture) - Return CType(obj,System.Drawing.Icon) + Dim obj As Object = ResourceManager.GetObject("folder", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) End Get End Property ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' - Friend ReadOnly Property sql_icon() As System.Drawing.Bitmap + Friend ReadOnly Property magic_wand() As System.Drawing.Bitmap Get - Dim obj As Object = ResourceManager.GetObject("sql_icon", resourceCulture) + Dim obj As Object = ResourceManager.GetObject("magic_wand", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property refresh() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("refresh", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property settings() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("settings", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property sql_script() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("sql_script", resourceCulture) Return CType(obj,System.Drawing.Bitmap) End Get End Property diff --git a/Addin.SSMS2018/My Project/Resources.resx b/Addin.SSMS2018/My Project/Resources.resx index fe0fc4d..b31d371 100644 --- a/Addin.SSMS2018/My Project/Resources.resx +++ b/Addin.SSMS2018/My Project/Resources.resx @@ -118,31 +118,19 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Resources\sql-file-format.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAAALEAAACxAcYtSY0AAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwa - AAADsUlEQVRYR92XSUxTURSGjQuX7ti5djYxYjCKqCSKjKIhKGJAUQkRSR1CVDBoRQ2VKUqhzELBgtIq - UwqCGlJFIyqKQpShICKGwQGNEaW2/b3vlhZqb9tHqRsX3+Kd83L+7953+9rOAcAbnwws8M3CSnu4p8LH - LRnBHhlwYc2ZDrPIYms23LyzoCfAHqtEwMJE4GQVdAfK4ceaZ4RZZOGdiRBWGAujgKgRKHgEvS0JZpGF - owK32mxLWBSsMRsBWxJmF7aYrYA1CbMQWzhDgCVhEWQNZwn8LcEMY+GIQGI9W4DDKMEMY+GIgHs6EFMB - CORswkugYYaxcESAD8wwFv9WQCici70ZfgjLPGqNx0eU0pyENhhRRt/Gw30KJk1hCtwJneJyVDOWntNZ - EQi7shxh4l6Ei8lDmQHeF4H1Cbz57ZmI6GNdDIFwcTEdeDKTHE0Jf2RxwM3D/BCcohLvtmUyBX5RgYFc - 4KMBPWHknQzD/WUU7Wi+qUf7o3kY7TwOdG+2YPwN+Xhb1H0NO+Fxhilg2NLJ4U2t93Cg5KvZoRKUj9Ke - jgSXNLVie+5vetBWXNQir0ZqCqpuTMKS8zqoVPHTwieZfBQ2BX4OFSIob4KG7pd+w8GSMUr+3Ze0X6Z6 - apJyS9HSAYsIDU3kPJCQFPl1WsutLnBM4HVnFR0eXvQd/eoKfBq4RutGQgt/0P6DF3fwszcKAeIPdEhQ - 1lvnCHDPPpKs2LhKH0K84j0G+65jfOgqre3I1RiE+iMgVebTIe6p350jwDHUX46cxnZElo5hd+E4DU1T - dmFiuAA+Ej0CsrX0nrWpGriKftEhm9LGnCfwdVCKgb4bFNXzu1SAOw9c75DsM71OqlXD9ZLeNCSm+ImZ - QNINOXqfReBt6z7ourbwF+jrkcOXrJILmY6MHD6u39quNPWnv249079g/LU/0hRlZsM5BEUq/gLfyOrj - b75HtOwTJbZiCHUt98n2F9I+R2dXJUS1PQiUfERIthpLLxh2QiSvQcfjQwiRdCBQrKZsF/egvO6yXQEN - FRg0BPCGHEJucPOD09id0403T6INQUy8DQIebIEyKpBAXsUy7hXLk8oTQH0UP+LIvURg0D+DIbD3iisR - GKESM2GGX0a6jULECtoZAhzBwnnk63gPGSy0RltMpeJaXAuM3I+swqvQUibPdpWiZecUpRENWHl2wiJ8 - SoAH//kvIh54SeBKhmv/DmPBV2DZBUwww6xB/p67eImx2B7rUrFhdTJ87bFGiPl/AOoRilFYTVaKAAAA - AElFTkSuQmCC - + + ..\Resources\magic-wand.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\refresh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\settings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sql-script.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/Addin.SSMS2018/PoorMansTSqlFormatterLib35/LICENSE.txt b/Addin.SSMS2018/PoorMansTSqlFormatterLib35/LICENSE.txt new file mode 100644 index 0000000..753d647 --- /dev/null +++ b/Addin.SSMS2018/PoorMansTSqlFormatterLib35/LICENSE.txt @@ -0,0 +1,620 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + diff --git a/Addin.SSMS2018/PoorMansTSqlFormatterLib35/PoorMansTSqlFormatterLib35.dll b/Addin.SSMS2018/PoorMansTSqlFormatterLib35/PoorMansTSqlFormatterLib35.dll new file mode 100644 index 0000000000000000000000000000000000000000..e813b53b80a9c0bc6a1d53c94f5bc65d5afbb7f6 GIT binary patch literal 134656 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%0APWZHzuyh0k|(!hoOY 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 Z9(6wv4WN%i@OpU3C&KM0lTVoj{te@wdp!UE literal 0 HcmV?d00001 diff --git a/Addin.SSMS2018/Resources/folder.png b/Addin.SSMS2018/Resources/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..c52aeb0eba5ac2be3fb65a432176aa148ce71737 GIT binary patch literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8!3a zClF?wvQ@Ve$dD{?jVKAuPb(=;EJ|f4FE7{2%*!rLPAo{(%P&fw{mw>;fq}8Y)5S3) zqV?@`TW@DWk+%7hU9vTsx;thk#LC35%ys$S`ba@U_Rid{=E;lqJF2sqi~n!n*u~}A z!ln0!osTaodhf}?6=Dn5#_!$A_kC{BB6sm7M=mwmYc! z0oB(eX7ZIhpZ#A%P%pYDbngbq*tCqzZ}#=A3l>woEyQ5-RzBtap*-0Gq4%}2lKe}r znoW`16JP&ZfLZ?Z2C=6V>sV?;@~=id_b9!7+tjDA-{v5D&h>nwD+&9ib9}fEyT5+6 zRYbby(#M{zuHGir1xrf|b}vW@>oHDd5H;`Nzv`G=AGGwW=smS9Y(W<*x9W4LFG_Tt z$M=j$AUpTJLzYzrpTfsAh1^~YLJcemj2=L$p0VJH<9}u43E~=mwr+NCRM3CF{_*k0 uKN-C)-jDISS@eoGJPFyQneajFM{{nmc;VIF7` zfCqU1I;{2MP7-g+2NZ!o;?!eK1Lo92Tl8@egCbC9NcAAATFi9-S2XCH3W3K#&*eVU zL1NHwxerd^);`oWf?GATcF_xt;44}bl4Tmwr`KnJ1C7HTNMNbR1W@0~1hmegb$#al z@SukcBOHN-OB!^sm%ix%ryZuB9D!xsc`&a=TXF$W&7339S{}H;1CY-XDC9djx^tah z(gYvuM_GC@4=_9rA7*)Zd;9pj;TI5yV4OFP9e*$6{SU&zPe(+4^6BU2;u4Zm(lWBL zb1r<#&lTk53xz_FNGvWWEc(7!QYtNzU#_UCx>lpO-O$*4_d)xk&Mu`&qwVh>7}gs| z(r7f9M*kXr@oHk`U(3?QmTlW^ckJ%(?`y9tB*Gsef*bQ?#+j5hQ+%}M3;#ni^)LO) zS5>FBJFXvER_#osrJ54LHTysO%1`Q2QnN}Ou_uyxfsg7UcgsK1|1@}+O85Uo`ls#6 zJ5Oe8cM{Ks>92;cx4xThAPQU4>PFu7b6s3qs8(2z%C4Wsik520-x~(26`RkPfj7!> z@Fqjw+2a=kX*!SMZCM3lXr4d$mh(~*ldUA%&J;#h+{(VU#TedXTr+%AZfgM@d>UR|70Qyss}# yCv{6L-E+LqoaV&t6U}>rr(zfWHr(4XKOZ-zYw`m&*Q#vr5dk+gIi@3ufAv4#X5irf literal 0 HcmV?d00001 diff --git a/Addin.SSMS2018/Resources/refresh.png b/Addin.SSMS2018/Resources/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..a8fd3eb89a1f635e1b68491344f50435e8221bd0 GIT binary patch literal 772 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy%*9TgAsieWw;%dH0CG7CJR*yM z^j#2UEC^o24rEA{xJHx&=ckpFCl;kLl$V$5W#(lUCnpx9>g5-u&wghk#lXPG8sHP+ z`v3obhW`u={~JPAg{GZJOFPpLyR#%~e?!{t^0&sfTJ)4ueEe4%a3hsYyKyL_m?6s*1M7FH7E7tFxO#LUXY&BHG&qM@y4VrFh(<>>0^ z?Hdpg86B6NUsPODR#j75SKrXo-qG1Rea6gLv**s6zi{cYm8;jT->`AZ*6lm?96NFL z(*1|e-+cJ=`OCK-KY#uGSFwDL3NXm|JzX3_BqYxs%#3DCWMI88d*k%AYnD!2Yb$&# zN-LRr;-SC)?U&B9sbKFvf9~MIjYsFdd%tPA-y5+L{XgDYmpA2J<2vcMGGg5~&wZ8~ z4z4Q<ADXmHeJ~@|+@*g`i^2!q$mSFGKO9y$w3EHs^yYzEf@jWM zX>wcDHRQ?O_9oAA>|FEykb?aEy)A0zRU`NrEHkGB2#B(weDfj^8A X6CEsr)~cNa20nwQtDnm{r-UW|1gdI; literal 0 HcmV?d00001 diff --git a/Addin.SSMS2018/Resources/settings.png b/Addin.SSMS2018/Resources/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..95eb264987d54997d1ffdb46ac9e45f82080d62c GIT binary patch literal 2470 zcmV;X30d}uP)$2)rt&0>d2Mmx>S7jx^lJGLbU_jldSwb`8 zL>>td&8ug+`}V#2A@TR?oZSlA>pTy8qSvdhrh>zbFv69bHtVq`Rw$Az!`?kje8al6mK}FXj4tCpWA0qj7AhFM_BRd7 zb-mmw%|PO>^AH9AsQ;S7n`gOoUmlVlim#iQfO42l7g0mI44k zW5Z5XzisQ$?2g>an|Ko)kzCjPg3FDk@)22@jm}%8ef=Dk8w?QeGOTOb9l>BwN)Mux z$_}O3MVDTd^v#=pBhJms&5vr4Md|UF(hNX+{hDqTPxyK%z~6g-t~$-_uTr|_pWWQT z2pSPWG3=2&E5UJhq(iu-J!jGdlVV=4H|awNK}kue>XGG&bN~tC_q`aZ7f!?k0KjAb z^Nw<-=gM&u&B{c#9OE`WaX3O;*VQIZnNrYmx_d`37+gRpm0i=GBS^v@ zuAVVNNl#Ru>qrpD>`@iKh-|(XDMiX~`QQ46^U|NG&dP^!)$c-_%?JAIM=wCqqAUdS z#|!G!pSpkrLd;+O>R#D@p*D-zPSmxXZzfHhyyeE5Zk~C={2PVzM1&CFjLYf%bW;(a zp&>WfV1q-hn}N}&TSr7f+D>$J&3o*L70SmSA5n@fy$rlwZ^rj6>@o(FIyr$rpfDT` zcO?9jap%?!4wYHRe%grU{jcm#7{hH3tHL!XyA8g%alLS_e4;0FV&Co@q$B z<6CQ7d6%giC`4j58ICJ*Zt)rGdG>#{QA#b>+vW{UcMJjaXR}m zH~v~Lhu=n6oFll?h#H5ILZs*Gm#Z0`?YVim`6VT#YJsjJLI}8wLCiGar59H7vhoV# z^JT)oKtHq|{J^QIt|gXbvF+Qo_Q$DR77m9yrUe2s1%TZEQ15W4eW!4E>s6gBHozbR z94&W&EjA*NHvrP4cn+FFqFQ8;N0uuDfz0NN%al4fm5Z0Ck}RPup^#g0O_}KR`e2~H zA6i>JaH?vS5i1@a0io-*CVHnXw&hM4tgarbDLJyIe zD;MA8lVuri4sD_(r9T(FzH<=OwaZ96HWK2zi>BD9dzo(GaJVB*?XvCLw)R_=#j2`n zNo&go&Om=Zczr%7DJ>I2n>JF9;=$>S`F{Zz6QX9>cMyHx^<}0&C_fqEM*)n2h{suV z?K0BZ(wu}SE-e#7n>J8IReuu1h#t^&-H$2FkT8B9<6+gJj60N&LdMv5!!V+$J>gM2 zIJ9XaEiNq+eZEZS@9%>{EzM5NvgIUZnr!>FI+GCb48q8AUAixBS$q8vtv>ZBKX(l^ zZJ_{o8z8>ki=le+#aICVxV3|U1bnTFP_@hX++&eQ^GFBJ%+dT-jJ~jo*Yr0u{;Y3UxoHSg4 z$D_<{9pt<^2TRYLU@;qDZf7{$k_w@yDt>k2dRjcQO!Q@D!Y4=CsN>k|`PDBeA<_>TfC+>m+xNoHdY=c`V#n1gXq`f(&6vU74# zJQj0TKD|mFKYsj}>+Idr#9!UG{!1XjC0JtCaS6fRx?XN20!#)__ciBlo#kMs$i(Je zW+8xjjPbYWjTtjdR(sEK;y5-tUvdC|ifiYfK!KiT$71(mhlsrvhwDl+h83%q0?g{* z&i;Hg_WA^Q=-Q*)PC%4oAnb6cC6p$G<{U(wnU$S`o?rc<^nJ+(1_q$@!xpeD3(Cu9 zE2^U2OaO*QXP+>9CF{-tU2uJd`{xITCz;wuP7Lk*#*%KEh~Q~Ima20&RCaPPb>VP0 z+;Mr)WoHD8y{Tso0MOfe2HtCIa1Xb&#ZH|*rHF*|YFdGBX-$pdP j4h%8Q#;HPb z5*jy7KqiOt>oou%j4Vp&DF1tn4Q|8EcRxJ!)ybuTBu>DR=#PFGIk0Z+8q1|rB>(_( zKX=XFPsZw^ECf{(k#x)3eG~wk!6Dae`N$NXFGL7n_(=_&VGd(3DwFHdea8)>@QN$1 z8qvvz+uCBT?LONXJ^psW7Yqg$^qlVAAqc`$j1f%lb7B9RXNQ|`ss!-wixA-l`graq zLuA)9BqoN5H_kHJ??Ro;*xYo0xMl5aZEZ1Ag>7J908X7gr3k9jlp5RK-fn{^EQnk2 zCo$(-VI1b)mxq#*%v1^B(F>6DKrWE%lq0=24|@=x8b-)qI)Fc-)%SGwbnR+vUZ<9WX$8Kq{yP$ul;R>yf7k)`SB#)BQ-Jc_ zmkKHX!1PaDkP+;*IaF{2cODCe|25V^3Df<0v7$=b0|k0sdHHN*N`5}9Tf4^UIo-Vv zL}5YtANGjH=weN~1|bw<9FC+0iPXuqv0Pw8jYH>4p0HprDA}>t{i>qg>`*$xrBoFJ kAriOZPa2WP>#4E-120#^x_FvId;kCd07*qoM6N<$g4@iY?*IS* literal 0 HcmV?d00001 diff --git a/Addin.SSMS2018/Resources/sql-file-format.ico b/Addin.SSMS2018/Resources/sql-file-format.ico deleted file mode 100644 index c1b4d45f27cf81131f5a9adb6c191d2200843dac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45451 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 diff --git a/Addin.SSMS2018/Resources/sql-script.png b/Addin.SSMS2018/Resources/sql-script.png new file mode 100644 index 0000000000000000000000000000000000000000..b23487efa91cb384f05073826c763a1cde1d12ab GIT binary patch literal 618 zcmV-w0+s!VP)QGEnMgRZ*;pXP?RztzY%i`weu(!Rt!N$tb*wNSA*4o|H+u!2l z=i`-)?S63aRzmStL-AQf@mfalTSxI*Nb+Ay@?lQ$VNdd7Q1WC_^J-Z0Y+CbeT=Q>T z^mb_>^@Miyh zvZ?vAs`<67`L(V2wypWMuKBsJ`Mb0EytMkixBA1p`^&`p(8~MK%=^>L`_s<*)zJLa z(EQrf{NLOB;obe_*@aO>;CTS{`2zw^z;7q_5b|)|NsB;0s9mH000Ga zQchCU$x^~V5P;zc4(mV%5Ja{>*c5O9lqDz-1rbo* z|8+32Dpl!pCg^{dOMjQ{Va!h9!qo*sp}7cSAuzzg3y>gyTTs9yFoY)*`J!f?_q**JhR35x zteLZ(Z1G=r@HutT0aj6OF&B{j=2?K#bM63z6kK8K1fCEq + x:Name="ToolBox" Height="35"> + + + + + + + + - - - - - - - - - - - diff --git a/Addin.SSMS2018/ToolWindow1Control.xaml.vb b/Addin.SSMS2018/ToolWindow1Control.xaml.vb index 8544f9d..f1e4e7b 100644 --- a/Addin.SSMS2018/ToolWindow1Control.xaml.vb +++ b/Addin.SSMS2018/ToolWindow1Control.xaml.vb @@ -3,6 +3,7 @@ Imports System Imports System.Collections.Generic Imports System.Drawing +Imports System.Drawing.Imaging Imports System.IO Imports System.Windows.Controls Imports System.Windows.Media.Imaging @@ -21,7 +22,10 @@ Partial Public Class ToolWindow1Control InitializeComponent() AddFiles(False) - ' Add any initialization after the InitializeComponent() call. + + MenuSettings.Icon = GetImage("settings") + 'MenuFormat.Icon = GetImage("magic_wand") + End Sub @@ -46,7 +50,7 @@ Partial Public Class ToolWindow1Control Dim mi = New MenuItem mi.Header = "Refresh This List" - mi.Icon = My.Resources.ResourceManager.GetObject("sql-file-format") + mi.Icon = GetImage("refresh") AddHandler mi.Click, AddressOf buttonRefresh_Click @@ -64,6 +68,7 @@ Partial Public Class ToolWindow1Control Dim mi = New MenuItem mi.Header = DI.Name + mi.Icon = GetImage("folder") MenuItem.Items.Add(mi) @@ -79,15 +84,11 @@ Partial Public Class ToolWindow1Control 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") + mi.Icon = GetImage("sql_script") AddHandler mi.Click, AddressOf insert_template @@ -99,6 +100,33 @@ Partial Public Class ToolWindow1Control End Function + + Function GetImage(Name As String) As System.Windows.Controls.Image + + '' This is the only way I was able to add image into the menu + Try + + Dim memory As MemoryStream = New MemoryStream() + My.Resources.ResourceManager.GetObject(Name).Save(memory, ImageFormat.Png) + memory.Position = 0 + Dim BitmapImage = New BitmapImage() + BitmapImage.BeginInit() + BitmapImage.StreamSource = memory + BitmapImage.CacheOption = BitmapCacheOption.OnLoad + BitmapImage.EndInit() + + Dim ObjImage = New System.Windows.Controls.Image + ObjImage.Source = BitmapImage + + Return ObjImage + + Catch ex As Exception + + End Try + + + End Function + Private Sub buttonRefresh_Click(ByVal sender As Object, ByVal e As System.EventArgs) AddFiles() @@ -154,6 +182,71 @@ Partial Public Class ToolWindow1Control End Sub + Function ParseCodeViaTSQLParser(OldCode As String) As String + + Dim ResultCode As String = "" + + Dim SqlParser As TSqlParser = Nothing + + Dim TargetVersion As String = SettingManager.GetSQLParserVersion() + If TargetVersion = "SQL Server 2008" Then + SqlParser = New TSql100Parser(False) + ElseIf TargetVersion = "SQL Server 2012" Then + SqlParser = New TSql110Parser(False) + ElseIf TargetVersion = "SQL Server 2014" Then + SqlParser = New TSql120Parser(False) + ElseIf TargetVersion = "SQL Server 2016" Then + SqlParser = New TSql130Parser(False) + ElseIf TargetVersion = "SQL Server 2017" Then + SqlParser = New TSql140Parser(False) + ElseIf TargetVersion = "SQL Server 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(OldCode), 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 + + + + Dim StrAdd2 = "" + Dim Gen As SqlScriptGenerator = Nothing + + If TargetVersion = "SQL Server 2008" Then + Gen = New Sql100ScriptGenerator + ElseIf TargetVersion = "SQL Server 2012" Then + Gen = New Sql110ScriptGenerator + ElseIf TargetVersion = "SQL Server 2014" Then + Gen = New Sql120ScriptGenerator + ElseIf TargetVersion = "SQL Server 2016" Then + Gen = New Sql130ScriptGenerator + ElseIf TargetVersion = "SQL Server 2017" Then + Gen = New Sql140ScriptGenerator + ElseIf TargetVersion = "SQL Server 2019" Then + Gen = New Sql150ScriptGenerator + Else + Gen = New Sql140ScriptGenerator + End If + + Gen.Options.IncludeSemicolons = False + Gen.Options.AlignClauseBodies = False + Gen.GenerateScript(result, ResultCode) + + Return ResultCode + + End Function Private Sub FormatSelection() @@ -170,71 +263,45 @@ Partial Public Class ToolWindow1Control Dim OldStr = selection.Text - Dim SqlParser As TSqlParser = Nothing - - Dim TargetVersion As String = SettingManager.GetSQLParserVersion() - If TargetVersion = "SQL Server 2008" Then - SqlParser = New TSql100Parser(False) - ElseIf TargetVersion = "SQL Server 2012" Then - SqlParser = New TSql110Parser(False) - ElseIf TargetVersion = "SQL Server 2014" Then - SqlParser = New TSql120Parser(False) - ElseIf TargetVersion = "SQL Server 2016" Then - SqlParser = New TSql130Parser(False) - ElseIf TargetVersion = "SQL Server 2017" Then - SqlParser = New TSql140Parser(False) - ElseIf TargetVersion = "SQL Server 2019" Then - SqlParser = New TSql150Parser(False) - Else - SqlParser = New TSql140Parser(False) + 'nothing is selected + If String.IsNullOrEmpty(OldStr) Then + Return End If - Dim parseErrors As IList(Of ParseError) = New List(Of ParseError) - Dim result As TSqlFragment = SqlParser.Parse(New StringReader(OldStr), parseErrors) + Dim Result As String = "" - If parseErrors.Count > 0 Then + If SettingManager.GetSQLParserType() = False Then + Result = ParseCodeViaTSQLParser(OldStr) + Else + Dim FO = New PoorMansTSqlFormatterLib.Formatters.TSqlStandardFormatterOptions With { + .IndentString = "\t", + .SpacesPerTab = 4, + .MaxLineWidth = 999, + .ExpandCommaLists = True, + .TrailingCommas = True, + .SpaceAfterExpandedComma = False, + .ExpandBooleanExpressions = True, + .ExpandCaseStatements = True, + .ExpandBetweenConditions = False, + .BreakJoinOnSections = False, + .UppercaseKeywords = True, + .HTMLColoring = False, + .KeywordStandardization = True} - 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) + Dim formatter = New PoorMansTSqlFormatterLib.Formatters.TSqlStandardFormatter(FO) + Dim formatMgr = New PoorMansTSqlFormatterLib.SqlFormattingManager(formatter) + Result = formatMgr.Format(OldStr) End If selection.Delete() - Dim StrAdd2 = "" - Dim Gen As SqlScriptGenerator = Nothing - - If TargetVersion = "SQL Server 2008" Then - Gen = New Sql100ScriptGenerator - ElseIf TargetVersion = "SQL Server 2012" Then - Gen = New Sql110ScriptGenerator - ElseIf TargetVersion = "SQL Server 2014" Then - Gen = New Sql120ScriptGenerator - ElseIf TargetVersion = "SQL Server 2016" Then - Gen = New Sql130ScriptGenerator - ElseIf TargetVersion = "SQL Server 2017" Then - Gen = New Sql140ScriptGenerator - ElseIf TargetVersion = "SQL Server 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) + selection.Insert(Result) Catch ex As Exception System.Windows.MessageBox.Show(ex.Message) End Try - End If End Sub