using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; using Tango.DAL.Remote.DB; using Tango.Settings; using Tango.Synchronization; using Tango.Synchronization.Conversion; namespace Tango.SQLiteGenerator.CLI { public enum Config { Default, CopyAll, } class Program { static void Main(string[] args) { String sqlitePath = args[0]; Config conf = args.Length > 1 ? (Config)Enum.Parse(typeof(Config), args[1]) : Config.Default; sqlitePath = Path.GetFullPath(sqlitePath); bool completed = false; String connectionString = SettingsManager.Default.GetOrCreate().DataBaseSource; Console.WriteLine("Connecting to " + connectionString + "..."); connectionString = String.Format("Data Source={0};Initial Catalog=Tango;Integrated Security=SSPI;", connectionString); List sync_configurations = new List(); using (RemoteDB db = RemoteDB.CreateDefault()) { sync_configurations = db.SYNC_CONFIGURATIONS.ToList(); } SqlConversionHandler handler = new SqlConversionHandler(delegate (bool done, bool success, int percent, string msg) { Console.WriteLine(String.Format("{0} [%{1}]", msg, percent)); if (done) { if (success) { Console.WriteLine("SQLite database has been generated successfully on " + sqlitePath); Environment.Exit(0); } else { Console.WriteLine("SQLite database generation failed!"); Environment.Exit(-1); } completed = true; } }); SqlTableSelectionHandler selectionHandler = new SqlTableSelectionHandler(delegate (List schema) { List updated = schema.Where(x => x.TableName.ToLower() != "sysdiagrams").ToList(); if (conf == Config.Default) { updated .Where(table => sync_configurations.Where(config => (SyncConfiguration)config.SYNC_TYPE == SyncConfiguration.OverwriteLocal).ToList() .Exists(config => config.TABLE_NAME == table.TableName)).ToList().ForEach(x => x.CopyData = true); } else if (conf == Config.CopyAll) { updated.ForEach(x => x.CopyData = true); } return updated; }); SqlServerToSQLiteConverter converter = new SqlServerToSQLiteConverter(); converter.GenerateForeignKeys = true; converter.GenerateIndexes = true; converter.ConvertSqlServerToSQLiteDatabase(connectionString, sqlitePath, null, handler, selectionHandler, null, false, false); while (!completed) { Console.ReadLine(); } } } }