Example #1
0
 private static void InstallLinger(DatabaseDialect dialect)
 {
     var repository = new DatabaseJobRepository(dialect, () => UnitOfWork.Current);
     repository.InstallSchema();
     Linger.Backend = repository;
     Linger.StartWorker();
 }
Example #2
0
        private static void InstallLinger(DatabaseDialect dialect)
        {
            var repository = new DatabaseJobRepository(dialect, () => UnitOfWork.Current);

            repository.InstallSchema();
            Linger.Backend = repository;
            Linger.StartWorker();
        }
Example #3
0
        public static void InsertBatch(IDbConnection db, DatabaseDialect dialect, Batch batch)
        {
            var sql = "INSERT INTO Batch (Name) VALUES (@Name);";

            sql             = AddInsertIdentity(dialect, sql);
            batch.Id        = db.Execute(sql, batch);
            batch.CreatedAt = db.Query <DateTime>("SELECT CreatedAt FROM Batch WHERE Id = @Id", new { batch.Id }).Single();
        }
Example #4
0
        public DBBootstrap(IDbConnection connection, DatabaseDialect dialect) : base(connection, dialect)
        {
            string fullSql = File.ReadAllText("DbScript.sql").Replace("@DBNAME", this.dbName);

            foreach (string sql in fullSql.Split(";"))
            {
                base.ExecuteNonQuery(sql);
            }
        }
Example #5
0
        public static void InsertJob(IDbConnection db, DatabaseDialect dialect, ScheduledJob job)
        {
            var sql = "INSERT INTO ScheduledJob " +
                      "(Priority, Attempts, Handler, RunAt) " +
                      "VALUES (@Priority, @Attempts, @Handler, @RunAt); ";

            sql           = AddInsertIdentity(dialect, sql);
            job.Id        = db.Execute(sql, job);
            job.CreatedAt = db.Query <DateTime>("SELECT CreatedAt FROM ScheduledJob WHERE Id = @Id", new { job.Id }).Single();
        }
Example #6
0
        public static void InsertJob(IDbConnection db, DatabaseDialect dialect, ScheduledJob job)
        {
            var sql = "INSERT INTO ScheduledJob " +
                      "(Priority, Attempts, Handler, RunAt) " +
                      "VALUES (@Priority, @Attempts, @Handler, @RunAt); ";

            sql = AddInsertIdentity(dialect, sql);
            job.Id = db.Execute(sql, job);
            job.CreatedAt = db.Query<DateTime>("SELECT CreatedAt FROM ScheduledJob WHERE Id = @Id", new {job.Id}).Single();
        }
 private IDbQueryBase BuildDbQueryBase(DatabaseDialect databaseDialect)
 {
     return(new DbQueryBase(this.dbConnection, new AbstractionOptions
     {
         AutoCloseConnection = false,
         Dialect = databaseDialect,
         DialectParameterIdentifier = '@',
         QueryParameterIdentifier = '@',
         SortQueryParameters = false,
     }));;
 }
        public static void SetConnection(DatabaseDialect ddNew, string sNewDatabaseName, string sConnectionString)
        {
            ConnectionManager.CloseAll();

            m_dd = ddNew;

            string sOldDatabaseName = GetDatabaseName(sConnectionString);

            m_sDatabaseName     = sNewDatabaseName;
            m_sConnectionString = sConnectionString.Replace(sOldDatabaseName, sNewDatabaseName);
        }
Example #9
0
 public static AbstractionOptions GetDefaultOptions(DatabaseDialect dialect, bool usingConnectionBuilder)
 {
     return(new AbstractionOptions
     {
         Dialect = dialect,
         UseLockedCommands = (usingConnectionBuilder == false && (dialect == DatabaseDialect.SqlServer || dialect == DatabaseDialect.MySql)),
         AutoCloseConnection = (dialect == DatabaseDialect.SqlServer || dialect == DatabaseDialect.Oracle),
         SortQueryParameters = (dialect == DatabaseDialect.Oracle),
         QueryParameterIdentifier = '@',
         DialectParameterIdentifier = (dialect == DatabaseDialect.Oracle) ? ':' : '@',
     });
 }
        internal static IPaginationFactory GetObject(DatabaseDialect dialect)
        {
            switch (dialect)
            {
            case DatabaseDialect.SqlServer: return(new SqlServerPaginationFactory());

            case DatabaseDialect.MySql: return(new MySqlPaginationFactory());

            case DatabaseDialect.SQLite: return(new SQLitePaginationFactory());

            case DatabaseDialect.NotSet: return(new NoPaginationFactory());
            }
            throw new ArgumentException("Invalid Database Dialect");
        }
        internal static IPaginationFactory GetObject(DatabaseDialect dialect)
        {
            switch (dialect)
            {
            case DatabaseDialect.SqlServer: return(new SqlServerPaginationFactory());

            case DatabaseDialect.MySql: return(new MySqlPaginationFactory());

            case DatabaseDialect.SQLite: return(new SQLitePaginationFactory());

            default:
                return(new NoPaginationFactory());
            }
        }
Example #12
0
        public static void InsertRepeatInfo(IDbConnection db, DatabaseDialect dialect, ScheduledJob job, RepeatInfo info)
        {
            const string sql = "INSERT INTO RepeatInfo " +
                               "(ScheduledJobId, PeriodFrequency, PeriodQuantifier, Start, IncludeWeekends) " +
                               "VALUES (@ScheduledJobId, @PeriodFrequency, @PeriodQuantifier, @Start, @IncludeWeekends);";

            db.Execute(sql, new
            {
                ScheduledJobId = job.Id,
                info.PeriodFrequency,
                info.PeriodQuantifier,
                info.Start,
                info.IncludeWeekends
            });
        }
Example #13
0
        public static void UpdateRepeatInfo(IDbConnection db, DatabaseDialect dialect, ScheduledJob job, RepeatInfo info)
        {
            const string sql = "UPDATE RepeatInfo SET " +
                               "PeriodFrequency = @PeriodFrequency, " +
                               "PeriodQuantifier = @PeriodQuantifier, " +
                               "Start = @Start, " +
                               "IncludeWeekends = @IncludeWeekends " +
                               "WHERE ScheduledJobId = @ScheduledJobId;";

            db.Execute(sql, new
            {
                ScheduledJobId = job.Id,
                info.PeriodFrequency,
                info.PeriodQuantifier,
                info.Start,
                info.IncludeWeekends
            });
        }
Example #14
0
 private static string AddInsertIdentity(DatabaseDialect dialect, string sql)
 {
     switch (dialect)
     {
         case DatabaseDialect.SqlServer:
             sql += "SELECT SCOPE_IDENTITY() AS [Id]";
             break;
         case DatabaseDialect.MySql:
             sql += "SELECT LAST_INSERT_ID() AS `Id`";
             break;
         case DatabaseDialect.Sqlite:
             sql += "SELECT LAST_INSERT_ROWID() AS \"Id\"";
             break;
         default:
             throw new NotSupportedException();
     }
     return sql;
 }
Example #15
0
        private static string AddInsertIdentity(DatabaseDialect dialect, string sql)
        {
            switch (dialect)
            {
            case DatabaseDialect.SqlServer:
                sql += "SELECT SCOPE_IDENTITY() AS [Id]";
                break;

            case DatabaseDialect.MySql:
                sql += "SELECT LAST_INSERT_ID() AS `Id`";
                break;

            case DatabaseDialect.Sqlite:
                sql += "SELECT LAST_INSERT_ROWID() AS \"Id\"";
                break;

            default:
                throw new NotSupportedException();
            }
            return(sql);
        }
Example #16
0
        public static IEnumerable <ScheduledJob> GetNextAvailable(IDbConnection db, DatabaseDialect dialect, int count)
        {
            // - None failed or succeeded, none locked, none in batches, RunAt sorted, Priority sorted
            string sql;

            switch (dialect)
            {
            case DatabaseDialect.SqlServer:
                sql =
                    "SELECT TOP " + count + " * FROM [ScheduledJob] j " +
                    "WHERE NOT EXISTS (SELECT 1 FROM BatchJob WHERE ScheduledJobId = j.Id)" +
                    "AND [LockedAt] IS NULL AND [FailedAt] IS NULL AND [SucceededAt] IS NULL " +
                    "AND [RunAt] IS NULL OR GETDATE() >= [RunAt] " +
                    "ORDER BY [Priority], [RunAt] ASC";
                return(db.Query <ScheduledJob>(sql).ToList());

            case DatabaseDialect.MySql:
                sql =
                    "SELECT * FROM ScheduledJob j " +
                    "WHERE NOT EXISTS (SELECT 1 FROM BatchJob WHERE ScheduledJobId = j.Id)" +
                    "AND LockedAt IS NULL AND FailedAt IS NULL AND SucceededAt IS NULL " +
                    "AND RunAt IS NULL OR NOW() >= RunAt" +
                    "ORDER BY Priority, RunAt ASC " +
                    "LIMIT @Count";
                return(db.Query <ScheduledJob>(sql, new { Count = count }).ToList());

            case DatabaseDialect.Sqlite:
                sql =
                    "SELECT * FROM ScheduledJob j " +
                    "WHERE NOT EXISTS (SELECT 1 FROM BatchJob WHERE ScheduledJobId = j.Id) " +
                    "AND LockedAt IS NULL AND FailedAt IS NULL AND SucceededAt IS NULL " +
                    "AND RunAt IS NULL OR CURRENT_TIMESTAMP >= RunAt " +
                    "ORDER BY Priority, RunAt ASC " +
                    "LIMIT @Count";
                return(db.Query <ScheduledJob>(sql, new { Count = count }).ToList());

            default:
                throw new ArgumentOutOfRangeException("dialect");
            }
        }
Example #17
0
 public static IEnumerable<ScheduledJob> GetNextAvailable(IDbConnection db, DatabaseDialect dialect, int count)
 {
     // - None failed or succeeded, none locked, none in batches, RunAt sorted, Priority sorted
     string sql;
     switch(dialect)
     {
         case DatabaseDialect.SqlServer:
             sql =
                 "SELECT TOP " + count + " * FROM [ScheduledJob] j " +
                 "WHERE NOT EXISTS (SELECT 1 FROM BatchJob WHERE ScheduledJobId = j.Id)" +
                 "AND [LockedAt] IS NULL AND [FailedAt] IS NULL AND [SucceededAt] IS NULL " +
                 "AND [RunAt] IS NULL OR GETDATE() >= [RunAt] " +
                 "ORDER BY [Priority], [RunAt] ASC";
             return db.Query<ScheduledJob>(sql).ToList();
         case DatabaseDialect.MySql:
             sql =
                 "SELECT * FROM ScheduledJob j " +
                 "WHERE NOT EXISTS (SELECT 1 FROM BatchJob WHERE ScheduledJobId = j.Id)" +
                 "AND LockedAt IS NULL AND FailedAt IS NULL AND SucceededAt IS NULL " +
                 "AND RunAt IS NULL OR NOW() >= RunAt" +
                 "ORDER BY Priority, RunAt ASC " +
                 "LIMIT @Count";
             return db.Query<ScheduledJob>(sql, new { Count = count }).ToList();
         case DatabaseDialect.Sqlite:
             sql = 
                 "SELECT * FROM ScheduledJob j " +
                 "WHERE NOT EXISTS (SELECT 1 FROM BatchJob WHERE ScheduledJobId = j.Id) " +
                 "AND LockedAt IS NULL AND FailedAt IS NULL AND SucceededAt IS NULL " +
                 "AND RunAt IS NULL OR CURRENT_TIMESTAMP >= RunAt " +
                 "ORDER BY Priority, RunAt ASC " +
                 "LIMIT @Count";
             return db.Query<ScheduledJob>(sql, new { Count = count }).ToList();
         default:
             throw new ArgumentOutOfRangeException("dialect");
     }
 }
Example #18
0
 public Database(DatabaseDialect dialect, string connectionString)
 {
     this._dialect          = dialect;
     this._ConnectionString = connectionString;
 }
Example #19
0
 public DbQueryBase(ConnectionBuilder connectionBuilder, DatabaseDialect dialect)
     : this(connectionBuilder, DefaultDialectOptions.GetDefaultOptions(dialect, true))
 {
 }
Example #20
0
        public static void Install(DatabaseDialect dialect, IDbConnection db)
        {
            string sql;

            switch (dialect)
            {
            case DatabaseDialect.SqlServer:
                sql = "IF NOT EXISTS (SELECT [name] FROM sys.tables WHERE [name] = 'ScheduledJob')\n" +
                      "CREATE TABLE [dbo].[ScheduledJob]\n" +
                      "(\n" +
                      "    [Id] INT NOT NULL IDENTITY(1,1), \n" +
                      "    [Name] NVARCHAR(255), \n" +
                      "    [Priority] INT NOT NULL CONSTRAINT [DF_ScheduledJob_Priority] DEFAULT 0, \n" +
                      "    [Attempts] INT NOT NULL CONSTRAINT [DF_ScheduledJob_Attempts] DEFAULT 0, \n" +
                      "    [Handler] VARBINARY(8000) NOT NULL, \n" +
                      "    [LastError] NVARCHAR(255), \n" +
                      "    [RunAt] DATETIME, \n" +
                      "    [FailedAt] DATETIME, \n" +
                      "    [SucceededAt] DATETIME, \n" +
                      "    [LockedAt] DATETIME, \n" +
                      "    [LockedBy] NVARCHAR(255), \n" +
                      "    [CreatedAt] DATETIME NOT NULL CONSTRAINT [DF_ScheduledJob_CreatedAt] DEFAULT GETDATE(), \n" +
                      "    [UpdatedAt] DATETIME, \n" +
                      "    CONSTRAINT [PK_ScheduledJob] PRIMARY KEY ([Id])\n" +
                      ");\n";

                sql += "IF NOT EXISTS (SELECT [name] FROM sys.tables WHERE [name] = 'Batch' )\n" +
                       "CREATE TABLE [dbo].[Batch]\n" +
                       "(\n" +
                       "    [Id] INT NOT NULL IDENTITY(1,1), \n" +
                       "    [Name] NVARCHAR(255) NOT NULL, \n" +
                       "    [StartedAt] DATETIME, \n" +
                       "    [CreatedAt] DATETIME NOT NULL CONSTRAINT [DF_Batch_CreatedAt] DEFAULT GETDATE(), \n" +
                       "    CONSTRAINT [PK_Batch] PRIMARY KEY ([Id])\n" +
                       ");\n";

                sql += "IF NOT EXISTS (SELECT [name] FROM sys.tables WHERE [name] = 'BatchJob')\n" +
                       "CREATE TABLE [dbo].[BatchJob]\n" +
                       "(\n" +
                       "    [Id] INT NOT NULL IDENTITY(1,1), \n" +
                       "    [BatchId] INT NOT NULL, \n" +
                       "    [ScheduledJobId] INT NOT NULL, \n" +
                       "    CONSTRAINT [PK_BatchJob] PRIMARY KEY ([Id])\n" +
                       ");\n";

                sql += "IF NOT EXISTS (SELECT [name] FROM sys.objects WHERE [name] = 'FK_BatchJob_BatchId_Batch_Id')\n" +
                       "ALTER TABLE [dbo].[BatchJob] ADD CONSTRAINT [FK_BatchJob_BatchId_Batch_Id] FOREIGN KEY ([BatchId]) REFERENCES [dbo].[Batch] ([Id]);\n";

                sql += "IF NOT EXISTS (SELECT [name] FROM sys.objects WHERE [name] = 'FK_BatchJob_ScheduledJobId_ScheduledJob_Id')\n" +
                       "ALTER TABLE [dbo].[BatchJob] ADD CONSTRAINT [FK_BatchJob_ScheduledJobId_ScheduledJob_Id] FOREIGN KEY ([ScheduledJobId]) REFERENCES [dbo].[ScheduledJob] ([Id]);\n";

                sql += "IF NOT EXISTS (SELECT [name] FROM sys.tables WHERE [name] = 'RepeatInfo')\n" +
                       "CREATE TABLE [dbo].[RepeatInfo] \n" +
                       "(\n" +
                       "    [ScheduledJobId] INT NOT NULL IDENTITY(1,1), \n" +
                       "    [PeriodFrequency] INT NOT NULL, \n" +
                       "    [PeriodQuantifier] INT NOT NULL, \n" +
                       "    [Start] DATETIME NOT NULL, \n" +
                       "    [IncludeWeekends] BIT NOT NULL CONSTRAINT [DF_RepeatInfo_IncludeWeekends] DEFAULT 0\n" +
                       ");\n";

                sql += "IF NOT EXISTS ( SELECT [name] FROM sys.objects WHERE [name] = 'FK_RepeatInfo_ScheduledJobId_ScheduledJob_Id')\n" +
                       "ALTER TABLE [dbo].[RepeatInfo] ADD CONSTRAINT [FK_RepeatInfo_ScheduledJobId_ScheduledJob_Id] FOREIGN KEY ([ScheduledJobId]) REFERENCES [dbo].[ScheduledJob] ([Id]);\n";
                break;

            case DatabaseDialect.MySql:
                throw new NotImplementedException();

            case DatabaseDialect.Sqlite:
                sql = "CREATE TABLE IF NOT EXISTS 'ScheduledJob' " +
                      "(" +
                      "    'Id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
                      "    'Name' TEXT, " +
                      "    'Priority' INTEGER NOT NULL DEFAULT 0, " +
                      "    'Attempts' INTEGER NOT NULL DEFAULT 0, " +
                      "    'Handler' BLOB NOT NULL, " +
                      "    'LastError' TEXT, " +
                      "    'RunAt' DATETIME, " +
                      "    'FailedAt' DATETIME, " +
                      "    'SucceededAt' DATETIME, " +
                      "    'LockedAt' DATETIME, " +
                      "    'LockedBy' TEXT, " +
                      "    'CreatedAt' DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
                      "    'UpdatedAt' DATETIME " +
                      ");";

                sql += "CREATE TABLE IF NOT EXISTS 'Batch' (" +
                       "    'Id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
                       "    'Name' TEXT NOT NULL, " +
                       "    'StartedAt' DATETIME," +
                       "    'CreatedAt' DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP " +
                       ");";

                sql += "CREATE TABLE IF NOT EXISTS 'BatchJob' " +
                       "(" +
                       "    'Id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
                       "    'BatchId' INTEGER NOT NULL, " +
                       "    'ScheduledJobId' INTEGER NOT NULL" +
                       ");";

                sql += "CREATE TABLE IF NOT EXISTS 'RepeatInfo' " +
                       "(" +
                       "    'ScheduledJobId' INTEGER NOT NULL, " +
                       "    'PeriodFrequency' INTEGER NOT NULL, " +
                       "    'PeriodQuantifier' INTEGER NOT NULL, " +
                       "    'Start' DATETIME NOT NULL, " +
                       "    'IncludeWeekends' INTEGER NOT NULL DEFAULT 0" +
                       ")";
                break;

            default:
                throw new NotSupportedException();
            }

            db.Execute(sql);
        }
Example #21
0
        public static void InsertRepeatInfo(IDbConnection db, DatabaseDialect dialect, ScheduledJob job, RepeatInfo info)
        {
            const string sql = "INSERT INTO RepeatInfo " +
                               "(ScheduledJobId, PeriodFrequency, PeriodQuantifier, Start, IncludeWeekends) " +
                               "VALUES (@ScheduledJobId, @PeriodFrequency, @PeriodQuantifier, @Start, @IncludeWeekends);";

            db.Execute(sql, new
            {
                ScheduledJobId = job.Id,
                info.PeriodFrequency,
                info.PeriodQuantifier,
                info.Start,
                info.IncludeWeekends
            });
        }
Example #22
0
        public static void UpdateRepeatInfo(IDbConnection db, DatabaseDialect dialect, ScheduledJob job, RepeatInfo info)
        {
            const string sql = "UPDATE RepeatInfo SET " +
                               "PeriodFrequency = @PeriodFrequency, " +
                               "PeriodQuantifier = @PeriodQuantifier, " +
                               "Start = @Start, " +
                               "IncludeWeekends = @IncludeWeekends " +
                               "WHERE ScheduledJobId = @ScheduledJobId;";

            db.Execute(sql, new
            {
                ScheduledJobId = job.Id,
                info.PeriodFrequency,
                info.PeriodQuantifier,
                info.Start,
                info.IncludeWeekends
            });
        }
Example #23
0
 public static void InsertBatch(IDbConnection db, DatabaseDialect dialect, Batch batch)
 {
     var sql = "INSERT INTO Batch (Name) VALUES (@Name);";
     sql = AddInsertIdentity(dialect, sql);
     batch.Id = db.Execute(sql, batch);
     batch.CreatedAt = db.Query<DateTime>("SELECT CreatedAt FROM Batch WHERE Id = @Id", new { batch.Id }).Single();
 }
Example #24
0
 public static void AddToBatch(IDbConnection db, DatabaseDialect dialect, Batch batch, ScheduledJob job)
 {
     const string sql = "INSERT INTO BatchJob (BatchId, ScheduledJobId) VALUES (@BatchId, @ScheduledJobId)";
     db.Execute(sql, new { BatchId = batch.Id, ScheduledJobId = job.Id });
 }
Example #25
0
 public DatabaseJobRepository(DatabaseDialect dialect, Func <IDbConnection> connectionBuilder)
 {
     _dialect           = dialect;
     _connectionBuilder = connectionBuilder;
 }
Example #26
0
 public DbQueryBase(IDbConnection connection, DatabaseDialect dialect)
     : this(new ConnectionBuilder(connection), DefaultDialectOptions.GetDefaultOptions(dialect, false))
 {
 }
 public CreateDatabaseForTests(DbProviderFactory dbFactory, string connectionString, DatabaseDialect databaseDialect)
 {
     this.dbConnection = new ConnectionBuilder(dbFactory, connectionString).BuildConnection();
     this.dbQueryBase  = this.BuildDbQueryBase(databaseDialect);
 }
Example #28
0
        public static void AddToBatch(IDbConnection db, DatabaseDialect dialect, Batch batch, ScheduledJob job)
        {
            const string sql = "INSERT INTO BatchJob (BatchId, ScheduledJobId) VALUES (@BatchId, @ScheduledJobId)";

            db.Execute(sql, new { BatchId = batch.Id, ScheduledJobId = job.Id });
        }
Example #29
0
 public DbQueryBase(IDbConnection connection, DatabaseDialect dialect)
 {
     this.dbConnection      = connection;
     this.Dialect           = dialect;
     this.paginationFactory = PaginationAbstractFactory.GetObject(dialect);
 }
Example #30
0
        public static void Install(DatabaseDialect dialect, IDbConnection db)
        {
            string sql;
            switch(dialect)
            {
                case DatabaseDialect.SqlServer:
                    sql = "IF NOT EXISTS (SELECT [name] FROM sys.tables WHERE [name] = 'ScheduledJob')\n" +
                          "CREATE TABLE [dbo].[ScheduledJob]\n" +
                          "(\n" +
                          "    [Id] INT NOT NULL IDENTITY(1,1), \n" +
                          "    [Name] NVARCHAR(255), \n" +
                          "    [Priority] INT NOT NULL CONSTRAINT [DF_ScheduledJob_Priority] DEFAULT 0, \n" +
                          "    [Attempts] INT NOT NULL CONSTRAINT [DF_ScheduledJob_Attempts] DEFAULT 0, \n" +
                          "    [Handler] VARBINARY(8000) NOT NULL, \n" +
                          "    [LastError] NVARCHAR(255), \n" +
                          "    [RunAt] DATETIME, \n" +
                          "    [FailedAt] DATETIME, \n" +
                          "    [SucceededAt] DATETIME, \n" +
                          "    [LockedAt] DATETIME, \n" +
                          "    [LockedBy] NVARCHAR(255), \n" +
                          "    [CreatedAt] DATETIME NOT NULL CONSTRAINT [DF_ScheduledJob_CreatedAt] DEFAULT GETDATE(), \n" +
                          "    [UpdatedAt] DATETIME, \n" +
                          "    CONSTRAINT [PK_ScheduledJob] PRIMARY KEY ([Id])\n" +
                          ");\n";

                    sql += "IF NOT EXISTS (SELECT [name] FROM sys.tables WHERE [name] = 'Batch' )\n" + 
                           "CREATE TABLE [dbo].[Batch]\n" +
                           "(\n" +
                           "    [Id] INT NOT NULL IDENTITY(1,1), \n" +
                           "    [Name] NVARCHAR(255) NOT NULL, \n" +
                           "    [StartedAt] DATETIME, \n" +
                           "    [CreatedAt] DATETIME NOT NULL CONSTRAINT [DF_Batch_CreatedAt] DEFAULT GETDATE(), \n" +
                           "    CONSTRAINT [PK_Batch] PRIMARY KEY ([Id])\n" +
                           ");\n";

                    sql += "IF NOT EXISTS (SELECT [name] FROM sys.tables WHERE [name] = 'BatchJob')\n" + 
                           "CREATE TABLE [dbo].[BatchJob]\n" +
                           "(\n" +
                           "    [Id] INT NOT NULL IDENTITY(1,1), \n" +
                           "    [BatchId] INT NOT NULL, \n" +
                           "    [ScheduledJobId] INT NOT NULL, \n" +
                           "    CONSTRAINT [PK_BatchJob] PRIMARY KEY ([Id])\n" +
                           ");\n";

                    sql += "IF NOT EXISTS (SELECT [name] FROM sys.objects WHERE [name] = 'FK_BatchJob_BatchId_Batch_Id')\n" +
                           "ALTER TABLE [dbo].[BatchJob] ADD CONSTRAINT [FK_BatchJob_BatchId_Batch_Id] FOREIGN KEY ([BatchId]) REFERENCES [dbo].[Batch] ([Id]);\n";
                    
                    sql += "IF NOT EXISTS (SELECT [name] FROM sys.objects WHERE [name] = 'FK_BatchJob_ScheduledJobId_ScheduledJob_Id')\n" + 
                           "ALTER TABLE [dbo].[BatchJob] ADD CONSTRAINT [FK_BatchJob_ScheduledJobId_ScheduledJob_Id] FOREIGN KEY ([ScheduledJobId]) REFERENCES [dbo].[ScheduledJob] ([Id]);\n";

                    sql += "IF NOT EXISTS (SELECT [name] FROM sys.tables WHERE [name] = 'RepeatInfo')\n" + 
                           "CREATE TABLE [dbo].[RepeatInfo] \n" +
                           "(\n" +
                           "    [ScheduledJobId] INT NOT NULL IDENTITY(1,1), \n" +
                           "    [PeriodFrequency] INT NOT NULL, \n" +
                           "    [PeriodQuantifier] INT NOT NULL, \n" +
                           "    [Start] DATETIME NOT NULL, \n" +
                           "    [IncludeWeekends] BIT NOT NULL CONSTRAINT [DF_RepeatInfo_IncludeWeekends] DEFAULT 0\n" +
                           ");\n";

                    sql += "IF NOT EXISTS ( SELECT [name] FROM sys.objects WHERE [name] = 'FK_RepeatInfo_ScheduledJobId_ScheduledJob_Id')\n" +
                           "ALTER TABLE [dbo].[RepeatInfo] ADD CONSTRAINT [FK_RepeatInfo_ScheduledJobId_ScheduledJob_Id] FOREIGN KEY ([ScheduledJobId]) REFERENCES [dbo].[ScheduledJob] ([Id]);\n";
                    break;

                case DatabaseDialect.MySql:
                    throw new NotImplementedException();
                case DatabaseDialect.Sqlite:
                    sql = "CREATE TABLE IF NOT EXISTS 'ScheduledJob' " +
                          "(" +
                          "    'Id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
                          "    'Name' TEXT, " +
                          "    'Priority' INTEGER NOT NULL DEFAULT 0, " +
                          "    'Attempts' INTEGER NOT NULL DEFAULT 0, " +
                          "    'Handler' BLOB NOT NULL, " +
                          "    'LastError' TEXT, " +
                          "    'RunAt' DATETIME, " +
                          "    'FailedAt' DATETIME, " +
                          "    'SucceededAt' DATETIME, " +
                          "    'LockedAt' DATETIME, " +
                          "    'LockedBy' TEXT, " +
                          "    'CreatedAt' DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
                          "    'UpdatedAt' DATETIME " +
                          ");";

                    sql += "CREATE TABLE IF NOT EXISTS 'Batch' (" +
                           "    'Id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
                           "    'Name' TEXT NOT NULL, " +
                           "    'StartedAt' DATETIME," +
                           "    'CreatedAt' DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP " +
                           ");";

                    sql += "CREATE TABLE IF NOT EXISTS 'BatchJob' " +
                           "(" +
                           "    'Id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
                           "    'BatchId' INTEGER NOT NULL, " +
                           "    'ScheduledJobId' INTEGER NOT NULL" +
                           ");";

                    sql += "CREATE TABLE IF NOT EXISTS 'RepeatInfo' " +
                           "(" +
                           "    'ScheduledJobId' INTEGER NOT NULL, " +
                           "    'PeriodFrequency' INTEGER NOT NULL, " +
                           "    'PeriodQuantifier' INTEGER NOT NULL, " +
                           "    'Start' DATETIME NOT NULL, " +
                           "    'IncludeWeekends' INTEGER NOT NULL DEFAULT 0" +
                           ")";
                    break;
                default:
                    throw new NotSupportedException();
            }

            db.Execute(sql);
        }
Example #31
0
 public ConstantDialectDetector(DatabaseDialect dialect)
 {
     this.dialect = dialect ?? new DatabaseDialect();
 }
 public DatabaseJobRepository(DatabaseDialect dialect, Func<IDbConnection> connectionBuilder)
 {
     _dialect = dialect;
     _connectionBuilder = connectionBuilder;
 }
Example #33
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DynamicDatabase"/> class.
 /// </summary>
 /// <param name="dialect">The dialect.</param>
 /// <param name="connectionString">Database connection string</param>
 /// <param name="providerName">Invariant name of the database provider</param>
 public DynamicDatabase(DatabaseDialect dialect, string connectionString, string providerName)
     : this(connectionString, providerName, new[] { new ConstantDialectDetector(dialect) })
 {
 }