Quellcode durchsuchen

修复oracle数据库环境数据中心查询服务查询总数(select count(*))不准确的问题

o2sword vor 5 Jahren
Ursprung
Commit
df2a7ce98f

+ 21 - 5
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/statement/ActionExecute.java

@@ -33,6 +33,8 @@ import com.x.query.core.express.statement.Runtime;
 
 class ActionExecute extends BaseAction {
 
+	private final static String[] pageKeys = { "GROUP BY", " COUNT(" };
+
 	ActionResult<Object> execute(EffectivePerson effectivePerson, String flag, Integer page, Integer size,
 			JsonElement jsonElement) throws Exception {
 
@@ -87,8 +89,10 @@ class ActionExecute extends BaseAction {
 			}
 		}
 		if (StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) {
-			query.setFirstResult((runtime.page - 1) * runtime.size);
-			query.setMaxResults(runtime.size);
+			if(isPageSql(text)) {
+				query.setFirstResult((runtime.page - 1) * runtime.size);
+				query.setMaxResults(runtime.size);
+			}
 			data = query.getResultList();
 		} else {
 			business.entityManagerContainer().beginTransaction(cls);
@@ -116,8 +120,10 @@ class ActionExecute extends BaseAction {
 			}
 		}
 		if (StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) {
-			query.setFirstResult((runtime.page - 1) * runtime.size);
-			query.setMaxResults(runtime.size);
+			if(isPageSql(statement.getData())) {
+				query.setFirstResult((runtime.page - 1) * runtime.size);
+				query.setMaxResults(runtime.size);
+			}
 			data = query.getResultList();
 		} else {
 			business.entityManagerContainer().beginTransaction(cls);
@@ -127,6 +133,16 @@ class ActionExecute extends BaseAction {
 		return data;
 	}
 
+	private boolean isPageSql(String sql){
+		sql = sql.toUpperCase().replaceAll("\\s{1,}", " ");
+		for (String key : pageKeys) {
+			if (sql.indexOf(key) > -1) {
+				return false;
+			}
+		}
+		return true;
+	}
+
 	private Class<? extends JpaObject> clazz(Business business, Statement statement) throws Exception {
 		Class<? extends JpaObject> cls = null;
 		if (StringUtils.equals(Statement.ENTITYCATEGORY_OFFICIAL, statement.getEntityCategory())
@@ -173,4 +189,4 @@ class ActionExecute extends BaseAction {
 
 	}
 
-}
+}

+ 20 - 5
o2server/x_query_assemble_designer/src/main/java/com/x/query/assemble/designer/jaxrs/statement/ActionExecuteV2.java

@@ -37,6 +37,7 @@ class ActionExecuteV2 extends BaseAction {
 
 	private static Logger logger = LoggerFactory.getLogger(ActionExecuteV2.class);
 
+	private final static String[] pageKeys = { "GROUP BY", " COUNT(" };
 	private final static String JOIN_KEY = " JOIN ";
 	private final static String JOIN_ON_KEY = " ON ";
 
@@ -137,8 +138,10 @@ class ActionExecuteV2 extends BaseAction {
 			if(Statement.MODE_COUNT.equals(mode)) {
 				data = query.getSingleResult();
 			}else{
-				query.setFirstResult((runtime.page - 1) * runtime.size);
-				query.setMaxResults(runtime.size);
+				if(isPageSql(jpql)) {
+					query.setFirstResult((runtime.page - 1) * runtime.size);
+					query.setMaxResults(runtime.size);
+				}
 				data = query.getResultList();
 			}
 		} else {
@@ -181,8 +184,10 @@ class ActionExecuteV2 extends BaseAction {
 			if(Statement.MODE_COUNT.equals(mode)) {
 				data = query.getSingleResult();
 			}else{
-				query.setFirstResult((runtime.page - 1) * runtime.size);
-				query.setMaxResults(runtime.size);
+				if(isPageSql(jpql)) {
+					query.setFirstResult((runtime.page - 1) * runtime.size);
+					query.setMaxResults(runtime.size);
+				}
 				data = query.getResultList();
 			}
 		} else {
@@ -193,6 +198,16 @@ class ActionExecuteV2 extends BaseAction {
 		return data;
 	}
 
+	private boolean isPageSql(String sql){
+		sql = sql.toUpperCase().replaceAll("\\s{1,}", " ");
+		for (String key : pageKeys) {
+			if (sql.indexOf(key) > -1) {
+				return false;
+			}
+		}
+		return true;
+	}
+
 	private Class<? extends JpaObject> clazz(Business business, Statement statement) throws Exception {
 		Class<? extends JpaObject> cls = null;
 		if (StringUtils.equals(Statement.ENTITYCATEGORY_OFFICIAL, statement.getEntityCategory())
@@ -252,4 +267,4 @@ class ActionExecuteV2 extends BaseAction {
 
 	}
 
-}
+}

+ 21 - 5
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecute.java

@@ -36,6 +36,8 @@ import com.x.query.core.express.statement.Runtime;
 
 class ActionExecute extends BaseAction {
 
+	private final static String[] pageKeys = { "GROUP BY", " COUNT(" };
+
 	ActionResult<Object> execute(EffectivePerson effectivePerson, String flag, Integer page, Integer size,
 			JsonElement jsonElement) throws Exception {
 
@@ -119,8 +121,10 @@ class ActionExecute extends BaseAction {
 				}
 			}
 			if (StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) {
-				query.setFirstResult((runtime.page - 1) * runtime.size);
-				query.setMaxResults(runtime.size);
+				if(isPageSql(text)) {
+					query.setFirstResult((runtime.page - 1) * runtime.size);
+					query.setMaxResults(runtime.size);
+				}
 				data = query.getResultList();
 			} else {
 				business.entityManagerContainer().beginTransaction(cls);
@@ -151,8 +155,10 @@ class ActionExecute extends BaseAction {
 				}
 			}
 			if (StringUtils.equalsIgnoreCase(statement.getType(), Statement.TYPE_SELECT)) {
-				query.setFirstResult((runtime.page - 1) * runtime.size);
-				query.setMaxResults(runtime.size);
+				if(isPageSql(statement.getData())) {
+					query.setFirstResult((runtime.page - 1) * runtime.size);
+					query.setMaxResults(runtime.size);
+				}
 				data = query.getResultList();
 			} else {
 				business.entityManagerContainer().beginTransaction(cls);
@@ -163,6 +169,16 @@ class ActionExecute extends BaseAction {
 		return data;
 	}
 
+	private boolean isPageSql(String sql){
+		sql = sql.toUpperCase().replaceAll("\\s{1,}", " ");
+		for (String key : pageKeys) {
+			if (sql.indexOf(key) > -1) {
+				return false;
+			}
+		}
+		return true;
+	}
+
 	@SuppressWarnings("unchecked")
 	private Class<? extends JpaObject> clazz(Business business, Statement statement) throws Exception {
 		Class<? extends JpaObject> cls = null;
@@ -210,4 +226,4 @@ class ActionExecute extends BaseAction {
 
 	}
 
-}
+}

+ 20 - 5
o2server/x_query_assemble_surface/src/main/java/com/x/query/assemble/surface/jaxrs/statement/ActionExecuteV2.java

@@ -44,6 +44,7 @@ class ActionExecuteV2 extends BaseAction {
 
 	private static Logger logger = LoggerFactory.getLogger(ActionExecuteV2.class);
 	private final static String[] keys = { "group by", "GROUP BY", "order by", "ORDER BY", "limit", "LIMIT" };
+	private final static String[] pageKeys = { "GROUP BY", " COUNT(" };
 	private final static String JOIN_KEY = " JOIN ";
 	private final static String JOIN_ON_KEY = " ON ";
 
@@ -146,8 +147,10 @@ class ActionExecuteV2 extends BaseAction {
 				if (Statement.MODE_COUNT.equals(mode)) {
 					data = query.getSingleResult();
 				} else {
-					query.setFirstResult((runtime.page - 1) * runtime.size);
-					query.setMaxResults(runtime.size);
+					if(isPageSql(jpql)) {
+						query.setFirstResult((runtime.page - 1) * runtime.size);
+						query.setMaxResults(runtime.size);
+					}
 					data = query.getResultList();
 				}
 			} else {
@@ -194,8 +197,10 @@ class ActionExecuteV2 extends BaseAction {
 				if (Statement.MODE_COUNT.equals(mode)) {
 					data = query.getSingleResult();
 				} else {
-					query.setFirstResult((runtime.page - 1) * runtime.size);
-					query.setMaxResults(runtime.size);
+					if(isPageSql(jpql)) {
+						query.setFirstResult((runtime.page - 1) * runtime.size);
+						query.setMaxResults(runtime.size);
+					}
 					data = query.getResultList();
 				}
 			} else {
@@ -207,6 +212,16 @@ class ActionExecuteV2 extends BaseAction {
 		return data;
 	}
 
+	private boolean isPageSql(String sql){
+		sql = sql.toUpperCase().replaceAll("\\s{1,}", " ");
+		for (String key : pageKeys) {
+			if (sql.indexOf(key) > -1) {
+				return false;
+			}
+		}
+		return true;
+	}
+
 	private Class<? extends JpaObject> clazz(Business business, Statement statement) throws Exception {
 		Class<? extends JpaObject> cls = null;
 		if (StringUtils.equals(Statement.ENTITYCATEGORY_OFFICIAL, statement.getEntityCategory())
@@ -356,4 +371,4 @@ class ActionExecuteV2 extends BaseAction {
 		}
 	}
 
-}
+}