diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/Commands/EditConnectionsFormCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/Commands/EditConnectionsFormCommand.cs
new file mode 100644
index 0000000..c79e403
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/Commands/EditConnectionsFormCommand.cs
@@ -0,0 +1,30 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns.ConnectionStringsManager.Commands
+{
+ /// <summary>The edit connections form command.</summary>
+ public class EditConnectionsFormCommand : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="EditConnectionsFormCommand"/> class.</summary>
+ public EditConnectionsFormCommand()
+ : base("&Edit Connection Strings")
+ {
+ SmallImage = ImageResource.database_edit;
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ DbConnectionsForm frm = Services.Resolve<DbConnectionsForm>();
+ frm.ShowDialog(HostWindow.Instance);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/ConnectionStringBuilderForm.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/ConnectionStringBuilderForm.cs
new file mode 100644
index 0000000..b860634
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/ConnectionStringBuilderForm.cs
@@ -0,0 +1,346 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Data.Common;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Properties;
+
+namespace MiniSqlQuery.PlugIns.ConnectionStringsManager
+{
+ /// <summary>The connection string builder form.</summary>
+ public partial class ConnectionStringBuilderForm : Form
+ {
+ /// <summary>The _host window.</summary>
+ private readonly IHostWindow _hostWindow;
+
+ /// <summary>The _services.</summary>
+ private readonly IApplicationServices _services;
+
+ /// <summary>Gets or sets ConnectionDefinition.</summary>
+ public DbConnectionDefinition ConnectionDefinition { get; set; }
+
+ /// <summary>The default provider name.</summary>
+ public const string DefaultProviderName = "System.Data.SqlClient";
+
+ /// <summary>The _initialised.</summary>
+ private bool _initialised;
+
+ /// <summary>The _loaded.</summary>
+ private bool _loaded;
+
+ /// <summary>The _init provider.</summary>
+ private string _initProvider;
+
+ /// <summary>The _provider name.</summary>
+ private string _providerName = DefaultProviderName;
+
+ /// <summary>The _conn str.</summary>
+ private string _connStr;
+
+ /// <summary>The _conn str bldr.</summary>
+ private DbConnectionStringBuilder _connStrBldr;
+
+ /// <summary>The _dirty.</summary>
+ private bool _dirty;
+
+ /// <summary>Gets or sets ConnectionName.</summary>
+ public string ConnectionName
+ {
+ get { return txtConnectionName.Text; }
+ set { txtConnectionName.Text = value; }
+ }
+
+ /// <summary>Gets or sets Comments.</summary>
+ public string Comments
+ {
+ get { return txtComments.Text; }
+ set { txtComments.Text = value; }
+ }
+
+ /// <summary>Gets or sets ProviderName.</summary>
+ public string ProviderName
+ {
+ get { return _providerName; }
+ set
+ {
+ _providerName = value;
+ cboProvider.SelectedItem = _providerName;
+ }
+ }
+
+ /// <summary>
+ /// The supplied connection string - or if during an edit - the new one.
+ /// </summary>
+ public string ConnectionString
+ {
+ get
+ {
+ if (_connStrBldr != null)
+ {
+ return _connStrBldr.ConnectionString;
+ }
+
+ return _connStr;
+ }
+
+ set
+ {
+ _connStr = value; // store
+ if (_connStrBldr == null)
+ {
+ BindNewConnectionStringBuilder();
+ }
+ }
+ }
+
+ /// <summary>Gets DbConnectionStringBuilderInstance.</summary>
+ public DbConnectionStringBuilder DbConnectionStringBuilderInstance
+ {
+ get { return _connStrBldr; }
+ }
+
+
+ /// <summary>Initializes a new instance of the <see cref="ConnectionStringBuilderForm"/> class.</summary>
+ /// <param name="hostWindow">The host window.</param>
+ /// <param name="services">The services.</param>
+ public ConnectionStringBuilderForm(IHostWindow hostWindow, IApplicationServices services)
+ {
+ InitializeComponent();
+ _hostWindow = hostWindow;
+ _services = services;
+ Icon = ImageResource.database_edit_icon;
+ }
+
+ /// <summary>Initializes a new instance of the <see cref="ConnectionStringBuilderForm"/> class.</summary>
+ /// <param name="hostWindow">The host window.</param>
+ /// <param name="definition">The definition.</param>
+ /// <param name="services">The services.</param>
+ public ConnectionStringBuilderForm(IHostWindow hostWindow, DbConnectionDefinition definition, IApplicationServices services)
+ : this(hostWindow, services)
+ {
+ ConnectionDefinition = definition;
+ ConnectionName = ConnectionDefinition.Name;
+ Comments = ConnectionDefinition.Comment;
+ _initProvider = ConnectionDefinition.ProviderName;
+ _connStr = ConnectionDefinition.ConnectionString;
+ }
+
+ /// <summary>The connection string builder form_ load.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void ConnectionStringBuilderForm_Load(object sender, EventArgs e)
+ {
+ cboProvider.DataSource = Utility.GetSqlProviderNames();
+ _initialised = true;
+ }
+
+ /// <summary>The connection string builder form_ shown.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void ConnectionStringBuilderForm_Shown(object sender, EventArgs e)
+ {
+ if (_initProvider == null)
+ {
+ ProviderName = DefaultProviderName;
+ }
+ else
+ {
+ ProviderName = _initProvider;
+ }
+
+ _loaded = true;
+ }
+
+ /// <summary>The connection string builder form_ form closing.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void ConnectionStringBuilderForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (_dirty)
+ {
+ DialogResult saveFile = _hostWindow.DisplayMessageBox(
+ this,
+ Resources.The_connection_details_have_changed__do_you_want_to_save, Resources.Save_Changes,
+ MessageBoxButtons.YesNoCancel,
+ MessageBoxIcon.Question,
+ MessageBoxDefaultButton.Button1,
+ 0,
+ null,
+ null);
+
+ switch (saveFile)
+ {
+ case DialogResult.Yes:
+ WriteValuesBack();
+ break;
+ case DialogResult.Cancel:
+ e.Cancel = true;
+ break;
+ }
+ }
+ }
+
+
+ /// <summary>The tool strip button ok_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void toolStripButtonOk_Click(object sender, EventArgs e)
+ {
+ DialogResult = DialogResult.OK;
+ WriteValuesBack();
+ Close();
+ }
+
+ /// <summary>The tool strip button cancel_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void toolStripButtonCancel_Click(object sender, EventArgs e)
+ {
+ // todo - is dirty?
+ DialogResult = DialogResult.Cancel;
+ Close();
+ }
+
+ /// <summary>The write values back.</summary>
+ protected void WriteValuesBack()
+ {
+ if (ConnectionDefinition == null)
+ {
+ ConnectionDefinition = new DbConnectionDefinition();
+ }
+
+ ConnectionDefinition.Name = ConnectionName;
+ ConnectionDefinition.ProviderName = ProviderName;
+ ConnectionDefinition.ConnectionString = ConnectionString;
+ ConnectionDefinition.Comment = Comments;
+ _dirty = false;
+ }
+
+
+ /// <summary>The bind new connection string builder.</summary>
+ private void BindNewConnectionStringBuilder()
+ {
+ if (!_initialised)
+ {
+ return;
+ }
+
+ bool getBuilderFailed = false;
+ try
+ {
+ _connStrBldr = DbProviderFactories.GetFactory(ProviderName).CreateConnectionStringBuilder();
+ if (_connStrBldr == null)
+ {
+ getBuilderFailed = true;
+ }
+ }
+ catch
+ {
+ getBuilderFailed = true;
+ }
+
+ if (getBuilderFailed)
+ {
+ _connStrBldr = new GenericConnectionStringBuilder();
+ }
+
+ try
+ {
+ _connStrBldr.ConnectionString = _connStr;
+ }
+ catch (ArgumentException argExp)
+ {
+ // consume error but notify
+ MessageBox.Show(Resources.BindNewConnectionStringBuilder_Could_not_populate_with_current_connection_string___ + argExp.Message);
+ }
+
+ propertyGridDbConnection.SelectedObject = _connStrBldr;
+ }
+
+ /// <summary>The cbo provider_ selected index changed.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void cboProvider_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (!_initialised)
+ {
+ return;
+ }
+
+ SetDirty();
+ if (cboProvider.SelectedItem != null)
+ {
+ ProviderName = cboProvider.SelectedItem.ToString();
+ BindNewConnectionStringBuilder();
+ }
+ }
+
+ /// <summary>The items text changed.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void ItemsTextChanged(object sender, EventArgs e)
+ {
+ SetDirty();
+ }
+
+ /// <summary>The property grid db connection_ property value changed.</summary>
+ /// <param name="s">The s.</param>
+ /// <param name="e">The e.</param>
+ private void propertyGridDbConnection_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
+ {
+ SetDirty();
+ }
+
+ /// <summary>The set dirty.</summary>
+ private void SetDirty()
+ {
+ if (!_loaded)
+ {
+ return;
+ }
+
+ if (!_dirty)
+ {
+ _dirty = true;
+ Text += "*";
+ }
+ }
+
+ /// <summary>The tool strip button test_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void toolStripButtonTest_Click(object sender, EventArgs e)
+ {
+ // do a standalone raw connection test
+ Exception exp = QueryRunner.TestDbConnection(ProviderName, ConnectionString);
+ if (exp == null)
+ {
+ string msg = string.Format(Resources.Connected_to_0_successfully, ConnectionName);
+ _hostWindow.DisplaySimpleMessageBox(this, msg, Resources.Connection_Successful);
+ }
+ else
+ {
+ string msg = string.Format(Resources.Failed_connecting_to_0_1_2, ConnectionName, Environment.NewLine, exp.Message);
+ _hostWindow.DisplaySimpleMessageBox(this, msg, Resources.Connection_Failed);
+ }
+ }
+
+#if DEBUG
+
+ /// <summary>The to string.</summary>
+ /// <returns>The to string.</returns>
+ public override string ToString()
+ {
+ return string.Format("[ConnectionStringBuilderForm => Name: {0}; Provider: {1}; ConnectionString: {2}]", ConnectionName, ProviderName,
+ ConnectionString);
+ }
+
+#endif
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/ConnectionStringBuilderForm.Designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/ConnectionStringBuilderForm.Designer.cs
new file mode 100644
index 0000000..36e0d03
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/ConnectionStringBuilderForm.Designer.cs
@@ -0,0 +1,224 @@
+namespace MiniSqlQuery.PlugIns.ConnectionStringsManager
+{
+ partial class ConnectionStringBuilderForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConnectionStringBuilderForm));
+ this.cboProvider = new System.Windows.Forms.ComboBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.propertyGridDbConnection = new System.Windows.Forms.PropertyGrid();
+ this.label2 = new System.Windows.Forms.Label();
+ this.txtConnectionName = new System.Windows.Forms.TextBox();
+ this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+ this.toolStripButtonOk = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButtonCancel = new System.Windows.Forms.ToolStripButton();
+ this.txtComments = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripButtonTest = new System.Windows.Forms.ToolStripButton();
+ this.groupBox1.SuspendLayout();
+ this.toolStrip1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // cboProvider
+ //
+ this.cboProvider.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.cboProvider.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cboProvider.FormattingEnabled = true;
+ this.cboProvider.Location = new System.Drawing.Point(120, 94);
+ this.cboProvider.Name = "cboProvider";
+ this.cboProvider.Size = new System.Drawing.Size(295, 21);
+ this.cboProvider.TabIndex = 5;
+ this.cboProvider.SelectedIndexChanged += new System.EventHandler(this.cboProvider_SelectedIndexChanged);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(12, 97);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(46, 13);
+ this.label1.TabIndex = 4;
+ this.label1.Text = "Provider";
+ //
+ // groupBox1
+ //
+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.groupBox1.Controls.Add(this.propertyGridDbConnection);
+ this.groupBox1.Location = new System.Drawing.Point(12, 121);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(403, 288);
+ this.groupBox1.TabIndex = 10;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Connection Settings";
+ //
+ // propertyGridDbConnection
+ //
+ this.propertyGridDbConnection.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.propertyGridDbConnection.Location = new System.Drawing.Point(3, 16);
+ this.propertyGridDbConnection.Name = "propertyGridDbConnection";
+ this.propertyGridDbConnection.Size = new System.Drawing.Size(397, 269);
+ this.propertyGridDbConnection.TabIndex = 0;
+ this.propertyGridDbConnection.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.propertyGridDbConnection_PropertyValueChanged);
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(12, 15);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(35, 13);
+ this.label2.TabIndex = 0;
+ this.label2.Text = "Name";
+ //
+ // txtConnectionName
+ //
+ this.txtConnectionName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtConnectionName.Location = new System.Drawing.Point(120, 12);
+ this.txtConnectionName.Name = "txtConnectionName";
+ this.txtConnectionName.Size = new System.Drawing.Size(295, 20);
+ this.txtConnectionName.TabIndex = 1;
+ this.txtConnectionName.TextChanged += new System.EventHandler(this.ItemsTextChanged);
+ //
+ // toolStrip1
+ //
+ this.toolStrip1.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripButtonOk,
+ this.toolStripButtonCancel,
+ this.toolStripSeparator1,
+ this.toolStripButtonTest});
+ this.toolStrip1.Location = new System.Drawing.Point(0, 412);
+ this.toolStrip1.Name = "toolStrip1";
+ this.toolStrip1.Size = new System.Drawing.Size(427, 25);
+ this.toolStrip1.TabIndex = 15;
+ this.toolStrip1.Text = "toolStrip1";
+ //
+ // toolStripButtonOk
+ //
+ this.toolStripButtonOk.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+ this.toolStripButtonOk.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonOk.Image")));
+ this.toolStripButtonOk.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButtonOk.Name = "toolStripButtonOk";
+ this.toolStripButtonOk.Size = new System.Drawing.Size(27, 22);
+ this.toolStripButtonOk.Text = "&OK";
+ this.toolStripButtonOk.Click += new System.EventHandler(this.toolStripButtonOk_Click);
+ //
+ // toolStripButtonCancel
+ //
+ this.toolStripButtonCancel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+ this.toolStripButtonCancel.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonCancel.Image")));
+ this.toolStripButtonCancel.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButtonCancel.Name = "toolStripButtonCancel";
+ this.toolStripButtonCancel.Size = new System.Drawing.Size(47, 22);
+ this.toolStripButtonCancel.Text = "&Cancel";
+ this.toolStripButtonCancel.Click += new System.EventHandler(this.toolStripButtonCancel_Click);
+ //
+ // txtComments
+ //
+ this.txtComments.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtComments.Location = new System.Drawing.Point(120, 38);
+ this.txtComments.Multiline = true;
+ this.txtComments.Name = "txtComments";
+ this.txtComments.Size = new System.Drawing.Size(295, 50);
+ this.txtComments.TabIndex = 3;
+ this.txtComments.TextChanged += new System.EventHandler(this.ItemsTextChanged);
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(12, 41);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(56, 13);
+ this.label3.TabIndex = 2;
+ this.label3.Text = "Comments";
+ //
+ // toolStripSeparator1
+ //
+ this.toolStripSeparator1.Name = "toolStripSeparator1";
+ this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
+ //
+ // toolStripButtonTest
+ //
+ this.toolStripButtonTest.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+ this.toolStripButtonTest.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonTest.Image")));
+ this.toolStripButtonTest.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButtonTest.Name = "toolStripButtonTest";
+ this.toolStripButtonTest.Size = new System.Drawing.Size(42, 22);
+ this.toolStripButtonTest.Text = "Test...";
+ this.toolStripButtonTest.Click += new System.EventHandler(this.toolStripButtonTest_Click);
+ //
+ // ConnectionStringBuilderForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(427, 437);
+ this.Controls.Add(this.txtComments);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.toolStrip1);
+ this.Controls.Add(this.txtConnectionName);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.cboProvider);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "ConnectionStringBuilderForm";
+ this.Text = "Connection String Builder";
+ this.Load += new System.EventHandler(this.ConnectionStringBuilderForm_Load);
+ this.Shown += new System.EventHandler(this.ConnectionStringBuilderForm_Shown);
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ConnectionStringBuilderForm_FormClosing);
+ this.groupBox1.ResumeLayout(false);
+ this.toolStrip1.ResumeLayout(false);
+ this.toolStrip1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ComboBox cboProvider;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txtConnectionName;
+ private System.Windows.Forms.ToolStrip toolStrip1;
+ private System.Windows.Forms.ToolStripButton toolStripButtonCancel;
+ private System.Windows.Forms.ToolStripButton toolStripButtonOk;
+ private System.Windows.Forms.PropertyGrid propertyGridDbConnection;
+ private System.Windows.Forms.TextBox txtComments;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+ private System.Windows.Forms.ToolStripButton toolStripButtonTest;
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/ConnectionStringBuilderForm.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/ConnectionStringBuilderForm.resx
new file mode 100644
index 0000000..bfb5614
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/ConnectionStringBuilderForm.resx
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="toolStripButtonOk.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
+ U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
+ VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
+ QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
+ /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
+ cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
+ 3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
+ dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
+ NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
+ s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
+</value>
+ </data>
+ <data name="toolStripButtonCancel.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
+ U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
+ VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
+ QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
+ /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
+ cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
+ 3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
+ dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
+ NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
+ s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
+</value>
+ </data>
+ <data name="toolStripButtonTest.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
+ U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
+ VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
+ QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
+ /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
+ cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
+ 3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
+ dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
+ NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
+ s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
+</value>
+ </data>
+</root>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/ConnectionStringsManagerLoader.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/ConnectionStringsManagerLoader.cs
new file mode 100644
index 0000000..5f8965c
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/ConnectionStringsManagerLoader.cs
@@ -0,0 +1,34 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.PlugIns.ConnectionStringsManager.Commands;
+
+namespace MiniSqlQuery.PlugIns.ConnectionStringsManager
+{
+ /// <summary>The connection strings manager loader.</summary>
+ public class ConnectionStringsManagerLoader : PluginLoaderBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="ConnectionStringsManagerLoader"/> class.</summary>
+ public ConnectionStringsManagerLoader() : base(
+ "Connection String Manager",
+ "A Mini SQL Query Plugin for managing the list of connection strings.",
+ 10)
+ {
+ }
+
+ /// <summary>Iinitialize the plug in.</summary>
+ public override void InitializePlugIn()
+ {
+ Services.RegisterComponent<DbConnectionsForm>("DbConnectionsForm");
+ ToolStripMenuItem editMenu = Services.HostWindow.GetMenuItem("edit");
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<EditConnectionsFormCommand>());
+ Services.HostWindow.AddToolStripCommand<EditConnectionsFormCommand>(null);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/DbConnectionsForm.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/DbConnectionsForm.cs
new file mode 100644
index 0000000..b3fdbbc
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/DbConnectionsForm.cs
@@ -0,0 +1,345 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Properties;
+
+namespace MiniSqlQuery.PlugIns.ConnectionStringsManager
+{
+ /// <summary>The db connections form.</summary>
+ public partial class DbConnectionsForm : Form
+ {
+ /// <summary>The _host window.</summary>
+ private readonly IHostWindow _hostWindow;
+
+ /// <summary>The _services.</summary>
+ private readonly IApplicationServices _services;
+
+ /// <summary>The _settings.</summary>
+ private readonly IApplicationSettings _settings;
+
+ /// <summary>The _definition list.</summary>
+ private DbConnectionDefinitionList _definitionList;
+
+ private bool _loaded;
+
+ private bool _dirty;
+
+ /// <summary>Initializes a new instance of the <see cref="DbConnectionsForm"/> class.</summary>
+ public DbConnectionsForm()
+ {
+ InitializeComponent();
+ toolStripButtonAdd.Image = ImageResource.database_add;
+ toolStripButtonCopyAsNew.Image = ImageResource.database_add;
+ toolStripButtonEditConnStr.Image = ImageResource.database_edit;
+ toolStripButtonDelete.Image = ImageResource.database_delete;
+ Icon = ImageResource.disconnect_icon;
+ }
+
+ /// <summary>Initializes a new instance of the <see cref="DbConnectionsForm"/> class.</summary>
+ /// <param name="services">The services.</param>
+ /// <param name="hostWindow">The host window.</param>
+ /// <param name="settings">The settings.</param>
+ public DbConnectionsForm(IApplicationServices services, IHostWindow hostWindow, IApplicationSettings settings)
+ : this()
+ {
+ _services = services;
+ _hostWindow = hostWindow;
+ _settings = settings;
+ }
+
+ /// <summary>The load connection definitions.</summary>
+ /// <returns></returns>
+ private static DbConnectionDefinitionList LoadConnectionDefinitions()
+ {
+ return DbConnectionDefinitionList.FromXml(Utility.LoadConnections());
+ }
+
+
+ /// <summary>The add to list.</summary>
+ /// <param name="definition">The definition.</param>
+ private void AddToList(DbConnectionDefinition definition)
+ {
+ if (!lstConnections.Items.Contains(definition))
+ {
+ lstConnections.Items.Add(definition);
+ SetDirty();
+ }
+ }
+
+ /// <summary>The db connections form_ form closing.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void DbConnectionsForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (_dirty)
+ {
+ DialogResult saveFile = _hostWindow.DisplayMessageBox(
+ this,
+ Resources.The_connection_details_have_changed__do_you_want_to_save,
+ Resources.Save_Changes,
+ MessageBoxButtons.YesNoCancel,
+ MessageBoxIcon.Question,
+ MessageBoxDefaultButton.Button1,
+ 0,
+ null,
+ null);
+
+ switch (saveFile)
+ {
+ case DialogResult.Yes:
+ SaveConnectionDefinitions(_definitionList);
+ break;
+ case DialogResult.Cancel:
+ e.Cancel = true;
+ break;
+ }
+ }
+ }
+
+ /// <summary>The db connections form_ shown.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void DbConnectionsForm_Shown(object sender, EventArgs e)
+ {
+ _definitionList = LoadConnectionDefinitions();
+ UpdateListView();
+ _loaded = true;
+ }
+
+ /// <summary>The manage definition.</summary>
+ /// <param name="definition">The definition.</param>
+ private void ManageDefinition(DbConnectionDefinition definition)
+ {
+ ConnectionStringBuilderForm frm;
+ string oldName = null;
+
+ if (definition == null)
+ {
+ frm = new ConnectionStringBuilderForm(_hostWindow, _services); // new blank form
+ }
+ else
+ {
+ oldName = definition.Name;
+ frm = new ConnectionStringBuilderForm(_hostWindow, definition, _services);
+ }
+
+ frm.ShowDialog(this);
+
+ if (frm.DialogResult == DialogResult.OK)
+ {
+ SetDirty();
+
+ if (lstConnections.Items.Contains(frm.ConnectionDefinition) && definition != null)
+ {
+ if (definition.Name != oldName)
+ {
+ // want the list text to update due to name change
+ UpdateListView();
+ lstConnections.SelectedItem = definition;
+ }
+ else
+ {
+ UpdateDetailsPanel(lstConnections.SelectedItem as DbConnectionDefinition);
+ }
+ }
+ else
+ {
+ _definitionList.AddDefinition(frm.ConnectionDefinition);
+ AddToList(frm.ConnectionDefinition);
+ lstConnections.SelectedItem = frm.ConnectionDefinition;
+ }
+ }
+ }
+
+ /// <summary>The remove from list.</summary>
+ /// <param name="definition">The definition.</param>
+ private void RemoveFromList(DbConnectionDefinition definition)
+ {
+ if (lstConnections.Items.Contains(definition))
+ {
+ lstConnections.Items.Remove(definition);
+ SetDirty();
+ }
+ }
+
+
+ /// <summary>The save connection definitions.</summary>
+ /// <param name="data">The data.</param>
+ private void SaveConnectionDefinitions(DbConnectionDefinitionList data)
+ {
+ _settings.SetConnectionDefinitions(data);
+ Utility.SaveConnections(data);
+ _dirty = false;
+ }
+
+ /// <summary>The update details panel.</summary>
+ /// <param name="definition">The definition.</param>
+ private void UpdateDetailsPanel(DbConnectionDefinition definition)
+ {
+ if (definition != null)
+ {
+ txtName.Text = definition.Name;
+ txtProvider.Text = definition.ProviderName;
+ txtConn.Text = definition.ConnectionString;
+ txtComment.Text = definition.Comment;
+ }
+ else
+ {
+ txtName.Clear();
+ txtProvider.Clear();
+ txtConn.Clear();
+ txtComment.Clear();
+ }
+ }
+
+ /// <summary>The update list view.</summary>
+ private void UpdateListView()
+ {
+ if (_definitionList.Definitions != null && _definitionList.Definitions.Length > 0)
+ {
+ lstConnections.Items.Clear();
+ lstConnections.Items.AddRange(_definitionList.Definitions);
+ lstConnections.SelectedItem = _definitionList.Definitions[0];
+ }
+ }
+
+ /// <summary>The lst connections_ double click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void lstConnections_DoubleClick(object sender, EventArgs e)
+ {
+ DbConnectionDefinition definition = lstConnections.SelectedItem as DbConnectionDefinition;
+ if (definition != null)
+ {
+ ManageDefinition(definition);
+ }
+ }
+
+ /// <summary>The lst connections_ selected value changed.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void lstConnections_SelectedValueChanged(object sender, EventArgs e)
+ {
+ DbConnectionDefinition definition = lstConnections.SelectedItem as DbConnectionDefinition;
+ UpdateDetailsPanel(definition);
+ }
+
+ /// <summary>The tool strip button add_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void toolStripButtonAdd_Click(object sender, EventArgs e)
+ {
+ ManageDefinition(null);
+ }
+
+ /// <summary>The tool strip button cancel_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void toolStripButtonCancel_Click(object sender, EventArgs e)
+ {
+ Close();
+ }
+
+ /// <summary>The tool strip button copy as new_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void toolStripButtonCopyAsNew_Click(object sender, EventArgs e)
+ {
+ DbConnectionDefinition definition = lstConnections.SelectedItem as DbConnectionDefinition;
+ if (definition != null)
+ {
+ DbConnectionDefinition newDefinition = DbConnectionDefinition.FromXml(definition.ToXml());
+ newDefinition.Name = "Copy of " + newDefinition.Name;
+ ManageDefinition(newDefinition);
+ }
+ }
+
+ /// <summary>The tool strip button delete_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void toolStripButtonDelete_Click(object sender, EventArgs e)
+ {
+ DbConnectionDefinition definition = lstConnections.SelectedItem as DbConnectionDefinition;
+ if (definition != null)
+ {
+ int newIndex = Math.Max(lstConnections.SelectedIndex - 1, 0);
+ _definitionList.RemoveDefinition(definition);
+ RemoveFromList(definition);
+ if (lstConnections.Items.Count > 0)
+ {
+ lstConnections.SelectedIndex = newIndex;
+ }
+ }
+ }
+
+ /// <summary>The tool strip button edit conn str_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void toolStripButtonEditConnStr_Click(object sender, EventArgs e)
+ {
+ DbConnectionDefinition definition = lstConnections.SelectedItem as DbConnectionDefinition;
+ if (definition != null)
+ {
+ ManageDefinition(definition);
+ }
+ }
+
+ /// <summary>The tool strip button ok_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void toolStripButtonOk_Click(object sender, EventArgs e)
+ {
+ SaveConnectionDefinitions(_definitionList);
+ Close();
+ }
+
+ /// <summary>The tool strip button test_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void toolStripButtonTest_Click(object sender, EventArgs e)
+ {
+ // do a standalone raw connection test
+ DbConnectionDefinition definition = lstConnections.SelectedItem as DbConnectionDefinition;
+ if (definition != null)
+ {
+ Exception exp = QueryRunner.TestDbConnection(definition.ProviderName, definition.ConnectionString);
+ if (exp == null)
+ {
+ string msg = string.Format("Connected to '{0}' successfully.", definition.Name);
+ _hostWindow.DisplaySimpleMessageBox(this, msg, "Connection Successful");
+ }
+ else
+ {
+ string msg = string.Format("Failed connecting to '{0}'.{1}{2}", definition.Name, Environment.NewLine, exp.Message);
+ _hostWindow.DisplaySimpleMessageBox(this, msg, "Connection Failed");
+ }
+ }
+ }
+
+ private void DbConnectionsForm_Load(object sender, EventArgs e)
+ {
+
+ }
+
+ private void SetDirty()
+ {
+ if (!_loaded)
+ {
+ return;
+ }
+
+ if (!_dirty)
+ {
+ _dirty = true;
+ Text += "*";
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/DbConnectionsForm.Designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/DbConnectionsForm.Designer.cs
new file mode 100644
index 0000000..ea1f002
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/DbConnectionsForm.Designer.cs
@@ -0,0 +1,325 @@
+namespace MiniSqlQuery.PlugIns.ConnectionStringsManager
+{
+ partial class DbConnectionsForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DbConnectionsForm));
+ this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+ this.toolStripButtonOk = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButtonCancel = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripButtonAdd = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButtonCopyAsNew = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButtonEditConnStr = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButtonDelete = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripButtonTest = new System.Windows.Forms.ToolStripButton();
+ this.lstConnections = new System.Windows.Forms.ListBox();
+ this.grpDetails = new System.Windows.Forms.GroupBox();
+ this.txtComment = new System.Windows.Forms.TextBox();
+ this.label4 = new System.Windows.Forms.Label();
+ this.txtConn = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.txtProvider = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.txtName = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.toolStrip1.SuspendLayout();
+ this.grpDetails.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // toolStrip1
+ //
+ this.toolStrip1.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripButtonOk,
+ this.toolStripButtonCancel,
+ this.toolStripSeparator1,
+ this.toolStripButtonAdd,
+ this.toolStripButtonCopyAsNew,
+ this.toolStripButtonEditConnStr,
+ this.toolStripButtonDelete,
+ this.toolStripSeparator2,
+ this.toolStripButtonTest});
+ this.toolStrip1.Location = new System.Drawing.Point(0, 342);
+ this.toolStrip1.Name = "toolStrip1";
+ this.toolStrip1.Size = new System.Drawing.Size(881, 27);
+ this.toolStrip1.TabIndex = 4;
+ this.toolStrip1.Text = "toolStrip1";
+ //
+ // toolStripButtonOk
+ //
+ this.toolStripButtonOk.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+ this.toolStripButtonOk.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonOk.Image")));
+ this.toolStripButtonOk.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButtonOk.Name = "toolStripButtonOk";
+ this.toolStripButtonOk.Size = new System.Drawing.Size(33, 24);
+ this.toolStripButtonOk.Text = "&OK";
+ this.toolStripButtonOk.Click += new System.EventHandler(this.toolStripButtonOk_Click);
+ //
+ // toolStripButtonCancel
+ //
+ this.toolStripButtonCancel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+ this.toolStripButtonCancel.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonCancel.Image")));
+ this.toolStripButtonCancel.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButtonCancel.Name = "toolStripButtonCancel";
+ this.toolStripButtonCancel.Size = new System.Drawing.Size(57, 24);
+ this.toolStripButtonCancel.Text = "&Cancel";
+ this.toolStripButtonCancel.Click += new System.EventHandler(this.toolStripButtonCancel_Click);
+ //
+ // toolStripSeparator1
+ //
+ this.toolStripSeparator1.Name = "toolStripSeparator1";
+ this.toolStripSeparator1.Size = new System.Drawing.Size(6, 27);
+ //
+ // toolStripButtonAdd
+ //
+ this.toolStripButtonAdd.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonAdd.Image")));
+ this.toolStripButtonAdd.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButtonAdd.Name = "toolStripButtonAdd";
+ this.toolStripButtonAdd.Size = new System.Drawing.Size(57, 24);
+ this.toolStripButtonAdd.Text = "Add";
+ this.toolStripButtonAdd.ToolTipText = "Add";
+ this.toolStripButtonAdd.Click += new System.EventHandler(this.toolStripButtonAdd_Click);
+ //
+ // toolStripButtonCopyAsNew
+ //
+ this.toolStripButtonCopyAsNew.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonCopyAsNew.Image")));
+ this.toolStripButtonCopyAsNew.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButtonCopyAsNew.Name = "toolStripButtonCopyAsNew";
+ this.toolStripButtonCopyAsNew.Size = new System.Drawing.Size(115, 24);
+ this.toolStripButtonCopyAsNew.Text = "Copy as New";
+ this.toolStripButtonCopyAsNew.Click += new System.EventHandler(this.toolStripButtonCopyAsNew_Click);
+ //
+ // toolStripButtonEditConnStr
+ //
+ this.toolStripButtonEditConnStr.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonEditConnStr.Image")));
+ this.toolStripButtonEditConnStr.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButtonEditConnStr.Name = "toolStripButtonEditConnStr";
+ this.toolStripButtonEditConnStr.Size = new System.Drawing.Size(55, 24);
+ this.toolStripButtonEditConnStr.Text = "Edit";
+ this.toolStripButtonEditConnStr.Click += new System.EventHandler(this.toolStripButtonEditConnStr_Click);
+ //
+ // toolStripButtonDelete
+ //
+ this.toolStripButtonDelete.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonDelete.Image")));
+ this.toolStripButtonDelete.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButtonDelete.Name = "toolStripButtonDelete";
+ this.toolStripButtonDelete.Size = new System.Drawing.Size(73, 24);
+ this.toolStripButtonDelete.Text = "Delete";
+ this.toolStripButtonDelete.Click += new System.EventHandler(this.toolStripButtonDelete_Click);
+ //
+ // toolStripSeparator2
+ //
+ this.toolStripSeparator2.Name = "toolStripSeparator2";
+ this.toolStripSeparator2.Size = new System.Drawing.Size(6, 27);
+ //
+ // toolStripButtonTest
+ //
+ this.toolStripButtonTest.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+ this.toolStripButtonTest.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonTest.Image")));
+ this.toolStripButtonTest.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButtonTest.Name = "toolStripButtonTest";
+ this.toolStripButtonTest.Size = new System.Drawing.Size(49, 24);
+ this.toolStripButtonTest.Text = "Test...";
+ this.toolStripButtonTest.Click += new System.EventHandler(this.toolStripButtonTest_Click);
+ //
+ // lstConnections
+ //
+ this.lstConnections.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.lstConnections.FormattingEnabled = true;
+ this.lstConnections.ItemHeight = 16;
+ this.lstConnections.Location = new System.Drawing.Point(16, 15);
+ this.lstConnections.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.lstConnections.Name = "lstConnections";
+ this.lstConnections.Size = new System.Drawing.Size(335, 292);
+ this.lstConnections.TabIndex = 5;
+ this.lstConnections.SelectedValueChanged += new System.EventHandler(this.lstConnections_SelectedValueChanged);
+ this.lstConnections.DoubleClick += new System.EventHandler(this.lstConnections_DoubleClick);
+ //
+ // grpDetails
+ //
+ this.grpDetails.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.grpDetails.Controls.Add(this.txtComment);
+ this.grpDetails.Controls.Add(this.label4);
+ this.grpDetails.Controls.Add(this.txtConn);
+ this.grpDetails.Controls.Add(this.label3);
+ this.grpDetails.Controls.Add(this.txtProvider);
+ this.grpDetails.Controls.Add(this.label2);
+ this.grpDetails.Controls.Add(this.txtName);
+ this.grpDetails.Controls.Add(this.label1);
+ this.grpDetails.Location = new System.Drawing.Point(360, 15);
+ this.grpDetails.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.grpDetails.Name = "grpDetails";
+ this.grpDetails.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.grpDetails.Size = new System.Drawing.Size(505, 319);
+ this.grpDetails.TabIndex = 6;
+ this.grpDetails.TabStop = false;
+ this.grpDetails.Text = "Details";
+ //
+ // txtComment
+ //
+ this.txtComment.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtComment.Location = new System.Drawing.Point(133, 206);
+ this.txtComment.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.txtComment.Multiline = true;
+ this.txtComment.Name = "txtComment";
+ this.txtComment.ReadOnly = true;
+ this.txtComment.Size = new System.Drawing.Size(363, 105);
+ this.txtComment.TabIndex = 7;
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(8, 209);
+ this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(67, 17);
+ this.label4.TabIndex = 6;
+ this.label4.Text = "Comment";
+ //
+ // txtConn
+ //
+ this.txtConn.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtConn.Location = new System.Drawing.Point(133, 87);
+ this.txtConn.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.txtConn.Multiline = true;
+ this.txtConn.Name = "txtConn";
+ this.txtConn.ReadOnly = true;
+ this.txtConn.Size = new System.Drawing.Size(363, 110);
+ this.txtConn.TabIndex = 5;
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(8, 91);
+ this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(79, 17);
+ this.label3.TabIndex = 4;
+ this.label3.Text = "Connection";
+ //
+ // txtProvider
+ //
+ this.txtProvider.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtProvider.Location = new System.Drawing.Point(133, 55);
+ this.txtProvider.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.txtProvider.Name = "txtProvider";
+ this.txtProvider.ReadOnly = true;
+ this.txtProvider.Size = new System.Drawing.Size(363, 22);
+ this.txtProvider.TabIndex = 3;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(8, 59);
+ this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(61, 17);
+ this.label2.TabIndex = 2;
+ this.label2.Text = "Provider";
+ //
+ // txtName
+ //
+ this.txtName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtName.Location = new System.Drawing.Point(133, 23);
+ this.txtName.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.txtName.Name = "txtName";
+ this.txtName.ReadOnly = true;
+ this.txtName.Size = new System.Drawing.Size(363, 22);
+ this.txtName.TabIndex = 1;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(8, 27);
+ this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(45, 17);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Name";
+ //
+ // DbConnectionsForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(881, 369);
+ this.Controls.Add(this.grpDetails);
+ this.Controls.Add(this.lstConnections);
+ this.Controls.Add(this.toolStrip1);
+ this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "DbConnectionsForm";
+ this.ShowIcon = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Database Connection List Editor";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DbConnectionsForm_FormClosing);
+ this.Load += new System.EventHandler(this.DbConnectionsForm_Load);
+ this.Shown += new System.EventHandler(this.DbConnectionsForm_Shown);
+ this.toolStrip1.ResumeLayout(false);
+ this.toolStrip1.PerformLayout();
+ this.grpDetails.ResumeLayout(false);
+ this.grpDetails.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ToolStrip toolStrip1;
+ private System.Windows.Forms.ToolStripButton toolStripButtonOk;
+ private System.Windows.Forms.ToolStripButton toolStripButtonCancel;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+ private System.Windows.Forms.ToolStripButton toolStripButtonEditConnStr;
+ private System.Windows.Forms.ListBox lstConnections;
+ private System.Windows.Forms.GroupBox grpDetails;
+ private System.Windows.Forms.TextBox txtProvider;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txtName;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox txtComment;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.TextBox txtConn;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.ToolStripButton toolStripButtonAdd;
+ private System.Windows.Forms.ToolStripButton toolStripButtonDelete;
+ private System.Windows.Forms.ToolStripButton toolStripButtonCopyAsNew;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
+ private System.Windows.Forms.ToolStripButton toolStripButtonTest;
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/DbConnectionsForm.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/DbConnectionsForm.resx
new file mode 100644
index 0000000..3b9a305
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/DbConnectionsForm.resx
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="toolStripButtonOk.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+</value>
+ </data>
+ <data name="toolStripButtonCancel.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+</value>
+ </data>
+ <data name="toolStripButtonAdd.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+</value>
+ </data>
+ <data name="toolStripButtonCopyAsNew.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+</value>
+ </data>
+ <data name="toolStripButtonEditConnStr.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+</value>
+ </data>
+ <data name="toolStripButtonDelete.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+</value>
+ </data>
+ <data name="toolStripButtonTest.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+</value>
+ </data>
+</root>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/GenericConnectionStringBuilder.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/GenericConnectionStringBuilder.cs
new file mode 100644
index 0000000..5fa0aca
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ConnectionStringsManager/GenericConnectionStringBuilder.cs
@@ -0,0 +1,79 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.Collections;
+using System.ComponentModel;
+using System.Data.Common;
+using System.Reflection;
+
+namespace MiniSqlQuery.PlugIns.ConnectionStringsManager
+{
+ /// <summary>The generic connection string builder.</summary>
+ [DefaultMember("Item"), DefaultProperty("ConnectionString")]
+ public class GenericConnectionStringBuilder : DbConnectionStringBuilder
+ {
+ /// <summary>The _properties.</summary>
+ private Hashtable _properties;
+
+ /// <summary>Initializes a new instance of the <see cref="GenericConnectionStringBuilder"/> class.</summary>
+ public GenericConnectionStringBuilder()
+ {
+ Initialize(null);
+ }
+
+ /// <summary>Initializes a new instance of the <see cref="GenericConnectionStringBuilder"/> class.</summary>
+ /// <param name="connectionString">The connection string.</param>
+ public GenericConnectionStringBuilder(string connectionString)
+ {
+ Initialize(connectionString);
+ }
+
+ /// <summary>The try get value.</summary>
+ /// <param name="keyword">The keyword.</param>
+ /// <param name="value">The value.</param>
+ /// <returns>The try get value.</returns>
+ public override bool TryGetValue(string keyword, out object value)
+ {
+ bool success = base.TryGetValue(keyword, out value);
+ if (_properties.ContainsKey(keyword))
+ {
+ PropertyDescriptor descriptor = _properties[keyword] as PropertyDescriptor;
+ if (descriptor == null)
+ {
+ return success;
+ }
+
+ if (success)
+ {
+ value = TypeDescriptor.GetConverter(descriptor.PropertyType).ConvertFrom(value);
+ return success;
+ }
+
+ DefaultValueAttribute attribute = descriptor.Attributes[typeof(DefaultValueAttribute)] as DefaultValueAttribute;
+ if (attribute != null)
+ {
+ value = attribute.Value;
+ success = true;
+ }
+ }
+
+ return success;
+ }
+
+ /// <summary>The initialize.</summary>
+ /// <param name="cnnString">The cnn string.</param>
+ private void Initialize(string cnnString)
+ {
+ _properties = new Hashtable();
+ this.GetProperties(_properties);
+ if (!string.IsNullOrEmpty(cnnString))
+ {
+ ConnectionString = cnnString;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/CoreApplicationPlugIn.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/CoreApplicationPlugIn.cs
new file mode 100644
index 0000000..ef57ebd
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/CoreApplicationPlugIn.cs
@@ -0,0 +1,212 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Collections.Specialized;
+using System.Diagnostics;
+using System.Linq;
+using System.Windows.Forms;
+using MiniSqlQuery.Commands;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns
+{
+ /// <summary>The core application plug in.</summary>
+ public class CoreApplicationPlugIn : PluginLoaderBase
+ {
+ /// <summary>The _timer.</summary>
+ private Timer _timer;
+
+ /// <summary>Initializes a new instance of the <see cref="CoreApplicationPlugIn"/> class.</summary>
+ public CoreApplicationPlugIn()
+ : base("Mini SQL Query Core", "Plugin to setup the core features of Mini SQL Query.", 1)
+ {
+ }
+
+ /// <summary>Iinitialize the plug in.</summary>
+ public override void InitializePlugIn()
+ {
+ IApplicationServices services = Services;
+ IHostWindow hostWindow = services.HostWindow;
+
+ services.RegisterSingletonComponent<ICompletionProvider, NullCompletionProvider>("CompletionProvider");
+
+ services.RegisterEditor<BasicEditor>(new FileEditorDescriptor("Default text editor", "default-editor"));
+ services.RegisterEditor<QueryForm>(new FileEditorDescriptor("SQL Editor", "sql-editor", "sql"));
+ services.RegisterEditor<BasicCSharpEditor>(new FileEditorDescriptor("C# Editor", "cs-editor", "cs"));
+ services.RegisterEditor<BasicVbNetEditor>(new FileEditorDescriptor("VB/VB.NET Editor", "vb-editor", "vb"));
+ services.RegisterEditor<BasicXmlEditor>(new FileEditorDescriptor("XML Editor", "xml-editor", "xml"));
+ services.RegisterEditor<BasicHtmlEditor>(new FileEditorDescriptor("HTML Editor", "htm-editor", "htm", "html"));
+ services.RegisterEditor<BasicEditor>(new FileEditorDescriptor("Text Editor", "txt-editor", "txt"));
+
+ services.RegisterComponent<NewFileForm>("NewFileForm");
+ services.RegisterComponent<OptionsForm>("OptionsForm");
+ services.RegisterSingletonComponent<IMostRecentFilesService, MostRecentFilesService>("MostRecentFilesService");
+ services.RegisterConfigurationObject<CoreMiniSqlQueryConfiguration>();
+
+ ToolStripMenuItem fileMenu = hostWindow.GetMenuItem("File");
+ ToolStripMenuItem editMenu = hostWindow.GetMenuItem("edit");
+ ToolStripMenuItem queryMenu = hostWindow.GetMenuItem("query");
+ ToolStripMenuItem helpMenu = hostWindow.GetMenuItem("help");
+
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<NewQueryFormCommand>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<NewFileCommand>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItemSeparator());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenFileCommand>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<SaveFileCommand>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<SaveFileAsCommand>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<CloseActiveWindowCommand>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItemSeparator());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<PrintCommand>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItemSeparator());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile1Command>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile2Command>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile3Command>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile4Command>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile5Command>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile6Command>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile7Command>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile8Command>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile9Command>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenRecentFile10Command>());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItemSeparator());
+ fileMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ExitApplicationCommand>());
+
+ queryMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ExecuteTaskCommand>());
+ queryMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<CancelTaskCommand>());
+ queryMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<SaveResultsAsDataSetCommand>());
+ queryMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<RefreshDatabaseConnectionCommand>());
+ queryMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<CloseDatabaseConnectionCommand>());
+ queryMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<DisplayDbModelDependenciesCommand>());
+
+ // editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<DuplicateLineCommand>());
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<PasteAroundSelectionCommand>());
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ConvertTextToLowerCaseCommand>());
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ConvertTextToUpperCaseCommand>());
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ConvertTextToTitleCaseCommand>());
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<SetLeftPasteAroundSelectionCommand>());
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<SetRightPasteAroundSelectionCommand>());
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ShowOptionsFormCommand>());
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<OpenConnectionFileCommand>());
+
+ // get the new item and make in invisible - the shortcut key is still available etc ;-)
+ ToolStripItem item = editMenu.DropDownItems["SetLeftPasteAroundSelectionCommandToolStripMenuItem"];
+ item.Visible = false;
+ item = editMenu.DropDownItems["SetRightPasteAroundSelectionCommandToolStripMenuItem"];
+ item.Visible = false;
+
+
+ helpMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ShowHelpCommand>());
+ helpMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ShowWebPageCommand>());
+ helpMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<EmailAuthorCommand>());
+ helpMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItemSeparator());
+ helpMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ShowAboutCommand>());
+
+ CommandControlBuilder.MonitorMenuItemsOpeningForEnabling(hostWindow.Instance.MainMenuStrip);
+
+ // toolstrip
+ hostWindow.AddToolStripCommand<NewQueryFormCommand>(0);
+ hostWindow.AddToolStripCommand<OpenFileCommand>(1);
+ hostWindow.AddToolStripCommand<SaveFileCommand>(2);
+ hostWindow.AddToolStripSeperator(3);
+ hostWindow.AddToolStripCommand<ExecuteTaskCommand>(4);
+ hostWindow.AddToolStripCommand<CancelTaskCommand>(5);
+ hostWindow.AddToolStripSeperator(6);
+ hostWindow.AddToolStripSeperator(null);
+ hostWindow.AddToolStripCommand<RefreshDatabaseConnectionCommand>(null);
+
+ hostWindow.AddPluginCommand<InsertGuidCommand>();
+
+ ConfigureMostRecentFileList(services);
+
+ // watch tool strip enabled properties
+ // by simply iterating each one every second or so we avoid the need to track via events
+ _timer = new Timer();
+ _timer.Interval = 1000;
+ _timer.Tick += TimerTick;
+ _timer.Enabled = true;
+ }
+
+ protected void ConfigureMostRecentFileList(IApplicationServices services)
+ {
+ // get the files out of the settings and register them
+ var mostRecentFilesService = services.Resolve<IMostRecentFilesService>();
+ if (services.Settings.MostRecentFiles != null)
+ {
+ foreach (string mostRecentFile in services.Settings.MostRecentFiles)
+ {
+ mostRecentFilesService.Filenames.Add(mostRecentFile);
+ }
+ }
+
+ // watch for changes
+ mostRecentFilesService.MostRecentFilesChanged += mostRecentFilesService_MostRecentFilesChanged;
+
+ // need to manually call the update - only required on first load
+ ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile1Command>()).UpdateName();
+ ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile2Command>()).UpdateName();
+ ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile3Command>()).UpdateName();
+ ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile4Command>()).UpdateName();
+ ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile5Command>()).UpdateName();
+ ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile6Command>()).UpdateName();
+ ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile7Command>()).UpdateName();
+ ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile8Command>()).UpdateName();
+ ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile9Command>()).UpdateName();
+ ((OpenRecentFileCommand)CommandManager.GetCommandInstance<OpenRecentFile10Command>()).UpdateName();
+ }
+
+ /// <summary>The unload plug in.</summary>
+ public override void UnloadPlugIn()
+ {
+ if (_timer != null)
+ {
+ _timer.Dispose();
+ }
+ }
+
+ /// <summary>Called frequently to run through all the commands on the toolstrip and check their enabled state.
+ /// Marked as "DebuggerNonUserCode" because it can get in the way of a debug sesssion.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
+ [DebuggerNonUserCode]
+ private void TimerTick(object sender, EventArgs e)
+ {
+ try
+ {
+ _timer.Enabled = false;
+ foreach (ToolStripItem item in Services.HostWindow.ToolStrip.Items)
+ {
+ ICommand cmd = item.Tag as ICommand;
+ if (cmd != null)
+ {
+ item.Enabled = cmd.Enabled;
+ }
+ }
+ }
+ finally
+ {
+ _timer.Enabled = true;
+ }
+ }
+
+ static void mostRecentFilesService_MostRecentFilesChanged(object sender, MostRecentFilesChangedEventArgs e)
+ {
+ var services = ApplicationServices.Instance;
+ var mostRecentFilesService = services.Resolve<IMostRecentFilesService>();
+ if (services.Settings.MostRecentFiles == null)
+ {
+ services.Settings.MostRecentFiles = new StringCollection();
+ }
+ else
+ {
+ services.Settings.MostRecentFiles.Clear();
+ }
+ services.Settings.MostRecentFiles.AddRange(mostRecentFilesService.Filenames.ToArray());
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/CoreMiniSqlQueryConfiguration.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/CoreMiniSqlQueryConfiguration.cs
new file mode 100644
index 0000000..9a55071
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/CoreMiniSqlQueryConfiguration.cs
@@ -0,0 +1,280 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.Collections.Specialized;
+using System.ComponentModel;
+using MiniSqlQuery.Core;
+
+namespace MiniSqlQuery.PlugIns
+{
+ /// <summary>The core mini sql query configuration.</summary>
+ public class CoreMiniSqlQueryConfiguration : NotifyPropertyChangedBase, IConfigurationObject
+ {
+ /// <summary>The application settings.</summary>
+ private readonly IApplicationSettings _settings;
+
+ /// <summary>The settings wrapper.</summary>
+ private readonly CoreMiniSqlQuerySettingsWrapper _settingsWrapper;
+
+ /// <summary>The dirty record.</summary>
+ private static bool _isDirty;
+
+ /// <summary>Initializes a new instance of the <see cref="CoreMiniSqlQueryConfiguration"/> class.</summary>
+ /// <param name="settings">The settings.</param>
+ public CoreMiniSqlQueryConfiguration(IApplicationSettings settings)
+ {
+ _settings = settings;
+ _settingsWrapper = new CoreMiniSqlQuerySettingsWrapper(_settings);
+ _settingsWrapper.PropertyChanged += ProxyPropertyChanged;
+ _isDirty = false;
+ }
+
+ /// <summary>Gets a value indicating whether IsDirty.</summary>
+ public bool IsDirty
+ {
+ get { return _isDirty; }
+ private set
+ {
+ if (_isDirty != value)
+ {
+ _isDirty = value;
+ OnPropertyChanged("IsDirty");
+ }
+ }
+ }
+
+ /// <summary>Gets Name.</summary>
+ public string Name
+ {
+ get { return "Mini SQL Query Settings"; }
+ }
+
+ /// <summary>Gets Settings.</summary>
+ public object Settings
+ {
+ get { return _settingsWrapper; }
+ }
+
+ /// <summary>Save the settings back.</summary>
+ public void Save()
+ {
+ _settings.EnableQueryBatching = _settingsWrapper.EnableQueryBatching;
+ _settings.CommandTimeout = _settingsWrapper.CommandTimeout;
+ _settings.PlugInFileFilter = _settingsWrapper.PlugInFileFilter;
+ _settings.MostRecentFiles = _settingsWrapper.MostRecentFiles;
+ _settings.LoadExternalPlugins = _settingsWrapper.LoadExternalPlugins;
+ _settings.DefaultConnectionDefinitionFilename = _settingsWrapper.DefaultConnectionDefinitionFilename;
+ _settings.DateTimeFormat = _settingsWrapper.DateTimeFormat;
+ _settings.NullText = _settingsWrapper.NullText;
+ _settings.IncludeReadOnlyColumnsInExport = _settingsWrapper.IncludeReadOnlyColumnsInExport;
+ IsDirty = false;
+ }
+
+ /// <summary>The proxy property changed.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The events.</param>
+ private void ProxyPropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ IsDirty = true;
+ }
+
+ /// <summary>The core mini sql query settings wrapper.</summary>
+ public class CoreMiniSqlQuerySettingsWrapper : NotifyPropertyChangedBase
+ {
+ /// <summary>The _settings.</summary>
+ private readonly IApplicationSettings _settings;
+
+ /// <summary>The _date time format.</summary>
+ private string _dateTimeFormat;
+
+ /// <summary>The _default connection definition filename.</summary>
+ private string _defaultConnectionDefinitionFilename;
+
+ /// <summary>The _enable query batching.</summary>
+ private bool _enableQueryBatching;
+
+ /// <summary>The _load plugins.</summary>
+ private bool _loadPlugins;
+
+ /// <summary>The _null text.</summary>
+ private string _nullText;
+
+ /// <summary>The _plug in file filter.</summary>
+ private string _plugInFileFilter;
+
+ StringCollection _mostRecentFiles;
+
+ /// <summary>The include ReadOnly Columns in Export value.</summary>
+ private bool _includeReadOnlyColumnsInExport;
+
+ /// <summary>The command timout.</summary>
+ private int _commandTimeout;
+
+ /// <summary>Initializes a new instance of the <see cref="CoreMiniSqlQuerySettingsWrapper"/> class.</summary>
+ /// <param name="settings">The settings.</param>
+ public CoreMiniSqlQuerySettingsWrapper(IApplicationSettings settings)
+ {
+ _settings = settings;
+
+ EnableQueryBatching = _settings.EnableQueryBatching;
+ CommandTimeout = _settings.CommandTimeout;
+ PlugInFileFilter = _settings.PlugInFileFilter;
+ MostRecentFiles = _settings.MostRecentFiles;
+ LoadExternalPlugins = _settings.LoadExternalPlugins;
+ DefaultConnectionDefinitionFilename = _settings.DefaultConnectionDefinitionFilename;
+ DateTimeFormat = _settings.DateTimeFormat;
+ NullText = _settings.NullText;
+ IncludeReadOnlyColumnsInExport = _settings.IncludeReadOnlyColumnsInExport;
+ }
+
+ /// <summary>Gets or sets DateTimeFormat.</summary>
+ [Category("Query Results")]
+ [Description("")]
+ public string DateTimeFormat
+ {
+ get { return _dateTimeFormat; }
+ set
+ {
+ if (_dateTimeFormat != value)
+ {
+ _dateTimeFormat = value;
+ OnPropertyChanged("DateTimeFormat");
+ }
+ }
+ }
+
+ /// <summary>Gets or sets DefaultConnectionDefinitionFilename.</summary>
+ [Category("Query")]
+ [Description("If this value is set to a specific connections XML file it will be loaded in preferences to the default path " +
+ "(%APPDATA%\\MiniSqlQuery\\Connections.xml). Note that changing this value will require a restart of the application.")]
+ public string DefaultConnectionDefinitionFilename
+ {
+ get { return _defaultConnectionDefinitionFilename; }
+ set
+ {
+ if (_defaultConnectionDefinitionFilename != value)
+ {
+ _defaultConnectionDefinitionFilename = value;
+ OnPropertyChanged("DefaultConnectionDefinitionFilename");
+ }
+ }
+ }
+
+ /// <summary>Gets or sets a value indicating whether EnableQueryBatching.</summary>
+ [Category("Query")]
+ [Description("Set to true to enable the batching feature, if false the 'GO' statements will be passed straight through.")]
+ public bool EnableQueryBatching
+ {
+ get { return _enableQueryBatching; }
+ set
+ {
+ if (_enableQueryBatching != value)
+ {
+ _enableQueryBatching = value;
+ OnPropertyChanged("EnableQueryBatching");
+ }
+ }
+ }
+
+ /// <summary>Gets or sets a value indicating the command timeout.</summary>
+ [Category("Query")]
+ [Description("Gets or sets the wait time before terminating the attempt to execute a command and generating an error. A value of 0 indicates no limit.")]
+ public int CommandTimeout
+ {
+ get { return _commandTimeout; }
+ set
+ {
+ if (_commandTimeout != value)
+ {
+ _commandTimeout = value;
+ OnPropertyChanged("CommandTimeout");
+ }
+ }
+ }
+
+ /// <summary>Gets or sets a value indicating whether LoadExternalPlugins.</summary>
+ [Category("Plugins")]
+ [Description("If true, external plugin files will be loaded (requires restart).")]
+ public bool LoadExternalPlugins
+ {
+ get { return _loadPlugins; }
+ set
+ {
+ if (_loadPlugins != value)
+ {
+ _loadPlugins = value;
+ OnPropertyChanged("LoadExternalPlugins");
+ }
+ }
+ }
+
+ /// <summary>Gets or sets NullText.</summary>
+ [Category("Query Results")]
+ [Description("")]
+ public string NullText
+ {
+ get { return _nullText; }
+ set
+ {
+ if (_nullText != value)
+ {
+ _nullText = value;
+ OnPropertyChanged("NullText");
+ }
+ }
+ }
+
+ /// <summary>Gets or sets PlugInFileFilter.</summary>
+ [Category("Plugins")]
+ [Description("The file filter used for finding plugins (*.PlugIn.dll)")]
+ public string PlugInFileFilter
+ {
+ get { return _plugInFileFilter; }
+ set
+ {
+ if (_plugInFileFilter != value)
+ {
+ _plugInFileFilter = value;
+ OnPropertyChanged("PlugInFileFilter");
+ }
+ }
+ }
+
+ /// <summary>Gets or sets MostRecentFiles.</summary>
+ [Category("Plugins")]
+ [Description("The file filter used for finding plugins (*.PlugIn.dll)")]
+ public StringCollection MostRecentFiles
+ {
+ get { return _mostRecentFiles; }
+ set
+ {
+ if (_mostRecentFiles != value)
+ {
+ _mostRecentFiles = value;
+ OnPropertyChanged("MostRecentFiles");
+ }
+ }
+ }
+
+ /// <summary>Gets or sets PlugInFileFilter.</summary>
+ [Category("Export Scripts")]
+ [Description("If true, the readonly columns (e.g. identity) will be exported in the script.")]
+ public bool IncludeReadOnlyColumnsInExport
+ {
+ get { return _includeReadOnlyColumnsInExport; }
+ set
+ {
+ if (_includeReadOnlyColumnsInExport != value)
+ {
+ _includeReadOnlyColumnsInExport = value;
+ OnPropertyChanged("PlugInFileFilter");
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/CopyTableNameCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/CopyTableNameCommand.cs
new file mode 100644
index 0000000..ff20da0
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/CopyTableNameCommand.cs
@@ -0,0 +1,28 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.Windows.Forms;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector.Commands
+{
+ /// <summary>The copy table name command.</summary>
+ public class CopyTableNameCommand : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="CopyTableNameCommand"/> class.</summary>
+ public CopyTableNameCommand()
+ : base("Copy table name")
+ {
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ Clipboard.SetText(HostWindow.DatabaseInspector.RightClickedTableName);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateDeleteStatementCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateDeleteStatementCommand.cs
new file mode 100644
index 0000000..e0b7220
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateDeleteStatementCommand.cs
@@ -0,0 +1,38 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.IO;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector.Commands
+{
+ /// <summary>The generate delete statement command.</summary>
+ public class GenerateDeleteStatementCommand : GenerateStatementCommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="GenerateDeleteStatementCommand"/> class.</summary>
+ public GenerateDeleteStatementCommand()
+ : base("Generate Delete Statement")
+ {
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ IQueryEditor editor = ActiveFormAsSqlQueryEditor;
+ string tableName = HostWindow.DatabaseInspector.RightClickedTableName;
+ DbModelInstance model = HostWindow.DatabaseInspector.DbSchema;
+
+ if (tableName != null && editor != null)
+ {
+ StringWriter sql = new StringWriter();
+ SqlWriter.WriteDelete(sql, GetTableOrViewByName(model, tableName));
+ editor.InsertText(sql.ToString());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateInsertStatementCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateInsertStatementCommand.cs
new file mode 100644
index 0000000..55f0802
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateInsertStatementCommand.cs
@@ -0,0 +1,38 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.IO;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector.Commands
+{
+ /// <summary>The generate insert statement command.</summary>
+ internal class GenerateInsertStatementCommand : GenerateStatementCommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="GenerateInsertStatementCommand"/> class.</summary>
+ public GenerateInsertStatementCommand()
+ : base("Generate Insert Statement")
+ {
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ IQueryEditor editor = ActiveFormAsSqlQueryEditor;
+ string tableName = HostWindow.DatabaseInspector.RightClickedTableName;
+ DbModelInstance model = HostWindow.DatabaseInspector.DbSchema;
+
+ if (tableName != null && editor != null)
+ {
+ StringWriter sql = new StringWriter();
+ SqlWriter.WriteInsert(sql, GetTableOrViewByName(model, tableName));
+ editor.InsertText(sql.ToString());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateSelectCountStatementCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateSelectCountStatementCommand.cs
new file mode 100644
index 0000000..14efcf5
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateSelectCountStatementCommand.cs
@@ -0,0 +1,38 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.IO;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector.Commands
+{
+ /// <summary>The generate select count statement command.</summary>
+ public class GenerateSelectCountStatementCommand : GenerateStatementCommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="GenerateSelectCountStatementCommand"/> class.</summary>
+ public GenerateSelectCountStatementCommand()
+ : base("Generate Select COUNT(*) Statement")
+ {
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ IQueryEditor editor = ActiveFormAsSqlQueryEditor;
+ string tableName = HostWindow.DatabaseInspector.RightClickedTableName;
+ DbModelInstance model = HostWindow.DatabaseInspector.DbSchema;
+
+ if (tableName != null && editor != null)
+ {
+ StringWriter sql = new StringWriter();
+ SqlWriter.WriteSelectCount(sql, GetTableOrViewByName(model, tableName));
+ editor.InsertText(sql.ToString());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateSelectStatementCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateSelectStatementCommand.cs
new file mode 100644
index 0000000..7265429
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateSelectStatementCommand.cs
@@ -0,0 +1,38 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.IO;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector.Commands
+{
+ /// <summary>The generate select statement command.</summary>
+ public class GenerateSelectStatementCommand : GenerateStatementCommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="GenerateSelectStatementCommand"/> class.</summary>
+ public GenerateSelectStatementCommand()
+ : base("Generate Select Statement")
+ {
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ IQueryEditor editor = ActiveFormAsSqlQueryEditor;
+ string tableName = HostWindow.DatabaseInspector.RightClickedTableName;
+ DbModelInstance model = HostWindow.DatabaseInspector.DbSchema;
+
+ if (tableName != null && editor != null)
+ {
+ StringWriter sql = new StringWriter();
+ SqlWriter.WriteSelect(sql, GetTableOrViewByName(model, tableName));
+ editor.InsertText(sql.ToString());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateStatementCommandBase.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateStatementCommandBase.cs
new file mode 100644
index 0000000..1464746
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateStatementCommandBase.cs
@@ -0,0 +1,70 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core.Commands;
+using MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector.Commands
+{
+ /// <summary>The generate statement command base.</summary>
+ public abstract class GenerateStatementCommandBase : CommandBase
+ {
+ /// <summary>The _sql writer.</summary>
+ private ISqlWriter _sqlWriter;
+
+ /// <summary>Initializes a new instance of the <see cref="GenerateStatementCommandBase"/> class.</summary>
+ /// <param name="name">The name.</param>
+ public GenerateStatementCommandBase(string name)
+ : base(name)
+ {
+ }
+
+ /// <summary>Gets SqlWriter.</summary>
+ protected ISqlWriter SqlWriter
+ {
+ get
+ {
+ if (_sqlWriter == null)
+ {
+ _sqlWriter = Services.Resolve<ISqlWriter>();
+ }
+
+ return _sqlWriter;
+ }
+ }
+
+ /// <summary>The get table or view by name.</summary>
+ /// <param name="model">The model.</param>
+ /// <param name="tableName">The table name.</param>
+ /// <returns></returns>
+ protected DbModelTable GetTableOrViewByName(DbModelInstance model, string tableName)
+ {
+ DbModelTable tableOrView = model.FindTable(tableName);
+ if (tableOrView == null)
+ {
+ // check the views
+ tableOrView = model.FindView(tableName);
+ }
+
+ return tableOrView;
+ }
+
+ /// <summary>The trim trailing comma.</summary>
+ /// <param name="sql">The sql.</param>
+ /// <returns>The trim trailing comma.</returns>
+ protected string TrimTrailingComma(string sql)
+ {
+ if (sql != null && sql.TrimEnd().EndsWith(","))
+ {
+ string tmp = sql.TrimEnd();
+ return tmp.Substring(0, tmp.Length - 1);
+ }
+
+ return sql;
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateUpdateStatementCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateUpdateStatementCommand.cs
new file mode 100644
index 0000000..2f90fe6
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/GenerateUpdateStatementCommand.cs
@@ -0,0 +1,38 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.IO;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector.Commands
+{
+ /// <summary>The generate update statement command.</summary>
+ internal class GenerateUpdateStatementCommand : GenerateStatementCommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="GenerateUpdateStatementCommand"/> class.</summary>
+ public GenerateUpdateStatementCommand()
+ : base("Generate Update Statement")
+ {
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ IQueryEditor editor = ActiveFormAsSqlQueryEditor;
+ string tableName = HostWindow.DatabaseInspector.RightClickedTableName;
+ DbModelInstance model = HostWindow.DatabaseInspector.DbSchema;
+
+ if (tableName != null && editor != null)
+ {
+ StringWriter sql = new StringWriter();
+ SqlWriter.WriteUpdate(sql, GetTableOrViewByName(model, tableName));
+ editor.InsertText(sql.ToString());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/LocateFkReferenceColumnCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/LocateFkReferenceColumnCommand.cs
new file mode 100644
index 0000000..ec425e4
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/LocateFkReferenceColumnCommand.cs
@@ -0,0 +1,41 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector.Commands
+{
+ /// <summary>The locate fk reference column command.</summary>
+ public class LocateFkReferenceColumnCommand : GenerateStatementCommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="LocateFkReferenceColumnCommand"/> class.</summary>
+ public LocateFkReferenceColumnCommand()
+ : base("Jump to FK column reference...")
+ {
+ }
+
+ /// <summary>Gets a value indicating whether Enabled.</summary>
+ public override bool Enabled
+ {
+ get
+ {
+ DbModelColumn column = HostWindow.DatabaseInspector.RightClickedModelObject as DbModelColumn;
+ return column != null && column.ForeignKeyReference != null;
+ }
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ DbModelColumn column = HostWindow.DatabaseInspector.RightClickedModelObject as DbModelColumn;
+ if (column != null && column.ForeignKeyReference != null)
+ {
+ HostWindow.DatabaseInspector.NavigateTo(column.ForeignKeyReference.ReferenceColumn);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/ShowDatabaseInspectorCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/ShowDatabaseInspectorCommand.cs
new file mode 100644
index 0000000..bdf1fd0
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/ShowDatabaseInspectorCommand.cs
@@ -0,0 +1,34 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector.Commands
+{
+ /// <summary>The show database inspector command.</summary>
+ public class ShowDatabaseInspectorCommand : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="ShowDatabaseInspectorCommand"/> class.</summary>
+ public ShowDatabaseInspectorCommand()
+ : base("Show Database Inspector")
+ {
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ DockContent databaseInspector = Services.Resolve<IDatabaseInspector>() as DockContent;
+ if (databaseInspector != null)
+ {
+ HostWindow.ShowDatabaseInspector(databaseInspector as IDatabaseInspector, DockState.DockLeft);
+ databaseInspector.Activate();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/ShowFindObjectFormCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/ShowFindObjectFormCommand.cs
new file mode 100644
index 0000000..079ffe4
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/ShowFindObjectFormCommand.cs
@@ -0,0 +1,47 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Linq;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector.Commands
+{
+ /// <summary>The show find object form command.</summary>
+ public class ShowFindObjectFormCommand : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="ShowFindObjectFormCommand"/> class.</summary>
+ public ShowFindObjectFormCommand()
+ : base("Find Object...")
+ {
+ ShortcutKeys = Keys.Alt | Keys.F;
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ using (var frm = Services.Resolve<FindObjectForm>())
+ {
+ frm.ShowDialog(HostWindow.Instance);
+
+ var selectedTableName = frm.SelectedObjectName;
+ if (frm.DialogResult == DialogResult.OK && !String.IsNullOrEmpty(selectedTableName))
+ {
+ // Special case for handling schemas - We want the search without the [dbo].[foo] part
+ // but the FindTableOrView expects it....
+ var parts = selectedTableName.Split('.').Select(s => "[" + s + "]").ToArray();
+ var name = String.Join(".", parts);
+
+ IDbModelNamedObject obj = HostWindow.DatabaseInspector.DbSchema.FindTableOrView(name);
+ HostWindow.DatabaseInspector.NavigateTo(obj);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/TruncateTableCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/TruncateTableCommand.cs
new file mode 100644
index 0000000..373535d
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/Commands/TruncateTableCommand.cs
@@ -0,0 +1,69 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Data;
+using System.Data.Common;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector.Commands
+{
+ /// <summary>The truncate table command.</summary>
+ public class TruncateTableCommand : GenerateStatementCommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="TruncateTableCommand"/> class.</summary>
+ public TruncateTableCommand()
+ : base("Truncate Table")
+ {
+ SmallImage = ImageResource.table_delete;
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ IHostWindow hostWindow = Services.HostWindow;
+ string tableName = hostWindow.DatabaseInspector.RightClickedTableName;
+
+ string caption = string.Format("Truncate '{0}' Table Confirmation", tableName);
+ string msg = string.Format("Delete all '{0}' data, are you sure?", tableName);
+ if (tableName != null && MessageBox.Show(msg, caption, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
+ {
+ DbConnection dbConnection;
+ DbCommand cmd = null;
+
+ try
+ {
+ hostWindow.SetPointerState(Cursors.WaitCursor);
+ dbConnection = Settings.GetOpenConnection();
+ cmd = dbConnection.CreateCommand();
+ cmd.CommandText = "DELETE FROM " + tableName;
+ cmd.CommandType = CommandType.Text;
+ cmd.ExecuteNonQuery();
+ Services.PostMessage(SystemMessage.TableTruncated, tableName);
+ }
+ catch (DbException dbExp)
+ {
+ hostWindow.DisplaySimpleMessageBox(null, dbExp.Message, "Error");
+ }
+ catch (InvalidOperationException invalidExp)
+ {
+ hostWindow.DisplaySimpleMessageBox(null, invalidExp.Message, "Error");
+ }
+ finally
+ {
+ if (cmd != null)
+ {
+ cmd.Dispose();
+ }
+
+ hostWindow.SetPointerState(Cursors.Default);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/DatabaseInspectorForm.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/DatabaseInspectorForm.cs
new file mode 100644
index 0000000..6a845c3
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/DatabaseInspectorForm.cs
@@ -0,0 +1,553 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.IO;
+using System.Media;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.DbModel;
+using MiniSqlQuery.Properties;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector
+{
+ /// <summary>The database inspector form.</summary>
+ public partial class DatabaseInspectorForm : DockContent, IDatabaseInspector
+ {
+ /// <summary>The root tag.</summary>
+ private static readonly object RootTag = new object();
+
+ /// <summary>The tables tag.</summary>
+ private static readonly object TablesTag = new object();
+
+ /// <summary>The views tag.</summary>
+ private static readonly object ViewsTag = new object();
+
+ /// <summary>The _host window.</summary>
+ private readonly IHostWindow _hostWindow;
+
+ /// <summary>The _services.</summary>
+ private readonly IApplicationServices _services;
+
+ /// <summary>The _meta data service.</summary>
+ private IDatabaseSchemaService _metaDataService;
+
+ /// <summary>The _model.</summary>
+ private DbModelInstance _model;
+
+ /// <summary>The _populated.</summary>
+ private bool _populated;
+
+ /// <summary>The _right clicked model object.</summary>
+ private IDbModelNamedObject _rightClickedModelObject;
+
+ /// <summary>The _right clicked node.</summary>
+ private TreeNode _rightClickedNode;
+
+ /// <summary>The _sql writer.</summary>
+ private ISqlWriter _sqlWriter;
+
+ /// <summary>The _tables node.</summary>
+ private TreeNode _tablesNode;
+
+ /// <summary>The _views node.</summary>
+ private TreeNode _viewsNode;
+
+ /// <summary>Initializes a new instance of the <see cref="DatabaseInspectorForm"/> class.</summary>
+ /// <param name="services">The services.</param>
+ /// <param name="hostWindow">The host window.</param>
+ public DatabaseInspectorForm(IApplicationServices services, IHostWindow hostWindow)
+ {
+ InitializeComponent();
+ BuildImageList();
+
+ DatabaseTreeView.Nodes.Clear();
+ TreeNode root = CreateRootNodes();
+ root.Nodes.Add("Loading problem - check connection details and reset...");
+ DatabaseTreeView.Nodes.Add(root);
+
+ _services = services;
+ _hostWindow = hostWindow;
+
+ _services.Settings.DatabaseConnectionReset += Settings_DatabaseConnectionReset;
+ }
+
+ /// <summary>Gets ColumnMenu.</summary>
+ public ContextMenuStrip ColumnMenu
+ {
+ get { return ColumnNameContextMenuStrip; }
+ }
+
+ /// <summary>Gets DbSchema.</summary>
+ public DbModelInstance DbSchema
+ {
+ get { return _model; }
+ }
+
+ /// <summary>Gets RightClickedModelObject.</summary>
+ public IDbModelNamedObject RightClickedModelObject
+ {
+ get { return _rightClickedModelObject; }
+ }
+
+ /// <summary>Gets RightClickedTableName.</summary>
+ public string RightClickedTableName
+ {
+ get
+ {
+ if (_rightClickedNode == null)
+ {
+ return null;
+ }
+
+ return _rightClickedNode.Text;
+ }
+ }
+
+ /// <summary>Gets TableMenu.</summary>
+ public ContextMenuStrip TableMenu
+ {
+ get { return TableNodeContextMenuStrip; }
+ }
+
+ /// <summary>The load database details.</summary>
+ public void LoadDatabaseDetails()
+ {
+ ExecLoadDatabaseDetails();
+ }
+
+ /// <summary>The navigate to.</summary>
+ /// <param name="modelObject">The model object.</param>
+ public void NavigateTo(IDbModelNamedObject modelObject)
+ {
+ if (modelObject == null)
+ {
+ return;
+ }
+
+ // todo - ensure expanded
+
+ switch (modelObject.ObjectType)
+ {
+ case ObjectTypes.Table:
+ foreach (TreeNode treeNode in _tablesNode.Nodes)
+ {
+ IDbModelNamedObject obj = treeNode.Tag as IDbModelNamedObject;
+ if (obj != null && modelObject == obj)
+ {
+ SelectNode(treeNode);
+ }
+ }
+
+ break;
+ case ObjectTypes.View:
+ foreach (TreeNode treeNode in _viewsNode.Nodes)
+ {
+ IDbModelNamedObject obj = treeNode.Tag as IDbModelNamedObject;
+ if (obj != null && modelObject == obj)
+ {
+ SelectNode(treeNode);
+ }
+ }
+
+ break;
+ case ObjectTypes.Column:
+ DbModelColumn modelColumn = modelObject as DbModelColumn;
+ if (modelColumn != null)
+ {
+ foreach (TreeNode treeNode in _tablesNode.Nodes)
+ {
+ // only look in the tables nodw for FK refs
+ DbModelTable modelTable = treeNode.Tag as DbModelTable;
+ if (modelTable != null && modelTable == modelColumn.ParentTable)
+ {
+ // now find the column in the child nodes
+ foreach (TreeNode columnNode in treeNode.Nodes)
+ {
+ DbModelColumn modelReferingColumn = columnNode.Tag as DbModelColumn;
+ if (modelReferingColumn != null && modelReferingColumn == modelColumn)
+ {
+ SelectNode(columnNode);
+ }
+ }
+ }
+ }
+ }
+
+ break;
+ }
+ }
+
+ /// <summary>The build image key.</summary>
+ /// <param name="column">The column.</param>
+ /// <returns>The build image key.</returns>
+ private string BuildImageKey(DbModelColumn column)
+ {
+ string imageKey = column.ObjectType;
+ if (column.IsRowVersion)
+ {
+ imageKey += "-RowVersion";
+ }
+ else
+ {
+ if (column.IsKey)
+ {
+ imageKey += "-PK";
+ }
+
+ if (column.ForeignKeyReference != null)
+ {
+ imageKey += "-FK";
+ }
+ }
+
+ return imageKey;
+ }
+
+ /// <summary>Builds the image list.
+ /// It's nicer to hadle image lists this way, easier to update etc</summary>
+ private void BuildImageList()
+ {
+ InspectorImageList.Images.Add("Table", ImageResource.table);
+ InspectorImageList.Images.Add("Database", ImageResource.database);
+ InspectorImageList.Images.Add("Column", ImageResource.column);
+ InspectorImageList.Images.Add("Tables", ImageResource.table_multiple);
+ InspectorImageList.Images.Add("Views", ImageResource.view_multiple);
+ InspectorImageList.Images.Add("View", ImageResource.view);
+ InspectorImageList.Images.Add("Column-PK", ImageResource.key);
+ InspectorImageList.Images.Add("Column-FK", ImageResource.key_go_disabled);
+ InspectorImageList.Images.Add("Column-PK-FK", ImageResource.key_go);
+ InspectorImageList.Images.Add("Column-RowVersion", ImageResource.column_row_version);
+ }
+
+ /// <summary>The build tool tip.</summary>
+ /// <param name="table">The table.</param>
+ /// <param name="column">The column.</param>
+ /// <returns>The build tool tip.</returns>
+ private string BuildToolTip(DbModelTable table, DbModelColumn column)
+ {
+ string friendlyColumnName = Utility.MakeSqlFriendly(column.Name);
+ string toolTip = table.FullName + "." + friendlyColumnName;
+ if (column.IsKey)
+ {
+ toolTip += "; Primary Key";
+ }
+
+ if (column.IsAutoIncrement)
+ {
+ toolTip += "; Auto*";
+ }
+
+ if (column.ForeignKeyReference != null)
+ {
+ toolTip += string.Format("; FK -> {0}.{1}", column.ForeignKeyReference.ReferenceTable.FullName, column.ForeignKeyReference.ReferenceColumn.Name);
+ }
+
+ if (column.IsReadOnly)
+ {
+ toolTip += "; Read Only";
+ }
+
+ return toolTip;
+ }
+
+ /// <summary>The build tree from db model.</summary>
+ /// <param name="connection">The connection.</param>
+ private void BuildTreeFromDbModel(string connection)
+ {
+ DatabaseTreeView.Nodes.Clear();
+ TreeNode root = CreateRootNodes();
+ root.ToolTipText = connection;
+
+ if (_model.Tables != null)
+ {
+ foreach (DbModelTable table in _model.Tables)
+ {
+ CreateTreeNodes(table);
+ }
+ }
+
+ if (_model.Views != null)
+ {
+ foreach (DbModelView view in _model.Views)
+ {
+ CreateTreeNodes(view);
+ }
+ }
+
+ DatabaseTreeView.Nodes.Add(root);
+ }
+
+ /// <summary>The create root nodes.</summary>
+ /// <returns></returns>
+ private TreeNode CreateRootNodes()
+ {
+ TreeNode root = new TreeNode(Resources.Database);
+ root.ImageKey = "Database";
+ root.SelectedImageKey = "Database";
+ root.ContextMenuStrip = InspectorContextMenuStrip;
+ root.Tag = RootTag;
+
+ _tablesNode = new TreeNode(Resources.Tables);
+ _tablesNode.ImageKey = "Tables";
+ _tablesNode.SelectedImageKey = "Tables";
+ _tablesNode.Tag = TablesTag;
+
+ _viewsNode = new TreeNode(Resources.Views);
+ _viewsNode.ImageKey = "Views";
+ _viewsNode.SelectedImageKey = "Views";
+ _viewsNode.Tag = ViewsTag;
+
+ root.Nodes.Add(_tablesNode);
+ root.Nodes.Add(_viewsNode);
+
+ return root;
+ }
+
+ /// <summary>The create tree nodes.</summary>
+ /// <param name="table">The table.</param>
+ private void CreateTreeNodes(DbModelTable table)
+ {
+ TreeNode tableNode = new TreeNode(table.FullName);
+ tableNode.Name = table.FullName;
+ tableNode.ImageKey = table.ObjectType;
+ tableNode.SelectedImageKey = table.ObjectType;
+ tableNode.ContextMenuStrip = TableNodeContextMenuStrip;
+ tableNode.Tag = table;
+
+ foreach (DbModelColumn column in table.Columns)
+ {
+ string friendlyColumnName = Utility.MakeSqlFriendly(column.Name);
+ TreeNode columnNode = new TreeNode(friendlyColumnName);
+ columnNode.Name = column.Name;
+ string imageKey = BuildImageKey(column);
+ columnNode.ImageKey = imageKey;
+ columnNode.SelectedImageKey = imageKey;
+ columnNode.ContextMenuStrip = ColumnNameContextMenuStrip;
+ columnNode.Tag = column;
+ columnNode.Text = GetSummary(column);
+ string toolTip = BuildToolTip(table, column);
+ columnNode.ToolTipText = toolTip;
+ tableNode.Nodes.Add(columnNode);
+ }
+
+ switch (table.ObjectType)
+ {
+ case ObjectTypes.Table:
+ _tablesNode.Nodes.Add(tableNode);
+ break;
+ case ObjectTypes.View:
+ _viewsNode.Nodes.Add(tableNode);
+ break;
+ }
+ }
+
+ /// <summary>The database inspector form_ form closing.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void DatabaseInspectorForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (e.CloseReason == CloseReason.UserClosing)
+ {
+ Hide();
+ e.Cancel = true;
+ }
+ }
+
+
+ /// <summary>The database inspector form_ load.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void DatabaseInspectorForm_Load(object sender, EventArgs e)
+ {
+ }
+
+ /// <summary>The database tree view_ before expand.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void DatabaseTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e)
+ {
+ TreeNode node = e.Node;
+
+ if (node != null && node.Tag == RootTag && !_populated)
+ {
+ _populated = true;
+ bool ok = ExecLoadDatabaseDetails();
+
+ if (ok && DatabaseTreeView.Nodes.Count > 0)
+ {
+ DatabaseTreeView.Nodes[0].Expand();
+ }
+ else
+ {
+ e.Cancel = true;
+ }
+ }
+ }
+
+ /// <summary>The database tree view_ node mouse click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void DatabaseTreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
+ {
+ TreeNode node = e.Node;
+ if (e.Button == MouseButtons.Right)
+ {
+ IDbModelNamedObject namedObject = node.Tag as IDbModelNamedObject;
+ _rightClickedModelObject = namedObject;
+
+ if (namedObject != null &&
+ (namedObject.ObjectType == ObjectTypes.Table || namedObject.ObjectType == ObjectTypes.View))
+ {
+ _rightClickedNode = node;
+ }
+ else
+ {
+ _rightClickedNode = null;
+ }
+ }
+ }
+
+ /// <summary>The database tree view_ node mouse double click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void DatabaseTreeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
+ {
+ TreeNode node = e.Node;
+ if (e.Button == MouseButtons.Left)
+ {
+ IDbModelNamedObject namedObject = node.Tag as IDbModelNamedObject;
+ if (namedObject != null)
+ {
+ SetText(namedObject.FullName);
+ }
+ }
+ }
+
+ /// <summary>The exec load database details.</summary>
+ /// <returns>The exec load database details.</returns>
+ private bool ExecLoadDatabaseDetails()
+ {
+ bool populate = false;
+ string connection = string.Empty;
+ bool success = false;
+
+ try
+ {
+ _hostWindow.SetPointerState(Cursors.WaitCursor);
+ if (_metaDataService == null)
+ {
+ _metaDataService = DatabaseMetaDataService.Create(_services.Settings.ConnectionDefinition.ProviderName);
+ }
+
+ connection = _metaDataService.GetDescription();
+ populate = true;
+ }
+ catch (Exception exp)
+ {
+ string msg = string.Format(
+ "{0}\r\n\r\nCheck the connection and select 'Refresh Database Connection'.",
+ exp.Message);
+ _hostWindow.DisplaySimpleMessageBox(_hostWindow.Instance, msg, "DB Connection Error");
+ _hostWindow.SetStatus(this, exp.Message);
+ }
+ finally
+ {
+ _hostWindow.SetPointerState(Cursors.Default);
+ }
+
+ if (populate)
+ {
+ try
+ {
+ _hostWindow.SetPointerState(Cursors.WaitCursor);
+ _model = _metaDataService.GetDbObjectModel(_services.Settings.ConnectionDefinition.ConnectionString);
+ }
+ finally
+ {
+ _hostWindow.SetPointerState(Cursors.Default);
+ }
+
+ BuildTreeFromDbModel(connection);
+ _hostWindow.SetStatus(this, string.Empty);
+ success = true;
+ }
+ else
+ {
+ _populated = false;
+ DatabaseTreeView.CollapseAll();
+ }
+
+ return success;
+ }
+
+ /// <summary>The get summary.</summary>
+ /// <param name="column">The column.</param>
+ /// <returns>The get summary.</returns>
+ private string GetSummary(DbModelColumn column)
+ {
+ StringWriter stringWriter = new StringWriter();
+ if (_sqlWriter == null)
+ {
+ _sqlWriter = _services.Resolve<ISqlWriter>();
+ }
+
+ _sqlWriter.WriteSummary(stringWriter, column);
+ return stringWriter.ToString();
+ }
+
+ /// <summary>The select node.</summary>
+ /// <param name="treeNode">The tree node.</param>
+ private void SelectNode(TreeNode treeNode)
+ {
+ if (treeNode.Parent != null)
+ {
+ treeNode.Parent.EnsureVisible();
+ }
+
+ treeNode.EnsureVisible();
+ DatabaseTreeView.SelectedNode = treeNode;
+ treeNode.Expand();
+ DatabaseTreeView.Focus();
+ }
+
+ /// <summary>The set text.</summary>
+ /// <param name="text">The text.</param>
+ private void SetText(string text)
+ {
+ IQueryEditor editor = _hostWindow.ActiveChildForm as IQueryEditor;
+
+ if (editor != null)
+ {
+ editor.InsertText(text);
+ }
+ else
+ {
+ SystemSounds.Beep.Play();
+ }
+ }
+
+ /// <summary>The settings_ database connection reset.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void Settings_DatabaseConnectionReset(object sender, EventArgs e)
+ {
+ _metaDataService = null;
+ _sqlWriter = null;
+ ExecLoadDatabaseDetails();
+ }
+
+ /// <summary>The load tool strip menu item_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void loadToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ LoadDatabaseDetails();
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/DatabaseInspectorForm.Designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/DatabaseInspectorForm.Designer.cs
new file mode 100644
index 0000000..6fa0653
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/DatabaseInspectorForm.Designer.cs
@@ -0,0 +1,120 @@
+namespace MiniSqlQuery.PlugIns.DatabaseInspector
+{
+ partial class DatabaseInspectorForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DatabaseInspectorForm));
+ this.InspectorContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.loadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.InspectorImageList = new System.Windows.Forms.ImageList(this.components);
+ this.TableNodeContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.DatabaseTreeView = new System.Windows.Forms.TreeView();
+ this.ColumnNameContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.InspectorContextMenuStrip.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // InspectorContextMenuStrip
+ //
+ this.InspectorContextMenuStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
+ this.InspectorContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.loadToolStripMenuItem});
+ this.InspectorContextMenuStrip.Name = "InspectorContextMenuStrip";
+ this.InspectorContextMenuStrip.Size = new System.Drawing.Size(196, 28);
+ //
+ // loadToolStripMenuItem
+ //
+ this.loadToolStripMenuItem.Name = "loadToolStripMenuItem";
+ this.loadToolStripMenuItem.Size = new System.Drawing.Size(195, 24);
+ this.loadToolStripMenuItem.Text = "&Load Meta-Data";
+ this.loadToolStripMenuItem.Click += new System.EventHandler(this.loadToolStripMenuItem_Click);
+ //
+ // InspectorImageList
+ //
+ this.InspectorImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+ this.InspectorImageList.ImageSize = new System.Drawing.Size(16, 16);
+ this.InspectorImageList.TransparentColor = System.Drawing.Color.Transparent;
+ //
+ // TableNodeContextMenuStrip
+ //
+ this.TableNodeContextMenuStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
+ this.TableNodeContextMenuStrip.Name = "TableNodeContextMenuStrip";
+ this.TableNodeContextMenuStrip.Size = new System.Drawing.Size(61, 4);
+ //
+ // DatabaseTreeView
+ //
+ this.DatabaseTreeView.ContextMenuStrip = this.InspectorContextMenuStrip;
+ this.DatabaseTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.DatabaseTreeView.ImageIndex = 0;
+ this.DatabaseTreeView.ImageList = this.InspectorImageList;
+ this.DatabaseTreeView.Location = new System.Drawing.Point(0, 0);
+ this.DatabaseTreeView.Name = "DatabaseTreeView";
+ this.DatabaseTreeView.SelectedImageIndex = 0;
+ this.DatabaseTreeView.ShowNodeToolTips = true;
+ this.DatabaseTreeView.Size = new System.Drawing.Size(478, 465);
+ this.DatabaseTreeView.TabIndex = 2;
+ this.DatabaseTreeView.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.DatabaseTreeView_BeforeExpand);
+ this.DatabaseTreeView.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.DatabaseTreeView_NodeMouseClick);
+ this.DatabaseTreeView.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.DatabaseTreeView_NodeMouseDoubleClick);
+ //
+ // ColumnNameContextMenuStrip
+ //
+ this.ColumnNameContextMenuStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
+ this.ColumnNameContextMenuStrip.Name = "ColumnNameContextMenuStrip";
+ this.ColumnNameContextMenuStrip.Size = new System.Drawing.Size(61, 4);
+ //
+ // DatabaseInspectorForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 17F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(478, 465);
+ this.Controls.Add(this.DatabaseTreeView);
+ this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "DatabaseInspectorForm";
+ this.TabText = "DB Inspector";
+ this.Text = "Database Inspector";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DatabaseInspectorForm_FormClosing);
+ this.Load += new System.EventHandler(this.DatabaseInspectorForm_Load);
+ this.InspectorContextMenuStrip.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ContextMenuStrip InspectorContextMenuStrip;
+ private System.Windows.Forms.ContextMenuStrip TableNodeContextMenuStrip;
+ private System.Windows.Forms.ToolStripMenuItem loadToolStripMenuItem;
+ private System.Windows.Forms.ImageList InspectorImageList;
+ private System.Windows.Forms.TreeView DatabaseTreeView;
+ private System.Windows.Forms.ContextMenuStrip ColumnNameContextMenuStrip;
+
+
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/DatabaseInspectorForm.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/DatabaseInspectorForm.resx
new file mode 100644
index 0000000..6f7034b
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/DatabaseInspectorForm.resx
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="InspectorContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>19, 20</value>
+ </metadata>
+ <metadata name="InspectorImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>610, 20</value>
+ </metadata>
+ <metadata name="TableNodeContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>210, 20</value>
+ </metadata>
+ <metadata name="ColumnNameContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>403, 20</value>
+ </metadata>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA////AMOEUgC4uLgAdr58AN+qggDb29sAmpWRAOrHrQCLy5MA0ZdqALannAD27eYAysrKANK7
+ qQDnt5MA69O/AKKiogDw4tgArKysAMiNXwDXoXUA+/byAOTk5ACCxokA0dHRANvCrQDw8PAA2KyKAOrq
+ 6gCysrIAmpqaAOrNtQDksowAzpJjAPr6+gDW1tYAp6enAMXFxQDj3tsA8+feAOnDpgDcpX0Ar6ScAOPH
+ sACTk5MA+PLtAH7DhADUm28A9PT0AJ6engDIilkAh8mOAKSgnAB6wYAA69C6AOKviADt7e0AtbW1APTq
+ 4gDGhlUAxYpdANaecgDZpHoA8eXbAPfw6gDmtZAA6cmwAMuPXwD4+PgA9vb2APLy8gDi4uIA2dnZAKWl
+ pQDPz88Arq6uAMjIyADdqH4A4KyEAOvRvQD58+8A05luAKurqgDoyK4AxIZUAPv39ADJilsAxoxfANGW
+ aADdqYAA6s63AOrMswDozLUA6MesAPv7+wD5+fkAx4dWAPPz8wDx8fEA7+/vAOzs7ADX19cAqKioANXV
+ 1QDQ0NAAsbGxAMvLywC0tLQAtra2ALe3twDGxsYAxopcAMuOXgD38esAzpNkANegdADao3oA69K+AOrP
+ ugDpya4A6MiwAPnz7gDy594A8eTbAKurqwDr0LsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAA+UlkicVdhAgICAgICAAAAFS5BDDsofBISEhISEj0AAD96dgEQAQEBCAEBARJYAABOUTd+
+ fn5+UCAgICAScAAABVFbAX4BAQF3FgEBEhQAABwnDhosXFxbXl55VBJVAAArUzUlC2IBAV4BAQFAPABr
+ HRtHZQ0HeENeQ3ldezMTI2ZIDUsBLQEBXgEBAXJETEUZZSZvAR8pKSkpKSlWc2pFaGRrawEyAQEBAQEB
+ VgpsRQZkaWkBEQk0GC82BFYwbUdJF0hNY0pWVlZWVlZWdANGMWBfRkZnD0IhOE9aKnUAJDlgXxtJfQAA
+ AAAAAAAAAAAAbjoeAAAAAAAAAAAAAMABAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAACAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAgP8AAOP/AAA=
+</value>
+ </data>
+</root>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/DatabaseInspectorLoader.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/DatabaseInspectorLoader.cs
new file mode 100644
index 0000000..e3c5b0c
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/DatabaseInspectorLoader.cs
@@ -0,0 +1,53 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.PlugIns.DatabaseInspector.Commands;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector
+{
+ /// <summary>The database inspector loader.</summary>
+ public class DatabaseInspectorLoader : PluginLoaderBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="DatabaseInspectorLoader"/> class.</summary>
+ public DatabaseInspectorLoader()
+ : base(
+ "Database Inspector",
+ "A Mini SQL Query Plugin for displaying the database schema in a tree view",
+ 20)
+ {
+ }
+
+ /// <summary>Iinitialize the plug in.</summary>
+ public override void InitializePlugIn()
+ {
+ Services.RegisterSingletonComponent<IDatabaseInspector, DatabaseInspectorForm>("DatabaseInspector");
+ Services.RegisterComponent<FindObjectForm>("FindObjectForm");
+
+ IHostWindow hostWindow = Services.HostWindow;
+ hostWindow.AddPluginCommand<ShowDatabaseInspectorCommand>();
+ CommandManager.GetCommandInstance<ShowDatabaseInspectorCommand>().Execute();
+
+ ToolStripMenuItem editMenu = hostWindow.GetMenuItem("edit");
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ShowFindObjectFormCommand>());
+
+ hostWindow.DatabaseInspector.TableMenu.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<GenerateSelectStatementCommand>());
+ hostWindow.DatabaseInspector.TableMenu.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<GenerateSelectCountStatementCommand>());
+ hostWindow.DatabaseInspector.TableMenu.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<GenerateInsertStatementCommand>());
+ hostWindow.DatabaseInspector.TableMenu.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<GenerateUpdateStatementCommand>());
+ hostWindow.DatabaseInspector.TableMenu.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<GenerateDeleteStatementCommand>());
+ hostWindow.DatabaseInspector.TableMenu.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<CopyTableNameCommand>());
+ hostWindow.DatabaseInspector.TableMenu.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<TruncateTableCommand>());
+
+ hostWindow.DatabaseInspector.ColumnMenu.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<LocateFkReferenceColumnCommand>());
+
+ // todo: bug - the opening event is not firing....
+ CommandControlBuilder.MonitorMenuItemsOpeningForEnabling(hostWindow.DatabaseInspector.ColumnMenu);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/FindObjectForm.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/FindObjectForm.cs
new file mode 100644
index 0000000..1529d11
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/FindObjectForm.cs
@@ -0,0 +1,203 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector
+{
+ /// <summary>The find object form.</summary>
+ public partial class FindObjectForm : Form
+ {
+ /// <summary>The _database inspector.</summary>
+ private readonly IDatabaseInspector _databaseInspector;
+
+ private readonly List<string> _items = new List<string>();
+ private string _selectedItem;
+
+ /// <summary>Initializes a new instance of the <see cref="FindObjectForm"/> class.</summary>
+ /// <param name="databaseInspector">The database inspector.</param>
+ public FindObjectForm(IDatabaseInspector databaseInspector)
+ {
+ _databaseInspector = databaseInspector;
+ InitializeComponent();
+ }
+
+ /// <summary>Gets the Selected Table Name.</summary>
+ [Obsolete]
+ public string SelectedTableName
+ {
+ get { return _selectedItem; }
+ }
+
+ /// <summary>Gets the Selected Object Name.</summary>
+ public string SelectedObjectName
+ {
+ get { return _selectedItem; }
+ }
+
+ /// <summary>Check the keys, escape to exit, enter to select. If up or down are pressed move the list item.</summary>
+ /// <param name="msg">The windows message.</param>
+ /// <param name="keyData">The key data.</param>
+ /// <returns>The process command key result.</returns>
+ protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
+ {
+ switch (keyData)
+ {
+ case Keys.Escape:
+ DialogResult = DialogResult.Cancel;
+ Close();
+ break;
+
+ case Keys.Enter:
+ Done();
+ break;
+
+ case Keys.Up:
+ MoveSelectionUp();
+ return true;
+
+ case Keys.Down:
+ MoveSelectionDown();
+ return true;
+ }
+
+ return base.ProcessCmdKey(ref msg, keyData);
+ }
+
+ private void FindObjectForm_Load(object sender, EventArgs e)
+ {
+ }
+
+ private void FindObjectForm_Shown(object sender, EventArgs e)
+ {
+ _items.Clear();
+
+ try
+ {
+ UseWaitCursor = true;
+
+ if (_databaseInspector.DbSchema == null)
+ {
+ _databaseInspector.LoadDatabaseDetails();
+
+ // And if it is still null (e.g. connection error) then bail out:
+ if (_databaseInspector.DbSchema == null)
+ {
+ return;
+ }
+ }
+
+ foreach (DbModelTable table in _databaseInspector.DbSchema.Tables)
+ {
+ var name = table.Schema;
+ if (!String.IsNullOrEmpty(name))
+ {
+ name += ".";
+ }
+ name += table.Name;
+
+ _items.Add(name);
+ }
+
+ foreach (DbModelView view in _databaseInspector.DbSchema.Views)
+ {
+ _items.Add(view.FullName);
+ }
+ }
+ finally
+ {
+ UseWaitCursor = false;
+ }
+
+ lstItems.DataSource = _items;
+ txtSearchPattern.Focus();
+ }
+
+ private void lstItems_DoubleClick(object sender, EventArgs e)
+ {
+ Done();
+ }
+
+ private void txtSearchPattern_TextChanged(object sender, EventArgs e)
+ {
+ if (_items != null)
+ {
+ var searchValue = txtSearchPattern.Text.ToLowerInvariant();
+ var dataSource = _items.Where(objectName =>
+ {
+ objectName = objectName ?? String.Empty;
+ objectName = objectName.ToLowerInvariant();
+ return objectName.Contains(searchValue);
+ }).ToList();
+ Debug.WriteLine(string.Format("search '{0}' yields {1}...", searchValue, dataSource.Count));
+
+ lstItems.DataSource = dataSource;
+ }
+ else
+ {
+ lstItems.DataSource = null;
+ }
+
+ SetSelectedName();
+ }
+
+ /// <summary>
+ /// If there is a valid selection remember it.
+ /// </summary>
+ private void SetSelectedName()
+ {
+ _selectedItem = String.Empty;
+
+ if (lstItems.SelectedItem != null)
+ {
+ _selectedItem = lstItems.SelectedItem.ToString();
+ }
+ }
+
+ /// <summary>
+ /// Move the list selection up one if we can.
+ /// </summary>
+ private void MoveSelectionUp()
+ {
+ if (lstItems.SelectedIndex < 1)
+ {
+ return;
+ }
+ lstItems.SelectedIndex--;
+ }
+
+ /// <summary>
+ /// Move the list selection down one if we can.
+ /// </summary>
+ private void MoveSelectionDown()
+ {
+ var maxIndex = lstItems.Items.Count - 1;
+ if (lstItems.SelectedIndex >= maxIndex)
+ {
+ return;
+ }
+ lstItems.SelectedIndex++;
+ }
+
+ /// <summary>
+ /// Set the selected item and close the form.
+ /// </summary>
+ private void Done()
+ {
+ SetSelectedName();
+ DialogResult = DialogResult.OK;
+ Close();
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/FindObjectForm.Designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/FindObjectForm.Designer.cs
new file mode 100644
index 0000000..bc01518
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/FindObjectForm.Designer.cs
@@ -0,0 +1,82 @@
+namespace MiniSqlQuery.PlugIns.DatabaseInspector
+{
+ partial class FindObjectForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.txtSearchPattern = new System.Windows.Forms.TextBox();
+ this.lstItems = new System.Windows.Forms.ListBox();
+ this.SuspendLayout();
+ //
+ // txtSearchPattern
+ //
+ this.txtSearchPattern.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtSearchPattern.Location = new System.Drawing.Point(12, 12);
+ this.txtSearchPattern.Name = "txtSearchPattern";
+ this.txtSearchPattern.Size = new System.Drawing.Size(553, 22);
+ this.txtSearchPattern.TabIndex = 2;
+ this.txtSearchPattern.TextChanged += new System.EventHandler(this.txtSearchPattern_TextChanged);
+ //
+ // lstItems
+ //
+ this.lstItems.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.lstItems.FormattingEnabled = true;
+ this.lstItems.ItemHeight = 16;
+ this.lstItems.Location = new System.Drawing.Point(12, 38);
+ this.lstItems.Name = "lstItems";
+ this.lstItems.Size = new System.Drawing.Size(553, 244);
+ this.lstItems.TabIndex = 3;
+ this.lstItems.DoubleClick += new System.EventHandler(this.lstItems_DoubleClick);
+ //
+ // FindObjectForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(577, 295);
+ this.Controls.Add(this.lstItems);
+ this.Controls.Add(this.txtSearchPattern);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+ this.Margin = new System.Windows.Forms.Padding(4);
+ this.Name = "FindObjectForm";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Find Object";
+ this.Load += new System.EventHandler(this.FindObjectForm_Load);
+ this.Shown += new System.EventHandler(this.FindObjectForm_Shown);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TextBox txtSearchPattern;
+ private System.Windows.Forms.ListBox lstItems;
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/FindObjectForm.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/FindObjectForm.resx
new file mode 100644
index 0000000..19dc0dd
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/FindObjectForm.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/Commands/FindNextStringCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/Commands/FindNextStringCommand.cs
new file mode 100644
index 0000000..b972cff
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/Commands/FindNextStringCommand.cs
@@ -0,0 +1,75 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns.SearchTools.Commands
+{
+ /// <summary>The find next string command.</summary>
+ public class FindNextStringCommand : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="FindNextStringCommand"/> class.</summary>
+ public FindNextStringCommand() : base("Find Next String")
+ {
+ SmallImage = ImageResource.find;
+ ShortcutKeys = Keys.F3;
+ }
+
+ /// <summary>Two execution methods - through the "Find Text" window or by hitting F3.
+ /// If simply hitting F3, we are executing the current search from current cursor position for this window.
+ /// Different windows can also have different search text.</summary>
+ public override void Execute()
+ {
+ IFindReplaceProvider editorFindProvider = HostWindow.ActiveChildForm as IFindReplaceProvider;
+
+ if (editorFindProvider != null)
+ {
+ FindTextRequest findTextRequest = null;
+ int key = editorFindProvider.GetHashCode();
+
+ // is there a request in the table for this window?
+ if (SearchToolsCommon.FindReplaceTextRequests.ContainsKey(key))
+ {
+ findTextRequest = SearchToolsCommon.FindReplaceTextRequests[key];
+ }
+ else
+ {
+ if (SearchToolsCommon.FindReplaceTextRequests.Count > 0)
+ {
+ // if there is an entry in the list of searches create an instance
+ findTextRequest = new FindTextRequest(editorFindProvider);
+ findTextRequest.Position = editorFindProvider.CursorOffset;
+ }
+ else
+ {
+ // none in table, default to curently selected text if its the editor
+ IEditor editor = ActiveFormAsEditor;
+ if (editor != null && editor.SelectedText.Length > 0)
+ {
+ findTextRequest = new FindTextRequest(editorFindProvider, editor.SelectedText);
+ findTextRequest.Position = editorFindProvider.CursorOffset;
+ }
+ }
+ }
+
+ if (findTextRequest != null)
+ {
+ // wrap around to start if at last pos
+ if (findTextRequest.Position != 0)
+ {
+ findTextRequest.Position = editorFindProvider.CursorOffset;
+ }
+
+ findTextRequest = editorFindProvider.TextFindService.FindNext(findTextRequest);
+ SearchToolsCommon.FindReplaceTextRequests[key] = findTextRequest;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/Commands/ReplaceStringCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/Commands/ReplaceStringCommand.cs
new file mode 100644
index 0000000..a7c38de
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/Commands/ReplaceStringCommand.cs
@@ -0,0 +1,54 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns.SearchTools.Commands
+{
+ /// <summary>The replace string command.</summary>
+ public class ReplaceStringCommand : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="ReplaceStringCommand"/> class.</summary>
+ public ReplaceStringCommand()
+ : base("Replace String")
+ {
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ IFindReplaceProvider editorFindProvider = HostWindow.ActiveChildForm as IFindReplaceProvider;
+
+ if (editorFindProvider != null)
+ {
+ FindTextRequest req = null;
+ int key = editorFindProvider.GetHashCode();
+
+ // is there a request in the table for this window?
+ if (SearchToolsCommon.FindReplaceTextRequests.ContainsKey(key))
+ {
+ req = SearchToolsCommon.FindReplaceTextRequests[key];
+ }
+
+ if (req != null)
+ {
+ // wrap around to start if at last pos
+ if (req.Position != 0)
+ {
+ req.Position = editorFindProvider.CursorOffset;
+ }
+
+ if (editorFindProvider.ReplaceString(req.ReplaceValue, req.Position - req.SearchValue.Length, req.SearchValue.Length))
+ {
+ CommandManager.GetCommandInstance<FindNextStringCommand>().Execute();
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/Commands/ShowFindTextFormCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/Commands/ShowFindTextFormCommand.cs
new file mode 100644
index 0000000..f27c357
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/Commands/ShowFindTextFormCommand.cs
@@ -0,0 +1,64 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns.SearchTools.Commands
+{
+ /// <summary>The show find text form command.</summary>
+ public class ShowFindTextFormCommand : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="ShowFindTextFormCommand"/> class.</summary>
+ public ShowFindTextFormCommand()
+ : base("&Find Text...")
+ {
+ SmallImage = ImageResource.find;
+ ShortcutKeys = Keys.Control | Keys.F;
+ }
+
+
+ /// <summary>Gets a value indicating whether Enabled.</summary>
+ public override bool Enabled
+ {
+ get { return HostWindow.ActiveChildForm is IFindReplaceProvider; }
+ }
+
+ /// <summary>Gets FindReplaceWindow.</summary>
+ public IFindReplaceWindow FindReplaceWindow { get; private set; }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ if (!Enabled)
+ {
+ return;
+ }
+
+ // if the window is an editor, grab the highlighted text
+ IFindReplaceProvider findReplaceProvider = HostWindow.ActiveChildForm as IFindReplaceProvider;
+
+ if (FindReplaceWindow == null || FindReplaceWindow.IsDisposed)
+ {
+ FindReplaceWindow = new FindReplaceForm(Services);
+ }
+
+ if (findReplaceProvider is IEditor)
+ {
+ FindReplaceWindow.FindString = ((IEditor)findReplaceProvider).SelectedText;
+ }
+
+ FindReplaceWindow.TopMost = true;
+
+ if (!FindReplaceWindow.Visible)
+ {
+ FindReplaceWindow.Show(HostWindow.Instance);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/Commands/ShowGoToLineFormCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/Commands/ShowGoToLineFormCommand.cs
new file mode 100644
index 0000000..88158bd
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/Commands/ShowGoToLineFormCommand.cs
@@ -0,0 +1,40 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns.SearchTools.Commands
+{
+ /// <summary>The show go to line form command.</summary>
+ public class ShowGoToLineFormCommand : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="ShowGoToLineFormCommand"/> class.</summary>
+ public ShowGoToLineFormCommand()
+ : base("Go To Line...")
+ {
+ ShortcutKeys = Keys.Control | Keys.G;
+ }
+
+ /// <summary>Gets a value indicating whether Enabled.</summary>
+ public override bool Enabled
+ {
+ get { return HostWindow.ActiveChildForm is INavigatableDocument; }
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ if (Enabled)
+ {
+ GoToLineForm frm = Services.Resolve<GoToLineForm>();
+ frm.ShowDialog(HostWindow as Form);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/FindReplaceForm.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/FindReplaceForm.cs
new file mode 100644
index 0000000..c0b17ce
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/FindReplaceForm.cs
@@ -0,0 +1,212 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Media;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.PlugIns.SearchTools.Commands;
+
+namespace MiniSqlQuery.PlugIns.SearchTools
+{
+ /// <summary>The find replace form.</summary>
+ public partial class FindReplaceForm : Form, IFindReplaceWindow
+ {
+ /// <summary>The _services.</summary>
+ private readonly IApplicationServices _services;
+
+ /// <summary>Initializes a new instance of the <see cref="FindReplaceForm"/> class.</summary>
+ /// <param name="services">The services.</param>
+ public FindReplaceForm(IApplicationServices services)
+ {
+ InitializeComponent();
+ StartPosition = FormStartPosition.CenterParent;
+ _services = services;
+ }
+
+ /// <summary>Gets or sets FindString.</summary>
+ public string FindString
+ {
+ get { return txtFindString.Text; }
+ set { txtFindString.Text = value; }
+ }
+
+ /// <summary>Gets or sets ReplaceString.</summary>
+ public string ReplaceString
+ {
+ get { return txtReplaceText.Text; }
+ set { txtReplaceText.Text = value; }
+ }
+
+ /// <summary>The create find request.</summary>
+ /// <param name="provider">The provider.</param>
+ /// <param name="findString">The find string.</param>
+ /// <param name="replaceValue">The replace value.</param>
+ private void CreateFindRequest(IFindReplaceProvider provider, string findString, string replaceValue)
+ {
+ int key = provider.GetHashCode();
+ FindTextRequest request;
+
+ if (SearchToolsCommon.FindReplaceTextRequests.ContainsKey(key))
+ {
+ request = SearchToolsCommon.FindReplaceTextRequests[key];
+ if (request.SearchValue != findString)
+ {
+ // reset find text and set the starting position to the current cursor location
+ request.SearchValue = findString;
+ request.ReplaceValue = replaceValue;
+ request.Position = provider.CursorOffset;
+ }
+ }
+ else
+ {
+ request = new FindTextRequest(provider, findString);
+ request.ReplaceValue = replaceValue;
+ }
+
+ SearchToolsCommon.FindReplaceTextRequests[key] = request;
+ }
+
+ /// <summary>The dim form.</summary>
+ private void DimForm()
+ {
+ Opacity = 0.8;
+ }
+
+ /// <summary>The find replace form_ activated.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void FindReplaceForm_Activated(object sender, EventArgs e)
+ {
+ if (txtFindString.Focused | txtReplaceText.Focused)
+ {
+ UnDimForm();
+ }
+ else
+ {
+ DimForm();
+ }
+ }
+
+ /// <summary>The find replace form_ deactivate.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void FindReplaceForm_Deactivate(object sender, EventArgs e)
+ {
+ DimForm();
+ }
+
+ /// <summary>The find replace form_ form closing.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void FindReplaceForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (e.CloseReason == CloseReason.UserClosing)
+ {
+ e.Cancel = true;
+ Hide();
+ }
+ }
+
+ /// <summary>The find replace form_ key up.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void FindReplaceForm_KeyUp(object sender, KeyEventArgs e)
+ {
+ // simulate close
+ if (e.KeyCode == Keys.Escape)
+ {
+ e.Handled = true;
+ Hide();
+ }
+ }
+
+
+ /// <summary>The handle find next.</summary>
+ /// <param name="provider">The provider.</param>
+ /// <param name="findString">The find string.</param>
+ /// <param name="replaceValue">The replace value.</param>
+ private void HandleFindNext(IFindReplaceProvider provider, string findString, string replaceValue)
+ {
+ CreateFindRequest(provider, findString, replaceValue);
+ CommandManager.GetCommandInstance<FindNextStringCommand>().Execute();
+ }
+
+ /// <summary>The handle replace next.</summary>
+ /// <param name="provider">The provider.</param>
+ /// <param name="findString">The find string.</param>
+ /// <param name="replaceValue">The replace value.</param>
+ private void HandleReplaceNext(IFindReplaceProvider provider, string findString, string replaceValue)
+ {
+ CommandManager.GetCommandInstance<ReplaceStringCommand>().Execute();
+ }
+
+ /// <summary>The un dim form.</summary>
+ private void UnDimForm()
+ {
+ Opacity = 1.0;
+ }
+
+ /// <summary>The btn cancel_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void btnCancel_Click(object sender, EventArgs e)
+ {
+ Hide();
+ }
+
+ /// <summary>The btn find next_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void btnFindNext_Click(object sender, EventArgs e)
+ {
+ IFindReplaceProvider provider = _services.HostWindow.ActiveChildForm as IFindReplaceProvider;
+
+ if (provider == null)
+ {
+ SystemSounds.Beep.Play();
+ }
+ else
+ {
+ HandleFindNext(provider, FindString, ReplaceString);
+ }
+ }
+
+ /// <summary>The btn replace_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void btnReplace_Click(object sender, EventArgs e)
+ {
+ IFindReplaceProvider provider = _services.HostWindow.ActiveChildForm as IFindReplaceProvider;
+
+ if (provider == null)
+ {
+ SystemSounds.Beep.Play();
+ }
+ else
+ {
+ HandleReplaceNext(provider, FindString, ReplaceString);
+ }
+ }
+
+ /// <summary>The txt find string_ enter.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void txtFindString_Enter(object sender, EventArgs e)
+ {
+ UnDimForm();
+ }
+
+ /// <summary>The txt find string_ leave.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void txtFindString_Leave(object sender, EventArgs e)
+ {
+ DimForm();
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/FindReplaceForm.designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/FindReplaceForm.designer.cs
new file mode 100644
index 0000000..6d1cb20
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/FindReplaceForm.designer.cs
@@ -0,0 +1,154 @@
+namespace MiniSqlQuery.PlugIns.SearchTools
+{
+ partial class FindReplaceForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.label1 = new System.Windows.Forms.Label();
+ this.txtFindString = new System.Windows.Forms.TextBox();
+ this.btnFindNext = new System.Windows.Forms.Button();
+ this.btnCancel = new System.Windows.Forms.Button();
+ this.txtReplaceText = new System.Windows.Forms.TextBox();
+ this.btnReplace = new System.Windows.Forms.Button();
+ this.label2 = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(12, 15);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(56, 13);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "&Search for";
+ //
+ // txtFindString
+ //
+ this.txtFindString.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtFindString.Location = new System.Drawing.Point(95, 12);
+ this.txtFindString.Name = "txtFindString";
+ this.txtFindString.Size = new System.Drawing.Size(222, 20);
+ this.txtFindString.TabIndex = 1;
+ this.txtFindString.Leave += new System.EventHandler(this.txtFindString_Leave);
+ this.txtFindString.Enter += new System.EventHandler(this.txtFindString_Enter);
+ //
+ // btnFindNext
+ //
+ this.btnFindNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnFindNext.Location = new System.Drawing.Point(161, 64);
+ this.btnFindNext.Name = "btnFindNext";
+ this.btnFindNext.Size = new System.Drawing.Size(75, 23);
+ this.btnFindNext.TabIndex = 10;
+ this.btnFindNext.Text = "&Find Next";
+ this.btnFindNext.UseVisualStyleBackColor = true;
+ this.btnFindNext.Click += new System.EventHandler(this.btnFindNext_Click);
+ //
+ // btnCancel
+ //
+ this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.btnCancel.Location = new System.Drawing.Point(242, 93);
+ this.btnCancel.Name = "btnCancel";
+ this.btnCancel.Size = new System.Drawing.Size(75, 23);
+ this.btnCancel.TabIndex = 12;
+ this.btnCancel.Text = "&Cancel";
+ this.btnCancel.UseVisualStyleBackColor = true;
+ this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+ //
+ // txtReplaceText
+ //
+ this.txtReplaceText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtReplaceText.Location = new System.Drawing.Point(95, 38);
+ this.txtReplaceText.Name = "txtReplaceText";
+ this.txtReplaceText.Size = new System.Drawing.Size(222, 20);
+ this.txtReplaceText.TabIndex = 3;
+ this.txtReplaceText.Leave += new System.EventHandler(this.txtFindString_Leave);
+ this.txtReplaceText.Enter += new System.EventHandler(this.txtFindString_Enter);
+ //
+ // btnReplace
+ //
+ this.btnReplace.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnReplace.Location = new System.Drawing.Point(242, 64);
+ this.btnReplace.Name = "btnReplace";
+ this.btnReplace.Size = new System.Drawing.Size(75, 23);
+ this.btnReplace.TabIndex = 11;
+ this.btnReplace.Text = "&Replace";
+ this.btnReplace.UseVisualStyleBackColor = true;
+ this.btnReplace.Click += new System.EventHandler(this.btnReplace_Click);
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(12, 41);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(69, 13);
+ this.label2.TabIndex = 2;
+ this.label2.Text = "&Replace with";
+ //
+ // FindReplaceForm
+ //
+ this.AcceptButton = this.btnFindNext;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.CancelButton = this.btnCancel;
+ this.ClientSize = new System.Drawing.Size(329, 124);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.btnReplace);
+ this.Controls.Add(this.txtReplaceText);
+ this.Controls.Add(this.btnCancel);
+ this.Controls.Add(this.btnFindNext);
+ this.Controls.Add(this.txtFindString);
+ this.Controls.Add(this.label1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
+ this.MinimumSize = new System.Drawing.Size(320, 110);
+ this.Name = "FindReplaceForm";
+ this.Opacity = 0.8;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Find Text";
+ this.Deactivate += new System.EventHandler(this.FindReplaceForm_Deactivate);
+ this.Activated += new System.EventHandler(this.FindReplaceForm_Activated);
+ this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.FindReplaceForm_KeyUp);
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FindReplaceForm_FormClosing);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox txtFindString;
+ private System.Windows.Forms.Button btnFindNext;
+ private System.Windows.Forms.Button btnCancel;
+ private System.Windows.Forms.TextBox txtReplaceText;
+ private System.Windows.Forms.Button btnReplace;
+ private System.Windows.Forms.Label label2;
+ }
+}
+
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/FindReplaceForm.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/FindReplaceForm.resx
new file mode 100644
index 0000000..19dc0dd
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/FindReplaceForm.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/GoToLineForm.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/GoToLineForm.cs
new file mode 100644
index 0000000..be94bcc
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/GoToLineForm.cs
@@ -0,0 +1,76 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Media;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+
+namespace MiniSqlQuery.PlugIns.SearchTools
+{
+ /// <summary>The go to line form.</summary>
+ public partial class GoToLineForm : Form
+ {
+ /// <summary>The _services.</summary>
+ private readonly IApplicationServices _services;
+
+ /// <summary>Initializes a new instance of the <see cref="GoToLineForm"/> class.</summary>
+ /// <param name="services">The services.</param>
+ public GoToLineForm(IApplicationServices services)
+ {
+ _services = services;
+ InitializeComponent();
+ }
+
+ /// <summary>Gets or sets LineValue.</summary>
+ public string LineValue
+ {
+ get { return txtLine.Text; }
+ set { txtLine.Text = value; }
+ }
+
+ /// <summary>The go to line form_ load.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void GoToLineForm_Load(object sender, EventArgs e)
+ {
+ INavigatableDocument navDoc = _services.HostWindow.ActiveChildForm as INavigatableDocument;
+ if (navDoc != null)
+ {
+ LineValue = (navDoc.CursorLine + 1).ToString();
+ Text = string.Format("{0} (1-{1})", Text, navDoc.TotalLines);
+ }
+ }
+
+ /// <summary>The btn ok_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void btnOk_Click(object sender, EventArgs e)
+ {
+ INavigatableDocument navDoc = _services.HostWindow.ActiveChildForm as INavigatableDocument;
+ if (navDoc != null)
+ {
+ int line;
+
+ if (int.TryParse(LineValue, out line))
+ {
+ int column = 0;
+ line = Math.Abs(line - 1);
+
+ // todo - copy column?
+ if (navDoc.SetCursorByLocation(line, column))
+ {
+ Close();
+ }
+ }
+
+ // otherwise
+ SystemSounds.Beep.Play();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/GoToLineForm.designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/GoToLineForm.designer.cs
new file mode 100644
index 0000000..e1b4401
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/GoToLineForm.designer.cs
@@ -0,0 +1,102 @@
+namespace MiniSqlQuery.PlugIns.SearchTools
+{
+ partial class GoToLineForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.lblLinePrompt = new System.Windows.Forms.Label();
+ this.txtLine = new System.Windows.Forms.TextBox();
+ this.btnOk = new System.Windows.Forms.Button();
+ this.btnCancel = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // lblLinePrompt
+ //
+ this.lblLinePrompt.AutoSize = true;
+ this.lblLinePrompt.Location = new System.Drawing.Point(12, 9);
+ this.lblLinePrompt.Name = "lblLinePrompt";
+ this.lblLinePrompt.Size = new System.Drawing.Size(30, 13);
+ this.lblLinePrompt.TabIndex = 0;
+ this.lblLinePrompt.Text = "&Line:";
+ //
+ // txtLine
+ //
+ this.txtLine.Location = new System.Drawing.Point(12, 25);
+ this.txtLine.Name = "txtLine";
+ this.txtLine.Size = new System.Drawing.Size(300, 20);
+ this.txtLine.TabIndex = 1;
+ //
+ // btnOk
+ //
+ this.btnOk.Location = new System.Drawing.Point(156, 51);
+ this.btnOk.Name = "btnOk";
+ this.btnOk.Size = new System.Drawing.Size(75, 23);
+ this.btnOk.TabIndex = 2;
+ this.btnOk.Text = "OK";
+ this.btnOk.UseVisualStyleBackColor = true;
+ this.btnOk.Click += new System.EventHandler(this.btnOk_Click);
+ //
+ // btnCancel
+ //
+ this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.btnCancel.Location = new System.Drawing.Point(237, 51);
+ this.btnCancel.Name = "btnCancel";
+ this.btnCancel.Size = new System.Drawing.Size(75, 23);
+ this.btnCancel.TabIndex = 3;
+ this.btnCancel.Text = "Cancel";
+ this.btnCancel.UseVisualStyleBackColor = true;
+ //
+ // GoToLineForm
+ //
+ this.AcceptButton = this.btnOk;
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.CancelButton = this.btnCancel;
+ this.ClientSize = new System.Drawing.Size(324, 86);
+ this.Controls.Add(this.btnCancel);
+ this.Controls.Add(this.btnOk);
+ this.Controls.Add(this.txtLine);
+ this.Controls.Add(this.lblLinePrompt);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
+ this.Name = "GoToLineForm";
+ this.Opacity = 0.8;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Go to Line";
+ this.Load += new System.EventHandler(this.GoToLineForm_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label lblLinePrompt;
+ private System.Windows.Forms.TextBox txtLine;
+ private System.Windows.Forms.Button btnOk;
+ private System.Windows.Forms.Button btnCancel;
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/GoToLineForm.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/GoToLineForm.resx
new file mode 100644
index 0000000..19dc0dd
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/GoToLineForm.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/SearchToolsCommon.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/SearchToolsCommon.cs
new file mode 100644
index 0000000..3024e0a
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/SearchToolsCommon.cs
@@ -0,0 +1,25 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.Collections.Generic;
+using MiniSqlQuery.Core;
+
+namespace MiniSqlQuery.PlugIns.SearchTools
+{
+ /// <summary>The search tools common.</summary>
+ public class SearchToolsCommon
+ {
+ /// <summary>The _find text requests.</summary>
+ private static readonly Dictionary<int, FindTextRequest> _findTextRequests = new Dictionary<int, FindTextRequest>();
+
+ /// <summary>Gets FindReplaceTextRequests.</summary>
+ public static Dictionary<int, FindTextRequest> FindReplaceTextRequests
+ {
+ get { return _findTextRequests; }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/SearchToolsLoader.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/SearchToolsLoader.cs
new file mode 100644
index 0000000..80062f4
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/SearchTools/SearchToolsLoader.cs
@@ -0,0 +1,50 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.PlugIns.SearchTools.Commands;
+
+namespace MiniSqlQuery.PlugIns.SearchTools
+{
+ /// <summary>The search tools loader.</summary>
+ public class SearchToolsLoader : PluginLoaderBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="SearchToolsLoader"/> class.</summary>
+ public SearchToolsLoader()
+ : base(
+ "Mini SQL Query Search Tools",
+ "Text searching tools - generic find text tool window.",
+ 50)
+ {
+ }
+
+ /// <summary>Iinitialize the plug in.</summary>
+ public override void InitializePlugIn()
+ {
+ Services.RegisterComponent<GoToLineForm>("GoToLineForm");
+
+ ToolStripMenuItem editMenu = Services.HostWindow.GetMenuItem("edit");
+
+ // add the find to the plugins menu
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ShowFindTextFormCommand>());
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<FindNextStringCommand>());
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ReplaceStringCommand>());
+ editMenu.DropDownItems.Add(CommandControlBuilder.CreateToolStripMenuItem<ShowGoToLineFormCommand>());
+
+ // get the new item and make in invisible - the shortcut key is still available etc ;-)
+ ToolStripItem item = editMenu.DropDownItems["FindNextStringCommandToolStripMenuItem"];
+ item.Visible = false;
+ item = editMenu.DropDownItems["ReplaceStringCommandToolStripMenuItem"];
+ item.Visible = false;
+
+ // append the button the the toolbar items
+ Services.HostWindow.AddToolStripSeperator(null);
+ Services.HostWindow.AddToolStripCommand<ShowFindTextFormCommand>(null);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/Commands/NewQueryByTemplateCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/Commands/NewQueryByTemplateCommand.cs
new file mode 100644
index 0000000..1bb5b26
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/Commands/NewQueryByTemplateCommand.cs
@@ -0,0 +1,31 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer.Commands
+{
+ /// <summary>The new query by template command.</summary>
+ public class NewQueryByTemplateCommand
+ : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="NewQueryByTemplateCommand"/> class.</summary>
+ public NewQueryByTemplateCommand()
+ : base("New &Query from Template")
+ {
+ SmallImage = ImageResource.script_code;
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ ICommand newQueryFormCommand = CommandManager.GetCommandInstance("NewQueryFormCommand");
+ newQueryFormCommand.Execute();
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/Commands/RunTemplateCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/Commands/RunTemplateCommand.cs
new file mode 100644
index 0000000..a915a40
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/Commands/RunTemplateCommand.cs
@@ -0,0 +1,41 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer.Commands
+{
+ /// <summary>The run template command.</summary>
+ public class RunTemplateCommand
+ : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="RunTemplateCommand"/> class.</summary>
+ public RunTemplateCommand()
+ : base("Run Template")
+ {
+ SmallImage = ImageResource.script_code;
+ }
+
+ /// <summary>Gets a value indicating whether Enabled.</summary>
+ public override bool Enabled
+ {
+ get { return HostWindow.ActiveChildForm is ITemplateEditor; }
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ ITemplateEditor templateEditor = HostWindow.ActiveChildForm as ITemplateEditor;
+
+ if (templateEditor != null)
+ {
+ templateEditor.RunTemplate();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/ITemplateEditor.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/ITemplateEditor.cs
new file mode 100644
index 0000000..2b8439d
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/ITemplateEditor.cs
@@ -0,0 +1,18 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+ /// <summary>The i template editor.</summary>
+ public interface ITemplateEditor : IPerformTask
+ {
+ /// <summary>The run template.</summary>
+ void RunTemplate();
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateData.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateData.cs
new file mode 100644
index 0000000..d93e880
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateData.cs
@@ -0,0 +1,201 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+using MiniSqlQuery.Core;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+ /// <summary>The template data.</summary>
+ public class TemplateData : IDisposable
+ {
+ /// <summary>The _data tables.</summary>
+ private readonly Dictionary<string, DataTable> _dataTables = new Dictionary<string, DataTable>();
+
+ /// <summary>The _db connection.</summary>
+ private DbConnection _dbConnection;
+
+ /// <summary>Initializes a new instance of the <see cref="TemplateData"/> class.</summary>
+ /// <param name="services">The services.</param>
+ public TemplateData(IApplicationServices services)
+ {
+ Services = services;
+ }
+
+ /// <summary>Gets Services.</summary>
+ public IApplicationServices Services { get; private set; }
+
+ /// <summary>Helper for getting the value of a row - avoids "get_Item()" usage.</summary>
+ /// <param name="row">The row.</param>
+ /// <param name="columnName">Name of the column.</param>
+ /// <returns>The column value.</returns>
+ public object ColumnValue(DataRow row, string columnName)
+ {
+ return row[columnName];
+ }
+
+ /// <summary>The get.</summary>
+ /// <param name="schema">The schema name.</param>
+ /// <param name="viewOrTableName">The view or table name.</param>
+ /// <returns></returns>
+ public DataTable Get(string schema, string viewOrTableName)
+ {
+ return Get(Utility.RenderSafeSchemaObjectName(schema, viewOrTableName));
+ }
+
+ /// <summary>The get.</summary>
+ /// <param name="viewOrTableName">The view or table name.</param>
+ /// <returns></returns>
+ public DataTable Get(string viewOrTableName)
+ {
+ DbDataAdapter adapter = null;
+ DbCommand cmd = null;
+ DataTable dt = null;
+ QueryBatch batch = new QueryBatch();
+ Query query = new Query("SELECT * FROM " + viewOrTableName);
+
+ if (string.IsNullOrEmpty(viewOrTableName))
+ {
+ return null;
+ }
+
+ if (_dataTables.ContainsKey(viewOrTableName))
+ {
+ return _dataTables[viewOrTableName];
+ }
+
+ try
+ {
+ if (_dbConnection == null || _dbConnection.State != ConnectionState.Open)
+ {
+ _dbConnection = Services.Settings.GetOpenConnection();
+ }
+
+ query.Result = new DataSet(viewOrTableName + " View");
+ batch.Clear();
+ batch.Add(query);
+
+ adapter = Services.Settings.ProviderFactory.CreateDataAdapter();
+ cmd = _dbConnection.CreateCommand();
+ cmd.CommandText = query.Sql;
+ cmd.CommandType = CommandType.Text;
+ adapter.SelectCommand = cmd;
+ adapter.Fill(query.Result);
+ }
+
+ // catch (Exception exp)
+ // {
+ // throw;
+ // }
+ finally
+ {
+ if (adapter != null)
+ {
+ adapter.Dispose();
+ }
+
+ if (cmd != null)
+ {
+ cmd.Dispose();
+ }
+ }
+
+ if (query.Result.Tables.Count > 0)
+ {
+ dt = query.Result.Tables[0];
+ _dataTables[viewOrTableName] = dt;
+ }
+
+ return dt;
+ }
+
+ /// <summary>The query.</summary>
+ /// <param name="sql">The sql.</param>
+ /// <returns></returns>
+ public DataTable Query(string sql)
+ {
+ DbDataAdapter adapter = null;
+ DbCommand cmd = null;
+ DataTable dt = null;
+ QueryBatch batch = new QueryBatch();
+ Query query = new Query(sql);
+
+ if (string.IsNullOrEmpty(sql))
+ {
+ return null;
+ }
+
+ if (_dataTables.ContainsKey(sql))
+ {
+ return _dataTables[sql];
+ }
+
+ try
+ {
+ if (_dbConnection == null || _dbConnection.State != ConnectionState.Open)
+ {
+ _dbConnection = Services.Settings.GetOpenConnection();
+ }
+
+ string dataSetName = sql;
+ query.Result = new DataSet(dataSetName);
+ batch.Clear();
+ batch.Add(query);
+
+ adapter = Services.Settings.ProviderFactory.CreateDataAdapter();
+ cmd = _dbConnection.CreateCommand();
+ cmd.CommandText = query.Sql;
+ cmd.CommandType = CommandType.Text;
+ adapter.SelectCommand = cmd;
+ adapter.Fill(query.Result);
+ }
+
+ // catch (Exception exp)
+ // {
+ // throw;
+ // }
+ finally
+ {
+ if (adapter != null)
+ {
+ adapter.Dispose();
+ }
+
+ if (cmd != null)
+ {
+ cmd.Dispose();
+ }
+ }
+
+ if (query.Result.Tables.Count > 0)
+ {
+ dt = query.Result.Tables[0];
+ _dataTables[sql] = dt;
+ }
+
+ return dt;
+ }
+
+ /// <summary>The dispose.</summary>
+ public void Dispose()
+ {
+ if (_dbConnection != null)
+ {
+ _dbConnection.Dispose();
+ _dbConnection = null;
+ }
+
+ foreach (var dataTable in _dataTables)
+ {
+ dataTable.Value.Dispose();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.cs
new file mode 100644
index 0000000..405680d
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.cs
@@ -0,0 +1,462 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Windows.Forms;
+using ICSharpCode.TextEditor.Document;
+using Microsoft.VisualBasic;
+using MiniSqlQuery.Commands;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+using MiniSqlQuery.Core.Template;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+ /// <summary>The template editor form.</summary>
+ public partial class TemplateEditorForm : DockContent, IEditor, IFindReplaceProvider, INavigatableDocument, ITemplateEditor
+ {
+ /// <summary>The _host window.</summary>
+ private readonly IHostWindow _hostWindow;
+
+ /// <summary>The _services.</summary>
+ private readonly IApplicationServices _services;
+
+ /// <summary>The _file name.</summary>
+ private string _fileName;
+
+ /// <summary>The _highlighting provider loaded.</summary>
+ private bool _highlightingProviderLoaded;
+
+ /// <summary>The _is dirty.</summary>
+ private bool _isDirty;
+
+ /// <summary>The _text find service.</summary>
+ private ITextFindService _textFindService;
+
+ /// <summary>Initializes a new instance of the <see cref="TemplateEditorForm"/> class.</summary>
+ /// <param name="services">The services.</param>
+ /// <param name="hostWindow">The host window.</param>
+ public TemplateEditorForm(IApplicationServices services, IHostWindow hostWindow)
+ {
+ InitializeComponent();
+ txtEdit.Document.DocumentChanged += DocumentDocumentChanged;
+ _services = services;
+ _hostWindow = hostWindow;
+
+ formContextMenuStrip.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<SaveFileCommand>());
+ formContextMenuStrip.Items.Add(CommandControlBuilder.CreateToolStripMenuItemSeparator());
+ formContextMenuStrip.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<CloseActiveWindowCommand>());
+ formContextMenuStrip.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<CloseAllWindowsCommand>());
+ formContextMenuStrip.Items.Add(CommandControlBuilder.CreateToolStripMenuItem<CopyQueryEditorFileNameCommand>());
+
+ CommandControlBuilder.MonitorMenuItemsOpeningForEnabling(formContextMenuStrip);
+ }
+
+ /// <summary>Gets or sets AllText.</summary>
+ public string AllText
+ {
+ get { return txtEdit.Text; }
+ set { txtEdit.Text = value; }
+ }
+
+ /// <summary>Gets a value indicating whether CanReplaceText.</summary>
+ public bool CanReplaceText
+ {
+ get { return true; }
+ }
+
+ /// <summary>Gets or sets CursorColumn.</summary>
+ public int CursorColumn
+ {
+ get { return txtEdit.ActiveTextAreaControl.Caret.Column; }
+ set { txtEdit.ActiveTextAreaControl.Caret.Column = value; }
+ }
+
+ /// <summary>Gets or sets CursorLine.</summary>
+ public int CursorLine
+ {
+ get { return txtEdit.ActiveTextAreaControl.Caret.Line; }
+ set { txtEdit.ActiveTextAreaControl.Caret.Line = value; }
+ }
+
+ /// <summary>Gets CursorOffset.</summary>
+ public int CursorOffset
+ {
+ get { return txtEdit.ActiveTextAreaControl.Caret.Offset; }
+ }
+
+ /// <summary>Gets FileFilter.</summary>
+ public string FileFilter
+ {
+ get { return "Mini SQL Template Files (*.mt)|*.mt|All Files (*.*)|*.*"; }
+ }
+
+ /// <summary>Gets or sets FileName.</summary>
+ public string FileName
+ {
+ get { return _fileName; }
+ set
+ {
+ _fileName = value;
+ Text = FileName;
+ SetTabTextByFilename();
+ }
+ }
+
+ /// <summary>Gets a value indicating whether IsBusy.</summary>
+ public bool IsBusy
+ {
+ get { return false; }
+ }
+
+ /// <summary>Gets or sets a value indicating whether IsDirty.</summary>
+ public bool IsDirty
+ {
+ get { return _isDirty; }
+ set
+ {
+ if (_isDirty != value)
+ {
+ _isDirty = value;
+ SetTabTextByFilename();
+ }
+ }
+ }
+
+ /// <summary>Gets SelectedText.</summary>
+ public string SelectedText
+ {
+ get { return txtEdit.ActiveTextAreaControl.SelectionManager.SelectedText; }
+ }
+
+ /// <summary>Gets TextFindService.</summary>
+ public ITextFindService TextFindService
+ {
+ get
+ {
+ if (_textFindService == null)
+ {
+ _textFindService = _services.Resolve<ITextFindService>();
+ }
+
+ return _textFindService;
+ }
+ }
+
+ /// <summary>Gets TotalLines.</summary>
+ public int TotalLines
+ {
+ get { return txtEdit.Document.TotalNumberOfLines; }
+ }
+
+ /// <summary>The load highlighting provider.</summary>
+ public void LoadHighlightingProvider()
+ {
+ if (_highlightingProviderLoaded)
+ {
+ return;
+ }
+
+ // see: http://wiki.sharpdevelop.net/Syntax%20highlighting.ashx
+ string dir = Path.GetDirectoryName(GetType().Assembly.Location);
+ FileSyntaxModeProvider fsmProvider = new FileSyntaxModeProvider(dir);
+ HighlightingManager.Manager.AddSyntaxModeFileProvider(fsmProvider); // Attach to the text editor.
+ txtEdit.SetHighlighting("NVelocity");
+ _highlightingProviderLoaded = true;
+ }
+
+ /// <summary>The clear selection.</summary>
+ public void ClearSelection()
+ {
+ txtEdit.ActiveTextAreaControl.SelectionManager.ClearSelection();
+ }
+
+ /// <summary>The highlight string.</summary>
+ /// <param name="offset">The offset.</param>
+ /// <param name="length">The length.</param>
+ public void HighlightString(int offset, int length)
+ {
+ if (offset < 0 || length < 1)
+ {
+ return;
+ }
+
+ int endPos = offset + length;
+ txtEdit.ActiveTextAreaControl.SelectionManager.SetSelection(
+ txtEdit.Document.OffsetToPosition(offset),
+ txtEdit.Document.OffsetToPosition(endPos));
+ SetCursorByOffset(endPos);
+ }
+
+ /// <summary>The insert text.</summary>
+ /// <param name="text">The text.</param>
+ public void InsertText(string text)
+ {
+ if (string.IsNullOrEmpty(text))
+ {
+ return;
+ }
+
+ int offset = txtEdit.ActiveTextAreaControl.Caret.Offset;
+
+ // if some text is selected we want to replace it
+ if (txtEdit.ActiveTextAreaControl.SelectionManager.IsSelected(offset))
+ {
+ offset = txtEdit.ActiveTextAreaControl.SelectionManager.SelectionCollection[0].Offset;
+ txtEdit.ActiveTextAreaControl.SelectionManager.RemoveSelectedText();
+ }
+
+ txtEdit.Document.Insert(offset, text);
+ int newOffset = offset + text.Length; // new offset at end of inserted text
+
+ // now reposition the caret if required to be after the inserted text
+ if (CursorOffset != newOffset)
+ {
+ SetCursorByOffset(newOffset);
+ }
+
+ txtEdit.Focus();
+ }
+
+
+ /// <summary>The load file.</summary>
+ public void LoadFile()
+ {
+ txtEdit.LoadFile(FileName);
+ IsDirty = false;
+ }
+
+ /// <summary>The save file.</summary>
+ public void SaveFile()
+ {
+ txtEdit.SaveFile(FileName);
+ IsDirty = false;
+ }
+
+ /// <summary>The set syntax.</summary>
+ /// <param name="name">The name.</param>
+ public void SetSyntax(string name)
+ {
+ LoadHighlightingProvider();
+ txtEdit.SetHighlighting(name);
+ }
+
+ /// <summary>The find string.</summary>
+ /// <param name="value">The value.</param>
+ /// <param name="startIndex">The start index.</param>
+ /// <param name="comparisonType">The comparison type.</param>
+ /// <returns>The find string.</returns>
+ public int FindString(string value, int startIndex, StringComparison comparisonType)
+ {
+ if (string.IsNullOrEmpty(value) || startIndex < 0)
+ {
+ return -1;
+ }
+
+ string text = AllText;
+ int pos = text.IndexOf(value, startIndex, comparisonType);
+ if (pos > -1)
+ {
+ ClearSelection();
+ HighlightString(pos, value.Length);
+ }
+
+ return pos;
+ }
+
+ /// <summary>The replace string.</summary>
+ /// <param name="value">The value.</param>
+ /// <param name="startIndex">The start index.</param>
+ /// <param name="length">The length.</param>
+ /// <returns>The replace string.</returns>
+ public bool ReplaceString(string value, int startIndex, int length)
+ {
+ if (value == null || startIndex < 0 || length < 0)
+ {
+ return false;
+ }
+
+ if ((startIndex + length) > AllText.Length)
+ {
+ return false;
+ }
+
+ txtEdit.Document.Replace(startIndex, length, value);
+
+ return true;
+ }
+
+ /// <summary>The set text find service.</summary>
+ /// <param name="textFindService">The text find service.</param>
+ public void SetTextFindService(ITextFindService textFindService)
+ {
+ // accept nulls infering a reset
+ _textFindService = textFindService;
+ }
+
+ /// <summary>The set cursor by location.</summary>
+ /// <param name="line">The line.</param>
+ /// <param name="column">The column.</param>
+ /// <returns>The set cursor by location.</returns>
+ public bool SetCursorByLocation(int line, int column)
+ {
+ if (line > TotalLines)
+ {
+ return false;
+ }
+
+ txtEdit.ActiveTextAreaControl.Caret.Line = line;
+ txtEdit.ActiveTextAreaControl.Caret.Column = column;
+
+ return true;
+ }
+
+ /// <summary>The set cursor by offset.</summary>
+ /// <param name="offset">The offset.</param>
+ /// <returns>The set cursor by offset.</returns>
+ public bool SetCursorByOffset(int offset)
+ {
+ if (offset >= 0)
+ {
+ txtEdit.ActiveTextAreaControl.Caret.Position = txtEdit.Document.OffsetToPosition(offset);
+ return true;
+ }
+
+ return false;
+ }
+
+ /// <summary>The cancel task.</summary>
+ public void CancelTask()
+ {
+ // N/A
+ }
+
+ /// <summary>The execute task.</summary>
+ public void ExecuteTask()
+ {
+ RunTemplate();
+ }
+
+ /// <summary>The run template.</summary>
+ public void RunTemplate()
+ {
+ TemplateModel templateModel = _services.Resolve<TemplateModel>();
+ TemplateResult templateResult = null;
+ txtErrors.Clear();
+
+ try
+ {
+ string[] lines = AllText.Replace("\r", string.Empty).Split('\n');
+ string text;
+ Dictionary<string, object> items = new Dictionary<string, object>();
+ items[TemplateModel.Extension] = templateModel.InferExtensionFromFilename(FileName, items);
+ text = templateModel.PreProcessTemplate(lines, GetValue, items);
+ templateResult = templateModel.ProcessTemplate(text, items);
+ }
+ catch (TemplateException exp)
+ {
+ _hostWindow.DisplaySimpleMessageBox(this, exp.Message, "Template Error");
+
+ // todo - try to get the line number and move cursor?...
+ txtErrors.Text = exp.Message;
+ }
+
+ if (templateResult != null)
+ {
+ // display in new window
+ IFileEditorResolver resolver = _services.Resolve<IFileEditorResolver>();
+ IEditor editor = _services.Resolve<IEditor>(resolver.ResolveEditorNameByExtension(templateResult.Extension));
+ editor.AllText = templateResult.Text;
+ editor.SetSyntax(templateResult.SyntaxName);
+ _hostWindow.DisplayDockedForm(editor as DockContent);
+ }
+ }
+
+ /// <summary>The document document changed.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void DocumentDocumentChanged(object sender, DocumentEventArgs e)
+ {
+ IsDirty = true;
+ }
+
+ /// <summary>The get value.</summary>
+ /// <param name="name">The name.</param>
+ /// <returns>The get value.</returns>
+ private string GetValue(string name)
+ {
+ string val = Interaction.InputBox(string.Format("Value for '{0}'", name), "Supply a Value", name, -1, -1);
+ return val;
+ }
+
+ /// <summary>The set tab text by filename.</summary>
+ private void SetTabTextByFilename()
+ {
+ string dirty = string.Empty;
+ string text = "Untitled";
+ string tabtext;
+
+ if (_isDirty)
+ {
+ dirty = " *";
+ }
+
+ if (txtEdit.FileName != null)
+ {
+ text = FileName;
+ tabtext = Path.GetFileName(FileName);
+ }
+ else
+ {
+ text += _services.Settings.GetUntitledDocumentCounter();
+ tabtext = text;
+ }
+
+ TabText = tabtext + dirty;
+ ToolTipText = text + dirty;
+ }
+
+ /// <summary>The template editor form_ form closing.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void TemplateEditorForm_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (_isDirty)
+ {
+ DialogResult saveFile = _hostWindow.DisplayMessageBox(
+ this,
+ "Contents changed, do you want to save the file?\r\n" + TabText, "Save Changes?",
+ MessageBoxButtons.YesNoCancel,
+ MessageBoxIcon.Question,
+ MessageBoxDefaultButton.Button1,
+ 0,
+ null,
+ null);
+
+ if (saveFile == DialogResult.Cancel)
+ {
+ e.Cancel = true;
+ }
+ else if (saveFile == DialogResult.Yes)
+ {
+ CommandManager.GetCommandInstance<SaveFileCommand>().Execute();
+ }
+ }
+ }
+
+ /// <summary>The template editor form_ load.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void TemplateEditorForm_Load(object sender, EventArgs e)
+ {
+ rtfHelp.Rtf = TemplateResources.TemplateHelp;
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.Designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.Designer.cs
new file mode 100644
index 0000000..51fb08c
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.Designer.cs
@@ -0,0 +1,170 @@
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+ partial class TemplateEditorForm : ITemplateEditor
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.txtEdit = new ICSharpCode.TextEditor.TextEditorControl();
+ this.tabControl1 = new System.Windows.Forms.TabControl();
+ this.tabPageTemplateSource = new System.Windows.Forms.TabPage();
+ this.tabPageHelp = new System.Windows.Forms.TabPage();
+ this.rtfHelp = new System.Windows.Forms.RichTextBox();
+ this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+ this.txtErrors = new System.Windows.Forms.TextBox();
+ this.formContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.tabControl1.SuspendLayout();
+ this.tabPageTemplateSource.SuspendLayout();
+ this.tabPageHelp.SuspendLayout();
+ this.splitContainer1.Panel1.SuspendLayout();
+ this.splitContainer1.Panel2.SuspendLayout();
+ this.splitContainer1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // txtEdit
+ //
+ this.txtEdit.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.txtEdit.IsReadOnly = false;
+ this.txtEdit.Location = new System.Drawing.Point(3, 3);
+ this.txtEdit.Name = "txtEdit";
+ this.txtEdit.Size = new System.Drawing.Size(533, 314);
+ this.txtEdit.TabIndex = 0;
+ //
+ // tabControl1
+ //
+ this.tabControl1.Controls.Add(this.tabPageTemplateSource);
+ this.tabControl1.Controls.Add(this.tabPageHelp);
+ this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tabControl1.Location = new System.Drawing.Point(0, 0);
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size(547, 346);
+ this.tabControl1.TabIndex = 1;
+ //
+ // tabPageTemplateSource
+ //
+ this.tabPageTemplateSource.Controls.Add(this.txtEdit);
+ this.tabPageTemplateSource.Location = new System.Drawing.Point(4, 22);
+ this.tabPageTemplateSource.Name = "tabPageTemplateSource";
+ this.tabPageTemplateSource.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPageTemplateSource.Size = new System.Drawing.Size(539, 320);
+ this.tabPageTemplateSource.TabIndex = 0;
+ this.tabPageTemplateSource.Text = "Template Source";
+ this.tabPageTemplateSource.UseVisualStyleBackColor = true;
+ //
+ // tabPageHelp
+ //
+ this.tabPageHelp.Controls.Add(this.rtfHelp);
+ this.tabPageHelp.Location = new System.Drawing.Point(4, 22);
+ this.tabPageHelp.Name = "tabPageHelp";
+ this.tabPageHelp.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPageHelp.Size = new System.Drawing.Size(539, 321);
+ this.tabPageHelp.TabIndex = 1;
+ this.tabPageHelp.Text = "Quick Help";
+ this.tabPageHelp.UseVisualStyleBackColor = true;
+ //
+ // rtfHelp
+ //
+ this.rtfHelp.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.rtfHelp.Location = new System.Drawing.Point(3, 3);
+ this.rtfHelp.Name = "rtfHelp";
+ this.rtfHelp.ReadOnly = true;
+ this.rtfHelp.ShowSelectionMargin = true;
+ this.rtfHelp.Size = new System.Drawing.Size(533, 315);
+ this.rtfHelp.TabIndex = 0;
+ this.rtfHelp.Text = "";
+ //
+ // splitContainer1
+ //
+ this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitContainer1.Location = new System.Drawing.Point(4, 4);
+ this.splitContainer1.Name = "splitContainer1";
+ this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
+ //
+ // splitContainer1.Panel1
+ //
+ this.splitContainer1.Panel1.Controls.Add(this.tabControl1);
+ //
+ // splitContainer1.Panel2
+ //
+ this.splitContainer1.Panel2.Controls.Add(this.txtErrors);
+ this.splitContainer1.Size = new System.Drawing.Size(547, 437);
+ this.splitContainer1.SplitterDistance = 346;
+ this.splitContainer1.TabIndex = 2;
+ //
+ // txtErrors
+ //
+ this.txtErrors.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.txtErrors.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.txtErrors.Location = new System.Drawing.Point(0, 0);
+ this.txtErrors.Multiline = true;
+ this.txtErrors.Name = "txtErrors";
+ this.txtErrors.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.txtErrors.Size = new System.Drawing.Size(547, 87);
+ this.txtErrors.TabIndex = 0;
+ //
+ // formContextMenuStrip
+ //
+ this.formContextMenuStrip.Name = "formContextMenuStrip";
+ this.formContextMenuStrip.Size = new System.Drawing.Size(153, 26);
+ //
+ // TemplateEditorForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(555, 445);
+ this.Controls.Add(this.splitContainer1);
+ this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.Name = "TemplateEditorForm";
+ this.Padding = new System.Windows.Forms.Padding(4);
+ this.TabPageContextMenuStrip = this.formContextMenuStrip;
+ this.Text = "TemplateEditorForm";
+ this.Load += new System.EventHandler(this.TemplateEditorForm_Load);
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.TemplateEditorForm_FormClosing);
+ this.tabControl1.ResumeLayout(false);
+ this.tabPageTemplateSource.ResumeLayout(false);
+ this.tabPageHelp.ResumeLayout(false);
+ this.splitContainer1.Panel1.ResumeLayout(false);
+ this.splitContainer1.Panel2.ResumeLayout(false);
+ this.splitContainer1.Panel2.PerformLayout();
+ this.splitContainer1.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private ICSharpCode.TextEditor.TextEditorControl txtEdit;
+ private System.Windows.Forms.TabControl tabControl1;
+ private System.Windows.Forms.TabPage tabPageTemplateSource;
+ private System.Windows.Forms.TabPage tabPageHelp;
+ private System.Windows.Forms.RichTextBox rtfHelp;
+ private System.Windows.Forms.SplitContainer splitContainer1;
+ private System.Windows.Forms.TextBox txtErrors;
+ private System.Windows.Forms.ContextMenuStrip formContextMenuStrip;
+ }
+}
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.resx
new file mode 100644
index 0000000..a4d9552
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateEditorForm.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="formContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+</root>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateHelp.rtf b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateHelp.rtf
new file mode 100644
index 0000000..f8fea0d
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateHelp.rtf
@@ -0,0 +1,449 @@
+{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch37\stshfhich37\stshfbi37\deflang3081\deflangfe3081\themelang3081\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}
+{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial{\*\falt Arial};}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
+{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
+{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}
+{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}
+{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}
+{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}
+{\f288\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}{\f289\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}
+{\f291\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\f292\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}
+{\f293\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}{\f294\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}
+{\f295\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\f296\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}{\f298\fbidi \fswiss\fcharset238\fprq2 Arial CE{\*\falt Arial};}
+{\f299\fbidi \fswiss\fcharset204\fprq2 Arial Cyr{\*\falt Arial};}{\f301\fbidi \fswiss\fcharset161\fprq2 Arial Greek{\*\falt Arial};}{\f302\fbidi \fswiss\fcharset162\fprq2 Arial Tur{\*\falt Arial};}
+{\f303\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew){\*\falt Arial};}{\f304\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic){\*\falt Arial};}{\f305\fbidi \fswiss\fcharset186\fprq2 Arial Baltic{\*\falt Arial};}
+{\f306\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese){\*\falt Arial};}{\f308\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f309\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f311\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}
+{\f312\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f313\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f314\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f315\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}
+{\f316\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f628\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f629\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f631\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}
+{\f632\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f635\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f658\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f659\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
+{\f661\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f662\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f665\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
+{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}
+{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}
+{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}
+{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}
+{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}
+{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}
+{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}
+{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}
+{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}
+{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}
+{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}
+{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}
+{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}
+{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}
+{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}
+{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}
+{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}
+{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}
+{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}
+{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}
+{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}
+{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
+{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
+{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times New Roman};}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times New Roman};}
+{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times New Roman};}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times New Roman};}
+{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times New Roman};}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times New Roman};}
+{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times New Roman};}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times New Roman};}}{\colortbl;\red0\green0\blue0;
+\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;
+\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green100\blue0;\red139\green69\blue19;}{\*\defchp \f37\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1
+\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
+\f37\fs22\lang3081\langfe3081\cgrid\langnp3081\langfenp3081 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\*
+\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
+\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af37\afs22\alang1025 \ltrch\fcs0 \f37\fs22\lang3081\langfe3081\cgrid\langnp3081\langfenp3081 \snext11 \ssemihidden \sunhideused \sqformat Normal Table;}}{\*\listtable
+{\list\listtemplateid1994920380\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
+\fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }
+{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel
+\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23
+\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0
+\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative
+\levelspace360\levelindent0{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid586115817}{\list\listtemplateid1513266810\listhybrid{\listlevel\levelnfc23\levelnfcn23
+\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace3240\levelindent0{\leveltext\leveltemplateid474885214\'01\u-3913 ?;}{\levelnumbers;}\loch\af3\hich\af3\dbch\af0\fbias0\hres0\chhres0 \fi-360\li1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23
+\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace3240\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li-1080\lin-1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\lvltentative\levelspace3240\levelindent0{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li-360\lin-360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\lvltentative\levelspace3240\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li360\lin360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\lvltentative\levelspace3240\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative
+\levelspace3240\levelindent0{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li1800\lin1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace3240
+\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace3240\levelindent0
+{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace3240\levelindent0{\leveltext
+\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li3960\lin3960 }{\listname ;}\listid877427267}{\list\listtemplateid1704463912\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid474885214\'01\u-3913 ?;}{\levelnumbers;}\loch\af3\hich\af3\dbch\af0\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0
+{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
+\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
+\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li7200\lin7200 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid201916417
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li7920\lin7920 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers
+;}\f2\fbias0\hres0\chhres0 \fi-360\li8640\lin8640 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}
+\f10\fbias0\hres0\chhres0 \fi-360\li9360\lin9360 }{\listname ;}\listid1344089321}{\list\listtemplateid748702832\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916417
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419
+\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916417
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419
+\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1431273083}{\list\listtemplateid1223347500\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
+{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916417
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419
+\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1611547526}{\list\listtemplateid1417693332\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
+{\leveltext\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916421\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916417\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
+\leveltemplateid201916419\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916417
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916419
+\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid201916421
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname ;}\listid1768498529}}{\*\listoverridetable{\listoverride\listid1344089321\listoverridecount0\ls1}{\listoverride\listid877427267\listoverridecount0\ls2}
+{\listoverride\listid586115817\listoverridecount0\ls3}{\listoverride\listid1611547526\listoverridecount0\ls4}{\listoverride\listid1431273083\listoverridecount0\ls5}{\listoverride\listid1768498529\listoverridecount0\ls6}}{\*\rsidtbl \rsid939189\rsid3482954
+\rsid4084760\rsid4728322\rsid5655077\rsid9175728\rsid9329129\rsid9330872\rsid9527813\rsid11020037\rsid11871217\rsid11956202\rsid12725751\rsid13640472\rsid13906272\rsid15340299}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0
+\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Paul}{\creatim\yr2009\mo9\dy16\hr16\min42}{\revtim\yr2009\mo10\dy6\hr6\min37}{\version15}{\edmins1569}{\nofpages3}{\nofwords675}{\nofchars4049}{\nofcharsws4715}{\vern32771}}
+{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}{\xmlns2 urn:schemas-microsoft-com:office:smarttags}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect
+\widowctrl\ftnbj\aenddoc\trackmoves1\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\noxlattoyen
+\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\nolnhtadjtbl\viewnobound1\rsidroot5655077 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar
+\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
+\af0\afs22\alang1025 \ltrch\fcs0 \f37\fs22\lang3081\langfe3081\cgrid\langnp3081\langfenp3081 {\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813 Template Help
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+\par Mini SQL Query takes advantage of the }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813\charrsid11020037 NVelocity}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 template engine to transform simple scripts into SQL scripts, C#}{
+\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9330872 /VB}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+ code, HTML mark-up or any other type of text output. The scripts have access to the database model making it a simple yet powerful tool}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9330872
+. It is also possible to get user input for variables or import references to plug}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid12725751 -}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9330872 ins}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0
+\f1\fs20\insrsid12725751 for execution}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 . The following examples use the }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \i\f1\fs20\insrsid9527813\charrsid11020037 Northwind SQL Compact Edition}{
+\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 sample database.
+\par
+\par }{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813 Pre-Processor Directives
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+\par A Pre-processor directive is Mini SQL Query specific and start with \'93#@\'94. They are:
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\tx720\wrapdefault\faauto\ls6\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 #@get <}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \i\f2\fs20\insrsid9527813\charrsid15340299 variable}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 >}{
+\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 (used to prompt the user for a value, currently just text)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls6\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 #@set <}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \i\f2\fs20\insrsid9527813\charrsid15340299 property}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 > <}{
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \i\f2\fs20\insrsid9527813\charrsid15340299 value}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 >}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 (currently just \'93extension
+\'94)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid4728322\charrsid4728322 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4728322\charrsid4728322 #@import-plugin}{\rtlch\fcs1
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322 <plugin-type-name>
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+\par }{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813 Directives
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+\par Template directives are signalled with a hash (#) and are pure NVelocity syntax. Some directives are:
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\tx720\wrapdefault\faauto\ls5\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 foreach}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 / }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 end}{\rtlch\fcs1 \af1\afs20
+\ltrch\fcs0 \f1\fs20\insrsid9527813
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\wrapdefault\faauto\ls5\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 set
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 if / }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\insrsid9527813\charrsid15340299 ifelse}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 / }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 else}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+ / }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 end}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+\par Other more advanced directives include:
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\tx720\wrapdefault\faauto\ls5\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 macro
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\tx720\wrapdefault\faauto\ls5\rin0\lin720\itap0\pararsid15340299 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813\charrsid15340299 include
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+\par }{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813 Built in Variables
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+\par Variables are de-referenced with the format $\{}{\rtlch\fcs1 \ai\af1\afs20 \ltrch\fcs0 \i\f1\fs20\insrsid9527813 varable-name}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 \}
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid9329129 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 The following variables are built in}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129 .
+\par
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\i\f1\fs20\insrsid9329129 $\{}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\i\f1\fs20\insrsid9329129\charrsid9329129 Host}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\i\f1\fs20\insrsid9329129 \}}{\rtlch\fcs1 \af1\afs20
+\ltrch\fcs0 \b\i\f1\fs20\insrsid9329129\charrsid9329129
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129 The host variable allows access to several helper functions and data, most notably the \'93Model\'94. The model is t
+he database schema of the current connection. The model contains collections of tables and views with their respective columns. }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11871217 Each column has the}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0
+\f1\fs20\insrsid13640472 primary/unique key and}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11871217 type information}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13640472 . I}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11871217
+f supported by the schema service of that database }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13640472 the column }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11871217 will contain foreign key information.}{\rtlch\fcs1 \af1\afs20
+\ltrch\fcs0 \f1\fs20\insrsid9329129
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13640472 The \'93Model\'94 hierarchy is below:
+\par }\pard \ltrpar\ql \fi-360\li1440\ri0\nowidctlpar\tx1440\wrapdefault\faauto\rin0\lin1440\itap0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813 o\tab }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 Model
+\par }\pard \ltrpar\ql \fi-360\li2160\ri0\nowidctlpar\tx2160\wrapdefault\faauto\rin0\lin2160\itap0 {\rtlch\fcs1 \af10\afs20 \ltrch\fcs0 \f10\fs20\insrsid9527813 \'a7\tab }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 Tables (list)
+\par }\pard \ltrpar\ql \fi-360\li2880\ri0\nowidctlpar\tx2880\wrapdefault\faauto\rin0\lin2880\itap0 {\rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813 \'b7\tab }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 Schema (e.g. "dbo")
+\par }\pard \ltrpar\ql \fi-360\li2880\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin2880\itap0 {\rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813 \'b7\tab }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 Name (e.g. "User")
+\par }{\rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813 \'b7\tab }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 FullName (e.g. "dbo.User")
+\par }{\rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813 \'b7\tab }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 Columns (list)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid9527813 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li3600\ri0\nowidctlpar\tx3600\wrapdefault\faauto\ls1\rin0\lin3600\itap0\pararsid5655077 {\rtlch\fcs1
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 Name (e.g. "int")
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077\charrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5655077\charrsid5655077 Nullable}{\rtlch\fcs1 \af1\afs20
+\ltrch\fcs0 \f1\fs20\insrsid5655077
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid9175728\charrsid9175728 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728\charrsid9175728 DbType}{\rtlch\fcs1 \af1\afs20
+\ltrch\fcs0 \f1\fs20\insrsid9175728
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9329129 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar\ql \fi-360\li4320\ri0\nowidctlpar\tx3600\wrapdefault\faauto\ls1\ilvl1\rin0\lin4320\itap0\pararsid9329129 {\rtlch\fcs1
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129 Name
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9329129 \hich\af2\dbch\af0\loch\f2 o\tab}Summary (renders the type with respect to Length)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9329129 \hich\af2\dbch\af0\loch\f2 o\tab}Length
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9329129\charrsid9329129 \hich\af2\dbch\af0\loch\f2 o\tab}}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129\charrsid9329129 Precision}{\rtlch\fcs1 \af1\afs20
+\ltrch\fcs0 \f1\fs20\insrsid9329129
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9329129 \hich\af2\dbch\af0\loch\f2 o\tab}Scale
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9329129 \hich\af2\dbch\af0\loch\f2 o\tab}SystemType (the .Net type, e.g. System.String)}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129\charrsid9329129
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li3600\ri0\nowidctlpar\tx3600\wrapdefault\faauto\ls1\rin0\lin3600\itap0\pararsid5655077 {\rtlch\fcs1
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5655077 IsKey
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}IsUnique
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}IsRowVersion (e.g. a Timestamp column)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}IsIdentity
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}IsAutoIncrement
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}IsReadOnly (e.g. a auto increment or timestamp column)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}IsWritable
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}HasFK (true if the column references another table)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid5655077\charrsid5655077 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5655077\charrsid5655077 ForeignKeyReference}{\rtlch\fcs1
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728 (applicable if HasFK is true)}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5655077
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9175728\charrsid9175728 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar\ql \fi-360\li4320\ri0\nowidctlpar
+\tx3600\wrapdefault\faauto\ls1\ilvl1\rin0\lin4320\itap0\pararsid5655077 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728\charrsid9175728 ConstraintName}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid5655077
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9175728\charrsid9175728 \hich\af2\dbch\af0\loch\f2 o\tab}}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728\charrsid9175728 ReferenceTable}{\rtlch\fcs1 \af1\afs20
+\ltrch\fcs0 \f1\fs20\insrsid9175728
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f10\fs20\insrsid9175728 \loch\af10\dbch\af0\hich\f10 \'a7\tab}}\pard \ltrpar\ql \fi-360\li5040\ri0\nowidctlpar\tx3600\wrapdefault\faauto\ls1\ilvl2\rin0\lin5040\itap0\pararsid9175728 {
+\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728 FullName etc (as Table)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f2\fs20\insrsid9175728\charrsid9175728 \hich\af2\dbch\af0\loch\f2 o\tab}}\pard \ltrpar\ql \fi-360\li4320\ri0\nowidctlpar
+\tx3600\wrapdefault\faauto\ls1\ilvl1\rin0\lin4320\itap0\pararsid9175728 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728\charrsid9175728 ReferenceColumn}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f10\fs20\insrsid9175728 \loch\af10\dbch\af0\hich\f10 \'a7\tab}}\pard \ltrpar\ql \fi-360\li5040\ri0\nowidctlpar\tx3600\wrapdefault\faauto\ls1\ilvl2\rin0\lin5040\itap0\pararsid9329129 {
+\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9175728 Name etc (as Column)}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\tx3600\wrapdefault\faauto\rin0\lin0\itap0\pararsid9329129 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid3482954
+\par There is also a \'93Views\'94 list with the same objects available for scripting.}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid3482954
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13640472 Other \'93Host\'94 functions are:
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid13640472\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\tx709\wrapdefault\faauto\ls5\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid13640472\charrsid15340299 MachineName
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid13640472\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}UserName
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid13640472\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\nowidctlpar\tx709\wrapdefault\faauto\ls3\rin0\lin720\itap0\pararsid9527813 {
+\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid13640472\charrsid15340299 Date(format)}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813 \endash where format is something like \'93d MMM yyyy\'94 or \'93dd/MM/yy\'94 etc}{\rtlch\fcs1
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13640472
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid939189\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid939189\charrsid15340299 ToPascalCase(text)}{\rtlch\fcs1
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid939189 \endash converts \'93user_name\'94 to \'93UserName\'94 for example}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid3482954
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f3\fs20\insrsid939189\charrsid15340299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid939189\charrsid15340299 ToCamelCase(text)}{\rtlch\fcs1
+\af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid939189 \endash converts \'93FirstName\'94 to \'93firstName\'94 for example
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f3\fs20\insrsid939189 \loch\af3\dbch\af0\hich\f3 \'b7\tab}(if you want more email me or better yet send a patch for the \'93}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0
+\f1\fs20\insrsid939189\charrsid939189 TemplateHost}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid939189 \'94 class!)
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\tx3600\wrapdefault\faauto\rin0\lin0\itap0\pararsid9329129 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13640472
+\par }\pard \ltrpar\ql \li3600\ri0\nowidctlpar\tx3600\wrapdefault\faauto\rin0\lin3600\itap0\pararsid9329129 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9329129\charrsid9329129
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid939189 Sample - All Table Names}{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+\par }\pard \ltrpar\ql \li720\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid9527813 #foreach }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid9527813 ($table in }{\rtlch\fcs1
+\af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid9527813 $\{Host.Model.Tables\}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid9527813 )
+\par Table: }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid9527813 $\{table.Name\}
+\par }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid9527813 #end
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+\par Sample Output:
+\par
+\par }\pard \ltrpar\ql \li720\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9527813 Table: Categories
+\par Table: Customers
+\par Table: Employees
+\par Table: Order Details
+\par Table: Orders
+\par Table: Products
+\par Table: Shippers
+\par Table: Suppliers
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid9527813
+\par
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid13906272\charrsid13906272 Sample - CSharp Model.cs}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid9527813\charrsid13906272
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13906272
+\par A simple script to produce a C# class for each table:
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13906272\charrsid13906272
+\par }\pard \ltrpar\ql \li720\ri0\widctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid13906272 {\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid13906272 #foreach }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid13906272
+($table in $Host.Model.Tables)
+\par public class }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid13906272 $\{table.Name\}
+\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid13906272 \{
+\par }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid13906272 #foreach }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid13906272 ($c in $table.Columns)
+\par \tab public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid13906272 $\{c.DbType.SystemType\} $\{Host.ToPascalCase($c.Name)\} }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid13906272 \{ get; set; \}
+\par }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid13906272 #end
+\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid13906272 \}
+\par }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid13906272 #end
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13906272
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid13906272 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13906272 Sample Output:
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid13906272
+\par }\pard \ltrpar\ql \li720\ri0\widctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid4084760 {\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf6\insrsid4084760 class }{\rtlch\fcs1
+\af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 Categories
+\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 Int32 CategoryID }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String CategoryName }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String Description }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 Byte}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 [] }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 Picture }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{
+}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; \}
+\par \}
+\par }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf6\insrsid4084760 class }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 Customers
+\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String CustomerID }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String CompanyName }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String ContactName }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String ContactTitle }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String Address }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 {\*\xmlopen\xmlns2{\factoidname PlaceName}}{\*\xmlopen\xmlns2{\factoidname place}}System}{\rtlch\fcs1
+\af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String{\*\xmlclose} {\*\xmlopen\xmlns2{\factoidname PlaceType}}City{\*\xmlclose}{\*\xmlclose} }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1
+\af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String Region }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String PostalCode }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String Country }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String Phone }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf17\insrsid4084760 ; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \tab }{\rtlch\fcs1 \ab\af2\afs20 \ltrch\fcs0 \b\f2\fs20\cf2\insrsid4084760 public }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 System}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 .}{\rtlch\fcs1 \af2\afs20
+\ltrch\fcs0 \f2\fs20\cf1\insrsid4084760 String Fax }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 \{ }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 get}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760
+; }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf18\insrsid4084760 set}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf17\insrsid4084760 ; \}
+\par \}
+\par }\pard \ltrpar\ql \li720\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid4084760 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4084760 ...
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4084760
+\par
+\par
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \b\f1\fs20\insrsid11956202\charrsid4728322 Sample - Plugin Access.txt
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11956202
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322 You can import a plug-in to the script using it\rquote s fully qualified type name and access the properties and methods for that plug-in. Note that the name of the plug-in variable
+in the template has the dots replaced with underscores (i.e. \'93}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322\charrsid4728322 MiniSqlQuery.PlugIns.CoreApplicationPlugIn}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322 \'94
+ has a variable name of \'93}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322\charrsid4728322 MiniSqlQuery_PlugIns_CoreApplicationPlugIn}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322 \'94)
+\par
+\par }\pard \ltrpar\ql \li720\ri0\widctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid11956202 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid11956202 #@import-plugin MiniSqlQuery.PlugIns.CoreApplicationPlugIn
+\par
+\par \\}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid11956202 $\{MiniSqlQuery_PlugIns_CoreApplicationPlugIn.PluginName\}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid11956202 :
+\par "}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid11956202 $\{MiniSqlQuery_PlugIns_CoreApplicationPlugIn.PluginName\}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid11956202 "
+\par \\}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid11956202 $\{MiniSqlQuery_PlugIns_CoreApplicationPlugIn.PluginDescription\}
+\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid11956202 "}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf2\insrsid11956202 $\{MiniSqlQuery_PlugIns_CoreApplicationPlugIn.PluginDescription\}}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0
+\f2\fs20\cf1\insrsid11956202 "
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11956202
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4728322 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid4728322 Sample Output:
+\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid11956202
+\par }\pard \ltrpar\ql \li720\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid4728322 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4728322\charrsid4728322 $\{MiniSqlQuery_PlugIns_CoreApplicationPlugIn.PluginName\}:
+\par "Mini SQL Query Core"
+\par $\{MiniSqlQuery_PlugIns_CoreApplicationPlugIn.PluginDescription\}
+\par "Plugin to setup the core features of Mini SQL Query."}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid11956202\charrsid4728322
+\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8
+72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7
+2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b
+44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7
+065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000
+00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08
+84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc
+52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353
+bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468
+656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c
+070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7
+29e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f7468656d65
+312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87615b8116d8
+a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad79482a9c04
+98f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b5d8a314d3c
+94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab999fb7b471
+7509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9699640f671
+9e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd5868b37a088d1
+e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d60cf03ac1a5
+193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f9e7ef3f2d1
+17d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be15c308d3f2
+8acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a99793849c26ae6
+6252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d32a423279a
+668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2af074481847
+bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86e877f0034e
+16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb44f95d843b
+5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a6409fb44d0
+8741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c3d9058edf2
+c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db02565e85f3b966
+0d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276b9f7dec44b
+7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8c33585b5fb
+9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e51440ca2e0
+088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95b21be5ceaf
+8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff6dce591a26
+ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec69ffb9e65d0
+28d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239b75a5bb1e6
+345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a44959d366ad93
+b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e82db8df9f30
+254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f74
+68656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f24
+51eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198
+720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528
+a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c0200001300000000000000000000000000
+000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000
+002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000140200007468
+656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b000016000000000000000000
+00000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b010000270000000000
+00000000000000009b0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000960a00000000}
+{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
+617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
+6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
+656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
+{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 Normal;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 heading 1;\lsdqformat1 \lsdpriority0 heading 2;\lsdqformat1 \lsdpriority0 heading 3;\lsdqformat1 \lsdpriority0 heading 4;\lsdqformat1 \lsdpriority0 heading 5;\lsdqformat1 \lsdpriority0 heading 6;
+\lsdqformat1 \lsdpriority0 heading 7;\lsdqformat1 \lsdpriority0 heading 8;\lsdqformat1 \lsdpriority0 heading 9;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 2;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 6;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 7;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 8;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 toc 9;\lsdqformat1 \lsdpriority0 caption;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 Title;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 Default Paragraph Font;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 Subtitle;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdpriority0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;
+\lsdunhideused0 \lsdlocked0 Revision;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;
+\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;
+\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;
+\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000
+d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f0000000000000000000000003053
+7f9ffb45ca01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000105000000000000}}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateHost.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateHost.cs
new file mode 100644
index 0000000..f699214
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateHost.cs
@@ -0,0 +1,155 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Globalization;
+using System.Text;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+ /// <summary>The template host.</summary>
+ public class TemplateHost : IDisposable
+ {
+ /// <summary>The _database inspector.</summary>
+ private readonly IDatabaseInspector _databaseInspector;
+
+ private TemplateData _data;
+
+ /// <summary>Initializes a new instance of the <see cref="TemplateHost"/> class.</summary>
+ /// <param name="applicationServices">The application services.</param>
+ /// <param name="databaseInspector">The database inspector.</param>
+ public TemplateHost(IApplicationServices applicationServices, IDatabaseInspector databaseInspector)
+ {
+ Services = applicationServices;
+ _databaseInspector = databaseInspector;
+ }
+
+ /// <summary>Gets or sets Data.</summary>
+ public TemplateData Data
+ {
+ get
+ {
+ if (_data == null)
+ {
+ _data = Services.Resolve<TemplateData>();
+ }
+ return _data;
+ }
+ set { _data = value; }
+ }
+
+ /// <summary>Gets MachineName.</summary>
+ public string MachineName
+ {
+ get { return Environment.MachineName; }
+ }
+
+ /// <summary>Gets Model.</summary>
+ public DbModelInstance Model
+ {
+ get
+ {
+ if (_databaseInspector.DbSchema == null)
+ {
+ _databaseInspector.LoadDatabaseDetails();
+ }
+
+ return _databaseInspector.DbSchema;
+ }
+ }
+
+ /// <summary>Gets Services.</summary>
+ public IApplicationServices Services { get; private set; }
+
+ /// <summary>Gets UserName.</summary>
+ public string UserName
+ {
+ get { return Environment.UserName; }
+ }
+
+ // to do - helper functions for changing names too code friendly etc
+
+ /// <summary>The date.</summary>
+ /// <param name="format">The format.</param>
+ /// <returns>The date.</returns>
+ public string Date(string format)
+ {
+ return DateTime.Now.ToString(format);
+ }
+
+ /// <summary>The to camel case.</summary>
+ /// <param name="text">The text.</param>
+ /// <returns>The to camel case.</returns>
+ public string ToCamelCase(string text)
+ {
+ if (text == null)
+ {
+ return string.Empty;
+ }
+
+ StringBuilder sb = new StringBuilder();
+ text = ToPascalCase(text);
+
+ for (int i = 0; i < text.Length; i++)
+ {
+ if (Char.IsUpper(text, i))
+ {
+ sb.Append(Char.ToLower(text[i]));
+ }
+ else
+ {
+ // allows for names that start with an acronym, e.g. "ABCCode" -> "abcCode"
+ if (i > 1)
+ {
+ i--; // reverse one
+ sb.Remove(i, 1); // drop last lower cased char
+ }
+
+ sb.Append(text.Substring(i));
+ break;
+ }
+ }
+
+ return sb.ToString();
+ }
+
+ /// <summary>The to pascal case.</summary>
+ /// <param name="text">The text.</param>
+ /// <returns>The to pascal case.</returns>
+ public string ToPascalCase(string text)
+ {
+ if (text == null)
+ {
+ return string.Empty;
+ }
+
+ if (text.Contains(" ") || text.Contains("_"))
+ {
+ text = text.Replace("_", " ");
+ text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text);
+ text = text.Replace(" ", string.Empty);
+ }
+ else if (text.Length > 1)
+ {
+ text = char.ToUpper(text[0]) + text.Substring(1);
+ }
+
+ return text;
+ }
+
+ /// <summary>The dispose.</summary>
+ public void Dispose()
+ {
+ if (Data != null)
+ {
+ Data.Dispose();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateModel.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateModel.cs
new file mode 100644
index 0000000..b1a1324
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateModel.cs
@@ -0,0 +1,202 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Template;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+ /// <summary>The template model.</summary>
+ public class TemplateModel
+ {
+ /// <summary>The extension.</summary>
+ public const string Extension = "extension";
+
+ /// <summary>The _formatter.</summary>
+ private readonly ITextFormatter _formatter;
+
+ /// <summary>The _services.</summary>
+ private readonly IApplicationServices _services;
+
+ /// <summary>Initializes a new instance of the <see cref="TemplateModel"/> class.</summary>
+ /// <param name="services">The services.</param>
+ /// <param name="formatter">The formatter.</param>
+ public TemplateModel(IApplicationServices services, ITextFormatter formatter)
+ {
+ _services = services;
+ _formatter = formatter;
+ }
+
+ /// <summary>The get value for parameter.</summary>
+ /// <param name="parameter">The parameter.</param>
+ public delegate string GetValueForParameter(string parameter);
+
+ /// <summary>The create nodes.</summary>
+ /// <returns></returns>
+ public TreeNode[] CreateNodes()
+ {
+ string path = GetTemplatePath();
+ return CreateNodes(path, GetFilesForFolder(path));
+ }
+
+ /// <summary>The create nodes.</summary>
+ /// <param name="rootPath">The root path.</param>
+ /// <param name="files">The files.</param>
+ /// <returns></returns>
+ public TreeNode[] CreateNodes(string rootPath, string[] files)
+ {
+ List<TreeNode> nodes = new List<TreeNode>();
+
+ foreach (string file in files)
+ {
+ if (file.StartsWith(rootPath))
+ {
+ FileInfo fi = new FileInfo(file);
+
+ TreeNode node = new TreeNode(Path.GetFileNameWithoutExtension(fi.FullName));
+ node.ImageKey = "script_code";
+ node.SelectedImageKey = "script_code";
+ node.Tag = fi; // store file info on tag
+ node.ToolTipText = fi.FullName;
+
+ nodes.Add(node);
+ }
+ }
+
+ return nodes.ToArray();
+ }
+
+ /// <summary>The get files for folder.</summary>
+ /// <param name="path">The path.</param>
+ /// <returns></returns>
+ public string[] GetFilesForFolder(string path)
+ {
+ return Directory.GetFiles(path, "*.mt", SearchOption.TopDirectoryOnly);
+ }
+
+ /// <summary>The get template path.</summary>
+ /// <returns>The get template path.</returns>
+ public string GetTemplatePath()
+ {
+ string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+ path = Path.Combine(path, TemplateResources.TemplatesDirectoryName);
+
+ return path;
+ }
+
+ /// <summary>The infer extension from filename.</summary>
+ /// <param name="filename">The filename.</param>
+ /// <param name="items">The items.</param>
+ /// <returns>The infer extension from filename.</returns>
+ public string InferExtensionFromFilename(string filename, Dictionary<string, object> items)
+ {
+ string ext = Path.GetExtension(filename);
+ string templateFilename = Path.GetFileNameWithoutExtension(filename);
+ if (ext.ToLower() == ".mt" && templateFilename.Contains("."))
+ {
+ return Path.GetExtension(templateFilename).Substring(1);
+ }
+
+ // default
+ return "sql";
+ }
+
+ /// <summary>The pre process template.</summary>
+ /// <param name="lines">The lines.</param>
+ /// <param name="getValueForParameter">The get value for parameter.</param>
+ /// <param name="items">The items.</param>
+ /// <returns>The pre process template.</returns>
+ public string PreProcessTemplate(
+ string[] lines,
+ GetValueForParameter getValueForParameter,
+ Dictionary<string, object> items)
+ {
+ int i = 0;
+ for (; i < lines.Length; i++)
+ {
+ string line = lines[i];
+ if (line.StartsWith("#@"))
+ {
+ // process cmd
+ if (line.StartsWith("#@get ", StringComparison.CurrentCultureIgnoreCase))
+ {
+ string name = line.Substring("#@get ".Length);
+ string val = getValueForParameter(name);
+ items.Add(name, val);
+ }
+ else if (line.StartsWith("#@set extension ", StringComparison.CurrentCultureIgnoreCase))
+ {
+ items[Extension] = line.Substring("#@set extension ".Length);
+ }
+ else if (line.StartsWith("#@import-plugin ", StringComparison.CurrentCultureIgnoreCase))
+ {
+ string pluginKeyName = line.Substring("#@import-plugin ".Length);
+ items[pluginKeyName.Replace(".", "_")] = _services.Resolve<IPlugIn>(pluginKeyName);
+ }
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ string text = string.Join(Environment.NewLine, lines, i, lines.Length - i);
+
+ return text;
+ }
+
+ /// <summary>The process template.</summary>
+ /// <param name="text">The text.</param>
+ /// <param name="items">The items.</param>
+ /// <returns></returns>
+ public TemplateResult ProcessTemplate(string text, Dictionary<string, object> items)
+ {
+ if (items == null)
+ {
+ items = new Dictionary<string, object>();
+ }
+
+ TemplateResult result;
+
+ using (TemplateHost host = _services.Resolve<TemplateHost>())
+ {
+ items.Add("Host", host);
+ items.Add("Data", host.Data);
+
+ result = new TemplateResult();
+ result.Text = _formatter.Format(text, items);
+ result.Extension = "sql";
+ if (items.ContainsKey(Extension))
+ {
+ result.Extension = (string)items[Extension];
+ }
+ }
+
+ return result;
+ }
+
+ /// <summary>The process template file.</summary>
+ /// <param name="filename">The filename.</param>
+ /// <param name="getValueForParameter">The get value for parameter.</param>
+ /// <returns></returns>
+ public TemplateResult ProcessTemplateFile(string filename, GetValueForParameter getValueForParameter)
+ {
+ Dictionary<string, object> items = new Dictionary<string, object>();
+ string[] lines = File.ReadAllLines(filename);
+
+ items[Extension] = InferExtensionFromFilename(filename, items);
+
+ string text = PreProcessTemplate(lines, getValueForParameter, items);
+ return ProcessTemplate(text, items);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResources.Designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResources.Designer.cs
new file mode 100644
index 0000000..8f33b18
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResources.Designer.cs
@@ -0,0 +1,82 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer {
+ using System;
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class TemplateResources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal TemplateResources() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MiniSqlQuery.PlugIns.TemplateViewer.TemplateResources", typeof(TemplateResources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to {\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch37\stshfhich37\stshfbi37\deflang3081\deflangfe3081\themelang3081\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}
+ ///{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial{\*\falt Arial};}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 0505010201070602 [rest of string was truncated]";.
+ /// </summary>
+ internal static string TemplateHelp {
+ get {
+ return ResourceManager.GetString("TemplateHelp", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Templates.
+ /// </summary>
+ internal static string TemplatesDirectoryName {
+ get {
+ return ResourceManager.GetString("TemplatesDirectoryName", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResources.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResources.resx
new file mode 100644
index 0000000..55c706a
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResources.resx
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+ <data name="TemplateHelp" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>templatehelp.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
+ </data>
+ <data name="TemplatesDirectoryName" xml:space="preserve">
+ <value>Templates</value>
+ </data>
+</root>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResult.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResult.cs
new file mode 100644
index 0000000..bd525b6
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateResult.cs
@@ -0,0 +1,67 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+ /// <summary>The template result.</summary>
+ public class TemplateResult
+ {
+ /// <summary>Gets or sets Extension.</summary>
+ public string Extension { get; set; }
+
+ /// <summary>
+ /// Converts the <see cref="Extension"/> to an Editor "Syntax Name" such as "C#".
+ /// </summary>
+ public string SyntaxName
+ {
+ get
+ {
+ string ext = Extension ?? string.Empty;
+ switch (ext.ToLower())
+ {
+ case "bat":
+ case "boo":
+ case "coco":
+ case "java":
+ case "patch":
+ case "php":
+ case "tex":
+ case "xml":
+ case "sql":
+ case "txt":
+ return Extension;
+
+ case "asp":
+ case "aspx":
+ case "htm":
+ case "html":
+ return "ASP/XHTML";
+
+ case "vb":
+ return "VBNET";
+
+ case "js":
+ return "JavaScript";
+
+ case "cpp":
+ case "cxx":
+ return "C++.NET";
+
+ case "cs":
+ return "C#";
+
+ default:
+ return string.Empty;
+ }
+ }
+ }
+
+ /// <summary>Gets or sets Text.</summary>
+ public string Text { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewerLoader.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewerLoader.cs
new file mode 100644
index 0000000..8d56921
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewerLoader.cs
@@ -0,0 +1,35 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+using MiniSqlQuery.PlugIns.TemplateViewer.Commands;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+ /// <summary>The template viewer loader.</summary>
+ public class TemplateViewerLoader : PluginLoaderBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="TemplateViewerLoader"/> class.</summary>
+ public TemplateViewerLoader()
+ : base("Template Viewer", "A Mini SQL Query Plugin for displaying template SQL items.", 50)
+ {
+ }
+
+ /// <summary>Iinitialize the plug in.</summary>
+ public override void InitializePlugIn()
+ {
+ Services.RegisterEditor<TemplateEditorForm>(new FileEditorDescriptor("Template Editor", "mt-editor", "mt"));
+ Services.RegisterComponent<TemplateHost>("TemplateHost");
+ Services.RegisterComponent<TemplateData>("TemplateData");
+
+ Services.RegisterComponent<TemplateViewForm>("TemplateViewForm");
+ Services.HostWindow.AddPluginCommand<RunTemplateCommand>();
+ Services.HostWindow.ShowToolWindow(Services.Resolve<TemplateViewForm>(), DockState.DockLeft);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.cs
new file mode 100644
index 0000000..a2f45a8
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.cs
@@ -0,0 +1,152 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.IO;
+using System.Windows.Forms;
+using Microsoft.VisualBasic;
+using MiniSqlQuery.Core;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+ /// <summary>The template view form.</summary>
+ public partial class TemplateViewForm : DockContent
+ {
+ /// <summary>The _model.</summary>
+ private readonly TemplateModel _model;
+
+ /// <summary>The _services.</summary>
+ private readonly IApplicationServices _services;
+
+ /// <summary>The _selected file.</summary>
+ private FileInfo _selectedFile;
+
+ /// <summary>Initializes a new instance of the <see cref="TemplateViewForm"/> class.</summary>
+ /// <param name="services">The services.</param>
+ /// <param name="model">The model.</param>
+ public TemplateViewForm(IApplicationServices services, TemplateModel model)
+ {
+ InitializeComponent();
+ _services = services;
+ _model = model;
+ }
+
+ /// <summary>The get value.</summary>
+ /// <param name="name">The name.</param>
+ /// <returns>The get value.</returns>
+ private string GetValue(string name)
+ {
+ string val = Interaction.InputBox(string.Format("Value for '{0}'", name), "Supply a Value", name, -1, -1);
+ return val;
+ }
+
+ /// <summary>The populate tree.</summary>
+ private void PopulateTree()
+ {
+ tvTemplates.Nodes[0].Nodes.Clear();
+ tvTemplates.Nodes[0].Nodes.AddRange(_model.CreateNodes());
+ tvTemplates.Nodes[0].Expand();
+ }
+
+ /// <summary>The run template.</summary>
+ /// <param name="fi">The fi.</param>
+ private void RunTemplate(FileInfo fi)
+ {
+ TemplateResult templateResult = _model.ProcessTemplateFile(fi.FullName, GetValue);
+
+ // display in new window
+ IFileEditorResolver resolver = _services.Resolve<IFileEditorResolver>();
+ IEditor editor = _services.Resolve<IEditor>(resolver.ResolveEditorNameByExtension(templateResult.Extension));
+ editor.AllText = templateResult.Text;
+ editor.SetSyntax(templateResult.SyntaxName);
+ _services.HostWindow.DisplayDockedForm(editor as DockContent);
+ }
+
+ /// <summary>The template view form_ load.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void TemplateViewForm_Load(object sender, EventArgs e)
+ {
+ PopulateTree();
+ templateFileWatcher.Path = _model.GetTemplatePath();
+ }
+
+ /// <summary>The template file watcher_ changed.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void templateFileWatcher_Changed(object sender, FileSystemEventArgs e)
+ {
+ PopulateTree();
+ }
+
+ /// <summary>The template file watcher_ renamed.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void templateFileWatcher_Renamed(object sender, RenamedEventArgs e)
+ {
+ // todo - scan and modify tree
+ PopulateTree();
+ }
+
+ /// <summary>The tool strip menu item edit_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void toolStripMenuItemEdit_Click(object sender, EventArgs e)
+ {
+ if (_selectedFile != null)
+ {
+ IFileEditorResolver resolver = _services.Resolve<IFileEditorResolver>();
+ var editor = resolver.ResolveEditorInstance(_selectedFile.FullName);
+ editor.FileName = _selectedFile.FullName;
+ editor.LoadFile();
+ _services.HostWindow.DisplayDockedForm(editor as DockContent);
+ }
+ }
+
+ /// <summary>The tool strip menu item run_ click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void toolStripMenuItemRun_Click(object sender, EventArgs e)
+ {
+ if (_selectedFile != null)
+ {
+ RunTemplate(_selectedFile);
+ }
+ }
+
+ /// <summary>The tv templates_ node mouse click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void tvTemplates_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
+ {
+ FileInfo fi = null;
+ if (e.Button == MouseButtons.Right && e.Node != null && e.Node.Tag is FileInfo)
+ {
+ fi = e.Node.Tag as FileInfo;
+ }
+
+ _selectedFile = fi;
+ treeMenuStrip.Enabled = _selectedFile != null;
+ }
+
+ /// <summary>The tv templates_ node mouse double click.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void tvTemplates_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
+ {
+ if (e != null && e.Node != null)
+ {
+ FileInfo fi = e.Node.Tag as FileInfo;
+ if (fi != null)
+ {
+ RunTemplate(fi);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.Designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.Designer.cs
new file mode 100644
index 0000000..98015de
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.Designer.cs
@@ -0,0 +1,134 @@
+namespace MiniSqlQuery.PlugIns.TemplateViewer
+{
+ partial class TemplateViewForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Templates");
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TemplateViewForm));
+ this.tvTemplates = new System.Windows.Forms.TreeView();
+ this.treeMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.toolStripMenuItemRun = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItemEdit = new System.Windows.Forms.ToolStripMenuItem();
+ this.imageList = new System.Windows.Forms.ImageList(this.components);
+ this.templateFileWatcher = new System.IO.FileSystemWatcher();
+ this.treeMenuStrip.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.templateFileWatcher)).BeginInit();
+ this.SuspendLayout();
+ //
+ // tvTemplates
+ //
+ this.tvTemplates.ContextMenuStrip = this.treeMenuStrip;
+ this.tvTemplates.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tvTemplates.HideSelection = false;
+ this.tvTemplates.ImageKey = "folder_page";
+ this.tvTemplates.ImageList = this.imageList;
+ this.tvTemplates.Indent = 15;
+ this.tvTemplates.Location = new System.Drawing.Point(0, 0);
+ this.tvTemplates.Name = "tvTemplates";
+ treeNode1.Name = "templates";
+ treeNode1.Text = "Templates";
+ this.tvTemplates.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+ treeNode1});
+ this.tvTemplates.SelectedImageIndex = 0;
+ this.tvTemplates.ShowRootLines = false;
+ this.tvTemplates.Size = new System.Drawing.Size(292, 266);
+ this.tvTemplates.TabIndex = 0;
+ this.tvTemplates.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.tvTemplates_NodeMouseDoubleClick);
+ this.tvTemplates.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.tvTemplates_NodeMouseClick);
+ //
+ // treeMenuStrip
+ //
+ this.treeMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripMenuItemRun,
+ this.toolStripMenuItemEdit});
+ this.treeMenuStrip.Name = "treeMenuStrip";
+ this.treeMenuStrip.Size = new System.Drawing.Size(148, 48);
+ //
+ // toolStripMenuItemRun
+ //
+ this.toolStripMenuItemRun.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
+ this.toolStripMenuItemRun.Name = "toolStripMenuItemRun";
+ this.toolStripMenuItemRun.Size = new System.Drawing.Size(147, 22);
+ this.toolStripMenuItemRun.Text = "Run";
+ this.toolStripMenuItemRun.Click += new System.EventHandler(this.toolStripMenuItemRun_Click);
+ //
+ // toolStripMenuItemEdit
+ //
+ this.toolStripMenuItemEdit.Name = "toolStripMenuItemEdit";
+ this.toolStripMenuItemEdit.Size = new System.Drawing.Size(147, 22);
+ this.toolStripMenuItemEdit.Text = "Edit Template";
+ this.toolStripMenuItemEdit.Click += new System.EventHandler(this.toolStripMenuItemEdit_Click);
+ //
+ // imageList
+ //
+ this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
+ this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+ this.imageList.Images.SetKeyName(0, "folder_page");
+ this.imageList.Images.SetKeyName(1, "script");
+ this.imageList.Images.SetKeyName(2, "script_code");
+ //
+ // templateFileWatcher
+ //
+ this.templateFileWatcher.EnableRaisingEvents = true;
+ this.templateFileWatcher.Filter = "*.mt";
+ this.templateFileWatcher.NotifyFilter = ((System.IO.NotifyFilters)((System.IO.NotifyFilters.FileName | System.IO.NotifyFilters.LastWrite)));
+ this.templateFileWatcher.SynchronizingObject = this;
+ this.templateFileWatcher.Renamed += new System.IO.RenamedEventHandler(this.templateFileWatcher_Renamed);
+ this.templateFileWatcher.Deleted += new System.IO.FileSystemEventHandler(this.templateFileWatcher_Changed);
+ this.templateFileWatcher.Created += new System.IO.FileSystemEventHandler(this.templateFileWatcher_Changed);
+ this.templateFileWatcher.Changed += new System.IO.FileSystemEventHandler(this.templateFileWatcher_Changed);
+ //
+ // TemplateViewForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(292, 266);
+ this.Controls.Add(this.tvTemplates);
+ this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "TemplateViewForm";
+ this.TabText = "Templates";
+ this.Text = "Templates";
+ this.Load += new System.EventHandler(this.TemplateViewForm_Load);
+ this.treeMenuStrip.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.templateFileWatcher)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TreeView tvTemplates;
+ private System.Windows.Forms.ImageList imageList;
+ private System.Windows.Forms.ContextMenuStrip treeMenuStrip;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemRun;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemEdit;
+ private System.IO.FileSystemWatcher templateFileWatcher;
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.resx
new file mode 100644
index 0000000..2e7b765
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TemplateViewer/TemplateViewForm.resx
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="treeMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>120, 17</value>
+ </metadata>
+ <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>17, 17</value>
+ </metadata>
+ <data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+ LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+ ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD8
+ CgAAAk1TRnQBSQFMAgEBAwEAAQQBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+ AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+ AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+ AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+ AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+ AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+ AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+ ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+ AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+ AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+ AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+ AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+ AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+ AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+ AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+ AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+ ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+ Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+ AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+ AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+ AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+ ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+ Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+ AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+ AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+ AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+ AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+ AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+ AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAUwMUgFMAgABoQGn
+ BIYFiwGRAYYBoQIAAaEBpwSGBYsBkQGGAaESAAFSAcMHmgN6AcMBUgIAAccBtAG7AQkB8AHxAfMB9AL/
+ ARkB9AG1AccCAAHHAbQBuwEJAfAB8QHzAfQC/wEZAfQBtQHHEgABUgH2BJoEegJZAcMBUgIAAacBtQj/
+ AbUBGQG1AacCAAGnAbUI/wG1ARkBtQGnEgABUgH2BZoEegFZAcMBUgIAAccBiwm0ARkBCQGnAgABxwGL
+ CbQBGQEJAacSAAFSAfYFmgWZAfABUgKtAaEBpwG1AfQDCQQZAfQBCQGnAgABoQGnAbUB9AMJBBkB9AEJ
+ AacSAAFSAv8D9gaaAcMBUgH0Ac8BAAGhAbQB/wgZAfEBrQMAAaEDtAEZArQBCQMZAfEBrRIAAVIB9gF5
+ AXQBUgGaAfQG/wFSAfQBtAEAAaEBtAH/CBkB8wGtAwABoQGzArQBGQO0AQkCGQHzAa0SAAFSAfYCmgF6
+ CVIB9AG0AQABoQGzAf8IGQH/AbMBoQEAAccBtAHVAbQBCQEZAQkBtAHVAbQB3AEZAf8BswGhEQABUgH2
+ A5oBGgG0Af8GGQH/AbQCAAGzAf8IGQH/AbQBoQEAAbQB2wG0BBkBCQG0AdsBtAEZAf8BtAGhEQABUgX/
+ AQkB/wYZAfQBtAIAAa0B8wgZAf8BtAGhAQABxwHVAdsBtAIZAQkB1QHbAdUB3AEZAf8BtAGhEQABdAV5
+ AQkB/wYZAfQBtAIAAa0BGQH0BxkB/wG0AbMBxwEAAaEBswHbAdUBGQLbAdUDGQH/AbQBswHHFgABCQH/
+ BBkB3QEJAfQBtAIAAa0BCQH/BxkB/wG0ARkBswIAAa0BtAHVARkC2wQZAf8BtAEZAbMWAAEJAf8EGQHz
+ AfQB/wG0AgABrQEJAf8EGQP0Af8BtAH/AbsCAAGtAQkB/wQZA/QB/wG0Af8BuxYAAQkB9AMZAQkB/wEZ
+ AQkBpwIAAa0BCQH/BPQF/wEZAbQCAAGtAQkB/wT0Bf8BGQG0FgABCQH/BfQB3AGtAaECAAGnAdwF/wH0
+ AxkBCQG0AacCAAGnAdwF/wH0AxkBCQG0AacWAAQJA7QBpwGhAwABxwGzAdwB2wK6ArQCswKtAacBoQIA
+ AccBswHcAdsCugK0ArMCrQGnAaEQAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/
+ AgABAwEAAQMBAAEDAwABAwEAAQMBAAEDAwABAwEAAQMBAAEDAwABAwEAAQMBAAEDBQABAwEAAQMEAAGA
+ AQMBgAEDBAABgAEDAYABAwQAAYABAQEAAQEEAAHAAQEBAAEBBAABwAEBAQABAQQAAcABAAGAAwAB/AEA
+ AcABAAHAAwAB/AEAAcABAAHAAwAB/AEAAcABAAHAAwAB/AEAAcABAAHAAwAB/AEBAcABAAHAAwAL
+</value>
+ </data>
+ <metadata name="templateFileWatcher.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>250, 17</value>
+ </metadata>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA////ACyG2ADFdEQAguH3AOzBkwDJ2NYAQNHyANCebQCGwcYA/+LLAFWq4gDM8vsArOH2ADS0
+ 2QDz0a8AcLznAF7Z9ADv8ugAkcnrAMyHWAA2mtoA6Pb7AJDO1wCY4fYAXsLhAHDT8gD/6tsA/vbwAMyW
+ XwD32bwAT9XzAJPX4wDa8/gAwur4AOq7iADz/P4AN6baAHHe9gBkvOkA+u/kAOS6kQB61/MAjMjPADOO
+ 2QCO5PgA6sOdAPXp3QDKf1MATaXgAPnexABn2/UAidz1AP3m1ACf5fQAet/3AJHe9QCT2+kA/fPpAJPS
+ 3ADmv5YAgNn0AJTm+AA1lNoA9dO0APrgygCa5vcAzoFWADWr2gD4/f8AbNz2AMqEUgA2odoA/vz7APrz
+ 7wCJ4/gAn+D1APv48wD85NAAdNXzAIXa9ADv+v4A+uLEANzw+gA1r9oA+vLnAP/n1wD68+sA/OLNAJrk
+ 9ADLhVUAd972AIbi9wD++fMA/vXtAPv27wBb2PQA/N7FAJHl+ACV4PYA/f79AP/l0gD74McA+tzCAH/h
+ 9wCO3vUAk9z0ADaz2gDRoGwA//fyAPb8/gDy+v0AYMPiAPvjywD217sAlN71AMyDVQAtiNgATdTzAOS7
+ kwD98ucA/+nZAP3n1gD85dIAneX1AP3+/wD/59UAyvL7AIvj+ADMhlYA//38AP307gD638gAkt/2AMqA
+ VADKg1MANqraAPb9/wD1/P8A//fwAP738QD+8+gA5b6WAPzy6AD95dEA++LMAJPl+ACb5vYALYfYAMyH
+ VwD///4A/v//AP7+/wD+/v0AX8PiAP3+/gD+/fwA5LuRAPf8/gDku5IA//fxAPH6/QD98+oA+u/jAP7n
+ 1QD8480A/OTRAPncwgD53cQAj+T4AJDl+ACS5fgAlOX4AJ7l9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAnWUdXV1dXV1dXWUdQIAACxTGGOFaTRQPSpPGiI/AAA/UZKpSwQ3JjNgdgd/PwAAFW8+q6qA
+ XGhbRhEfDD8AAEhurJKSYjkgOxcrCQY/AzAll0WJiiRZQpN8rTYhP4OGRBYQCzETSmSCgpxJmT8SQ4ih
+ c2onPz8/Pz8/Pz8/X3RUni04TA1HoHkbeVZlCqBaa5uXmH2XKYt+ejVOcWeNgQ4ZcHBwmp1tpKSQQTIe
+ eJUAAAAAAACfjHumkahyDygUAAAAAAAAnxxYpYQeL1dNhwAAAAAAAHdeYWanQF1SBQAAAAAAAACOljqi
+ j6NVIwAAAAAAAAAALjyfn2wIHQAAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA/AAAAPwAAAD8AQAA/AMAAPwHAAA=
+</value>
+ </data>
+</root>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TextGenerator/Commands/RunTextGeneratorCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TextGenerator/Commands/RunTextGeneratorCommand.cs
new file mode 100644
index 0000000..7b672a8
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TextGenerator/Commands/RunTextGeneratorCommand.cs
@@ -0,0 +1,40 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+
+#endregion
+
+using MiniSqlQuery.Core.Commands;
+
+namespace MiniSqlQuery.PlugIns.TextGenerator.Commands
+{
+ public class RunTextGeneratorCommand : CommandBase
+ {
+ public RunTextGeneratorCommand()
+ : base("Run the (experimental) text to C# class generator")
+ {
+ }
+
+ public override void Execute()
+ {
+ var editor = ActiveFormAsEditor;
+
+ if (editor != null)
+ {
+ var text = editor.SelectedText;
+ if (string.IsNullOrEmpty(text))
+ {
+ text = editor.AllText;
+ }
+
+ var textGeneratorService = new TextGeneratorService();
+ var generatedText = textGeneratorService.Process(text);
+
+ // update editor, just put in the code for now...
+ editor.InsertText(generatedText);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TextGenerator/TextGeneratorLoader.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TextGenerator/TextGeneratorLoader.cs
new file mode 100644
index 0000000..64291ea
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TextGenerator/TextGeneratorLoader.cs
@@ -0,0 +1,29 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+using MiniSqlQuery.PlugIns.TextGenerator.Commands;
+
+namespace MiniSqlQuery.PlugIns.TextGenerator
+{
+ public class TextGeneratorLoader : PluginLoaderBase
+ {
+ public TextGeneratorLoader()
+ : base(
+ "Text Generator Tools",
+ "A Mini SQL Query Plugin for generating test from... text :-)",
+ 21)
+ {
+ }
+
+ public override void InitializePlugIn()
+ {
+ IHostWindow hostWindow = Services.HostWindow;
+ hostWindow.AddPluginCommand<RunTextGeneratorCommand>();
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/TextGenerator/TextGeneratorService.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TextGenerator/TextGeneratorService.cs
new file mode 100644
index 0000000..634c234
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/TextGenerator/TextGeneratorService.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Globalization;
+using System.Text;
+
+namespace MiniSqlQuery.PlugIns.TextGenerator
+{
+ public class TextGeneratorService
+ {
+ private const string SpaceString = " ";
+
+ public string Process(string text)
+ {
+ if (string.IsNullOrEmpty(text))
+ {
+ return text;
+ }
+
+ // convert to a class, line 1 is name, rest are props
+
+ var lines = text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+
+ var sb = new StringBuilder();
+
+ // class name
+ sb.Append("public class ");
+ sb.AppendLine(ToPascalCase(lines[0]));
+ sb.AppendLine("{");
+
+ // properties
+ if (lines.Length > 1)
+ {
+ for (int i = 1; i < lines.Length; i++)
+ {
+ string typeName = "string";
+ var propertyName = ToPascalCase(lines[i]);
+
+ // is it an "id"
+ if (propertyName.EndsWith("id", StringComparison.CurrentCultureIgnoreCase))
+ {
+ typeName = "int";
+ }
+
+ sb.Append("public virtual ");
+ sb.Append(typeName);
+ sb.Append(" ");
+ sb.Append(propertyName);
+ sb.AppendLine(" { get; set; }");
+ }
+ }
+
+ sb.AppendLine("}");
+
+ return sb.ToString();
+ }
+
+ public string ToPascalCase(string text)
+ {
+ // if it has spaces, e.g "first name", or maybe its lower, e.g. "foo". Still allow for "MyID" etc
+ if (text.Contains(SpaceString) || !char.IsUpper(text[0]))
+ {
+ return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text).Replace(SpaceString, string.Empty).Trim();
+ }
+ return text.Trim();
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/Commands/ViewTableFormCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/Commands/ViewTableFormCommand.cs
new file mode 100644
index 0000000..393a83a
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/Commands/ViewTableFormCommand.cs
@@ -0,0 +1,39 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.PlugIns.ViewTable.Commands
+{
+ /// <summary>The view table form command.</summary>
+ public class ViewTableFormCommand
+ : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="ViewTableFormCommand"/> class.</summary>
+ public ViewTableFormCommand()
+ : base("&View table...")
+ {
+ ShortcutKeys = Keys.Control | Keys.T;
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ IQueryEditor queryForm = HostWindow.Instance.ActiveMdiChild as IQueryEditor;
+ if (queryForm != null)
+ {
+ string tableName = queryForm.SelectedText;
+ IViewTable frm = Services.Resolve<IViewTable>();
+ frm.TableName = tableName;
+ HostWindow.DisplayDockedForm(frm as DockContent);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/Commands/ViewTableFromInspectorCommand.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/Commands/ViewTableFromInspectorCommand.cs
new file mode 100644
index 0000000..80785c8
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/Commands/ViewTableFromInspectorCommand.cs
@@ -0,0 +1,37 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.Commands;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.PlugIns.ViewTable.Commands
+{
+ /// <summary>The view table from inspector command.</summary>
+ public class ViewTableFromInspectorCommand
+ : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="ViewTableFromInspectorCommand"/> class.</summary>
+ public ViewTableFromInspectorCommand()
+ : base("&View table data")
+ {
+ SmallImage = ImageResource.table_go;
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ string tableName = HostWindow.DatabaseInspector.RightClickedTableName;
+ if (tableName != null)
+ {
+ IViewTable frm = Services.Resolve<IViewTable>();
+ frm.TableName = tableName;
+ HostWindow.DisplayDockedForm(frm as DockContent);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/table.ico b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/table.ico
new file mode 100644
index 0000000..a6650d4
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/table.ico differ
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/ViewTableForm.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/ViewTableForm.cs
new file mode 100644
index 0000000..7ccce01
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/ViewTableForm.cs
@@ -0,0 +1,531 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+using System.Data.SqlClient;
+using System.Diagnostics;
+using System.IO;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.DbModel;
+using MiniSqlQuery.Properties;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.PlugIns.ViewTable
+{
+ /// <summary>The view table form.</summary>
+ public partial class ViewTableForm : DockContent, IViewTable
+ {
+ /// <summary>The _batch.</summary>
+ private readonly QueryBatch _batch;
+
+ /// <summary>The _services.</summary>
+ private readonly IApplicationServices _services;
+
+ /// <summary>The _settings.</summary>
+ private readonly IApplicationSettings _settings;
+
+ /// <summary>The _sync lock.</summary>
+ private readonly object _syncLock = new object();
+
+ /// <summary>The _db connection.</summary>
+ private DbConnection _dbConnection;
+
+ /// <summary>The _is busy.</summary>
+ private bool _isBusy;
+
+ /// <summary>The _meta data service.</summary>
+ private IDatabaseSchemaService _metaDataService;
+
+ /// <summary>The _status.</summary>
+ private string _status = string.Empty;
+
+ private int? _rowCount;
+
+ /// <summary>Stores the widths of the columns for this window.</summary>
+ private Dictionary<string, int> _columnSizes = new Dictionary<string, int>();
+
+ /// <summary>When tru the grid is being resized on fill, used to avoid overriting column width values.</summary>
+ private bool _resizingGrid;
+
+ /// <summary>Initializes a new instance of the <see cref="ViewTableForm"/> class.</summary>
+ public ViewTableForm()
+ {
+ InitializeComponent();
+ }
+
+ /// <summary>Initializes a new instance of the <see cref="ViewTableForm"/> class.</summary>
+ /// <param name="services">The services.</param>
+ /// <param name="settings">The settings.</param>
+ public ViewTableForm(IApplicationServices services, IApplicationSettings settings)
+ : this()
+ {
+ _services = services;
+ _settings = settings;
+ _batch = new QueryBatch();
+ TableName = string.Empty;
+ Text = Resources.ViewData;
+
+ dataGridViewResult.DefaultCellStyle.NullValue = _settings.NullText;
+ dataGridViewResult.DataBindingComplete += DataGridViewResultDataBindingComplete;
+ dataGridViewResult.ColumnWidthChanged += OnColumnWidthChanged;
+ _services.Settings.DatabaseConnectionReset += SettingsDatabaseConnectionReset;
+ _services.SystemMessagePosted += ServicesSystemMessagePosted;
+ }
+
+ /// <summary>Gets a value indicating whether AutoReload.</summary>
+ public bool AutoReload
+ {
+ get { return chkAutoReload.Checked; }
+ }
+
+ /// <summary>Gets Batch.</summary>
+ public QueryBatch Batch
+ {
+ get { return _batch; }
+ }
+
+ /// <summary>Gets CursorColumn.</summary>
+ public int CursorColumn
+ {
+ get { return dataGridViewResult.SelectedCells.Count > 0 ? dataGridViewResult.SelectedCells[0].ColumnIndex : 0; }
+ }
+
+ /// <summary>Gets CursorLine.</summary>
+ public int CursorLine
+ {
+ get { return (dataGridViewResult.CurrentRow != null) ? dataGridViewResult.CurrentRow.Index : 0; }
+ }
+
+ /// <summary>Gets CursorOffset.</summary>
+ public int CursorOffset
+ {
+ get { return CursorLine; }
+ }
+
+ /// <summary>Gets or sets a value indicating whether IsBusy.</summary>
+ public bool IsBusy
+ {
+ get { return _isBusy; }
+ set
+ {
+ lock (_syncLock)
+ {
+ _isBusy = value;
+ }
+ }
+ }
+
+ /// <summary>Gets or sets TableName.</summary>
+ public string TableName
+ {
+ get { return cboTableName.Text; }
+ set { cboTableName.Text = value; }
+ }
+
+ /// <summary>Gets or sets Text.</summary>
+ public override string Text
+ {
+ get { return base.Text; }
+ set
+ {
+ base.Text = value;
+ TabText = Text;
+ }
+ }
+
+ /// <summary>Gets TotalLines.</summary>
+ public int TotalLines
+ {
+ get { return (dataGridViewResult.DataSource != null) ? dataGridViewResult.Rows.Count : 0; }
+ }
+
+ /// <summary>The set status.</summary>
+ /// <param name="text">The text.</param>
+ public void SetStatus(string text)
+ {
+ _status = text;
+ UpdateHostStatus();
+ }
+
+ public void SetRowCount(int? rows)
+ {
+ _rowCount = rows;
+ UpdateHostStatus();
+ }
+
+ /// <summary>The set cursor by location.</summary>
+ /// <param name="line">The line.</param>
+ /// <param name="column">The column.</param>
+ /// <returns>The set cursor by location.</returns>
+ public bool SetCursorByLocation(int line, int column)
+ {
+ if (line > 0 && line <= TotalLines)
+ {
+ dataGridViewResult.FirstDisplayedScrollingRowIndex = line;
+ dataGridViewResult.Refresh();
+ dataGridViewResult.Rows[line].Selected = true;
+ return true;
+ }
+
+ return false;
+ }
+
+ /// <summary>The set cursor by offset.</summary>
+ /// <param name="offset">The offset.</param>
+ /// <returns>The set cursor by offset.</returns>
+ public bool SetCursorByOffset(int offset)
+ {
+ return SetCursorByLocation(offset, 0);
+ }
+
+ /// <summary>The cancel task.</summary>
+ public void CancelTask()
+ {
+ // not supported (yet?)
+ }
+
+ /// <summary>The execute task.</summary>
+ public void ExecuteTask()
+ {
+ LoadTableData();
+ }
+
+ /// <summary>The update host status.</summary>
+ protected void UpdateHostStatus()
+ {
+ _services.HostWindow.SetStatus(this, _status);
+ _services.HostWindow.SetResultCount(this, _rowCount);
+ }
+
+ /// <summary>The data grid view result data binding complete.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void DataGridViewResultDataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
+ {
+ DataTable dt = dataGridViewResult.DataSource as DataTable;
+ if (dt == null)
+ {
+ return;
+ }
+
+ try
+ {
+ _resizingGrid = true;
+
+ // create a reasonable default max width for columns
+ int maxColWidth = Math.Max(dataGridViewResult.ClientSize.Width / 2, 100);
+
+ // Autosize the columns then change the widths, gleaned from SO - http://stackoverflow.com/a/1031871/276563
+ dataGridViewResult.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);
+
+ string nullText = _settings.NullText;
+ string dateTimeFormat = _settings.DateTimeFormat;
+ for (int i = 0; i < dt.Columns.Count; i++)
+ {
+ if (dt.Columns[i].DataType == typeof(DateTime))
+ {
+ DataGridViewCellStyle dateCellStyle = new DataGridViewCellStyle();
+ dateCellStyle.NullValue = nullText;
+ dateCellStyle.Format = dateTimeFormat;
+ dataGridViewResult.Columns[i].DefaultCellStyle = dateCellStyle;
+ }
+
+ // sync column sizes:
+ int columnWidth = dataGridViewResult.Columns[i].Width;
+ dataGridViewResult.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
+
+ string headerText = dataGridViewResult.Columns[i].HeaderText;
+ if (!string.IsNullOrEmpty(headerText) && _columnSizes.ContainsKey(headerText))
+ {
+ // use the previous column size in case its been adjusted etc
+ dataGridViewResult.Columns[i].Width = _columnSizes[headerText];
+ }
+ else
+ {
+ // reset to a the smaller of the 2 sizes, this is mainly for the bigger text columns that throw the size out
+ dataGridViewResult.Columns[i].Width = Math.Min(columnWidth, maxColWidth);
+
+ if (!string.IsNullOrEmpty(headerText))
+ {
+ _columnSizes[headerText] = dataGridViewResult.Columns[i].Width;
+ }
+ }
+ }
+ }
+ finally
+ {
+ _resizingGrid = false;
+ }
+ }
+
+ public void OnColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
+ {
+ if (_resizingGrid)
+ {
+ return;
+ }
+
+ string headerText = e.Column.HeaderText;
+ if (!string.IsNullOrEmpty(headerText))
+ {
+ _columnSizes[headerText] = e.Column.Width;
+ }
+ }
+
+ /// <summary>The get tables and views.</summary>
+ private void GetTablesAndViews()
+ {
+ if (_metaDataService == null)
+ {
+ _metaDataService = DatabaseMetaDataService.Create(_services.Settings.ConnectionDefinition.ProviderName);
+
+ DbModelInstance model = _metaDataService.GetDbObjectModel(_services.Settings.ConnectionDefinition.ConnectionString);
+ List<string> tableNames = new List<string>();
+ foreach (DbModelTable table in model.Tables)
+ {
+ tableNames.Add(Utility.MakeSqlFriendly(table.FullName));
+ }
+
+ foreach (DbModelView view in model.Views)
+ {
+ tableNames.Add(Utility.MakeSqlFriendly(view.FullName));
+ }
+
+ cboTableName.Items.AddRange(tableNames.ToArray());
+ }
+ }
+
+ /// <summary>The load table data.</summary>
+ private void LoadTableData()
+ {
+ if (_services.Settings.ConnectionDefinition == null)
+ {
+ _services.HostWindow.DisplaySimpleMessageBox(this, "Please select a connection.", "Select a Connection");
+ return;
+ }
+
+ GetTablesAndViews();
+
+ DbDataAdapter adapter = null;
+ DbCommand cmd = null;
+ DataTable dt = null;
+ Query query = new Query("SELECT * FROM " + Utility.MakeSqlFriendly(TableName));
+
+ if (string.IsNullOrEmpty(TableName))
+ {
+ Text = Resources.Table_none;
+ return;
+ }
+
+ try
+ {
+ IsBusy = true;
+ UseWaitCursor = true;
+ dataGridViewResult.DataSource = null;
+ Application.DoEvents();
+
+ if (_dbConnection == null)
+ {
+ _dbConnection = _services.Settings.GetOpenConnection();
+ }
+
+ query.Result = new DataSet(TableName + " View");
+ _batch.Clear();
+ _batch.Add(query);
+
+ adapter = _services.Settings.ProviderFactory.CreateDataAdapter();
+ cmd = _dbConnection.CreateCommand();
+ cmd.CommandText = query.Sql;
+ cmd.CommandType = CommandType.Text;
+ SetCommandTimeout(cmd, _settings.CommandTimeout);
+ adapter.SelectCommand = cmd;
+ adapter.Fill(query.Result);
+ SetStatus(string.Format("Loaded table '{0}'", TableName));
+ Text = TableName;
+ }
+ catch (DbException dbExp)
+ {
+ // todo: improve!
+ _services.HostWindow.DisplaySimpleMessageBox(this, dbExp.Message, "View Table Error");
+ SetStatus(dbExp.Message);
+ Text = Resources.ViewDataError;
+ }
+ finally
+ {
+ if (adapter != null)
+ {
+ adapter.Dispose();
+ }
+
+ if (cmd != null)
+ {
+ cmd.Dispose();
+ }
+
+ UseWaitCursor = false;
+ IsBusy = false;
+ }
+
+ if (query.Result != null && query.Result.Tables.Count > 0)
+ {
+ dt = query.Result.Tables[0];
+ Text = Resources.Table_colon + TableName;
+ }
+
+ dataGridViewResult.DefaultCellStyle.NullValue = _settings.NullText;
+ dataGridViewResult.DataSource = dt;
+
+ if (dt != null)
+ {
+ SetRowCount(dt.Rows.Count);
+ }
+ }
+
+
+ /// <summary>
+ /// Sets the command timeout, currently only tested against MSSQL.
+ /// </summary>
+ /// <param name="cmd">The command.</param>
+ /// <param name="commandTimeout">The command timeout.</param>
+ private void SetCommandTimeout(IDbCommand cmd, int commandTimeout)
+ {
+ if (_services.Settings.ProviderFactory is SqlClientFactory)
+ {
+ if (cmd == null)
+ {
+ throw new ArgumentNullException("cmd");
+ }
+ cmd.CommandTimeout = commandTimeout;
+ }
+ else
+ {
+ Trace.WriteLine("Command Timeout only supported by SQL Client (so far)");
+ }
+ }
+
+ /// <summary>The services system message posted.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void ServicesSystemMessagePosted(object sender, SystemMessageEventArgs e)
+ {
+ if (e.Message == SystemMessage.TableTruncated)
+ {
+ if (AutoReload && TableName.Equals(e.Data))
+ {
+ LoadTableData();
+ }
+ }
+ }
+
+ /// <summary>The settings database connection reset.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void SettingsDatabaseConnectionReset(object sender, EventArgs e)
+ {
+ _dbConnection = null;
+ }
+
+ /// <summary>The update status.</summary>
+ /// <param name="msg">The msg.</param>
+ private void UpdateStatus(string msg)
+ {
+ _services.HostWindow.SetStatus(this, msg);
+ Application.DoEvents();
+ }
+
+ /// <summary>The view table form_ shown.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void ViewTableForm_Shown(object sender, EventArgs e)
+ {
+ LoadTableData();
+ }
+
+ /// <summary>The data grid view result_ data error.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void dataGridViewResult_DataError(object sender, DataGridViewDataErrorEventArgs e)
+ {
+ e.ThrowException = false;
+ }
+
+ /// <summary>The lnk export script_ link clicked.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void lnkExportScript_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ DataTable dt = dataGridViewResult.DataSource as DataTable;
+
+ if (dt != null)
+ {
+ var stringWriter = new StringWriter();
+ var hostWindow = _services.HostWindow;
+ var dbModelTable = hostWindow.DatabaseInspector.DbSchema.FindTableOrView(TableName);
+ var sqlWriter = _services.Resolve<ISqlWriter>();
+ sqlWriter.IncludeComments = false;
+ sqlWriter.InsertLineBreaksBetweenColumns = false;
+ sqlWriter.IncludeReadOnlyColumnsInExport = _settings.IncludeReadOnlyColumnsInExport;
+
+ for (int i = 0; i < dt.Rows.Count; i++)
+ {
+ DataRow dataRow = dt.Rows[i];
+
+ foreach (var column in dbModelTable.Columns)
+ {
+ column.DbType.Value = dataRow[dt.Columns[column.Name]];
+ }
+
+ sqlWriter.WriteInsert(stringWriter, dbModelTable);
+ if (_settings.EnableQueryBatching)
+ {
+ stringWriter.WriteLine("GO");
+ }
+
+ stringWriter.WriteLine();
+
+ if (i % 10 == 0)
+ {
+ UpdateStatus(string.Format("Processing {0} of {1} rows", i + 1, dt.Rows.Count));
+ }
+ }
+
+ UpdateStatus(string.Format("Processed {0} rows. Opening file...", dt.Rows.Count));
+
+ // HACK - need to clean up the values for now as the model is holding the last rows data ;-)
+ // TODO - add a "deep clone" method to the table/columns
+ foreach (var column in dbModelTable.Columns)
+ {
+ column.DbType.Value = null;
+ }
+
+ // create a new sql editor and push the sql into it
+ IEditor editor = _services.Resolve<IQueryEditor>();
+ editor.AllText = stringWriter.ToString();
+ hostWindow.DisplayDockedForm(editor as DockContent);
+
+ UpdateStatus(null);
+ }
+ }
+
+ /// <summary>The lnk refresh_ link clicked.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void lnkRefresh_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ LoadTableData();
+ }
+
+ private void ViewTableForm_Activated(object sender, EventArgs e)
+ {
+ UpdateHostStatus();
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/ViewTableForm.Designer.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/ViewTableForm.Designer.cs
new file mode 100644
index 0000000..869349f
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/ViewTableForm.Designer.cs
@@ -0,0 +1,171 @@
+namespace MiniSqlQuery.PlugIns.ViewTable
+{
+ partial class ViewTableForm
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ViewTableForm));
+ this.dataGridViewResult = new System.Windows.Forms.DataGridView();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.lnkExportScript = new System.Windows.Forms.LinkLabel();
+ this.chkAutoReload = new System.Windows.Forms.CheckBox();
+ this.lnkRefresh = new System.Windows.Forms.LinkLabel();
+ this.cboTableName = new System.Windows.Forms.ComboBox();
+ this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+ this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridViewResult)).BeginInit();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // dataGridViewResult
+ //
+ this.dataGridViewResult.AllowUserToAddRows = false;
+ this.dataGridViewResult.AllowUserToDeleteRows = false;
+ this.dataGridViewResult.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window;
+ dataGridViewCellStyle1.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText;
+ dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
+ this.dataGridViewResult.DefaultCellStyle = dataGridViewCellStyle1;
+ this.dataGridViewResult.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.dataGridViewResult.Location = new System.Drawing.Point(4, 69);
+ this.dataGridViewResult.Name = "dataGridViewResult";
+ this.dataGridViewResult.ReadOnly = true;
+ this.dataGridViewResult.Size = new System.Drawing.Size(562, 294);
+ this.dataGridViewResult.TabIndex = 0;
+ this.dataGridViewResult.DataError += new System.Windows.Forms.DataGridViewDataErrorEventHandler(this.dataGridViewResult_DataError);
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.lnkExportScript);
+ this.groupBox1.Controls.Add(this.chkAutoReload);
+ this.groupBox1.Controls.Add(this.lnkRefresh);
+ this.groupBox1.Controls.Add(this.cboTableName);
+ this.groupBox1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.groupBox1.Location = new System.Drawing.Point(4, 4);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(562, 65);
+ this.groupBox1.TabIndex = 2;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Table Name";
+ //
+ // lnkExportScript
+ //
+ this.lnkExportScript.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.lnkExportScript.AutoSize = true;
+ this.lnkExportScript.Location = new System.Drawing.Point(469, 29);
+ this.lnkExportScript.Name = "lnkExportScript";
+ this.lnkExportScript.Size = new System.Drawing.Size(76, 13);
+ this.lnkExportScript.TabIndex = 4;
+ this.lnkExportScript.TabStop = true;
+ this.lnkExportScript.Text = "Export Script...";
+ this.toolTip1.SetToolTip(this.lnkExportScript, "Takes the current data and creates a script of insert statements in a new window." +
+ "");
+ this.lnkExportScript.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkExportScript_LinkClicked);
+ //
+ // chkAutoReload
+ //
+ this.chkAutoReload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.chkAutoReload.AutoSize = true;
+ this.chkAutoReload.Checked = true;
+ this.chkAutoReload.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.chkAutoReload.Location = new System.Drawing.Point(471, 45);
+ this.chkAutoReload.Name = "chkAutoReload";
+ this.chkAutoReload.Size = new System.Drawing.Size(85, 17);
+ this.chkAutoReload.TabIndex = 2;
+ this.chkAutoReload.Text = "Auto Reload";
+ this.toolTip1.SetToolTip(this.chkAutoReload, "Automatically reload the table when a \'Truncate\' action is performed.");
+ this.chkAutoReload.UseVisualStyleBackColor = true;
+ //
+ // lnkRefresh
+ //
+ this.lnkRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.lnkRefresh.AutoSize = true;
+ this.lnkRefresh.Location = new System.Drawing.Point(469, 16);
+ this.lnkRefresh.Name = "lnkRefresh";
+ this.lnkRefresh.Size = new System.Drawing.Size(71, 13);
+ this.lnkRefresh.TabIndex = 1;
+ this.lnkRefresh.TabStop = true;
+ this.lnkRefresh.Text = "Reload Table";
+ this.toolTip1.SetToolTip(this.lnkRefresh, "Reload the selected table now.");
+ this.lnkRefresh.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkRefresh_LinkClicked);
+ //
+ // cboTableName
+ //
+ this.cboTableName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.cboTableName.FormattingEnabled = true;
+ this.cboTableName.Location = new System.Drawing.Point(12, 19);
+ this.cboTableName.MaxDropDownItems = 20;
+ this.cboTableName.Name = "cboTableName";
+ this.cboTableName.Size = new System.Drawing.Size(454, 21);
+ this.cboTableName.TabIndex = 0;
+ //
+ // contextMenuStrip
+ //
+ this.contextMenuStrip.Name = "contextMenuStrip";
+ this.contextMenuStrip.Size = new System.Drawing.Size(61, 4);
+ //
+ // ViewTableForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(570, 367);
+ this.Controls.Add(this.dataGridViewResult);
+ this.Controls.Add(this.groupBox1);
+ this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "ViewTableForm";
+ this.Padding = new System.Windows.Forms.Padding(4);
+ this.TabText = "ViewTableForm";
+ this.Text = "ViewTableForm";
+ this.Activated += new System.EventHandler(this.ViewTableForm_Activated);
+ this.Shown += new System.EventHandler(this.ViewTableForm_Shown);
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridViewResult)).EndInit();
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.DataGridView dataGridViewResult;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.ComboBox cboTableName;
+ private System.Windows.Forms.LinkLabel lnkRefresh;
+ private System.Windows.Forms.CheckBox chkAutoReload;
+ private System.Windows.Forms.ToolTip toolTip1;
+ private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
+ private System.Windows.Forms.LinkLabel lnkExportScript;
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/ViewTableForm.resx b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/ViewTableForm.resx
new file mode 100644
index 0000000..e58af44
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/ViewTableForm.resx
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>132, 17</value>
+ </metadata>
+ <metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>229, 17</value>
+ </metadata>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA////AMOEUgCc1aUA78GiAHa+fADao3oA8OLYAOvRvQCHyY4AzpNkAOSyjAD38esA6MiwANSb
+ bwCQzpgA6bqWAMWKXQB+w4QA9OriAN+qggD79/QA6MSpAOrNtQDXoHQAy45eAILGiQDRl2oA676dAIvL
+ kwCU0J0A4a6HAMeHVgB6wYAAmNOhAPbt5gDy594A5rWQAPr08ADdqH4A6sesAMmKWwDnt5QA8eXbAOrP
+ ugDqy7IA67yaAO3AnwDIjV8A3KV9AOnDpgDEhlQA1p5yAOCshADr078A6smuAPr28gD58+4A05luAOnG
+ qgDIilkAxoxfANGWaADqzrcA6My1AN2pgADqybAA6MiuAOjHrADpupgA+PLtAMaGVQDr0LsA4q+IAOy/
+ ngDltI8A9/DqAMaKXADLj18AzpJjAOvSvgDXoXUA6syzANmkegDpx60A6casAO7BoQDrvZsA47GMAPv2
+ 8gD69vEA+fPvAPPn3gDx5NsA69C6AOnJsADpya4A6setAOe3kwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0Oj5PGSkgAgICAgICAAAAUUZMIxNcXQcHBwcHBxEAAFM5UAE2
+ AQEBYQEBAQc9AAAnW15ISEhICBcXFxcHTQAAFFs/AUgBAQEsWQEBBzAAAB8mLVJSUlI/REQNQwczAABY
+ WjcBQgEBAUQBAQErRwAASzg7VShUYF9EXw1AJDwAACoVMgEWAQEBRAEBAQxOAABFFTIyMjIyMjIyMjIV
+ CgAAVxUBAQEBAQEBAQEBFRsAAEoVAyIeDx0JGhIhBRUOAABWFRUVFRUVFRUVFRUVGAAAAAQvHC4QYiUL
+ STVBMQYAAAAAAAAAAAAAAAAAAAAAAP//AACAAwAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIAB
+ AACAAQAAgAEAAIABAACAAQAAwAEAAP//AAA=
+</value>
+ </data>
+</root>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/ViewTableLoader.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/ViewTableLoader.cs
new file mode 100644
index 0000000..1fd6f8f
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/ViewTable/ViewTableLoader.cs
@@ -0,0 +1,37 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+
+using MiniSqlQuery.Core;
+using MiniSqlQuery.PlugIns.ViewTable.Commands;
+
+namespace MiniSqlQuery.PlugIns.ViewTable
+{
+ /// <summary>The view table loader.</summary>
+ public class ViewTableLoader : PluginLoaderBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="ViewTableLoader"/> class.</summary>
+ public ViewTableLoader()
+ : base("View Table Data", "A Mini SQL Query Plugin for viewing table data.", 50)
+ {
+ }
+
+ /// <summary>Iinitialize the plug in.</summary>
+ public override void InitializePlugIn()
+ {
+ Services.RegisterComponent<IViewTable, ViewTableForm>("ViewTableForm");
+
+ // the DB inspector may not be present
+ if (Services.HostWindow.DatabaseInspector != null)
+ {
+ Services.HostWindow.DatabaseInspector.TableMenu.Items.Insert(
+ 0, CommandControlBuilder.CreateToolStripMenuItem<ViewTableFromInspectorCommand>());
+ }
+
+ Services.HostWindow.AddPluginCommand<ViewTableFormCommand>();
+ }
+ }
+}
\ No newline at end of file