Esempio n. 1
0
        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)));
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
            }