public void BackupDatabase_overwrite_existing()
        {
            using (var ds = new SQLiteDatastore())
            {
                var dbbuilder = new TestDBBuilder();
                ds.CreateDatastore(dbbuilder);

                var orgTableInfo = ds.QueryGeneric("SELECT * FROM Sqlite_Master;").ToArray();
                orgTableInfo.Should().NotBeEmpty();

                var backupTarget = base.GetTempFilePath(".db");
                RegesterFileForCleanUp(backupTarget);

                // create a file to overwrite
                // this doesn't need to be an actual db file
                File.WriteAllText(backupTarget, "something");
                File.Exists(backupTarget).Should().BeTrue();

                // backup the database to the location of the file we just created

                ds.BackupDatabase(backupTarget);
                File.Exists(backupTarget).Should().BeTrue();

                // and conferm that it did overwrite the old file
                using (var newds = new SQLiteDatastore(backupTarget))
                {
                    var newTableInfo = ds.QueryGeneric("SELECT * FROM Sqlite_Master;");

                    newTableInfo.Should().BeEquivalentTo(orgTableInfo);
                }
            }
        }
        public void BackupDatabase_inmemory()
        {
            using (var ds = new SQLiteDatastore())
            {
                var dbbuilder = new TestDBBuilder();
                ds.CreateDatastore(dbbuilder);

                var orgTableInfo = ds.QueryGeneric("SELECT * FROM Sqlite_Master;").ToArray();
                orgTableInfo.Should().NotBeEmpty();

                var backupTarget = base.GetTempFilePath(".db");
                RegesterFileForCleanUp(backupTarget);

                File.Exists(backupTarget).Should().BeFalse();

                ds.BackupDatabase(backupTarget);

                File.Exists(backupTarget).Should().BeTrue();

                using (var newds = new SQLiteDatastore(backupTarget))
                {
                    var newTableInfo = ds.QueryGeneric("SELECT * FROM Sqlite_Master;");

                    newTableInfo.Should().BeEquivalentTo(orgTableInfo);
                }
            }
        }
        public void BackupDatabase_into_existing()
        {
            using (var ds = new SQLiteDatastore())
            {
                var dbbuilder = new TestDBBuilder();
                ds.CreateDatastore(dbbuilder);

                var orgTableInfo = ds.QueryGeneric("SELECT * FROM Sqlite_Master;").ToArray();
                orgTableInfo.Should().NotBeEmpty();

                var backupTarget = base.GetTempFilePath(".db");
                RegesterFileForCleanUp(backupTarget);

                // create database file
                using (var targetds = new SQLiteDatastore(backupTarget))
                {
                    targetds.CreateDatastore(dbbuilder);
                    targetds.Execute("CREATE TABLE Something (" +
                                     "col1 text" +
                                     ");");

                    targetds.CheckTableExists("Something").Should().BeTrue();

                    targetds.Execute("ALTER Table MultiPropTable ADD COLUMN justanothercolumn text;");
                    targetds.CheckFieldExists("MultiPropTable", "justanothercolumn").Should().BeTrue();

                    ds.BackupDatabase(targetds);

                    targetds.CheckTableExists("something").Should().BeFalse();
                    targetds.CheckFieldExists("MultiPropTable", "justanothercolumn").Should().BeFalse();
                }
            }
        }
        public void BackupDatabase_overwrite_openfile_with_inmemory()
        {
            var tempPath = GetTempFilePath(".crz3");

            RegesterFileForCleanUp(tempPath);

            using (var ds = new SQLiteDatastore(tempPath))
            {
                var dbbuilder = new TestDBBuilder();
                ds.CreateDatastore(dbbuilder);

                var orgTableInfo = ds.QueryGeneric("SELECT * FROM Sqlite_Master;").ToArray();
                orgTableInfo.Should().NotBeEmpty();

                ds.From <POCOMultiTypeObject>().Query().Should().BeEmpty();

                using (var newds = new SQLiteDatastore())
                {
                    newds.CreateDatastore(dbbuilder);

                    newds.Insert(new POCOMultiTypeObject()
                    {
                        ID = 1,
                    });

                    newds.From <POCOMultiTypeObject>().Query().Should().NotBeEmpty();

                    newds.BackupDatabase(tempPath);
                }

                ds.From <POCOMultiTypeObject>().Query().Should().NotBeEmpty();
            }
        }
        public void QueryGeneric_Test(bool nulls)
        {
            using (var ds = new SQLiteDatastore())
            {
                ds.Execute(TestDBBuilder.CREATE_MULTIPROPTABLE);

                var poco = CreateRandomPoco(nulls);
                ds.Insert(poco);

                var stuff = ds.QueryGeneric("SELECT * FROM MultiPropTable;").ToArray();
            }
        }