/// <summary> /// 执行保存在上下文中的SQL语句,在前后增加时间上下下文变量。执行之前会清除DBTimePointActionContext.Current.TimePoint /// </summary> /// <param name="clearSqlAfterExecute"></param> public override void ExecuteTimePointSqlInContext(bool clearSqlAfterExecute = true) { this.ExecuteSqlInContext((refConnection, db, sql) => { DateTime dt = (DateTime)db.ExecuteScalar(CommandType.Text, VersionStrategyUpdateSqlHelper.ConstructUpdateSql(null, (strB, context) => strB.Append(sql), true)); DBTimePointActionContext.Current.TimePoint.IsMinValue(() => DBTimePointActionContext.Current.TimePoint = dt); }, clearSqlAfterExecute); }
private string GetUpdateSql(string ownerID, string type, SCConditionCollection conditions) { if (type.IsNullOrEmpty()) { type = "Default"; } conditions.ForEach(c => { c.OwnerID = ownerID; c.Type = type; }); return(VersionStrategyUpdateSqlHelper.ConstructUpdateSql(null, (strB, context) => { ConnectiveSqlClauseCollection connectiveBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(); WhereSqlClauseBuilder keyBuilder = new WhereSqlClauseBuilder(); keyBuilder.AppendItem("OwnerID", ownerID); keyBuilder.AppendItem("type", type); connectiveBuilder.Add(keyBuilder); strB.AppendFormat("UPDATE {0} SET VersionEndTime = {1} WHERE {2}", this.GetMappingInfo().TableName, "@currentTime", connectiveBuilder.ToSqlString(TSqlBuilder.Instance)); for (int i = 0; i < conditions.Count; i++) { SCCondition condition = conditions[i]; condition.SortID = i; strB.Append(TSqlBuilder.Instance.DBStatementSeperator); condition.VersionEndTime = ConnectionDefine.MaxVersionEndTime; condition.Type = type; InsertSqlClauseBuilder insertBuilder = ORMapping.GetInsertSqlClauseBuilder(condition, this.GetMappingInfo(), "VersionStartTime"); insertBuilder.AppendItem("VersionStartTime", "@currentTime", "=", true); strB.AppendFormat("INSERT INTO {0}{1}", this.GetMappingInfo().TableName, insertBuilder.ToSqlString(TSqlBuilder.Instance)); } })); }
private string GetUpdateSql(string containerID, SCAclContainerOrMemberCollectionBase members) { return(VersionStrategyUpdateSqlHelper.ConstructUpdateSql( null, (strB, context) => { string tableName = this.GetMappingInfo().TableName; ConnectiveSqlClauseCollection connectiveBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(); WhereSqlClauseBuilder keyBuilder = new WhereSqlClauseBuilder(); keyBuilder.AppendItem("ContainerID", containerID); connectiveBuilder.Add(keyBuilder); strB.AppendFormat( "UPDATE {0} SET VersionEndTime = {1} WHERE {2}", tableName, "@currentTime", connectiveBuilder.ToSqlString(TSqlBuilder.Instance)); for (int i = 0; i < members.Count; i++) { SCAclItem aclitem = members[i]; aclitem.SortID = i; strB.Append(TSqlBuilder.Instance.DBStatementSeperator); aclitem.VersionEndTime = ConnectionDefine.MaxVersionEndTime; InsertSqlClauseBuilder insertBuilder = ORMapping.GetInsertSqlClauseBuilder(aclitem, this.GetMappingInfo(), "VersionStartTime"); insertBuilder.AppendItem("VersionStartTime", "@currentTime", "=", true); strB.AppendFormat("INSERT INTO {0}{1}", tableName, insertBuilder.ToSqlString(TSqlBuilder.Instance)); } })); }