miniSql

创建
zgc123@gmail.com authored at 11/19/2023 1:40:15 AM
6136600
Tree
0 Parent(s)
Summary: 1 changed files with 203 additions and 0 deletions.
Added +203 -0
Added +203 -0
diff --git a/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/FindObjectForm.cs b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/FindObjectForm.cs
new file mode 100644
index 0000000..1529d11
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery/PlugIns/DatabaseInspector/FindObjectForm.cs
@@ -0,0 +1,203 @@
+#region License
+
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Windows.Forms;
+using MiniSqlQuery.Core;
+using MiniSqlQuery.Core.DbModel;
+
+namespace MiniSqlQuery.PlugIns.DatabaseInspector
+{
+    /// <summary>The find object form.</summary>
+    public partial class FindObjectForm : Form
+    {
+        /// <summary>The _database inspector.</summary>
+        private readonly IDatabaseInspector _databaseInspector;
+
+        private readonly List<string> _items = new List<string>();
+        private string _selectedItem;
+
+        /// <summary>Initializes a new instance of the <see cref="FindObjectForm"/> class.</summary>
+        /// <param name="databaseInspector">The database inspector.</param>
+        public FindObjectForm(IDatabaseInspector databaseInspector)
+        {
+            _databaseInspector = databaseInspector;
+            InitializeComponent();
+        }
+
+        /// <summary>Gets the Selected Table Name.</summary>
+        [Obsolete]
+        public string SelectedTableName
+        {
+            get { return _selectedItem; }
+        }
+
+        /// <summary>Gets the Selected Object Name.</summary>
+        public string SelectedObjectName
+        {
+            get { return _selectedItem; }
+        }
+
+        /// <summary>Check the keys, escape to exit, enter to select. If up or down are pressed move the list item.</summary>
+        /// <param name="msg">The windows message.</param>
+        /// <param name="keyData">The key data.</param>
+        /// <returns>The process command key result.</returns>
+        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
+        {
+            switch (keyData)
+            {
+                case Keys.Escape:
+                    DialogResult = DialogResult.Cancel;
+                    Close();
+                    break;
+
+                case Keys.Enter:
+                    Done();
+                    break;
+
+                case Keys.Up:
+                    MoveSelectionUp();
+                    return true;
+
+                case Keys.Down:
+                    MoveSelectionDown();
+                    return true;
+            }
+
+            return base.ProcessCmdKey(ref msg, keyData);
+        }
+
+        private void FindObjectForm_Load(object sender, EventArgs e)
+        {
+        }
+
+        private void FindObjectForm_Shown(object sender, EventArgs e)
+        {
+            _items.Clear();
+
+            try
+            {
+                UseWaitCursor = true;
+
+                if (_databaseInspector.DbSchema == null)
+                {
+                    _databaseInspector.LoadDatabaseDetails();
+
+                    // And if it is still null (e.g. connection error) then bail out:
+                    if (_databaseInspector.DbSchema == null)
+                    {
+                        return;
+                    }
+                }
+
+                foreach (DbModelTable table in _databaseInspector.DbSchema.Tables)
+                {
+                    var name = table.Schema;
+                    if (!String.IsNullOrEmpty(name))
+                    {
+                        name += ".";
+                    }
+                    name += table.Name;
+
+                    _items.Add(name);
+                }
+
+                foreach (DbModelView view in _databaseInspector.DbSchema.Views)
+                {
+                    _items.Add(view.FullName);
+                }
+            }
+            finally
+            {
+                UseWaitCursor = false;
+            }
+
+            lstItems.DataSource = _items;
+            txtSearchPattern.Focus();
+        }
+
+        private void lstItems_DoubleClick(object sender, EventArgs e)
+        {
+            Done();
+        }
+
+        private void txtSearchPattern_TextChanged(object sender, EventArgs e)
+        {
+            if (_items != null)
+            {
+                var searchValue = txtSearchPattern.Text.ToLowerInvariant();
+                var dataSource = _items.Where(objectName =>
+                {
+                    objectName = objectName ?? String.Empty;
+                    objectName = objectName.ToLowerInvariant();
+                    return objectName.Contains(searchValue);
+                }).ToList();
+                Debug.WriteLine(string.Format("search '{0}' yields {1}...", searchValue, dataSource.Count));
+
+                lstItems.DataSource = dataSource;
+            }
+            else
+            {
+                lstItems.DataSource = null;
+            }
+
+            SetSelectedName();
+        }
+
+        /// <summary>
+        /// If there is a valid selection remember it.
+        /// </summary>
+        private void SetSelectedName()
+        {
+            _selectedItem = String.Empty;
+
+            if (lstItems.SelectedItem != null)
+            {
+                _selectedItem = lstItems.SelectedItem.ToString();
+            }
+        }
+
+        /// <summary>
+        /// Move the list selection up one if we can.
+        /// </summary>
+        private void MoveSelectionUp()
+        {
+            if (lstItems.SelectedIndex < 1)
+            {
+                return;
+            }
+            lstItems.SelectedIndex--;
+        }
+
+        /// <summary>
+        /// Move the list selection down one if we can.
+        /// </summary>
+        private void MoveSelectionDown()
+        {
+            var maxIndex = lstItems.Items.Count - 1;
+            if (lstItems.SelectedIndex >= maxIndex)
+            {
+                return;
+            }
+            lstItems.SelectedIndex++;
+        }
+
+        /// <summary>
+        /// Set the selected item and close the form.
+        /// </summary>
+        private void Done()
+        {
+            SetSelectedName();
+            DialogResult = DialogResult.OK;
+            Close();
+        }
+    }
+}
\ No newline at end of file