Esempio n. 1
0
        static void _TransactionRecord(string UserName, string DataBase, string SQL, string Type, string Reason)
        {
            if (DB_Info.ContainsKey(DataBase)) //Prevents Out of bound errors
            {
                string URI = _DBInfo[DataBase].Path;

                string _SQL = "INSERT INTO Transactions (USER,DB,SQL,TYPE,Reason,\"UTC DATE\",\"UTC TIME\",PATH,SNAME) VALUES('" + UserName + "','" + DataBase + "','" + SQL.Replace("'", "''") + "','" + Type + "','" + Reason.Replace("'", "''") + "',Date(),TIME(),'" + URI + "','" + Path.GetDirectoryName(URI) + "');";
                LDDataBase.Command(GlobalStatic.TransactionDB, _SQL);
            }
        }
Esempio n. 2
0
        public static int LatestUpdate()
        {
            int StackReference = Stack.Add("Updater.LatestUpdate()");

            if (string.IsNullOrWhiteSpace(UpdaterDB))
            {
                UpdaterDB = LDDataBase.ConnectSQLite(GlobalStatic.UpdaterDBpath);
            }
            Primitive QueryItems = LDDataBase.Query(UpdaterDB, $"SELECT * FROM updates WHERE PRODUCTID = '{ GlobalStatic.ProductID }';", null, true);

            int.TryParse(QueryItems[1]["VERSION"], out int LatestVersion);
            Stack.Exit(StackReference);
            return(LatestVersion);
        }
Esempio n. 3
0
        static string[] FetchLinks()
        {
            int StackPointer = Stack.Add("Updater.DownloadLinks");

            if (string.IsNullOrWhiteSpace(UpdaterDB))
            {
                UpdaterDB = LDDataBase.ConnectSQLite(GlobalStatic.UpdaterDBpath);
            }
            Primitive QueryItems = LDDataBase.Query(UpdaterDB, $"SELECT * FROM updates WHERE PRODUCTID = '{ GlobalStatic.ProductID }';", null, true);

            string[] Locations = new string[2];
            Locations[0] = QueryItems[1]["URL"];
            Locations[1] = QueryItems[1]["URL2"];
            Stack.Exit(StackPointer);
            return(Locations);
        }
Esempio n. 4
0
            public static void MemoryDB(EnginesMode Mode)
            {
                int StackPointer = Stack.Add($"Engines.Load.MemoryDB({Mode})");

                switch (Mode)
                {
                case EnginesMode.SQLITE:
                    LDDataBase.Connection = "Data Source=:memory:;Version=3;New=True;";
                    AddToList("", LDDataBase.ConnectSQLite(""), "SQLITE MEM DB", EnginesMode.SQLITE, "URI=;");
                    LDDataBase.Connection = string.Empty;
                    break;

                default:
                    throw new NotImplementedException();
                }
                Stack.Exit(StackPointer);
            }
Esempio n. 5
0
        /// <summary>
        /// Executes a Command against a database.
        /// </summary>
        /// <param name="Database">Database. Use the Database name you recieve from LoadDB</param>
        /// <param name="SQL"></param>
        /// <param name="User">UserName of the requested username</param>
        /// <param name="Explanation">Any notes for transactions</param>
        /// <param name="RunParser">Run Custom Parser... Yet to be implemented</param>
        /// <returns></returns>
        static int Command(string Database, string SQL, string User, string Explanation)
        {
            int StackPointer = Stack.Add($"Engines.Command({Database})");

            _UTC_Start.Add(DateTime.UtcNow.ToString("hh:mm:ss tt"));
            Stopwatch CommandTime = Stopwatch.StartNew();

            if (GlobalStatic.Transaction_Commands == true)
            {
                TransactionRecord(User, Database, SQL, Type.Command, Explanation);
            }

            int Updated = LDDataBase.Command(Database, SQL);

            _Type_Referer.Add(Type.Command);
            _Timer.Add(CommandTime.ElapsedMilliseconds);
            _Explanation.Add(Explanation);
            _User.Add(User);

            Stack.Exit(StackPointer);
            return(Updated);
        }
Esempio n. 6
0
        static Primitive Query(string DataBase, string SQL, string ListView, bool FetchRecords, string UserName, string Explanation) //Expand
        {
            int StackPointer = Stack.Add("Engines.Query()");

            _UTC_Start.Add(DateTime.UtcNow.ToString("hh:mm:ss tt"));
            Stopwatch QueryTime = Stopwatch.StartNew();

            if (SQL.StartsWith("."))
            {
                Emulator(DB_Info[DataBase].Engine, DataBase, SQL, UserName, ListView);
                Stack.Exit(StackPointer);
                return(null);
            }

            if (GlobalStatic.Transaction_Query == true)
            {
                TransactionRecord(UserName, DataBase, SQL, Type.Query, Explanation);
            }

            if (UseCache == false)
            {
                _CacheStatus.Add("Disabled");
            }
            else if (FetchRecords == false)
            {
                //The Cache can never be hit :(
                _CacheStatus.Add("NA");
            }

            Primitive QueryResults;

            if (UseCache == false && FetchRecords == true && string.IsNullOrWhiteSpace(ListView) == true && _Cache.ContainsKey(SQL) == true)
            {
                //Read data back from Cache
                _CacheStatus.Add("Hit!");
                QueryResults          = _Cache[SQL].Results;
                _Cache[SQL].LifeTime -= 1;
                if (_Cache[SQL].LifeTime <= 0)
                {
                    _Cache.Remove(SQL);
                }
            }
            else
            {
                //Data is not in Cache :(
                QueryResults = LDDataBase.Query(DataBase, SQL, ListView, FetchRecords);
                if (UseCache == true && FetchRecords == true && _Cache.ContainsKey(SQL) == false)
                {
                    CacheEntry cache = new CacheEntry
                    {
                        LifeTime = 10,
                        Results  = QueryResults
                    };
                    _Cache.Add(SQL, cache);
                    _CacheStatus.Add("Results added to cache");
                }
                else if (UseCache == true && _Cache.ContainsKey(SQL))
                {
                    _CacheStatus.Add("Error");
                }
            }

            _Type_Referer.Add(Type.Query);

            switch (Explanation)
            {
            case "SCHEMA-PRIVATE":
            case "SCHEMA":
                break;

            default:
                _Last_NonSchema_Query.Add(SQL);
                break;
            }

            _Last_Query.Add(SQL);
            _Timer.Add(QueryTime.ElapsedMilliseconds);
            _Explanation.Add(Explanation);
            _User.Add(UserName);
            Stack.Exit(StackPointer);
            return(QueryResults);
        }
Esempio n. 7
0
            public static string DB(EnginesMode Mode, Dictionary <string, string> Data, string ShortName)
            {
                //MAKE SURE The CurrentMode is always currently changed.
                int    StackPointer = Stack.Add($"Engines.Load.DB({Mode},{ShortName})");
                string HashCode     = Data.ToPrimitiveArray();

                //If DB is already in the list...
                if (_DB_Hash.ContainsKey(HashCode))
                {
                    CurrentDatabase   = _DB_Hash[HashCode];
                    DatabaseShortname = ShortName;
                    Stack.Exit(StackPointer);
                    return(CurrentDatabase);
                }

                //New Database creation code
                switch (Mode)
                {
                case EnginesMode.MySQL:
                    CurrentDatabase = LDDataBase.ConnectMySQL(Data["Server"], Data["User"], Data["Password"], Data["Database"]);
                    _DB_Hash.Add(HashCode, CurrentDatabase);
                    Stack.Exit(StackPointer);
                    return(CurrentDatabase);

                case EnginesMode.ODBC:
                    CurrentDatabase = LDDataBase.ConnectOdbc(Data["Driver"], Data["Server"], Data["Port"], Data["User"], Data["Password"], Data["Option"], Data["Database"]);
                    _DB_Hash.Add(HashCode, CurrentDatabase);
                    Stack.Exit(StackPointer);
                    return(CurrentDatabase);

                case EnginesMode.OLEDB:
                    CurrentDatabase = LDDataBase.ConnectOleDb(Data["Provider"], Data["Server"], Data["Database"]);
                    _DB_Hash.Add(HashCode, CurrentDatabase);
                    Stack.Exit(StackPointer);
                    return(CurrentDatabase);

                case EnginesMode.SQLITE:
                    //Add Custom Password handling code here
                    if (Data.ContainsKey("Password"))
                    {
                        LDDataBase.Connection = $"Data Source{Data["URI"]};Password={Data["Password"]}";
                    }

                    if (Directory.Exists(Path.GetDirectoryName(Data["URI"])))
                    {
                        string Database = LDDataBase.ConnectSQLite(Data["URI"]);
                        AddToList(Data["URI"], Database, ShortName, EnginesMode.SQLITE);

                        Settings.Save();
                        CurrentDatabase = Database;
                        _DB_Hash.Add(HashCode, CurrentDatabase);
                        DB_Info[Database].Connections.SQLITE.Bind();
                        Stack.Exit(StackPointer);
                        return(Database);
                    }
                    Stack.Exit(StackPointer);
                    return(null);

                case EnginesMode.SQLSERVER:
                    CurrentDatabase = LDDataBase.ConnectSqlServer(Data["Server"], Data["Database"]);
                    _DB_Hash.Add(HashCode, CurrentDatabase);
                    Stack.Exit(StackPointer);
                    return(CurrentDatabase);

                default:
                    Stack.Exit(StackPointer);
                    return("Incorrect Paramters");
                }
            }
Esempio n. 8
0
 public static void EditTable(string Table, string Control)
 {
     LDDataBase.EditTable(CurrentDatabase, Table, Control);
 }
Esempio n. 9
0
        /// <summary>
        /// Handles Main Menu
        /// </summary>
        /// <param name="Item">Localized Menu Item</param>
        public static void Menu(string Item)
        {
            int StackPointer = Stack.Add($"Handlers.Menu({Item})");

            //Switch and Enum cannot be used because values can change
            //File Menu Items
            if (Item == Language.Localization["New"])
            {
                string Path = LDDialogs.SaveFile(GlobalStatic.Extensions, GlobalStatic.LastFolder);
                if (!string.IsNullOrWhiteSpace(Path))
                {
                    GlobalStatic.ListView   = null;
                    GlobalStatic.Dataview   = null;
                    GlobalStatic.LastFolder = System.IO.Path.GetDirectoryName(Path);
                    Settings.Load(GlobalStatic.RestoreSettings, GlobalStatic.SettingsPath);
                    Settings.Save();
                    LDDataBase.ConnectSQLite(Path);
                    Engines.Load.Sqlite(Path);

                    Events.LogMessage("Created DB :" + Path, Language.Localization["Application"]);
                    UI.PreMainMenu();
                    UI.MainMenu();
                    LDDataBase.Connection = null;
                }
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == Language.Localization["Open"])
            {
                GlobalStatic.ListView = null;
                GlobalStatic.Dataview = null;
                Settings.Load(GlobalStatic.RestoreSettings, GlobalStatic.SettingsPath); //Reloads Settings
                string Path = UI.GetPath(Engines.EnginesMode.SQLITE);

                if (!string.IsNullOrWhiteSpace(Path))
                {
                    Engines.Load.Sqlite(Path);
                    GlobalStatic.Settings["LastFolder"] = System.IO.Path.GetDirectoryName(Path);
                    Settings.Save();
                    UI.PreMainMenu();
                    UI.MainMenu();

                    int Index = Engines.DB_Name.IndexOf(Engines.CurrentDatabase) + 1;
                    Handlers.ComboBox.CB(GlobalStatic.ComboBox["Database"], Index);
                    LDControls.ComboBoxSelect(GlobalStatic.ComboBox["Database"], Index);
                }
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == Language.Localization["Define New Table"])
            {
                Engines.Cache.Clear();
                UI.CreateTableUI();
            }
            else if (Item == Language.Localization["New in Memory Db"])
            {
                Engines.Load.MemoryDB(Engines.EnginesMode.SQLITE);
                UI.PreMainMenu();
                UI.MainMenu();
            }
            else if (Item == Language.Localization["Create Statistics Page"])
            {
                string Name = string.Format("\"Statistics of {0}\"", Engines.CurrentTable.SanitizeFieldName());
                Engines.Transform.CreateStatisticsTable(Engines.CurrentDatabase, Engines.CurrentTable, Name, Export.GenerateSchemaFromLastQuery());

                Engines.QuerySettings QS = new Engines.QuerySettings
                {
                    Database    = Engines.CurrentDatabase,
                    SQL         = $"SELECT * FROM {Name};",
                    ListView    = GlobalStatic.ListView,
                    User        = GlobalStatic.UserName,
                    Explanation = Language.Localization["Statistics Page"]
                };

                Engines.Query(QS);

                Engines.GetSchema(Engines.CurrentDatabase);
                Engines.SetDefaultTable(Name.SanitizeFieldName());
                Engines.GetColumnsofTable(Engines.CurrentDatabase, Name);
                ComboBox.Bind();
            }
            //Main
            else if (Item == Language.Localization["View"] || Item == Language.Localization["View"] + " ")
            {
                Controls.HideControl(GlobalStatic.Dataview);
                GlobalStatic.Dataview = null;
                if (GlobalStatic.ListView == null)
                {
                    bool Bold = GraphicsWindow.FontBold;
                    GraphicsWindow.FontBold = false;
                    GlobalStatic.ListView   = LDControls.AddListView(GlobalStatic.Listview_Width, GlobalStatic.Listview_Height, null);

                    LDControls.AddContextMenu(GlobalStatic.ListView, "1=Ascend;2=Descend;3=Random();", null);
                    Controls.Move(GlobalStatic.ListView, 10, 35);
                    UI.DisplayResults();
                    GraphicsWindow.FontBold = Bold;
                }
                else
                {
                    UI.ShowDisplayResults();
                    Controls.ShowControl(GlobalStatic.ListView);
                }
                if (!string.IsNullOrEmpty(Engines.CurrentTable))
                {
                    Engines.QuerySettings QS = new Engines.QuerySettings
                    {
                        Database    = Engines.CurrentDatabase,
                        SQL         = $"SELECT * FROM {Engines.CurrentTable};",
                        ListView    = GlobalStatic.ListView,
                        User        = Language.Localization["App"],
                        Explanation = Language.Localization["View Function"]
                    };

                    Engines.Query(QS);
                }
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == Language.Localization["Save"])
            {
                if (!string.IsNullOrEmpty(Engines.CurrentDatabase) && !string.IsNullOrEmpty(GlobalStatic.Dataview))
                {
                    string SaveStatus = LDDataBase.SaveTable(Engines.CurrentDatabase, GlobalStatic.Dataview);
                    Events.LogMessagePopUp("The save was : " + SaveStatus, Language.Localization["UI"], "Save Status");
                }
                else
                {
                    Events.LogMessagePopUp(Language.Localization["Dataview Error"], Language.Localization["UI"], "Save Error");
                }
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == Language.Localization["Edit"])
            {
                if (!string.IsNullOrEmpty(Engines.CurrentDatabase))
                {
                    switch (GlobalStatic.SortBy)
                    {
                    case 2:
                        Events.LogMessagePopUp(Language.Localization["Views Read Only"], Language.Localization["UI"], Language.Localization["Access Denied"]);
                        break;

                    case 4:
                        Events.LogMessagePopUp(Language.Localization["Master Table Protected"], Language.Localization["UI"], Language.Localization["Access Denied"]);
                        break;

                    default:
                        Controls.HideControl(GlobalStatic.ListView);
                        if (String.IsNullOrEmpty(GlobalStatic.Dataview))
                        {
                            GlobalStatic.Dataview = LDControls.AddDataView(GlobalStatic.Listview_Width, GlobalStatic.Listview_Height, null);
                            Controls.Move(GlobalStatic.Dataview, 10, 35);
                        }
                        else
                        {
                            Controls.ShowControl(GlobalStatic.Dataview);
                        }
                        UI.HideDisplayResults();
                        Engines.EditTable(Engines.CurrentTable, GlobalStatic.Dataview);
                        break;
                    }
                }
                else
                {
                    Events.LogMessagePopUp(Language.Localization["Error No DB"], Language.Localization["UI"], Language.Localization["Edit"]);
                }
                Stack.Exit(StackPointer);
                return;
            }
            //Import
            else if (Item == Language.Localization["CSV"])
            {
                string Path = LDDialogs.OpenFile("csv", null);
                if (!string.IsNullOrWhiteSpace(Path))
                {
                    //Outputted to a temporary path in the event the import doesn't work...
                    string    TempPath = System.IO.Path.GetTempFileName().Replace(".tmp", ".sql");
                    Stopwatch CSV      = new Stopwatch();
                    CSV.Start();
                    Import.CSV(Path, TempPath);
                    CSV.Stop();

                    Stopwatch SQL = new Stopwatch();
                    SQL.Start();
                    Import.SQL(Engines.CurrentDatabase, TempPath);
                    SQL.Stop();

                    string ToolTip = string.Format("CSV Import Completed!\n CSV:{0}(ms)\nSQL:{1}(ms)",
                                                   CSV.ElapsedMilliseconds,
                                                   SQL.ElapsedMilliseconds);
                    Events.LogMessagePopUp(ToolTip, Language.Localization["UI"], Language.Localization["Importer"]); //TODO Localize

                    Stack.Exit(StackPointer);
                    return;
                }
                Events.LogMessagePopUp(Language.Localization["Error Generic"], Language.Localization["UI"], "Import.CSV");//TODO Localize
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == Language.Localization["SQL"])
            {
                string Path = LDDialogs.OpenFile("sql", null);
                if (!string.IsNullOrWhiteSpace(Path))
                {
                    Stopwatch SQL = new Stopwatch();
                    SQL.Start();
                    Import.SQL(Engines.CurrentDatabase, Path);
                    SQL.Stop();
                    Events.LogMessagePopUp("SQL Import Completed in " + SQL.ElapsedMilliseconds + "(ms)", Language.Localization["UI"], Language.Localization["Importer"]); //TODO Localize
                    Stack.Exit(StackPointer);
                    return;
                }
                Events.LogMessagePopUp(Language.Localization["Error Generic"], Language.Localization["UI"], "Import.SQL");//TODO Localize
                Stack.Exit(StackPointer);
                return;
            }
            //Export
            else if (Item == Language.Localization["PXML"] + " ")
            {
                string Path = LDDialogs.SaveFile("xml", null);
                if (!string.IsNullOrWhiteSpace(Path))
                {
                    Primitive Data = Export.Generate2DArrayFromLastQuery();
                    Export.XML(Data, Export.GenerateSchemaFromQueryData(Data), Engines.CurrentTable, Path);
                    Events.LogMessagePopUp("XML export of " + Engines.CurrentTable + " completed!", "Export", "Success");
                    Stack.Exit(StackPointer);
                    return;
                }
                Events.LogMessagePopUp(Language.Localization["Error Generic"], Language.Localization["UI"], "Export.XML");//TODO Localize
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == Language.Localization["HTML"] + " ")
            {
                string Path = LDDialogs.SaveFile("html", null);
                if (!string.IsNullOrWhiteSpace(Path))
                {
                    Primitive Data = Export.Generate2DArrayFromLastQuery();
                    Export.HTML(Data, Export.GenerateSchemaFromQueryData(Data), Engines.CurrentTable.SanitizeFieldName(), Path, GlobalStatic.ProductID + " V" + GlobalStatic.VersionID);
                    Events.LogMessagePopUp("HTML export of " + Engines.CurrentTable + " completed!", Language.Localization["Export"], Language.Localization["Success"]);
                    Stack.Exit(StackPointer);
                    return;
                }
                Events.LogMessagePopUp(Language.Localization["Error Generic"], Language.Localization["UI"], "Export.HTML");//TODO Localize
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == Language.Localization["SQL"] + " ")
            {
                string Path = LDDialogs.SaveFile("sql", null);
                if (!string.IsNullOrWhiteSpace(Path))
                {
                    Primitive Data   = Export.Generate2DArrayFromLastQuery();
                    Primitive Schema = Export.GenerateSchemaFromQueryData(Data);
                    Primitive SchemaQuery;
                    switch (Engines.CurrentEngine)
                    {
                    case Engines.EnginesMode.SQLITE:
                        Engines.SQLite SQLite = new Engines.SQLite();

                        Engines.QuerySettings QS = new Engines.QuerySettings
                        {
                            Database     = Engines.CurrentDatabase,
                            SQL          = SQLite.GetColumnsOfTable(Engines.CurrentTable),
                            FetchRecords = true,
                            User         = GlobalStatic.UserName,
                            Explanation  = "SCHEMA"
                        };

                        SchemaQuery = Engines.Query(QS);
                        break;

                    default:
                        throw new PlatformNotSupportedException("Currently database is not supported");
                    }
                    Dictionary <string, bool>   PK    = Export.SQL_Fetch_PK(SchemaQuery, Schema, Engines.CurrentEngine);
                    Dictionary <string, string> Types = Export.SQL_Fetch_Type(SchemaQuery, Schema, Engines.CurrentEngine);
                    Export.SQL(Data, Schema, PK, Types, Engines.CurrentTable, Path);
                    LDProcess.Start(Path, null);
                    Events.LogMessagePopUp("SQL export of " + Engines.CurrentTable + " completed!", Language.Localization["Export"], Language.Localization["Success"]); //TODO Localize
                    Stack.Exit(StackPointer);
                    return;
                }
                Events.LogMessagePopUp(Language.Localization["Error Generic"], Language.Localization["UI"], "Export.SQL");//TODO Localize
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == Language.Localization["CSV"] + " ")
            {
                string Path = LDDialogs.SaveFile("csv", null);
                if (!string.IsNullOrWhiteSpace(Path))
                {
                    Primitive Data = Export.Generate2DArrayFromLastQuery();
                    Export.CSV(Data, Export.GenerateSchemaFromQueryData(Data), Path, GlobalStatic.Deliminator);
                    Events.LogMessagePopUp("CSV export of " + Engines.CurrentTable + " completed!", Language.Localization["Export"], Language.Localization["Success"]); //TODO Localize
                    Stack.Exit(StackPointer);
                    return;
                }
                Events.LogMessagePopUp(Language.Localization["Error Generic"], Language.Localization["UI"], "Export.CSV");//TODO Localize
                Stack.Exit(StackPointer);
            }
            else if (Item == "JSON") //TODO Localize
            {
                string Path = LDDialogs.SaveFile("json", null);
                if (!string.IsNullOrWhiteSpace(Path))
                {
                    Primitive Data = Export.Generate2DArrayFromLastQuery();
                    Export.JSON(Data, Export.GenerateSchemaFromQueryData(Data), Engines.CurrentTable.SanitizeFieldName(), Path);
                    Events.LogMessagePopUp("JSON export of " + Engines.CurrentTable + " completed!", Language.Localization["Export"], Language.Localization["Success"]); //TODO Localize
                    Stack.Exit(StackPointer);
                    return;
                }
                Events.LogMessagePopUp(Language.Localization["Error Generic"], Language.Localization["UI"], "Export.JSON");//TODO Localize
                Stack.Exit(StackPointer);
            }
            else if (Item == "MarkDown") //TODO Localize
            {
                string Path = LDDialogs.SaveFile("md", null);
                if (!string.IsNullOrWhiteSpace(Path))
                {
                    Primitive Data = Export.Generate2DArrayFromLastQuery();
                    Export.MarkDown(Data, Export.GenerateSchemaFromQueryData(Data), Path);
                    Events.LogMessagePopUp("MarkDown export is now complete", Language.Localization["Export"], Language.Localization["Success"]); //TODO Localize
                    Stack.Exit(StackPointer);
                    return;
                }
                Events.LogMessagePopUp(Language.Localization["Error Generic"], Language.Localization["UI"], "Export.MarkDown");//TODO Localize
                Stack.Exit(StackPointer);
            }
            else if (Item == "Wiki MarkUp") //TODO Localize
            {
                string Path = LDDialogs.SaveFile("markup", null);
                if (!string.IsNullOrWhiteSpace(Path))
                {
                    Primitive Data = Export.Generate2DArrayFromLastQuery();
                    Export.MarkUp(Data, Export.GenerateSchemaFromQueryData(Data), Path);
                    Events.LogMessagePopUp("Wiki Markup export is now complete", Language.Localization["Export"], Language.Localization["Success"]); //TODO Localize
                    Stack.Exit(StackPointer);
                    return;
                }
                Events.LogMessagePopUp(Language.Localization["Error Generic"], Language.Localization["UI"], "Export.Wiki Markup");//TODO Localize
                Stack.Exit(StackPointer);
            }
            else if (Item == "Excel") //TODO Localize
            {
                string Path = LDDialogs.SaveFile("xlsx", null);
                if (!string.IsNullOrWhiteSpace(Path))
                {
                    Primitive Data = Export.Generate2DArrayFromLastQuery();
                    //Export.Excel(Data, Export.GenerateSchemaFromQueryData(Data), Engines.CurrentTable, Path);
                    Events.LogMessagePopUp("Excel export is now complete", Language.Localization["Export"], Language.Localization["Success"]); //TODO Localize
                    Stack.Exit(StackPointer);
                    return;
                }
                Events.LogMessagePopUp(Language.Localization["Error Generic"], Language.Localization["UI"], "Export.Excel Markup");//TODO Localize
                Stack.Exit(StackPointer);
            }
            //Settings
            else if (Item == Language.Localization["About"])
            {
                Engines.QuerySettings QS = new Engines.QuerySettings
                {
                    Database     = Engines.CurrentDatabase,
                    SQL          = "SELECT SQLITE_VERSION(),sqlite_source_id();",
                    FetchRecords = true,
                    User         = GlobalStatic.UserName,
                    Explanation  = Language.Localization["User Requested"] + ":" + Language.Localization["App"]
                };

                Primitive About_Data = Engines.Query(QS);
                string    About_Msg  = string.Format("DBM C# is a Database Mangement Program developed by Abhishek Sathiabalan. (C){0}. All rights reserved.\n\nYou are running : {1} v{2}\n\n", GlobalStatic.Copyright, GlobalStatic.ProductID, GlobalStatic.VersionID);
                About_Msg += string.Format("SQLite Version : {0}\nSQLITE Source ID : {1}", About_Data[1]["SQLITE_VERSION()"], About_Data[1]["sqlite_source_id()"]);
                Events.LogMessagePopUp(About_Msg, "Debug", "About");//DO NOT LOCALIZE
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == Language.Localization["Show Help"])
            {
                string Path = System.IO.Path.Combine(GlobalStatic.AssetPath, "HELP Table.html");
                LDProcess.Start(Path, null);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == Language.Localization["Settings Editor"])
            {
                UI.Settings.Display();
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == Language.Localization["Refresh Schema"])
            {
                Engines.GetSchema(Engines.CurrentDatabase);
                Engines.GetColumnsofTable(Engines.CurrentDatabase, Engines.CurrentTable);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == Language.Localization["Check for Updates"])
            {
                Updater.CheckForUpdates(GlobalStatic.UpdaterDBpath);
                Stack.Exit(StackPointer);
                return;
            }
            //Charts
            else if (Item == "Bar") //TODO Localize
            {
                Google_Charts.Chart.Bar Bar = new Google_Charts.Chart.Bar();
                UI.Charts.Display(Bar);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == "Column") //TODO Localize
            {
                Google_Charts.Chart.Column Column = new Google_Charts.Chart.Column();
                UI.Charts.Display(Column);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == "Geo") //TODO Localize
            {
                Google_Charts.Chart.GeoCharts Geo = new Google_Charts.Chart.GeoCharts();
                UI.Charts.Display(Geo);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == "Histogram") //TODO Localize
            {
                Google_Charts.Chart.Histograms Histo = new Google_Charts.Chart.Histograms();
                UI.Charts.Display(Histo);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == "Line") //TODO Localize
            {
                Google_Charts.Chart.Line Line = new Google_Charts.Chart.Line();
                UI.Charts.Display(Line);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == "Org") //TODO Localize
            {
                Google_Charts.Chart.OrgChart Org = new Google_Charts.Chart.OrgChart();
                UI.Charts.Display(Org);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == "Pie") //TODO: Localize
            {
                Google_Charts.Chart.Pie Pie = new Google_Charts.Chart.Pie();
                UI.Charts.Display(Pie);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == "Sankey") //TODO Localize
            {
                Google_Charts.Chart.SanKey SanKey = new Google_Charts.Chart.SanKey();
                UI.Charts.Display(SanKey);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == "Scatter Plot") //TODO Localize
            {
                Google_Charts.Chart.Scatter Scatter = new Google_Charts.Chart.Scatter();
                UI.Charts.Display(Scatter);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == "Sortable Table") //TODO Localize
            {
                Google_Charts.Chart.Table Table = new Google_Charts.Chart.Table();
                UI.Charts.Display(Table);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item == "TimeLine") //TODO Localize
            {
                Google_Charts.Chart.TimeLine TL = new Google_Charts.Chart.TimeLine();
                UI.Charts.Display(TL);
                Stack.Exit(StackPointer);
                return;
            }
            else if (Item != null)
            {
                Events.LogMessage(Item + " does not exist in context or is not yet implemented", Language.Localization["UI"]);
            }
            Stack.Exit(StackPointer);
        }