Пример #1
0
        /// <summary>
        ///     生成分页的SQL
        /// </summary>
        /// <param name="page">页号</param>
        /// <param name="pageSize">每页几行(强制大于0,小于500行)</param>
        /// <param name="order">排序字段</param>
        /// <param name="desc">是否倒序</param>
        /// <param name="condition">数据条件</param>
        /// <returns></returns>
        private string CreatePageSql(int page, int pageSize, string order, bool desc, string condition)
        {
            var orderField = string.IsNullOrWhiteSpace(order) || !FieldDictionary.ContainsKey(order)
                ? KeyField
                : FieldDictionary[order];

            var sql = new StringBuilder();

            sql.Append($@"SELECT {ContextLoadFields}
FROM {ContextReadTable}{ConditionSqlCode(condition)}
ORDER BY `{orderField}` {(desc ? "DESC" : "ASC")}");

            if (pageSize >= 0)
            {
                if (page <= 0)
                {
                    page = 1;
                }
                if (pageSize == 0)
                {
                    pageSize = 20;
                }
                else if (pageSize > 500)
                {
                    pageSize = 500;
                }
                sql.Append($" LIMIT {(page - 1) * pageSize},{pageSize}");
            }
            sql.Append(";");
            return(sql.ToString());
        }
Пример #2
0
        /// <summary>
        ///     生成分页的SQL
        /// </summary>
        /// <param name="page">页号</param>
        /// <param name="pageSize">每页几行(强制大于0,小于500行)</param>
        /// <param name="order">排序字段</param>
        /// <param name="desc">是否倒序</param>
        /// <param name="condition">数据条件</param>
        /// <returns></returns>
        private string CreatePageSql(int page, int pageSize, string order, bool desc, string condition)
        {
            var orderField = string.IsNullOrWhiteSpace(order) || !FieldDictionary.ContainsKey(order)
                ? KeyField
                : FieldDictionary[order];

            var sql = new StringBuilder();

            CreateLoadSql(sql, ContextLoadFields, condition, orderField, desc, pageSize, page);
            return(sql.ToString());
        }
Пример #3
0
        /// <summary>
        ///     生成分页的SQL
        /// </summary>
        /// <param name="page">页号</param>
        /// <param name="pageSize">每页几行(强制大于0,小于500行)</param>
        /// <param name="order">排序字段</param>
        /// <param name="desc">是否倒序</param>
        /// <param name="condition">数据条件</param>
        /// <returns></returns>
        private string CreatePageSql(int page, int pageSize, string order, bool desc, string condition)
        {
            if (pageSize <= 0 || page < 0)
            {
                return(CreateLoadSql(condition, $@" [{order}] {(desc ? "DESC" : "ASC")}"));
            }
            var orderField = string.IsNullOrWhiteSpace(order) || !FieldDictionary.ContainsKey(order)
                ? KeyField
                : FieldDictionary[order];

            return($@"SELECT * FROM (
    SELECT {ContextLoadFields},
           ROW_NUMBER() OVER (ORDER BY [{orderField}] {(desc ? "DESC" : "ASC")}) AS __rs
      FROM {ContextReadTable}{ConditionSqlCode(condition)}
) t WHERE __rs > {(page - 1) * pageSize} AND __rs <= {page * pageSize};");
        }
Пример #4
0
 /// <summary>
 ///     用在条件中的字段条件
 /// </summary>
 /// <param name="field">字段</param>
 /// <param name="expression">条件表达式</param>
 /// <returns>字段条件</returns>
 public string FieldConditionSQL(string field, string expression = "=")
 {
     Debug.Assert(FieldDictionary.ContainsKey(field));
     return($@"[{FieldMap[field]}] {expression} @{field}");
 }
Пример #5
0
 /// <summary>
 ///     生成载入字段值的SQL语句
 /// </summary>
 /// <param name="field">字段</param>
 /// <param name="condition">条件</param>
 /// <returns>载入字段值的SQL语句</returns>
 private string CreateLoadValueSql(string field, string condition)
 {
     Debug.Assert(FieldDictionary.ContainsKey(field));
     return($@"SELECT [{FieldMap[field]}] FROM {ContextReadTable}{ConditionSqlCode(condition)};");
 }
Пример #6
0
        /// <summary>
        /// Decode the Fields in record (returned from fstat for a file).
        /// </summary>
        /// <param name="record">A record returned from fstat for a file</param>
        /// <param name="p4FileName">The P4 fileName for which this record applies</param>
        /// <returns>The FileState for the file</returns>
        private static FileState GetFileStateFromRecordSet(P4Record record, out string p4FileName)
        {
            FieldDictionary fields = record.Fields;

            p4FileName = fields["clientFile"];
            p4FileName = p4FileName.Replace('/', '\\');

            if (fields.ContainsKey("headAction") && fields["headAction"] == "delete")
            {
                return(FileState.DeletedAtHeadRevision);
            }

            if (fields.ContainsKey("ourLock"))
            {
                return(FileState.Locked); // implies also opened for edit
            }

            if (fields.ContainsKey("action"))
            {
                string val = fields["action"];
                if (val == "edit")
                {
                    if (fields.ContainsKey("unresolved"))
                    {
                        return(FileState.NeedsResolved);
                    }

                    if (fields.ContainsKey("haveRev") && fields.ContainsKey("headRev") && fields["haveRev"] != fields["headRev"])
                    {
                        return(FileState.OpenForEditDiffers);
                    }

                    return(FileState.OpenForEdit);
                }

                if (val == "add")
                {
                    if (fields.ContainsKey("movedFile"))
                    {
                        return(FileState.OpenForRenameTarget);
                    }

                    return(FileState.OpenForAdd);
                }

                if (val == "delete")
                {
                    if (fields.ContainsKey("movedFile"))
                    {
                        return(FileState.OpenForRenameSource);
                    }

                    return(FileState.OpenForDelete);
                }

                if (val == "move/delete")
                {
                    return(FileState.OpenForRenameSource);
                }

                if (val == "move/add")
                {
                    return(FileState.OpenForRenameTarget);
                }

                if (val == "integrate")
                {
                    return(FileState.OpenForIntegrate);
                }

                if (val == "branch")
                {
                    return(FileState.OpenForBranch);
                }
            }
            else
            {
                // No action field
                if (fields.ContainsKey("haveRev"))
                {
                    if (fields.ContainsKey("headRev") && fields["haveRev"] == fields["headRev"])
                    {
                        return(FileState.CheckedInHeadRevision);
                    }
                    else
                    {
                        return(FileState.CheckedInPreviousRevision);
                    }
                }
            }

            if (fields.ContainsKey("otherOpen"))
            {
                ArrayFieldDictionary arrayFields = record.ArrayFields;
                if (arrayFields.ContainsKey("otherLock"))
                {
                    return(FileState.LockedByOtherUser);
                }

                if (arrayFields.ContainsKey("otherAction"))
                {
                    string[] array = arrayFields["otherAction"];
                    if (array.Any(val => val == "edit"))
                    {
                        return(FileState.OpenForEditOtherUser);
                    }

                    if (array.Any(val => val == "delete"))
                    {
                        return(FileState.OpenForDeleteOtherUser);
                    }
                }
            }

            return(FileState.NotSet);
        }