mirror of
https://github.com/getrebuild/rebuild.git
synced 2024-09-20 15:35:55 +08:00
better QueryFactory
This commit is contained in:
parent
83aba856cb
commit
37fb08f0a6
2
@rbv
2
@rbv
|
@ -1 +1 @@
|
||||||
Subproject commit ad1828130b1c15b1fe290c40ef6075c74b645225
|
Subproject commit de18c98f288d147234498a99c8aad54d31febba2
|
|
@ -452,7 +452,7 @@ public class FormsBuilder extends FormsManager {
|
||||||
.append(" where ")
|
.append(" where ")
|
||||||
.append(entity.getPrimaryField().getName())
|
.append(entity.getPrimaryField().getName())
|
||||||
.append(" = ?");
|
.append(" = ?");
|
||||||
return Application.getQueryFactory().createQuery(sql.toString(), user).setParameter(1, id).record();
|
return Application.createQuery(sql.toString(), user).setParameter(1, id).record();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -73,7 +73,7 @@ public abstract class BulkOperator extends HeavyTask<Integer> {
|
||||||
entity.getPrimaryField().getName(), entity.getName(), sqlWhere);
|
entity.getPrimaryField().getName(), entity.getName(), sqlWhere);
|
||||||
|
|
||||||
// NOTE 注意没有分页
|
// NOTE 注意没有分页
|
||||||
Query query = Application.getQueryFactory().createQuery(sql, context.getOpUser());
|
Query query = Application.createQuery(sql, context.getOpUser());
|
||||||
Object[][] array = QueryHelper.readArray(query);
|
Object[][] array = QueryHelper.readArray(query);
|
||||||
Set<ID> ids = new HashSet<>();
|
Set<ID> ids = new HashSet<>();
|
||||||
for (Object[] o : array) {
|
for (Object[] o : array) {
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class ProjectConfigService extends BaseConfigurationService implements Ad
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int delete(ID projectId) {
|
public int delete(ID projectId) {
|
||||||
Object[] count = Application.createQuery(
|
Object[] count = Application.createQueryNoFilter(
|
||||||
"select count(taskId) from ProjectTask where projectId = ?")
|
"select count(taskId) from ProjectTask where projectId = ?")
|
||||||
.setParameter(1, projectId)
|
.setParameter(1, projectId)
|
||||||
.unique();
|
.unique();
|
||||||
|
@ -77,9 +77,12 @@ public class ProjectConfigService extends BaseConfigurationService implements Ad
|
||||||
|
|
||||||
// 使用模板
|
// 使用模板
|
||||||
if (useTemplate == TEMPLATE_DEFAULT) {
|
if (useTemplate == TEMPLATE_DEFAULT) {
|
||||||
ID id1 = createPlan(project.getPrimary(), Language.L("待处理"), 1000, ProjectPlanConfigService.FLOW_STATUS_START, null);
|
ID id1 = createPlan(project.getPrimary(),
|
||||||
ID id2 = createPlan(project.getPrimary(), Language.L("进行中"), 2000, ProjectPlanConfigService.FLOW_STATUS_PROCESSING, null);
|
Language.L("待处理"), 1000, ProjectPlanConfigService.FLOW_STATUS_START, null);
|
||||||
ID id3 = createPlan(project.getPrimary(), Language.L("已完成"), 3000, ProjectPlanConfigService.FLOW_STATUS_END, new ID[]{id1, id2});
|
ID id2 = createPlan(project.getPrimary(),
|
||||||
|
Language.L("进行中"), 2000, ProjectPlanConfigService.FLOW_STATUS_PROCESSING, null);
|
||||||
|
ID id3 = createPlan(project.getPrimary(),
|
||||||
|
Language.L("已完成"), 3000, ProjectPlanConfigService.FLOW_STATUS_END, new ID[]{id1, id2});
|
||||||
updateFlowNexts(id1, new ID[]{id2, id3});
|
updateFlowNexts(id1, new ID[]{id2, id3});
|
||||||
updateFlowNexts(id2, new ID[]{id1, id3});
|
updateFlowNexts(id2, new ID[]{id1, id3});
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,13 +141,13 @@ public class ProjectTaskService extends BaseTaskService {
|
||||||
*/
|
*/
|
||||||
synchronized
|
synchronized
|
||||||
private int getSeqInStatus(ID taskId, boolean desc) {
|
private int getSeqInStatus(ID taskId, boolean desc) {
|
||||||
Object[] taskStatus = Application.createQuery(
|
Object[] taskStatus = Application.createQueryNoFilter(
|
||||||
"select status,projectPlanId from ProjectTask where taskId = ?")
|
"select status,projectPlanId from ProjectTask where taskId = ?")
|
||||||
.setParameter(1, taskId)
|
.setParameter(1, taskId)
|
||||||
.unique();
|
.unique();
|
||||||
if (taskStatus == null) return 1;
|
if (taskStatus == null) return 1;
|
||||||
|
|
||||||
Object[] seq = Application.createQuery(
|
Object[] seq = Application.createQueryNoFilter(
|
||||||
"select " + (desc ? "max" : "min") + "(seq) from ProjectTask where status = ? and projectPlanId = ?")
|
"select " + (desc ? "max" : "min") + "(seq) from ProjectTask where status = ? and projectPlanId = ?")
|
||||||
.setParameter(1, taskStatus[0])
|
.setParameter(1, taskStatus[0])
|
||||||
.setParameter(2, taskStatus[1])
|
.setParameter(2, taskStatus[1])
|
||||||
|
|
|
@ -40,6 +40,7 @@ public class QueryFactory {
|
||||||
/**
|
/**
|
||||||
* @param ajql
|
* @param ajql
|
||||||
* @return
|
* @return
|
||||||
|
* @see #createQueryNoFilter(String)
|
||||||
*/
|
*/
|
||||||
public Query createQuery(String ajql) {
|
public Query createQuery(String ajql) {
|
||||||
return createQuery(ajql, UserContextHolder.getUser());
|
return createQuery(ajql, UserContextHolder.getUser());
|
||||||
|
@ -54,14 +55,6 @@ public class QueryFactory {
|
||||||
return createQuery(ajql, Application.getPrivilegesManager().createQueryFilter(user));
|
return createQuery(ajql, Application.getPrivilegesManager().createQueryFilter(user));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param ajql
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Query createQueryNoFilter(String ajql) {
|
|
||||||
return createQuery(ajql, RoleBaseQueryFilter.ALLOWED);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ajql
|
* @param ajql
|
||||||
* @param filter
|
* @param filter
|
||||||
|
@ -76,11 +69,25 @@ public class QueryFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param sql
|
* 1.无权限实体查询(无权限实体使用 #createQuery 除管理员外将查不到数据)
|
||||||
|
* 2.有权限实体查询单不应用角色(权限)
|
||||||
|
*
|
||||||
|
* @param ajql
|
||||||
|
* @return
|
||||||
|
* @see #createQuery(String)
|
||||||
|
*/
|
||||||
|
public Query createQueryNoFilter(String ajql) {
|
||||||
|
return createQuery(ajql, RoleBaseQueryFilter.ALLOWED);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 原生 SQL 查询
|
||||||
|
*
|
||||||
|
* @param rawSql
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public NativeQuery createNativeQuery(String sql) {
|
public NativeQuery createNativeQuery(String rawSql) {
|
||||||
return aPMFactory.createNativeQuery(sql)
|
return aPMFactory.createNativeQuery(rawSql)
|
||||||
.setTimeout(QUERY_TIMEOUT)
|
.setTimeout(QUERY_TIMEOUT)
|
||||||
.setSlowLoggerTime(SLOW_LOGGER_TIME);
|
.setSlowLoggerTime(SLOW_LOGGER_TIME);
|
||||||
}
|
}
|
||||||
|
@ -129,11 +136,6 @@ public class QueryFactory {
|
||||||
return createQueryNoFilter(sql).setParameter(1, recordId).unique();
|
return createQueryNoFilter(sql).setParameter(1, recordId).unique();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param recordId
|
|
||||||
* @param fields
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
private String buildUniqueSql(ID recordId, String... fields) {
|
private String buildUniqueSql(ID recordId, String... fields) {
|
||||||
Assert.notNull(recordId, "[recordId] cannot be null");
|
Assert.notNull(recordId, "[recordId] cannot be null");
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ public class FieldWriteback extends FieldAggregation {
|
||||||
} else {
|
} else {
|
||||||
String sql = String.format("select %s from %s where %s = ?",
|
String sql = String.format("select %s from %s where %s = ?",
|
||||||
targetEntity.getPrimaryField().getName(), targetFieldEntity[1], targetFieldEntity[0]);
|
targetEntity.getPrimaryField().getName(), targetFieldEntity[1], targetFieldEntity[0]);
|
||||||
Object[][] array = Application.getQueryFactory().createQueryNoFilter(sql)
|
Object[][] array = Application.createQueryNoFilter(sql)
|
||||||
.setParameter(1, operatingContext.getAnyRecord().getPrimary())
|
.setParameter(1, operatingContext.getAnyRecord().getPrimary())
|
||||||
.array();
|
.array();
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,7 @@ public class BatchOperatorQuery extends SetUser {
|
||||||
int pageNo = queryData.getIntValue("pageNo");
|
int pageNo = queryData.getIntValue("pageNo");
|
||||||
int pageSize = queryData.getIntValue("pageSize");
|
int pageSize = queryData.getIntValue("pageSize");
|
||||||
|
|
||||||
Object[][] array = Application.getQueryFactory().createQuery(sql, getUser())
|
Object[][] array = Application.createQuery(sql, getUser())
|
||||||
.setLimit(pageSize, pageNo * pageSize - pageSize)
|
.setLimit(pageSize, pageNo * pageSize - pageSize)
|
||||||
.setTimeout(60)
|
.setTimeout(60)
|
||||||
.array();
|
.array();
|
||||||
|
|
|
@ -66,11 +66,11 @@ public class DataListBuilderImpl implements DataListBuilder {
|
||||||
public JSON getJSONResult() {
|
public JSON getJSONResult() {
|
||||||
int totalRows = 0;
|
int totalRows = 0;
|
||||||
if (queryParser.isNeedReload()) {
|
if (queryParser.isNeedReload()) {
|
||||||
Object[] count = Application.getQueryFactory().createQuery(queryParser.toCountSql(), user).unique();
|
Object[] count = Application.createQuery(queryParser.toCountSql(), user).unique();
|
||||||
totalRows = ObjectUtils.toInt(count[0]);
|
totalRows = ObjectUtils.toInt(count[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Query query = Application.getQueryFactory().createQuery(queryParser.toSql(), user);
|
Query query = Application.createQuery(queryParser.toSql(), user);
|
||||||
int[] limits = queryParser.getSqlLimit();
|
int[] limits = queryParser.getSqlLimit();
|
||||||
Object[][] data = query.setLimit(limits[0], limits[1]).array();
|
Object[][] data = query.setLimit(limits[0], limits[1]).array();
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ import org.junit.jupiter.api.Test;
|
||||||
public class QueryFactoryTest extends TestSupport {
|
public class QueryFactoryTest extends TestSupport {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBaseQuery() {
|
void testBaseQuery() {
|
||||||
String sql = "select loginName from User";
|
String sql = "select loginName from User";
|
||||||
Filter filter = Application.getPrivilegesManager().createQueryFilter(SIMPLE_USER);
|
Filter filter = Application.getPrivilegesManager().createQueryFilter(SIMPLE_USER);
|
||||||
Object[][] array = Application.getQueryFactory().createQuery(sql, filter).array();
|
Object[][] array = Application.getQueryFactory().createQuery(sql, filter).array();
|
||||||
|
@ -33,7 +33,7 @@ public class QueryFactoryTest extends TestSupport {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testQueryAllDT() {
|
void testQueryAllDT() {
|
||||||
Entity allDT = MetadataHelper.getEntity(TestAllFields);
|
Entity allDT = MetadataHelper.getEntity(TestAllFields);
|
||||||
StringBuilder sql = new StringBuilder("select ");
|
StringBuilder sql = new StringBuilder("select ");
|
||||||
for (Field f : allDT.getFields()) {
|
for (Field f : allDT.getFields()) {
|
||||||
|
@ -51,8 +51,14 @@ public class QueryFactoryTest extends TestSupport {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNoUser() {
|
void testNoUser() {
|
||||||
Assertions.assertThrows(AccessDeniedException.class,
|
Assertions.assertThrows(AccessDeniedException.class,
|
||||||
() -> Application.getQueryFactory().createQuery("select loginName from User").array());
|
() -> Application.getQueryFactory().createQuery("select loginName from User").array());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void createNativeQuery() {
|
||||||
|
Object[] x = Application.getQueryFactory().createNativeQuery("select current_date").unique();
|
||||||
|
System.out.println(x[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue