示例#1
0
        private static DbQuery BuildSql(QueryCondition conditions)
        {
            var userQuery = new DbQuery();
            var suQuery   = new DbQuery();
            var typesL1   = new List <Type> {
                typeof(User), typeof(District), typeof(UserLoginInfo)
            };
            var typesL2 = new List <Type> {
                typesL1[0], typeof(SchoolUser), typeof(School)
            };

            userQuery.Sql.AppendFormat(@"select {0} from [{1}] 
                                         left join [{2}] on [{1}].{3} = [{2}].{4}
                                         left join [{5}] on [{5}].[{6}] = [{1}].[{7}]"
                                       , Orm.ComplexResultSetQuery(typesL1), typesL1[0].Name, typesL1[1].Name,
                                       User.DISTRICT_REF_FIELD, District.ID_FIELD, typesL1[2].Name, UserLoginInfo.ID_FIELD, User.ID_FIELD);
            conditions.BuildSqlWhere(userQuery, typesL1[0].Name);

            suQuery.Sql.AppendFormat(@"select {0} from [User]
                                       join SchoolUser on [User].[{1}] = SchoolUser.[{2}] and [User].[{7}] = SchoolUser.[{8}]
                                       join School on SchoolUser.[{3}] = School.[{4}] and SchoolUser.[{8}] = School.[{9}]
                                       left join UserLoginInfo on UserLoginInfo.[{5}] = [User].[{6}]", Orm.ComplexResultSetQuery(typesL2)
                                     , User.SIS_USER_ID_FIELD, SchoolUser.USER_REF_FIELD, SchoolUser.SCHOOL_REF_FIELD, School.LOCAL_ID_FIELD
                                     , UserLoginInfo.ID_FIELD, User.ID_FIELD, User.DISTRICT_REF_FIELD, SchoolUser.DISTRICT_REF_FIELD, School.DISTRICT_REF_FIELD);
            conditions.BuildSqlWhere(suQuery, typesL1[0].Name);
            return(new DbQuery(new List <DbQuery> {
                userQuery, suQuery
            }));
        }
示例#2
0
        public IList <Group> GetAll(QueryCondition conditions = null, string filter = null)
        {
            var query      = new DbQuery();
            var groupTName = typeof(Group).Name;
            var querySet   = string.Format(" [{0}].*, (select count(*) from [{3}] where [{3}].[{4}] = [{1}]) as {2}"
                                           , groupTName, Group.ID_FIELD, Group.STUDENT_COUNT_FIELD
                                           , typeof(StudentGroup).Name, StudentGroup.GROUP_REF_FIELD);

            query.Sql.AppendFormat(Orm.SELECT_FORMAT, querySet, groupTName);
            if (conditions != null)
            {
                conditions.BuildSqlWhere(query, groupTName);
            }

            if (!string.IsNullOrEmpty(filter))
            {
                query.Sql.AppendFormat(" AND (");
                string[] sl = filter.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < sl.Length; i++)
                {
                    query.Parameters.Add("@filter" + i, string.Format(FILTER_FORMAT, sl[i]));
                    query.Sql.AppendFormat($" [{typeof(Group).Name}].[{nameof(Group.Name)}] like @filter" + i + " OR");
                }
                query.Sql.Remove(query.Sql.Length - 2, 2);
                query.Sql.AppendFormat(")");
            }

            return(ReadMany <Group>(query));
        }
        protected DbQuery SelectSupplementalAnnouncement(QueryCondition condition, int?callerId = null)
        {
            var dbQuery = new DbQuery();

            var ownerQ = new DbQuery();

            if (!callerId.HasValue)
            {
                ownerQ.Sql.Append("cast(0 as bit)");
            }
            else
            {
                ownerQ.Sql
                .AppendFormat(Orm.SELECT_FORMAT, "cast(case when count(*) > 0 then 1 else 0 end as bit)",
                              nameof(ClassTeacher))
                .Append(" Where ")
                .Append($"[{nameof(ClassTeacher)}].[{nameof(ClassTeacher.PersonRef)}] = {callerId}")
                .Append(" and ")
                .Append($"[{nameof(ClassTeacher)}].[{nameof(ClassTeacher.ClassRef)}]").Append("=")
                .Append($"[{SupplementalAnnouncement.VW_SUPPLEMENTAL_ANNOUNCEMENT}].[{nameof(SupplementalAnnouncement.ClassRef)}]");
            }

            var selectSet = $"{SupplementalAnnouncement.VW_SUPPLEMENTAL_ANNOUNCEMENT}.*, ({ownerQ.Sql}) as IsOwner";

            dbQuery.Sql.AppendFormat(Orm.SELECT_FORMAT, selectSet, SupplementalAnnouncement.VW_SUPPLEMENTAL_ANNOUNCEMENT);
            condition.BuildSqlWhere(dbQuery, SupplementalAnnouncement.VW_SUPPLEMENTAL_ANNOUNCEMENT);
            return(dbQuery);
        }
示例#4
0
        public override IList <ClassAnnouncement> GetAnnouncements(QueryCondition conds, int callerId)
        {
            var dbQuery = SelectClassAnnouncements(ClassAnnouncement.VW_CLASS_ANNOUNCEMENT_NAME, callerId);

            conds.BuildSqlWhere(dbQuery, ClassAnnouncement.VW_CLASS_ANNOUNCEMENT_NAME);
            FilterClassAnnouncementByCaller(dbQuery, callerId);
            return(ReadMany <ClassAnnouncement>(dbQuery));
        }
        public override IList <AdminAnnouncement> GetAnnouncements(QueryCondition conds, int callerId)
        {
            var dbQuery = SelectAdminAnnouncement(callerId);

            conds.BuildSqlWhere(dbQuery, AdminAnnouncement.VW_ADMIN_ANNOUNCEMENT_NAME);
            dbQuery = FilterAdminAnnouncementByCaller(dbQuery, callerId);
            return(ReadMany <AdminAnnouncement>(dbQuery));
        }
示例#6
0
        private DbQuery BuildClassStandardQuery(IEnumerable <string> columnsResList, QueryCondition classCondition)
        {
            var res = new DbQuery();

            res.Sql.AppendFormat(@"select {0}
                                   from ClassStandard 
                                   join [Class] on [Class].[{1}] = ClassStandard.[{2}] or ClassStandard.[{2}] = Class.[{3}]"
                                 , columnsResList.Select(x => "ClassStandard.[" + x + "]").JoinString(",")
                                 , Class.ID_FIELD, ClassStandard.CLASS_REF_FIELD, Class.COURSE_REF_FIELD);
            classCondition.BuildSqlWhere(res, "Class");
            return(res);
        }
示例#7
0
        public static DbQuery BuildGetDeveloperQuery(QueryCondition conds)
        {
            var developertype = typeof(Developer);
            var resulSet      = Orm.ComplexResultSetQuery(new List <Type> {
                developertype, typeof(User)
            });
            DbQuery query = new DbQuery();

            query.Sql.AppendFormat(@"select {0} 
                        from [Developer]
                        join [User] on [User].Id = [Developer].[Id] ", resulSet);
            conds.BuildSqlWhere(query, developertype.Name);
            return(query);
        }
示例#8
0
        private DbQuery BuildSelectQuery(QueryCondition condition)
        {
            var dbQuery = new DbQuery();

            condition = condition ?? new AndQueryCondition();
            //TODO make a view later
            dbQuery.Sql.Append($" Select [{nameof(Standard)}].*,  ")
            // calculating is deepest(or leaf) standard
            .Append($" cast((case when exists(Select * From  [{nameof(Standard)}]  innerSt ")
            .Append($" Where innerSt.{nameof(Standard.ParentStandardRef)} = [{nameof(Standard)}].{nameof(Standard.Id)}) ")
            .Append($" then 0 else 1 end) as bit) as [{nameof(Standard.IsDeepest)}] ")
            .Append($" From [{nameof(Standard)}] ");
            condition.BuildSqlWhere(dbQuery, nameof(Standard));
            return(dbQuery);
        }
示例#9
0
        public void Delete(QueryCondition annCondition, QueryCondition classCondition, bool notInClassStandard)
        {
            var cStandardDbQuery = BuildClassStandardQuery(new List <string> {
                ClassStandard.STANDARD_REF_FIELD
            }, classCondition);
            var dbQuery = new DbQuery();

            dbQuery.Sql.AppendFormat(@"delete from AnnouncementStandard ");
            annCondition.BuildSqlWhere(dbQuery, "AnnouncementStandard");
            dbQuery.Sql.AppendFormat(" and AnnouncementStandard.[{0}] {2} in ({1})"
                                     , AnnouncementStandard.STANDARD_REF_FIELD, cStandardDbQuery.Sql, notInClassStandard ? "not" : "");
            foreach (var parameter in cStandardDbQuery.Parameters)
            {
                dbQuery.Parameters.Add(parameter);
            }
            ExecuteNonQueryParametrized(dbQuery.Sql.ToString(), dbQuery.Parameters);
        }
示例#10
0
        protected DbQuery SelectLessonPlan(QueryCondition condition, int?callerId = null)
        {
            var dbQuery         = new DbQuery();
            var classTeacherSql = "cast(0 as bit)";

            if (callerId.HasValue)
            {
                classTeacherSql = string.Format(@"(select count(*) from [{0}] where [{0}].[{1}] = {2}  and [{0}].[{3}] = [{4}].[{5}])",
                                                "ClassTeacher", ClassTeacher.PERSON_REF_FIELD, callerId, ClassTeacher.CLASS_REF_FIELD,
                                                LessonPlan.VW_LESSON_PLAN_NAME, LessonPlan.CLASS_REF_FIELD);

                classTeacherSql = $"cast(case when {nameof(LessonPlan.GalleryOwnerRef)} = {callerId} or {classTeacherSql} > 0 then 1 else 0 end as bit)";
            }

            var selectSet = $"{LessonPlan.VW_LESSON_PLAN_NAME}.*, {classTeacherSql} as IsOwner";

            dbQuery.Sql.AppendFormat(Orm.SELECT_FORMAT, selectSet, LessonPlan.VW_LESSON_PLAN_NAME);
            condition.BuildSqlWhere(dbQuery, LessonPlan.VW_LESSON_PLAN_NAME);
            return(dbQuery);
        }