コード例 #1
0
ファイル: BaseIndexer.cs プロジェクト: ztcyun/CommunityServer
        private Tuple <long, long, long> Count(string idColumn, string tenantIdColumn, string lastModifiedColumn, DateTime lastIndexed)
        {
            using (var db = new DbManager("default", 1800000))
            {
                var dataQuery = new SqlQuery(Wrapper.Table + " " + Alias)
                                .SelectCount()
                                .SelectMax(idColumn)
                                .SelectMin(idColumn);

                if (!string.IsNullOrEmpty(tenantIdColumn))
                {
                    dataQuery.InnerJoin("tenants_tenants t", Exp.EqColumns(tenantIdColumn, "t.id"))
                    .Where("t.status", TenantStatus.Active);
                }

                Wrapper.AddConditions(Alias, dataQuery);

                if (!DateTime.MinValue.Equals(lastIndexed))
                {
                    dataQuery.Where(Exp.Gt(lastModifiedColumn, lastIndexed));
                }

                try
                {
                    var data = db.ExecuteList(dataQuery).ConvertAll(r => new Tuple <long, long, long>(Convert.ToInt64(r[0]), Convert.ToInt64(r[1]), Convert.ToInt64(r[2])));

                    return(data.FirstOrDefault());
                }
                catch (Exception e)
                {
                    Logger.Error(e);
                    throw;
                }
            }
        }
コード例 #2
0
        private SqlQuery GetBaseQuery(DateTime lastIndexed)
        {
            var dataQuery          = new SqlQuery(Wrapper.Table + " " + Alias);
            var tenantIdColumn     = Wrapper.GetColumnName(ColumnTypeEnum.TenantId, Alias);
            var lastModifiedColumn = Wrapper.GetColumnName(ColumnTypeEnum.LastModified, Alias);

            if (!string.IsNullOrEmpty(tenantIdColumn))
            {
                dataQuery.InnerJoin("tenants_tenants t", Exp.EqColumns(tenantIdColumn, "t.id"))
                .Where("t.status", TenantStatus.Active);
            }


            Wrapper.AddConditions(Alias, dataQuery);

            if (!DateTime.MinValue.Equals(lastIndexed))
            {
                dataQuery.Where(Exp.Gt(lastModifiedColumn, lastIndexed));
            }

            return(dataQuery);
        }
コード例 #3
0
ファイル: BaseIndexer.cs プロジェクト: ztcyun/CommunityServer
        private void IndexAllGetData(long start, long step, string idColumn, string tenantIdColumn, string lastModifiedColumn, DateTime lastIndexed)
        {
            List <Wrapper> data;

            var dataQuery = new SqlQuery(Wrapper.Table + " " + Alias)
                            .Select(Wrapper.GetColumnNames(Alias))
                            .Where(Exp.Between(idColumn, start, start + step));

            if (!string.IsNullOrEmpty(tenantIdColumn))
            {
                dataQuery.InnerJoin("tenants_tenants t", Exp.EqColumns(tenantIdColumn, "t.id"))
                .Where("t.status", (int)TenantStatus.Active);
            }

            Wrapper.AddConditions(Alias, dataQuery);

            AddJoins(Wrapper, dataQuery, Alias);

            if (!DateTime.MinValue.Equals(lastIndexed))
            {
                dataQuery.Where(Exp.Gt(lastModifiedColumn, lastIndexed));
            }

            using (var db = new DbManager("default", 1800000))
            {
                db.ExecuteNonQuery("SET SESSION group_concat_max_len = 4294967295;");
                data = db.ExecuteList(dataQuery).ConvertAll(Wrapper.GetDataConverter());
            }

            try
            {
                FactoryIndexer <T> .Index(data.Cast <T>().ToList());
            }
            catch (Exception e)
            {
                Logger.Error(e);
                throw;
            }
        }