Ejemplo n.º 1
0
        public static string ToString(this SqlLockType lockType, bool humanReadable)
        {
            if (!humanReadable)
            {
                return(lockType.ToString());
            }
            if (lockType == SqlLockType.Empty)
            {
                return("No Lock");
            }
            var result = new StringBuilder();

            if (lockType.Supports(SqlLockType.Shared))
            {
                result.Append("Shared");
            }
            if (lockType.Supports(SqlLockType.Update))
            {
                result.Append("Update");
            }
            if (lockType.Supports(SqlLockType.Exclusive))
            {
                result.Append("Exclusive");
            }
            if (lockType.Supports(SqlLockType.SkipLocked))
            {
                result.Append("|Skip locked rows");
            }
            if (lockType.Supports(SqlLockType.ThrowIfLocked))
            {
                result.Append("|Throw exception if locked");
            }
            return(result.ToString());
        }
Ejemplo n.º 2
0
 /// <inheritdoc/>
 public override string Translate(SqlLockType lockType)
 {
     if (lockType.Supports(SqlLockType.Shared) || lockType.Supports(SqlLockType.SkipLocked))
     {
         return(base.Translate(lockType));
     }
     return("WITH LOCK");
 }
Ejemplo n.º 3
0
 public override string Translate(SqlLockType lockType)
 {
     return(lockType.Supports(SqlLockType.SkipLocked) ||
            lockType.Supports(SqlLockType.Shared) ||
            lockType.Supports(SqlLockType.ThrowIfLocked)
 ? base.Translate(lockType)
 : "FOR UPDATE");
 }
Ejemplo n.º 4
0
 public override string Translate(SqlLockType lockType)
 {
     if (lockType.Supports(SqlLockType.SkipLocked))
     {
         return(base.Translate(lockType));
     }
     return(string.Format("FOR {0}{1}",
                          lockType.Supports(SqlLockType.Shared) ? "SHARE" : "UPDATE",
                          lockType.Supports(SqlLockType.ThrowIfLocked) ? " NOWAIT" : ""));
 }
Ejemplo n.º 5
0
 /// <inheritdoc/>
 public override string Translate(SqlLockType lockType)
 {
     if (lockType.Supports(SqlLockType.Shared))
     {
         return("LOCK IN SHARE MODE");
     }
     if (lockType.Supports(SqlLockType.SkipLocked) || lockType.Supports(SqlLockType.ThrowIfLocked))
     {
         return(base.Translate(lockType));
     }
     return("FOR UPDATE");
 }
Ejemplo n.º 6
0
        /// <summary>
        /// 将数据库中的指定表的集合加上读写锁
        /// </summary>
        /// <param name="tableName">要加锁的表的名字的集合</param>
        /// <param name="lockType">要对表加的锁的类型</param>
        private void LockTable(IEnumerable <string> tableNames, SqlLockType lockType)
        {
            string sql         = "lock table ";
            string lockTypeStr = lockType == SqlLockType.write ? "write" : "read";

            foreach (string tableName in tableNames)
            {
                sql += string.Format(" {0} {1},", tableName, lockTypeStr);
            }
            sql  = sql.TrimEnd(',');
            sql += ";";
            MySqlCommand cmd = new MySqlCommand(sql, conn);

            cmd.ExecuteNonQuery();
        }
Ejemplo n.º 7
0
 /// <inheritdoc/>
 public override string Translate(SqlLockType lockType)
 {
     if (lockType.Supports(SqlLockType.Shared))
     {
         return("SHARED");
     }
     if (lockType.Supports(SqlLockType.Exclusive))
     {
         return("EXCLUSIVE");
     }
     if (lockType.Supports(SqlLockType.SkipLocked) || lockType.Supports(SqlLockType.ThrowIfLocked))
     {
         return(base.Translate(lockType));
     }
     return("PENDING"); //http://www.sqlite.org/lockingv3.html Not sure whether this is the best alternative.
 }
Ejemplo n.º 8
0
        public override string Translate(SqlLockType lockType)
        {
            var items = new List <string>();

            items.Add("ROWLOCK");
            if (lockType.Supports(SqlLockType.Update))
            {
                items.Add("UPDLOCK");
            }
            else if (lockType.Supports(SqlLockType.Exclusive))
            {
                items.Add("XLOCK");
            }
            if (lockType.Supports(SqlLockType.ThrowIfLocked))
            {
                items.Add("NOWAIT");
            }
            else if (lockType.Supports(SqlLockType.SkipLocked))
            {
                items.Add("READPAST");
            }
            return(items.ToCommaDelimitedString());
        }
Ejemplo n.º 9
0
 public static bool Supports(this SqlLockType available, SqlLockType required)
 {
     return((available & required) == required);
 }