/// <summary>
        /// Uses SQL Server as the distributed locking mechanism
        /// </summary>
        /// <param name="connectionString">The connection string to a database where the process lock table should be created</param>
        /// <returns>The options</returns>
        public RelationalDatabaseProcessLockOptions WithSqlServer(string connectionString)
        {
            ServerType       = DatabaseProcessLockServerType.SqlServer;
            ConnectionString = connectionString;

            return(this);
        }
Ejemplo n.º 2
0
        public Scripts(DatabaseProcessLockServerType serverType, string tableNameSuffix)
        {
            _serverType = serverType;
            _tableName  = $"ProcessLock{tableNameSuffix}";

            _scripts = new Dictionary <string, string>
            {
                // CREATE TABLE

                { $"{DatabaseProcessLockServerType.Sqlite}_{CreateTableScriptName}",
                  $"CREATE TABLE {_tableName} (" +
                  "ProcessName TEXT PRIMARY KEY, " +
                  "Token TEXT NOT NULL, " +
                  "ExpiresOn TEXT NOT NULL, " +
                  "LockDuration TEXT NOT NULL)" },
                { $"{DatabaseProcessLockServerType.SqlServer}_{CreateTableScriptName}",
                  $"CREATE TABLE [dbo].[{_tableName}] " +
                  "( " +
                  "[ProcessName][varchar](200) NOT NULL, " +
                  "[Token][varchar](200) NOT NULL, " +
                  "[ExpiresOn] [datetime] NOT NULL, " +
                  "[LockDuration] [int] NOT NULL, " +
                  $"CONSTRAINT[PK_{_tableName}] PRIMARY KEY CLUSTERED([ProcessName] ASC)" +
                  "WITH(PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON[PRIMARY] " +
                  ") ON[PRIMARY]" },

                // SELECT TABLE

                { $"{DatabaseProcessLockServerType.Sqlite}_{SelectTableScriptName}", $"SELECT COUNT(name) FROM sqlite_master WHERE type='table' AND name='{_tableName}'" },
                { $"{DatabaseProcessLockServerType.SqlServer}_{SelectTableScriptName}",
                  "SELECT CAST(COUNT(*) AS BIGINT) " +
                  "FROM INFORMATION_SCHEMA.TABLES " +
                  "WHERE TABLE_SCHEMA = 'dbo' " +
                  $"AND TABLE_NAME = '{_tableName}'" },

                // DROP TABLE

                { $"{DatabaseProcessLockServerType.Sqlite}_{DropTableScriptName}", $"DROP TABLE {_tableName}" },
                { $"{DatabaseProcessLockServerType.SqlServer}_{DropTableScriptName}", $"DROP TABLE [dbo].[{_tableName}]" }
            };
        }