public SchemaObjectCollection QueryApplications(string[] schemaTypes, bool includingDeleted, DateTime timePoint)
        {
            SchemaObjectCollection result = new SchemaObjectCollection();

            ConnectiveSqlClauseCollection timeConditionC = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "SC.");

            InSqlClauseBuilder schemaBuilder = new InSqlClauseBuilder("SC.SchemaType");

            schemaBuilder.AppendItem(schemaTypes);

            WhereSqlClauseBuilder builderC = new WhereSqlClauseBuilder();

            if (includingDeleted == false)
                builderC.AppendItem("SC.Status", (int)SchemaObjectStatus.Normal);

            ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(schemaBuilder, builderC, timeConditionC);

            string sql = string.Format("SELECT SC.*" +
                "\nFROM SC.SchemaObject SC" +
                "\nWHERE {0}", connectiveBuilder.ToSqlString(TSqlBuilder.Instance));

            DataTable table = DbHelper.RunSqlReturnDS(sql, this.GetConnectionName()).Tables[0];

            result.LoadFromDataView(table.DefaultView);

            return result;
        }
		private void BindDataGrid()
		{
			WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(this.UserUploadCondition);

			if (this.processUsers.ReadOnly)
			{
				this.ObjectDataSourceUploadLogs.Condition = builder;
			}
			else
			{
				ConnectiveSqlClauseCollection collection = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);
				collection.Add(builder);

				WhereSqlClauseBuilder userwherebuilder = new WhereSqlClauseBuilder();
				userwherebuilder.LogicOperator = LogicOperatorDefine.Or;
				foreach (var item in this.processUsers.SelectedOuUserData)
				{
					userwherebuilder.AppendItem("OPERATOR_ID", item.ID);
				}
				collection.Add(userwherebuilder);

				this.ObjectDataSourceUploadLogs.Condition = collection.ToSqlString(TSqlBuilder.Instance);
			}
			this.ObjectDataSourceUploadLogs.LastQueryRowCount = -1;

			this.DeluxeGridUploadLog.PageIndex = 0;
			this.DeluxeGridUploadLog.SelectedKeys.Clear();
			this.DeluxeGridUploadLog.DataBind();
		}
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			qc.FromClause = TimePointContext.Current.UseCurrentTime ? "SC.SchemaUserSnapshot_Current O INNER JOIN SC.UserAndContainerSnapshot_Current R ON O.ID = R.UserID" : "SC.SchemaUserSnapshot O INNER JOIN SC.UserAndContainerSnapshot R ON O.ID = R.UserID";
			qc.SelectFields = "O.*";
			if (string.IsNullOrEmpty(this.orderBy))
				qc.OrderByClause = "R.VersionStartTime DESC";
			else
				qc.OrderByClause = orderBy;
			base.OnBuildQueryCondition(qc);

			WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

			var timeCondition1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");
			var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O.");

			builder.AppendItem("R.ContainerID", this.containerId);
			InnerBuildWhere(builder);

			builder.AppendItem("O.Status", (int)SchemaObjectStatus.Normal);
			builder.AppendItem("R.Status", (int)SchemaObjectStatus.Normal);

			var allConditions = new ConnectiveSqlClauseCollection(timeCondition1, timeCondition2, builder);

			if (string.IsNullOrEmpty(qc.WhereClause))
			{
				qc.WhereClause = allConditions.ToSqlString(TSqlBuilder.Instance);
			}
			else
			{
				qc.WhereClause = allConditions.ToSqlString(TSqlBuilder.Instance) + " AND (" + qc.WhereClause + ")";
			}
		}
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			base.OnBuildQueryCondition(qc);
			qc.SelectFields = "*";
			qc.FromClause = TimePointContext.Current.UseCurrentTime ? "SC.AUAdminScopeItemSnapshot_Current" : "SC.AUAdminScopeItemSnapshot";

			if (string.IsNullOrEmpty(qc.OrderByClause))
				qc.OrderByClause = "AUScopeItemName ASC";

			WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();
			builder.AppendCondition("SchemaType", this.scopeType).NormalFor("Status");
			var timeBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder();

			var allCondition = new ConnectiveSqlClauseCollection(builder, timeBuilder).ToSqlString(TSqlBuilder.Instance);

			if (string.IsNullOrEmpty(qc.WhereClause))
			{
				qc.WhereClause = allCondition;
			}
			else
			{
				qc.WhereClause = qc.WhereClause + "AND (" + allCondition + ")";
			}

		}
		/// <summary>
		/// 将时间点有关的SQL条件填充到ConnectiveSqlClauseCollection
		/// </summary>
		/// <param name="builder"></param>
		/// <param name="timePoint"></param>
		/// <param name="fieldPrefix">字段前缀。如果是表空间或Schema,不要忘记后面的'.'</param>
		public void FillTimePointInBuilder(ConnectiveSqlClauseCollection builder, DateTime timePoint, string fieldPrefix)
		{
			//输出结果应该是
			//VersionStartTime <= getdate() AND (VersionEndTime > getdate() OR VersionEndTime IS NULL)
			builder.NullCheck("builder");

			string timeString = TSqlBuilder.Instance.DBCurrentTimeFunction;

			if (timePoint == DateTime.MinValue && this._UseSimulatedTime && TimePointContext.Current.UseCurrentTime == false)
				timePoint = TimePointContext.Current.SimulatedTime;

			if (timePoint != DateTime.MinValue)
				timeString = TSqlBuilder.Instance.FormatDateTime(timePoint);

			WhereSqlClauseBuilder sBuilder = new WhereSqlClauseBuilder();

			string vsFieldName = JoinFieldName(fieldPrefix, this.VersionStartTimeFieldName);

			sBuilder.AppendItem(vsFieldName, timeString, "<=", true);

			WhereSqlClauseBuilder eBuilder = new WhereSqlClauseBuilder(LogicOperatorDefine.Or);

			string veFieldName = JoinFieldName(fieldPrefix, this.VersionEndTimeFieldName);

			eBuilder.AppendItem(veFieldName, timeString, ">", true).AppendItem(veFieldName, "NULL", "IS", true);

			builder.LogicOperator = LogicOperatorDefine.And;

			builder.Add(sBuilder).Add(eBuilder);
		}
		public bool ValidateGroups(DateTime timePoint)
		{
			InSqlClauseBuilder inSql1 = new InSqlClauseBuilder("ChildSchemaType");
			inSql1.AppendItem(SchemaInfo.FilterByCategory("Groups").ToSchemaNames());

			InSqlClauseBuilder inSql2 = new InSqlClauseBuilder("ParentSchemaType");
			inSql2.AppendItem(SchemaInfo.FilterByCategory("Organizations").ToSchemaNames());


			var all = new ConnectiveSqlClauseCollection(inSql1, inSql2, VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint));

			string sql = string.Format(@"SELECT TOP 1 1 from SC.SchemaRelationObjects WHERE ObjectID IN(
SELECT ObjectID FROM SC.SchemaRelationObjects WHERE {0} AND STATUS =1
GROUP by ObjectID
HAVING COUNT(ParentID) <>1 
)", all.ToSqlString(TSqlBuilder.Instance));

			using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
			{
				Database db = DatabaseFactory.Create(context);
				using (var dr = db.ExecuteReader(CommandType.Text, sql))
				{
					if (dr.Read())
					{
						return false;
					}
					else
					{
						return true;
					}
				}
			}

		}
 private static ConnectiveSqlClauseCollection SchemaStrict(ConnectiveSqlClauseCollection c, string prefix, PC.StandardObjectSchemaType schema)
 {
     WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
     where.AppendItem(prefix + "SchemaType", schema);
     c.Add(where);
     return c;
 }
		protected override void OnConnectConditions(ConnectiveSqlClauseCollection allConditions)
		{
			base.OnConnectConditions(allConditions);
			allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("OU."));
			allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O."));
			WhereSqlClauseBuilder where1 = new WhereSqlClauseBuilder();
			where1.AppendItem("OU.Status", (int)SchemaObjectStatus.Normal);
			where1.AppendItem("O.Status", (int)SchemaObjectStatus.Normal);
			allConditions.Add(where1);
		}
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			base.OnBuildQueryCondition(qc);
			qc.SelectFields = "S.*";
			qc.FromClause = this.FromSqlClause;
			if (string.IsNullOrEmpty(qc.OrderByClause))
				qc.OrderByClause = "S.Name ASC";

			var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("S.");
			WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
			var allConditions = new ConnectiveSqlClauseCollection(timeCondition, where);
			where.AppendCondition("S.CategoryID", this.categoryID);
			if (string.IsNullOrEmpty(qc.WhereClause) == false)
				qc.WhereClause += " AND ";
			qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
		}
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			qc.FromClause = (TimePointContext.Current.UseCurrentTime ?
				"SC.SchemaGroupSnapshot_Current G INNER JOIN SC.SchemaRelationObjectsSnapshot_Current R ON G.ID = R.ObjectID "
				: "SC.SchemaGroupSnapshot G INNER JOIN SC.SchemaRelationObjectsSnapshot R ON G.ID = R.ObjectID ");

			if (this.fileterRole)
			{
				qc.FromClause += TimePointContext.Current.UseCurrentTime ?
					" LEFT JOIN SC.Acl_Current AC ON AC.ContainerID = R.ParentID INNER JOIN SC.SchemaRoleSnapshot_Current RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot_Current UC ON RS.ID = UC.ContainerID " :
					" LEFT JOIN SC.Acl AC ON AC.ContainerID = R.ParentID INNER JOIN SC.SchemaRoleSnapshot RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot UC ON RS.ID = UC.ContainerID ";
			}

			qc.SelectFields = "G.*,R.ParentID";
			if (qc.OrderByClause.IsNullOrEmpty())
				qc.OrderByClause = "R.InnerSort DESC";

			qc.WhereClause.IsNotEmpty((s) => qc.WhereClause += " AND ");

			var timeConditionS = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("G.");

			var timeConditionR = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");

			WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

			builder.AppendItem("R.Status", (int)SchemaObjectStatus.Normal);
			builder.AppendItem("G.Status", (int)SchemaObjectStatus.Normal);

			var allConditions = new ConnectiveSqlClauseCollection(timeConditionS, timeConditionR, builder);

			if (this.fileterRole)
			{
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("AC."));
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("RS."));
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("UC."));
				builder.AppendItem("AC.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("RS.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("UC.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("UC.UserID", this.userID);

				InSqlClauseBuilder inSql1 = new InSqlClauseBuilder("AC.ContainerPermission");
				inSql1.AppendItem(this.parentPermissions);
				allConditions.Add(inSql1);
			}

			qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
		}
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			base.OnBuildQueryCondition(qc);
			qc.SelectFields = SelectFields;
			qc.FromClause = this.FromSqlClause;
			if (string.IsNullOrEmpty(qc.OrderByClause))
				qc.OrderByClause = DefaultOrderByClause; ;

			var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("S.");
			var timeCondition1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("M.");
			WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
			var allConditions = new ConnectiveSqlClauseCollection(timeCondition, timeCondition1, where);
			BuildWhere(where);
			if (string.IsNullOrEmpty(qc.WhereClause) == false)
				qc.WhereClause += " AND ";
			qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
		}
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			base.OnBuildQueryCondition(qc);
			qc.SelectFields = "S.*";
			qc.FromClause = this.FromSqlClause;
			if (string.IsNullOrEmpty(qc.OrderByClause))
				qc.OrderByClause = "S.SearchContent ASC";

			var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("S.");
			var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("M.");
			WhereSqlClauseBuilder where = new WhereSqlClauseBuilder().NormalFor("S.Status").NormalFor("M.Status");
			var allConditions = new ConnectiveSqlClauseCollection(timeCondition, timeCondition2, where);
			where.AppendCondition("M.ContainerID", this.scope.ID);
			if (string.IsNullOrEmpty(qc.WhereClause) == false)
				qc.WhereClause += " AND ";

			qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
		}
		public void CheckUserInAcl(IUser user, IWfProcess process, ref bool continueCheck)
		{
			InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("RESOURCE_ID");

			inBuilder.AppendItem(process.ResourceID, process.ID);

			WhereSqlClauseBuilder whereBuilder = new WhereSqlClauseBuilder();

			whereBuilder.AppendItem("OBJECT_TYPE", "Users");
			whereBuilder.AppendItem("OBJECT_ID", user.ID);

			ConnectiveSqlClauseCollection connective = new ConnectiveSqlClauseCollection(inBuilder, whereBuilder);

			WfAclItemCollection aclItems = WfAclAdapter.Instance.LoadByBuilder(connective);

			(aclItems.Count > 0).FalseThrow(
							Translator.Translate(Define.DefaultCulture, "用户没有权限打开此文件"));
		}
		/// <summary>
		/// 载入指定对象的双向关系
		/// </summary>
		/// <param name="ids">对象的ID</param>
		/// <returns></returns>
		public static SCRelationObjectCollection LoadFullRelations(string[] ids)
		{
			if (ids == null || ids.Length == 0)
				throw new ArgumentNullException("ids");

			var idsParent = new InSqlClauseBuilder("ParentID");
			idsParent.AppendItem(ids);

			var idsChild = new InSqlClauseBuilder("ObjectID");
			idsChild.AppendItem(ids);

			var idConditions = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or, idsParent, idsChild);

			var builder = new WhereSqlClauseBuilder();
			builder.AppendItem("Status", (int)SchemaObjectStatus.Normal);

			return Adapters.SchemaRelationObjectAdapter.Instance.Load(new ConnectiveSqlClauseCollection(idConditions, builder), DateTime.MinValue);
		}
        /// <summary>
        /// 获得指定附件的副本
        /// </summary>
        /// <param name="materials">附件集合</param>
        /// <returns>指定附件对应的副本集合</returns>
        internal MaterialList LoadCopyVersionMaterial(MaterialList materials)
        {
            ExceptionHelper.TrueThrow<ArgumentNullException>(materials == null, "materials");

            MaterialList copyVersionMaterials = new MaterialList();

            if (materials.Count != 0)
            {
                ConnectiveSqlClauseCollection orClause = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);

                foreach (Material material in materials)
                {
                    WhereSqlClauseBuilder whereSqlClause = new WhereSqlClauseBuilder();

                    whereSqlClause.AppendItem("PARENT_ID", material.ID);
                    whereSqlClause.AppendItem("WF_ACTIVITY_ID", material.WfActivityID);
                    whereSqlClause.AppendItem("VERSION_TYPE", (int)MaterialVersionType.CopyVersion);

                    orClause.Add(whereSqlClause);
                }

                string sql = string.Format("SELECT * FROM WF.MATERIAL WHERE {0}",
                    orClause.AppendTenantCodeSqlClause(typeof(Material)).ToSqlString(TSqlBuilder.Instance));

                using (DbContext dbi = DbHelper.GetDBContext(GetConnectionName()))
                {
                    using (IDataReader dr = DbHelper.RunSqlReturnDR(sql, GetConnectionName()))
                    {
                        while (dr.Read())
                        {
                            Material material = new Material();

                            ORMapping.DataReaderToObject(dr, material);

                            copyVersionMaterials.Add(material);
                        }
                    }
                }

                DecorateMaterials(copyVersionMaterials);
            }

            return copyVersionMaterials;
        }
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			qc.FromClause = TimePointContext.Current.UseCurrentTime ? "SC.SchemaOrganizationSnapshot_Current O INNER JOIN SC.SchemaRelationObjectsSnapshot_Current R ON O.ID = R.ObjectID" : "SC.SchemaOrganizationSnapshot O INNER JOIN SC.SchemaRelationObjectsSnapshot R ON O.ID = R.ObjectID";

			if (this.fileterRole)
			{
				qc.FromClause += TimePointContext.Current.UseCurrentTime ?
					" INNER JOIN SC.Acl_Current AC ON AC.ContainerID = O.ID INNER JOIN SC.SchemaRoleSnapshot_Current RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot_Current UC ON RS.ID = UC.ContainerID "
					: " INNER JOIN SC.Acl AC ON AC.ContainerID = O.ID INNER JOIN SC.SchemaRoleSnapshot RS ON RS.ID = AC.MemberID INNER JOIN SC.UserAndContainerSnapshot UC ON RS.ID = UC.ContainerID ";
			}

			qc.SelectFields = "DISTINCT O.*,R.FullPath";

			if (string.IsNullOrEmpty(qc.OrderByClause))
				qc.OrderByClause = "R.InnerSort ASC";

			qc.WhereClause.IsNotEmpty((s) => qc.WhereClause += " AND ");

			WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();
			builder.AppendItem("R.Status", (int)SchemaObjectStatus.Normal);
			builder.AppendItem("O.Status", (int)SchemaObjectStatus.Normal);
			var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");
			var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O.");
			var schemaCondition = DataSourceUtil.SchemaTypeCondition("R.ChildSchemaType", "Organizations");
			var allConditions = new ConnectiveSqlClauseCollection(builder, timeCondition, timeCondition2, schemaCondition);

			if (this.fileterRole && this.userID != null && this.permissions != null)
			{
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("AC."));
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("RS."));
				allConditions.Add(VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("UC."));
				builder.AppendItem("AC.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("RS.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("UC.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("UC.UserID", this.userID);

				InSqlClauseBuilder inSql1 = new InSqlClauseBuilder("AC.ContainerPermission");
				inSql1.AppendItem(this.permissions);
				allConditions.Add(inSql1);
			}

			qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
		}
		/// <summary>
		/// 将缺省组织ID添加到查询结果
		/// </summary>
		/// <param name="result"></param>
		/// <param name="userIdField">源表中用户ID的列名</param>
		/// <param name="parentIdField">用于添加到源表中缺省组织的ID的列名</param>
		/// <param name="connectionName">连接名</param>
		public static void FillUserDefaultParent(DataView result, string userIdField, string parentIdField, string connectionName)
		{
			if (result.Table.Columns.Contains(parentIdField) == false)
			{
				result.Table.Columns.Add(parentIdField, typeof(string));
			}

			var rows = result.Table.Rows;
			string[] ids = new string[rows.Count];
			for (int i = 0; i < rows.Count; i++)
			{
				ids[i] = (string)rows[i][userIdField];
			}

			if (ids.Length > 0)
			{
				InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("K.ObjectID");
				inBuilder.AppendItem(ids);

				var defaultParentTimeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("K.");
				var defaultParentWhere = new WhereSqlClauseBuilder();
				defaultParentWhere.AppendItem("K.Status", (int)SchemaObjectStatus.Normal);
				defaultParentWhere.AppendItem("K.IsDefault", 1);

				var defaultParentAllConditions = new ConnectiveSqlClauseCollection(inBuilder, defaultParentWhere, defaultParentTimeCondition);

				string parentIDSql = TimePointContext.Current.UseCurrentTime ? "SELECT K.ObjectID, K.ParentID FROM SC.SchemaRelationObjectsSnapshot_Current K WHERE " + defaultParentAllConditions.ToSqlString(TSqlBuilder.Instance) : "SELECT K.ObjectID, K.ParentID FROM SC.SchemaRelationObjectsSnapshot K WHERE " + defaultParentAllConditions.ToSqlString(TSqlBuilder.Instance);

				DataSet ds = DbHelper.RunSqlReturnDS(parentIDSql, connectionName);

				var rows2 = ds.Tables[0].Rows;
				rows.ForEach<DataRow>(r =>
				{
					rows2.ForEach<DataRow>(r2 =>
					{
						if (r2["ObjectID"].Equals(r[userIdField]))
						{
							r[parentIdField] = r2["ParentID"];
						}
					});
				});
			}
		}
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			if (qc.OrderByClause.IsNullOrEmpty())
				qc.OrderByClause = "VersionStartTime DESC";

			qc.WhereClause.IsNotEmpty((s) => qc.WhereClause += " AND ");

			WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

			var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder();

			builder.AppendItem("Status", (int)SchemaObjectStatus.Normal);

			builder.AppendItem("SchemaType", "Applications");

			var conditions = new ConnectiveSqlClauseCollection(timeCondition, builder);

			qc.WhereClause += conditions.ToSqlString(TSqlBuilder.Instance);
		}
		public IList<RoleDisplayItem> LoadByRoleIds(string[] ids)
		{
			IList<RoleDisplayItem> result = null;
			if (ids.Length > 0 && ids.Length > 0)
			{
				string sql = @"SELECT O.*, A.ID AS AppID, A.Name As AppName, A.DisplayName AS AppDisplayName FROM  
 SC.SchemaObjectSnapshot O INNER JOIN SC.SchemaMembersSnapshot R ON R.MemberID = O.ID
 INNER JOIN SC.SchemaObjectSnapshot_Current A ON R.ContainerID = A.ID
 WHERE ";

				InSqlClauseBuilder inBuilder1 = new InSqlClauseBuilder("O.SchemaType");
				inBuilder1.AppendItem(SchemaInfo.FilterByCategory("Roles").ToSchemaNames());

				InSqlClauseBuilder inBuilder2 = new InSqlClauseBuilder("O.ID");
				inBuilder2.AppendItem(ids);

				var timeLimit1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O.");
				var timeLimit2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");

				WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();
				builder.AppendItem("O.Status", (int)SchemaObjectStatus.Normal);
				builder.AppendItem("R.Status", (int)SchemaObjectStatus.Normal);

				sql += new ConnectiveSqlClauseCollection(inBuilder1, inBuilder2, timeLimit1, timeLimit2, builder).ToSqlString(TSqlBuilder.Instance);

				DataTable table = DbHelper.RunSqlReturnDS(sql, this.GetConnectionName()).Tables[0];

				result = new List<RoleDisplayItem>(table.Rows.Count);
				foreach (DataRow row in table.Rows)
				{
					var obj = new RoleDisplayItem();
					ORMapping.DataRowToObject(row, obj);
					result.Add(obj);
				}
			}
			else
			{
				result = new List<RoleDisplayItem>();
			}

			return result;
		}
		private static ClientSchemaObjectBase[] GetObjectByIDInner(string[] ids, string[] objectSchemaTypes, bool normalOnly)
		{
			objectSchemaTypes.NullCheck("objectSchemaTypes");

			ClientSchemaObjectBase[] result;

			bool noIDMatch = ids != null && ids.Length == 0;

			if (noIDMatch)
			{
				result = new ClientSchemaObjectBase[0];
			}
			else
			{
				ConnectiveSqlClauseCollection builder = new ConnectiveSqlClauseCollection();
				if (ids != null)
				{
					InSqlClauseBuilder idInBuilder = new InSqlClauseBuilder("ID");
					idInBuilder.AppendItem(ids);

					builder.Add(idInBuilder);
				}

				if (objectSchemaTypes != null)
				{
					InSqlClauseBuilder typeInBuilder = new InSqlClauseBuilder("SchemaType");
					typeInBuilder.AppendItem(objectSchemaTypes);
					builder.Add(typeInBuilder);
				}

				if (normalOnly)
					builder.Add((IConnectiveSqlClause)new WhereSqlClauseBuilder().AppendItem("Status", (int)SchemaObjectStatus.Normal));

				if (builder.IsEmpty == false)
					result = SchemaObjectAdapter.Instance.Load(builder, SimpleRequestSoapMessage.Current.TimePoint).ToClientSCBaseObjectArray();
				else
					result = new ClientSchemaObjectBase[0];
			}

			return result;
		}
        private static string BuilderSubSqlClause(WfMatrixQueryParam para, string wfMatrixID, string inSql)
        {
            WhereSqlClauseBuilder matrixIdBuilder = new WhereSqlClauseBuilder();

            matrixIdBuilder.AppendItem(DB_FIELD_MATRIX_ID, wfMatrixID);
            matrixIdBuilder.AppendTenantCode();

            WhereSqlClauseBuilder fieldBuilder = new WhereSqlClauseBuilder();

            fieldBuilder.AppendItem(DB_FIELD_DIMENSION_KEY, para.QueryName);
            fieldBuilder.AppendItem(DB_FIELD_STRING_VALUE, para.QueryValue);
            fieldBuilder.AppendTenantCode();

            WhereSqlClauseBuilder fieldEmptyBuilder = new WhereSqlClauseBuilder();

            fieldEmptyBuilder.AppendItem(DB_FIELD_DIMENSION_KEY, para.QueryName);
            fieldEmptyBuilder.AppendItem(DB_FIELD_STRING_VALUE, "");
            fieldEmptyBuilder.AppendTenantCode();

            ConnectiveSqlClauseCollection fieldClauseConnector = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);

            fieldClauseConnector.Add(fieldBuilder);
            fieldClauseConnector.Add(fieldEmptyBuilder);

            ConnectiveSqlClauseCollection matrixIdConnector = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);

            matrixIdConnector.Add(matrixIdBuilder);
            matrixIdConnector.Add(fieldClauseConnector);

            StringBuilder strBuilder = new StringBuilder(SELECT_MC_CLAUSE);

            strBuilder.Append(matrixIdConnector.ToSqlString(TSqlBuilder.Instance));

            if (!string.IsNullOrEmpty(inSql))
            {
                strBuilder.AppendFormat(" AND {0} IN ({1})", DB_FIELD_MATRIX_ROW_ID, inSql);
            }

            return(strBuilder.ToString());
        }
Exemple #22
0
        protected override void OnBuildQueryCondition(QueryCondition qc)
        {
            qc.FromClause   = FromClause;
            qc.SelectFields = SelectFields;
            if (string.IsNullOrEmpty(this.orderBy))
            {
                qc.OrderByClause = this.DefaultOrderBy;
            }
            else
            {
                qc.OrderByClause = orderBy;
            }
            base.OnBuildQueryCondition(qc);

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            var timeCondition  = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");
            var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O.");

            builder.AppendItem(UserIdField, userId);

            InnerBuildWhere(builder);

            var conditionUserSchemas      = DataSourceUtil.SchemaTypeCondition("R.UserSchemaType", this.UserSchemaTypes);
            var conditionContainerSchemas = DataSourceUtil.SchemaTypeCondition("R.ContainerSchemaType", this.ContainerSchemaTypes);

            var allConditions = new ConnectiveSqlClauseCollection(timeCondition, timeCondition2, conditionUserSchemas, conditionContainerSchemas, builder);

            OnConnectConditions(allConditions);

            if (string.IsNullOrEmpty(qc.WhereClause))
            {
                qc.WhereClause = allConditions.ToSqlString(TSqlBuilder.Instance);
            }
            else
            {
                //将builder中的内容与WhereClause合并
                qc.WhereClause = allConditions.ToSqlString(TSqlBuilder.Instance) + " AND (" + qc.WhereClause + ")";
            }
        }
Exemple #23
0
        public TCollection LoadByInBuilder(Action <InSqlClauseBuilder> inAction, Action <OrderBySqlClauseBuilder> orderByAction, ORMappingItemCollection mappings)
        {
            inAction.NullCheck("whereAction");

            TCollection result = null;

            PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration(string.Format("LoadByInBuilder({0})", this.GetType().FullName), () =>
            {
                InSqlClauseBuilder inBuilder = new InSqlClauseBuilder();

                inAction(inBuilder);

                string condition = string.Empty;

                if (inBuilder.IsEmpty == false)
                {
                    ConnectiveSqlClauseCollection builder = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And,
                                                                                              inBuilder, new WhereSqlClauseBuilder().AppendTenantCode(typeof(T)));

                    condition = builder.ToSqlString(TSqlBuilder.Instance);

                    OrderBySqlClauseBuilder orderByBuilder = null;

                    if (orderByAction != null)
                    {
                        orderByBuilder = new OrderBySqlClauseBuilder();

                        orderByAction(orderByBuilder);
                    }

                    result = InnerLoadByBuilder(condition, orderByBuilder, mappings);
                }
                else
                {
                    result = new TCollection();
                }
            });

            return(result);
        }
Exemple #24
0
        public List <AURoleDisplayItem> LoadAURoleDisplayItems(string unitID, bool normalOnly, DateTime timePoint)
        {
            string sql = @"SELECT SR.Name, SR.CodeName, SR.DisplayName, S.ID, S.SchemaRoleID, S.Status FROM SC.AURoleSnapshot S
INNER JOIN SC.SchemaMembers R ON S.ID = R.MemberID AND S.SchemaType = R.MemberSchemaType
INNER JOIN SC.AUSchemaRoleSnapshot SR ON SR.ID = S.SchemaRoleID
 WHERE";

            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
            where.AppendCondition("R.ContainerID", unitID).AppendCondition("R.ContainerSchemaType", AUCommon.SchemaAdminUnit);
            if (normalOnly)
            {
                where.NormalFor("R.Status").NormalFor("S.Status").NormalFor("SR.Status");
            }

            var timeCondition1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "S.");
            var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "SR.");
            var timeCondition3 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "R.");

            sql += new ConnectiveSqlClauseCollection(timeCondition1, timeCondition2, timeCondition3, where).ToSqlString(TSqlBuilder.Instance);

            List <AURoleDisplayItem> result = new List <AURoleDisplayItem>();

            AUCommon.DoDbAction(() =>
            {
                using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
                {
                    using (IDataReader dr = DbHelper.RunSqlReturnDR(sql, this.GetConnectionName()))
                    {
                        while (dr.Read())
                        {
                            AURoleDisplayItem item = new AURoleDisplayItem();
                            ORMapping.DataReaderToObject <AURoleDisplayItem>(dr, item);
                            result.Add(item);
                        }
                    }
                }
            });

            return(result);
        }
        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 = DBTimePointActionContext.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));
                }
            }));
        }
Exemple #26
0
        protected override void OnBuildQueryCondition(QueryCondition qc)
        {
            base.OnBuildQueryCondition(qc);
            qc.SelectFields = "S.*";
            qc.FromClause   = this.FromSqlClause;
            if (string.IsNullOrEmpty(qc.OrderByClause))
            {
                qc.OrderByClause = "S.Name ASC";
            }

            var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("S.");

            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
            var allConditions = new ConnectiveSqlClauseCollection(timeCondition, where);

            where.AppendCondition("S.CategoryID", this.categoryID);
            if (string.IsNullOrEmpty(qc.WhereClause) == false)
            {
                qc.WhereClause += " AND ";
            }
            qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
        }
Exemple #27
0
        /// <summary>
        /// 根据TimePoint和状态来生成Builder
        /// </summary>
        /// <param name="includingDeleted"></param>
        /// <param name="timePoint"></param>
        /// <param name="tablePrefixes"></param>
        /// <returns></returns>
        private IConnectiveSqlClause CreateStatusAndTimePointBuilder(bool includingDeleted, DateTime timePoint, params string[] tablePrefixes)
        {
            ConnectiveSqlClauseCollection result = new ConnectiveSqlClauseCollection();

            foreach (string tablePrefix in tablePrefixes)
            {
                IConnectiveSqlClause timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, tablePrefix);

                result.Add(timePointBuilder);

                WhereSqlClauseBuilder statusBuilder = new WhereSqlClauseBuilder();

                if (includingDeleted == false)
                {
                    statusBuilder.AppendItem(tablePrefix + "Status", (int)SchemaObjectStatus.Normal);
                }

                result.Add(statusBuilder);
            }

            return(result);
        }
Exemple #28
0
        public SCAclMemberCollection LoadMembers(IConnectiveSqlClause condition, DateTime timePoint)
        {
            ConnectiveSqlClauseCollection timePointBuilder  = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);
            ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(condition, timePointBuilder);

            string sql = string.Format(
                "SELECT * FROM {0} WHERE {1} ORDER BY SortID",
                this.GetLoadingTableName(timePoint),
                connectiveBuilder.ToSqlString(TSqlBuilder.Instance));

            SCAclMemberCollection result = new SCAclMemberCollection();

            using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
            {
                using (IDataReader reader = DbHelper.RunSqlReturnDR(sql, this.GetConnectionName()))
                {
                    ORMapping.DataReaderToCollection(result, reader);

                    return(result);
                }
            }
        }
        protected override void OnBuildQueryCondition(QueryCondition qc)
        {
            qc.SelectFields = "U.* ";
            qc.FromClause   = "SC.SchemaUserSnapshot U ";

            if (qc.OrderByClause.IsNullOrEmpty())
            {
                qc.OrderByClause = "U.VersionStartTime DESC";
            }

            qc.WhereClause.IsNotEmpty((s) => qc.WhereClause += " AND ");

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("U.Status", (int)SchemaObjectStatus.Normal, "!=");

            var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("U.");

            var allConditions = new ConnectiveSqlClauseCollection(builder, timeCondition);

            qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
        }
Exemple #30
0
        /// <summary>
        /// 查询角色所包含的成员
        /// </summary>
        /// <param name="schemaTypes">成员的SchemaType</param>
        /// <param name="appCodeName"></param>
        /// <param name="roleCodeNames"></param>
        /// <param name="includingDeleted"></param>
        /// <param name="timePoint"></param>
        /// <returns></returns>
        public SCObjectAndRelationCollection QueryRolesContainsMembers(string[] schemaTypes, string appCodeName, string[] roleCodeNames, bool removeDuplicateData, bool includingDeleted, DateTime timePoint)
        {
            SCObjectAndRelationCollection result = new SCObjectAndRelationCollection();

            InSqlClauseBuilder roleBuilder = new InSqlClauseBuilder("R.CodeName");

            roleBuilder.AppendItem(roleCodeNames);

            if (roleBuilder.IsEmpty == false)
            {
                InSqlClauseBuilder schemaBuilder = new InSqlClauseBuilder("MA.MemberSchemaType");
                schemaBuilder.AppendItem(schemaTypes);

                WhereSqlClauseBuilder appBuilder = new WhereSqlClauseBuilder();
                appBuilder.AppendItem("A.CodeName", appCodeName);

                IConnectiveSqlClause extraBuilder = CreateStatusAndTimePointBuilder(includingDeleted, timePoint,
                                                                                    "A.", "MA.", "R.", "UC.", "SR.", "SC.");

                string resourcePath = "QueryRolesContainsMembers_Current.sql";

                if (timePoint != DateTime.MinValue && includingDeleted == true)
                {
                    resourcePath = "QueryRolesContainsMembers.sql";
                }

                string sqlTemplate = ResourceHelper.LoadStringFromResource(Assembly.GetExecutingAssembly(), string.Concat("MCS.Library.SOA.DataObjects.Security.Adapters.Templates.", resourcePath));

                ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(roleBuilder, schemaBuilder, appBuilder, extraBuilder);

                string sql = string.Format(sqlTemplate, connectiveBuilder.ToSqlString(TSqlBuilder.Instance));

                DataTable table = DbHelper.RunSqlReturnDS(sql, this.GetConnectionName()).Tables[0];

                result.LoadFromDataView(table.DefaultView, removeDuplicateData);
            }

            return(result);
        }
        /// <summary>
        /// 根据<see cref="IConnectiveSqlClause"/>指定的条件和时间点载入对象
        /// </summary>
        /// <param name="condition">表示条件的<see cref="IConnectiveSqlClause"/></param>
        /// <returns>一个<see cref="DESchemaObjectCollection"/>,包含条件指定的对象。</returns>
        public DEEntityInstanceBaseCollection Load(IConnectiveSqlClause condition)
        {
            //var timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);

            DEEntityInstanceBaseCollection result = new DEEntityInstanceBaseCollection();

            if (condition.IsEmpty == false)
            {
                ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(condition);

                using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
                {
                    VersionedObjectAdapterHelper.Instance.FillData(GetMappingInfo().TableName, connectiveBuilder, this.GetConnectionName(),
                                                                   reader =>
                    {
                        result.LoadFromDataReader(reader);
                    });
                }
            }

            return(result);
        }
        /// <summary>
        /// 根据<see cref="IConnectiveSqlClause"/>指定的条件和时间点载入对象
        /// </summary>
        /// <param name="condition">表示条件的<see cref="IConnectiveSqlClause"/></param>
        /// <param name="timePoint">时间点 - 或 - <see cref="DateTime.MinValue"/>表示当前时间</param>
        /// <returns>一个<see cref="SchemaObjectCollection"/>,包含条件指定的对象。</returns>
        public SchemaObjectCollection Load(IConnectiveSqlClause condition, DateTime timePoint)
        {
            var timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);

            SchemaObjectCollection result = new SchemaObjectCollection();

            if (condition.IsEmpty == false)
            {
                ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(condition, timePointBuilder);

                using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
                {
                    VersionedObjectAdapterHelper.Instance.FillData(GetMappingInfo().TableName, connectiveBuilder, this.GetConnectionName(),
                                                                   view =>
                    {
                        result.LoadFromDataView(view);
                    });
                }
            }

            return(result);
        }
Exemple #33
0
        public static PC.SchemaObjectCollection QuerySchemaObjectsById(string[] pIds)
        {
            if (pIds == null)
            {
                throw new ArgumentNullException("pIds");
            }

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("Status", (int)SchemaObjectStatus.Normal);

            InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("ID");

            inBuilder.AppendItem(pIds);

            ConnectiveSqlClauseCollection connBuilder = new ConnectiveSqlClauseCollection();

            connBuilder.Add(builder);
            connBuilder.Add(inBuilder);

            return(PC.Adapters.SchemaObjectAdapter.Instance.Load(connBuilder));
        }
        private object BuildWhere()
        {
            DbConnectionMappingContext.ClearAllMappings();

            FormQueryCondition queryCondition = new FormQueryCondition()
            {
                Subject               = this.Request.QueryString["sfSubject"],
                CreateTimeBegin       = GetRequestData <DateTime>("sfStart", DateTime.MinValue),
                CreateTimeEnd         = GetRequestData <DateTime>("sfEnd", DateTime.MinValue),
                DraftDepartmentName   = this.Request.QueryString["sfDept"] ?? string.Empty,
                CurrentUsersName      = this.Request.QueryString["sfApplicant"] ?? string.Empty,
                ApplicationName       = this.Request.QueryString[sfAppName.ClientID],
                ProgramName_SinoOcean = this.Request.QueryString[sfProgramName.ClientID]
            };

            WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(queryCondition,
                                                                                      new AdjustConditionValueDelegate(AdjustQueryConditionValue));

            //申请部门
            if (string.IsNullOrEmpty(queryCondition.DraftDepartmentName) == false)
            {
                builder.AppendItem("CONTAINS(DRAFT_DEPARTMENT_NAME," + GetFullTextParameter(queryCondition.DraftDepartmentName) + ")", "", "", true);
            }

            var allConditions = new ConnectiveSqlClauseCollection(builder);

            //if (MostSupervisor == false || NormalSupervisior == false)
            //{
            //    //检查是否具有分类授权
            //    WfApplicationAuthCollection authInfo = WfApplicationAuthAdapter.Instance.GetUserApplicationAuthInfo(DeluxeIdentity.Current.User);
            //    var builder2 = authInfo.GetApplicationAndProgramBuilder("APPLICATION_NAME", "PROGRAM_NAME");
            //    allConditions.Add(builder2);
            //}

            string whereCondition = allConditions.ToSqlString(TSqlBuilder.Instance);

            return(whereCondition);
        }
Exemple #35
0
        /// <summary>
        /// 读取需要停止的频道
        /// </summary>
        /// <param name="leadTime">多长时间之内没有节目</param>
        /// <returns></returns>
        public AMSChannelCollection LoadNeedStopChannels(TimeSpan leadTime)
        {
            InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("OuterC.State");

            inBuilder.AppendItem(
                AMSChannelState.Running.ToString(),
                AMSChannelState.Starting.ToString(),
                AMSChannelState.Stopping.ToString());

            //得到从现在开始到leadTime时间段内,需要启动的节目
            WhereSqlClauseBuilder startTimeBuilder = new WhereSqlClauseBuilder();

            startTimeBuilder.AppendItem("E.StartTime", "GETUTCDATE()", ">=", true);
            startTimeBuilder.AppendItem("E.StartTime",
                                        string.Format("DATEADD(second, {0}, GETUTCDATE())", (int)leadTime.TotalSeconds),
                                        "<", true);

            //得到还没有结束的节目
            WhereSqlClauseBuilder endTimeBuilder = new WhereSqlClauseBuilder();

            endTimeBuilder.AppendItem("E.EndTime", "GETUTCDATE()", ">", true);
            endTimeBuilder.AppendItem("E.EndTime",
                                      string.Format("DATEADD(second, {0}, GETUTCDATE())", (int)leadTime.TotalSeconds),
                                      "<=", true);

            ConnectiveSqlClauseCollection connective = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or,
                                                                                         startTimeBuilder, endTimeBuilder);

            //子查询,表示在未来一段时间内需要播放的节目
            string subSql = string.Format("SELECT C.ID FROM AMS.Channels C INNER JOIN AMS.EventsChannels EC ON C.ID = EC.ChannelID INNER JOIN AMS.Events E ON EC.EventID = E.ID WHERE {0}",
                                          connective.ToSqlString(TSqlBuilder.Instance));

            string sql = string.Format("SELECT * FROM AMS.Channels OuterC WHERE {0} AND OuterC.ID NOT IN ({1})",
                                       inBuilder.ToSqlStringWithInOperator(TSqlBuilder.Instance),
                                       subSql);

            return(this.QueryData(sql));
        }
Exemple #36
0
        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));
                }
            }));
        }
        /// <summary>
        /// 载入指定对象的双向关系
        /// </summary>
        /// <param name="ids">对象的ID</param>
        /// <returns></returns>
        public static SCRelationObjectCollection LoadFullRelations(string[] ids)
        {
            if (ids == null || ids.Length == 0)
            {
                throw new ArgumentNullException("ids");
            }

            var idsParent = new InSqlClauseBuilder("ParentID");

            idsParent.AppendItem(ids);

            var idsChild = new InSqlClauseBuilder("ObjectID");

            idsChild.AppendItem(ids);

            var idConditions = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or, idsParent, idsChild);

            var builder = new WhereSqlClauseBuilder();

            builder.AppendItem("Status", (int)SchemaObjectStatus.Normal);

            return(Adapters.SchemaRelationObjectAdapter.Instance.Load(new ConnectiveSqlClauseCollection(idConditions, builder), DateTime.MinValue));
        }
Exemple #38
0
        /// <summary>
        /// 载入管理单元Schema
        /// </summary>
        /// <param name="condition">包含查询条件的<see cref="IConnectiveSqlClause"/></param>
        /// <param name="timePoint">时间点</param>
        /// <param name="includingDeleted">是否包含删除的</param>
        /// <returns></returns>
        internal SchemaObjectCollection LoadAUSchema(IConnectiveSqlClause condition, bool normalOnly, DateTime timePoint)
        {
            //TODO:测试
            string sql = @"SELECT O.* FROM SC.SchemaObject O INNER JOIN SC.AUSchemaSnapshot S
ON O.ID = S.ID AND O.VersionStartTime = S.VersionStartTime AND O.SchemaType = S.SchemaType
 WHERE 1=1 AND ";

            var timeCondition1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "S.");
            var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "O.");


            SchemaObjectCollection result = new SchemaObjectCollection();

            ConnectiveSqlClauseCollection allConditions = new ConnectiveSqlClauseCollection(timeCondition1, timeCondition2, condition);

            if (normalOnly)
            {
                allConditions.Add(new WhereSqlClauseBuilder().NormalFor("O.Status"));
            }

            sql += allConditions.ToSqlString(TSqlBuilder.Instance);
            return(LoadSchemaObjects(sql));
        }
		/// <summary>
		/// 根据下级名称,载入指定的管理单元
		/// </summary>
		/// <param name="name">下级名称</param>
		/// <param name="parentID">父级ID</param>
		/// <param name="childSchemaType">子级Schema类型</param>
		/// <param name="normalOnly">是否仅包含正常对象</param>
		/// <param name="timePoint">时间点</param>
		/// <returns></returns>
		public SchemaObjectCollection LoadAUByChildName(string name, string parentID, string childSchemaType, bool normalOnly, DateTime timePoint)
		{
			string sql = @"SELECT O.* FROM SC.SchemaObject O 
INNER JOIN SC.AdminUnitSnapshot S ON O.ID = S.ID AND O.VersionStartTime = S.VersionStartTime AND O.SchemaType = S.SchemaType 
INNER JOIN SC.SchemaRelationObjects R ON O.ID = R.ObjectID AND O.SchemaType = R.ChildSchemaType
WHERE 1=1 AND ";

			var timeCondition1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "S.");
			var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "O.");
			var timeCondition3 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "R.");

			WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
			where.AppendItem("R.ParentID", parentID);
			where.AppendItem("S.Name", name);
			where.AppendItem("R.ChildSchemaType", childSchemaType);

			if (normalOnly)
				where.NormalFor("R.Status").NormalFor("O.Status");

			sql += new ConnectiveSqlClauseCollection(timeCondition1, timeCondition2, timeCondition3, where).ToSqlString(TSqlBuilder.Instance);

			return LoadSchemaObjects(sql);
		}
        protected void dataSourceMain_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {
            var allConditions = new ConnectiveSqlClauseCollection(this.DeluxeSearch.GetCondition());

            var condition = this.CurrentAdvancedSearchCondition;

            WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(condition);

            string categoryID = Request.QueryString["categoryID"];

            if (!string.IsNullOrEmpty(categoryID))
            {
                DECategory dcg = CategoryAdapter.Instance.GetByID(categoryID);

                dcg.FullPath += "%";

                builder.AppendItem("CodeName", dcg.FullPath, string.Empty, "${DataField}$ like ${Data}$");
            }

            allConditions.Add(builder);

            this.dataSourceMain.Condition = allConditions;
        }
Exemple #41
0
        /// <summary>
        /// 填充IN子句
        /// </summary>
        /// <param name="connectiveBuilder"></param>
        /// <param name="condition"></param>
        /// <param name="mapping"></param>
        /// <param name="ignoreDefaultValue"></param>
        /// <param name="acv"></param>
        /// <param name="ignoreProperties">需要忽略的属性</param>
        private static void FillInSqlClauseBuilderFromMapping(
            ConnectiveSqlClauseCollection connectiveBuilder,
            object condition,
            IEnumerable <InConditionMappingItem> mapping,
            bool ignoreDefaultValue,
            AdjustConditionValueDelegate acv,
            string[] ignoreProperties)
        {
            foreach (InConditionMappingItem item in mapping)
            {
                if (Array.Exists <string>(ignoreProperties, target => (string.Compare(target, item.PropertyName, true) == 0)) == false)
                {
                    object data = GetValueFromObject(item, condition);

                    if (data != null)
                    {
                        InSqlClauseBuilder builder = new InSqlClauseBuilder(item.DataFieldName);

                        if (data is IEnumerable && data.GetType().IsPrimitive == false)
                        {
                            foreach (object dataItem in (IEnumerable)data)
                            {
                                DoAdjustValueAndAppendItem(dataItem, item, ignoreDefaultValue, acv,
                                                           (adJustedData) => builder.AppendItem(item.IsExpression, adJustedData));
                            }
                        }
                        else
                        {
                            DoAdjustValueAndAppendItem(data, item, ignoreDefaultValue, acv,
                                                       (adJustedData) => builder.AppendItem(item.IsExpression, adJustedData));
                        }

                        connectiveBuilder.Add(builder);
                    }
                }
            }
        }
Exemple #42
0
        protected override void OnBuildQueryCondition(QueryCondition qc)
        {
            qc.FromClause   = FromClause;
            qc.SelectFields = SelectFields;
            if (string.IsNullOrEmpty(this.orderBy))
            {
                qc.OrderByClause = this.DefaultOrderBy;
            }
            else
            {
                qc.OrderByClause = orderBy;
            }
            base.OnBuildQueryCondition(qc);

            var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O.");

            builder.AppendItem(ParentIdField, parentId);
            InnerBuildWhere(builder);

            var schemaCondition1 = DataSourceUtil.SchemaTypeCondition("R.ChildSchemaType", this.ChildSchemaTypes);
            var schemaCondition2 = DataSourceUtil.SchemaTypeCondition("R.ParentSchemaType", this.ParentSchemaTypes);

            var allConditions = new ConnectiveSqlClauseCollection(builder, timeCondition, timeCondition2, schemaCondition1, schemaCondition2);

            if (string.IsNullOrEmpty(qc.WhereClause))
            {
                qc.WhereClause = allConditions.ToSqlString(TSqlBuilder.Instance);
            }
            else
            {
                qc.WhereClause = allConditions.ToSqlString(TSqlBuilder.Instance) + " AND (" + qc.WhereClause + ")";
            }
        }
Exemple #43
0
        /// <summary>
        /// 根据Container来加载UserAndContainerSnapshot的信息
        /// </summary>
        /// <param name="containerID"></param>
        /// <param name="timePoint"></param>
        /// <returns></returns>
        public SameContainerUserAndContainerSnapshotCollection LoadByContainerID(string containerID, DateTime timePoint)
        {
            containerID.CheckStringIsNullOrEmpty("containerID");

            ConnectiveSqlClauseCollection timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);

            WhereSqlClauseBuilder whereBuilder = new WhereSqlClauseBuilder();

            whereBuilder.AppendItem("ContainerID", containerID);

            ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(whereBuilder, timePointBuilder);

            string sql = string.Format("SELECT * FROM {0} WHERE {1}",
                                       this.GetLoadingTableName(timePoint), connectiveBuilder.ToSqlString(TSqlBuilder.Instance));

            SameContainerUserAndContainerSnapshotCollection result = new SameContainerUserAndContainerSnapshotCollection();

            using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
            {
                using (IDataReader reader = DbHelper.RunSqlReturnDR(sql, this.GetConnectionName()))
                {
                    while (reader.Read())
                    {
                        UserAndContainerSnapshot item = new UserAndContainerSnapshot();

                        ORMapping.DataReaderToObject(reader, item);

                        if (result.ContainsKey(item.UserID) == false)
                        {
                            result.Add(item);
                        }
                    }
                }
            }

            return(result);
        }
Exemple #44
0
        /// <summary>
        /// 用户是否在Acl中
        /// </summary>
        /// <param name="process"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public static bool IsUserInAcl(this IWfProcess process, IUser user)
        {
            bool result = false;

            if (OguUser.IsNotNullOrEmpty(user))
            {
                InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("RESOURCE_ID");

                inBuilder.AppendItem(process.ResourceID, process.ID);

                WhereSqlClauseBuilder whereBuilder = new WhereSqlClauseBuilder();

                whereBuilder.AppendItem("OBJECT_TYPE", "Users");
                whereBuilder.AppendItem("OBJECT_ID", user.ID);

                ConnectiveSqlClauseCollection connective = new ConnectiveSqlClauseCollection(inBuilder, whereBuilder);

                WfAclItemCollection aclItems = WfAclAdapter.Instance.LoadByBuilder(connective);

                result = aclItems.Count > 0;
            }

            return(result);
        }
		/// <summary>
		/// 获取一个或多个终端节点的父机构
		/// </summary>
		/// <param name="timePoint">时间点</param>
		/// <param name="terminalIds">终结点ID的数组</param>
		/// <returns>表示对象ID,和容器ID的关系。</returns>
		public IEnumerable<System.Collections.Generic.KeyValuePair<string, string>> GetOwnerships(DateTime timePoint, string[] terminalIds)
		{
			string sql = @"SELECT R.ObjectID,R.ParentID FROM 
SC.SchemaRelationObjectsSnapshot R
WHERE ";
			InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("R.ObjectID");
			inBuilder.AppendItem(terminalIds);

			WhereSqlClauseBuilder whereBuilder = new WhereSqlClauseBuilder();

			var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "R.");

			whereBuilder.AppendItem("R.Status", (int)SchemaObjectStatus.Normal);
			whereBuilder.AppendItem("R.ParentSchemaType", "Organizations");

			ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(inBuilder, whereBuilder, timeCondition);

			sql += connectiveBuilder.ToSqlString(TSqlBuilder.Instance) + " ORDER BY R.ObjectID ASC";
			var ds = DbHelper.RunSqlReturnDS(sql, this.GetConnectionName());
			foreach (System.Data.DataRow row in ds.Tables[0].Rows)
			{
				yield return new System.Collections.Generic.KeyValuePair<string, string>(row["ObjectID"] as string, row["ParentID"] as string);
			}
		}
Exemple #46
0
        private IConnectiveSqlClause GetCommonCondition()
        {
            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            builder.AppendItem("SEND_TO_USER", DeluxeIdentity.CurrentUser.ID);

            WhereSqlClauseBuilder wBuilder1 = new WhereSqlClauseBuilder();

            wBuilder1.AppendItem("EXPIRE_TIME", "null", "is", true);
            WhereSqlClauseBuilder wBuilder2 = new WhereSqlClauseBuilder();

            wBuilder2.AppendItem("EXPIRE_TIME", "not null", "is", true);
            wBuilder2.AppendItem("EXPIRE_TIME", "getdate()", ">", true);
            ConnectiveSqlClauseCollection collection = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);

            collection.Add(wBuilder1);
            collection.Add(wBuilder2);

            WhereSqlClauseBuilder wBuilder3 = new WhereSqlClauseBuilder();

            wBuilder3.AppendItem("STATUS", TaskStatus.Yue.ToString("d"));

            ConnectiveSqlClauseCollection collection1 = new ConnectiveSqlClauseCollection(LogicOperatorDefine.And);

            collection1.Add(wBuilder3);
            collection1.Add(collection);

            ConnectiveSqlClauseCollection collection2 = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);
            WhereSqlClauseBuilder         wBuilder4   = new WhereSqlClauseBuilder();

            wBuilder4.AppendItem("STATUS", TaskStatus.Ban.ToString("d"));
            collection2.Add(collection1);
            collection2.Add(wBuilder4);

            return(new ConnectiveSqlClauseCollection(builder, collection2));
        }
Exemple #47
0
        public AURole LoadAURole(string schemaRoleID, string unitID, bool normalOnly, DateTime timePoint)
        {
            string sql = @"SELECT O.* FROM SC.SchemaObject O INNER JOIN SC.AURoleSnapshot S
ON O.ID = S.ID AND O.VersionStartTime = S.VersionStartTime AND O.SchemaType = S.SchemaType
INNER JOIN SC.SchemaMembers R ON O.ID = R.MemberID AND O.SchemaType = R.MemberSchemaType
 WHERE";

            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
            where.AppendCondition("S.SchemaRoleID", schemaRoleID);
            where.AppendCondition("R.ContainerID", unitID);
            where.NormalFor("R.Status");

            if (normalOnly)
            {
                where.NormalFor("O.Status");
            }

            var timeCondition1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "S.");
            var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "O.");

            sql += new ConnectiveSqlClauseCollection(timeCondition1, timeCondition2, where).ToSqlString(TSqlBuilder.Instance);

            return((AURole)LoadSchemaObjects(sql).FirstOrDefault());
        }
        /// <summary>
        /// 用户是否在Acl中
        /// </summary>
        /// <param name="process"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public static bool IsUserInAcl(this IWfProcess process, IUser user)
        {
            bool result = false;

            if (OguUser.IsNotNullOrEmpty(user))
            {
                InSqlClauseBuilder inBuilder = new InSqlClauseBuilder("RESOURCE_ID");

                inBuilder.AppendItem(process.ResourceID, process.ID);

                WhereSqlClauseBuilder whereBuilder = new WhereSqlClauseBuilder();

                whereBuilder.AppendItem("OBJECT_TYPE", "Users");
                whereBuilder.AppendItem("OBJECT_ID", user.ID);

                ConnectiveSqlClauseCollection connective = new ConnectiveSqlClauseCollection(inBuilder, whereBuilder);

                WfAclItemCollection aclItems = WfAclAdapter.Instance.LoadByBuilder(connective);

                result = aclItems.Count > 0;
            }

            return result;
        }
Exemple #49
0
        private SchemaObjectCollection LoadAURolesInner(string[] unitIds, string[] schemaRoleIDs, bool normalOnly, DateTime timePoint)
        {
            string sql = @"SELECT O.* FROM SC.SchemaObject O INNER JOIN SC.AURoleSnapshot S
ON O.ID = S.ID AND O.VersionStartTime = S.VersionStartTime AND O.SchemaType = S.SchemaType
INNER JOIN SC.SchemaMembers R ON O.ID = R.MemberID AND O.SchemaType = R.MemberSchemaType
 WHERE";
            IConnectiveSqlClause inBuilder = DbBuilderHelper.In("S.SchemaRoleID", schemaRoleIDs);

            IConnectiveSqlClause inBuilder2 = DbBuilderHelper.In("R.ContainerID", unitIds);

            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();

            if (normalOnly)
            {
                where.NormalFor("O.Status").NormalFor("R.Status");
            }

            var timeCondition1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "S.");
            var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint, "O.");

            sql += new ConnectiveSqlClauseCollection(timeCondition1, timeCondition2, where, inBuilder, inBuilder2).ToSqlString(TSqlBuilder.Instance);

            return(LoadSchemaObjects(sql));
        }
Exemple #50
0
        protected override void OnBuildQueryCondition(QueryCondition qc)
        {
            qc.FromClause   = TimePointContext.Current.UseCurrentTime ? "SC.SchemaUserSnapshot_Current O INNER JOIN SC.UserAndContainerSnapshot_Current R ON O.ID = R.UserID" : "SC.SchemaUserSnapshot O INNER JOIN SC.UserAndContainerSnapshot R ON O.ID = R.UserID";
            qc.SelectFields = "O.*";
            if (string.IsNullOrEmpty(this.orderBy))
            {
                qc.OrderByClause = "R.VersionStartTime DESC";
            }
            else
            {
                qc.OrderByClause = orderBy;
            }
            base.OnBuildQueryCondition(qc);

            WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

            var timeCondition1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");
            var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O.");

            builder.AppendItem("R.ContainerID", this.containerId);
            InnerBuildWhere(builder);

            builder.AppendItem("O.Status", (int)SchemaObjectStatus.Normal);
            builder.AppendItem("R.Status", (int)SchemaObjectStatus.Normal);

            var allConditions = new ConnectiveSqlClauseCollection(timeCondition1, timeCondition2, builder);

            if (string.IsNullOrEmpty(qc.WhereClause))
            {
                qc.WhereClause = allConditions.ToSqlString(TSqlBuilder.Instance);
            }
            else
            {
                qc.WhereClause = allConditions.ToSqlString(TSqlBuilder.Instance) + " AND (" + qc.WhereClause + ")";
            }
        }
		public SchemaObjectCollection LoadScopeItems(string[] ids, string scopeType, bool normalOnly, DateTime timePoint)
		{
			ids.NullCheck("ids");

			string sql = "SELECT * FROM SC.SchemaObject WHERE ";

			if (ids.Length > 0)
			{
				InSqlClauseBuilder inSql = new InSqlClauseBuilder("ID").AppendItem(ids); ;
				WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
				if (normalOnly)
					where.NormalFor("Status");

				where.AppendItem("SchemaType", scopeType);
				var timeBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);
				sql += new ConnectiveSqlClauseCollection(inSql, timeBuilder, where).ToSqlString(TSqlBuilder.Instance);

				return LoadSchemaObjects(sql);
			}
			else
			{
				return new SchemaObjectCollection();
			}
		}
Exemple #52
0
        protected override void OnBuildQueryCondition(QueryCondition qc)
        {
            base.OnBuildQueryCondition(qc);
            qc.SelectFields = SelectFields;
            qc.FromClause   = this.FromSqlClause;
            if (string.IsNullOrEmpty(qc.OrderByClause))
            {
                qc.OrderByClause = DefaultOrderByClause;
            }
            ;

            var timeCondition  = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("S.");
            var timeCondition1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("M.");

            WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
            var allConditions = new ConnectiveSqlClauseCollection(timeCondition, timeCondition1, where);

            BuildWhere(where);
            if (string.IsNullOrEmpty(qc.WhereClause) == false)
            {
                qc.WhereClause += " AND ";
            }
            qc.WhereClause += allConditions.ToSqlString(TSqlBuilder.Instance);
        }
		/// <summary>
		/// 根据condition所提供的SQL查询条件查询
		/// </summary>
		/// <param name="condition"></param>
		/// <param name="timePoint"></param>
		/// <returns></returns>
		public SCConditionCollection Load(IConnectiveSqlClause condition, DateTime timePoint)
		{
			ConnectiveSqlClauseCollection timePointBuilder = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder(timePoint);
			ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection(condition, timePointBuilder);

			string sql = string.Format("SELECT * FROM {0} WHERE {1} ORDER BY SortID",
				this.GetMappingInfo().TableName,
				connectiveBuilder.ToSqlString(TSqlBuilder.Instance));

			SCConditionCollection result = new SCConditionCollection();

			AUCommon.DoDbAction(() =>
			{
				using (DbContext context = DbContext.GetContext(this.GetConnectionName()))
				{
					using (IDataReader reader = DbHelper.RunSqlReturnDR(sql, this.GetConnectionName()))
					{
						ORMapping.DataReaderToCollection(result, reader);
					}
				}
			});

			return result;
		}
		protected void ObjectDataSourceSelecting(object sender, ObjectDataSourceSelectingEventArgs e)
		{
			if (e.ExecutingSelectCount == false)
			{
				e.InputParameters["authType"] = (WfApplicationAuthType)int.Parse(this.rdoList.SelectedValue);
				if (views.ActiveViewIndex == 1)
				{
					if (string.IsNullOrEmpty(this.lastUser.Value))
					{
						e.Cancel = true;
					}
					else
					{
						e.InputParameters["appName"] = null;
						e.InputParameters["programName"] = null;
						e.InputParameters["authType"] = WfApplicationAuthType.None;

						WfApplicationAuthCollection authInfo = WfApplicationAuthAdapter.Instance.GetUserApplicationAuthInfo(new OguUser(lastUser.Value));

						string condition = "1=2";

						if (authInfo.Count > 0)
						{
							ConnectiveSqlClauseCollection allMatch = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or);

							foreach (var item in authInfo)
							{
								WhereSqlClauseBuilder where = new WhereSqlClauseBuilder();
								where.AppendItem("APPLICATION_NAME", item.ApplicationName);
								where.AppendItem("PROGRAM_NAME", item.ProgramName);
								where.AppendItem("AUTH_TYPE", item.AuthType);
								allMatch.Add(where);
							}

							condition = allMatch.ToSqlString(TSqlBuilder.Instance);
						}
						else
						{
							e.Cancel = true;
						}

						e.InputParameters["where"] = condition;
					}
				}
			}
		}
		protected void DeluxeObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
		{
			if (e.ExecutingSelectCount == false)
			{
				WhereSqlClauseBuilder mappingbuilder = this.QueryCondition != null ? ConditionMapping.GetWhereSqlClauseBuilder(this.QueryCondition) : new WhereSqlClauseBuilder();
				WhereSqlClauseBuilder where2 = (WhereSqlClauseBuilder)new WhereSqlClauseBuilder().AppendItem("SCHEDULE_ID", DBNull.Value, "IS NOT");

				ConnectiveSqlClauseCollection all = new ConnectiveSqlClauseCollection(mappingbuilder, where2);

				this.dataSourceMain.Condition = all;
			}
		}
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			qc.FromClause = FromClause;
			qc.SelectFields = SelectFields;

			if (this.orderBy.IsNullOrEmpty())
				qc.OrderByClause = this.DefaultOrderBy;
			else
				qc.OrderByClause = orderBy;

			base.OnBuildQueryCondition(qc);

			WhereSqlClauseBuilder builder = new WhereSqlClauseBuilder();

			var timeCondition = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R.");

			var timeCondition2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("O.");

			builder.AppendItem(ParentIdField, parentId);
			builder.AppendItem<int>("R.Status", (int)SchemaObjectStatus.Normal);
			builder.AppendItem<int>("O.Status", (int)SchemaObjectStatus.Normal);

			InnerBuildWhere(builder);
			var conditionMemberCondition = DataSourceUtil.SchemaTypeCondition("R.MemberSchemaType", this.MemberSchemaTypes);
			var conditionContainerCondition = DataSourceUtil.SchemaTypeCondition("R.ContainerSchemaType", this.ContainerSchemaTypes);

			var allCondition = new ConnectiveSqlClauseCollection(builder, conditionMemberCondition, conditionMemberCondition, timeCondition, timeCondition2);

			if (string.IsNullOrEmpty(qc.WhereClause))
			{
				qc.WhereClause = allCondition.ToSqlString(TSqlBuilder.Instance);
			}
			else
			{
				qc.WhereClause = allCondition.ToSqlString(TSqlBuilder.Instance) + " AND (" + qc.WhereClause + ")";
			}
		}
		private void ExecQuery()
		{
			InitPageSize();

			bindingControl.CollectData();

			WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(QueryCondition,
				new AdjustConditionValueDelegate(AdjustQueryConditionValue));

			builder.AppendItem("UT.STATUS", (int)TaskStatus.Ban);

			//// LDM 流转中数据的获取
			//if (null != Request.QueryString["process_status"] && Request.QueryString["process_status"] == "Running")
			//    builder.AppendItem("PN.STATUS", "Running");

			////  LDM 已办结数据的获取
			//if (null != Request.QueryString["process_status"] && Request.QueryString["process_status"] == "Completed")
			//    builder.AppendItem("ISNULL(PN.STATUS,N'Completed')", "Completed");

			if (QueryCondition.ApplicationName == "全部")
			{
				QueryCondition.ApplicationName = "";
			}

			string subjectQueryString = string.Empty;

			if (string.IsNullOrEmpty(QueryCondition.TaskTitle) == false)
			{
				StringBuilder subjectSB = new StringBuilder();
				//关键词分割符为全角或半角空格
				char[] separators = new char[] { ' ', ' ' };
				string[] wordsSplitted = QueryCondition.TaskTitle.Split(separators, StringSplitOptions.RemoveEmptyEntries);
				//将关键词构造为谓词查询格式
				for (int i = 0; i < wordsSplitted.Length; i++)
				{
					if (i > 0)
					{
						subjectSB.Append(" AND ");
					}

					subjectSB.Append("\"");
					subjectSB.Append(wordsSplitted[i].Replace("\"", "\"\""));
					subjectSB.Append("\"");
				}
				subjectQueryString = string.Format("CONTAINS(TASK_TITLE,{0})", TSqlBuilder.Instance.CheckQuotationMark(subjectSB.ToString(), true));
			}

			WhereSqlClauseBuilder processStatusBuilder = new WhereSqlClauseBuilder(LogicOperatorDefine.Or);

			switch (WebUtility.GetRequestQueryString("process_status", "Running"))
			{
				case "Running":
					processStatusBuilder.AppendItem("PN.STATUS", "Running");
					processStatusBuilder.AppendItem("PN.STATUS", "Maintaining");
					break;
				case "Completed":
					processStatusBuilder.AppendItem("PN.STATUS", "Completed");
					processStatusBuilder.AppendItem("PN.STATUS", "Aborted");
					break;
			}

			ConnectiveSqlClauseCollection connectiveBuilder = new ConnectiveSqlClauseCollection();

			connectiveBuilder.Add(builder).Add(processStatusBuilder);

			if (connectiveBuilder.IsEmpty)
				whereCondition.Value = subjectQueryString;
			else if (subjectQueryString == string.Empty)
				whereCondition.Value = connectiveBuilder.ToSqlString(TSqlBuilder.Instance);
			else
				whereCondition.Value = connectiveBuilder.ToSqlString(TSqlBuilder.Instance) + " AND " + subjectQueryString;

			if (QueryCondition.DraftDepartmentName != string.Empty)
			{
				whereCondition.Value += string.Format(" AND CONTAINS(DRAFT_DEPARTMENT_NAME,'\"*"
					+ TSqlBuilder.Instance.CheckQuotationMark(QueryCondition.DraftDepartmentName, false) + "*\"')");
			}

			whereCondition.Value += string.Format(" AND SEND_TO_USER = {0}",
										   TSqlBuilder.Instance.CheckQuotationMark(DeluxeIdentity.CurrentUser.ID, true));
			LastQueryRowCount = -1;
			this.GridViewTask.PageIndex = 0;
		}
        private string BuildWhereCondition()
        {
            WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(this.Condition,
               new AdjustConditionValueDelegate(AdjustQueryConditionValue));

            builder.AppendItem("SEND_TO_USER", DeluxeIdentity.CurrentUser.ID);

            WhereSqlClauseBuilder whereExpireTime = new WhereSqlClauseBuilder(LogicOperatorDefine.Or);
            whereExpireTime.AppendItem("EXPIRE_TIME", "null", "is", true);
            whereExpireTime.AppendItem("EXPIRE_TIME", "getdate()", ">", true);

            WhereSqlClauseBuilder whereStatus = new WhereSqlClauseBuilder();
            whereStatus.AppendItem("STATUS", ((int)TaskStatus.Yue).ToString());

            var conditionGroup1 = new ConnectiveSqlClauseCollection(whereExpireTime, whereStatus);

            WhereSqlClauseBuilder whereStatus2 = new WhereSqlClauseBuilder();
            whereStatus2.AppendItem("STATUS", ((int)TaskStatus.Ban).ToString());
            //collection2.Add(collection1);
            ConnectiveSqlClauseCollection collection2 = new ConnectiveSqlClauseCollection(LogicOperatorDefine.Or, conditionGroup1, whereStatus2);

            var allConditions = new ConnectiveSqlClauseCollection(builder, collection2);
            return allConditions.ToSqlString(TSqlBuilder.Instance);
        }
		protected void ObjectDataSourceSelecting(object sender, ObjectDataSourceSelectingEventArgs e)
		{
			if (this.Condition == null)
			{
				var condition = this.CurrentAdvancedSearchCondition;

				WhereSqlClauseBuilder builder = ConditionMapping.GetWhereSqlClauseBuilder(condition);

				this.Condition = new ConnectiveSqlClauseCollection(builder, this.search1.GetCondition());
			}

			this.src1.Condition = this.Condition;
		}
		protected override void OnBuildQueryCondition(QueryCondition qc)
		{
			StringBuilder sb = new StringBuilder(1024);
			var wbP1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("P1.");
			var wbM = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("M.");
			var wbM1 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("M1.");
			var wbR2 = VersionStrategyQuerySqlBuilder.Instance.TimePointToBuilder("R2.");
			var whereM = new WhereSqlClauseBuilder();
			var whereR2 = new WhereSqlClauseBuilder();
			var mConditions = new ConnectiveSqlClauseCollection(wbM, whereM);
			var r2Conditions = new ConnectiveSqlClauseCollection(wbR2, whereR2);

			whereM.AppendItem("M.MemberID", roleId);
			whereR2.AppendItem("R2.ParentID", roleId);
			string sqlWhere = qc.WhereClause;
			if (string.IsNullOrEmpty(sqlWhere))
				sqlWhere = wbM1.ToSqlString(TSqlBuilder.Instance);
			else
				sqlWhere = "(" + sqlWhere + ") AND " + wbM1.ToSqlString(TSqlBuilder.Instance);
			sb.AppendFormat((TimePointContext.Current.UseCurrentTime ? @"(
SELECT P1.*,M1.InnerSort,M1.ContainerID as AppID
FROM SC.SchemaMembersSnapshot_Current M1
INNER JOIN SC.SchemaPermissionSnapshot_Current P1 ON M1.MemberID = P1.ID
WHERE
P1.Status = 1 AND
M1.Status = 1
AND {0}
AND {1}
AND M1.ContainerSchemaType = 'Applications' AND M1.MemberSchemaType = 'Permissions'
AND M1.ContainerID = 
(SELECT M.ContainerID FROM
SC.SchemaMembersSnapshot_Current M
WHERE
{2}
AND M.ContainerSchemaType ='Applications'
AND M.MemberSchemaType = 'Roles'
AND M.Status = 1
)

) Q1 LEFT JOIN (
--查现有的权限
SELECT *
FROM SC.SchemaRelationObjectsSnapshot_Current R2 
WHERE R2.ParentSchemaType = 'Roles'
AND R2.ChildSchemaType = 'Permissions'
AND R2.Status = 1
AND {3}
) Q2 ON Q1.ID = Q2.ObjectID"
				: @"(
SELECT P1.*,M1.InnerSort,M1.ContainerID as AppID
FROM SC.SchemaMembersSnapshot M1
INNER JOIN SC.SchemaPermissionSnapshot P1 ON M1.MemberID = P1.ID
WHERE
P1.Status = 1 AND
M1.Status = 1
AND {0}
AND {1}
AND M1.ContainerSchemaType = 'Applications' AND M1.MemberSchemaType = 'Permissions'
AND M1.ContainerID = 
(SELECT M.ContainerID FROM
SC.SchemaMembersSnapshot M
WHERE
{2}
AND M.ContainerSchemaType ='Applications'
AND M.MemberSchemaType = 'Roles'
AND M.Status = 1
)

) Q1 LEFT JOIN (
--查现有的权限
SELECT *
FROM SC.SchemaRelationObjectsSnapshot R2 
WHERE R2.ParentSchemaType = 'Roles'
AND R2.ChildSchemaType = 'Permissions'
AND R2.Status = 1
AND {3}
) Q2 ON Q1.ID = Q2.ObjectID"), sqlWhere, wbP1.ToSqlString(TSqlBuilder.Instance), mConditions.ToSqlString(TSqlBuilder.Instance), r2Conditions.ToSqlString(TSqlBuilder.Instance));

			qc.FromClause = sb.ToString();
			qc.WhereClause = "";
			if (string.IsNullOrEmpty(qc.OrderByClause))
				qc.OrderByClause = "Q1.InnerSort";
			qc.SelectFields = "Q1.*,Q2.ObjectID AS ApplyID";
			base.OnBuildQueryCondition(qc);
		}