Răsfoiți Sursa

修复SQL分页

AE86 2 ani în urmă
părinte
comite
e72d3a6cfd

+ 11 - 10
dbsyncer-connector/src/main/java/org/dbsyncer/connector/mysql/MysqlConnector.java

@@ -2,6 +2,7 @@ package org.dbsyncer.connector.mysql;
 
 import org.dbsyncer.common.util.StringUtil;
 import org.dbsyncer.connector.config.ReaderConfig;
+import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 import org.dbsyncer.connector.model.PageSql;
 import org.dbsyncer.connector.util.PrimaryKeyUtil;
@@ -17,27 +18,27 @@ public final class MysqlConnector extends AbstractDatabaseConnector {
 
     @Override
     public String getPageSql(PageSql config) {
-        final String quotation = buildSqlWithQuotation();
+        final String quotation = config.getQuotation();
         final List<String> primaryKeys = config.getPrimaryKeys();
-        // select * from test.`my_user` where `id` > ? and `uid` > ? order by `id`,`uid` limit ?
+        // select * from test.`my_user` where `id` > ? and `uid` > ? order by `id`,`uid` limit ?,?
         StringBuilder sql = new StringBuilder(config.getQuerySql());
-        boolean blank = StringUtil.isBlank(config.getSqlBuilderConfig().getQueryFilter());
-        sql.append(blank ? " WHERE " : " AND ");
-        PrimaryKeyUtil.buildSql(sql, primaryKeys, quotation, " AND ", " > ? ", blank);
         sql.append(" ORDER BY ");
         PrimaryKeyUtil.buildSql(sql, primaryKeys, quotation, ",", "", true);
-        sql.append(" LIMIT ?");
+        sql.append(DatabaseConstant.MYSQL_PAGE_SQL);
         return sql.toString();
     }
 
     @Override
     public String getPageCursorSql(PageSql config) {
-        final String quotation = buildSqlWithQuotation();
+        final String quotation = config.getQuotation();
         final List<String> primaryKeys = config.getPrimaryKeys();
-        // select * from test.`my_user` order by `id`,`uid` limit ?
-        StringBuilder sql = new StringBuilder(config.getQuerySql()).append(" ORDER BY ");
+        // select * from test.`my_user` where `id` > ? and `uid` > ? order by `id`,`uid` limit ?,?
+        StringBuilder sql = new StringBuilder(config.getQuerySql());
+        boolean hasFilter = StringUtil.isNotBlank(config.getSqlBuilderConfig().getQueryFilter());
+        PrimaryKeyUtil.buildSql(sql, primaryKeys, quotation, " AND ", " > ? ", !hasFilter);
+        sql.append(" ORDER BY ");
         PrimaryKeyUtil.buildSql(sql, primaryKeys, quotation, ",", "", true);
-        sql.append(" LIMIT ?");
+        sql.append(DatabaseConstant.MYSQL_PAGE_SQL);
         return sql.toString();
     }
 

+ 11 - 11
dbsyncer-connector/src/main/java/org/dbsyncer/connector/postgresql/PostgreSQLConnector.java

@@ -4,6 +4,7 @@ import org.dbsyncer.common.util.StringUtil;
 import org.dbsyncer.connector.config.CommandConfig;
 import org.dbsyncer.connector.config.DatabaseConfig;
 import org.dbsyncer.connector.config.ReaderConfig;
+import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 import org.dbsyncer.connector.enums.TableTypeEnum;
 import org.dbsyncer.connector.model.PageSql;
@@ -26,28 +27,27 @@ public final class PostgreSQLConnector extends AbstractDatabaseConnector {
 
     @Override
     public String getPageSql(PageSql config) {
-        final String quotation = buildSqlWithQuotation();
+        final String quotation = config.getQuotation();
         final List<String> primaryKeys = config.getPrimaryKeys();
-        // select * from test.`my_user` where `id` > ? and `uid` > ? order by `id`,`uid` limit ?
+        // select * from test."my_user" where "id" > ? and "uid" > ? order by "id","uid" limit ? OFFSET ?
         StringBuilder sql = new StringBuilder(config.getQuerySql());
-        boolean blank = StringUtil.isBlank(config.getSqlBuilderConfig().getQueryFilter());
-        sql.append(blank ? " WHERE " : " AND ");
-        PrimaryKeyUtil.buildSql(sql, primaryKeys, quotation, " AND ", " > ? ", blank);
         sql.append(" ORDER BY ");
-        // id,uid
         PrimaryKeyUtil.buildSql(sql, primaryKeys, quotation, ",", "", true);
-        sql.append(" LIMIT ?");
+        sql.append(DatabaseConstant.POSTGRESQL_PAGE_SQL);
         return sql.toString();
     }
 
     @Override
     public String getPageCursorSql(PageSql config) {
-        final String quotation = buildSqlWithQuotation();
+        final String quotation = config.getQuotation();
         final List<String> primaryKeys = config.getPrimaryKeys();
-        // select * from test.`my_user` order by `id`,`uid` limit ?
-        StringBuilder sql = new StringBuilder(config.getQuerySql()).append(" ORDER BY ");
+        // select * from test."my_user" where "id" > ? and "uid" > ? order by "id","uid" limit ? OFFSET ?
+        StringBuilder sql = new StringBuilder(config.getQuerySql());
+        boolean hasFilter = StringUtil.isNotBlank(config.getSqlBuilderConfig().getQueryFilter());
+        PrimaryKeyUtil.buildSql(sql, primaryKeys, quotation, " AND ", " > ? ", !hasFilter);
+        sql.append(" ORDER BY ");
         PrimaryKeyUtil.buildSql(sql, primaryKeys, quotation, ",", "", true);
-        sql.append(" LIMIT ?");
+        sql.append(DatabaseConstant.POSTGRESQL_PAGE_SQL);
         return sql.toString();
     }