Пример #1
0
        private void CreateColumn(AdHocSqlRunner sqlRunner)
        {
            var fullTableName = SqlTableJournal.CreateTableName(Schema, SqlTableJournal.Table);

            log().WriteInformation($"Adding Version column to the {fullTableName} table");

            sqlRunner.ExecuteNonQuery($@"alter table {fullTableName} add [Version] varchar(100) null");

            log().WriteInformation($"The Version columns was added to the {fullTableName} table");
        }
Пример #2
0
        /// <summary>
        /// Verifies the existence of targeted schema. If schema is not verified, will check for the existence of the dbo schema.
        /// </summary>
        public void VerifySchema()
        {
            if (string.IsNullOrEmpty(Schema))
            {
                return;
            }

            var sqlRunner = new AdHocSqlRunner(connectionFactory, Schema, () => true);

            sqlRunner.ExecuteNonQuery(string.Format(
                                          @"IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'{0}') Exec('CREATE SCHEMA {0}')", Schema));
        }
Пример #3
0
        /// <summary>
        /// Verifies the existence of targeted schema. If schema is not verified, will check for the existence of the dbo schema.
        /// </summary>
        public void VerifySchema()
        {
            if (string.IsNullOrEmpty(Schema)) return;

            connectionManagerFactory().ExecuteCommandsWithManagedConnection(dbCommandFactory =>
            {
                var sqlRunner = new AdHocSqlRunner(dbCommandFactory, Schema, () => true);

                sqlRunner.ExecuteNonQuery(string.Format(
                    @"IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'{0}') Exec('CREATE SCHEMA [{0}]')", Schema));
            });
        }
Пример #4
0
        /// <summary>
        /// Verifies the existence of targeted schema. If schema is not verified, will check for the existence of the dbo schema.
        /// </summary>
        public void VerifySchema()
        {
            if (string.IsNullOrEmpty(Schema))
            {
                return;
            }

            connectionManagerFactory().ExecuteCommandsWithManagedConnection(dbCommandFactory =>
            {
                var sqlRunner = new AdHocSqlRunner(dbCommandFactory, sqlObjectParser, Schema, () => true);
                var sql       = GetVerifySchemaSql(Schema);
                sqlRunner.ExecuteNonQuery(sql);
            });
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="TemporarySQLiteDatabase"/> class.
        /// </summary>
        /// <param name="name">The name.</param>
        public TemporarySQLiteDatabase(string name)
        {
            dataSourcePath = Path.Combine(Directory.GetCurrentDirectory(), name);

            var connectionStringBuilder = new SqliteConnectionStringBuilder
            {
                DataSource = name
            };

            sqLiteConnection = new SqliteConnection(connectionStringBuilder.ConnectionString);
            sqLiteConnection.Open();
            SharedConnection = new SharedConnection(sqLiteConnection);
            SqlRunner        = new AdHocSqlRunner(() => sqLiteConnection.CreateCommand(), new SQLiteObjectParser(), null, () => true);
        }
Пример #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="InMemorySQLiteDatabase"/> class.
        /// </summary>
        public InMemorySQLiteDatabase()
        {
            var connectionStringBuilder = new SqliteConnectionStringBuilder
            {
                DataSource = ":memory:"
            };

            ConnectionString = connectionStringBuilder.ToString();

            connectionManager = new SQLiteConnectionManager(connectionStringBuilder.ConnectionString);
            sharedConnection  = new SqliteConnection(connectionStringBuilder.ConnectionString);
            sharedConnection.Open();
            SqlRunner = new AdHocSqlRunner(() => sharedConnection.CreateCommand(), new SQLiteObjectParser(), null, () => true);
        }
Пример #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="InMemorySQLiteDatabase"/> class.
        /// </summary>
        public InMemorySQLiteDatabase()
        {
            var connectionStringBuilder = new SQLiteConnectionStringBuilder
            {
                DataSource       = ":memory:",
                Version          = 3,
                DefaultTimeout   = 5,
                JournalMode      = SQLiteJournalModeEnum.Memory,
                UseUTF16Encoding = true
            };

            sharedConnection = new SQLiteConnection(connectionStringBuilder.ConnectionString);
            sharedConnection.OpenAndReturn();
            sqlRunner = new AdHocSqlRunner(() => sharedConnection.CreateCommand(), null, () => true);
        }
Пример #8
0
        private void CreateTable(AdHocSqlRunner sqlRunner)
        {
            var fullTableName            = SqlTableJournal.CreateTableName(Schema, SqlTableJournal.Table);
            var primaryKeyConstraintName = CreatePrimaryKeyName(SqlTableJournal.Table);

            log().WriteInformation($"Creating the {fullTableName} table");

            sqlRunner.ExecuteNonQuery($@"create table {fullTableName} (
	[Id] int identity(1,1) not null constraint {primaryKeyConstraintName} primary key,
	[ScriptName] nvarchar(255) not null,
	[Applied] datetime not null,
    [Version] varchar(100) not null
)");

            log().WriteInformation($"The {fullTableName} table has been created");
        }
Пример #9
0
        /// <summary>
        /// Creates a new <see cref="TemporarySqlDatabase"/> using the specified <see cref="SqlConnectionStringBuilder"/>.
        /// </summary>
        /// <param name="connectionStringBuilder"><see cref="SqlConnectionStringBuilder"/> specifying which database to create.</param>
        public TemporarySqlDatabase(SqlConnectionStringBuilder connectionStringBuilder)
        {
            var builder = new SqlConnectionStringBuilder(connectionStringBuilder.ToString()); //so we don't mangle the connectionStringBuilder coming in

            builder.Pooling = false;                                                          // make sure connection pooling is disabled so the connection is actually closed as expected

            // set the temporary database information
            databaseName     = builder.InitialCatalog;
            connectionString = builder.ConnectionString;
            sqlConnection    = new SqlConnection(connectionString);
            database         = new AdHocSqlRunner(sqlConnection.CreateCommand, new SqlServer.SqlServerObjectParser(), "dbo", () => true);

            // set the master database information
            builder.InitialCatalog = "master";
            masterSqlConnection    = new SqlConnection(builder.ToString());
            master = new AdHocSqlRunner(() => masterSqlConnection.CreateCommand(), new SqlServerObjectParser(), "dbo", () => true);
        }
Пример #10
0
        public SqlCeTemporaryDatabase()
        {
            databaseProviderName = "sqlce";
            databaseProvider     = new SqlCeDatabaseProvider();
            databaseFile         = Path.Combine(Path.GetTempPath(), "FunnelWeb.sdf");
            connectionString     = string.Format("Data Source={0}; Persist Security Info=False", databaseFile);

            database = new AdHocSqlRunner(() => new SqlCeConnection(connectionString), null);

            var containerBuilder = new ContainerBuilder();

            containerBuilder.RegisterInstance(this).As <IConnectionStringSettings>();
            containerBuilder.RegisterModule(new InternalProviderRegistrationModule());
            containerBuilder.RegisterModule(new RepositoriesModule());
            containerBuilder.RegisterModule(new DatabaseModule());
            container = containerBuilder.Build();
        }
Пример #11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TemporarySQLiteDatabase"/> class.
        /// </summary>
        /// <param name="name">The name.</param>
        public TemporarySQLiteDatabase(string name)
        {
            dataSourcePath = Path.Combine(Environment.CurrentDirectory, name);

            var connectionStringBuilder = new SQLiteConnectionStringBuilder
            {
                DataSource       = name,
                Version          = 3,
                DefaultTimeout   = 5,
                JournalMode      = SQLiteJournalModeEnum.Memory,
                UseUTF16Encoding = true
            };

            sqLiteConnection = new SQLiteConnection(connectionStringBuilder.ConnectionString);
            sharedConnection = new SharedConnection(sqLiteConnection.OpenAndReturn());
            sqlRunner        = new AdHocSqlRunner(() => sqLiteConnection.CreateCommand(), null, () => true);
        }
Пример #12
0
        public void VerifyDatabaseRequirements()
        {
            var sqlRunner  = new AdHocSqlRunner(connectionManager, Schema, () => true);
            var parameters = new Dictionary <string, object> {
                { "@schema", Schema }, { "@table", SqlTableJournal.Table }
            };

            if (!SchemaExists(sqlRunner, parameters))
            {
                throw new Exception($"'{Schema}' does not exist. Contact DBA for help, build process deploy users will not have permissions to create schemas.");
            }
            if (!TableExists(sqlRunner, parameters))
            {
                CreateTable(sqlRunner);
            }
            if (!ColumnExists(sqlRunner, parameters))
            {
                CreateColumn(sqlRunner);
            }
        }
Пример #13
0
        /// <summary>
        /// Initializes a new instance of the <see cref="InMemorySQLiteDatabase"/> class.
        /// </summary>
        public InMemorySQLiteDatabase()
        {
            var connectionStringBuilder = new SQLiteConnectionStringBuilder
            {
                DataSource     = ":memory:",
                Version        = 3,
                DefaultTimeout = 5,
#if MONO
                JournalMode = SQLiteJournalModeEnum.Off,
#else
                JournalMode = SQLiteJournalModeEnum.Memory,
#endif
                UseUTF16Encoding = true
            };

            ConnectionString = connectionStringBuilder.ToString();

            connectionManager = new SQLiteConnectionManager(connectionStringBuilder.ConnectionString);
            sharedConnection  = new SQLiteConnection(connectionStringBuilder.ConnectionString);
            sharedConnection.Open();
            sqlRunner = new AdHocSqlRunner(() => sharedConnection.CreateCommand(), null, () => true);
        }
Пример #14
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TemporarySQLiteDatabase"/> class.
        /// </summary>
        /// <param name="name">The name.</param>
        public TemporarySQLiteDatabase(string name)
        {
            dataSourcePath = Path.Combine(Directory.GetCurrentDirectory(), name);

            var connectionStringBuilder = new SQLiteConnectionStringBuilder
            {
                DataSource = name,
#if !NETCORE
                Version        = 3,
                DefaultTimeout = 5,
#if MONO
                JournalMode = SQLiteJournalModeEnum.Off,
#else
                JournalMode = SQLiteJournalModeEnum.Memory,
#endif
                UseUTF16Encoding = true
#endif
            };

            sqLiteConnection = new SQLiteConnection(connectionStringBuilder.ConnectionString);
            sqLiteConnection.Open();
            sharedConnection = new SharedConnection(sqLiteConnection);
            sqlRunner        = new AdHocSqlRunner(() => sqLiteConnection.CreateCommand(), new SQLiteObjectParser(), null, () => true);
        }
Пример #15
0
        private bool TableExists(AdHocSqlRunner sqlRunner, Dictionary <string, object> parameters)
        {
            var result = sqlRunner.ExecuteScalar($"select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME = @table and TABLE_SCHEMA = @schema", parameters) as int?;

            return(result == 1);
        }
Пример #16
0
        /// <summary>
        /// Verifies the existence of targeted schema. If schema is not verified, will check for the existence of the dbo schema.
        /// </summary>
        private bool SchemaExists(AdHocSqlRunner sqlRunner, Dictionary <string, object> parameters)
        {
            var result = sqlRunner.ExecuteScalar($@"SELECT 1 FROM sys.schemas WHERE name = @schema", parameters) as int?;

            return(result == 1);
        }