private static void ParseSqlite(DataTable data) { SqliteParser sp = new SqliteParser(); ParseResult pr = sp.Parse(data); if (_OutputType.Equals("console")) { Console.WriteLine(Common.SerializeJson(pr, true)); Console.WriteLine(""); } else if (_OutputType.Equals("file") && !String.IsNullOrEmpty(_OutputFile)) { File.WriteAllBytes(_OutputFile, Encoding.UTF8.GetBytes(Common.SerializeJson(pr, true))); } }
public void CreateTableTest() { List <ISqliteStatement> statements = SqliteParser.Parse(@" CREATE TABLE person ( Id INTEGER not null constraint test_pk primary key autoincrement, FirstName TEXT not null, LastName TEXT not null, Birthday TEXT, age INTEGER ) ").ToList(); Assert.AreEqual(1, statements.Count); SqliteCreateTable statement = statements.First().CastTo <SqliteCreateTable>(); Assert.AreEqual(5, statement.Columns.Count); Assert.AreEqual("Id", statement.Columns[0].Name); Assert.AreEqual("INTEGER", statement.Columns[0].Type); Assert.IsTrue(statement.Columns[0].PrimaryKey); Assert.IsTrue(statement.Columns[0].AutoIncrement); Assert.IsFalse(statement.Columns[0].Nullable); Assert.AreEqual("FirstName", statement.Columns[1].Name); Assert.AreEqual("TEXT", statement.Columns[1].Type); Assert.IsFalse(statement.Columns[1].PrimaryKey); Assert.IsFalse(statement.Columns[1].AutoIncrement); Assert.IsFalse(statement.Columns[1].Nullable); Assert.AreEqual("LastName", statement.Columns[2].Name); Assert.AreEqual("TEXT", statement.Columns[2].Type); Assert.IsFalse(statement.Columns[2].PrimaryKey); Assert.IsFalse(statement.Columns[2].AutoIncrement); Assert.IsFalse(statement.Columns[2].Nullable); Assert.AreEqual("Birthday", statement.Columns[3].Name); Assert.AreEqual("TEXT", statement.Columns[3].Type); Assert.IsFalse(statement.Columns[3].PrimaryKey); Assert.IsFalse(statement.Columns[3].AutoIncrement); Assert.IsTrue(statement.Columns[3].Nullable); Assert.AreEqual("age", statement.Columns[4].Name); Assert.AreEqual("INTEGER", statement.Columns[4].Type); Assert.IsFalse(statement.Columns[4].PrimaryKey); Assert.IsFalse(statement.Columns[4].AutoIncrement); Assert.IsTrue(statement.Columns[4].Nullable); }
public void Read(SqliteReadDatabaseCommandParameters parameters, string outputPath) { Match match = connectionStringRegex.Match(parameters.ConnectionString); match.Success.AssertIs(true, "ConnectionString", "is not in valid format. Has to be like 'Data Source=my.db'"); string originalFile = match.Groups["file"].Value; string file = originalFile; Logger.Trace($"Try to find sqlite database '{originalFile}'"); if (!FileSystem.FileExists(file)) { file = FileSystem.Combine(outputPath, originalFile); Logger.Trace($"Try to find sqlite database '{file}'"); } if (!FileSystem.FileExists(file)) { string fileName = FileSystem.GetFileName(file); Logger.Trace($"Start wildcard search for {fileName}"); string[] files = FileSystem.GetFiles(outputPath, fileName, SearchOption.AllDirectories); if (files.Length > 0) { file = files.First(); Logger.Trace($"Found in {file}"); } } if (!FileSystem.FileExists(file)) { throw new FileNotFoundException("File not found. File has to be in source or output directory", originalFile); } string connectionString = parameters.ConnectionString.Replace(originalFile, file); using SqliteConnection connection = new(connectionString); connection.Open(); List <string> tableNames = parameters.ReadAll ? this.ReadTables(connection).ToList() : parameters.Tables; List <SqliteCreateTable> statements = tableNames.SelectMany(tableName => { string sql = this.ReadTableSql(connection, tableName); return(SqliteParser.Parse(sql).OfType <SqliteCreateTable>()); }).ToList(); foreach (SqliteCreateTable statement in statements) { ModelTransferObject model = new() { Name = statement.TableName, Language = SqliteLanguage.Instance }; foreach (SqliteCreateTableColumn column in statement.Columns) { model.Fields.Add(new FieldTransferObject { Name = column.Name, Type = new () { Name = column.Type, IsNullable = column.Nullable } }); } transferObjects.Add(model); }