diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/ApplicationServices.cs b/minisqlquery-master/src/MiniSqlQuery.Core/ApplicationServices.cs
new file mode 100644
index 0000000..4a26269
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/ApplicationServices.cs
@@ -0,0 +1,282 @@
+#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.Windows.Forms;
+using Ninject;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// The core services of the application (singleton).
+ /// </summary>
+ public class ApplicationServices : IApplicationServices
+ {
+ /// <summary>
+ /// The _configuration objects.
+ /// </summary>
+ private static readonly List<Type> _configurationObjects = new List<Type>();
+
+ /// <summary>
+ /// The _container.
+ /// </summary>
+ private static readonly IKernel _container;
+
+ /// <summary>
+ /// The _plugins.
+ /// </summary>
+ private readonly Dictionary<Type, IPlugIn> _plugins = new Dictionary<Type, IPlugIn>();
+
+ /// <summary>
+ /// Initializes static members of the <see cref = "ApplicationServices" /> class.
+ /// </summary>
+ static ApplicationServices()
+ {
+ _container = new StandardKernel();
+
+ // add self
+ _container
+ .Bind<IApplicationServices>()
+ .To<ApplicationServices>()
+ .InSingletonScope()
+ .Named("ApplicationServices");
+ }
+
+ /// <summary>
+ /// Occurs when a system message is posted.
+ /// </summary>
+ public event EventHandler<SystemMessageEventArgs> SystemMessagePosted;
+
+ /// <summary>
+ /// Gets a reference to the singleton instance of the services for this application.
+ /// </summary>
+ /// <value>The singleton instance of <see cref = "IApplicationServices" />.</value>
+ public static IApplicationServices Instance
+ {
+ get { return _container.Get<IApplicationServices>(); }
+ }
+
+ /// <summary>
+ /// Gets the Dependency Injection container.
+ /// </summary>
+ /// <value>The container.</value>
+ public IKernel Container
+ {
+ get { return _container; }
+ }
+
+ /// <summary>
+ /// Gets the application host window.
+ /// </summary>
+ /// <value>The host window - a <see cref = "Form" />.</value>
+ public IHostWindow HostWindow
+ {
+ get { return _container.Get<IHostWindow>(); }
+ }
+
+ /// <summary>
+ /// Gets a dictionary of the current plugins for this application.
+ /// </summary>
+ /// <value>A reference to the plugin dictionary.</value>
+ public Dictionary<Type, IPlugIn> Plugins
+ {
+ get { return _plugins; }
+ }
+
+ /// <summary>
+ /// Gets the application settings instance.
+ /// </summary>
+ /// <value>A reference to the settings handler.</value>
+ public IApplicationSettings Settings
+ {
+ get { return _container.Get<IApplicationSettings>(); }
+ }
+
+ /// <summary>
+ /// The get configuration object types.
+ /// </summary>
+ /// <returns>An array of configuration objects.</returns>
+ public Type[] GetConfigurationObjectTypes()
+ {
+ return _configurationObjects.ToArray();
+ }
+
+ /// <summary>
+ /// Initializes the plugins that have been loaded during application startup.
+ /// </summary>
+ public void InitializePlugIns()
+ {
+ foreach (IPlugIn plugIn in _plugins.Values)
+ {
+ try
+ {
+ if (HostWindow != null)
+ {
+ HostWindow.SetStatus(null, "Initializing " + plugIn.PluginName);
+ }
+
+ plugIn.InitializePlugIn();
+ }
+ catch (Exception exp)
+ {
+ if (HostWindow == null)
+ {
+ throw;
+ }
+
+ HostWindow.DisplayMessageBox(
+ null,
+ string.Format("Error Initializing {0}:{1}{2}", plugIn.PluginName, Environment.NewLine, exp),
+ "Plugin Error",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Warning,
+ MessageBoxDefaultButton.Button1,
+ 0,
+ null,
+ null);
+ }
+ }
+ }
+
+ /// <summary>
+ /// Loads the <paramref name = "plugIn" /> (calling its <see cref = "IPlugIn.LoadPlugIn" /> method) and
+ /// adds it to the <see cref = "Plugins" /> dictionary for access by other services.
+ /// </summary>
+ /// <param name = "plugIn">The plugin to load.</param>
+ /// <exception cref = "ArgumentNullException">If <paramref name = "plugIn" /> is null.</exception>
+ public void LoadPlugIn(IPlugIn plugIn)
+ {
+ if (plugIn == null)
+ {
+ throw new ArgumentNullException("plugIn");
+ }
+
+ plugIn.LoadPlugIn(this);
+ var type = plugIn.GetType();
+ _plugins.Add(type, plugIn);
+ _container.Bind<IPlugIn>().To(type).InSingletonScope().Named(type.FullName);
+ }
+
+ /// <summary>
+ /// Posts a system message for listeners.
+ /// </summary>
+ /// <param name = "message">A system message type.</param>
+ /// <param name = "data">The asssociated data.</param>
+ public void PostMessage(SystemMessage message, object data)
+ {
+ OnSystemMessagePosted(new SystemMessageEventArgs(message, data));
+ }
+
+ /// <summary>
+ /// Registers the component service type <typeparamref name = "TService" /> with and implemetation of type <typeparamref name = "TImp" />.
+ /// </summary>
+ /// <typeparam name = "TService">The contract type.</typeparam>
+ /// <typeparam name = "TImp">The implementing type.</typeparam>
+ /// <param name = "key">The key or name of the service.</param>
+ public void RegisterComponent<TService, TImp>(string key)
+ {
+ _container.Bind<TService>().To(typeof(TImp)).InTransientScope().Named(key);
+ }
+
+ /// <summary>
+ /// Registers the component implemetation of type <typeparamref name = "TImp" />.
+ /// </summary>
+ /// <typeparam name = "TImp">The implementing type.</typeparam>
+ /// <param name = "key">The key or name of the service.</param>
+ public void RegisterComponent<TImp>(string key)
+ {
+ _container.Bind<TImp>().ToSelf().InTransientScope().Named(key);
+ }
+
+ /// <summary>
+ /// The register configuration object.
+ /// </summary>
+ /// <typeparam name = "TConfig">A configuration class.</typeparam>
+ public void RegisterConfigurationObject<TConfig>() where TConfig : IConfigurationObject
+ {
+ RegisterComponent<IConfigurationObject, TConfig>(typeof(TConfig).FullName);
+
+ // haven't successfully been able to query this into out of castle container (yet)
+ _configurationObjects.Add(typeof(TConfig));
+ }
+
+ /// <summary>
+ /// Registers the editor of type <typeparamref name = "TEditor" /> using the <see cref = "FileEditorDescriptor.EditorKeyName" />.
+ /// </summary>
+ /// <typeparam name = "TEditor">The editor type (e.g. "BasicXmlEditor").</typeparam>
+ /// <param name = "fileEditorDescriptor">The file extension descriiptor for this type.</param>
+ public void RegisterEditor<TEditor>(FileEditorDescriptor fileEditorDescriptor) where TEditor : IEditor
+ {
+ RegisterComponent<IEditor, TEditor>(fileEditorDescriptor.EditorKeyName);
+
+ // push the ext reg into the resolver....
+ IFileEditorResolver resolver = Resolve<IFileEditorResolver>();
+ resolver.Register(fileEditorDescriptor);
+ }
+
+ /// <summary>
+ /// Registers the component service type <typeparamref name = "TService" /> with and implemetation of type <typeparamref name = "TImp" /> as a singleton.
+ /// </summary>
+ /// <typeparam name = "TService">The contract type.</typeparam>
+ /// <typeparam name = "TImp">The implementing type.</typeparam>
+ /// <param name = "key">The key or name of the service.</param>
+ public void RegisterSingletonComponent<TService, TImp>(string key)
+ {
+ _container.Bind<TService>().To(typeof(TImp)).InSingletonScope().Named(key);
+ }
+
+ /// <summary>
+ /// Remove the component by name.
+ /// </summary>
+ /// <returns>True on success.</returns>
+ public void RemoveComponent<TImp>()
+ {
+ _container.Unbind<TImp>();
+ }
+
+ /// <summary>
+ /// Resolves an instance of <typeparamref name = "T" /> from the container.
+ /// </summary>
+ /// <typeparam name = "T">The type of object to resolve, can be an interface or class.</typeparam>
+ /// <param name = "key">The key (can be null if not applicable).</param>
+ /// <returns>An instance of the type depending on the containters configuration.</returns>
+ public T Resolve<T>(string key)
+ {
+ if (key == null)
+ {
+ return _container.Get<T>();
+ }
+
+ return _container.Get<T>(key);
+ }
+
+ /// <summary>
+ /// The resolve.
+ /// </summary>
+ /// <typeparam name = "T">The type of object to resolve, can be an interface or class.</typeparam>
+ /// <returns>An instance of the type depending on the containters configuration.</returns>
+ public T Resolve<T>()
+ {
+ return _container.Get<T>();
+ }
+
+ /// <summary>
+ /// The on system message posted.
+ /// </summary>
+ /// <param name = "eventArgs">The event args.</param>
+ protected void OnSystemMessagePosted(SystemMessageEventArgs eventArgs)
+ {
+ EventHandler<SystemMessageEventArgs> handler = SystemMessagePosted;
+ if (handler != null)
+ {
+ handler(this, eventArgs);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/BasicTextFindService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/BasicTextFindService.cs
new file mode 100644
index 0000000..0eac8b7
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/BasicTextFindService.cs
@@ -0,0 +1,73 @@
+#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;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// A simple text finding service. Currently supports forward only text matching.
+ /// </summary>
+ public class BasicTextFindService : ITextFindService
+ {
+ /// <summary>
+ /// The services reference.
+ /// </summary>
+ private readonly IApplicationServices _services;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "BasicTextFindService" /> class. Creates a new text find service.
+ /// </summary>
+ /// <param name = "applicationServices">A reference to the application services.</param>
+ public BasicTextFindService(IApplicationServices applicationServices)
+ {
+ _services = applicationServices;
+ }
+
+ /// <summary>
+ /// Looks for the next match depending on the settings in the <paramref name = "request" />.
+ /// </summary>
+ /// <param name = "request">The text find request.</param>
+ /// <returns>An updated request with the relevent values adjusted (namely position).</returns>
+ public FindTextRequest FindNext(FindTextRequest request)
+ {
+ if (request == null)
+ {
+ throw new ArgumentNullException("request");
+ }
+
+ /*
+ if (request.SearchUp)
+ {
+ // todo - I think its the TextProvider's job...?
+ }
+ else // search down.
+ {
+ int pos = request.TextProvider.FindString(request.SearchValue, request.Position, request.StringComparison);
+ //pos = request.TextProvider.FindString(request);
+ }
+ */
+ int pos = request.TextProvider.FindString(request.SearchValue, request.Position, request.StringComparison);
+
+ if (pos > -1)
+ {
+ // the editor will highlight the find
+ request.Position = pos + request.SearchValue.Length;
+ }
+ else
+ {
+ // todo - notify, beep etc
+
+ // reset to start of buffer.
+ request.Position = 0;
+ }
+
+ return request;
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/BatchProgressEventArgs.cs b/minisqlquery-master/src/MiniSqlQuery.Core/BatchProgressEventArgs.cs
new file mode 100644
index 0000000..92e68a6
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/BatchProgressEventArgs.cs
@@ -0,0 +1,49 @@
+#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;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// The batch progress event args.
+ /// </summary>
+ public class BatchProgressEventArgs : EventArgs
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "BatchProgressEventArgs" /> class.
+ /// </summary>
+ /// <param name = "query">The query.</param>
+ /// <param name = "count">The count.</param>
+ /// <param name = "index">The index.</param>
+ public BatchProgressEventArgs(Query query, int count, int index)
+ {
+ Query = query;
+ Count = count;
+ Index = index;
+ }
+
+ /// <summary>
+ /// Gets Count.
+ /// </summary>
+ /// <value>The count.</value>
+ public int Count { get; private set; }
+
+ /// <summary>
+ /// Gets Index.
+ /// </summary>
+ /// <value>The index.</value>
+ public int Index { get; private set; }
+
+ /// <summary>
+ /// Gets Query.
+ /// </summary>
+ /// <value>The query.</value>
+ public Query Query { get; private set; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/CommandControlBuilder.cs b/minisqlquery-master/src/MiniSqlQuery.Core/CommandControlBuilder.cs
new file mode 100644
index 0000000..8486be7
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/CommandControlBuilder.cs
@@ -0,0 +1,215 @@
+#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.Diagnostics;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Helper class for building controls out of <see cref = "ICommand" /> objects.
+ /// </summary>
+ public class CommandControlBuilder
+ {
+ /// <summary>
+ /// Handles the click event of a tool strip item, if the <see cref = "ToolStripItem.Tag" /> is
+ /// an <see cref = "ICommand" /> instance the action is executed.
+ /// </summary>
+ /// <param name = "sender">The sender.</param>
+ /// <param name = "e">The <see cref = "System.EventArgs" /> instance containing the event data.</param>
+ [DebuggerNonUserCode]
+ public static void CommandItemClick(object sender, EventArgs e)
+ {
+ var item = sender as ToolStripItem;
+
+ if (item != null)
+ {
+ var cmd = item.Tag as ICommand;
+
+ if (cmd != null)
+ {
+ cmd.Execute();
+ }
+ }
+ }
+
+ /// <summary>
+ /// Creates a link label given the <typeparamref name = "TCommand" /> definition.
+ /// </summary>
+ /// <typeparam name = "TCommand">The type of the command.</typeparam>
+ /// <returns>A link label wired to the commands <see cref = "ICommand.Execute" /> method.</returns>
+ public static LinkLabel CreateLinkLabel<TCommand>() where TCommand : ICommand, new()
+ {
+ var linkLabel = new LinkLabel();
+ var cmd = CommandManager.GetCommandInstance<TCommand>();
+
+ linkLabel.AutoSize = true;
+ linkLabel.Name = cmd.GetType().Name + "LinkLabel";
+ linkLabel.TabStop = true;
+ linkLabel.Text = cmd.Name.Replace("&", string.Empty);
+ linkLabel.Tag = cmd;
+ linkLabel.Padding = new Padding(4);
+ linkLabel.LinkClicked += LinkLabelLinkClicked;
+
+ return linkLabel;
+ }
+
+ /// <summary>
+ /// Creates a tool strip button given the <typeparamref name = "TCommand" /> definition.
+ /// </summary>
+ /// <typeparam name = "TCommand">The type of the command.</typeparam>
+ /// <returns>A tool strip button</returns>
+ public static ToolStripButton CreateToolStripButton<TCommand>() where TCommand : ICommand, new()
+ {
+ var button = new ToolStripButton();
+ var cmd = CommandManager.GetCommandInstance<TCommand>();
+
+ button.DisplayStyle = ToolStripItemDisplayStyle.Image;
+ button.Image = cmd.SmallImage;
+ button.ImageTransparentColor = Color.Magenta;
+ button.Name = cmd.GetType().Name + "ToolStripButton";
+ button.Tag = cmd;
+ button.Text = cmd.Name;
+ button.Click += CommandItemClick;
+
+ return button;
+ }
+
+ /// <summary>
+ /// Creates a tool strip menu item given the <typeparamref name = "TCommand" /> definition.
+ /// </summary>
+ /// <typeparam name = "TCommand">The type of the command.</typeparam>
+ /// <returns>A tool strip menu item wired to the commands <see cref = "ICommand.Execute" /> method.</returns>
+ public static ToolStripMenuItem CreateToolStripMenuItem<TCommand>() where TCommand : ICommand, new()
+ {
+ var menuItem = new ToolStripMenuItem();
+ var cmd = CommandManager.GetCommandInstance<TCommand>();
+
+ menuItem.Name = cmd.GetType().Name + "ToolStripMenuItem";
+ menuItem.Text = cmd.Name;
+ menuItem.Tag = cmd;
+ menuItem.ShortcutKeys = cmd.ShortcutKeys;
+ menuItem.Image = cmd.SmallImage;
+ menuItem.Click += CommandItemClick;
+
+ // store the host for callback
+ cmd.Host = menuItem;
+
+ // todo...
+ // if (!string.IsNullOrEmpty(cmd.ShortcutKeysText))
+ // {
+ // menuItem.ToolTipText = string.Format("{0} ({1})", cmd.Name, cmd.ShortcutKeysText);
+ // }
+
+ return menuItem;
+ }
+
+ /// <summary>
+ /// Creates a tool strip menu item seperator.
+ /// </summary>
+ /// <returns>A tool strip seperator.</returns>
+ public static ToolStripSeparator CreateToolStripMenuItemSeparator()
+ {
+ return new ToolStripSeparator();
+ }
+
+ /// <summary>
+ /// Assigns an event handler (<see cref = "TopLevelMenuDropDownOpening" />) to the opening event
+ /// for menu strip items which in turn hadles enableing and disabling.
+ /// </summary>
+ /// <param name = "menuStrip">The menu strip to monitor.</param>
+ public static void MonitorMenuItemsOpeningForEnabling(ToolStrip menuStrip)
+ {
+ if (menuStrip is ContextMenuStrip || menuStrip is MenuStrip)
+ {
+ foreach (ToolStripItem item in menuStrip.Items)
+ {
+ var topLevelMenu = item as ToolStripMenuItem;
+ if (topLevelMenu != null)
+ {
+ // Debug.WriteLine("MonitorMenuItemsOpeningForEnabling :: " + topLevelMenu.Text);
+ topLevelMenu.DropDownOpening += TopLevelMenuDropDownOpening;
+ topLevelMenu.DropDownClosed += TopLevelMenuDropDownClosed;
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Used when a menu is opening, handles enabling/disabling of items for display.
+ /// </summary>
+ /// <param name = "sender">The sender.</param>
+ /// <param name = "e">The <see cref = "System.EventArgs" /> instance containing the event data.</param>
+ [DebuggerNonUserCode]
+ public static void TopLevelMenuDropDownOpening(object sender, EventArgs e)
+ {
+ var menuItem = sender as ToolStripMenuItem;
+
+ if (menuItem != null)
+ {
+ foreach (ToolStripItem item in menuItem.DropDownItems)
+ {
+ var cmd = item.Tag as ICommand;
+
+ if (cmd != null)
+ {
+ item.Enabled = cmd.Enabled;
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// The link label link clicked.
+ /// </summary>
+ /// <param name = "sender">The sender.</param>
+ /// <param name = "e">The <see cref = "System.Windows.Forms.LinkLabelLinkClickedEventArgs" /> instance containing the event data.</param>
+ private static void LinkLabelLinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ var linkLabel = sender as Control;
+
+ if (linkLabel != null)
+ {
+ var cmd = linkLabel.Tag as ICommand;
+
+ if (cmd != null)
+ {
+ cmd.Execute();
+ }
+ }
+ }
+
+ /// <summary>
+ /// We need to re-enable all the menu items so that the shortcut keys are available.
+ /// This is because the model uses a continuous check approach rather than individual events
+ /// for the enabling.
+ /// </summary>
+ /// <param name = "sender">The sender.</param>
+ /// <param name = "e">The <see cref = "System.EventArgs" /> instance containing the event data.</param>
+ [DebuggerNonUserCode]
+ private static void TopLevelMenuDropDownClosed(object sender, EventArgs e)
+ {
+ var menuItem = sender as ToolStripMenuItem;
+
+ if (menuItem != null)
+ {
+ foreach (ToolStripItem item in menuItem.DropDownItems)
+ {
+ var cmd = item.Tag as ICommand;
+
+ if (cmd != null)
+ {
+ item.Enabled = true;
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/CommandManager.cs b/minisqlquery-master/src/MiniSqlQuery.Core/CommandManager.cs
new file mode 100644
index 0000000..e887c4a
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/CommandManager.cs
@@ -0,0 +1,86 @@
+#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;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Stores instances of commands by type.
+ /// </summary>
+ public class CommandManager
+ {
+ /// <summary>
+ /// The command cache.
+ /// </summary>
+ private static readonly Dictionary<Type, ICommand> CommandCache = new Dictionary<Type, ICommand>();
+
+ /// <summary>
+ /// Gets the command instance by <paramref name = "commandTypeName" />.
+ /// </summary>
+ /// <param name = "commandTypeName">Name of the command, e.g. "OpenFileCommand".</param>
+ /// <returns>The first command by that name or null if not found.</returns>
+ public static ICommand GetCommandInstance(string commandTypeName)
+ {
+ foreach (Type cmdType in CommandCache.Keys)
+ {
+ if (cmdType.Name == commandTypeName)
+ {
+ return CommandCache[cmdType];
+ }
+ }
+
+ return null;
+ }
+
+ /// <summary>
+ /// Gets or creates an instance of a command by type.
+ /// </summary>
+ /// <typeparam name = "TCommand">The type of command to get or create.</typeparam>
+ /// <returns>An instance of <typeparamref name = "TCommand" />.</returns>
+ public static ICommand GetCommandInstance<TCommand>() where TCommand : ICommand, new()
+ {
+ ICommand cmd;
+
+ if (CommandCache.ContainsKey(typeof(TCommand)))
+ {
+ cmd = CommandCache[typeof(TCommand)];
+ }
+ else
+ {
+ cmd = new TCommand();
+ cmd.Services = ApplicationServices.Instance;
+ cmd.Settings = ApplicationServices.Instance.Settings;
+ CommandCache[typeof(TCommand)] = cmd;
+ }
+
+ return cmd;
+ }
+
+ /// <summary>
+ /// Gets command instance by it's partial name, e.g. "OpenFile".
+ /// </summary>
+ /// <param name = "commandName">Name partial of the command.</param>
+ /// <returns>The first command by that name or null if not found.</returns>
+ public static ICommand GetCommandInstanceByPartialName(string commandName)
+ {
+ string cmdName = commandName + "Command";
+
+ foreach (Type cmdType in CommandCache.Keys)
+ {
+ if (cmdType.Name.EndsWith(commandName) || cmdType.Name.EndsWith(cmdName))
+ {
+ return CommandCache[cmdType];
+ }
+ }
+
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CancelTaskCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CancelTaskCommand.cs
new file mode 100644
index 0000000..b6eac44
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CancelTaskCommand.cs
@@ -0,0 +1,56 @@
+#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.Core.Commands
+{
+ /// <summary>
+ /// The cancel task command.
+ /// </summary>
+ public class CancelTaskCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "CancelTaskCommand" /> class.
+ /// </summary>
+ public CancelTaskCommand()
+ : base("&Cancel")
+ {
+ SmallImage = ImageResource.stop;
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether Enabled.
+ /// </summary>
+ /// <value>The enabled state.</value>
+ public override bool Enabled
+ {
+ get
+ {
+ var editor = HostWindow.ActiveChildForm as IPerformTask;
+ return editor != null && editor.IsBusy;
+ }
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ if (!Enabled)
+ {
+ return;
+ }
+
+ var editor = HostWindow.ActiveChildForm as IPerformTask;
+ if (editor != null)
+ {
+ editor.CancelTask();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CloseActiveWindowCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CloseActiveWindowCommand.cs
new file mode 100644
index 0000000..964a25e
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CloseActiveWindowCommand.cs
@@ -0,0 +1,46 @@
+#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.Core.Commands
+{
+ /// <summary>
+ /// The close active window command.
+ /// </summary>
+ public class CloseActiveWindowCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "CloseActiveWindowCommand" /> class.
+ /// </summary>
+ public CloseActiveWindowCommand()
+ : base("&Close")
+ {
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether Enabled.
+ /// </summary>
+ /// <value>The enabled state.</value>
+ public override bool Enabled
+ {
+ get { return HostWindow.ActiveChildForm != null; }
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ var frm = HostWindow.ActiveChildForm;
+ if (frm != null)
+ {
+ frm.Close();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CloseAllWindowsCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CloseAllWindowsCommand.cs
new file mode 100644
index 0000000..cbfa429
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CloseAllWindowsCommand.cs
@@ -0,0 +1,48 @@
+#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;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The close all windows command.
+ /// </summary>
+ public class CloseAllWindowsCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "CloseAllWindowsCommand" /> class.
+ /// </summary>
+ public CloseAllWindowsCommand()
+ : base("Close &All Windows")
+ {
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether Enabled.
+ /// </summary>
+ /// <value>The enabled state.</value>
+ public override bool Enabled
+ {
+ get { return HostWindow.ActiveChildForm != null; }
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ var forms = HostWindow.Instance.MdiChildren;
+ foreach (var frm in forms)
+ {
+ Application.DoEvents();
+ frm.Close();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CloseDatabaseConnectionCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CloseDatabaseConnectionCommand.cs
new file mode 100644
index 0000000..bd5f90b
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CloseDatabaseConnectionCommand.cs
@@ -0,0 +1,45 @@
+#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.Data;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>The close database connection command.</summary>
+ public class CloseDatabaseConnectionCommand
+ : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="CloseDatabaseConnectionCommand"/> class.</summary>
+ public CloseDatabaseConnectionCommand()
+ : base("Close Current connection")
+ {
+ }
+
+ /// <summary>Gets a value indicating whether Enabled.</summary>
+ /// <value>The enabled state.</value>
+ public override bool Enabled
+ {
+ get
+ {
+ if (Settings.Connection == null ||
+ (Settings.Connection.State == ConnectionState.Closed &&
+ Settings.Connection.State == ConnectionState.Broken))
+ {
+ return false;
+ }
+
+ return true;
+ }
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ Settings.CloseConnection();
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CommandBase.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CommandBase.cs
new file mode 100644
index 0000000..e56b9b2
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CommandBase.cs
@@ -0,0 +1,147 @@
+#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.Drawing;
+using System.Windows.Forms;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// <para>A basic implementation of the <see cref="ICommand"/> interface.</para>
+ /// <para>Represents a "command", typically a user action such as saving a file or executing a query.</para>
+ /// <para>Inheritors must implement the abstract method <see cref="Execute"/>.</para>
+ /// </summary>
+ public abstract class CommandBase : ICommand
+ {
+ /// <summary>
+ /// The host window.
+ /// </summary>
+ private IHostWindow _hostWindow;
+
+ /// <summary>
+ /// The command name.
+ /// </summary>
+ private string _name;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CommandBase"/> class.
+ /// The default value for <see cref="Enabled"/> is true, and <see cref="ShortcutKeys"/> is Keys.None.
+ /// </summary>
+ /// <param name="name">
+ /// The name of the command.
+ /// </param>
+ protected CommandBase(string name)
+ {
+ _name = name;
+ ShortcutKeys = Keys.None;
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether this <see cref = "ICommand" /> is enabled.
+ /// </summary>
+ /// <value><c>true</c> if enabled; otherwise, <c>false</c> (the default is true).</value>
+ public virtual bool Enabled
+ {
+ get { return true; }
+ }
+
+ public object Host { get; set; }
+
+ /// <summary>
+ /// The name of the command, used in menus and buttons.
+ /// </summary>
+ /// <value>The name of the command.</value>
+ public virtual string Name
+ {
+ get { return _name; }
+ protected set
+ {
+ if (_name == value)
+ {
+ return;
+ }
+
+ _name = value;
+
+ // if the "host" of this command is a toolstring item, update its Text property.
+ var item = Host as ToolStripItem;
+ if (item != null)
+ {
+ item.Text = _name;
+ }
+ }
+ }
+
+ /// <summary>
+ /// A reference to the application services to allow access to the other components.
+ /// </summary>
+ /// <value>A reference to the <see cref = "IApplicationServices" /> instance.</value>
+ public IApplicationServices Services { get; set; }
+
+ /// <summary>
+ /// Gets a reference to the application settings.
+ /// </summary>
+ /// <value>The application settings.</value>
+ public IApplicationSettings Settings { get; set; }
+
+ /// <summary>
+ /// Gets the menu shortcut keys for this command (e.g. Keys.F5).
+ /// </summary>
+ /// <value>The shortcut keys for this command (the default is Keys.None).</value>
+ public virtual Keys ShortcutKeys { get; protected set; }
+
+ /// <summary>
+ /// Gets the shortcut key text to be displayed as help.
+ /// </summary>
+ /// <value>The shortcut keys text.</value>
+ public string ShortcutKeysText { get; protected set; }
+
+ /// <summary>
+ /// Gets the "small image" associated with this control (for use on buttons or menu items).
+ /// Use null (or Nothing in Visual Basic) if there is no image.
+ /// </summary>
+ /// <value>The small image representing this command (the default is null).</value>
+ public virtual Image SmallImage { get; protected set; }
+
+ /// <summary>
+ /// Attempts to convert the current host windows active form to <see cref = "IEditor" />.
+ /// </summary>
+ /// <value>A reference to the active base editor window, otherwise null.</value>
+ protected IEditor ActiveFormAsEditor
+ {
+ get { return Services.HostWindow.ActiveChildForm as IEditor; }
+ }
+
+ /// <summary>
+ /// Attempts to convert the current host windows active form to <see cref = "IQueryEditor" />.
+ /// </summary>
+ /// <value>A reference to the active query editor window, otherwise null.</value>
+ protected IQueryEditor ActiveFormAsSqlQueryEditor
+ {
+ get { return Services.HostWindow.ActiveChildForm as IQueryEditor; }
+ }
+
+ /// <summary>
+ /// Gets a reference to the host window.
+ /// </summary>
+ /// <value>The host window.</value>
+ protected IHostWindow HostWindow
+ {
+ get { return _hostWindow ?? (_hostWindow = Services.HostWindow); }
+ }
+
+ /// <summary>
+ /// Executes the command based on the current settings (abstract).
+ /// </summary>
+ /// <remarks>
+ /// If a commands <see cref="Enabled"/> value is false, a call to <see cref="Execute"/> should have no effect
+ /// (and not throw an exception).
+ /// </remarks>
+ public abstract void Execute();
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ConvertTextToLowerCaseCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ConvertTextToLowerCaseCommand.cs
new file mode 100644
index 0000000..a83ec9a
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ConvertTextToLowerCaseCommand.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;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>The convert text to lower case command.</summary>
+ public class ConvertTextToLowerCaseCommand
+ : CommandBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="ConvertTextToLowerCaseCommand"/> class.</summary>
+ public ConvertTextToLowerCaseCommand()
+ : base("Convert to 'lower case' text")
+ {
+ ShortcutKeys = Keys.Control | Keys.U;
+ }
+
+ /// <summary>Gets a value indicating whether Enabled.</summary>
+ /// <value>The enabled state.</value>
+ public override bool Enabled
+ {
+ get { return HostWindow.ActiveChildForm as IEditor != null; }
+ }
+
+ /// <summary>Execute the command.</summary>
+ public override void Execute()
+ {
+ var editor = ActiveFormAsEditor;
+ if (Enabled && editor.SelectedText.Length > 0)
+ {
+ editor.InsertText(editor.SelectedText.ToLower());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ConvertTextToTitleCaseCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ConvertTextToTitleCaseCommand.cs
new file mode 100644
index 0000000..bb4d313
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ConvertTextToTitleCaseCommand.cs
@@ -0,0 +1,49 @@
+#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.Globalization;
+using System.Windows.Forms;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The convert text to title case command.
+ /// </summary>
+ public class ConvertTextToTitleCaseCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "ConvertTextToTitleCaseCommand" /> class.
+ /// </summary>
+ public ConvertTextToTitleCaseCommand()
+ : base("Convert to 'Title Case' text")
+ {
+ ShortcutKeys = Keys.Control | Keys.Alt | Keys.U;
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether Enabled.
+ /// </summary>
+ /// <value>The enabled state.</value>
+ public override bool Enabled
+ {
+ get { return HostWindow.ActiveChildForm as IEditor != null; }
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ var editor = ActiveFormAsEditor;
+ if (Enabled && editor.SelectedText.Length > 0)
+ {
+ editor.InsertText(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(editor.SelectedText));
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ConvertTextToUpperCaseCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ConvertTextToUpperCaseCommand.cs
new file mode 100644
index 0000000..c87b07d
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ConvertTextToUpperCaseCommand.cs
@@ -0,0 +1,48 @@
+#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;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The convert text to upper case command.
+ /// </summary>
+ public class ConvertTextToUpperCaseCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "ConvertTextToUpperCaseCommand" /> class.
+ /// </summary>
+ public ConvertTextToUpperCaseCommand()
+ : base("Convert to 'UPPER CASE' text")
+ {
+ ShortcutKeys = Keys.Control | Keys.Shift | Keys.U;
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether Enabled.
+ /// </summary>
+ /// <value>The enabled state.</value>
+ public override bool Enabled
+ {
+ get { return HostWindow.ActiveChildForm as IEditor != null; }
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ var editor = ActiveFormAsEditor;
+ if (Enabled && editor.SelectedText.Length > 0)
+ {
+ editor.InsertText(editor.SelectedText.ToUpper());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CopyQueryEditorFileNameCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CopyQueryEditorFileNameCommand.cs
new file mode 100644
index 0000000..bd0924f
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/CopyQueryEditorFileNameCommand.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.Windows.Forms;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The copy query editor file name command.
+ /// </summary>
+ public class CopyQueryEditorFileNameCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "CopyQueryEditorFileNameCommand" /> class.
+ /// </summary>
+ public CopyQueryEditorFileNameCommand()
+ : base("Copy Filename")
+ {
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ var editor = HostWindow.Instance.ActiveMdiChild as IEditor;
+ if (editor != null && editor.FileName != null)
+ {
+ Clipboard.SetText(editor.FileName);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/DisplayDbModelDependenciesCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/DisplayDbModelDependenciesCommand.cs
new file mode 100644
index 0000000..10ec35c
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/DisplayDbModelDependenciesCommand.cs
@@ -0,0 +1,66 @@
+#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.Text;
+using MiniSqlQuery.Core.DbModel;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The display db model dependencies command.
+ /// </summary>
+ public class DisplayDbModelDependenciesCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "DisplayDbModelDependenciesCommand" /> class.
+ /// </summary>
+ public DisplayDbModelDependenciesCommand()
+ : base("Order Tables by FK Dependencies")
+ {
+ SmallImage = ImageResource.table_link;
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ var editor = Services.Resolve<IEditor>("txt-editor");
+ editor.FileName = null;
+ HostWindow.DisplayDockedForm(editor as DockContent);
+
+ if (HostWindow.DatabaseInspector.DbSchema == null)
+ {
+ HostWindow.DatabaseInspector.LoadDatabaseDetails();
+ }
+
+ var dependencyWalker = new DbModelDependencyWalker(HostWindow.DatabaseInspector.DbSchema);
+ var tables = dependencyWalker.SortTablesByForeignKeyReferences();
+
+ var sb = new StringBuilder();
+ foreach (DbModelTable table in tables)
+ {
+ sb.AppendLine(table.FullName);
+ }
+
+ editor.AllText = sb.ToString();
+ }
+
+ /// <summary>
+ /// Gets a value indicating that the command can be executed (requires a connection).
+ /// </summary>
+ public override bool Enabled
+ {
+ get
+ {
+ return Services.Settings.ConnectionDefinition != null;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/EmailAuthorCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/EmailAuthorCommand.cs
new file mode 100644
index 0000000..6cb6567
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/EmailAuthorCommand.cs
@@ -0,0 +1,27 @@
+#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.Core.Commands
+{
+ /// <summary>
+ /// The email author command.
+ /// </summary>
+ public class EmailAuthorCommand
+ : ShowUrlCommand
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "EmailAuthorCommand" /> class.
+ /// </summary>
+ public EmailAuthorCommand()
+ : base("Email the Author", "mailto:mr.paul.kohler" +
+ '@' + /* bla */
+ "gmail.com?subject=Mini SQL Query Feedback", ImageResource.email)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ExecuteTaskCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ExecuteTaskCommand.cs
new file mode 100644
index 0000000..43980da
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ExecuteTaskCommand.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;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The execute task command.
+ /// </summary>
+ public class ExecuteTaskCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "ExecuteTaskCommand" /> class.
+ /// </summary>
+ public ExecuteTaskCommand()
+ : base("&Execute")
+ {
+ ShortcutKeys = Keys.F5;
+ ShortcutKeysText = "F5";
+ SmallImage = ImageResource.lightning;
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether Enabled.
+ /// </summary>
+ /// <value>The enabled state.</value>
+ public override bool Enabled
+ {
+ get
+ {
+ var editor = HostWindow.ActiveChildForm as IPerformTask;
+ if (editor != null)
+ {
+ return !editor.IsBusy;
+ }
+
+ return false;
+ }
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ if (!Enabled)
+ {
+ return;
+ }
+
+ var editor = HostWindow.ActiveChildForm as IPerformTask;
+ if (editor != null)
+ {
+ editor.ExecuteTask();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ExitApplicationCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ExitApplicationCommand.cs
new file mode 100644
index 0000000..4c557fb
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ExitApplicationCommand.cs
@@ -0,0 +1,33 @@
+#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.Core.Commands
+{
+ /// <summary>
+ /// The exit application command.
+ /// </summary>
+ public class ExitApplicationCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "ExitApplicationCommand" /> class.
+ /// </summary>
+ public ExitApplicationCommand()
+ : base("E&xit")
+ {
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ HostWindow.Instance.Close();
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/GenerateCommandCodeCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/GenerateCommandCodeCommand.cs
new file mode 100644
index 0000000..3df9662
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/GenerateCommandCodeCommand.cs
@@ -0,0 +1,61 @@
+#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 Ninject;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The generate command code command.
+ /// </summary>
+ public class GenerateCommandCodeCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "GenerateCommandCodeCommand" /> class.
+ /// </summary>
+ public GenerateCommandCodeCommand()
+ : base("Generate Command Code")
+ {
+ SmallImage = ImageResource.cog;
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ string template =
+ @" public class $name$Command
+ : CommandBase
+ {
+ public $name$Command()
+ : base(""$desc$"")
+ {
+ //ShortcutKeys = Keys.Control | Keys.?;
+ //SmallImage = ImageResource.?;
+ }
+
+ public override void Execute()
+ {
+
+ }
+ }";
+
+ string code = template
+ .Replace("$name$", "OI")
+ .Replace("$desc$", "a thing");
+
+ var editor = Services.Container.Get<IQueryEditor>();
+ editor.AllText = code;
+ editor.SetSyntax("C#");
+
+ HostWindow.DisplayDockedForm(editor as DockContent);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/InsertGuidCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/InsertGuidCommand.cs
new file mode 100644
index 0000000..1d91a82
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/InsertGuidCommand.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;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The insert guid command.
+ /// </summary>
+ public class InsertGuidCommand : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "InsertGuidCommand" /> class.
+ /// </summary>
+ public InsertGuidCommand()
+ : base("Insert GUID")
+ {
+ // todo SmallImage = ImageResource.;
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether Enabled.
+ /// </summary>
+ /// <value>The enabled state.</value>
+ public override bool Enabled
+ {
+ get { return ActiveFormAsEditor != null; }
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ var editor = ActiveFormAsEditor;
+ if (editor != null)
+ {
+ editor.InsertText(Guid.NewGuid().ToString());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/NewQueryFormCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/NewQueryFormCommand.cs
new file mode 100644
index 0000000..61d72e3
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/NewQueryFormCommand.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 Ninject;
+using WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The new query form command.
+ /// </summary>
+ public class NewQueryFormCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "NewQueryFormCommand" /> class.
+ /// </summary>
+ public NewQueryFormCommand()
+ : base("New &Query Window")
+ {
+ ShortcutKeys = Keys.Control | Keys.N;
+ SmallImage = ImageResource.page_white;
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ var editor = Services.Container.Get<IQueryEditor>();
+ editor.FileName = null;
+ HostWindow.DisplayDockedForm(editor as DockContent);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/OpenConnectionFileCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/OpenConnectionFileCommand.cs
new file mode 100644
index 0000000..7c58716
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/OpenConnectionFileCommand.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 WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The open connection file command.
+ /// </summary>
+ public class OpenConnectionFileCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "OpenConnectionFileCommand" /> class.
+ /// </summary>
+ public OpenConnectionFileCommand()
+ : base("Open the connections file")
+ {
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ string xmlFile = Utility.GetConnectionStringFilename();
+ IEditor editor = Services.Resolve<IFileEditorResolver>().ResolveEditorInstance(xmlFile);
+ editor.FileName = xmlFile;
+ editor.LoadFile();
+ HostWindow.DisplayDockedForm(editor as DockContent);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/PasteAroundSelectionCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/PasteAroundSelectionCommand.cs
new file mode 100644
index 0000000..d132f55
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/PasteAroundSelectionCommand.cs
@@ -0,0 +1,52 @@
+#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;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// Description of PasteAroundSelectionCommand.
+ /// </summary>
+ public class PasteAroundSelectionCommand : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "PasteAroundSelectionCommand" /> class.
+ /// </summary>
+ public PasteAroundSelectionCommand()
+ : base("Paste &Around Selection")
+ {
+ ShortcutKeys = Keys.Alt | Keys.A;
+ SmallImage = ImageResource.around_text;
+ }
+
+ /// <summary>
+ /// Gets or sets the "left text".
+ /// </summary>
+ /// <value>The "left text".</value>
+ public static string LeftText { get; set; }
+
+ /// <summary>
+ /// Gets or sets the "right text".
+ /// </summary>
+ /// <value>The "right text".</value>
+ public static string RightText { get; set; }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ var queryForm = HostWindow.Instance.ActiveMdiChild as IQueryEditor;
+ if (queryForm != null)
+ {
+ string newText = string.Concat(LeftText, queryForm.SelectedText, RightText);
+ queryForm.InsertText(newText);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/PrintCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/PrintCommand.cs
new file mode 100644
index 0000000..c2b2890
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/PrintCommand.cs
@@ -0,0 +1,78 @@
+#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;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The print command.
+ /// </summary>
+ public class PrintCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "PrintCommand" /> class.
+ /// </summary>
+ public PrintCommand()
+ : base("Print...")
+ {
+ SmallImage = ImageResource.printer;
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether Enabled.
+ /// </summary>
+ /// <value>The enabled state.</value>
+ public override bool Enabled
+ {
+ get
+ {
+ var printable = HostWindow.ActiveChildForm as IPrintableContent;
+ if (printable != null)
+ {
+ var doc = printable.PrintDocument;
+
+ if (doc != null)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ var printable = HostWindow.ActiveChildForm as IPrintableContent;
+ if (printable != null)
+ {
+ var doc = printable.PrintDocument;
+
+ if (doc != null)
+ {
+ using (var ppd = new PrintDialog())
+ {
+ ppd.Document = doc;
+ ppd.AllowSomePages = true;
+ // https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k(System.Windows.Forms.PrintDialog.UseEXDialog);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv3.5);k(DevLang-csharp)&rd=true#Anchor_1
+ ppd.UseEXDialog = true;
+
+ if (ppd.ShowDialog(HostWindow.Instance) == DialogResult.OK)
+ {
+ doc.Print();
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/RefreshDatabaseConnectionCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/RefreshDatabaseConnectionCommand.cs
new file mode 100644
index 0000000..73ec1a8
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/RefreshDatabaseConnectionCommand.cs
@@ -0,0 +1,44 @@
+#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;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The refresh database connection command.
+ /// </summary>
+ public class RefreshDatabaseConnectionCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "RefreshDatabaseConnectionCommand" /> class.
+ /// </summary>
+ public RefreshDatabaseConnectionCommand()
+ : base("&Refresh Database Connection")
+ {
+ SmallImage = ImageResource.database_refresh;
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ try
+ {
+ HostWindow.SetPointerState(Cursors.WaitCursor);
+ Settings.ResetConnection();
+ HostWindow.SetStatus(null, "Connection reset");
+ }
+ finally
+ {
+ HostWindow.SetPointerState(Cursors.Default);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/SetLeftPasteAroundSelectionCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/SetLeftPasteAroundSelectionCommand.cs
new file mode 100644
index 0000000..31d5faf
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/SetLeftPasteAroundSelectionCommand.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.Windows.Forms;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The set left paste around selection command.
+ /// </summary>
+ public class SetLeftPasteAroundSelectionCommand : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "SetLeftPasteAroundSelectionCommand" /> class.
+ /// </summary>
+ public SetLeftPasteAroundSelectionCommand()
+ : base("Set Left Paste Around Selection text")
+ {
+ ShortcutKeys = Keys.Alt | Keys.F1;
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ var queryForm = HostWindow.Instance.ActiveMdiChild as IQueryEditor;
+ if (queryForm != null)
+ {
+ PasteAroundSelectionCommand.LeftText = queryForm.SelectedText;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/SetRightPasteAroundSelectionCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/SetRightPasteAroundSelectionCommand.cs
new file mode 100644
index 0000000..e7947ff
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/SetRightPasteAroundSelectionCommand.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.Windows.Forms;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The set right paste around selection command.
+ /// </summary>
+ public class SetRightPasteAroundSelectionCommand : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "SetRightPasteAroundSelectionCommand" /> class.
+ /// </summary>
+ public SetRightPasteAroundSelectionCommand()
+ : base("Set Right Paste Around Selection text")
+ {
+ ShortcutKeys = Keys.Alt | Keys.F2;
+ }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ var queryForm = HostWindow.Instance.ActiveMdiChild as IQueryEditor;
+ if (queryForm != null)
+ {
+ PasteAroundSelectionCommand.RightText = queryForm.SelectedText;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ShowHelpCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ShowHelpCommand.cs
new file mode 100644
index 0000000..4addead
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ShowHelpCommand.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
+
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The show help command.
+ /// </summary>
+ public class ShowHelpCommand
+ : ShowUrlCommand
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "ShowHelpCommand" /> class.
+ /// </summary>
+ public ShowHelpCommand()
+ : base("&Index (github.com ... Quickstart.md)", "https://github.com/paulkohler/minisqlquery/blob/master/src/Docs/Quickstart.md", ImageResource.help)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ShowUrlCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ShowUrlCommand.cs
new file mode 100644
index 0000000..9507141
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ShowUrlCommand.cs
@@ -0,0 +1,51 @@
+#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.Drawing;
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The show url command.
+ /// </summary>
+ public class ShowUrlCommand
+ : CommandBase
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ShowUrlCommand"/> class.
+ /// </summary>
+ /// <param name="name">
+ /// The name of the command.
+ /// </param>
+ /// <param name="url">
+ /// The url of the link to display in a browser.
+ /// </param>
+ /// <param name="image">
+ /// The image to use from the resources.
+ /// </param>
+ public ShowUrlCommand(string name, string url, Image image)
+ : base(name)
+ {
+ Url = url;
+ SmallImage = image;
+ }
+
+ /// <summary>
+ /// Gets or sets Url.
+ /// </summary>
+ /// <value>The url.</value>
+ public string Url { get; protected set; }
+
+ /// <summary>
+ /// Execute the command.
+ /// </summary>
+ public override void Execute()
+ {
+ Utility.ShowUrl(Url);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ShowWebPageCommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ShowWebPageCommand.cs
new file mode 100644
index 0000000..9fb5322
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Commands/ShowWebPageCommand.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
+
+
+namespace MiniSqlQuery.Core.Commands
+{
+ /// <summary>
+ /// The show web page command.
+ /// </summary>
+ public class ShowWebPageCommand
+ : ShowUrlCommand
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "ShowWebPageCommand" /> class.
+ /// </summary>
+ public ShowWebPageCommand()
+ : base("Mini SQL Query on GitHub", "https://github.com/paulkohler/minisqlquery", ImageResource.house)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/ConnectionDefinition.cs b/minisqlquery-master/src/MiniSqlQuery.Core/ConnectionDefinition.cs
new file mode 100644
index 0000000..4c001d9
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/ConnectionDefinition.cs
@@ -0,0 +1,148 @@
+#region License
+// Copyright 2005-2009 Paul Kohler (http://pksoftware.net/MiniSqlQuery/). All rights reserved.
+// This source code is made available under the terms of the Microsoft Public License (Ms-PL)
+// http://minisqlquery.codeplex.com/license
+#endregion
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Provides a defition of database connections by provider and name.
+ /// </summary>
+ [Obsolete]
+ public class ConnectionDefinition
+ {
+ /// <summary>
+ /// The character used to "split" the definition text into its components.
+ /// </summary>
+ public const char SplitChar = '^';
+
+ /// <summary>
+ /// The prefix character for comments in the definition text.
+ /// </summary>
+ public const string CommentPrefix = "#";
+
+ /// <summary>
+ /// Gets or sets the name.
+ /// </summary>
+ /// <value>The name.</value>
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or sets the name of the provider.
+ /// </summary>
+ /// <value>The name of the provider.</value>
+ public string ProviderName { get; set; }
+
+ /// <summary>
+ /// Gets or sets the connection string.
+ /// </summary>
+ /// <value>The connection string.</value>
+ public string ConnectionString { get; set; }
+
+ /// <summary>
+ /// A default connection, an MSSQL db on localhost connecting to "master".
+ /// </summary>
+ public static readonly ConnectionDefinition Default;
+
+ /// <summary>
+ /// Initializes the <see cref="ConnectionDefinition"/> class.
+ /// </summary>
+ static ConnectionDefinition()
+ {
+ Default = new ConnectionDefinition()
+ {
+ Name = "Default - MSSQL Master@localhost",
+ ProviderName = "System.Data.SqlClient",
+ ConnectionString = @"Server=.; Database=Master; Integrated Security=SSPI"
+ };
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ConnectionDefinition"/> class.
+ /// </summary>
+ public ConnectionDefinition()
+ {
+ }
+
+ /// <summary>
+ /// Parses the specified <paramref name="definition"/> string.
+ /// </summary>
+ /// <param name="definition">The definition string, e.g. "Default - MSSQL Master@localhost ^ System.Data.SqlClient ^ Server=.; Database=master; Integrated Security=SSPI".</param>
+ /// <returns>A new <see cref="ConnectionDefinition"/> object or null.</returns>
+ public static ConnectionDefinition Parse(string definition)
+ {
+ ConnectionDefinition connDef = null;
+
+ if (string.IsNullOrEmpty(definition) == false)
+ {
+ if (definition.StartsWith(CommentPrefix) == false)
+ {
+ string[] parts = definition.Split(new char[] { SplitChar }, StringSplitOptions.RemoveEmptyEntries);
+ if (parts != null)
+ {
+ if (parts.Length == 3)
+ {
+ connDef = new ConnectionDefinition()
+ {
+ Name = parts[0].Trim(),
+ ProviderName = parts[1].Trim(),
+ ConnectionString = parts[2].Trim()
+ };
+ }
+ }
+ }
+ }
+
+ return connDef;
+ }
+
+ /// <summary>
+ /// Parses the specified definitions.
+ /// </summary>
+ /// <param name="definitions">The definitions.</param>
+ /// <returns>An array of <see cref="ConnectionDefinition"/> objects.</returns>
+ public static ConnectionDefinition[] Parse(string[] definitions)
+ {
+ List<ConnectionDefinition> conDefs = new List<ConnectionDefinition>();
+
+ if (definitions != null)
+ {
+ foreach (string definition in definitions)
+ {
+ ConnectionDefinition conDef = ConnectionDefinition.Parse(definition);
+ if (conDef != null)
+ {
+ conDefs.Add(conDef);
+ }
+ }
+ }
+
+ return conDefs.ToArray();
+ }
+
+ /// <summary>
+ /// Converts the data to a parsable format.
+ /// </summary>
+ /// <returns></returns>
+ public string ToParsableFormat()
+ {
+ return string.Concat(Name, SplitChar, ProviderName, SplitChar, ConnectionString);
+ }
+
+ /// <summary>
+ /// Returns a <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
+ /// </summary>
+ /// <returns>
+ /// A <see cref="T:System.String"/> that represents the current <see cref="T:System.Object"/>.
+ /// </returns>
+ public override string ToString()
+ {
+ return Name ?? GetType().FullName;
+ }
+ }
+}
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Controls/BatchQuerySelectControl.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/BatchQuerySelectControl.cs
new file mode 100644
index 0000000..2211260
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/BatchQuerySelectControl.cs
@@ -0,0 +1,72 @@
+#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;
+
+namespace MiniSqlQuery.Core.Controls
+{
+ /// <summary>A batch query selection control is used for displaying multiple result sets and allows
+ /// the user to select one (e.g. for exports etc).</summary>
+ public partial class BatchQuerySelectControl : UserControl
+ {
+ /// <summary>The _batch.</summary>
+ private QueryBatch _batch;
+
+ /// <summary>The _selected query.</summary>
+ private Query _selectedQuery;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="BatchQuerySelectControl"/> class.
+ /// </summary>
+ public BatchQuerySelectControl()
+ {
+ InitializeComponent();
+ }
+
+ /// <summary>
+ /// Gets the selected query.
+ /// </summary>
+ /// <value>The selected query.</value>
+ public Query SelectedQuery
+ {
+ get { return _selectedQuery; }
+ }
+
+ /// <summary>Fills the list with the batch result sets.</summary>
+ /// <param name="batch">The query batch.</param>
+ public void Fill(QueryBatch batch)
+ {
+ _batch = batch;
+ lstBatches.Items.Clear();
+ if (batch == null)
+ {
+ return;
+ }
+
+ for (int setIndex = 0; setIndex < batch.Queries.Count; setIndex++)
+ {
+ var query = batch.Queries[setIndex];
+ if (query.Result != null && query.Result.Tables.Count > 0)
+ {
+ string setName = string.Format("Result Set {0} ({1} tables)", setIndex, query.Result.Tables.Count);
+ lstBatches.Items.Add(setName);
+ }
+ }
+
+ lstBatches.SelectedIndex = 0;
+ }
+
+ /// <summary>The lst batches_ selected index changed.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void lstBatches_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ _selectedQuery = _batch.Queries[lstBatches.SelectedIndex];
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Controls/BatchQuerySelectControl.Designer.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/BatchQuerySelectControl.Designer.cs
new file mode 100644
index 0000000..65790b3
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/BatchQuerySelectControl.Designer.cs
@@ -0,0 +1,59 @@
+namespace MiniSqlQuery.Core.Controls
+{
+ partial class BatchQuerySelectControl
+ {
+ /// <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 Component 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.lstBatches = new System.Windows.Forms.ListBox();
+ this.SuspendLayout();
+ //
+ // lstBatches
+ //
+ this.lstBatches.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.lstBatches.FormattingEnabled = true;
+ this.lstBatches.Location = new System.Drawing.Point(0, 0);
+ this.lstBatches.Name = "lstBatches";
+ this.lstBatches.Size = new System.Drawing.Size(293, 160);
+ this.lstBatches.TabIndex = 0;
+ this.lstBatches.SelectedIndexChanged += new System.EventHandler(this.lstBatches_SelectedIndexChanged);
+ //
+ // BatchQuerySelectControl
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.lstBatches);
+ this.Name = "BatchQuerySelectControl";
+ this.Size = new System.Drawing.Size(293, 163);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ListBox lstBatches;
+ }
+}
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Controls/BatchQuerySelectControl.resx b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/BatchQuerySelectControl.resx
new file mode 100644
index 0000000..19dc0dd
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/BatchQuerySelectControl.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.Core/Controls/ExceptionControl.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/ExceptionControl.cs
new file mode 100644
index 0000000..be6a39b
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/ExceptionControl.cs
@@ -0,0 +1,51 @@
+#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;
+
+namespace MiniSqlQuery.Core.Controls
+{
+ /// <summary>A basic control for displaying an unhandled exception.</summary>
+ public partial class ExceptionControl : UserControl
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ExceptionControl"/> class.
+ /// </summary>
+ public ExceptionControl()
+ {
+ InitializeComponent();
+ }
+
+ /// <summary>Sets the exception to display.</summary>
+ /// <param name="exp">The exception object.</param>
+ public void SetException(Exception exp)
+ {
+ if (exp != null)
+ {
+ lblError.Text = exp.GetType().FullName;
+ txtMessage.Text = exp.Message;
+ txtDetails.Text = exp.ToString();
+ }
+ }
+
+ /// <summary>The exception control_ load.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void ExceptionControl_Load(object sender, EventArgs e)
+ {
+ }
+
+ /// <summary>The lnk copy_ link clicked.</summary>
+ /// <param name="sender">The sender.</param>
+ /// <param name="e">The e.</param>
+ private void lnkCopy_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ Clipboard.SetText(txtDetails.Text);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Controls/ExceptionControl.Designer.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/ExceptionControl.Designer.cs
new file mode 100644
index 0000000..51a3d8d
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/ExceptionControl.Designer.cs
@@ -0,0 +1,119 @@
+namespace MiniSqlQuery.Core.Controls
+{
+ partial class ExceptionControl
+ {
+ /// <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 Component 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.lblError = new System.Windows.Forms.Label();
+ this.txtMessage = new System.Windows.Forms.TextBox();
+ this.txtDetails = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.lnkCopy = new System.Windows.Forms.LinkLabel();
+ this.SuspendLayout();
+ //
+ // lblError
+ //
+ this.lblError.AutoSize = true;
+ this.lblError.Location = new System.Drawing.Point(3, 0);
+ this.lblError.Name = "lblError";
+ this.lblError.Size = new System.Drawing.Size(29, 13);
+ this.lblError.TabIndex = 0;
+ this.lblError.Text = "Error";
+ //
+ // txtMessage
+ //
+ this.txtMessage.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtMessage.Location = new System.Drawing.Point(6, 16);
+ this.txtMessage.Multiline = true;
+ this.txtMessage.Name = "txtMessage";
+ this.txtMessage.ReadOnly = true;
+ this.txtMessage.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+ this.txtMessage.Size = new System.Drawing.Size(428, 54);
+ this.txtMessage.TabIndex = 1;
+ //
+ // txtDetails
+ //
+ this.txtDetails.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.txtDetails.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.txtDetails.Location = new System.Drawing.Point(6, 94);
+ this.txtDetails.Multiline = true;
+ this.txtDetails.Name = "txtDetails";
+ this.txtDetails.ReadOnly = true;
+ this.txtDetails.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+ this.txtDetails.Size = new System.Drawing.Size(428, 142);
+ this.txtDetails.TabIndex = 3;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(3, 78);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(39, 13);
+ this.label2.TabIndex = 2;
+ this.label2.Text = "Details";
+ //
+ // lnkCopy
+ //
+ this.lnkCopy.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.lnkCopy.AutoSize = true;
+ this.lnkCopy.Location = new System.Drawing.Point(344, 239);
+ this.lnkCopy.Name = "lnkCopy";
+ this.lnkCopy.Size = new System.Drawing.Size(90, 13);
+ this.lnkCopy.TabIndex = 4;
+ this.lnkCopy.TabStop = true;
+ this.lnkCopy.Text = "Copy to Clipboard";
+ this.lnkCopy.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkCopy_LinkClicked);
+ //
+ // ExceptionControl
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.lnkCopy);
+ this.Controls.Add(this.txtDetails);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.txtMessage);
+ this.Controls.Add(this.lblError);
+ this.Name = "ExceptionControl";
+ this.Size = new System.Drawing.Size(437, 256);
+ this.Load += new System.EventHandler(this.ExceptionControl_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label lblError;
+ private System.Windows.Forms.TextBox txtMessage;
+ private System.Windows.Forms.TextBox txtDetails;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.LinkLabel lnkCopy;
+ }
+}
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Controls/ExceptionControl.resx b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/ExceptionControl.resx
new file mode 100644
index 0000000..19dc0dd
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/ExceptionControl.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.Core/Controls/PluginListControl.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/PluginListControl.cs
new file mode 100644
index 0000000..28e2ff7
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/PluginListControl.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 System.Windows.Forms;
+
+namespace MiniSqlQuery.Core.Controls
+{
+ /// <summary>A simple control to display plugin details.</summary>
+ public partial class PluginListControl : UserControl
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="PluginListControl"/> class.
+ /// </summary>
+ public PluginListControl()
+ {
+ InitializeComponent();
+ }
+
+ /// <summary>Sets the data source to the <paramref name="plugins"/>.</summary>
+ /// <param name="plugins">The plugins to display.</param>
+ public void SetDataSource(IPlugIn[] plugins)
+ {
+ foreach (IPlugIn plugin in plugins)
+ {
+ ListViewItem item = new ListViewItem(new[]
+ {
+ plugin.PluginName, plugin.PluginDescription, plugin.GetType().Assembly.FullName
+ });
+ listView1.Items.Add(item);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Controls/PluginListControl.Designer.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/PluginListControl.Designer.cs
new file mode 100644
index 0000000..7dd82b8
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/PluginListControl.Designer.cs
@@ -0,0 +1,84 @@
+namespace MiniSqlQuery.Core.Controls
+{
+ partial class PluginListControl
+ {
+ /// <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 Component 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.listView1 = new System.Windows.Forms.ListView();
+ this.columnHeaderName = new System.Windows.Forms.ColumnHeader();
+ this.columnHeaderDescription = new System.Windows.Forms.ColumnHeader();
+ this.columnHeaderAssembly = new System.Windows.Forms.ColumnHeader();
+ this.SuspendLayout();
+ //
+ // listView1
+ //
+ this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.columnHeaderName,
+ this.columnHeaderDescription,
+ this.columnHeaderAssembly});
+ this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.listView1.Location = new System.Drawing.Point(0, 0);
+ this.listView1.Name = "listView1";
+ this.listView1.Size = new System.Drawing.Size(361, 146);
+ this.listView1.TabIndex = 0;
+ this.listView1.UseCompatibleStateImageBehavior = false;
+ this.listView1.View = System.Windows.Forms.View.Details;
+ //
+ // columnHeaderName
+ //
+ this.columnHeaderName.Text = "Name";
+ this.columnHeaderName.Width = 150;
+ //
+ // columnHeaderDescription
+ //
+ this.columnHeaderDescription.Text = "Description";
+ this.columnHeaderDescription.Width = 200;
+ //
+ // columnHeaderAssembly
+ //
+ this.columnHeaderAssembly.Text = "Assembly";
+ this.columnHeaderAssembly.Width = 200;
+ //
+ // PluginListControl
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.listView1);
+ this.Name = "PluginListControl";
+ this.Size = new System.Drawing.Size(361, 146);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ListView listView1;
+ private System.Windows.Forms.ColumnHeader columnHeaderName;
+ private System.Windows.Forms.ColumnHeader columnHeaderDescription;
+ private System.Windows.Forms.ColumnHeader columnHeaderAssembly;
+ }
+}
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Controls/PluginListControl.resx b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/PluginListControl.resx
new file mode 100644
index 0000000..19dc0dd
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Controls/PluginListControl.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.Core/DatabaseMetaDataService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DatabaseMetaDataService.cs
new file mode 100644
index 0000000..5ffe49b
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DatabaseMetaDataService.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 MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Creates <see cref="IDatabaseSchemaService"/> instance to provide a simplified view of the database schema.
+ /// </summary>
+ public class DatabaseMetaDataService
+ {
+ /// <summary>
+ /// Creates a schema service for a database depending on the <paramref name = "providerName" />.
+ /// Currently has specific providers for MSSQL, MSSQL CE and OLE DB.
+ /// The <see cref="GenericSchemaService"/> is the fallback option.
+ /// </summary>
+ /// <param name = "providerName">The provider name, e.g. "System.Data.SqlClient".</param>
+ /// <returns>
+ /// A schema serivce for the based on the <paramref name = "providerName" />.
+ /// The default is <see cref = "GenericSchemaService" />.
+ /// </returns>
+ public static IDatabaseSchemaService Create(string providerName)
+ {
+ switch (providerName)
+ {
+ case "System.Data.OleDb":
+ return new OleDbSchemaService { ProviderName = providerName };
+
+ case "System.Data.SqlClient":
+ return new SqlClientSchemaService { ProviderName = providerName };
+ case "Oracle.DataAccess.Client":
+ return new OracleSchemaService { ProviderName = providerName };
+ default:
+ // The SQL CE types tend to include the version number within the provider name, hence "StartsWith"
+ if (providerName.StartsWith("System.Data.SqlServerCe."))
+ {
+ return new SqlCeSchemaService { ProviderName = providerName };
+ }
+
+ return new GenericSchemaService { ProviderName = providerName };
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DBConnectionDefinition.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DBConnectionDefinition.cs
new file mode 100644
index 0000000..39fed27
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DBConnectionDefinition.cs
@@ -0,0 +1,99 @@
+#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.Xml.Serialization;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Provides a defition of database connection by provider and name.
+ /// </summary>
+ [Serializable]
+ public class DbConnectionDefinition
+ {
+ /// <summary>
+ /// A default connection, an MSSQL db on localhost connecting to the "master" database using integrated authentication.
+ /// </summary>
+ [XmlIgnore] public static readonly DbConnectionDefinition Default;
+
+ /// <summary>
+ /// Initializes static members of the <see cref = "DbConnectionDefinition" /> class.
+ /// </summary>
+ static DbConnectionDefinition()
+ {
+ Default = new DbConnectionDefinition
+ {
+ Name = "Default - MSSQL Master@localhost",
+ ProviderName = "System.Data.SqlClient",
+ ConnectionString = @"Server=.; Database=Master; Integrated Security=SSPI"
+ };
+ }
+
+ /// <summary>
+ /// Gets or sets a comment in relation to this connection, e.g. "development..."
+ /// </summary>
+ /// <value>A comment.</value>
+ [XmlElement(IsNullable = true)]
+ public string Comment { get; set; }
+
+ /// <summary>
+ /// Gets or sets the connection string.
+ /// </summary>
+ /// <value>The connection string.</value>
+ [XmlElement(IsNullable = false)]
+ public string ConnectionString { get; set; }
+
+ /// <summary>
+ /// Gets or sets the name.
+ /// </summary>
+ /// <value>The name of the definition.</value>
+ [XmlElement(IsNullable = false)]
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or sets the name of the provider.
+ /// </summary>
+ /// <value>The name of the provider.</value>
+ [XmlElement(IsNullable = false)]
+ public string ProviderName { get; set; }
+
+ /// <summary>
+ /// Converts the definition from an XML string.
+ /// </summary>
+ /// <param name = "xml">The XML to hydrate from.</param>
+ /// <returns>A <see cref="DbConnectionDefinition"/> instance.</returns>
+ public static DbConnectionDefinition FromXml(string xml)
+ {
+ using (var sr = new StringReader(xml))
+ {
+ var serializer = new XmlSerializer(typeof(DbConnectionDefinition));
+ return (DbConnectionDefinition)serializer.Deserialize(sr);
+ }
+ }
+
+ /// <summary>
+ /// Returns a <see cref = "T:System.String" /> that represents the current <see cref = "T:System.Object" />.
+ /// </summary>
+ /// <returns>A <see cref = "T:System.String" /> that represents the current <see cref = "T:System.Object" />.</returns>
+ public override string ToString()
+ {
+ return Name ?? GetType().FullName;
+ }
+
+ /// <summary>
+ /// Serialize the object to XML.
+ /// </summary>
+ /// <returns>An XML string.</returns>
+ public string ToXml()
+ {
+ return Utility.ToXml(this);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DBConnectionDefinitionList.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DBConnectionDefinitionList.cs
new file mode 100644
index 0000000..135f98a
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DBConnectionDefinitionList.cs
@@ -0,0 +1,101 @@
+#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.Xml.Serialization;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Manages a list of database connections.
+ /// </summary>
+ [Serializable]
+ public class DbConnectionDefinitionList
+ {
+ // store internally as a list
+ /// <summary>
+ /// An class refernece to the database definitions.
+ /// </summary>
+ private readonly List<DbConnectionDefinition> _definitions;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "DbConnectionDefinitionList" /> class.
+ /// </summary>
+ public DbConnectionDefinitionList()
+ {
+ _definitions = new List<DbConnectionDefinition>();
+ }
+
+ /// <summary>
+ /// Gets or sets the default name of a connection definition from the list of <see cref = "Definitions" />.
+ /// </summary>
+ /// <value>The default name.</value>
+ public string DefaultName { get; set; }
+
+ /// <summary>
+ /// Gets or sets the connection definitions.
+ /// </summary>
+ /// <value>The definitions.</value>
+ public DbConnectionDefinition[] Definitions
+ {
+ get
+ {
+ return _definitions.ToArray();
+ }
+ set
+ {
+ _definitions.Clear();
+ _definitions.AddRange(value);
+ }
+ }
+
+ /// <summary>
+ /// Creates a <see cref = "DbConnectionDefinitionList" /> from a string of <paramref name = "xml" />.
+ /// </summary>
+ /// <param name = "xml">The XML to hydrate from.</param>
+ /// <returns>An instance of <see cref = "DbConnectionDefinitionList" />.</returns>
+ public static DbConnectionDefinitionList FromXml(string xml)
+ {
+ using (var sr = new StringReader(xml))
+ {
+ var serializer = new XmlSerializer(typeof(DbConnectionDefinitionList));
+ return (DbConnectionDefinitionList)serializer.Deserialize(sr);
+ }
+ }
+
+ /// <summary>
+ /// Adds the definition from the list.
+ /// </summary>
+ /// <param name = "connectionDefinition">The connection definition.</param>
+ public void AddDefinition(DbConnectionDefinition connectionDefinition)
+ {
+ _definitions.Add(connectionDefinition);
+ }
+
+ /// <summary>
+ /// Removes the definition from the list.
+ /// </summary>
+ /// <param name = "connectionDefinition">The connection definition.</param>
+ /// <returns>True if the item was removed.</returns>
+ public bool RemoveDefinition(DbConnectionDefinition connectionDefinition)
+ {
+ return _definitions.Remove(connectionDefinition);
+ }
+
+ /// <summary>
+ /// Serialize the list to XML.
+ /// </summary>
+ /// <returns>An XML string.</returns>
+ public string ToXml()
+ {
+ return Utility.ToXml(this);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelColumn.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelColumn.cs
new file mode 100644
index 0000000..843a2a0
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelColumn.cs
@@ -0,0 +1,89 @@
+#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.Diagnostics;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>The db model column.</summary>
+ [DebuggerDisplay("DbModelColumn: {Name} (DbModelType.Summary: {DbModelType.Summary}, Nullable: {Nullable}, IsKey: {IsKey})")]
+ public class DbModelColumn : DbModelObjectBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="DbModelColumn"/> class.</summary>
+ public DbModelColumn()
+ {
+ Nullable = true;
+ DbType = new DbModelType("varchar", 50);
+ ObjectType = ObjectTypes.Column;
+ }
+
+ /// <summary>Gets or sets DbType.</summary>
+ /// <value>The db type.</value>
+ public virtual DbModelType DbType { get; set; }
+
+ /// <summary>Gets or sets ForeignKeyReference.</summary>
+ /// <value>The foreign key reference.</value>
+ public virtual DbModelForeignKeyReference ForeignKeyReference { get; set; }
+
+ /// <summary>Gets FullName.</summary>
+ /// <value>The full name.</value>
+ public override string FullName
+ {
+ get { return Name; }
+ }
+
+ /// <summary>Gets a value indicating whether HasFK.</summary>
+ /// <value>The has fk.</value>
+ public virtual bool HasFK
+ {
+ get { return ForeignKeyReference != null; }
+ }
+
+ /// <summary>Gets or sets a value indicating whether IsAutoIncrement.</summary>
+ /// <value>The is auto increment.</value>
+ public virtual bool IsAutoIncrement { get; set; }
+
+ /// <summary>Gets or sets a value indicating whether IsIdentity.</summary>
+ /// <value>The is identity.</value>
+ public virtual bool IsIdentity { get; set; }
+
+ /// <summary>Gets or sets a value indicating whether IsKey.</summary>
+ /// <value>The is key.</value>
+ public virtual bool IsKey { get; set; }
+
+ /// <summary>Gets or sets a value indicating whether IsReadOnly.</summary>
+ /// <value>The is read only.</value>
+ public virtual bool IsReadOnly { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this column is a concurrency field, such as a timestamp.
+ /// </summary>
+ /// <value>
+ /// <c>true</c> if this instance is row version, or concurrency field; otherwise, <c>false</c>.
+ /// </value>
+ public virtual bool IsRowVersion { get; set; }
+
+ /// <summary>Gets or sets a value indicating whether IsUnique.</summary>
+ /// <value>The is unique.</value>
+ public virtual bool IsUnique { get; set; }
+
+ /// <summary>Gets a value indicating whether IsWritable.</summary>
+ /// <value>The is writable.</value>
+ public virtual bool IsWritable
+ {
+ get { return !IsReadOnly; }
+ }
+
+ /// <summary>Gets or sets a value indicating whether Nullable.</summary>
+ /// <value>The nullable.</value>
+ public virtual bool Nullable { get; set; }
+
+ /// <summary>Gets the parent table of the column.</summary>
+ /// <value>The parent table instance.</value>
+ public virtual DbModelTable ParentTable { get; internal set; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelColumnCollection.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelColumnCollection.cs
new file mode 100644
index 0000000..dc8eebc
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelColumnCollection.cs
@@ -0,0 +1,15 @@
+#region License
+// Copyright 2005-2009 Paul Kohler (http://pksoftware.net/MiniSqlQuery/). All rights reserved.
+// This source code is made available under the terms of the Microsoft Public License (Ms-PL)
+// http://minisqlquery.codeplex.com/license
+#endregion
+using System;
+using System.Collections.Generic;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ [Obsolete("Just use List - easier for filtering etc")]
+ public class DbModelColumnCollection : List<DbModelColumn>
+ {
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelConstraint.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelConstraint.cs
new file mode 100644
index 0000000..ad2f12a
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelConstraint.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
+
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>The db model constraint.</summary>
+ public class DbModelConstraint
+ {
+ /// <summary>Gets or sets ColumnName.</summary>
+ /// <value>The column name.</value>
+ public string ColumnName { get; set; }
+
+ /// <summary>Gets or sets ConstraintName.</summary>
+ /// <value>The constraint name.</value>
+ public string ConstraintName { get; set; }
+
+ /// <summary>Gets or sets ConstraintTableName.</summary>
+ /// <value>The constraint table name.</value>
+ public string ConstraintTableName { get; set; }
+
+ /// <summary>Gets or sets ConstraintTableSchema.</summary>
+ /// <value>The constraint table schema.</value>
+ public string ConstraintTableSchema { get; set; }
+
+ /// <summary>Gets or sets DeleteRule.</summary>
+ /// <value>The delete rule.</value>
+ public string DeleteRule { get; set; }
+
+ /// <summary>Gets or sets UniqueColumnName.</summary>
+ /// <value>The unique column name.</value>
+ public string UniqueColumnName { get; set; }
+
+ /// <summary>Gets or sets UniqueConstraintName.</summary>
+ /// <value>The unique constraint name.</value>
+ public string UniqueConstraintName { get; set; }
+
+ /// <summary>Gets or sets UniqueConstraintTableName.</summary>
+ /// <value>The unique constraint table name.</value>
+ public string UniqueConstraintTableName { get; set; }
+
+ /// <summary>Gets or sets UniqueConstraintTableSchema.</summary>
+ /// <value>The unique constraint table schema.</value>
+ public string UniqueConstraintTableSchema { get; set; }
+
+ /// <summary>Gets or sets UpdateRule.</summary>
+ /// <value>The update rule.</value>
+ public string UpdateRule { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelDependencyWalker.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelDependencyWalker.cs
new file mode 100644
index 0000000..7851f1e
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelDependencyWalker.cs
@@ -0,0 +1,94 @@
+#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;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>Examins a <see cref="DbModelInstance"/> providing sort methods.</summary>
+ public class DbModelDependencyWalker
+ {
+ /// <summary>The _model.</summary>
+ private readonly DbModelInstance _model;
+
+ /// <summary>Initializes a new instance of the <see cref="DbModelDependencyWalker"/> class.</summary>
+ /// <param name="model">The database model instance.</param>
+ public DbModelDependencyWalker(DbModelInstance model)
+ {
+ if (model == null)
+ {
+ throw new ArgumentNullException("model");
+ }
+
+ _model = model;
+ }
+
+ /// <summary>Sorts the tables by checking the foreign key references recursivly building a list of tables in order.</summary>
+ /// <returns>An array of tables in dependency order.</returns>
+ public DbModelTable[] SortTablesByForeignKeyReferences()
+ {
+ List<DbModelTable> tables = new List<DbModelTable>();
+
+ // add tables with no FKs
+ foreach (DbModelTable table in _model.Tables)
+ {
+ if (table.ForeignKeyColumns.Count == 0)
+ {
+ tables.Add(table);
+ }
+ }
+
+ foreach (DbModelTable table in _model.Tables)
+ {
+ ProcessForeignKeyReferences(1, tables, table);
+ }
+
+ return tables.ToArray();
+ }
+
+ /// <summary>The process foreign key references.</summary>
+ /// <param name="level">The level.</param>
+ /// <param name="tablesList">The tables list.</param>
+ /// <param name="table">The table.</param>
+ /// <exception cref="InvalidOperationException"></exception>
+ private void ProcessForeignKeyReferences(int level, List<DbModelTable> tablesList, DbModelTable table)
+ {
+ if (tablesList.Contains(table))
+ {
+ return;
+ }
+
+ // recursive insurance ;-)
+ level++;
+ if (level > 1000)
+ {
+ throw new InvalidOperationException(string.Format("FK processor exceeded recursive level of 1000 at '{0}'.", table.Name));
+ }
+
+ // if there are FK refs, add the refered tables first
+ if (table.ForeignKeyColumns.Count > 0)
+ {
+ // if the table is not already in the list....
+ foreach (DbModelColumn fkColumn in table.ForeignKeyColumns)
+ {
+ // ensure its not a self referencing table
+ if (fkColumn.ForeignKeyReference.ReferenceTable != table)
+ {
+ ProcessForeignKeyReferences(++level, tablesList, fkColumn.ForeignKeyReference.ReferenceTable);
+ }
+ }
+
+ // now add the table if not in the list yet
+ if (!tablesList.Contains(table))
+ {
+ tablesList.Add(table);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelForeignKeyReference.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelForeignKeyReference.cs
new file mode 100644
index 0000000..ad6c910
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelForeignKeyReference.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
+
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>The db model foreign key reference.</summary>
+ public class DbModelForeignKeyReference
+ {
+ /// <summary>Initializes a new instance of the <see cref="DbModelForeignKeyReference"/> class.</summary>
+ public DbModelForeignKeyReference()
+ {
+ }
+
+ /// <summary>Initializes a new instance of the <see cref="DbModelForeignKeyReference"/> class.</summary>
+ /// <param name="owningColumn">The owning column.</param>
+ /// <param name="fkTable">The fk table.</param>
+ /// <param name="fkColumn">The fk column.</param>
+ public DbModelForeignKeyReference(DbModelColumn owningColumn, DbModelTable fkTable, DbModelColumn fkColumn)
+ {
+ OwningColumn = owningColumn;
+ ReferenceTable = fkTable;
+ ReferenceColumn = fkColumn;
+ }
+
+ /// <summary>Gets or sets ConstraintName.</summary>
+ /// <value>The constraint name.</value>
+ public virtual string ConstraintName { get; set; }
+
+ /// <summary>Gets or sets DeleteRule.</summary>
+ /// <value>The delete rule.</value>
+ public string DeleteRule { get; set; }
+
+ /// <summary>Gets or sets OwningColumn.</summary>
+ /// <value>The owning column.</value>
+ public DbModelColumn OwningColumn { get; set; }
+
+ /// <summary>Gets or sets ReferenceColumn.</summary>
+ /// <value>The reference column.</value>
+ public DbModelColumn ReferenceColumn { get; set; }
+
+ /// <summary>Gets or sets ReferenceTable.</summary>
+ /// <value>The reference table.</value>
+ public DbModelTable ReferenceTable { get; set; }
+
+ /// <summary>Gets or sets UpdateRule.</summary>
+ /// <value>The update rule.</value>
+ public string UpdateRule { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelInstance.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelInstance.cs
new file mode 100644
index 0000000..5776f44
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelInstance.cs
@@ -0,0 +1,101 @@
+#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;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>The db model instance.</summary>
+ public class DbModelInstance
+ {
+ /// <summary>The _tables.</summary>
+ private readonly List<DbModelTable> _tables;
+
+ /// <summary>The _views.</summary>
+ private readonly List<DbModelView> _views;
+
+ /// <summary>Initializes a new instance of the <see cref="DbModelInstance"/> class.</summary>
+ public DbModelInstance()
+ {
+ _tables = new List<DbModelTable>();
+ _views = new List<DbModelView>();
+ }
+
+ /// <summary>Gets or sets ConnectionString.</summary>
+ /// <value>The connection string.</value>
+ public string ConnectionString { get; set; }
+
+ /// <summary>Gets or sets ProviderName.</summary>
+ /// <value>The provider name.</value>
+ public string ProviderName { get; set; }
+
+ /// <summary>Gets Tables.</summary>
+ /// <value>The tables.</value>
+ public virtual ICollection<DbModelTable> Tables
+ {
+ get { return _tables; }
+ }
+
+ /// <summary>Gets or sets Types.</summary>
+ /// <value>The types.</value>
+ public Dictionary<string, DbModelType> Types { get; set; }
+
+ /// <summary>Gets Views.</summary>
+ /// <value>The views.</value>
+ public virtual ICollection<DbModelView> Views
+ {
+ get { return _views; }
+ }
+
+ /// <summary>The add.</summary>
+ /// <param name="table">The table.</param>
+ public virtual void Add(DbModelTable table)
+ {
+ table.ParentDb = this;
+ _tables.Add(table);
+ }
+
+ /// <summary>The add.</summary>
+ /// <param name="view">The view.</param>
+ public virtual void Add(DbModelView view)
+ {
+ view.ParentDb = this;
+ _views.Add(view);
+ }
+
+ /// <summary>The find table.</summary>
+ /// <param name="tableName">The table name.</param>
+ /// <returns></returns>
+ public virtual DbModelTable FindTable(string tableName)
+ {
+ return _tables.Find(table => table.FullName.Equals(tableName, StringComparison.InvariantCultureIgnoreCase));
+ }
+
+ /// <summary>The find table or view.</summary>
+ /// <param name="name">The name.</param>
+ /// <returns></returns>
+ public virtual DbModelTable FindTableOrView(string name)
+ {
+ var obj = _tables.Find(table => table.FullName.Equals(name, StringComparison.InvariantCultureIgnoreCase));
+ if (obj == null)
+ {
+ obj = _views.Find(view => view.FullName.Equals(name, StringComparison.InvariantCultureIgnoreCase));
+ }
+
+ return obj;
+ }
+
+ /// <summary>The find view.</summary>
+ /// <param name="viewName">The view name.</param>
+ /// <returns></returns>
+ public virtual DbModelTable FindView(string viewName)
+ {
+ return _views.Find(view => view.FullName.Equals(viewName, StringComparison.InvariantCultureIgnoreCase));
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelObjectBase.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelObjectBase.cs
new file mode 100644
index 0000000..348fd8f
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelObjectBase.cs
@@ -0,0 +1,46 @@
+#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.Core.DbModel
+{
+ /// <summary>The db model object base.</summary>
+ public class DbModelObjectBase : IDbModelNamedObject
+ {
+ private string _fullName;
+
+ /// <summary>
+ /// Gets the full name of the object which may include the <see cref="IDbModelNamedObject.Schema"/> for example.
+ /// </summary>
+ /// <value>The full name.</value>
+ public virtual string FullName
+ {
+ get
+ {
+ if (_fullName == null)
+ {
+ _fullName = Utility.RenderSafeSchemaObjectName(Schema, Name);
+ }
+
+ return _fullName;
+ }
+ }
+
+ /// <summary>Gets or sets name of the database object.</summary>
+ /// <value>The name of the object.</value>
+ public virtual string Name { get; set; }
+
+ /// <summary>Gets or sets ObjectType.</summary>
+ /// <value>The object type.</value>
+ public virtual string ObjectType { get; set; }
+
+ /// <summary>Gets or sets Schema.</summary>
+ /// <value>The schema.</value>
+ public virtual string Schema { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelTable.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelTable.cs
new file mode 100644
index 0000000..c5e7820
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelTable.cs
@@ -0,0 +1,66 @@
+#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 System.Diagnostics;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>The db model table.</summary>
+ [DebuggerDisplay("DbModelTable: {FullName} (Columns: {Columns.Count}, PKs: {PrimaryKeyColumns.Count}, FKs: {ForeignKeyColumns.Count})")]
+ public class DbModelTable : DbModelObjectBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="DbModelTable"/> class.</summary>
+ public DbModelTable()
+ {
+ Columns = new List<DbModelColumn>();
+ Constraints = new List<DbModelConstraint>();
+ ObjectType = ObjectTypes.Table;
+ }
+
+ /// <summary>Gets the Columns for this table.</summary>
+ /// <value>The columns.</value>
+ public virtual List<DbModelColumn> Columns { get; internal set; }
+
+ /// <summary>Gets Constraints.</summary>
+ /// <value>The constraints.</value>
+ public virtual List<DbModelConstraint> Constraints { get; private set; }
+
+ /// <summary>Gets ForeignKeyColumns.</summary>
+ /// <value>The foreign key columns.</value>
+ public virtual List<DbModelColumn> ForeignKeyColumns
+ {
+ get { return Columns.FindAll(c => c.ForeignKeyReference != null); }
+ }
+
+ /// <summary>Gets NonKeyColumns.</summary>
+ /// <value>The non key columns.</value>
+ public virtual List<DbModelColumn> NonKeyColumns
+ {
+ get { return Columns.FindAll(c => !c.IsKey && c.ForeignKeyReference == null); }
+ }
+
+ /// <summary>Gets a reference to the parent database instance.</summary>
+ /// <value>The parent model instance object.</value>
+ public virtual DbModelInstance ParentDb { get; internal set; }
+
+ /// <summary>Gets PrimaryKeyColumns.</summary>
+ /// <value>The primary key columns.</value>
+ public virtual List<DbModelColumn> PrimaryKeyColumns
+ {
+ get { return Columns.FindAll(c => c.IsKey); }
+ }
+
+ /// <summary>Adds the <paramref name="column"/> to the list of <see cref="Columns"/> assigning the <see cref="DbModelColumn.ParentTable"/>.</summary>
+ /// <param name="column">The new column.</param>
+ public virtual void Add(DbModelColumn column)
+ {
+ column.ParentTable = this;
+ Columns.Add(column);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelType.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelType.cs
new file mode 100644
index 0000000..261c15b
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelType.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.Generic;
+using System.Diagnostics;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>Describes a database type.</summary>
+ [DebuggerDisplay("DbModelType: {Name} [{Summary,nq}]")]
+ public class DbModelType : DbModelObjectBase
+ {
+ /// <summary>Initializes a new instance of the <see cref="DbModelType"/> class.</summary>
+ /// <param name="name">The name of the type, e.g. "varchar".</param>
+ /// <param name="length">The length of the type, e.g. 10.</param>
+ public DbModelType(string name, int length)
+ {
+ Name = name;
+ Length = length;
+ }
+
+ /// <summary>Gets or sets CreateFormat.</summary>
+ /// <value>The create format.</value>
+ public virtual string CreateFormat { get; set; }
+
+ /// <summary>Gets or sets CreateParameters.</summary>
+ /// <value>The create parameters.</value>
+ public virtual string CreateParameters { get; set; }
+
+ /// <summary>Gets or sets Length.</summary>
+ /// <value>The length.</value>
+ public virtual int Length { get; set; }
+
+ /// <summary>Gets or sets LiteralPrefix.</summary>
+ /// <value>The literal prefix.</value>
+ public virtual string LiteralPrefix { get; set; }
+
+ /// <summary>Gets or sets LiteralSuffix.</summary>
+ /// <value>The literal suffix.</value>
+ public virtual string LiteralSuffix { get; set; }
+
+ /// <summary>Gets or sets Precision.</summary>
+ /// <value>The precision.</value>
+ public virtual int Precision { get; set; }
+
+ /// <summary>Gets or sets ProviderDbType.</summary>
+ /// <value>The provider db type.</value>
+ public virtual string ProviderDbType { get; set; }
+
+ /// <summary>Gets or sets Scale.</summary>
+ /// <value>The scale.</value>
+ public virtual int Scale { get; set; }
+
+ /// <summary>
+ /// Gets the summary of the SQL type using the <see cref="CreateFormat"/> if applicable.
+ /// </summary>
+ /// <value>The summary.</value>
+ public virtual string Summary
+ {
+ get
+ {
+ if (!string.IsNullOrEmpty(CreateFormat))
+ {
+ if (CreateFormat.Contains("{1}") && (Precision != -1 && Scale != -1))
+ {
+ return string.Format(CreateFormat, Precision, Scale);
+ }
+
+ if (CreateFormat.Contains("{0}") && !CreateFormat.Contains("{1}") && (Length != -1))
+ {
+ return string.Format(CreateFormat, Length);
+ }
+
+ if (CreateFormat.Contains("{0}"))
+ {
+ // err...
+ return Name;
+ }
+
+ return CreateFormat;
+ }
+
+ return Name;
+ }
+ }
+
+ /// <summary>Gets or sets SystemType.</summary>
+ /// <value>The system type.</value>
+ public virtual Type SystemType { get; set; }
+
+ /// <summary>Gets or sets Value.</summary>
+ /// <value>The value.</value>
+ public virtual object Value { get; set; }
+
+ // public static DbModelType Create(string name, int length, int precision, int scale, string systemTypeName)
+ // {
+ // return Create(null, name, length, precision, scale, systemTypeName);
+ // }
+
+ /// <summary>Creates an instance of <see cref="DbModelType"/> defined by the parameers.</summary>
+ /// <param name="dbTypes">The db types list, if the <paramref name="name"/> is in the list it is used as a base copy of the type.</param>
+ /// <param name="name">The name of the type, e.g. "int", "nvarchar" etc.</param>
+ /// <param name="length">The length of the type.</param>
+ /// <param name="precision">The precision.</param>
+ /// <param name="scale">The scale.</param>
+ /// <param name="systemTypeName">Name of the system type, e.g. "System.String".</param>
+ /// <returns>An instance of <see cref="DbModelType"/> defined by the parameers</returns>
+ public static DbModelType Create(Dictionary<string, DbModelType> dbTypes, string name, int length, int precision, int scale, string systemTypeName)
+ {
+ DbModelType baseType;
+
+ string key = name.ToLower();
+ if (dbTypes != null && dbTypes.ContainsKey(key))
+ {
+ // the type should be here, this is used as a baseline for new instances
+ baseType = dbTypes[key].Copy();
+ baseType.Length = length;
+ }
+ else
+ {
+ baseType = new DbModelType(name, length);
+ baseType.SystemType = Type.GetType(systemTypeName);
+ }
+
+ baseType.Precision = precision;
+ baseType.Scale = scale;
+
+ return baseType;
+ }
+
+ /// <summary>Copies this instance.</summary>
+ /// <returns>A copy of this instance.</returns>
+ public DbModelType Copy()
+ {
+ DbModelType copy = new DbModelType(Name, Length)
+ {
+ CreateFormat = CreateFormat,
+ CreateParameters = CreateParameters,
+ LiteralPrefix = LiteralPrefix,
+ LiteralSuffix = LiteralSuffix,
+ Precision = Precision,
+ Scale = Scale,
+ SystemType = SystemType,
+ };
+ return copy;
+ }
+
+ /// <summary>Renders this <see cref="DbModelType"/> as basic DDL base on the contents of <see cref="Value"/> (assumes nullable).</summary>
+ /// <returns>An SQL string representing the <see cref="Value"/> acording to the database type (assumes nullable).</returns>
+ public string ToDDLValue()
+ {
+ return ToDDLValue(true);
+ }
+
+ /// <summary>Renders this <see cref="DbModelType"/> as basic DDL base on the contents of <see cref="Value"/>.</summary>
+ /// <param name="nullable">A boolean value indicating the nullability of the column.</param>
+ /// <returns>An SQL string representing the <see cref="Value"/> acording to the database type.</returns>
+ /// <remarks>If a column is "not null" and the <see cref="Value"/> is null, in the furure this method will attampt to return a default value
+ /// rather than throwing an exception etc.</remarks>
+ public string ToDDLValue(bool nullable)
+ {
+ if (Value == null || Value == DBNull.Value)
+ {
+ if (nullable)
+ {
+ return "null";
+ }
+
+ // not supposed to be nullable but the Value is. render a default
+ switch (SystemType.FullName)
+ {
+ case "System.String":
+ return string.Concat(LiteralPrefix, LiteralSuffix);
+ case "System.DateTime":
+ return "'?'";
+ case "System.Guid":
+ return string.Concat("'", Guid.Empty, "'");
+ default:
+ return "0"; // take a punt
+ }
+ }
+
+ if (SystemType == typeof(string))
+ {
+ return string.Concat(LiteralPrefix, ((string)Value).Replace("'", "''"), LiteralSuffix);
+ }
+
+ if (SystemType == typeof(DateTime))
+ {
+ return string.Format("{0}{1:yyyy-MM-dd HH:mm:ss}{2}", LiteralPrefix, Value, LiteralSuffix);
+ }
+
+ if (SystemType == typeof(bool) && Name.Equals("bit", StringComparison.InvariantCultureIgnoreCase))
+ {
+ return ((bool)Value) ? "1" : "0";
+ }
+
+ if (SystemType == typeof(byte[]))
+ {
+ return "null /* not supported yet */ ";
+ }
+
+ return string.Concat(LiteralPrefix, Value, LiteralSuffix);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelView.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelView.cs
new file mode 100644
index 0000000..8438833
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/DbModelView.cs
@@ -0,0 +1,20 @@
+#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.Core.DbModel
+{
+ /// <summary>The db model view.</summary>
+ public class DbModelView : DbModelTable
+ {
+ /// <summary>Initializes a new instance of the <see cref="DbModelView"/> class.</summary>
+ public DbModelView()
+ {
+ ObjectType = ObjectTypes.View;
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/GenericSchemaService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/GenericSchemaService.cs
new file mode 100644
index 0000000..a8a374a
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/GenericSchemaService.cs
@@ -0,0 +1,359 @@
+#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.Diagnostics;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>
+ /// The generic schema service.
+ /// </summary>
+ public class GenericSchemaService : IDatabaseSchemaService
+ {
+ /// <summary>The _connection.</summary>
+ private string _connection;
+
+ /// <summary>Gets or sets a value indicating whether ForeignKeyInformationAvailable.</summary>
+ /// <value>The foreign key information available.</value>
+ public bool ForeignKeyInformationAvailable { get; set; }
+
+ /// <summary>Gets or sets ProviderName.</summary>
+ /// <value>The provider name.</value>
+ public string ProviderName { get; set; }
+
+ /// <summary>Gets a database object model that represents the items defined by the <paramref name="connection"/>.</summary>
+ /// <param name="connection">The connection string.</param>
+ /// <returns>An instance of <see cref="DbModelInstance"/> describing the database.</returns>
+ public virtual DbModelInstance GetDbObjectModel(string connection)
+ {
+
+ _connection = connection;
+
+ DbModelInstance model = new DbModelInstance();
+ DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);
+
+ try
+ {
+ using (DbConnection dbConn = factory.CreateConnection())
+ {
+ dbConn.ConnectionString = connection;
+ dbConn.Open();
+
+ DataTable tables = dbConn.GetSchema("Tables");
+ Dictionary<string, DbModelType> dbTypes = GetDbTypes(dbConn);
+ model.Types = dbTypes;
+ model.ProviderName = ProviderName;
+ model.ConnectionString = _connection;
+
+ if (tables == null)
+ {
+ return model;
+ }
+
+ DataView tablesDV = new DataView(tables, "TABLE_TYPE='TABLE' OR TABLE_TYPE='BASE TABLE'", "TABLE_SCHEMA, TABLE_NAME", DataViewRowState.CurrentRows);
+
+ foreach (DataRowView row in tablesDV)
+ {
+ string schemaName = SafeGetString(row.Row, "TABLE_SCHEMA");
+ string tableName = SafeGetString(row.Row, "TABLE_NAME");
+
+ DbModelTable dbTable = new DbModelTable { Schema = schemaName, Name = tableName };
+ model.Add(dbTable);
+
+ DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, schemaName, tableName);
+ GetColumnsForTable(dbTable, schemaTableKeyInfo, dbTypes);
+ }
+
+ DataView viewsDV = new DataView(tables, "TABLE_TYPE='VIEW'", "TABLE_SCHEMA, TABLE_NAME", DataViewRowState.CurrentRows);
+ foreach (DataRowView row in viewsDV)
+ {
+ string schemaName = SafeGetString(row.Row, "TABLE_SCHEMA");
+ string tableName = SafeGetString(row.Row, "TABLE_NAME");
+
+ DbModelView dbTable = new DbModelView { Schema = schemaName, Name = tableName };
+ model.Add(dbTable);
+
+ DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, schemaName, tableName);
+ GetColumnsForTable(dbTable, schemaTableKeyInfo, dbTypes);
+ }
+
+ // build FK relationships
+ if (model.Tables != null)
+ {
+ foreach (DbModelTable table in model.Tables)
+ {
+ GetForeignKeyReferencesForTable(dbConn, table);
+ ProcessForeignKeyReferencesForTable(dbConn, table);
+ }
+ }
+
+ // build FK relationships
+ if (model.Views != null)
+ {
+ foreach (DbModelView view in model.Views)
+ {
+ GetForeignKeyReferencesForTable(dbConn, view);
+ ProcessForeignKeyReferencesForTable(dbConn, view);
+ }
+ }
+ }
+ }
+ catch (Exception)
+ {
+ // catch all for providers that are not implementing the schema info.
+ return model;
+ }
+
+ return model;
+ }
+
+ /// <summary>The get db types.</summary>
+ /// <param name="connection">The connection.</param>
+ /// <returns>A dictionary of named <see cref="DbModelType"/> objects supported by the database.</returns>
+ /// <exception cref="ArgumentNullException">If the <paramref name="connection"/> is null.</exception>
+ public virtual Dictionary<string, DbModelType> GetDbTypes(DbConnection connection)
+ {
+ if (connection == null)
+ {
+ throw new ArgumentNullException("connection");
+ }
+
+ Dictionary<string, DbModelType> dbTypes = new Dictionary<string, DbModelType>();
+
+ DataTable dataTypes = connection.GetSchema("DataTypes");
+
+ foreach (DataRow row in dataTypes.Rows)
+ {
+ string typeName = SafeGetString(row, "TypeName");
+ int columnSize = SafeGetInt(row, "ColumnSize");
+ DbModelType dbType = new DbModelType(typeName, columnSize);
+
+ // Some providers may double up on schema info, check first:
+ if (!dbTypes.ContainsKey(typeName.ToLower()))
+ {
+ dbTypes.Add(typeName.ToLower(), dbType);
+
+ dbType.CreateFormat = SafeGetString(row, "CreateFormat");
+ dbType.CreateParameters = SafeGetString(row, "CreateParameters");
+ dbType.LiteralPrefix = SafeGetString(row, "LiteralPrefix");
+ dbType.LiteralSuffix = SafeGetString(row, "LiteralSuffix");
+ dbType.SystemType = Type.GetType(SafeGetString(row, "DataType"));
+ dbType.ProviderDbType = SafeGetString(row, "ProviderDbType");
+ }
+ }
+
+ return dbTypes;
+ }
+
+ /// <returns>The get description of the database.</returns>
+ public string GetDescription()
+ {
+ return "todo";
+ }
+
+ /// <summary>The get columns for table.</summary>
+ /// <param name="dbTable">The db table.</param>
+ /// <param name="schemaTableKeyInfo">The schema table key info.</param>
+ /// <param name="dbTypes">The db types.</param>
+ protected virtual void GetColumnsForTable(DbModelTable dbTable, DataTable schemaTableKeyInfo, Dictionary<string, DbModelType> dbTypes)
+ {
+ if (schemaTableKeyInfo == null)
+ {
+ return;
+ }
+
+ foreach (DataRow columnRow in schemaTableKeyInfo.Rows)
+ {
+ if (SafeGetBool(columnRow, "IsHidden"))
+ {
+ continue;
+ }
+
+ string columnName = SafeGetString(columnRow, "ColumnName");
+ string dataType = GetDataTypeNameForColumn(dbTable, schemaTableKeyInfo, columnRow);
+
+ // note - need a better work around for columns missing the data type info (e.g. access)
+ if (string.IsNullOrEmpty(dataType))
+ {
+ // try using the "ProviderDbType" to match
+ string providerDbType = SafeGetString(columnRow, "ProviderType");
+ foreach (var type in dbTypes.Values)
+ {
+ if (type.ProviderDbType == providerDbType)
+ {
+ dataType = type.Name;
+ break;
+ }
+ }
+ }
+
+ DbModelType dbType = DbModelType.Create(
+ dbTypes,
+ dataType,
+ SafeGetInt(columnRow, "ColumnSize"),
+ SafeGetInt(columnRow, "Precision"),
+ SafeGetInt(columnRow, "Scale"),
+ SafeGetString(columnRow, "DataType"));
+
+ // todo - FK info
+ DbModelColumn dbColumn = new DbModelColumn
+ {
+ Name = columnName,
+ // Name = MakeSqlFriendly(columnName),
+ Nullable = SafeGetBool(columnRow, "AllowDBNull"),
+ IsKey = SafeGetBool(columnRow, "IsKey"),
+ IsUnique = SafeGetBool(columnRow, "IsUnique"),
+ IsRowVersion = SafeGetBool(columnRow, "IsRowVersion"),
+ IsIdentity = SafeGetBool(columnRow, "IsIdentity"),
+ IsAutoIncrement = SafeGetBool(columnRow, "IsAutoIncrement"),
+ IsReadOnly = SafeGetBool(columnRow, "IsReadOnly"),
+ DbType = dbType,
+ };
+ dbTable.Add(dbColumn);
+ }
+ }
+
+ /// <summary>The get data type name for column.</summary>
+ /// <param name="dbTable">The db table.</param>
+ /// <param name="schemaTableKeyInfo">The schema table key info.</param>
+ /// <param name="columnRow">The column row.</param>
+ /// <returns>The get data type name for column.</returns>
+ protected virtual string GetDataTypeNameForColumn(DbModelTable dbTable, DataTable schemaTableKeyInfo, DataRow columnRow)
+ {
+ return SafeGetString(columnRow, "DataTypeName");
+ }
+
+ /// <summary>The get foreign key references for table.</summary>
+ /// <param name="dbConn">The db conn.</param>
+ /// <param name="dbTable">The db table.</param>
+ protected virtual void GetForeignKeyReferencesForTable(DbConnection dbConn, DbModelTable dbTable)
+ {
+ // foreach (DbModelColumn column in dbTable.Columns)
+ // {
+ // // KF info for DB's varies widley, needs to be implemented by derived class
+ // column.ForeignKeyReference = DbModelForeignKeyReference.NullForeignKeyReference;
+ // }
+ }
+
+ /// <summary>The get table key information.</summary>
+ /// <param name="dbConn">The database connection.</param>
+ /// <param name="schema">The schema.</param>
+ /// <param name="name">The name of the table.</param>
+ /// <returns>A <see cref="DataTable"/> describing the tables columns and key information.</returns>
+ protected virtual DataTable GetTableKeyInfo(DbConnection dbConn, string schema, string name)
+ {
+ DataTable schemaTableKeyInfo = null;
+ try
+ {
+ using (DbCommand command = dbConn.CreateCommand())
+ {
+ string tableName = Utility.RenderSafeSchemaObjectName(schema, name);
+ command.CommandText = "SELECT * FROM " + MakeSqlFriendly(tableName);
+ using (DbDataReader reader = command.ExecuteReader(CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo))
+ {
+ schemaTableKeyInfo = reader.GetSchemaTable();
+ }
+ }
+ }
+ catch (Exception exp)
+ {
+ // Generic catch all - not all provoders stick to the DbException base:
+ Debug.WriteLine(GetType().FullName + " ERROR: " + exp.Message);
+ }
+
+ return schemaTableKeyInfo;
+ }
+
+ /// <summary>The make sql friendly.</summary>
+ /// <param name="name">The name.</param>
+ /// <returns>The make sql friendly.</returns>
+ protected virtual string MakeSqlFriendly(string name)
+ {
+ return Utility.MakeSqlFriendly(name);
+ }
+
+ /// <summary>The process foreign key references for table.</summary>
+ /// <param name="dbConn">The db conn.</param>
+ /// <param name="dbTable">The db table.</param>
+ protected virtual void ProcessForeignKeyReferencesForTable(DbConnection dbConn, DbModelTable dbTable)
+ {
+ }
+
+
+ /// <summary>The safe get bool.</summary>
+ /// <param name="row">The row.</param>
+ /// <param name="columnName">The column name.</param>
+ /// <returns>The safe get bool.</returns>
+ protected bool SafeGetBool(DataRow row, string columnName)
+ {
+ if (row.Table.Columns.Contains(columnName) && !row.IsNull(columnName))
+ {
+ string value = row[columnName].ToString();
+ switch (value.ToLower())
+ {
+ case "no":
+ case "false":
+ return false;
+
+ case "yes":
+ case "true":
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /// <summary>The safe get int.</summary>
+ /// <param name="row">The row.</param>
+ /// <param name="columnName">The column name.</param>
+ /// <returns>The safe get int.</returns>
+ protected virtual int SafeGetInt(DataRow row, string columnName)
+ {
+ try
+ {
+ int result = -1;
+
+ if (row.Table.Columns.Contains(columnName) && !row.IsNull(columnName))
+ {
+ result = Convert.ToInt32(row[columnName]);
+ }
+
+ return result;
+ }
+ catch (OverflowException)
+ {
+ // In Oracle Maximum size for column is larger than Max Int32, instead of changing return value, just coerce on Max.Int32.
+
+ return Int32.MaxValue;
+
+ }
+
+ }
+
+ /// <summary>The safe get string.</summary>
+ /// <param name="row">The row.</param>
+ /// <param name="columnName">The column name.</param>
+ /// <returns>The safe get string.</returns>
+ protected string SafeGetString(DataRow row, string columnName)
+ {
+ string result = string.Empty;
+
+ if (row.Table.Columns.Contains(columnName) && !row.IsNull(columnName))
+ {
+ result = row[columnName].ToString();
+ }
+
+ return result;
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/ISqlWriter.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/ISqlWriter.cs
new file mode 100644
index 0000000..fcb11da
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/ISqlWriter.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
+
+using System.IO;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>An SQL Writer interface.</summary>
+ public interface ISqlWriter
+ {
+ /// <summary>Gets or sets a value indicating whether IncludeComments.</summary>
+ /// <value>The include comments.</value>
+ bool IncludeComments { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether to include read-only columns in the export SQL.
+ /// </summary>
+ /// <value>
+ /// <c>true</c> if including read-only columns in the export; otherwise, <c>false</c>.
+ /// </value>
+ bool IncludeReadOnlyColumnsInExport { get; set; }
+
+ /// <summary>Gets or sets a value indicating whether InsertLineBreaksBetweenColumns.</summary>
+ /// <value>The insert line breaks between columns.</value>
+ bool InsertLineBreaksBetweenColumns { get; set; }
+
+ /// <summary>The write create.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="column">The column.</param>
+ void WriteCreate(TextWriter writer, DbModelColumn column);
+
+ /// <summary>The write delete.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="tableOrView">The table or view.</param>
+ void WriteDelete(TextWriter writer, DbModelTable tableOrView);
+
+ /// <summary>The write insert.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="tableOrView">The table or view.</param>
+ void WriteInsert(TextWriter writer, DbModelTable tableOrView);
+
+ /// <summary>The write select.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="tableOrView">The table or view.</param>
+ void WriteSelect(TextWriter writer, DbModelTable tableOrView);
+
+ /// <summary>The write select count.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="tableOrView">The table or view.</param>
+ void WriteSelectCount(TextWriter writer, DbModelTable tableOrView);
+
+ /// <summary>The write summary.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="column">The column.</param>
+ void WriteSummary(TextWriter writer, DbModelColumn column);
+
+ /// <summary>The write update.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="tableOrView">The table or view.</param>
+ void WriteUpdate(TextWriter writer, DbModelTable tableOrView);
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/OleDbSchemaService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/OleDbSchemaService.cs
new file mode 100644
index 0000000..9054018
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/OleDbSchemaService.cs
@@ -0,0 +1,43 @@
+#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 System.Data.Common;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>The ole db schema service.</summary>
+ public class OleDbSchemaService : GenericSchemaService
+ {
+ /// <summary>The get db types.</summary>
+ /// <param name="connection">The connection.</param>
+ /// <returns></returns>
+ public override Dictionary<string, DbModelType> GetDbTypes(DbConnection connection)
+ {
+ var types = base.GetDbTypes(connection);
+
+ foreach (var dbType in types.Values)
+ {
+ if (dbType.CreateFormat.Length == 0)
+ {
+ // probably MS Access
+ switch (dbType.Name)
+ {
+ case "VarChar":
+ dbType.CreateFormat = "VarChar({0})";
+ break;
+ case "VarBinary":
+ dbType.CreateFormat = "VarBinary({0})";
+ break;
+ }
+ }
+ }
+
+ return types;
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/OracleSchemaService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/OracleSchemaService.cs
new file mode 100644
index 0000000..74f9472
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/OracleSchemaService.cs
@@ -0,0 +1,101 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Common;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ public class OracleSchemaService : GenericSchemaService
+ {
+
+ protected override int SafeGetInt(DataRow row, string columnName)
+ {
+ try
+ {
+ return base.SafeGetInt(row, columnName);
+ }
+ catch (OverflowException)
+ {
+ // Coerce to Max.Int32
+ return Int32.MaxValue;
+ }
+ }
+
+ public override DbModelInstance GetDbObjectModel(string connection)
+ {
+
+ //_connection = connection;
+
+ DbModelInstance model = new DbModelInstance();
+ DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);
+
+ using (DbConnection dbConn = factory.CreateConnection())
+ {
+ dbConn.ConnectionString = connection;
+ dbConn.Open();
+
+ DataTable tables = dbConn.GetSchema("Tables");
+ Dictionary<string, DbModelType> dbTypes = GetDbTypes(dbConn);
+ model.Types = dbTypes;
+ model.ProviderName = ProviderName;
+ model.ConnectionString = connection;
+
+ if (tables == null)
+ {
+ return model;
+ }
+
+ DataView tablesDV = new DataView(tables, "", "OWNER, TABLE_NAME", DataViewRowState.CurrentRows);
+
+ foreach (DataRowView row in tablesDV)
+ {
+ string schemaName = SafeGetString(row.Row, "OWNER");
+ string tableName = SafeGetString(row.Row, "TABLE_NAME");
+
+ DbModelTable dbTable = new DbModelTable { Schema = schemaName, Name = tableName };
+ model.Add(dbTable);
+
+ DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, schemaName, tableName);
+ GetColumnsForTable(dbTable, schemaTableKeyInfo, dbTypes);
+ }
+
+ DataTable views = dbConn.GetSchema("Views");
+ DataView viewsDV = new DataView(views, "", "OWNER, VIEW_NAME", DataViewRowState.CurrentRows);
+ foreach (DataRowView row in viewsDV)
+ {
+ string schemaName = SafeGetString(row.Row, "OWNER");
+ string tableName = SafeGetString(row.Row, "VIEW_NAME");
+
+ DbModelView dbTable = new DbModelView { Schema = schemaName, Name = tableName };
+ model.Add(dbTable);
+
+ DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, schemaName, tableName);
+ GetColumnsForTable(dbTable, schemaTableKeyInfo, dbTypes);
+ }
+
+ // build FK relationships
+ if (model.Tables != null)
+ {
+ foreach (DbModelTable table in model.Tables)
+ {
+ GetForeignKeyReferencesForTable(dbConn, table);
+ ProcessForeignKeyReferencesForTable(dbConn, table);
+ }
+ }
+
+ // build FK relationships
+ if (model.Views != null)
+ {
+ foreach (DbModelView view in model.Views)
+ {
+ GetForeignKeyReferencesForTable(dbConn, view);
+ ProcessForeignKeyReferencesForTable(dbConn, view);
+ }
+ }
+ }
+
+ return model;
+ }
+
+ }
+}
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/SqlCeSchemaService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/SqlCeSchemaService.cs
new file mode 100644
index 0000000..65fec8a
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/SqlCeSchemaService.cs
@@ -0,0 +1,323 @@
+#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;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>SQL Compact Edition schema service.
+ /// Made possible with contributions form ExportSQLCE project.
+ /// http://exportsqlce.codeplex.com/
+ /// http://erikej.blogspot.com/</summary>
+ public class SqlCeSchemaService : GenericSchemaService
+ {
+ /// <summary>The ma x_ binar y_ colum n_ size.</summary>
+ internal static readonly int MAX_BINARY_COLUMN_SIZE = 8000;
+
+ /// <summary>The ma x_ imag e_ colum n_ size.</summary>
+ internal static readonly int MAX_IMAGE_COLUMN_SIZE = 1073741823;
+
+ /// <summary>The ma x_ ncha r_ colum n_ size.</summary>
+ internal static readonly int MAX_NCHAR_COLUMN_SIZE = 4000;
+
+ /// <summary>The ma x_ ntex t_ colum n_ size.</summary>
+ internal static readonly int MAX_NTEXT_COLUMN_SIZE = 536870911;
+
+ /// <summary>The _connection.</summary>
+ private string _connection;
+
+ /// <summary>The get db object model.</summary>
+ /// <param name="connection">The connection.</param>
+ /// <returns></returns>
+ public override DbModelInstance GetDbObjectModel(string connection)
+ {
+ _connection = connection;
+
+ DbModelInstance model = new DbModelInstance();
+ DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);
+
+ using (DbConnection dbConn = factory.CreateConnection())
+ {
+ dbConn.ConnectionString = connection;
+ dbConn.Open();
+
+ QueryTableNames(dbConn, model);
+ Dictionary<string, DbModelType> dbTypes = GetDbTypes(dbConn);
+ model.Types = dbTypes;
+ model.ProviderName = ProviderName;
+ model.ConnectionString = _connection;
+
+ // build all table info
+ foreach (DbModelTable table in model.Tables)
+ {
+ DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, null, table.Name);
+ GetColumnsForTable(table, schemaTableKeyInfo, dbTypes);
+ }
+
+ // build FK relationships
+ foreach (DbModelTable table in model.Tables)
+ {
+ GetForeignKeyReferencesForTable(dbConn, table);
+ ProcessForeignKeyReferencesForTable(dbConn, table);
+ }
+
+ return model;
+ }
+ }
+
+ /// <summary>Gets the db types for the SQL CE provider.</summary>
+ /// <param name="connection">The connection (not required).</param>
+ /// <returns></returns>
+ public override Dictionary<string, DbModelType> GetDbTypes(DbConnection connection)
+ {
+ Dictionary<string, DbModelType> dbTypes = new Dictionary<string, DbModelType>();
+ string dataTypesSql = "SELECT * FROM information_schema.provider_types";
+ using (var cmd = connection.CreateCommand())
+ {
+ cmd.CommandText = dataTypesSql;
+ cmd.CommandType = CommandType.Text;
+ using (var reader = cmd.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ string typeName = (string)reader["TYPE_NAME"];
+ int columnSize = Convert.ToInt32(reader["COLUMN_SIZE"]);
+ DbModelType dbType = new DbModelType(typeName, columnSize);
+
+ dbType.CreateParameters = Convert.ToString(reader["CREATE_PARAMS"]);
+ dbType.LiteralPrefix = Convert.ToString(reader["LITERAL_PREFIX"]);
+ dbType.LiteralSuffix = Convert.ToString(reader["LITERAL_SUFFIX"]);
+ dbType.ProviderDbType = Convert.ToString(reader["DATA_TYPE"]);
+
+ FixCreateFormat(dbType);
+ FixMaxLengths(dbType);
+ AssignSystemTypes(dbType);
+
+ dbTypes.Add(typeName, dbType);
+ }
+ }
+ }
+
+ return dbTypes;
+ }
+
+ /// <summary>The get data type name for column.</summary>
+ /// <param name="dbTable">The db table.</param>
+ /// <param name="schemaTableKeyInfo">The schema table key info.</param>
+ /// <param name="columnRow">The column row.</param>
+ /// <returns>The get data type name for column.</returns>
+ protected override string GetDataTypeNameForColumn(DbModelTable dbTable, DataTable schemaTableKeyInfo, DataRow columnRow)
+ {
+ return SafeGetString(columnRow, "ProviderType");
+ }
+
+ /// <summary>The get foreign key references for table.</summary>
+ /// <param name="dbConn">The db conn.</param>
+ /// <param name="dbTable">The db table.</param>
+ protected override void GetForeignKeyReferencesForTable(DbConnection dbConn, DbModelTable dbTable)
+ {
+ ForeignKeyInformationAvailable = true;
+ try
+ {
+ using (var cmd = dbConn.CreateCommand())
+ {
+ cmd.CommandText =
+ string.Format(
+ @"SELECT
+ KCU1.TABLE_NAME AS FK_TABLE_NAME,
+ KCU1.CONSTRAINT_NAME AS FK_CONSTRAINT_NAME,
+ KCU1.COLUMN_NAME AS FK_COLUMN_NAME,
+ KCU2.TABLE_NAME AS UQ_TABLE_NAME,
+ KCU2.CONSTRAINT_NAME AS UQ_CONSTRAINT_NAME,
+ KCU2.COLUMN_NAME AS UQ_COLUMN_NAME,
+ RC.UPDATE_RULE,
+ RC.DELETE_RULE,
+ KCU2.ORDINAL_POSITION AS UQ_ORDINAL_POSITION,
+ KCU1.ORDINAL_POSITION AS FK_ORDINAL_POSITION
+FROM
+ INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC
+ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU1 ON KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
+ JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU2 ON KCU2.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION AND KCU2.TABLE_NAME = RC.UNIQUE_CONSTRAINT_TABLE_NAME
+WHERE KCU1.TABLE_NAME = '{0}'
+ORDER BY
+ FK_TABLE_NAME,
+ FK_CONSTRAINT_NAME,
+ FK_ORDINAL_POSITION
+",
+ dbTable.Name);
+ cmd.CommandType = CommandType.Text;
+ using (var dr = cmd.ExecuteReader())
+ {
+ while (dr.Read())
+ {
+ dbTable.Constraints.Add(new DbModelConstraint
+ {
+ ConstraintTableName = dr.GetString(0),
+ ConstraintName = dr.GetString(1),
+ ColumnName = dr.GetString(2),
+ UniqueConstraintTableName = dr.GetString(3),
+ UniqueConstraintName = dr.GetString(4),
+ UniqueColumnName = dr.GetString(5),
+ UpdateRule = dr.GetString(6),
+ DeleteRule = dr.GetString(7)
+ });
+ }
+ }
+ }
+ }
+ catch (DbException)
+ {
+ ForeignKeyInformationAvailable = false;
+ }
+ }
+
+ /// <summary>The process foreign key references for table.</summary>
+ /// <param name="dbConn">The db conn.</param>
+ /// <param name="dbTable">The db table.</param>
+ protected override void ProcessForeignKeyReferencesForTable(DbConnection dbConn, DbModelTable dbTable)
+ {
+ // todo - check GetGroupForeingKeys
+ foreach (DbModelConstraint constraint in dbTable.Constraints)
+ {
+ var column = dbTable.Columns.Find(c => c.Name == constraint.ColumnName);
+ var refTable = dbTable.ParentDb.FindTable(
+ Utility.RenderSafeSchemaObjectName(constraint.UniqueConstraintTableSchema, constraint.UniqueConstraintTableName));
+ var refColumn = refTable.Columns.Find(c => c.Name == constraint.UniqueColumnName);
+ DbModelForeignKeyReference fk = new DbModelForeignKeyReference(column, refTable, refColumn);
+ fk.UpdateRule = constraint.UpdateRule;
+ fk.DeleteRule = constraint.DeleteRule;
+ column.ForeignKeyReference = fk;
+ }
+ }
+
+ /// <summary>The assign system types.</summary>
+ /// <param name="dbType">The db type.</param>
+ private void AssignSystemTypes(DbModelType dbType)
+ {
+ switch (dbType.Name.ToLower())
+ {
+ case "smallint":
+ dbType.SystemType = typeof(byte);
+ break;
+
+ case "int":
+ dbType.SystemType = typeof(int);
+ break;
+
+ case "tinyint":
+ dbType.SystemType = typeof(byte);
+ break;
+
+ case "bigint":
+ dbType.SystemType = typeof(long);
+ break;
+
+ case "float":
+ dbType.SystemType = typeof(double); // yes, float is double ;-)
+ break;
+
+ case "numeric":
+ case "money":
+ case "real":
+ dbType.SystemType = typeof(decimal);
+ break;
+
+ case "bit":
+ dbType.SystemType = typeof(bool);
+ break;
+
+ case "uniqueidentifier":
+ dbType.SystemType = typeof(Guid);
+ break;
+
+ case "nvarchar":
+ case "nchar":
+ case "ntext":
+ dbType.SystemType = typeof(string);
+ break;
+
+ case "datetime":
+ dbType.SystemType = typeof(DateTime);
+ break;
+
+ case "varbinary":
+ case "binary":
+ case "image":
+ case "rowversion":
+ dbType.SystemType = typeof(byte[]);
+ break;
+ }
+ }
+
+ /// <summary>The fix create format.</summary>
+ /// <param name="dbType">The db type.</param>
+ private void FixCreateFormat(DbModelType dbType)
+ {
+ switch (dbType.Name.ToLower())
+ {
+ case "nchar":
+ case "nvarchar":
+ case "binary":
+ case "varbinary":
+ dbType.CreateFormat = dbType.Name.ToLower() + "({0})";
+ break;
+
+ case "decimal":
+ case "numeric":
+ dbType.CreateFormat = dbType.Name.ToLower() + "({0}, {1})";
+ break;
+ }
+ }
+
+ /// <summary>The fix max lengths.</summary>
+ /// <param name="dbType">The db type.</param>
+ private void FixMaxLengths(DbModelType dbType)
+ {
+ switch (dbType.Name.ToLower())
+ {
+ case "nchar":
+ case "nvarchar":
+ dbType.Length = MAX_NCHAR_COLUMN_SIZE;
+ break;
+ case "ntext":
+ dbType.Length = MAX_NTEXT_COLUMN_SIZE;
+ break;
+ case "binary":
+ case "varbinary":
+ dbType.Length = MAX_BINARY_COLUMN_SIZE;
+ break;
+ case "image":
+ dbType.Length = MAX_IMAGE_COLUMN_SIZE;
+ break;
+ }
+ }
+
+ /// <summary>The query table names.</summary>
+ /// <param name="dbConn">The db conn.</param>
+ /// <param name="model">The model.</param>
+ private void QueryTableNames(DbConnection dbConn, DbModelInstance model)
+ {
+ using (var cmd = dbConn.CreateCommand())
+ {
+ cmd.CommandText = "SELECT table_name FROM information_schema.tables WHERE TABLE_TYPE = N'TABLE'";
+ cmd.CommandType = CommandType.Text;
+ using (var reader = cmd.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ DbModelTable table = new DbModelTable();
+ table.Name = (string)reader["table_name"];
+ model.Add(table);
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/SqlClientSchemaService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/SqlClientSchemaService.cs
new file mode 100644
index 0000000..13a98ac
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/SqlClientSchemaService.cs
@@ -0,0 +1,105 @@
+#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 System.Data;
+using System.Data.Common;
+using System.Data.SqlClient;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>The sql client schema service.</summary>
+ public class SqlClientSchemaService : GenericSchemaService
+ {
+ /// <summary>The get db types.</summary>
+ /// <param name="connection">The connection.</param>
+ /// <returns></returns>
+ public override Dictionary<string, DbModelType> GetDbTypes(DbConnection connection)
+ {
+ var types = base.GetDbTypes(connection);
+
+ var date = types["datetime"];
+ date.LiteralPrefix = "'";
+ date.LiteralSuffix = "'";
+
+ return types;
+ }
+
+ /// <summary>The get foreign key references for table.</summary>
+ /// <param name="dbConn">The db conn.</param>
+ /// <param name="dbTable">The db table.</param>
+ protected override void GetForeignKeyReferencesForTable(DbConnection dbConn, DbModelTable dbTable)
+ {
+ ForeignKeyInformationAvailable = true;
+ try
+ {
+ using (var cmd = dbConn.CreateCommand())
+ {
+ cmd.CommandText = string.Format(
+ @"SELECT
+ OBJECT_SCHEMA_NAME(f.parent_object_id) AS TableSchemaName,
+ OBJECT_NAME(f.parent_object_id) AS TableName,
+ COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
+ f.name AS ForeignKeyName,
+ OBJECT_SCHEMA_NAME(f.referenced_object_id) AS ReferenceTableSchemaName,
+ OBJECT_NAME(f.referenced_object_id) AS ReferenceTableName,
+ COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName,
+ f.update_referential_action_desc,
+ f.delete_referential_action_desc
+FROM
+ sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS fc
+ ON f.OBJECT_ID = fc.constraint_object_id
+WHERE OBJECT_SCHEMA_NAME(f.parent_object_id) = '{0}' AND OBJECT_NAME(f.parent_object_id) = '{1}'
+",
+ dbTable.Schema, dbTable.Name);
+ cmd.CommandType = CommandType.Text;
+ using (var dr = cmd.ExecuteReader())
+ {
+ while (dr.Read())
+ {
+ dbTable.Constraints.Add(new DbModelConstraint
+ {
+ ConstraintTableSchema = (string)dr["TableSchemaName"],
+ ConstraintTableName = (string)dr["TableName"],
+ ColumnName = (string)dr["ColumnName"],
+ ConstraintName = (string)dr["ForeignKeyName"],
+ UniqueConstraintTableSchema = (string)dr["ReferenceTableSchemaName"],
+ UniqueConstraintTableName = (string)dr["ReferenceTableName"],
+ UniqueColumnName = (string)dr["ReferenceColumnName"],
+ UpdateRule = (string)dr["update_referential_action_desc"],
+ DeleteRule = (string)dr["delete_referential_action_desc"],
+ });
+ }
+ }
+ }
+ }
+ catch (SqlException)
+ {
+ ForeignKeyInformationAvailable = false;
+ }
+ }
+
+ /// <summary>The process foreign key references for table.</summary>
+ /// <param name="dbConn">The db conn.</param>
+ /// <param name="dbTable">The db table.</param>
+ protected override void ProcessForeignKeyReferencesForTable(DbConnection dbConn, DbModelTable dbTable)
+ {
+ // todo - check GetGroupForeingKeys
+ foreach (DbModelConstraint constraint in dbTable.Constraints)
+ {
+ var column = dbTable.Columns.Find(c => c.Name == constraint.ColumnName);
+ var refTable = dbTable.ParentDb.FindTable(
+ Utility.RenderSafeSchemaObjectName(constraint.UniqueConstraintTableSchema, constraint.UniqueConstraintTableName));
+ var refColumn = refTable.Columns.Find(c => c.Name == constraint.UniqueColumnName);
+ DbModelForeignKeyReference fk = new DbModelForeignKeyReference(column, refTable, refColumn);
+ fk.UpdateRule = constraint.UpdateRule;
+ fk.DeleteRule = constraint.DeleteRule;
+ column.ForeignKeyReference = fk;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/SqlWriter.cs b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/SqlWriter.cs
new file mode 100644
index 0000000..9b2be5f
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DbModel/SqlWriter.cs
@@ -0,0 +1,261 @@
+#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 System.IO;
+
+namespace MiniSqlQuery.Core.DbModel
+{
+ /// <summary>The sql writer.</summary>
+ public class SqlWriter : ISqlWriter
+ {
+ /// <summary>Initializes a new instance of the <see cref="SqlWriter"/> class.</summary>
+ public SqlWriter()
+ {
+ // todo - format options?
+ IncludeComments = true;
+ InsertLineBreaksBetweenColumns = true;
+ }
+
+ /// <summary>Gets or sets a value indicating whether IncludeComments.</summary>
+ /// <value>The include comments.</value>
+ public bool IncludeComments { get; set; }
+
+ /// <summary>Gets or sets a value indicating whether InsertLineBreaksBetweenColumns.</summary>
+ /// <value>The insert line breaks between columns.</value>
+ public bool InsertLineBreaksBetweenColumns { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether to include read-only columns in the export SQL.
+ /// </summary>
+ /// <value>
+ /// <c>true</c> if including read-only columns in the export; otherwise, <c>false</c>.
+ /// </value>
+ public bool IncludeReadOnlyColumnsInExport { get; set; }
+
+ /// <summary>The write create.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="column">The column.</param>
+ public virtual void WriteCreate(TextWriter writer, DbModelColumn column)
+ {
+ writer.Write("{0} {1} ", MakeSqlFriendly(column.Name), column.DbType.Summary);
+
+ if (!column.Nullable)
+ {
+ writer.Write("not ");
+ }
+
+ writer.Write("null");
+ }
+
+ /// <summary>The write delete.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="tableOrView">The table or view.</param>
+ public virtual void WriteDelete(TextWriter writer, DbModelTable tableOrView)
+ {
+ writer.WriteLine("DELETE FROM");
+ writer.Write("\t");
+ writer.WriteLine(MakeSqlFriendly(tableOrView.FullName));
+ writer.WriteLine("WHERE");
+
+ for (int i = 0; i < tableOrView.PrimaryKeyColumns.Count; i++)
+ {
+ var column = tableOrView.PrimaryKeyColumns[i];
+ writer.Write("\t{0} = ", MakeSqlFriendly(column.Name));
+ if (i < tableOrView.PrimaryKeyColumns.Count - 1)
+ {
+ writer.Write(" /*value:{0}*/ AND", column.Name);
+ writer.WriteLine();
+ }
+ else
+ {
+ writer.Write("/*value:{0}*/", column.Name);
+ }
+ }
+
+ writer.WriteLine();
+ }
+
+ /// <summary>The write insert.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="tableOrView">The table or view.</param>
+ public virtual void WriteInsert(TextWriter writer, DbModelTable tableOrView)
+ {
+ writer.Write("INSERT INTO ");
+ writer.Write(MakeSqlFriendly(tableOrView.FullName));
+ if (InsertLineBreaksBetweenColumns)
+ {
+ writer.WriteLine();
+ writer.Write("\t");
+ }
+
+ writer.Write("(");
+
+ // get all columns that are "writable" including PKs that are not auto generated (unless specified)
+ List<DbModelColumn> writableColumns = null;
+ if (IncludeReadOnlyColumnsInExport)
+ {
+ writableColumns = tableOrView.Columns;
+ }
+ else
+ {
+ writableColumns = tableOrView.Columns.FindAll(c => c.IsWritable);
+ }
+
+ for (int i = 0; i < writableColumns.Count; i++)
+ {
+ var column = writableColumns[i];
+ writer.Write(MakeSqlFriendly(column.Name));
+ if (i < writableColumns.Count - 1)
+ {
+ if (InsertLineBreaksBetweenColumns)
+ {
+ writer.WriteLine(",");
+ writer.Write("\t");
+ }
+ else
+ {
+ writer.Write(", ");
+ }
+ }
+ }
+
+ writer.WriteLine(")");
+ writer.Write("VALUES");
+ if (InsertLineBreaksBetweenColumns)
+ {
+ writer.WriteLine();
+ writer.Write("\t");
+ }
+
+ writer.Write("(");
+
+ for (int i = 0; i < writableColumns.Count; i++)
+ {
+ var column = writableColumns[i];
+ writer.Write(column.DbType.ToDDLValue(column.Nullable));
+ if (IncludeComments)
+ {
+ writer.Write(" /*{0},{1}*/", column.Name, column.DbType.Summary);
+ }
+
+ if (i < writableColumns.Count - 1)
+ {
+ if (InsertLineBreaksBetweenColumns)
+ {
+ writer.WriteLine(",");
+ writer.Write("\t");
+ }
+ else
+ {
+ writer.Write(", ");
+ }
+ }
+ }
+
+ writer.WriteLine(")");
+ }
+
+ /// <summary>The write select.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="tableOrView">The table or view.</param>
+ public virtual void WriteSelect(TextWriter writer, DbModelTable tableOrView)
+ {
+ writer.Write("SELECT");
+ writer.WriteLine();
+ for (int i = 0; i < tableOrView.Columns.Count; i++)
+ {
+ writer.Write("\t");
+ writer.Write(MakeSqlFriendly(tableOrView.Columns[i].Name));
+ if (i < tableOrView.Columns.Count - 1)
+ {
+ writer.Write(",");
+ writer.WriteLine();
+ }
+ }
+
+ writer.WriteLine();
+ writer.Write("FROM {0}", MakeSqlFriendly(tableOrView.FullName));
+ writer.WriteLine();
+ }
+
+ /// <summary>The write select count.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="tableOrView">The table or view.</param>
+ public virtual void WriteSelectCount(TextWriter writer, DbModelTable tableOrView)
+ {
+ writer.Write("SELECT COUNT(*) FROM {0}", MakeSqlFriendly(tableOrView.FullName));
+ writer.WriteLine();
+ }
+
+ /// <summary>The write summary.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="column">The column.</param>
+ public void WriteSummary(TextWriter writer, DbModelColumn column)
+ {
+ writer.Write("{0} ({1} ", MakeSqlFriendly(column.Name), column.DbType.Summary);
+
+ if (!column.Nullable)
+ {
+ writer.Write("not ");
+ }
+
+ writer.Write("null)");
+ }
+
+ /// <summary>The write update.</summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="tableOrView">The table or view.</param>
+ public virtual void WriteUpdate(TextWriter writer, DbModelTable tableOrView)
+ {
+ writer.Write("UPDATE ");
+ writer.WriteLine(MakeSqlFriendly(tableOrView.FullName));
+ writer.WriteLine("SET");
+
+ // get all columns that are "writable" excluding keys that are not auto generated
+ var writableColumns = tableOrView.Columns.FindAll(c => c.IsWritable && !c.IsKey);
+ for (int i = 0; i < writableColumns.Count; i++)
+ {
+ var column = writableColumns[i];
+ writer.Write("\t{0} = {1}", MakeSqlFriendly(column.Name), column.DbType.ToDDLValue(column.Nullable));
+ if (i < writableColumns.Count - 1)
+ {
+ writer.Write(",");
+ writer.WriteLine();
+ }
+ }
+
+ writer.WriteLine();
+ writer.WriteLine("WHERE");
+
+ for (int i = 0; i < tableOrView.PrimaryKeyColumns.Count; i++)
+ {
+ var column = tableOrView.PrimaryKeyColumns[i];
+ writer.Write("\t{0} = ", MakeSqlFriendly(column.Name));
+ if (i < tableOrView.PrimaryKeyColumns.Count - 1)
+ {
+ writer.Write(" /*value:{0},{1}*/ AND", column.Name, column.DbType.Summary);
+ writer.WriteLine();
+ }
+ else
+ {
+ writer.Write("/*value:{0},{1}*/", column.Name, column.DbType.Summary);
+ }
+ }
+
+ writer.WriteLine();
+ }
+
+ /// <summary>The make the sql friendly, e.g. "[TableName]".</summary>
+ /// <param name="name">The name of the object.</param>
+ /// <returns>The make sql friendly name.</returns>
+ protected string MakeSqlFriendly(string name)
+ {
+ return Utility.MakeSqlFriendly(name);
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/DefaultConnectionDefinitionFile.xml b/minisqlquery-master/src/MiniSqlQuery.Core/DefaultConnectionDefinitionFile.xml
new file mode 100644
index 0000000..a9019f0
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/DefaultConnectionDefinitionFile.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<DbConnectionDefinitionList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <Definitions>
+ <DbConnectionDefinition>
+ <Name>Default - MSSQL Master@localhost</Name>
+ <ProviderName>System.Data.SqlClient</ProviderName>
+ <ConnectionString>Server=.; Database=master; Integrated Security=SSPI</ConnectionString>
+ </DbConnectionDefinition>
+ <DbConnectionDefinition>
+ <Name>Sample MSSQL Northwind SQL Express</Name>
+ <ProviderName>System.Data.SqlClient</ProviderName>
+ <ConnectionString>Server=.\sqlexpress; Database=Northwind; Integrated Security=SSPI</ConnectionString>
+ </DbConnectionDefinition>
+ <DbConnectionDefinition>
+ <Name>Sample Access DB Connection</Name>
+ <ProviderName>System.Data.OleDb</ProviderName>
+ <ConnectionString>Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\SomeDirectory\access.mdb</ConnectionString>
+ </DbConnectionDefinition>
+ </Definitions>
+ <DefaultName>Default - MSSQL Master@localhost</DefaultName>
+</DbConnectionDefinitionList>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/FileEditorDescriptor.cs b/minisqlquery-master/src/MiniSqlQuery.Core/FileEditorDescriptor.cs
new file mode 100644
index 0000000..97c66be
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/FileEditorDescriptor.cs
@@ -0,0 +1,57 @@
+#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.Core
+{
+ /// <summary>
+ /// <para>The file editor descriptor.</para>
+ /// <para>Creates a relationship between file extensions and a type of editor that supports for example XML syntax highlighting.</para>
+ /// </summary>
+ public class FileEditorDescriptor
+ {
+ /// <summary>Initializes a new instance of the <see cref="FileEditorDescriptor"/> class.</summary>
+ public FileEditorDescriptor()
+ {
+ }
+
+ /// <summary>Initializes a new instance of the <see cref="FileEditorDescriptor"/> class.</summary>
+ /// <param name="name">The name for display purposes, e.g. "HTML Editor".</param>
+ /// <param name="editorKeyName">The editor key name, can be used by the application to resolve an editor by name.</param>
+ /// <param name="extensions">The file extensions to support for this editor (e.g. "txt").</param>
+ /// <remarks>
+ /// <example>
+ /// <code>var fd = new FileEditorDescriptor("HTML Editor", "htm-editor", "htm", "html");</code>
+ /// </example>
+ /// </remarks>
+ public FileEditorDescriptor(string name, string editorKeyName, params string[] extensions)
+ {
+ Name = name;
+ EditorKeyName = editorKeyName;
+ Extensions = extensions;
+ }
+
+ /// <summary>Gets or sets EditorKeyName.</summary>
+ /// <value>The editor key name.</value>
+ public string EditorKeyName { get; set; }
+
+ /// <summary>Gets or sets Extensions.</summary>
+ /// <value>The extensions.</value>
+ public string[] Extensions { get; set; }
+
+ /// <summary>Gets or sets Name.</summary>
+ /// <value>The display name of the descriptor.</value>
+ public string Name { get; set; }
+
+ /// <summary>Converts the descriptor to a string.</summary>
+ /// <returns>A string represntation of the descriptor.</returns>
+ public override string ToString()
+ {
+ return string.Format("{0} ({1})", Name, string.Join("; ", Extensions));
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/FileEditorResolverService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/FileEditorResolverService.cs
new file mode 100644
index 0000000..c176954
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/FileEditorResolverService.cs
@@ -0,0 +1,126 @@
+#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 System.IO;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Given a file name or extention the service will work out the most appropriate editor to use.
+ /// </summary>
+ /// <remarks>
+ /// The editors need to be registered using the <see cref = "Register" /> method.
+ /// <example>
+ /// <code>
+ /// IEditor editor = resolver.ResolveEditorInstance("c:\data.sql");
+ /// // will resolve to the SQL editor
+ ///
+ /// IEditor editor = resolver.ResolveEditorInstance("c:\foo.txt");
+ /// // will resolve to the basic text editor</code>
+ /// </example>
+ /// </remarks>
+ public class FileEditorResolverService : IFileEditorResolver
+ {
+ /// <summary>
+ /// The extention map of files types to descriptors.
+ /// </summary>
+ private readonly Dictionary<string, FileEditorDescriptor> _extentionMap;
+
+ /// <summary>
+ /// The file editor descriptors.
+ /// </summary>
+ private readonly List<FileEditorDescriptor> _fileEditorDescriptors;
+
+ /// <summary>
+ /// The application services.
+ /// </summary>
+ private readonly IApplicationServices _services;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "FileEditorResolverService" /> class.
+ /// </summary>
+ /// <param name = "services">The application services.</param>
+ public FileEditorResolverService(IApplicationServices services)
+ {
+ _services = services;
+ _extentionMap = new Dictionary<string, FileEditorDescriptor>();
+ _fileEditorDescriptors = new List<FileEditorDescriptor>();
+ }
+
+ /// <summary>
+ /// Gets an array of the file descriptiors.
+ /// </summary>
+ /// <returns>An array of <see cref = "FileEditorDescriptor" /> objects.</returns>
+ public FileEditorDescriptor[] GetFileTypes()
+ {
+ return _fileEditorDescriptors.ToArray();
+ }
+
+ /// <summary>
+ /// Registers the specified file editor descriptor.
+ /// It is recommended to use the <see cref = "IApplicationServices.RegisterEditor{TEditor}" /> method to
+ /// set up the container correctly.
+ /// </summary>
+ /// <param name = "fileEditorDescriptor">The file editor descriptor.</param>
+ public void Register(FileEditorDescriptor fileEditorDescriptor)
+ {
+ _fileEditorDescriptors.Add(fileEditorDescriptor);
+ if (fileEditorDescriptor.Extensions == null || fileEditorDescriptor.Extensions.Length == 0)
+ {
+ _extentionMap.Add("*", fileEditorDescriptor);
+ }
+ else
+ {
+ // create a map of all ext to editors
+ foreach (string extention in fileEditorDescriptor.Extensions)
+ {
+ _extentionMap.Add(extention, fileEditorDescriptor);
+ }
+ }
+ }
+
+ /// <summary>
+ /// Resolves the editor instance from the container based on the filename.
+ /// </summary>
+ /// <param name = "filename">The filename.</param>
+ /// <returns>An editor.</returns>
+ public IEditor ResolveEditorInstance(string filename)
+ {
+ string ext = Path.GetExtension(filename);
+ string editorName = ResolveEditorNameByExtension(ext);
+ return _services.Resolve<IEditor>(editorName);
+ }
+
+ /// <summary>
+ /// Works out the "name" of the editor to use based on the <paramref name = "extension" />.
+ /// </summary>
+ /// <param name = "extension">The extention ("sql", "txt"/".txt" etc).</param>
+ /// <returns>The name of an editor in the container.</returns>
+ public string ResolveEditorNameByExtension(string extension)
+ {
+ string editorName = _extentionMap["*"].EditorKeyName;
+
+ if (extension != null)
+ {
+ if (extension.StartsWith("."))
+ {
+ extension = extension.Substring(1);
+ }
+
+ // is there a specific editor for this file type
+ if (_extentionMap.ContainsKey(extension))
+ {
+ editorName = _extentionMap[extension].EditorKeyName;
+ }
+ }
+
+ return editorName;
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/FindReplaceTextRequest.cs b/minisqlquery-master/src/MiniSqlQuery.Core/FindReplaceTextRequest.cs
new file mode 100644
index 0000000..8aed6fe
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/FindReplaceTextRequest.cs
@@ -0,0 +1,101 @@
+#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;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// A class that encapsulates a "find text" request, storing the position
+ /// </summary>
+ public class FindTextRequest
+ {
+ /// <summary>
+ /// The _replace value.
+ /// </summary>
+ private static string _replaceValue;
+
+ /// <summary>
+ /// The _search value.
+ /// </summary>
+ private static string _searchValue;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "FindTextRequest" /> class. Creates a new request using the specified <paramref name = "textProvider" /> for searching.
+ /// </summary>
+ /// <param name = "textProvider">The search provider for this request,</param>
+ public FindTextRequest(IFindReplaceProvider textProvider)
+ : this(textProvider, null)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "FindTextRequest" /> class. Creates a new request using the specified <paramref name = "textProvider" /> for searching.
+ /// </summary>
+ /// <param name = "textProvider">The search provider for this request,</param>
+ /// <param name = "searchValue">The text to be searched on.</param>
+ public FindTextRequest(IFindReplaceProvider textProvider, string searchValue)
+ {
+ TextProvider = textProvider;
+ if (searchValue != null)
+ {
+ SearchValue = searchValue;
+ }
+
+ Position = 0;
+ StringComparison = StringComparison.CurrentCultureIgnoreCase;
+ }
+
+ /// <summary>
+ /// Gets or sets the position of the currently "found" text (or the starting position of the search).
+ /// </summary>
+ /// <value>The position.</value>
+ public int Position { get; set; }
+
+ /// <summary>
+ /// Gets or sets the text replace value (shared value).
+ /// </summary>
+ /// <value>The replace value.</value>
+ public string ReplaceValue
+ {
+ get { return _replaceValue; }
+ set { _replaceValue = value; }
+ }
+
+ /// <summary>
+ /// Gets or sets the search text (shared value).
+ /// </summary>
+ /// <value>The search value.</value>
+ public string SearchValue
+ {
+ get { return _searchValue; }
+ set { _searchValue = value; }
+ }
+
+ /*
+ /// <summary>
+ /// If true, signals the <see cref="TextProvider"/> to search "up", otherwise "down".
+ /// </summary>
+ /// <value>True to search up, false for down (the default).</value>
+ public bool SearchUp { get; set; }
+ */
+
+ /// <summary>
+ /// Gets or sets the string comparison settings, e.g. case insensitive.
+ /// </summary>
+ /// <value>The string comparison.</value>
+ public StringComparison StringComparison { get; set; }
+
+ /// <summary>
+ /// Gets or sets the search provider. A search request is conducted by the provider, different providers
+ /// can yield different results, for example plain text or a regular expression searcher.
+ /// </summary>
+ /// <value>The text provider.</value>
+ public IFindReplaceProvider TextProvider { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Forms/BatchQuerySelectForm.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Forms/BatchQuerySelectForm.cs
new file mode 100644
index 0000000..3d3cffa
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Forms/BatchQuerySelectForm.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;
+using System.Windows.Forms;
+
+namespace MiniSqlQuery.Core.Forms
+{
+ /// <summary>Used as a modal dialog, a <see cref="QueryBatch"/> is supplied and the used can
+ /// select one of the result sets. <see cref="DialogResult"/> is set to <see cref="DialogResult.OK"/> on an OK exit.</summary>
+ public partial class BatchQuerySelectForm : Form
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="BatchQuerySelectForm"/> class.
+ /// </summary>
+ public BatchQuerySelectForm()
+ {
+ InitializeComponent();
+ }
+
+ /// <summary>
+ /// Gets a refernce to the selected query.
+ /// </summary>
+ /// <value>The selected query.</value>
+ public Query SelectedQuery
+ {
+ get { return batchQuerySelectControl1.SelectedQuery; }
+ }
+
+ /// <summary>Fills the list with the named batch results.</summary>
+ /// <param name="batch">The batch.</param>
+ public void Fill(QueryBatch batch)
+ {
+ batchQuerySelectControl1.Fill(batch);
+ }
+
+ /// <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)
+ {
+ DialogResult = DialogResult.OK;
+ Close();
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Forms/BatchQuerySelectForm.Designer.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Forms/BatchQuerySelectForm.Designer.cs
new file mode 100644
index 0000000..4fac25e
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Forms/BatchQuerySelectForm.Designer.cs
@@ -0,0 +1,107 @@
+namespace MiniSqlQuery.Core.Forms
+{
+ partial class BatchQuerySelectForm
+ {
+ /// <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.batchQuerySelectControl1 = new MiniSqlQuery.Core.Controls.BatchQuerySelectControl();
+ this.label1 = new System.Windows.Forms.Label();
+ this.btnOk = new System.Windows.Forms.Button();
+ this.btnCancel = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // batchQuerySelectControl1
+ //
+ this.batchQuerySelectControl1.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.batchQuerySelectControl1.Location = new System.Drawing.Point(12, 25);
+ this.batchQuerySelectControl1.Name = "batchQuerySelectControl1";
+ this.batchQuerySelectControl1.Size = new System.Drawing.Size(322, 180);
+ this.batchQuerySelectControl1.TabIndex = 0;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(9, 9);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(138, 13);
+ this.label1.TabIndex = 1;
+ this.label1.Text = "Select a result set to export:";
+ //
+ // btnOk
+ //
+ this.btnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnOk.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.btnOk.Location = new System.Drawing.Point(178, 211);
+ 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.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(259, 211);
+ 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;
+ //
+ // BatchQuerySelectForm
+ //
+ 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(346, 246);
+ this.Controls.Add(this.btnCancel);
+ this.Controls.Add(this.btnOk);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.batchQuerySelectControl1);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "BatchQuerySelectForm";
+ this.ShowIcon = false;
+ this.Text = "Batch Query Selection";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private MiniSqlQuery.Core.Controls.BatchQuerySelectControl batchQuerySelectControl1;
+ private System.Windows.Forms.Label label1;
+ 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.Core/Forms/BatchQuerySelectForm.resx b/minisqlquery-master/src/MiniSqlQuery.Core/Forms/BatchQuerySelectForm.resx
new file mode 100644
index 0000000..19dc0dd
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Forms/BatchQuerySelectForm.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.Core/IApplicationServices.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IApplicationServices.cs
new file mode 100644
index 0000000..7fae43c
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IApplicationServices.cs
@@ -0,0 +1,134 @@
+#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 Ninject;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// The core services of the application.
+ /// </summary>
+ public interface IApplicationServices
+ {
+ /// <summary>
+ /// Occurs when a system message is posted.
+ /// </summary>
+ event EventHandler<SystemMessageEventArgs> SystemMessagePosted;
+
+ /// <summary>
+ /// Gets the Dependency Injection container.
+ /// This container holds all major application components and plugins.
+ /// See the "Configuration.xml" file in the main application for settings.
+ /// </summary>
+ /// <value>The container.</value>
+ IKernel Container { get; }
+
+ /// <summary>
+ /// Gets the application host window.
+ /// </summary>
+ /// <value>The application host window - a <see cref = "System.Windows.Forms.Form" />.</value>
+ IHostWindow HostWindow { get; }
+
+ /// <summary>
+ /// Gets a dictionary of the current plugins for this application.
+ /// </summary>
+ /// <value>A reference to the plugin dictionary.</value>
+ Dictionary<Type, IPlugIn> Plugins { get; }
+
+ /// <summary>
+ /// Gets the application settings instance.
+ /// </summary>
+ /// <value>A reference to the settings handler.</value>
+ IApplicationSettings Settings { get; }
+
+ /// <summary>
+ /// The get configuration object types.
+ /// </summary>
+ /// <returns>An array of configuration objects.</returns>
+ Type[] GetConfigurationObjectTypes();
+
+ /// <summary>
+ /// Initializes the plugins that have been loaded during application startup.
+ /// </summary>
+ void InitializePlugIns();
+
+ /// <summary>
+ /// Loads the <paramref name = "plugIn" /> (calling its <see cref = "IPlugIn.LoadPlugIn" /> method) and
+ /// adds it to the <see cref = "Plugins" /> dictionary for access by other services.
+ /// </summary>
+ /// <param name = "plugIn">The plugin to load.</param>
+ /// <exception cref = "ArgumentNullException">If <paramref name = "plugIn" /> is null.</exception>
+ void LoadPlugIn(IPlugIn plugIn);
+
+ /// <summary>
+ /// Posts a system message for listeners.
+ /// </summary>
+ /// <param name = "message">A system message type.</param>
+ /// <param name = "data">The asssociated data.</param>
+ void PostMessage(SystemMessage message, object data);
+
+ /// <summary>
+ /// Registers the component service type <typeparamref name = "TService" /> with and implemetation of type <typeparamref name = "TImp" />.
+ /// </summary>
+ /// <typeparam name = "TService">The contract type.</typeparam>
+ /// <typeparam name = "TImp">The implementing type.</typeparam>
+ /// <param name = "key">The key or name of the service.</param>
+ void RegisterComponent<TService, TImp>(string key);
+
+ /// <summary>
+ /// Registers the component implemetation of type <typeparamref name = "TImp" />.
+ /// </summary>
+ /// <typeparam name = "TImp">The implementing type.</typeparam>
+ /// <param name = "key">The key or name of the service.</param>
+ void RegisterComponent<TImp>(string key);
+
+ /// <summary>
+ /// The register configuration object.
+ /// </summary>
+ /// <typeparam name = "TConfig">A configuration class.</typeparam>
+ void RegisterConfigurationObject<TConfig>() where TConfig : IConfigurationObject;
+
+ /// <summary>
+ /// Registers the editor of type <typeparamref name = "TEditor" /> using the <see cref = "FileEditorDescriptor.EditorKeyName" />.
+ /// </summary>
+ /// <typeparam name = "TEditor">The editor type.</typeparam>
+ /// <param name = "fileEditorDescriptor">The file editor descriptor.</param>
+ void RegisterEditor<TEditor>(FileEditorDescriptor fileEditorDescriptor) where TEditor : IEditor;
+
+ /// <summary>
+ /// Registers the component service type <typeparamref name = "TService" /> with and implemetation of type <typeparamref name = "TImp" /> as a singleton.
+ /// </summary>
+ /// <typeparam name = "TService">The contract type.</typeparam>
+ /// <typeparam name = "TImp">The implementing type.</typeparam>
+ /// <param name = "key">The key or name of the service.</param>
+ void RegisterSingletonComponent<TService, TImp>(string key);
+
+ /// <summary>
+ /// Resolves an instance of <typeparamref name = "T" /> from the container.
+ /// </summary>
+ /// <typeparam name = "T">The type to find in the container.</typeparam>
+ /// <param name = "key">The key (can be null if not applicable).</param>
+ /// <returns>An instance of the type depending on the containters configuration.</returns>
+ T Resolve<T>(string key);
+
+ /// <summary>
+ /// The resolve.
+ /// </summary>
+ /// <typeparam name = "T">The type to find in the container.</typeparam>
+ /// <returns>An instance of the type depending on the containters configuration.</returns>
+ T Resolve<T>();
+
+ /// <summary>
+ /// Remove the component by name.
+ /// </summary>
+ /// <returns>True on success.</returns>
+ void RemoveComponent<TImp>();
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IApplicationSettings.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IApplicationSettings.cs
new file mode 100644
index 0000000..a11ae12
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IApplicationSettings.cs
@@ -0,0 +1,149 @@
+#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.Data.Common;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// An interface for the application settings.
+ /// </summary>
+ public interface IApplicationSettings
+ {
+ /// <summary>
+ /// Fired when the list of connection definitions is modified.
+ /// </summary>
+ /// <seealso cref = "SetConnectionDefinitions" />
+ /// <seealso cref = "GetConnectionDefinitions" />
+ event EventHandler ConnectionDefinitionsChanged;
+
+ /// <summary>
+ /// Fired when the database connection (provider and/or connection string) are modified.
+ /// </summary>
+ /// <seealso cref = "ResetConnection" />
+ event EventHandler DatabaseConnectionReset;
+
+ /// <summary>
+ /// Gets an instance of <see cref = "DbConnection" /> depending on the value of <see cref = "ConnectionDefinition" />.
+ /// </summary>
+ /// <value>The connection.</value>
+ DbConnection Connection { get; }
+
+ /// <summary>
+ /// Gets or sets a reference to the current connection definiton class.
+ /// </summary>
+ /// <value>The connection definition.</value>
+ DbConnectionDefinition ConnectionDefinition { get; set; }
+
+ /// <summary>
+ /// Gets or sets the date time format for grid item results (e.g. "yyyy-MM-dd HH:mm:ss.fff").
+ /// </summary>
+ /// <value>The date time format.</value>
+ string DateTimeFormat { get; set; }
+
+ /// <summary>
+ /// Gets or sets the default connection definition filename. I blank the default is the users profile area.
+ /// </summary>
+ /// <value>The default connection definition filename.</value>
+ string DefaultConnectionDefinitionFilename { get; set; }
+
+ /// <summary>
+ /// Gets the default filter string for dialog boxes.
+ /// </summary>
+ /// <value>The default file filter.</value>
+ string DefaultFileFilter { get; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether to enable query batching using the "GO" keyword.
+ /// </summary>
+ /// <value><c>true</c> if query batching is enabled; otherwise, <c>false</c>.</value>
+ bool EnableQueryBatching { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating the command timeout.
+ /// </summary>
+ /// <value>The command timeout.</value>
+ int CommandTimeout { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether to include read-only columns in the export SQL.
+ /// </summary>
+ /// <value>
+ /// <c>true</c> if including read-only columns in the export; otherwise, <c>false</c>.
+ /// </value>
+ bool IncludeReadOnlyColumnsInExport { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether to load plugins or not.
+ /// </summary>
+ /// <value><c>true</c> if [load plugins]; otherwise, <c>false</c>. The default is <c>true</c>.</value>
+ bool LoadExternalPlugins { get; set; }
+
+ /// <summary>
+ /// Gets or sets the null text of a result (e.g. "<NULL>").
+ /// </summary>
+ /// <value>The null text.</value>
+ string NullText { get; set; }
+
+ /// <summary>
+ /// Gets or sets the plug in file filter for finding the external plugins (e.g. "*.plugin.dll").
+ /// </summary>
+ /// <value>The plug in file filter.</value>
+ string PlugInFileFilter { get; set; }
+
+ /// <summary>
+ /// Gets or sets the most recent files.
+ /// </summary>
+ /// <value>The most recent files.</value>
+ StringCollection MostRecentFiles { get; set; }
+
+ /// <summary>
+ /// Gets an instance of <see cref = "DbProviderFactory" /> depending on the value of <see cref = "ConnectionDefinition" />.
+ /// </summary>
+ /// <value>The provider factory.</value>
+ DbProviderFactory ProviderFactory { get; }
+
+ /// <summary>
+ /// Closes the current connection (if any).
+ /// </summary>
+ void CloseConnection();
+
+ /// <summary>
+ /// Gets the current connection definitions for this user.
+ /// </summary>
+ /// <returns>Connection definitions.</returns>
+ DbConnectionDefinitionList GetConnectionDefinitions();
+
+ /// <summary>
+ /// Helper method to get an open connection.
+ /// </summary>
+ /// <returns>A <see cref = "DbConnection" /> object.</returns>
+ DbConnection GetOpenConnection();
+
+ /// <summary>
+ /// Gets, and increments, the "untitled document counter" starting at 1 for the "session".
+ /// </summary>
+ /// <value>The untitled document value.</value>
+ /// <returns>The get untitled document counter.</returns>
+ int GetUntitledDocumentCounter();
+
+ /// <summary>
+ /// Resets the connection details firing the <see cref = "DatabaseConnectionReset" /> event.
+ /// </summary>
+ /// <seealso cref = "DatabaseConnectionReset" />
+ void ResetConnection();
+
+ /// <summary>
+ /// Resets the list of connection definitions that are stored in the user profile.
+ /// </summary>
+ /// <param name = "definitionList">The definition List.</param>
+ void SetConnectionDefinitions(DbConnectionDefinitionList definitionList);
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/ICommand.cs b/minisqlquery-master/src/MiniSqlQuery.Core/ICommand.cs
new file mode 100644
index 0000000..a8cdfab
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/ICommand.cs
@@ -0,0 +1,77 @@
+#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.Drawing;
+using System.Windows.Forms;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Represents a "command", typically a user action such as saving a file or executing a query.
+ /// </summary>
+ public interface ICommand
+ {
+ /// <summary>
+ /// Gets a value indicating whether this <see cref = "ICommand" /> is enabled.
+ /// </summary>
+ /// <value><c>true</c> if enabled; otherwise, <c>false</c>.</value>
+ bool Enabled { get; }
+
+ /// <summary>
+ /// Gets or sets the host, typically the button holding the command.
+ /// </summary>
+ /// <value>The host control.</value>
+ object Host { get; set; }
+
+ /// <summary>
+ /// Gets the name of the command, used in menus and buttons.
+ /// </summary>
+ /// <value>The name of the command.</value>
+ string Name { get; }
+
+ /// <summary>
+ /// Gets or sets a reference to the application services to allow access to the other components.
+ /// </summary>
+ /// <value>A reference to the <see cref = "IApplicationServices" /> instance.</value>
+ IApplicationServices Services { get; set; }
+
+ /// <summary>
+ /// Gets or sets a reference to the application settings.
+ /// </summary>
+ /// <value>The application settings.</value>
+ IApplicationSettings Settings { get; set; }
+
+ /// <summary>
+ /// Gets the menu shortcut keys for this command (e.g. Keys.F5).
+ /// </summary>
+ /// <value>The shortcut keys for this command.</value>
+ Keys ShortcutKeys { get; }
+
+ /// <summary>
+ /// Gets the shortcut key text to be displayed as help.
+ /// </summary>
+ /// <value>The shortcut keys text.</value>
+ string ShortcutKeysText { get; }
+
+ /// <summary>
+ /// Gets the "small image" associated with this control (for use on buttons or menu items).
+ /// Use null (or Nothing in Visual Basic) if there is no image.
+ /// </summary>
+ /// <value>The small image representing this command (or null for none).</value>
+ Image SmallImage { get; }
+
+ /// <summary>
+ /// Executes the command based on the current settings.
+ /// </summary>
+ /// <remarks>
+ /// If a commands <see cref = "Enabled" /> value is false, a call to <see cref = "Execute" /> should have no effect
+ /// (and not throw an exception).
+ /// </remarks>
+ void Execute();
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/ICompletionProvider.cs b/minisqlquery-master/src/MiniSqlQuery.Core/ICompletionProvider.cs
new file mode 100644
index 0000000..584d39f
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/ICompletionProvider.cs
@@ -0,0 +1,29 @@
+namespace MiniSqlQuery.Core
+{
+ public interface ICompletionProvider
+ {
+ bool Enabled { get; set; }
+ bool KeyEventHandlerFired(char ch);
+ }
+
+ public class NullCompletionProvider : ICompletionProvider
+ {
+ private readonly bool _enabled;
+
+ public NullCompletionProvider()
+ {
+ _enabled = false;
+ }
+
+ public bool Enabled
+ {
+ get { return _enabled; }
+ set { }
+ }
+
+ public bool KeyEventHandlerFired(char ch)
+ {
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IConfigurationObject.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IConfigurationObject.cs
new file mode 100644
index 0000000..6a56d20
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IConfigurationObject.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 System.ComponentModel;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// A configuration object for use with the options form.
+ /// </summary>
+ public interface IConfigurationObject : INotifyPropertyChanged
+ {
+ /// <summary>
+ /// Gets a value indicating whether the settings are dirty.
+ /// </summary>
+ /// <value>The is dirty.</value>
+ bool IsDirty { get; }
+
+ /// <summary>
+ /// Gets the Name of the settings.
+ /// </summary>
+ /// <value>The name of the settings.</value>
+ string Name { get; }
+
+ /// <summary>
+ /// Gets a Settings object.
+ /// </summary>
+ /// <value>The settings.</value>
+ object Settings { get; }
+
+ /// <summary>
+ /// Saves the settings.
+ /// </summary>
+ void Save();
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IDatabaseInspector.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IDatabaseInspector.cs
new file mode 100644
index 0000000..941a8e3
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IDatabaseInspector.cs
@@ -0,0 +1,65 @@
+#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.DbModel;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// An interface to the query windows database inspector.
+ /// </summary>
+ public interface IDatabaseInspector
+ {
+ /// <summary>
+ /// Gets ColumnMenu.
+ /// </summary>
+ /// <value>The column menu.</value>
+ ContextMenuStrip ColumnMenu { get; }
+
+ /// <summary>
+ /// Gets the current database schema info (if any).
+ /// </summary>
+ /// <value>The db schema.</value>
+ DbModelInstance DbSchema { get; }
+
+ /// <summary>
+ /// Gets RightClickedModelObject.
+ /// </summary>
+ /// <value>The right clicked model object.</value>
+ IDbModelNamedObject RightClickedModelObject { get; }
+
+ /// <summary>
+ /// Gets the name of the curent table (or view) with schema if applicable in the tree view that is being clicked.
+ /// </summary>
+ /// <value>The table or view name or null if none selected.</value>
+ string RightClickedTableName { get; }
+
+ /// <summary>
+ /// Gets the Table context menu strip. Alows an easy method to add menu items.
+ /// </summary>
+ /// <value>The table menu.</value>
+ ContextMenuStrip TableMenu { get; }
+
+ /// <summary>
+ /// Close the window.
+ /// </summary>
+ void Close();
+
+ /// <summary>
+ /// Reloads the meta-data and re-builds the tree.
+ /// </summary>
+ void LoadDatabaseDetails();
+
+ /// <summary>
+ /// The navigate to.
+ /// </summary>
+ /// <param name = "modelObject">The model object.</param>
+ void NavigateTo(IDbModelNamedObject modelObject);
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IDatabaseSchemaService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IDatabaseSchemaService.cs
new file mode 100644
index 0000000..9af188e
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IDatabaseSchemaService.cs
@@ -0,0 +1,46 @@
+#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 System.Data.Common;
+using MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// The database schema service interface.
+ /// </summary>
+ public interface IDatabaseSchemaService
+ {
+ /// <summary>
+ /// Gets or sets ProviderName.
+ /// </summary>
+ /// <value>The provider name.</value>
+ string ProviderName { get; set; }
+
+ /// <summary>
+ /// Gets a database object model that represents the items defined by the <paramref name = "connection" />.
+ /// </summary>
+ /// <param name = "connection">The connection string.</param>
+ /// <returns>A database model instance object describing the database.</returns>
+ DbModelInstance GetDbObjectModel(string connection);
+
+ /// <summary>
+ /// Gets database types by querying the schema.
+ /// </summary>
+ /// <param name = "connection">The database connection.</param>
+ /// <returns>A dictionary of database types, the key is the SQL type and the value is the full detail of the type.</returns>
+ Dictionary<string, DbModelType> GetDbTypes(DbConnection connection);
+
+ /// <summary>
+ /// Get the description of the database.
+ /// </summary>
+ /// <returns>The database description.</returns>
+ string GetDescription();
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IDbModelNamedObject.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IDbModelNamedObject.cs
new file mode 100644
index 0000000..7c44767
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IDbModelNamedObject.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
+
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// A database model object, e.g. a column, table etc can implement this interface.
+ /// </summary>
+ public interface IDbModelNamedObject
+ {
+ /// <summary>
+ /// Gets the full name of the object, e.g. "dbo.FistName".
+ /// </summary>
+ /// <value>The full name.</value>
+ string FullName { get; }
+
+ /// <summary>
+ /// Gets the name of the object, e.g. "FistName".
+ /// </summary>
+ /// <value>The object name.</value>
+ string Name { get; }
+
+ /// <summary>
+ /// Gets the type of the object, e.g. "VARCHAR".
+ /// </summary>
+ /// <value>The type of the object.</value>
+ string ObjectType { get; }
+
+ /// <summary>
+ /// Gets the schema name, e.g. "dbo".
+ /// </summary>
+ /// <value>The schema name if any.</value>
+ string Schema { get; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IEditor.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IEditor.cs
new file mode 100644
index 0000000..62c9281
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IEditor.cs
@@ -0,0 +1,81 @@
+#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.Core
+{
+ /// <summary>
+ /// The editor interface. Defines the core behaviours for interacting with the core application.
+ /// </summary>
+ public interface IEditor
+ {
+ /// <summary>
+ /// Gets or sets the contetnts of the editor.
+ /// </summary>
+ /// <value>All the text in the window.</value>
+ string AllText { get; set; }
+
+ /// <summary>
+ /// Gets the file filter for this editor (e.g. "SQL Files (*.sql)|*.sql|All Files (*.*)|*.*").
+ /// </summary>
+ /// <value>The file filter.</value>
+ string FileFilter { get; }
+
+ /// <summary>
+ /// Gets or sets the filename of the docuemnt being edited (can be null, as in not saved yet).
+ /// </summary>
+ /// <value>The file name.</value>
+ string FileName { get; set; }
+
+ /// <summary>
+ /// Gets a value indicating whether this instance is dirty or not.
+ /// </summary>
+ /// <value>The value of <c>true</c> if this instance is dirty; otherwise, <c>false</c>.</value>
+ bool IsDirty { get; }
+
+ /// <summary>
+ /// Gets the currently selected text (if any) in the editor.
+ /// </summary>
+ /// <value>The selected text.</value>
+ string SelectedText { get; }
+
+ /// <summary>
+ /// Clears the selection (deletes selected text if any).
+ /// </summary>
+ void ClearSelection();
+
+ /// <summary>
+ /// Highlights the string starting at <paramref name = "offset" /> for <paramref name = "length" /> characters.
+ /// </summary>
+ /// <param name = "offset">The offset to start at.</param>
+ /// <param name = "length">The length.</param>
+ void HighlightString(int offset, int length);
+
+ /// <summary>
+ /// Inserts <paramref name = "text" /> at the current cursor position (selected text is overwritten).
+ /// </summary>
+ /// <param name = "text">The text to insert at the current position.</param>
+ void InsertText(string text);
+
+ /// <summary>
+ /// Loads the file by the path in <see cref = "FileName" />.
+ /// </summary>
+ void LoadFile();
+
+ /// <summary>
+ /// Saves the file by the path in <see cref = "FileName" />.
+ /// </summary>
+ void SaveFile();
+
+ /// <summary>
+ /// Sets the syntax mode off the editor.
+ /// </summary>
+ /// <param name = "syntaxName">The mode, e.g. "sql", "cs", "txt" etc.</param>
+ void SetSyntax(string syntaxName);
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IFileEditorResolver.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IFileEditorResolver.cs
new file mode 100644
index 0000000..ef5383f
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IFileEditorResolver.cs
@@ -0,0 +1,44 @@
+#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.Core
+{
+ /// <summary>
+ /// The file editor resolver interface.
+ /// Given a file name or extention the service will work out the most appropriate editor to use.
+ /// </summary>
+ public interface IFileEditorResolver
+ {
+ /// <summary>
+ /// Gets an array of the file descriptiors.
+ /// </summary>
+ /// <returns>An array of <see cref = "FileEditorDescriptor" /> objects.</returns>
+ FileEditorDescriptor[] GetFileTypes();
+
+ /// <summary>
+ /// Registers the specified file editor descriptor.
+ /// </summary>
+ /// <param name = "fileEditorDescriptor">The file editor descriptor.</param>
+ void Register(FileEditorDescriptor fileEditorDescriptor);
+
+ /// <summary>
+ /// Resolves the editor instance from the container based on the filename.
+ /// </summary>
+ /// <param name = "filename">The filename.</param>
+ /// <returns>An editor.</returns>
+ IEditor ResolveEditorInstance(string filename);
+
+ /// <summary>
+ /// Works out the "name" of the editor to use based on the <paramref name = "extension" />.
+ /// </summary>
+ /// <param name = "extension">The extention ("sql", "txt"/".txt" etc).</param>
+ /// <returns>The name of an editor in the container.</returns>
+ string ResolveEditorNameByExtension(string extension);
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IFindReplaceProvider.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IFindReplaceProvider.cs
new file mode 100644
index 0000000..bd241c6
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IFindReplaceProvider.cs
@@ -0,0 +1,59 @@
+#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;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// A control that allows its text to be "found" and optionally "replaced".
+ /// The query editor is an obvious provider but other windows can also provide
+ /// find/replace functionality by implementing this interface (tools, output windows etc).
+ /// </summary>
+ public interface IFindReplaceProvider : ISupportCursorOffset
+ {
+ /// <summary>
+ /// Gets a value indicating whether the text can be replaced, otherwise false.
+ /// </summary>
+ /// <value>The can replace text.</value>
+ bool CanReplaceText { get; }
+
+ /// <summary>
+ /// Gets a reference to the text finding service.
+ /// </summary>
+ /// <seealso cref = "SetTextFindService" />
+ /// <value>The text find service.</value>
+ ITextFindService TextFindService { get; }
+
+ /// <summary>
+ /// Attemps to find <paramref name = "value" /> in the controls text.
+ /// </summary>
+ /// <param name = "value">The string to search for.</param>
+ /// <param name = "startIndex">The starting position within the buffer.</param>
+ /// <param name = "comparisonType">The string comparison type to use, e.g. <see cref="StringComparison.InvariantCultureIgnoreCase"/></param>
+ /// <returns>The find string.</returns>
+ int FindString(string value, int startIndex, StringComparison comparisonType);
+
+ /// <summary>
+ /// Replaces the text from <paramref name = "startIndex" /> for <paramref name = "length" /> characters
+ /// with <paramref name = "value" />.
+ /// </summary>
+ /// <param name = "value">The new string.</param>
+ /// <param name = "startIndex">the starting position.</param>
+ /// <param name = "length">The length (0 implies an insert).</param>
+ /// <returns>True if successful, otherwise false.</returns>
+ /// <seealso cref = "CanReplaceText" />
+ bool ReplaceString(string value, int startIndex, int length);
+
+ /// <summary>
+ /// Overrides the default text find service with <paramref name = "textFindService" /> (e.g. a RegEx service).
+ /// </summary>
+ /// <param name = "textFindService">The service to use.</param>
+ void SetTextFindService(ITextFindService textFindService);
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IFindReplaceWindow.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IFindReplaceWindow.cs
new file mode 100644
index 0000000..6b67bd1
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IFindReplaceWindow.cs
@@ -0,0 +1,56 @@
+#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;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// An interface for the form that provides the find replace functionality.
+ /// </summary>
+ public interface IFindReplaceWindow
+ {
+ /// <summary>
+ /// Gets or sets the "find string".
+ /// </summary>
+ /// <value>The find string.</value>
+ string FindString { get; set; }
+
+ /// <summary>
+ /// Gets a value indicating whether this instance is disposed.
+ /// </summary>
+ /// <value>
+ /// <c>true</c> if this instance is disposed; otherwise, <c>false</c>.
+ /// </value>
+ bool IsDisposed { get; }
+
+ /// <summary>
+ /// Gets or sets the "replace string".
+ /// </summary>
+ /// <value>The replace string.</value>
+ string ReplaceString { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether the form is "top most" in the window stack.
+ /// </summary>
+ /// <value><c>true</c> if it's top most; otherwise, <c>false</c>.</value>
+ bool TopMost { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this form is visible.
+ /// </summary>
+ /// <value><c>true</c> if visible; otherwise, <c>false</c>.</value>
+ bool Visible { get; set; }
+
+ /// <summary>
+ /// Shows the window.
+ /// </summary>
+ /// <param name = "owner">The owner form.</param>
+ void Show(IWin32Window owner);
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IHostWindow.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IHostWindow.cs
new file mode 100644
index 0000000..bc880d1
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IHostWindow.cs
@@ -0,0 +1,148 @@
+#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 WeifenLuo.WinFormsUI.Docking;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Core functions of the main MDI application host Form.
+ /// </summary>
+ public interface IHostWindow
+ {
+ /// <summary>
+ /// Gets a reference to the active child form.
+ /// </summary>
+ /// <value>The active form or null.</value>
+ Form ActiveChildForm { get; }
+
+ /// <summary>
+ /// Gets a reference to the database inspector window if open.
+ /// </summary>
+ /// <value>A <see cref = "IDatabaseInspector" /> object or null.</value>
+ IDatabaseInspector DatabaseInspector { get; }
+
+ /// <summary>
+ /// Gets the instance of the hosting form.
+ /// </summary>
+ /// <value>The host instance.</value>
+ Form Instance { get; }
+
+ /// <summary>
+ /// Gets a reference to the host windows tool strip control.
+ /// </summary>
+ /// <value>The window tool strip.</value>
+ ToolStrip ToolStrip { get; }
+
+ /// <summary>
+ /// Adds an <see cref = "ICommand" /> to the plugins menu.
+ /// </summary>
+ /// <typeparam name = "TCommand">The command implementation to direct the name, image etc of the new menu item.</typeparam>
+ void AddPluginCommand<TCommand>() where TCommand : ICommand, new();
+
+ /// <summary>
+ /// Adds a command based button to the tool strip by <paramref name = "index" />.
+ /// </summary>
+ /// <typeparam name = "TCommand">The command implementation to direct the name, image etc of the new tool strip item.</typeparam>
+ /// <param name = "index">The position for the tool strip button, if null the item is appended to the end.</param>
+ void AddToolStripCommand<TCommand>(int? index) where TCommand : ICommand, new();
+
+ /// <summary>
+ /// Adds a seperator to the tool strip by <paramref name = "index" />.
+ /// </summary>
+ /// <param name = "index">The position for the seperator, if null the item is appended to the end.</param>
+ void AddToolStripSeperator(int? index);
+
+ /// <summary>
+ /// Displays the <paramref name = "frm" /> in the host window.
+ /// </summary>
+ /// <param name = "frm">The child form to dock.</param>
+ void DisplayDockedForm(DockContent frm);
+
+ /// <summary>
+ /// Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file and Help keyword.
+ /// </summary>
+ /// <param name = "source">The source form of the message.</param>
+ /// <param name = "text">The text to display in the message box. </param>
+ /// <param name = "caption">The text to display in the title bar of the message box. </param>
+ /// <param name = "buttons">One of the <see cref = "T:System.Windows.Forms.MessageBoxButtons" /> values that specifies which buttons to display in the message box. </param>
+ /// <param name = "icon">One of the <see cref = "T:System.Windows.Forms.MessageBoxIcon" /> values that specifies which icon to display in the message box. </param>
+ /// <param name = "defaultButton">One of the <see cref = "T:System.Windows.Forms.MessageBoxDefaultButton" /> values that specifies the default button for the message box. </param>
+ /// <param name = "options">One of the <see cref = "T:System.Windows.Forms.MessageBoxOptions" /> values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults.</param>
+ /// <param name = "helpFilePath">The path and name of the Help file to display when the user clicks the Help button. </param>
+ /// <param name = "keyword">The Help keyword to display when the user clicks the Help button. </param>
+ /// <returns>One of the <see cref = "T:System.Windows.Forms.DialogResult" /> values.</returns>
+ /// <exception cref = "T:System.ComponentModel.InvalidEnumArgumentException"><paramref name = "buttons" /> is not a member of <see cref = "T:System.Windows.Forms.MessageBoxButtons" />.-or- <paramref name = "icon" /> is not a member of <see cref = "T:System.Windows.Forms.MessageBoxIcon" />.-or- The <paramref name = "defaultButton" /> specified is not a member of <see cref = "T:System.Windows.Forms.MessageBoxDefaultButton" />. </exception>
+ /// <exception cref = "T:System.InvalidOperationException">An attempt was made to display the <see cref = "T:System.Windows.Forms.MessageBox" /> in a process that is not running in User Interactive mode. This is specified by the <see cref = "P:System.Windows.Forms.SystemInformation.UserInteractive" /> property. </exception>
+ /// <exception cref = "T:System.ArgumentException"><paramref name = "options" /> specified both <see cref = "F:System.Windows.Forms.MessageBoxOptions.DefaultDesktopOnly" /> and <see cref = "F:System.Windows.Forms.MessageBoxOptions.ServiceNotification" />.-or- <paramref name = "buttons" /> specified an invalid combination of <see cref = "T:System.Windows.Forms.MessageBoxButtons" />. </exception>
+ DialogResult DisplayMessageBox(
+ Form source, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, string helpFilePath, string keyword);
+
+ /// <summary>
+ /// Displays an "OK" message box with the specified text and caption.
+ /// </summary>
+ /// <param name = "source">The source form of the message.</param>
+ /// <param name = "text">The text to display in the message box. </param>
+ /// <param name = "caption">The text to display in the title bar of the message box. </param>
+ /// <returns>One of the <see cref = "T:System.Windows.Forms.DialogResult" /> values.</returns>
+ DialogResult DisplaySimpleMessageBox(Form source, string text, string caption);
+
+ /// <summary>
+ /// Gets the relevent menu item by name.
+ /// </summary>
+ /// <param name = "name">The name of the menu to get, e.g. "Plugins" or "File" (no amphersand required).</param>
+ /// <returns>The menu item object by <paramref name = "name" />.</returns>
+ ToolStripMenuItem GetMenuItem(string name);
+
+ ///// <summary>
+ ///// Plays the system beep.
+ ///// </summary>
+ // void Beep();
+
+ /// <summary>
+ /// A testable way to pass command line arguements to the application.
+ /// </summary>
+ /// <param name = "args">An array of command line arguements.</param>
+ void SetArguments(string[] args);
+
+ /// <summary>
+ /// Sets the application cursor to <paramref name = "cursor" />.
+ /// </summary>
+ /// <param name = "cursor">The new cursor mode.</param>
+ void SetPointerState(Cursor cursor);
+
+ /// <summary>
+ /// Sets the status text of the host.
+ /// </summary>
+ /// <param name = "source">The source form, for tracking MDI children.</param>
+ /// <param name = "text">The text to set.</param>
+ void SetStatus(Form source, string text);
+
+ /// <summary>
+ /// Sets the result count.
+ /// </summary>
+ /// <param name="source">The source.</param>
+ /// <param name="count">The count.</param>
+ void SetResultCount(Form source, int? count);
+
+ /// <summary>
+ /// Displays (and replaces if required) the database inspactor window.
+ /// </summary>
+ /// <param name = "databaseInspector">The window to display.</param>
+ /// <param name = "dockState">The state for the window.</param>
+ void ShowDatabaseInspector(IDatabaseInspector databaseInspector, DockState dockState);
+
+ /// <summary>
+ /// Displays a "tool" window, like the database inspector etc.
+ /// </summary>
+ /// <param name = "form">The window to display, it must be a <see cref = "DockContent" /> form.</param>
+ /// <param name = "dockState">The initial docking state of the window, e.g. <see cref = "DockState.DockLeftAutoHide" />.</param>
+ void ShowToolWindow(DockContent form, DockState dockState);
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/ImageResource.Designer.cs b/minisqlquery-master/src/MiniSqlQuery.Core/ImageResource.Designer.cs
new file mode 100644
index 0000000..7b24ade
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/ImageResource.Designer.cs
@@ -0,0 +1,833 @@
+//------------------------------------------------------------------------------
+// <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.Core {
+ 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()]
+ public class ImageResource {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal ImageResource() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MiniSqlQuery.Core.ImageResource", typeof(ImageResource).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)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap accept {
+ get {
+ object obj = ResourceManager.GetObject("accept", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap add {
+ get {
+ object obj = ResourceManager.GetObject("add", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
+ /// </summary>
+ public static System.Drawing.Icon App {
+ get {
+ object obj = ResourceManager.GetObject("App", resourceCulture);
+ return ((System.Drawing.Icon)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap ApplicationIcon {
+ get {
+ object obj = ResourceManager.GetObject("ApplicationIcon", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap around_text {
+ get {
+ object obj = ResourceManager.GetObject("around_text", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap cancel {
+ get {
+ object obj = ResourceManager.GetObject("cancel", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap cog {
+ get {
+ object obj = ResourceManager.GetObject("cog", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap column {
+ get {
+ object obj = ResourceManager.GetObject("column", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap column_row_version {
+ get {
+ object obj = ResourceManager.GetObject("column_row_version", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap comments {
+ get {
+ object obj = ResourceManager.GetObject("comments", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap cross {
+ get {
+ object obj = ResourceManager.GetObject("cross", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap database {
+ get {
+ object obj = ResourceManager.GetObject("database", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap database_add {
+ get {
+ object obj = ResourceManager.GetObject("database_add", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap database_delete {
+ get {
+ object obj = ResourceManager.GetObject("database_delete", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap database_edit {
+ get {
+ object obj = ResourceManager.GetObject("database_edit", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
+ /// </summary>
+ public static System.Drawing.Icon database_edit_icon {
+ get {
+ object obj = ResourceManager.GetObject("database_edit_icon", resourceCulture);
+ return ((System.Drawing.Icon)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap database_error {
+ get {
+ object obj = ResourceManager.GetObject("database_error", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap database_refresh {
+ get {
+ object obj = ResourceManager.GetObject("database_refresh", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
+ /// </summary>
+ public static System.Drawing.Icon disconnect_icon {
+ get {
+ object obj = ResourceManager.GetObject("disconnect_icon", resourceCulture);
+ return ((System.Drawing.Icon)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap disk {
+ get {
+ object obj = ResourceManager.GetObject("disk", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap disk_multiple {
+ get {
+ object obj = ResourceManager.GetObject("disk_multiple", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap email {
+ get {
+ object obj = ResourceManager.GetObject("email", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap email_go {
+ get {
+ object obj = ResourceManager.GetObject("email_go", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap error {
+ get {
+ object obj = ResourceManager.GetObject("error", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap exclamation {
+ get {
+ object obj = ResourceManager.GetObject("exclamation", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap feed {
+ get {
+ object obj = ResourceManager.GetObject("feed", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap find {
+ get {
+ object obj = ResourceManager.GetObject("find", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap folder_bug {
+ get {
+ object obj = ResourceManager.GetObject("folder_bug", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap folder_page {
+ get {
+ object obj = ResourceManager.GetObject("folder_page", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap help {
+ get {
+ object obj = ResourceManager.GetObject("help", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap house {
+ get {
+ object obj = ResourceManager.GetObject("house", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap information {
+ get {
+ object obj = ResourceManager.GetObject("information", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap key {
+ get {
+ object obj = ResourceManager.GetObject("key", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap key_disabled {
+ get {
+ object obj = ResourceManager.GetObject("key_disabled", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap key_go {
+ get {
+ object obj = ResourceManager.GetObject("key_go", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap key_go_disabled {
+ get {
+ object obj = ResourceManager.GetObject("key_go_disabled", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap lightning {
+ get {
+ object obj = ResourceManager.GetObject("lightning", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap page {
+ get {
+ object obj = ResourceManager.GetObject("page", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap page_white {
+ get {
+ object obj = ResourceManager.GetObject("page_white", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap page_white_csharp {
+ get {
+ object obj = ResourceManager.GetObject("page_white_csharp", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap plugin {
+ get {
+ object obj = ResourceManager.GetObject("plugin", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap plugin_go {
+ get {
+ object obj = ResourceManager.GetObject("plugin_go", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap plugin_link {
+ get {
+ object obj = ResourceManager.GetObject("plugin_link", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap printer {
+ get {
+ object obj = ResourceManager.GetObject("printer", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap script {
+ get {
+ object obj = ResourceManager.GetObject("script", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap script_code {
+ get {
+ object obj = ResourceManager.GetObject("script_code", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap server {
+ get {
+ object obj = ResourceManager.GetObject("server", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap server_add {
+ get {
+ object obj = ResourceManager.GetObject("server_add", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap server_connect {
+ get {
+ object obj = ResourceManager.GetObject("server_connect", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap server_database {
+ get {
+ object obj = ResourceManager.GetObject("server_database", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap server_delete {
+ get {
+ object obj = ResourceManager.GetObject("server_delete", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap server_edit {
+ get {
+ object obj = ResourceManager.GetObject("server_edit", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap server_error {
+ get {
+ object obj = ResourceManager.GetObject("server_error", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap stop {
+ get {
+ object obj = ResourceManager.GetObject("stop", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table {
+ get {
+ object obj = ResourceManager.GetObject("table", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_add {
+ get {
+ object obj = ResourceManager.GetObject("table_add", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_delete {
+ get {
+ object obj = ResourceManager.GetObject("table_delete", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_edit {
+ get {
+ object obj = ResourceManager.GetObject("table_edit", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_error {
+ get {
+ object obj = ResourceManager.GetObject("table_error", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_gear {
+ get {
+ object obj = ResourceManager.GetObject("table_gear", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_go {
+ get {
+ object obj = ResourceManager.GetObject("table_go", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_key {
+ get {
+ object obj = ResourceManager.GetObject("table_key", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_lightning {
+ get {
+ object obj = ResourceManager.GetObject("table_lightning", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_link {
+ get {
+ object obj = ResourceManager.GetObject("table_link", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_multiple {
+ get {
+ object obj = ResourceManager.GetObject("table_multiple", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_refresh {
+ get {
+ object obj = ResourceManager.GetObject("table_refresh", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_relationship {
+ get {
+ object obj = ResourceManager.GetObject("table_relationship", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_row_delete {
+ get {
+ object obj = ResourceManager.GetObject("table_row_delete", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_row_insert {
+ get {
+ object obj = ResourceManager.GetObject("table_row_insert", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_save {
+ get {
+ object obj = ResourceManager.GetObject("table_save", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap table_sort {
+ get {
+ object obj = ResourceManager.GetObject("table_sort", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap tick {
+ get {
+ object obj = ResourceManager.GetObject("tick", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap view {
+ get {
+ object obj = ResourceManager.GetObject("view", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap view_multiple {
+ get {
+ object obj = ResourceManager.GetObject("view_multiple", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap world_link {
+ get {
+ object obj = ResourceManager.GetObject("world_link", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap wrench {
+ get {
+ object obj = ResourceManager.GetObject("wrench", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ /// </summary>
+ public static System.Drawing.Bitmap wrench_orange {
+ get {
+ object obj = ResourceManager.GetObject("wrench_orange", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+ }
+}
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/ImageResource.resx b/minisqlquery-master/src/MiniSqlQuery.Core/ImageResource.resx
new file mode 100644
index 0000000..98a82f3
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/ImageResource.resx
@@ -0,0 +1,352 @@
+<?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="accept" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\accept.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="add" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\add.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="App" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\app.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="ApplicationIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\applicationicon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="around_text" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\around_text.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="cancel" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\cancel.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="cog" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\cog.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="column" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\column.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="comments" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\comments.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="cross" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\cross.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="database" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\database.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="database_add" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\database_add.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="database_delete" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\database_delete.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="database_edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\database_edit.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="database_error" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\database_error.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="database_refresh" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\database_refresh.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="disk" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\disk.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="disk_multiple" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\disk_multiple.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="email" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\email.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="email_go" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\email_go.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="error" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\error.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="exclamation" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\exclamation.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="feed" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\feed.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="find" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\find.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="folder_bug" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\folder_bug.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="folder_page" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\folder_page.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="help" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\help.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="house" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\house.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="information" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\information.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="key" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\key.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="lightning" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\lightning.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="page" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\page.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="page_white" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\page_white.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="page_white_csharp" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\page_white_csharp.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="plugin" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\plugin.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="plugin_go" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\plugin_go.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="plugin_link" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\plugin_link.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="printer" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\printer.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="script" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\script.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="script_code" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\script_code.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="server" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\server.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="server_add" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\server_add.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="server_connect" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\server_connect.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="server_database" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\server_database.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="server_delete" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\server_delete.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="server_edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\server_edit.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="server_error" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\server_error.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="stop" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\stop.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\table.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_add" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_add.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_delete" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\table_delete.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_edit" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_edit.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_error" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_error.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_gear" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_gear.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_go" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\table_go.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_key" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_key.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_lightning" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_lightning.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_link" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_link.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_multiple" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_multiple.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_refresh" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_refresh.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_relationship" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_relationship.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_row_delete" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_row_delete.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_row_insert" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_row_insert.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_save" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\table_save.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="table_sort" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\table_sort.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="tick" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\tick.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="view" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\view.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="view_multiple" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\view_multiple.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="world_link" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\world_link.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="wrench" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\wrench.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="wrench_orange" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>Images\wrench_orange.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="database_edit_icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\database_edit.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="disconnect_icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\disconnect.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="key_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\key_disabled.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="key_go_disabled" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\key_go_disabled.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="column_row_version" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\column_row_version.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+ <data name="key_go" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>images\key_go.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
+</root>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/accept.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/accept.png
new file mode 100644
index 0000000..89c8129
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/accept.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/add.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/add.png
new file mode 100644
index 0000000..6332fef
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/add.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/App.ico b/minisqlquery-master/src/MiniSqlQuery.Core/Images/App.ico
new file mode 100644
index 0000000..50d3b41
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/App.ico differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/ApplicationIcon.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/ApplicationIcon.png
new file mode 100644
index 0000000..6c1c6ce
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/ApplicationIcon.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/around_text.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/around_text.png
new file mode 100644
index 0000000..c47ddd8
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/around_text.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/cancel.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/cancel.png
new file mode 100644
index 0000000..c149c2b
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/cancel.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/cog.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/cog.png
new file mode 100644
index 0000000..67de2c6
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/cog.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/column.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/column.png
new file mode 100644
index 0000000..5ab5189
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/column.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/column_row_version.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/column_row_version.png
new file mode 100644
index 0000000..4c23b22
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/column_row_version.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/comments.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/comments.png
new file mode 100644
index 0000000..39433cf
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/comments.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/cross.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/cross.png
new file mode 100644
index 0000000..1514d51
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/cross.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/database.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database.png
new file mode 100644
index 0000000..3d09261
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_add.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_add.png
new file mode 100644
index 0000000..802bd6c
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_add.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_delete.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_delete.png
new file mode 100644
index 0000000..cce652e
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_delete.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_edit.ico b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_edit.ico
new file mode 100644
index 0000000..12101a1
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_edit.ico differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_edit.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_edit.png
new file mode 100644
index 0000000..e501b66
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_edit.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_error.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_error.png
new file mode 100644
index 0000000..578221a
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_error.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_refresh.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_refresh.png
new file mode 100644
index 0000000..ff803be
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/database_refresh.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/disconnect.ico b/minisqlquery-master/src/MiniSqlQuery.Core/Images/disconnect.ico
new file mode 100644
index 0000000..9e5d4c2
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/disconnect.ico differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/disconnect.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/disconnect.png
new file mode 100644
index 0000000..b335cb1
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/disconnect.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/disk.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/disk.png
new file mode 100644
index 0000000..99d532e
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/disk.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/disk_multiple.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/disk_multiple.png
new file mode 100644
index 0000000..fc5a52f
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/disk_multiple.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/email.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/email.png
new file mode 100644
index 0000000..7348aed
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/email.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/email_go.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/email_go.png
new file mode 100644
index 0000000..4a6c5d3
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/email_go.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/error.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/error.png
new file mode 100644
index 0000000..628cf2d
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/error.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/exclamation.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/exclamation.png
new file mode 100644
index 0000000..c37bd06
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/exclamation.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/feed.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/feed.png
new file mode 100644
index 0000000..315c4f4
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/feed.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/find.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/find.png
new file mode 100644
index 0000000..1547479
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/find.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/folder_bug.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/folder_bug.png
new file mode 100644
index 0000000..4f791b6
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/folder_bug.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/folder_page.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/folder_page.png
new file mode 100644
index 0000000..1ef6e11
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/folder_page.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/help.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/help.png
new file mode 100644
index 0000000..5c87017
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/help.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/house.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/house.png
new file mode 100644
index 0000000..fed6221
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/house.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/information.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/information.png
new file mode 100644
index 0000000..12cd1ae
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/information.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/key.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/key.png
new file mode 100644
index 0000000..4ec1a92
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/key.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/key_disabled.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/key_disabled.png
new file mode 100644
index 0000000..c6b3cff
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/key_disabled.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/key_go.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/key_go.png
new file mode 100644
index 0000000..30b0dc3
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/key_go.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/key_go_disabled.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/key_go_disabled.png
new file mode 100644
index 0000000..2274d93
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/key_go_disabled.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/lightning.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/lightning.png
new file mode 100644
index 0000000..9680afd
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/lightning.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/page.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/page.png
new file mode 100644
index 0000000..03ddd79
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/page.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/page_white.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/page_white.png
new file mode 100644
index 0000000..8b8b1ca
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/page_white.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/page_white_csharp.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/page_white_csharp.png
new file mode 100644
index 0000000..ffb8fc9
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/page_white_csharp.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/plugin.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/plugin.png
new file mode 100644
index 0000000..6187b15
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/plugin.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/plugin_go.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/plugin_go.png
new file mode 100644
index 0000000..41da991
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/plugin_go.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/plugin_link.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/plugin_link.png
new file mode 100644
index 0000000..445c188
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/plugin_link.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/printer.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/printer.png
new file mode 100644
index 0000000..a350d18
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/printer.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/script.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/script.png
new file mode 100644
index 0000000..0f9ed4d
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/script.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/script_code.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/script_code.png
new file mode 100644
index 0000000..63fe6ce
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/script_code.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/server.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server.png
new file mode 100644
index 0000000..720a237
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_add.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_add.png
new file mode 100644
index 0000000..3f10a3a
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_add.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_connect.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_connect.png
new file mode 100644
index 0000000..49b2691
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_connect.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_database.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_database.png
new file mode 100644
index 0000000..b24e826
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_database.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_delete.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_delete.png
new file mode 100644
index 0000000..61e740f
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_delete.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_edit.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_edit.png
new file mode 100644
index 0000000..dc76253
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_edit.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_error.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_error.png
new file mode 100644
index 0000000..f640256
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/server_error.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/stop.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/stop.png
new file mode 100644
index 0000000..0cfd585
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/stop.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table.png
new file mode 100644
index 0000000..abcd936
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_add.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_add.png
new file mode 100644
index 0000000..2a3e5c4
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_add.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_delete.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_delete.png
new file mode 100644
index 0000000..b85916d
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_delete.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_edit.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_edit.png
new file mode 100644
index 0000000..bfcb024
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_edit.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_error.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_error.png
new file mode 100644
index 0000000..589e92b
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_error.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_gear.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_gear.png
new file mode 100644
index 0000000..cfc2702
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_gear.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_go.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_go.png
new file mode 100644
index 0000000..0528dfa
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_go.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_key.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_key.png
new file mode 100644
index 0000000..34e23e2
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_key.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_lightning.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_lightning.png
new file mode 100644
index 0000000..612612b
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_lightning.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_link.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_link.png
new file mode 100644
index 0000000..decac8a
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_link.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_multiple.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_multiple.png
new file mode 100644
index 0000000..d76448e
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_multiple.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_refresh.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_refresh.png
new file mode 100644
index 0000000..ab92010
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_refresh.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_relationship.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_relationship.png
new file mode 100644
index 0000000..28b8505
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_relationship.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_row_delete.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_row_delete.png
new file mode 100644
index 0000000..54c6969
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_row_delete.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_row_insert.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_row_insert.png
new file mode 100644
index 0000000..ff5925e
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_row_insert.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_save.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_save.png
new file mode 100644
index 0000000..25b74d1
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_save.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_sort.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_sort.png
new file mode 100644
index 0000000..ed6785a
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/table_sort.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/Thumbs.db b/minisqlquery-master/src/MiniSqlQuery.Core/Images/Thumbs.db
new file mode 100644
index 0000000..9684838
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/Thumbs.db differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/tick.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/tick.png
new file mode 100644
index 0000000..a9925a0
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/tick.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/view.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/view.png
new file mode 100644
index 0000000..b14f218
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/view.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/view_multiple.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/view_multiple.png
new file mode 100644
index 0000000..3d36321
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/view_multiple.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/world_link.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/world_link.png
new file mode 100644
index 0000000..b8edc12
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/world_link.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/wrench.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/wrench.png
new file mode 100644
index 0000000..5c8213f
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/wrench.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Images/wrench_orange.png b/minisqlquery-master/src/MiniSqlQuery.Core/Images/wrench_orange.png
new file mode 100644
index 0000000..565a933
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/Images/wrench_orange.png differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IMostRecentFilesService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IMostRecentFilesService.cs
new file mode 100644
index 0000000..5ac1cfe
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IMostRecentFilesService.cs
@@ -0,0 +1,48 @@
+#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;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Tracks a list of filenames with promotion etc.
+ /// </summary>
+ public interface IMostRecentFilesService
+ {
+ /// <summary>
+ /// Occurs when a change to the most recent files list is made.
+ /// </summary>
+ event EventHandler<MostRecentFilesChangedEventArgs> MostRecentFilesChanged;
+
+ /// <summary>
+ /// Gets the filenames on the MRU list.
+ /// </summary>
+ /// <value>The filenames.</value>
+ IList<string> Filenames { get; }
+
+ /// <summary>
+ /// Gets the maximum number of MRU commands.
+ /// </summary>
+ /// <value>The maximum number of MRU commands.</value>
+ int MaxCommands { get; }
+
+ /// <summary>
+ /// Registers the specified <paramref name="filename"/>.
+ /// </summary>
+ /// <param name="filename">The <paramref name="filename"/> to register.</param>
+ void Register(string filename);
+
+ /// <summary>
+ /// Removes the specified <paramref name="filename"/> from the list.
+ /// </summary>
+ /// <param name="filename">The <paramref name="filename"/> to remove.</param>
+ void Remove(string filename);
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/INamedObject.cs b/minisqlquery-master/src/MiniSqlQuery.Core/INamedObject.cs
new file mode 100644
index 0000000..e0ca98d
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/INamedObject.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace MiniSqlQuery.Core
+{
+ public interface INamedObject
+ {
+ string Name { get; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/INavigatableDocument.cs b/minisqlquery-master/src/MiniSqlQuery.Core/INavigatableDocument.cs
new file mode 100644
index 0000000..d5cb377
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/INavigatableDocument.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
+
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// An interface for a "document" that can be navigated with a cursor, e.g. position at line 1, column 4 etc.
+ /// </summary>
+ public interface INavigatableDocument : ISupportCursorOffset
+ {
+ /// <summary>
+ /// Gets the current column the cursor is in.
+ /// </summary>
+ /// <value>The cursor column.</value>
+ int CursorColumn { get; }
+
+ /// <summary>
+ /// Gets the current line the cursor is on.
+ /// </summary>
+ /// <value>The cursor line.</value>
+ int CursorLine { get; }
+
+ /// <summary>
+ /// Gets the the total number of lines in the editor.
+ /// </summary>
+ /// <value>The total lines.</value>
+ int TotalLines { get; }
+
+ /// <summary>
+ /// Sets the cursor by <paramref name = "line" /> and <paramref name = "column" />.
+ /// </summary>
+ /// <param name = "line">The line number.</param>
+ /// <param name = "column">The column number.</param>
+ /// <returns>The set cursor by location.</returns>
+ bool SetCursorByLocation(int line, int column);
+
+ /// <summary>
+ /// Sets the cursor position by offset.
+ /// </summary>
+ /// <param name = "offset">The offset for the cursor.</param>
+ /// <returns>The set cursor by offset.</returns>
+ bool SetCursorByOffset(int offset);
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IPerformTask.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IPerformTask.cs
new file mode 100644
index 0000000..bcf4beb
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IPerformTask.cs
@@ -0,0 +1,33 @@
+#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.Core
+{
+ /// <summary>
+ /// Intended as a window level task such as executing a query (like applying ICommand to a window).
+ /// </summary>
+ public interface IPerformTask
+ {
+ /// <summary>
+ /// Gets a value indicating whether this instance is busy.
+ /// </summary>
+ /// <value>True if busy.</value>
+ bool IsBusy { get; }
+
+ /// <summary>
+ /// Cancels the current task.
+ /// </summary>
+ void CancelTask();
+
+ /// <summary>
+ /// Executes the current task.
+ /// </summary>
+ void ExecuteTask();
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IPlugIn.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IPlugIn.cs
new file mode 100644
index 0000000..86215b6
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IPlugIn.cs
@@ -0,0 +1,65 @@
+#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.Core
+{
+ /// <summary>
+ /// An interface for simple plugins for use in extending Mini SQL Query.
+ /// Plugins are loaded from DLL's in the working directory matching the pattern "*.PlugIn.dll"
+ /// </summary>
+ /// <remarks>
+ /// <para>Plugins are created during the load process.
+ /// After all plugins are loaded they are sorted by the <see cref = "RequestedLoadOrder" /> property.
+ /// Next the <see cref = "LoadPlugIn" /> method is called on each in turn supplying a reference to<see cref = "IApplicationServices" />.
+ /// Next the main application form is displayed and after all control creation is complete (i.e. after the Form
+ /// Shown event) a call to <see cref = "InitializePlugIn" /> is made for each loaded plugin.
+ /// This is where <see cref = "ICommand" /> instances should be created and assigned to buttons, menus etc.
+ /// These services provide access to the rest of the editor.
+ /// As the main form is closing down, each plugins <see cref = "UnloadPlugIn" /> method is called.</para>
+ /// <para>The <see cref = "PluginLoaderBase" /> class can be used to handle the basics of a plugin class to speed development.</para>
+ /// </remarks>
+ public interface IPlugIn
+ {
+ /// <summary>
+ /// Gets a brief description of the plugin.
+ /// </summary>
+ /// <value>The plugin description.</value>
+ string PluginDescription { get; }
+
+ /// <summary>
+ /// Gets the descriptive name of the plugin.
+ /// </summary>
+ /// <value>The plugin name.</value>
+ string PluginName { get; }
+
+ /// <summary>
+ /// Gets the plugin load order. For external plugins start with values over 1000.
+ /// This is a simple way of handling dependencies of other services etc.
+ /// </summary>
+ /// <value>The requested load order.</value>
+ int RequestedLoadOrder { get; }
+
+ /// <summary>
+ /// Initializes the plug in, called after the main form is displayed.
+ /// </summary>
+ void InitializePlugIn();
+
+ /// <summary>
+ /// Loads the plugin and stores a reference to the service container.
+ /// Called at application startup time.
+ /// </summary>
+ /// <param name = "services">The service container, allows access to other serivces in the application.</param>
+ void LoadPlugIn(IApplicationServices services);
+
+ /// <summary>
+ /// Called when the plugin is unloading (typically application shutdown).
+ /// </summary>
+ void UnloadPlugIn();
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IPrintableContent.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IPrintableContent.cs
new file mode 100644
index 0000000..f6d8373
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IPrintableContent.cs
@@ -0,0 +1,24 @@
+#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.Drawing.Printing;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// If implemented it signals that the class supports printing of the "contents" of the object.
+ /// </summary>
+ public interface IPrintableContent
+ {
+ /// <summary>
+ /// Gets the "document" to print (or null if not supported in the current context).
+ /// </summary>
+ /// <value>The print document.</value>
+ PrintDocument PrintDocument { get; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IQueryBatchProvider.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IQueryBatchProvider.cs
new file mode 100644
index 0000000..8bf6000
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IQueryBatchProvider.cs
@@ -0,0 +1,24 @@
+#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.Core
+{
+ /// <summary>
+ /// A query batch provider is a class (typically a window) that manages a
+ /// batch query and therefore has a data result etc.
+ /// </summary>
+ public interface IQueryBatchProvider
+ {
+ /// <summary>
+ /// Gets a reference to the batch.
+ /// </summary>
+ /// <value>The query batch.</value>
+ QueryBatch Batch { get; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IQueryEditor.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IQueryEditor.cs
new file mode 100644
index 0000000..559c483
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IQueryEditor.cs
@@ -0,0 +1,36 @@
+#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 ICSharpCode.TextEditor.Gui.CompletionWindow;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// The functions of the editing window.
+ /// </summary>
+ public interface IQueryEditor : IPerformTask, IFindReplaceProvider, INavigatableDocument, IQueryBatchProvider, IEditor
+ {
+ /// <summary>
+ /// Gets a reference to the actual editor control.
+ /// </summary>
+ /// <value>The editor control.</value>
+ Control EditorControl { get; }
+
+ /// <summary>
+ /// Sets the "status" text for the form.
+ /// </summary>
+ /// <param name = "text">The message to appear in the status bar.</param>
+ void SetStatus(string text);
+
+ /// <summary>
+ /// Access to the code completion window.
+ /// </summary>
+ CodeCompletionWindow CodeCompletionWindow { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/ISupportCursorOffset.cs b/minisqlquery-master/src/MiniSqlQuery.Core/ISupportCursorOffset.cs
new file mode 100644
index 0000000..0bb899e
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/ISupportCursorOffset.cs
@@ -0,0 +1,23 @@
+#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.Core
+{
+ /// <summary>
+ /// A "document" that supports reporting the position of it's cursor.
+ /// </summary>
+ public interface ISupportCursorOffset
+ {
+ /// <summary>
+ /// Gets the cursor offset.
+ /// </summary>
+ /// <value>The cursor offset.</value>
+ int CursorOffset { get; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/ITextFindService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/ITextFindService.cs
new file mode 100644
index 0000000..b02cb69
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/ITextFindService.cs
@@ -0,0 +1,24 @@
+#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.Core
+{
+ /// <summary>
+ /// A text finding serice interface. A window can implement this interface and sit will allow searching of its text.
+ /// </summary>
+ public interface ITextFindService
+ {
+ /// <summary>
+ /// Finds the next string of text depending on the contrnts of the <paramref name = "request" />.
+ /// </summary>
+ /// <param name = "request">The request.</param>
+ /// <returns>A find request with position updated.</returns>
+ FindTextRequest FindNext(FindTextRequest request);
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/IViewTable.cs b/minisqlquery-master/src/MiniSqlQuery.Core/IViewTable.cs
new file mode 100644
index 0000000..9d17cd6
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/IViewTable.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
+
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Interface for viewing table and view data.
+ /// </summary>
+ public interface IViewTable : IPerformTask, IQueryBatchProvider, INavigatableDocument
+ {
+ /// <summary>
+ /// Gets a value indicating whether AutoReload.
+ /// </summary>
+ /// <value>The auto reload.</value>
+ bool AutoReload { get; }
+
+ /// <summary>
+ /// Gets or sets TableName.
+ /// </summary>
+ /// <value>The table name.</value>
+ string TableName { get; set; }
+
+ /// <summary>
+ /// Gets or sets Text of the window, i.e. the table name.
+ /// </summary>
+ /// <value>The text of the window.</value>
+ string Text { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Migrated rules for MiniSqlQuery.Core (2).ruleset b/minisqlquery-master/src/MiniSqlQuery.Core/Migrated rules for MiniSqlQuery.Core (2).ruleset
new file mode 100644
index 0000000..c90c35b
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Migrated rules for MiniSqlQuery.Core (2).ruleset
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RuleSet Name="Migrated rules for MiniSqlQuery.Core (2).ruleset" Description="This rule set was created from the CodeAnalysisRules property for the "Debug (Any CPU)" configuration in project "C:\Projects\MiniSqlQuery\trunk\MiniSqlQuery.Core\MiniSqlQuery.Core.csproj"." ToolsVersion="10.0">
+ <IncludeAll Action="Warning" />
+ <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
+ <Rule Id="CA1004" Action="None" />
+ </Rules>
+</RuleSet>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/MiniSqlQuery.Core.csproj b/minisqlquery-master/src/MiniSqlQuery.Core/MiniSqlQuery.Core.csproj
new file mode 100644
index 0000000..dee3305
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/MiniSqlQuery.Core.csproj
@@ -0,0 +1,376 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>9.0.30729</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{B819CF6A-B5FD-4E85-842D-FD855F856A5A}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>MiniSqlQuery.Core</RootNamespace>
+ <AssemblyName>MiniSqlQuery.Core</AssemblyName>
+ <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>MiniSqlQuery.snk</AssemblyOriginatorKeyFile>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <UpgradeBackupLocation />
+ <TargetFrameworkProfile>
+ </TargetFrameworkProfile>
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\Build\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <DocumentationFile>..\Build\Debug\MiniSqlQuery.Core.XML</DocumentationFile>
+ <RunCodeAnalysis>false</RunCodeAnalysis>
+ <NoWarn>1591</NoWarn>
+ <CodeAnalysisRules>
+ </CodeAnalysisRules>
+ <CodeAnalysisRuleSet>Migrated rules for MiniSqlQuery.Core (2).ruleset</CodeAnalysisRuleSet>
+ <Prefer32Bit>false</Prefer32Bit>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <DocumentationFile>bin\Release\MiniSqlQuery.Core.xml</DocumentationFile>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <NoWarn>1591</NoWarn>
+ <Prefer32Bit>false</Prefer32Bit>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release - No Tests|AnyCPU' ">
+ <OutputPath>bin\Release - No Tests\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <DocumentationFile>bin\Release\MiniSqlQuery.Core.xml</DocumentationFile>
+ <Optimize>true</Optimize>
+ <DebugType>pdbonly</DebugType>
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ <Prefer32Bit>false</Prefer32Bit>
+ <NoWarn>1591</NoWarn>
+ </PropertyGroup>
+ <PropertyGroup>
+ <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Web" />
+ <Reference Include="System.Windows.Forms" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\CommonAssemblyInfo.cs">
+ <Link>CommonAssemblyInfo.cs</Link>
+ </Compile>
+ <Compile Include="BasicTextFindService.cs" />
+ <Compile Include="BatchProgressEventArgs.cs" />
+ <Compile Include="CommandManager.cs" />
+ <Compile Include="Commands\CancelTaskCommand.cs" />
+ <Compile Include="Commands\CloseActiveWindowCommand.cs" />
+ <Compile Include="Commands\CloseAllWindowsCommand.cs" />
+ <Compile Include="Commands\CommandBase.cs" />
+ <Compile Include="ApplicationServices.cs" />
+ <Compile Include="Commands\CloseDatabaseConnectionCommand.cs" />
+ <Compile Include="Commands\ConvertTextToLowerCaseCommand.cs" />
+ <Compile Include="Commands\ConvertTextToTitleCaseCommand.cs" />
+ <Compile Include="Commands\ConvertTextToUpperCaseCommand.cs" />
+ <Compile Include="Commands\CopyQueryEditorFileNameCommand.cs" />
+ <Compile Include="Commands\DisplayDbModelDependenciesCommand.cs" />
+ <Compile Include="Commands\EmailAuthorCommand.cs" />
+ <Compile Include="Commands\ExecuteTaskCommand.cs" />
+ <Compile Include="Commands\ExitApplicationCommand.cs" />
+ <Compile Include="Commands\GenerateCommandCodeCommand.cs" />
+ <Compile Include="Commands\InsertGuidCommand.cs" />
+ <Compile Include="Commands\NewQueryFormCommand.cs" />
+ <Compile Include="Commands\OpenConnectionFileCommand.cs" />
+ <Compile Include="Commands\PasteAroundSelectionCommand.cs" />
+ <Compile Include="Commands\PrintCommand.cs" />
+ <Compile Include="Commands\RefreshDatabaseConnectionCommand.cs" />
+ <Compile Include="Commands\SetLeftPasteAroundSelectionCommand.cs" />
+ <Compile Include="Commands\SetRightPasteAroundSelectionCommand.cs" />
+ <Compile Include="Commands\ShowHelpCommand.cs" />
+ <Compile Include="Commands\ShowUrlCommand.cs" />
+ <Compile Include="Commands\ShowWebPageCommand.cs" />
+ <Compile Include="Controls\BatchQuerySelectControl.cs">
+ <SubType>UserControl</SubType>
+ </Compile>
+ <Compile Include="Controls\BatchQuerySelectControl.Designer.cs">
+ <DependentUpon>BatchQuerySelectControl.cs</DependentUpon>
+ </Compile>
+ <Compile Include="Controls\ExceptionControl.cs">
+ <SubType>UserControl</SubType>
+ </Compile>
+ <Compile Include="Controls\ExceptionControl.Designer.cs">
+ <DependentUpon>ExceptionControl.cs</DependentUpon>
+ </Compile>
+ <Compile Include="Controls\PluginListControl.cs">
+ <SubType>UserControl</SubType>
+ </Compile>
+ <Compile Include="Controls\PluginListControl.Designer.cs">
+ <DependentUpon>PluginListControl.cs</DependentUpon>
+ </Compile>
+ <Compile Include="DatabaseMetaDataService.cs" />
+ <Compile Include="DbModel\DbModelConstraint.cs" />
+ <Compile Include="DbModel\DbModelDependencyWalker.cs" />
+ <Compile Include="DbModel\DbModelForeignKeyReference.cs" />
+ <Compile Include="DbModel\DbModelObjectBase.cs" />
+ <Compile Include="DbModel\DbModelInstance.cs" />
+ <Compile Include="DbModel\DbModelColumn.cs" />
+ <Compile Include="DbConnectionDefinition.cs" />
+ <Compile Include="DbConnectionDefinitionList.cs" />
+ <Compile Include="DbModel\DbModelTable.cs" />
+ <Compile Include="DbModel\DbModelType.cs" />
+ <Compile Include="DbModel\DbModelView.cs" />
+ <Compile Include="DbModel\GenericSchemaService.cs" />
+ <Compile Include="DbModel\ISqlWriter.cs" />
+ <Compile Include="DbModel\OleDbSchemaService.cs" />
+ <Compile Include="DbModel\OracleSchemaService.cs" />
+ <Compile Include="DbModel\SqlCeSchemaService.cs" />
+ <Compile Include="DbModel\SqlClientSchemaService.cs" />
+ <Compile Include="DbModel\SqlWriter.cs" />
+ <Compile Include="FileEditorDescriptor.cs" />
+ <Compile Include="FileEditorResolverService.cs" />
+ <Compile Include="Forms\BatchQuerySelectForm.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="Forms\BatchQuerySelectForm.Designer.cs">
+ <DependentUpon>BatchQuerySelectForm.cs</DependentUpon>
+ </Compile>
+ <Compile Include="IApplicationServices.cs" />
+ <Compile Include="ICompletionProvider.cs" />
+ <Compile Include="IDatabaseSchemaService.cs" />
+ <Compile Include="IEditor.cs" />
+ <Compile Include="IFileEditorResolver.cs" />
+ <Compile Include="IFindReplaceProvider.cs" />
+ <Compile Include="FindReplaceTextRequest.cs" />
+ <Compile Include="IApplicationSettings.cs" />
+ <Compile Include="ICommand.cs" />
+ <Compile Include="IDatabaseInspector.cs" />
+ <Compile Include="IFindReplaceWindow.cs" />
+ <Compile Include="IHostWindow.cs" />
+ <Compile Include="ImageResource.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>ImageResource.resx</DependentUpon>
+ </Compile>
+ <Compile Include="IDbModelNamedObject.cs" />
+ <Compile Include="IMostRecentFilesService.cs" />
+ <Compile Include="INavigatableDocument.cs" />
+ <Compile Include="IPerformTask.cs" />
+ <Compile Include="IPlugIn.cs" />
+ <Compile Include="IPrintableContent.cs" />
+ <Compile Include="IQueryBatchProvider.cs" />
+ <Compile Include="IQueryEditor.cs" />
+ <Compile Include="CommandControlBuilder.cs" />
+ <Compile Include="IConfigurationObject.cs" />
+ <Compile Include="ISupportCursorOffset.cs" />
+ <Compile Include="ITextFindService.cs" />
+ <Compile Include="IViewTable.cs" />
+ <Compile Include="MostRecentFilesChangedEventArgs.cs" />
+ <Compile Include="MostRecentFilesService.cs" />
+ <Compile Include="NotifyPropertyChangedBase.cs" />
+ <Compile Include="ObjectTypes.cs" />
+ <Compile Include="PlugInComparer.cs" />
+ <Compile Include="PluginLoaderBase.cs" />
+ <Compile Include="PlugInUtility.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Properties\Resources.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Resources.resx</DependentUpon>
+ </Compile>
+ <Compile Include="Query.cs" />
+ <Compile Include="QueryBatch.cs" />
+ <Compile Include="QueryRunner.cs" />
+ <Compile Include="SqlQueryRunner.cs" />
+ <Compile Include="StringWriterWithEncoding.cs" />
+ <Compile Include="SystemMessage.cs" />
+ <Compile Include="SystemMessageEventArgs.cs" />
+ <Compile Include="Template\NVelocityWrapper.cs" />
+ <Compile Include="Template\TemplateException.cs" />
+ <Compile Include="Template\TextFormatter.cs" />
+ <Compile Include="Utility.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="DefaultConnectionDefinitionFile.xml" />
+ <Content Include="Images\accept.png" />
+ <None Include="Images\add.png" />
+ <Content Include="Images\App.ico" />
+ <Content Include="Images\ApplicationIcon.png" />
+ <Content Include="Images\around_text.png" />
+ <Content Include="Images\cancel.png" />
+ <Content Include="Images\cog.png" />
+ <None Include="Images\column.png" />
+ <None Include="Images\comments.png" />
+ <None Include="Images\key_disabled.png" />
+ <None Include="Images\key_go_disabled.png" />
+ <Content Include="Images\column_row_version.png" />
+ <Content Include="Images\cross.png" />
+ <Content Include="Images\database.png" />
+ <Content Include="Images\database_add.png" />
+ <Content Include="Images\database_delete.png" />
+ <Content Include="Images\database_edit.ico" />
+ <Content Include="Images\database_edit.png" />
+ <Content Include="Images\database_error.png" />
+ <Content Include="Images\database_refresh.png" />
+ <Content Include="Images\disconnect.ico" />
+ <Content Include="Images\disconnect.png" />
+ <Content Include="Images\disk.png" />
+ <Content Include="Images\disk_multiple.png" />
+ <Content Include="Images\email.png" />
+ <Content Include="Images\email_go.png" />
+ <None Include="Images\feed.png" />
+ <None Include="Images\exclamation.png" />
+ <None Include="Images\error.png" />
+ <Content Include="Images\find.png" />
+ <None Include="Images\folder_bug.png" />
+ <Content Include="Images\folder_page.png" />
+ <None Include="Images\help.png" />
+ <None Include="Images\house.png" />
+ <None Include="Images\information.png" />
+ <None Include="Images\key.png" />
+ <Content Include="Images\key_go.png" />
+ <Content Include="Images\lightning.png" />
+ <Content Include="Images\page.png" />
+ <Content Include="Images\page_white.png" />
+ <None Include="Images\page_white_csharp.png" />
+ <Content Include="Images\plugin.png" />
+ <Content Include="Images\plugin_go.png" />
+ <Content Include="Images\plugin_link.png" />
+ <None Include="Images\printer.png" />
+ <Content Include="Images\script.png" />
+ <Content Include="Images\script_code.png" />
+ <None Include="Images\stop.png" />
+ <None Include="Images\server.png" />
+ <None Include="Images\server_add.png" />
+ <None Include="Images\server_connect.png" />
+ <None Include="Images\server_database.png" />
+ <None Include="Images\server_delete.png" />
+ <None Include="Images\server_edit.png" />
+ <None Include="Images\server_error.png" />
+ <Content Include="Images\table.png" />
+ <None Include="Images\table_add.png" />
+ <Content Include="Images\table_delete.png" />
+ <None Include="Images\table_edit.png" />
+ <None Include="Images\table_error.png" />
+ <None Include="Images\table_gear.png" />
+ <Content Include="Images\table_go.png" />
+ <None Include="Images\table_key.png" />
+ <None Include="Images\table_row_insert.png" />
+ <None Include="Images\table_row_delete.png" />
+ <None Include="Images\table_relationship.png" />
+ <None Include="Images\table_refresh.png" />
+ <None Include="Images\table_multiple.png" />
+ <None Include="Images\table_link.png" />
+ <None Include="Images\table_lightning.png" />
+ <Content Include="Images\table_save.png" />
+ <None Include="Images\wrench.png" />
+ <None Include="Images\world_link.png" />
+ <None Include="Images\view_multiple.png" />
+ <None Include="Images\tick.png" />
+ <None Include="Images\wrench_orange.png" />
+ <None Include="Images\view.png" />
+ <None Include="Images\table_sort.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Controls\BatchQuerySelectControl.resx">
+ <DependentUpon>BatchQuerySelectControl.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Controls\ExceptionControl.resx">
+ <DependentUpon>ExceptionControl.cs</DependentUpon>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Controls\PluginListControl.resx">
+ <DependentUpon>PluginListControl.cs</DependentUpon>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Forms\BatchQuerySelectForm.resx">
+ <DependentUpon>BatchQuerySelectForm.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="ImageResource.resx">
+ <Generator>PublicResXFileCodeGenerator</Generator>
+ <LastGenOutput>ImageResource.Designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Properties\Resources.resx">
+ <Generator>PublicResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Migrated rules for MiniSqlQuery.Core %282%29.ruleset" />
+ <None Include="MiniSqlQuery.snk" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <ItemGroup>
+ <PackageReference Include="DockPanelSuite">
+ <Version>2.9.0</Version>
+ </PackageReference>
+ <PackageReference Include="ICSharpCode.TextEditor">
+ <Version>3.2.1.6466</Version>
+ </PackageReference>
+ <PackageReference Include="Ninject">
+ <Version>3.3.4</Version>
+ </PackageReference>
+ <PackageReference Include="NVelocity">
+ <Version>1.2.0</Version>
+ </PackageReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/MiniSqlQuery.snk b/minisqlquery-master/src/MiniSqlQuery.Core/MiniSqlQuery.snk
new file mode 100644
index 0000000..9b2560f
Binary files /dev/null and b/minisqlquery-master/src/MiniSqlQuery.Core/MiniSqlQuery.snk differ
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/MostRecentFilesChangedEventArgs.cs b/minisqlquery-master/src/MiniSqlQuery.Core/MostRecentFilesChangedEventArgs.cs
new file mode 100644
index 0000000..d06d30c
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/MostRecentFilesChangedEventArgs.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// A system wide message event.
+ /// </summary>
+ public class MostRecentFilesChangedEventArgs : EventArgs
+ {
+ public MostRecentFilesChangedEventArgs(ICollection<string> filenames)
+ {
+ Filenames = filenames;
+ }
+
+ public ICollection<string> Filenames { get; private set; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/MostRecentFilesService.cs b/minisqlquery-master/src/MiniSqlQuery.Core/MostRecentFilesService.cs
new file mode 100644
index 0000000..dedcddb
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/MostRecentFilesService.cs
@@ -0,0 +1,83 @@
+#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;
+
+namespace MiniSqlQuery.Core
+{
+ public class MostRecentFilesService : IMostRecentFilesService
+ {
+ private readonly List<string> _filenames;
+
+ public MostRecentFilesService()
+ {
+ _filenames = new List<string>();
+ }
+
+ public event EventHandler<MostRecentFilesChangedEventArgs> MostRecentFilesChanged;
+
+ public IList<string> Filenames
+ {
+ get { return _filenames; }
+ }
+
+ public void OnMostRecentFilesChanged(MostRecentFilesChangedEventArgs e)
+ {
+ var handler = MostRecentFilesChanged;
+ if (handler != null)
+ {
+ handler(this, e);
+ }
+ }
+
+ public void Register(string filename)
+ {
+ if (!_filenames.Contains(filename))
+ {
+ _filenames.Insert(0, filename);
+ }
+ else
+ {
+ // move to top of list
+ if (_filenames.Count > 1)
+ {
+ _filenames.Remove(filename);
+ _filenames.Insert(0, filename);
+ }
+ }
+
+ // enure the list is capped
+ while (_filenames.Count > MaxCommands)
+ {
+ _filenames.RemoveAt(_filenames.Count - 1);
+ }
+
+ NotifyListenersOfChange();
+ }
+
+ public void Remove(string filename)
+ {
+ if (_filenames.Contains(filename))
+ {
+ _filenames.Remove(filename);
+ }
+ NotifyListenersOfChange();
+ }
+
+ public int MaxCommands
+ {
+ get { return 10; }
+ }
+
+ protected void NotifyListenersOfChange()
+ {
+ OnMostRecentFilesChanged(new MostRecentFilesChangedEventArgs(_filenames));
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/NotifyPropertyChangedBase.cs b/minisqlquery-master/src/MiniSqlQuery.Core/NotifyPropertyChangedBase.cs
new file mode 100644
index 0000000..a23bd5b
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/NotifyPropertyChangedBase.cs
@@ -0,0 +1,49 @@
+#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.ComponentModel;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// The notify property changed base class.
+ /// </summary>
+ public abstract class NotifyPropertyChangedBase : INotifyPropertyChanged
+ {
+ /// <summary>
+ /// The property changed event, fired when a propety is modified.
+ /// </summary>
+ public virtual event PropertyChangedEventHandler PropertyChanged;
+
+ /// <summary>
+ /// The on property changed method (by property name).
+ /// </summary>
+ /// <param name = "propertyName">The property name that has been modified.</param>
+ protected void OnPropertyChanged(string propertyName)
+ {
+ PropertyChangedEventHandler changed = PropertyChanged;
+ if (changed != null)
+ {
+ changed(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+
+ /// <summary>
+ /// The on property changed method.
+ /// </summary>
+ /// <param name = "e">The events.</param>
+ protected void OnPropertyChanged(PropertyChangedEventArgs e)
+ {
+ PropertyChangedEventHandler changed = PropertyChanged;
+ if (changed != null)
+ {
+ changed(this, e);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/ObjectTypes.cs b/minisqlquery-master/src/MiniSqlQuery.Core/ObjectTypes.cs
new file mode 100644
index 0000000..4762dbc
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/ObjectTypes.cs
@@ -0,0 +1,32 @@
+#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.Core
+{
+ /// <summary>
+ /// The object types.
+ /// </summary>
+ public class ObjectTypes
+ {
+ /// <summary>
+ /// A column type.
+ /// </summary>
+ public const string Column = "Column";
+
+ /// <summary>
+ /// A table type.
+ /// </summary>
+ public const string Table = "Table";
+
+ /// <summary>
+ /// A view type.
+ /// </summary>
+ public const string View = "View";
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/PlugInComparer.cs b/minisqlquery-master/src/MiniSqlQuery.Core/PlugInComparer.cs
new file mode 100644
index 0000000..f06e796
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/PlugInComparer.cs
@@ -0,0 +1,51 @@
+#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;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Used for sorting plugins at load time, a very simple ordering system for the plugins.
+ /// </summary>
+ public class PlugInComparer : IComparer<IPlugIn>
+ {
+ /// <summary>
+ /// Orders two plugin classes.
+ /// </summary>
+ /// <param name = "x">The left side object.</param>
+ /// <param name = "y">The right side object.</param>
+ /// <returns>The compare result.</returns>
+ public int Compare(IPlugIn x, IPlugIn y)
+ {
+ int result;
+
+ if (x == null && y == null)
+ {
+ result = 0;
+ }
+ else if (y == null)
+ {
+ result = -1;
+ }
+ else if (x == null)
+ {
+ result = 1;
+ }
+ else
+ {
+ int numX = x.RequestedLoadOrder;
+ int numY = y.RequestedLoadOrder;
+
+ result = numX - numY;
+ }
+
+ return result;
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/PluginLoaderBase.cs b/minisqlquery-master/src/MiniSqlQuery.Core/PluginLoaderBase.cs
new file mode 100644
index 0000000..79edeca
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/PluginLoaderBase.cs
@@ -0,0 +1,96 @@
+#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.Core
+{
+ /// <summary>
+ /// A simple base class to use for implementing the <see cref = "IPlugIn" /> interface.
+ /// </summary>
+ public abstract class PluginLoaderBase : IPlugIn
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "PluginLoaderBase" /> class. Creates a new instance of a plugin loader class.
+ /// </summary>
+ /// <param name = "name">The descriptive name of the plugin</param>
+ /// <param name = "description">A brief description of the plugin.</param>
+ /// <remarks>
+ /// The <see cref = "RequestedLoadOrder" /> defaults to 1000.
+ /// </remarks>
+ protected PluginLoaderBase(string name, string description)
+ : this(name, description, 1000)
+ {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "PluginLoaderBase" /> class. Creates a new instance of a plugin loader class.
+ /// </summary>
+ /// <param name = "name">The descriptive name of the plugin</param>
+ /// <param name = "description">A brief description of the plugin.</param>
+ /// <param name = "requestedLoadOrder">The requested load order. See <see cref = "IPlugIn.RequestedLoadOrder" />.</param>
+ protected PluginLoaderBase(string name, string description, int requestedLoadOrder)
+ {
+ PluginName = name;
+ PluginDescription = description;
+ RequestedLoadOrder = requestedLoadOrder;
+ }
+
+ /// <summary>
+ /// Gets a brief description of the plugin.
+ /// </summary>
+ /// <value>The plugin description.</value>
+ public string PluginDescription { get; private set; }
+
+ /// <summary>
+ /// Gets the descriptive name of the plugin.
+ /// </summary>
+ /// <value>The plugin name.</value>
+ public string PluginName { get; private set; }
+
+ /// <summary>
+ /// Gets the "order" value for a lame ordering system.
+ /// TODO: needs to be replaced with Windsor containter etc.
+ /// </summary>
+ /// <value>The requested load order.</value>
+ public int RequestedLoadOrder { get; private set; }
+
+ /// <summary>
+ /// Gets a reference to the applications service manager.
+ /// </summary>
+ /// <value>The services.</value>
+ public IApplicationServices Services { get; private set; }
+
+ /// <summary>
+ /// Must be implemented by the inheriting class.
+ /// Called after the application has started.
+ /// </summary>
+ public abstract void InitializePlugIn();
+
+ /// <summary>
+ /// Called when the plugins are loading during application startup.
+ /// Stores the reference to <paramref name = "services" />.
+ /// </summary>
+ /// <param name = "services">The application services intance.</param>
+ public void LoadPlugIn(IApplicationServices services)
+ {
+ Services = services;
+ }
+
+ /// <summary>
+ /// Called as the application is shutting down.
+ /// </summary>
+ /// <remarks>
+ /// In most cases there is probably no need to do anything here, all controls etc created
+ /// will be disposed of implicitly. It would only be unmanaged references created explicitly
+ /// by the plugin that would need removal or cleanup.
+ /// </remarks>
+ public virtual void UnloadPlugIn()
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/PlugInUtility.cs b/minisqlquery-master/src/MiniSqlQuery.Core/PlugInUtility.cs
new file mode 100644
index 0000000..413821c
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/PlugInUtility.cs
@@ -0,0 +1,68 @@
+#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;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Helper class for loading external plugins.
+ /// </summary>
+ public class PlugInUtility
+ {
+ /// <summary>
+ /// Search <paramref name = "baseDir" /> for files that match the pattern <paramref name = "searchPattern" />
+ /// and return an array of instances.
+ /// </summary>
+ /// <returns>An array of instances of the plugins found.</returns>
+ /// <typeparam name = "T">The type (interface or class) to find instances of.</typeparam>
+ /// <param name = "baseDir">The search base.</param>
+ /// <param name = "searchPattern">Search pattern, e.g. "*.dll".</param>
+ public static T[] GetInstances<T>(string baseDir, string searchPattern)
+ {
+ var tmpInstances = new List<T>();
+ Assembly pluginAssembly;
+
+ try
+ {
+ // perform the file search
+ string[] files = Directory.GetFiles(baseDir, searchPattern, SearchOption.TopDirectoryOnly);
+
+ // load each asembly and inspect for instances of T
+ foreach (string file in files)
+ {
+ pluginAssembly = Assembly.LoadFrom(file);
+ Type[] assemblyTypes = pluginAssembly.GetTypes();
+
+ // check each assembly to se it it implements the interface T
+ foreach (Type assemblyType in assemblyTypes)
+ {
+ Type instanceType = assemblyType.GetInterface(typeof(T).FullName);
+ if (instanceType != null)
+ {
+ // this instance type matches T, create an instance of the class and add it to the list
+ tmpInstances.Add((T)Activator.CreateInstance(assemblyType));
+ }
+ }
+ }
+ }
+ catch (TargetInvocationException exp)
+ {
+ if (exp.InnerException != null)
+ {
+ throw exp.InnerException;
+ }
+ }
+
+ return tmpInstances.ToArray();
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Properties/AssemblyInfo.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..56152c5
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Properties/AssemblyInfo.cs
@@ -0,0 +1,16 @@
+#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.Reflection;
+
+[assembly: AssemblyTitle("Mini SQL Query Core Services and Interfaces")]
+[assembly: AssemblyDescription("A Mini SQL Query Core interfaces and classes.")]
+[assembly: AssemblyProduct("MiniSqlQuery.Core")]
+[assembly: AssemblyVersion("1.19.11.03")]
+[assembly: AssemblyFileVersion("1.19.11.03")]
+
+// see also CommonAssemblyInfo.cs
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Properties/Resources.Designer.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..2c0445b
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Properties/Resources.Designer.cs
@@ -0,0 +1,100 @@
+//------------------------------------------------------------------------------
+// <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.Core.Properties {
+ 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()]
+ public class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MiniSqlQuery.Core.Properties.Resources", typeof(Resources).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)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to <?xml version="1.0" encoding="utf-8"?>
+ ///
+ ///<DbConnectionDefinitionList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ /// <Definitions>
+ /// <DbConnectionDefinition>
+ /// <Name>Default - MSSQL Master@localhost</Name>
+ /// <ProviderName>System.Data.SqlClient</ProviderName>
+ /// <ConnectionString>Server=.; Database=master; Integrated Security=SSPI</ConnectionString>
+ /// </DbConnectionDefinition>
+ /// <DbConnectionDefinition>
+ /// <Name>Sample MSSQL Northwind SQL Expres [rest of string was truncated]";.
+ /// </summary>
+ public static string DefaultConnectionDefinitionFile {
+ get {
+ return ResourceManager.GetString("DefaultConnectionDefinitionFile", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Mini SQLQuery.
+ /// </summary>
+ public static string FriendlyAppTitle {
+ get {
+ return ResourceManager.GetString("FriendlyAppTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to MiniSqlQuery.
+ /// </summary>
+ public static string ShortAppTitle {
+ get {
+ return ResourceManager.GetString("ShortAppTitle", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Properties/Resources.resx b/minisqlquery-master/src/MiniSqlQuery.Core/Properties/Resources.resx
new file mode 100644
index 0000000..6089ada
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Properties/Resources.resx
@@ -0,0 +1,130 @@
+<?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="DefaultConnectionDefinitionFile" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\defaultconnectiondefinitionfile.xml;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
+ </data>
+ <data name="FriendlyAppTitle" xml:space="preserve">
+ <value>Mini SQLQuery</value>
+ </data>
+ <data name="ShortAppTitle" xml:space="preserve">
+ <value>MiniSqlQuery</value>
+ </data>
+</root>
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Query.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Query.cs
new file mode 100644
index 0000000..b4c10fb
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Query.cs
@@ -0,0 +1,52 @@
+#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;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Represents an SQL query, some timings and the result (if executed).
+ /// </summary>
+ public class Query
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "Query" /> class.
+ /// </summary>
+ /// <param name = "sql">The SQL for the query.</param>
+ public Query(string sql)
+ {
+ Sql = sql;
+ }
+
+ /// <summary>
+ /// Gets or sets the end time.
+ /// </summary>
+ /// <value>The end time.</value>
+ public DateTime EndTime { get; set; }
+
+ /// <summary>
+ /// Gets or sets the result.
+ /// </summary>
+ /// <value>The result.</value>
+ public DataSet Result { get; set; }
+
+ /// <summary>
+ /// Gets the SQL query text.
+ /// </summary>
+ /// <value>The SQL query text.</value>
+ public string Sql { get; private set; }
+
+ /// <summary>
+ /// Gets or sets the start time.
+ /// </summary>
+ /// <value>The start time.</value>
+ public DateTime StartTime { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/QueryBatch.cs b/minisqlquery-master/src/MiniSqlQuery.Core/QueryBatch.cs
new file mode 100644
index 0000000..9c46bba
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/QueryBatch.cs
@@ -0,0 +1,125 @@
+#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.Linq;
+using System.Text.RegularExpressions;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// The query batch class represents a series of SQL statements to execute against a database.
+ /// </summary>
+ public class QueryBatch
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "QueryBatch" /> class.
+ /// A singular batch query.
+ /// </summary>
+ /// <param name = "sql">The SQL to create a single query from.</param>
+ /// <seealso cref="Parse"/>
+ public QueryBatch(string sql)
+ : this()
+ {
+ // OriginalSql = sql;
+ Add(new Query(sql));
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "QueryBatch" /> class.
+ /// </summary>
+ public QueryBatch()
+ {
+ Queries = new List<Query>();
+ }
+
+ /// <summary>
+ /// Gets or sets the end time of the batch.
+ /// </summary>
+ /// <value>The end time.</value>
+ public DateTime EndTime { get; set; }
+
+ /// <summary>
+ /// Gets or sets Messages.
+ /// </summary>
+ /// <value>The messages.</value>
+ public string Messages { get; set; }
+
+ /// <summary>
+ /// Gets the query list for this batch.
+ /// </summary>
+ /// <value>The queries.</value>
+ public List<Query> Queries { get; private set; }
+
+ /// <summary>
+ /// Gets or sets the start time of the batch.
+ /// </summary>
+ /// <value>The start time.</value>
+ public DateTime StartTime { get; set; }
+
+ /// <summary>
+ /// Parses an <paramref name="sql"/> string creating a <see cref="QueryBatch"/> as a result.
+ /// If query batching is enabled, the <paramref name="sql"/> string is split into multiple <see cref="Query"/> objects.
+ /// </summary>
+ /// <param name = "sql">The SQL string.</param>
+ /// <returns>A <see cref="QueryBatch"/> object with 0, 1 or many <see cref="Query"/> objects.</returns>
+ public static QueryBatch Parse(string sql)
+ {
+ var batch = new QueryBatch();
+
+ // exit if nothing to do
+ if (sql == null || sql.Trim().Length == 0)
+ {
+ return batch;
+ }
+
+ foreach (string sqlPart in SplitByBatchIndecator(sql, "GO").Where(sqlPart => !string.IsNullOrEmpty(sqlPart)))
+ {
+ batch.Add(new Query(sqlPart));
+ }
+
+ return batch;
+ }
+
+ /// <summary>
+ /// Adds a query to this batch.
+ /// </summary>
+ /// <param name = "query">The query.</param>
+ public void Add(Query query)
+ {
+ Queries.Add(query);
+ }
+
+ /// <summary>
+ /// Clears all queries in this batch.
+ /// </summary>
+ public void Clear()
+ {
+ Queries.Clear();
+ }
+
+ /// <summary>
+ /// Splits a <paramref name="script"/> by the <paramref name="batchIndicator"/>, typically "GO".
+ /// The batch indicator needs to be on a line by itself.
+ /// </summary>
+ /// <param name = "script">The SQL script.</param>
+ /// <param name = "batchIndicator">The batch indicator, e.g. "GO".</param>
+ /// <returns>An enumerable list of stings.</returns>
+ private static IEnumerable<string> SplitByBatchIndecator(string script, string batchIndicator)
+ {
+ string pattern = string.Concat("^\\s*", batchIndicator, "\\s*$");
+ RegexOptions options = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline;
+
+ foreach (string batch in Regex.Split(script, pattern, options))
+ {
+ yield return batch.Trim();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/QueryRunner.cs b/minisqlquery-master/src/MiniSqlQuery.Core/QueryRunner.cs
new file mode 100644
index 0000000..b7c5438
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/QueryRunner.cs
@@ -0,0 +1,321 @@
+#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.Data.SqlClient;
+using System.Diagnostics;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Helper class to encapsulate query execution
+ /// </summary>
+ public class QueryRunner
+ {
+ /// <summary>
+ /// The connection string value.
+ /// </summary>
+ private readonly string _connectionString;
+
+ /// <summary>
+ /// The enable query batching value.
+ /// </summary>
+ private readonly bool _enableQueryBatching;
+
+ private readonly int _commandTimeout;
+
+ /// <summary>
+ /// The provider factory.
+ /// </summary>
+ private readonly DbProviderFactory _factory;
+
+ private DbCommand _command;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "QueryRunner" /> class.
+ /// </summary>
+ /// <param name = "factory">The factory.</param>
+ /// <param name = "connectionString">The connection string.</param>
+ /// <param name = "enableQueryBatching">The enable query batching.</param>
+ /// <param name="commandTimeout"></param>
+ public QueryRunner(DbProviderFactory factory, string connectionString, bool enableQueryBatching, int commandTimeout)
+ {
+ _factory = factory;
+ _connectionString = connectionString;
+ _enableQueryBatching = enableQueryBatching;
+ _commandTimeout = commandTimeout;
+ Messages = string.Empty;
+ }
+
+ /// <summary>
+ /// The batch progress.
+ /// </summary>
+ public event EventHandler<BatchProgressEventArgs> BatchProgress;
+
+ /// <summary>
+ /// Gets or sets the <see cref="QueryBatch"/> for this query.
+ /// </summary>
+ /// <value>The query batch.</value>
+ public QueryBatch Batch { get; protected set; }
+
+ /// <summary>
+ /// Gets or sets Exception if any.
+ /// </summary>
+ /// <value>The exception.</value>
+ public DbException Exception { get; protected set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether the query runner is busy.
+ /// </summary>
+ /// <value>The is busy value.</value>
+ public bool IsBusy { get; set; }
+
+ /// <summary>
+ /// Gets or sets the messages if any.
+ /// </summary>
+ /// <value>The messages.</value>
+ public string Messages { get; protected set; }
+
+ /// <summary>
+ /// Creates an instance of a query runner for the specified database.
+ /// </summary>
+ /// <param name="factory">The factory.</param>
+ /// <param name="connectionString">The connection string.</param>
+ /// <param name="enableQueryBatching">The enable query batching.</param>
+ /// <param name="commandTimeout">The command timeout.</param>
+ /// <returns>
+ /// A <see cref="QueryRunner"/> instance acording to the parameters.
+ /// </returns>
+ /// <remarks>
+ /// <example>
+ /// var runner = QueryRunner.Create(DbProviderFactories.GetFactory("System.Data.SqlClient"), connStr, true);
+ /// runner.ExecuteQuery("select * from Employees\r\nGO\r\nSelect * from Products");
+ /// // runner.Batch.Queries.Count == 2 //
+ /// </example>
+ /// </remarks>
+ public static QueryRunner Create(DbProviderFactory factory, string connectionString, bool enableQueryBatching, int commandTimeout)
+ {
+ if (factory.GetType().Name == "SqlClientFactory")
+ {
+ return new SqlQueryRunner(factory, connectionString, enableQueryBatching, commandTimeout);
+ }
+
+ // otherwise ise the default
+ return new QueryRunner(factory, connectionString, enableQueryBatching, commandTimeout);
+ }
+
+ /// <summary>
+ /// Tests the database connection using the specified provider.
+ /// </summary>
+ /// <param name = "providerName">Name of the provider.</param>
+ /// <param name = "connectionString">The connection string.</param>
+ /// <returns>If the connection was successful, null; otherwise the exception object.</returns>
+ public static Exception TestDbConnection(string providerName, string connectionString)
+ {
+ try
+ {
+ DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);
+ using (DbConnection connection = factory.CreateConnection())
+ {
+ connection.ConnectionString = connectionString;
+ connection.Open();
+ if (connection.State == ConnectionState.Open)
+ {
+ return null;
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ return e;
+ }
+
+ throw new InvalidOperationException("Connection test failed");
+ }
+
+ /// <summary>
+ /// Executes the <paramref name = "sql" /> query.
+ /// </summary>
+ /// <param name = "sql">The SQL to execute.</param>
+ public void ExecuteQuery(string sql)
+ {
+ ValidateState();
+
+ DbConnection dbConnection = null;
+ DbDataAdapter adapter = null;
+ _command = null;
+ Query query;
+
+ // In the case of connection errors the error messages were getting lost, provide a default batch object:
+ Batch = new QueryBatch(sql);
+
+ try
+ {
+ IsBusy = true;
+
+ dbConnection = _factory.CreateConnection();
+ dbConnection.ConnectionString = _connectionString;
+ dbConnection.Open();
+
+ Messages = string.Empty;
+ SubscribeToMessages(dbConnection);
+
+ if (_enableQueryBatching)
+ {
+ Batch = QueryBatch.Parse(sql);
+ }
+ else
+ {
+ Batch = new QueryBatch(sql);
+ }
+
+ Batch.StartTime = DateTime.Now;
+ adapter = _factory.CreateDataAdapter();
+ _command = dbConnection.CreateCommand();
+ _command.CommandType = CommandType.Text;
+ SetCommandTimeout(_command, _commandTimeout);
+ adapter.SelectCommand = _command;
+
+ int queryCount = Batch.Queries.Count;
+ for (int i = 0; i < queryCount; i++)
+ {
+ query = Batch.Queries[i];
+ _command.CommandText = query.Sql;
+ query.Result = new DataSet("Batch " + (i + 1));
+ query.StartTime = DateTime.Now;
+ adapter.Fill(query.Result);
+ query.EndTime = DateTime.Now;
+ OnBatchProgress(new BatchProgressEventArgs(query, queryCount, i + 1));
+ }
+ }
+ catch (DbException dbException)
+ {
+ HandleBatchException(dbException);
+ }
+ finally
+ {
+ if (Batch != null)
+ {
+ Batch.EndTime = DateTime.Now;
+ }
+
+ if (adapter != null)
+ {
+ adapter.Dispose();
+ }
+
+ if (_command != null)
+ {
+ _command.Dispose();
+ }
+
+ IsBusy = false;
+ UnsubscribeFromMessages(dbConnection);
+ }
+
+ if (Batch != null)
+ {
+ Batch.Messages = Messages;
+ }
+ }
+
+ /// <summary>
+ /// Cancel the executing command (if busy).
+ /// </summary>
+ /// <remarks>
+ /// Note that this relies on the implementation of the DbCommand.Cancel operation.
+ /// </remarks>
+ public void Cancel()
+ {
+ if (IsBusy && _command != null)
+ {
+ _command.Cancel();
+ }
+ }
+
+ /// <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 (_factory 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 handle batch exception.
+ /// </summary>
+ /// <param name = "dbException">The db exception.</param>
+ protected virtual void HandleBatchException(DbException dbException)
+ {
+ Exception = dbException;
+ Messages += dbException.Message + Environment.NewLine;
+ }
+
+ /// <summary>
+ /// The on batch progress.
+ /// </summary>
+ /// <param name = "e">The events.</param>
+ protected void OnBatchProgress(BatchProgressEventArgs e)
+ {
+ EventHandler<BatchProgressEventArgs> progress = BatchProgress;
+ if (progress != null)
+ {
+ progress(this, e);
+ }
+ }
+
+ /// <summary>
+ /// The subscribe to messages.
+ /// </summary>
+ /// <param name = "connection">The connection.</param>
+ protected virtual void SubscribeToMessages(DbConnection connection)
+ {
+ }
+
+ /// <summary>
+ /// The unsubscribe from messages.
+ /// </summary>
+ /// <param name = "connection">The connection.</param>
+ protected virtual void UnsubscribeFromMessages(DbConnection connection)
+ {
+ }
+
+ /// <summary>
+ /// Ensures that there is enough information available to the class to execute a query.
+ /// </summary>
+ /// <exception cref = "InvalidOperationException">If there is no connection, "Supply a connection."</exception>
+ /// <exception cref = "InvalidOperationException">If there is no connection, "Supply a provider."</exception>
+ private void ValidateState()
+ {
+ if (string.IsNullOrEmpty(_connectionString))
+ {
+ throw new InvalidOperationException("Supply a connection.");
+ }
+
+ if (_factory == null)
+ {
+ throw new InvalidOperationException("Supply a provider.");
+ }
+ }
+ }
+}
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/SqlQueryRunner.cs b/minisqlquery-master/src/MiniSqlQuery.Core/SqlQueryRunner.cs
new file mode 100644
index 0000000..ade2447
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/SqlQueryRunner.cs
@@ -0,0 +1,85 @@
+#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.Data.SqlClient;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// The sql query runner.
+ /// </summary>
+ public class SqlQueryRunner : QueryRunner
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="SqlQueryRunner"/> class.
+ /// </summary>
+ /// <param name="factory">The provider factory.</param>
+ /// <param name="connectionString">The connection string.</param>
+ /// <param name="enableQueryBatching">The enable query batching.</param>
+ /// <param name="commandTimeout"></param>
+ public SqlQueryRunner(DbProviderFactory factory, string connectionString, bool enableQueryBatching, int commandTimeout)
+ : base(factory, connectionString, enableQueryBatching, commandTimeout)
+ {
+ }
+
+ /// <summary>
+ /// The handle batch exception.
+ /// </summary>
+ /// <param name = "dbException">The db exception.</param>
+ protected override void HandleBatchException(DbException dbException)
+ {
+ Exception = dbException;
+ var exp = dbException as SqlException;
+ if (exp != null)
+ {
+ foreach (SqlError error in exp.Errors)
+ {
+ Messages += string.Format("Error line {0}: {1}.{2}", error.LineNumber, error.Message, Environment.NewLine);
+ }
+ }
+ }
+
+ /// <summary>
+ /// The subscribe to messages.
+ /// </summary>
+ /// <param name = "connection">The connection.</param>
+ protected override void SubscribeToMessages(DbConnection connection)
+ {
+ var conn = connection as SqlConnection;
+ if (conn != null)
+ {
+ conn.InfoMessage += ConnectionInfoMessage;
+ }
+ }
+
+ /// <summary>
+ /// The unsubscribe from messages.
+ /// </summary>
+ /// <param name = "connection">The connection.</param>
+ protected override void UnsubscribeFromMessages(DbConnection connection)
+ {
+ var conn = connection as SqlConnection;
+ if (conn != null)
+ {
+ conn.InfoMessage -= ConnectionInfoMessage;
+ }
+ }
+
+ /// <summary>
+ /// The connection information message collection method.
+ /// </summary>
+ /// <param name = "sender">The sender.</param>
+ /// <param name = "e">The events for the message.</param>
+ private void ConnectionInfoMessage(object sender, SqlInfoMessageEventArgs e)
+ {
+ Messages += e.Message + Environment.NewLine;
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/StringWriterWithEncoding.cs b/minisqlquery-master/src/MiniSqlQuery.Core/StringWriterWithEncoding.cs
new file mode 100644
index 0000000..b59534b
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/StringWriterWithEncoding.cs
@@ -0,0 +1,45 @@
+#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 System.Text;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// A <see cref = "StringWriter" /> that allows the setting of the <see cref = "Encoding" />.
+ /// </summary>
+ public class StringWriterWithEncoding : StringWriter
+ {
+ /// <summary>
+ /// The _encoding.
+ /// </summary>
+ private readonly Encoding _encoding;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "StringWriterWithEncoding" /> class.
+ /// </summary>
+ /// <param name = "encoding">The encoding to use, e.g. Encoding.UTF8.</param>
+ public StringWriterWithEncoding(Encoding encoding)
+ {
+ _encoding = encoding;
+ }
+
+ /// <summary>
+ /// Gets the <see cref = "T:System.Text.Encoding" /> in which the output is written.
+ /// </summary>
+ /// <value>The encoding type.</value>
+ /// <returns>
+ /// The Encoding in which the output is written.
+ /// </returns>
+ public override Encoding Encoding
+ {
+ get { return _encoding; }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/SystemMessage.cs b/minisqlquery-master/src/MiniSqlQuery.Core/SystemMessage.cs
new file mode 100644
index 0000000..c737bc6
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/SystemMessage.cs
@@ -0,0 +1,22 @@
+#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.Core
+{
+ /// <summary>
+ /// System messages posted by Mini SQL Query itself or other plugins.
+ /// </summary>
+ public enum SystemMessage
+ {
+ /// <summary>
+ /// A table was truncated.
+ /// </summary>
+ TableTruncated
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/SystemMessageEventArgs.cs b/minisqlquery-master/src/MiniSqlQuery.Core/SystemMessageEventArgs.cs
new file mode 100644
index 0000000..4982b00
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/SystemMessageEventArgs.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 System;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// A system wide message event.
+ /// </summary>
+ public class SystemMessageEventArgs : EventArgs
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref = "SystemMessageEventArgs" /> class.
+ /// </summary>
+ /// <param name = "message">The system message.</param>
+ /// <param name = "data">The associated data.</param>
+ public SystemMessageEventArgs(SystemMessage message, object data)
+ {
+ Message = message;
+ Data = data;
+ }
+
+ /// <summary>
+ /// Gets the data for the event.
+ /// </summary>
+ /// <value>The event data.</value>
+ public object Data { get; private set; }
+
+ /// <summary>
+ /// Gets the system message type.
+ /// </summary>
+ /// <value>The system message type.</value>
+ public SystemMessage Message { get; private set; }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Template/HenriFormatter.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Template/HenriFormatter.cs
new file mode 100644
index 0000000..87c3027
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Template/HenriFormatter.cs
@@ -0,0 +1,148 @@
+using System;
+using System.IO;
+using System.Text;
+using System.Web;
+using System.Web.UI;
+
+namespace MiniSqlQuery.Core.Template
+{
+ /// <summary>
+ /// From an online debate on parsing, original author todo....
+ /// </summary>
+ public class HenriFormatter : ITextFormatter
+ {
+ #region ITextFormatter Members
+
+ public string Format(string text, object dataSource)
+ {
+ if (text == null)
+ {
+ throw new ArgumentNullException("text");
+ }
+
+ StringBuilder result = new StringBuilder(text.Length*2);
+
+ using (var reader = new StringReader(text))
+ {
+ StringBuilder expression = new StringBuilder();
+ int @char = -1;
+
+ TemplateParseState templateParseState = TemplateParseState.OutsideExpression;
+ do
+ {
+ switch (templateParseState)
+ {
+ case TemplateParseState.OutsideExpression:
+ @char = reader.Read();
+ switch (@char)
+ {
+ case -1:
+ templateParseState = TemplateParseState.End;
+ break;
+ case '{':
+ templateParseState = TemplateParseState.OnOpenBracket;
+ break;
+ case '}':
+ templateParseState = TemplateParseState.OnCloseBracket;
+ break;
+ default:
+ result.Append((char) @char);
+ break;
+ }
+ break;
+ case TemplateParseState.OnOpenBracket:
+ @char = reader.Read();
+ switch (@char)
+ {
+ case -1:
+ throw new FormatException();
+ case '{':
+ result.Append('{');
+ templateParseState = TemplateParseState.OutsideExpression;
+ break;
+ default:
+ expression.Append((char) @char);
+ templateParseState = TemplateParseState.InsideExpression;
+ break;
+ }
+ break;
+ case TemplateParseState.InsideExpression:
+ @char = reader.Read();
+ switch (@char)
+ {
+ case -1:
+ throw new FormatException();
+ case '}':
+ result.Append(ResolveExpression(dataSource, expression.ToString()));
+ expression.Length = 0;
+ templateParseState = TemplateParseState.OutsideExpression;
+ break;
+ default:
+ expression.Append((char) @char);
+ break;
+ }
+ break;
+ case TemplateParseState.OnCloseBracket:
+ @char = reader.Read();
+ switch (@char)
+ {
+ case '}':
+ result.Append('}');
+ templateParseState = TemplateParseState.OutsideExpression;
+ break;
+ default:
+ throw new FormatException();
+ }
+ break;
+ default:
+ throw new InvalidOperationException("Invalid state.");
+ }
+ }
+ while (templateParseState != TemplateParseState.End);
+ }
+
+ return result.ToString();
+ }
+
+ #endregion
+
+ private string ResolveExpression(object source, string expression)
+ {
+ string format = "";
+
+ int colonIndex = expression.IndexOf(':');
+ if (colonIndex > 0)
+ {
+ format = expression.Substring(colonIndex + 1);
+ expression = expression.Substring(0, colonIndex);
+ }
+
+ try
+ {
+ // yes, it uses the databinder
+ if (String.IsNullOrEmpty(format))
+ {
+ return (DataBinder.Eval(source, expression) ?? "").ToString();
+ }
+ return DataBinder.Eval(source, expression, "{0:" + format + "}") ?? "";
+ }
+ catch (HttpException exp)
+ {
+ throw new FormatException(exp.Message);
+ }
+ }
+
+ #region Nested type: TemplateParseState
+
+ private enum TemplateParseState
+ {
+ OutsideExpression,
+ OnOpenBracket,
+ InsideExpression,
+ OnCloseBracket,
+ End
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Template/NVelocityWrapper.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Template/NVelocityWrapper.cs
new file mode 100644
index 0000000..bce56d2
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Template/NVelocityWrapper.cs
@@ -0,0 +1,57 @@
+#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 System.IO;
+using NVelocity;
+using NVelocity.App;
+using NVelocity.Exception;
+
+namespace MiniSqlQuery.Core.Template
+{
+ /// <summary>The n velocity wrapper.</summary>
+ public class NVelocityWrapper : ITextFormatter
+ {
+ /// <summary>The format.</summary>
+ /// <param name="text">The text.</param>
+ /// <param name="items">The items.</param>
+ /// <returns>The format.</returns>
+ /// <exception cref="TemplateException"></exception>
+ public string Format(string text, Dictionary<string, object> items)
+ {
+ try
+ {
+ VelocityContext velocityContext = new VelocityContext();
+
+ if (items != null)
+ {
+ foreach (var pair in items)
+ {
+ velocityContext.Put(pair.Key, pair.Value);
+ }
+ }
+
+ StringWriter sw = new StringWriter();
+ VelocityEngine velocityEngine = new VelocityEngine();
+ velocityEngine.Init();
+
+ bool ok = velocityEngine.Evaluate(velocityContext, sw, "ContextTest.CaseInsensitive", text);
+
+ if (!ok)
+ {
+ throw new TemplateException("Template run error (try adding an extra newline at the end of the file)");
+ }
+
+ return sw.ToString();
+ }
+ catch (ParseErrorException parseErrorException)
+ {
+ throw new TemplateException(parseErrorException.Message, parseErrorException);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Template/TemplateException.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Template/TemplateException.cs
new file mode 100644
index 0000000..db25dce
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Template/TemplateException.cs
@@ -0,0 +1,44 @@
+#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.Runtime.Serialization;
+
+namespace MiniSqlQuery.Core.Template
+{
+ /// <summary>The template exception.</summary>
+ [Serializable]
+ public class TemplateException : Exception
+ {
+ /// <summary>Initializes a new instance of the <see cref="TemplateException"/> class.</summary>
+ public TemplateException()
+ {
+ }
+
+ /// <summary>Initializes a new instance of the <see cref="TemplateException"/> class.</summary>
+ /// <param name="message">The message.</param>
+ public TemplateException(string message) : base(message)
+ {
+ }
+
+ /// <summary>Initializes a new instance of the <see cref="TemplateException"/> class.</summary>
+ /// <param name="message">The message.</param>
+ /// <param name="inner">The inner.</param>
+ public TemplateException(string message, Exception inner) : base(message, inner)
+ {
+ }
+
+ /// <summary>Initializes a new instance of the <see cref="TemplateException"/> class.</summary>
+ /// <param name="info">The info.</param>
+ /// <param name="context">The context.</param>
+ protected TemplateException(
+ SerializationInfo info,
+ StreamingContext context) : base(info, context)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Template/TextFormatter.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Template/TextFormatter.cs
new file mode 100644
index 0000000..0afec69
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Template/TextFormatter.cs
@@ -0,0 +1,21 @@
+#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;
+
+namespace MiniSqlQuery.Core.Template
+{
+ /// <summary>The i text formatter.</summary>
+ public interface ITextFormatter
+ {
+ /// <summary>The format.</summary>
+ /// <param name="text">The text.</param>
+ /// <param name="items">The items.</param>
+ /// <returns>The format.</returns>
+ string Format(string text, Dictionary<string, object> items);
+ }
+}
\ No newline at end of file
diff --git a/minisqlquery-master/src/MiniSqlQuery.Core/Utility.cs b/minisqlquery-master/src/MiniSqlQuery.Core/Utility.cs
new file mode 100644
index 0000000..67d89a2
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Core/Utility.cs
@@ -0,0 +1,197 @@
+#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.Diagnostics;
+using System.IO;
+using System.Text;
+using System.Xml.Serialization;
+using MiniSqlQuery.Core.Properties;
+
+namespace MiniSqlQuery.Core
+{
+ /// <summary>
+ /// Some basic helper functions.
+ /// </summary>
+ public static class Utility
+ {
+ /// <summary>
+ /// Writes a default file if none present.
+ /// </summary>
+ public static void CreateConnectionStringsIfRequired()
+ {
+ string filename = GetConnectionStringFilename();
+ if (!File.Exists(filename))
+ {
+ File.WriteAllText(filename, Resources.DefaultConnectionDefinitionFile);
+ }
+ }
+
+ /// <summary>
+ /// Resolves the full filename of the connection string file, by default in the application data folder
+ /// for "MiniSqlQuery", e.g. "C:\Users\(username)\AppData\Roaming\MiniSqlQuery\connections.xml".
+ /// Allows for the override vis the "MiniSqlQuery.Core.dll.config" file "DefaultConnectionDefinitionFilename"
+ /// setting.
+ /// </summary>
+ /// <returns>A filename.</returns>
+ public static string GetConnectionStringFilename()
+ {
+ string filename = ApplicationServices.Instance.Settings.DefaultConnectionDefinitionFilename;
+
+ if (!string.IsNullOrEmpty(filename) && File.Exists(filename))
+ {
+ return filename;
+ }
+
+ string folder = GetAppFolderPath();
+ filename = Path.Combine(folder, "connections.xml");
+
+ return filename;
+ }
+
+ /// <summary>
+ /// Returns an array of SQL provider types supported by the current platform.
+ /// </summary>
+ /// <returns>An array of SQL provider types.</returns>
+ public static string[] GetSqlProviderNames()
+ {
+ DataTable providers = DbProviderFactories.GetFactoryClasses();
+ var providerNames = new List<string>();
+
+ foreach (DataRow row in providers.Rows)
+ {
+ providerNames.Add(row["InvariantName"].ToString());
+ }
+
+ return providerNames.ToArray();
+ }
+
+ /// <summary>
+ /// Loads the connection string data from the file.
+ /// </summary>
+ /// <returns>The text file contents as a single string.</returns>
+ /// <seealso cref = "GetConnectionStringFilename" />
+ public static string LoadConnections()
+ {
+ string filename = GetConnectionStringFilename();
+ string data = File.ReadAllText(filename);
+ return data;
+ }
+
+ /// <summary>
+ /// Loads the db connection definitions from an XML file.
+ /// </summary>
+ /// <returns>A <see cref = "DbConnectionDefinitionList" /> instance or null if the file does not exist.</returns>
+ public static DbConnectionDefinitionList LoadDbConnectionDefinitions()
+ {
+ string filename = GetConnectionStringFilename();
+ DbConnectionDefinitionList definitionList = null;
+
+ if (File.Exists(filename))
+ {
+ definitionList = DbConnectionDefinitionList.FromXml(File.ReadAllText(filename));
+ }
+
+ return definitionList;
+ }
+
+ /// <summary>
+ /// Attempts to convert a database object name to it's "bracketed for", e.g. "Name" -> "[Name]".
+ /// </summary>
+ /// <param name = "name">The name of the object.</param>
+ /// <returns>The SQL friendly conversion.</returns>
+ public static string MakeSqlFriendly(string name)
+ {
+ if (name == null)
+ {
+ return string.Empty;
+ }
+
+ if (!name.StartsWith("[") && (name.Contains(" ") || name.Contains("$")))
+ {
+ // TODO - reserved wods?
+ return string.Concat("[", name, "]");
+ }
+
+ return name;
+ }
+
+ /// <summary>
+ /// The render safe schema object name.
+ /// </summary>
+ /// <param name = "schema">The schema.</param>
+ /// <param name = "objectName">The object name.</param>
+ /// <returns>The render safe schema object name.</returns>
+ public static string RenderSafeSchemaObjectName(string schema, string objectName)
+ {
+ if (string.IsNullOrEmpty(schema))
+ {
+ return string.Format("[{0}]", objectName);
+ }
+
+ return string.Format("[{0}].[{1}]", schema, objectName);
+ }
+
+ /// <summary>
+ /// Saves the <paramref name = "definitionList" /> to the connection string file.
+ /// </summary>
+ /// <param name = "definitionList">The contents of the file.</param>
+ /// <seealso cref = "GetConnectionStringFilename" />
+ public static void SaveConnections(DbConnectionDefinitionList definitionList)
+ {
+ string filename = GetConnectionStringFilename();
+ string newXml = definitionList.ToXml();
+ File.WriteAllText(filename, newXml);
+ }
+
+ /// <summary>
+ /// Shows the URL in the defaut browser.
+ /// </summary>
+ /// <param name = "url">The URL to display.</param>
+ public static void ShowUrl(string url)
+ {
+ Process.Start(url);
+ }
+
+ /// <summary>
+ /// Serializes the <paramref name = "obj" />.
+ /// </summary>
+ /// <typeparam name = "T">The type.</typeparam>
+ /// <param name = "obj">The object to serialize.</param>
+ /// <returns>A UTF8 XML string representing <paramref name = "obj" />.</returns>
+ public static string ToXml<T>(T obj)
+ {
+ using (StringWriter sw = new StringWriterWithEncoding(Encoding.UTF8))
+ {
+ var serializer = new XmlSerializer(typeof(T));
+ serializer.Serialize(sw, obj);
+ return sw.ToString();
+ }
+ }
+
+ /// <summary>
+ /// Resolves the "(application data path)\MiniSqlQuery" for this user.
+ /// </summary>
+ /// <returns>A folder path.</returns>
+ private static string GetAppFolderPath()
+ {
+ string folder = Path.Combine(
+ Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
+ Resources.ShortAppTitle);
+ if (Directory.Exists(folder) == false)
+ {
+ Directory.CreateDirectory(folder);
+ }
+
+ return folder;
+ }
+ }
+}
\ No newline at end of file