浏览代码

格式化

James 1 年之前
父节点
当前提交
c1a3b6f6c5

+ 41 - 36
src/main/java/com/jfinal/plugin/activerecord/dialect/AnsiSqlDialect.java

@@ -43,16 +43,16 @@ import com.jfinal.plugin.activerecord.builder.TimestampProcessedRecordBuilder;
  * A clever person solves a problem. A wise person avoids it.
  */
 public class AnsiSqlDialect extends Dialect {
-	
+
 	public AnsiSqlDialect() {
 		this.modelBuilder = TimestampProcessedModelBuilder.me;
 		this.recordBuilder = TimestampProcessedRecordBuilder.me;
 	}
-	
+
 	public String forTableBuilderDoBuild(String tableName) {
 		return "select * from " + tableName + " where 1 = 2";
 	}
-	
+
 	public void forModelSave(Table table, Map<String, Object> attrs, StringBuilder sql, List<Object> paras) {
 		sql.append("insert into ").append(table.getName()).append('(');
 		StringBuilder temp = new StringBuilder(") values(");
@@ -70,7 +70,7 @@ public class AnsiSqlDialect extends Dialect {
 		}
 		sql.append(temp.toString()).append(')');
 	}
-	
+
 	public String forModelDeleteById(Table table) {
 		String[] pKeys = table.getPrimaryKey();
 		StringBuilder sql = new StringBuilder(45);
@@ -85,7 +85,7 @@ public class AnsiSqlDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public void forModelUpdate(Table table, Map<String, Object> attrs, Set<String> modifyFlag, StringBuilder sql, List<Object> paras) {
 		sql.append("update ").append(table.getName()).append(" set ");
 		String[] pKeys = table.getPrimaryKey();
@@ -108,7 +108,7 @@ public class AnsiSqlDialect extends Dialect {
 			paras.add(attrs.get(pKeys[i]));
 		}
 	}
-	
+
 	public String forModelFindById(Table table, String columns) {
 		StringBuilder sql = new StringBuilder("select ").append(columns).append(" from ");
 		sql.append(table.getName());
@@ -122,11 +122,11 @@ public class AnsiSqlDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public String forDbFindById(String tableName, String[] pKeys) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		StringBuilder sql = new StringBuilder("select * from ").append(tableName).append(" where ");
 		for (int i=0; i<pKeys.length; i++) {
 			if (i > 0) {
@@ -136,11 +136,11 @@ public class AnsiSqlDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public String forDbDeleteById(String tableName, String[] pKeys) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		StringBuilder sql = new StringBuilder("delete from ").append(tableName).append(" where ");
 		for (int i=0; i<pKeys.length; i++) {
 			if (i > 0) {
@@ -150,16 +150,16 @@ public class AnsiSqlDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public void forDbSave(String tableName, String[] pKeys, Record record, StringBuilder sql, List<Object> paras) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		sql.append("insert into ");
 		sql.append(tableName).append('(');
 		StringBuilder temp = new StringBuilder();
 		temp.append(") values(");
-		
+
 		for (Entry<String, Object> e: record.getColumns().entrySet()) {
 			if (paras.size() > 0) {
 				sql.append(", ");
@@ -171,14 +171,14 @@ public class AnsiSqlDialect extends Dialect {
 		}
 		sql.append(temp.toString()).append(')');
 	}
-	
+
 	public void forDbUpdate(String tableName, String[] pKeys, Object[] ids, Record record, StringBuilder sql, List<Object> paras) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		// Record 新增支持 modifyFlag
 		Set<String> modifyFlag = CPI.getModifyFlag(record);
-		
+
 		sql.append("update ").append(tableName).append(" set ");
 		for (Entry<String, Object> e: record.getColumns().entrySet()) {
 			String colName = e.getKey();
@@ -199,18 +199,18 @@ public class AnsiSqlDialect extends Dialect {
 			paras.add(ids[i]);
 		}
 	}
-	
+
 	/**
 	 * SELECT * FROM subject t1 WHERE (SELECT count(*) FROM subject t2 WHERE t2.id < t1.id AND t2.key = '123') > = 10 AND (SELECT count(*) FROM subject t2 WHERE t2.id < t1.id AND t2.key = '123') < 20 AND t1.key = '123'
 	 */
 	public String forPaginate(int pageNumber, int pageSize, StringBuilder findSql) {
 		throw new ActiveRecordException("Your should not invoke this method because takeOverDbPaginate(...) will take over it.");
 	}
-	
+
 	public boolean isTakeOverDbPaginate() {
 		return true;
 	}
-	
+
 	@SuppressWarnings("rawtypes")
 	public Page<Record> takeOverDbPaginate(Connection conn, int pageNumber, int pageSize, Boolean isGroupBySql, String totalRowSql, StringBuilder findSql, Object... paras) throws SQLException {
 		// String totalRowSql = "select count(*) " + replaceOrderBy(sqlExceptSelect);
@@ -219,7 +219,7 @@ public class AnsiSqlDialect extends Dialect {
 		if (isGroupBySql == null) {
 			isGroupBySql = size > 1;
 		}
-		
+
 		long totalRow;
 		if (isGroupBySql) {
 			totalRow = size;
@@ -229,7 +229,7 @@ public class AnsiSqlDialect extends Dialect {
 		if (totalRow == 0) {
 			return new Page<Record>(new ArrayList<Record>(0), pageNumber, pageSize, 0, 0);
 		}
-		
+
 		int totalPage = (int) (totalRow / pageSize);
 		if (totalRow % pageSize != 0) {
 			totalPage++;
@@ -237,7 +237,7 @@ public class AnsiSqlDialect extends Dialect {
 		if (pageNumber > totalPage) {
 			return new Page<Record>(new ArrayList<Record>(0), pageNumber, pageSize, totalPage, (int)totalRow);
 		}
-		
+
 		// StringBuilder sql = new StringBuilder();
 		// sql.append(select).append(" ").append(sqlExceptSelect);
 		PreparedStatement pst = conn.prepareStatement(findSql.toString(), ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
@@ -245,7 +245,7 @@ public class AnsiSqlDialect extends Dialect {
 			pst.setObject(i + 1, paras[i]);
 		}
 		ResultSet rs = pst.executeQuery();
-		
+
 		// move the cursor to the start
 		int offset = pageSize * (pageNumber - 1);
 		for (int i=0; i<offset; i++) {
@@ -253,13 +253,13 @@ public class AnsiSqlDialect extends Dialect {
 				break;
 			}
 		}
-		
+
 		List<Record> list = buildRecord(rs, pageSize);
 		if (rs != null) rs.close();
 		if (pst != null) pst.close();
 		return new Page<Record>(list, pageNumber, pageSize, totalPage, (int) totalRow);
 	}
-	
+
 	private List<Record> buildRecord(ResultSet rs, int pageSize) throws SQLException {
 		List<Record> result = new ArrayList<Record>();
 		ResultSetMetaData rsmd = rs.getMetaData();
@@ -289,7 +289,7 @@ public class AnsiSqlDialect extends Dialect {
 		}
 		return result;
 	}
-	
+
 	private void buildLabelNamesAndTypes(ResultSetMetaData rsmd, String[] labelNames, int[] types) throws SQLException {
 		for (int i=1; i<labelNames.length; i++) {
 			// 备忘:getColumnLabel 获取 sql as 子句指定的名称而非字段真实名称
@@ -297,11 +297,11 @@ public class AnsiSqlDialect extends Dialect {
 			types[i] = rsmd.getColumnType(i);
 		}
 	}
-	
+
 	public boolean isTakeOverModelPaginate() {
 		return true;
 	}
-	
+
 	@SuppressWarnings({"rawtypes", "unchecked"})
 	public Page<? extends Model> takeOverModelPaginate(Connection conn, Class<? extends Model> modelClass, int pageNumber, int pageSize, Boolean isGroupBySql, String totalRowSql, StringBuilder findSql, Object... paras) throws Exception {
 		// String totalRowSql = "select count(*) " + replaceOrderBy(sqlExceptSelect);
@@ -310,7 +310,7 @@ public class AnsiSqlDialect extends Dialect {
 		if (isGroupBySql == null) {
 			isGroupBySql = size > 1;
 		}
-		
+
 		long totalRow;
 		if (isGroupBySql) {
 			totalRow = size;
@@ -320,7 +320,7 @@ public class AnsiSqlDialect extends Dialect {
 		if (totalRow == 0) {
 			return new Page(new ArrayList(0), pageNumber, pageSize, 0, 0);	// totalRow = 0;
 		}
-		
+
 		int totalPage = (int) (totalRow / pageSize);
 		if (totalRow % pageSize != 0) {
 			totalPage++;
@@ -328,7 +328,7 @@ public class AnsiSqlDialect extends Dialect {
 		if (pageNumber > totalPage) {
 			return new Page(new ArrayList(0), pageNumber, pageSize, totalPage, (int)totalRow);
 		}
-		
+
 		// --------
 		// StringBuilder sql = new StringBuilder();
 		// sql.append(select).append(" ").append(sqlExceptSelect);
@@ -337,7 +337,7 @@ public class AnsiSqlDialect extends Dialect {
 			pst.setObject(i + 1, paras[i]);
 		}
 		ResultSet rs = pst.executeQuery();
-		
+
 		// move the cursor to the start
 		int offset = pageSize * (pageNumber - 1);
 		for (int i=0; i<offset; i++) {
@@ -345,13 +345,13 @@ public class AnsiSqlDialect extends Dialect {
 				break;
 			}
 		}
-		
+
 		List list = buildModel(rs, modelClass, pageSize);
 		if (rs != null) rs.close();
 		if (pst != null) pst.close();
 		return new Page(list, pageNumber, pageSize, totalPage, (int)totalRow);
 	}
-	
+
 	@SuppressWarnings({"rawtypes", "unchecked"})
 	public final <T> List<T> buildModel(ResultSet rs, Class<? extends Model> modelClass, int pageSize) throws SQLException, ReflectiveOperationException {
 		List<T> result = new ArrayList<T>();
@@ -382,12 +382,17 @@ public class AnsiSqlDialect extends Dialect {
 		}
 		return result;
 	}
-	
+
 	public void fillStatement(PreparedStatement pst, List<Object> paras) throws SQLException {
 		fillStatementHandleDateType(pst, paras);
 	}
-	
+
 	public void fillStatement(PreparedStatement pst, Object... paras) throws SQLException {
 		fillStatementHandleDateType(pst, paras);
 	}
 }
+
+
+
+
+

+ 40 - 38
src/main/java/com/jfinal/plugin/activerecord/dialect/Dialect.java

@@ -40,32 +40,32 @@ import com.jfinal.plugin.activerecord.builder.KeepByteAndShortRecordBuilder;
  * Dialect.
  */
 public abstract class Dialect {
-	
+
 	// 指示 Generator、ModelBuilder、RecordBuilder 是否保持住 Byte、Short 类型
 	protected boolean keepByteAndShort = false;
 	protected ModelBuilder modelBuilder = ModelBuilder.me;
 	protected RecordBuilder recordBuilder = RecordBuilder.me;
-	
+
 	// Methods for common
 	public abstract String forTableBuilderDoBuild(String tableName);
 	public abstract String forPaginate(int pageNumber, int pageSize, StringBuilder findSql);
-	
+
 	// Methods for Model
 	public abstract String forModelFindById(Table table, String columns);
 	public abstract String forModelDeleteById(Table table);
 	public abstract void forModelSave(Table table, Map<String, Object> attrs, StringBuilder sql, List<Object> paras);
 	public abstract void forModelUpdate(Table table, Map<String, Object> attrs, Set<String> modifyFlag, StringBuilder sql, List<Object> paras);
-	
+
 	// Methods for DbPro. Do not delete the String[] pKeys parameter, the element of pKeys needs to trim()
 	public abstract String forDbFindById(String tableName, String[] pKeys);
 	public abstract String forDbDeleteById(String tableName, String[] pKeys);
 	public abstract void forDbSave(String tableName, String[] pKeys, Record record, StringBuilder sql, List<Object> paras);
 	public abstract void forDbUpdate(String tableName, String[] pKeys, Object[] ids, Record record, StringBuilder sql, List<Object> paras);
-	
+
 	public String forFindAll(String tableName) {
 		return "select * from " + tableName;
 	}
-	
+
 	/**
 	 * 指示 Generator、ModelBuilder、RecordBuilder 是否保持住 Byte、Short 类型
 	 */
@@ -92,22 +92,22 @@ public abstract class Dialect {
 		}
 		return this;
 	}
-	
+
 	/**
 	 * 指示 MetaBuilder 生成的 ColumnMeta.javaType 是否保持住 Byte、Short 类型
-	 * 进而 BaseModelBuilder 生成针对 Byte、Short 类型的获取方法: 
+	 * 进而 BaseModelBuilder 生成针对 Byte、Short 类型的获取方法:
 	 * getByte(String)、getShort(String)
 	 */
 	public boolean isKeepByteAndShort() {
 		return keepByteAndShort;
 	}
-	
+
 	/**
 	 * 配置自定义 ModelBuilder
-	 * 
+	 *
 	 * 通过继承扩展 ModelBuilder 可以对 JDBC 到 java 数据类型进行定制化转换
 	 * 不同数据库从 JDBC 到 java 数据类型的映射关系有所不同
-	 * 
+	 *
 	 * 此外,还可以通过改变 ModelBuilder.buildLabelNamesAndTypes()
 	 * 方法逻辑,实现下划线字段名转驼峰变量名的功能
 	 */
@@ -115,13 +115,13 @@ public abstract class Dialect {
 		this.modelBuilder = modelBuilder;
 		return this;
 	}
-	
+
 	/**
 	 * 配置自定义 RecordBuilder
-	 * 
+	 *
 	 * 通过继承扩展 RecordBuilder 可以对 JDBC 到 java 数据类型进行定制化转换
 	 * 不同数据库从 JDBC 到 java 数据类型的映射关系有所不同
-	 * 
+	 *
 	 * 此外,还可以通过改变 RecordBuilder.buildLabelNamesAndTypes()
 	 * 方法逻辑,实现下划线字段名转驼峰变量名的功能
 	 */
@@ -129,25 +129,25 @@ public abstract class Dialect {
 		this.recordBuilder = recordBuilder;
 		return this;
 	}
-	
+
 	@SuppressWarnings("rawtypes")
 	public <T> List<T> buildModelList(ResultSet rs, Class<? extends Model> modelClass) throws SQLException, ReflectiveOperationException {
 		return modelBuilder.build(rs, modelClass);
 	}
-	
+
 	@SuppressWarnings("rawtypes")
 	public <T> void eachModel(ResultSet rs, Class<? extends Model> modelClass, Function<T, Boolean> func) throws SQLException, ReflectiveOperationException {
 		modelBuilder.build(rs, modelClass, func);
 	}
-	
+
 	public List<Record> buildRecordList(Config config, ResultSet rs) throws SQLException {
 		return recordBuilder.build(config, rs);
 	}
-	
+
 	public void eachRecord(Config config, ResultSet rs, Function<Record, Boolean> func) throws SQLException {
 		recordBuilder.build(config, rs, func);
 	}
-	
+
 	/**
 	 * 用于获取 Model.save() 以后自动生成的主键值,可通过覆盖此方法实现更精细的控制
 	 * 目前只有 PostgreSqlDialect,覆盖过此方法
@@ -175,11 +175,11 @@ public abstract class Dialect {
 		}
 		rs.close();
 	}
-	
+
 	/**
 	 * mysql 数据库的  bigint unsigned 对应的 java 类型为 BigInteger
 	 * 但是 rs.getObject(1) 返回值为 Long 型,造成 model.save() 以后
-	 * model.getId() 时的类型转换异常 
+	 * model.getId() 时的类型转换异常
 	 */
 	protected void processGeneratedBigIntegerKey(Model<?> model, String pKey, Object v) {
 		if (v instanceof BigInteger) {
@@ -191,7 +191,7 @@ public abstract class Dialect {
 			model.set(pKey, v);
 		}
 	}
-	
+
 	/**
 	 * 用于获取 Db.save(tableName, record) 以后自动生成的主键值,可通过覆盖此方法实现更精细的控制
 	 * 目前只有 PostgreSqlDialect,覆盖过此方法
@@ -207,44 +207,44 @@ public abstract class Dialect {
 		}
 		rs.close();
 	}
-	
+
 	public boolean isOracle() {
 		return false;
 	}
-	
+
 	public boolean isTakeOverDbPaginate() {
 		return false;
 	}
-	
+
 	public Page<Record> takeOverDbPaginate(Connection conn, int pageNumber, int pageSize, Boolean isGroupBySql, String totalRowSql, StringBuilder findSql, Object... paras) throws SQLException {
 		throw new RuntimeException("You should implements this method in " + getClass().getName());
 	}
-	
+
 	public boolean isTakeOverModelPaginate() {
 		return false;
 	}
-	
+
 	@SuppressWarnings("rawtypes")
 	public Page takeOverModelPaginate(Connection conn, Class<? extends Model> modelClass, int pageNumber, int pageSize, Boolean isGroupBySql, String totalRowSql, StringBuilder findSql, Object... paras) throws Exception {
 		throw new RuntimeException("You should implements this method in " + getClass().getName());
 	}
-	
+
 	public void fillStatement(PreparedStatement pst, List<Object> paras) throws SQLException {
 		for (int i=0, size=paras.size(); i<size; i++) {
 			pst.setObject(i + 1, paras.get(i));
 		}
 	}
-	
+
 	public void fillStatement(PreparedStatement pst, Object... paras) throws SQLException {
 		for (int i=0; i<paras.length; i++) {
 			pst.setObject(i + 1, paras[i]);
 		}
 	}
-	
+
 	public String getDefaultPrimaryKey() {
 		return "id";
 	}
-	
+
 	public boolean isPrimaryKey(String colName, String[] pKeys) {
 		for (String pKey : pKeys) {
 			if (colName.equalsIgnoreCase(pKey)) {
@@ -253,14 +253,14 @@ public abstract class Dialect {
 		}
 		return false;
 	}
-	
+
 	/**
 	 * 一、forDbXxx 系列方法中若有如下两种情况之一,则需要调用此方法对 pKeys 数组进行 trim():
 	 * 1:方法中调用了 isPrimaryKey(...):为了防止在主键相同情况下,由于前后空串造成 isPrimaryKey 返回 false
 	 * 2:为了防止 tableName、colName 与数据库保留字冲突的,添加了包裹字符的:为了防止串包裹区内存在空串
 	 *   如 mysql 使用的 "`" 字符以及 PostgreSql 使用的 "\"" 字符
 	 * 不满足以上两个条件之一的 forDbXxx 系列方法也可以使用 trimPrimaryKeys(...) 方法让 sql 更加美观,但不是必须
-	 * 
+	 *
 	 * 二、forModelXxx 由于在映射时已经trim(),故不再需要调用此方法
 	 */
 	public void trimPrimaryKeys(String[] pKeys) {
@@ -268,18 +268,18 @@ public abstract class Dialect {
 			pKeys[i] = pKeys[i].trim();
 		}
 	}
-	
+
 	protected static class Holder {
 		// "order\\s+by\\s+[^,\\s]+(\\s+asc|\\s+desc)?(\\s*,\\s*[^,\\s]+(\\s+asc|\\s+desc)?)*";
 		private static final Pattern ORDER_BY_PATTERN = Pattern.compile(
 			"order\\s+by\\s+[^,\\s]+(\\s+asc|\\s+desc)?(\\s*,\\s*[^,\\s]+(\\s+asc|\\s+desc)?)*",
 			Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
 	}
-	
+
 	public String replaceOrderBy(String sql) {
 		return Holder.ORDER_BY_PATTERN.matcher(sql).replaceAll("");
 	}
-	
+
 	/**
 	 * fillStatement 时处理日期类型
 	 */
@@ -301,7 +301,7 @@ public abstract class Dialect {
 			}
 		}
 	}
-	
+
 	/**
 	 * fillStatement 时处理日期类型
 	 */
@@ -323,7 +323,7 @@ public abstract class Dialect {
 			}
 		}
 	}
-	
+
 	/**
 	 * 为分页方法生成查询 totalRow 值的 sql
 	 * @param select sql 语句的 select 部分
@@ -340,3 +340,5 @@ public abstract class Dialect {
 
 
 
+
+

+ 7 - 0
src/main/java/com/jfinal/plugin/activerecord/dialect/H2Dialect.java

@@ -271,3 +271,10 @@ public class H2Dialect extends Dialect {
         return true;
     }
 }
+
+
+
+
+
+
+

+ 5 - 0
src/main/java/com/jfinal/plugin/activerecord/dialect/InformixDialect.java

@@ -191,3 +191,8 @@ public class InformixDialect extends Dialect {
 
 
 
+
+
+
+
+

+ 18 - 18
src/main/java/com/jfinal/plugin/activerecord/dialect/MysqlDialect.java

@@ -28,15 +28,15 @@ import com.jfinal.plugin.activerecord.Table;
  * MysqlDialect.
  */
 public class MysqlDialect extends Dialect {
-	
+
 	public String forTableBuilderDoBuild(String tableName) {
 		return "select * from `" + tableName + "` where 1 = 2";
 	}
-	
+
 	public String forFindAll(String tableName) {
 		return "select * from `" + tableName + "`";
 	}
-	
+
 	public void forModelSave(Table table, Map<String, Object> attrs, StringBuilder sql, List<Object> paras) {
 		sql.append("insert into `").append(table.getName()).append("`(");
 		StringBuilder temp = new StringBuilder(") values(");
@@ -54,7 +54,7 @@ public class MysqlDialect extends Dialect {
 		}
 		sql.append(temp.toString()).append(')');
 	}
-	
+
 	public String forModelDeleteById(Table table) {
 		String[] pKeys = table.getPrimaryKey();
 		StringBuilder sql = new StringBuilder(45);
@@ -69,7 +69,7 @@ public class MysqlDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public void forModelUpdate(Table table, Map<String, Object> attrs, Set<String> modifyFlag, StringBuilder sql, List<Object> paras) {
 		sql.append("update `").append(table.getName()).append("` set ");
 		String[] pKeys = table.getPrimaryKey();
@@ -92,7 +92,7 @@ public class MysqlDialect extends Dialect {
 			paras.add(attrs.get(pKeys[i]));
 		}
 	}
-	
+
 	public String forModelFindById(Table table, String columns) {
 		StringBuilder sql = new StringBuilder("select ");
 		columns = columns.trim();
@@ -108,7 +108,7 @@ public class MysqlDialect extends Dialect {
 				sql.append('`').append(arr[i].trim()).append('`');
 			}
 		}
-		
+
 		sql.append(" from `");
 		sql.append(table.getName());
 		sql.append("` where ");
@@ -121,11 +121,11 @@ public class MysqlDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public String forDbFindById(String tableName, String[] pKeys) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		StringBuilder sql = new StringBuilder("select * from `").append(tableName).append("` where ");
 		for (int i=0; i<pKeys.length; i++) {
 			if (i > 0) {
@@ -135,11 +135,11 @@ public class MysqlDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public String forDbDeleteById(String tableName, String[] pKeys) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		StringBuilder sql = new StringBuilder("delete from `").append(tableName).append("` where ");
 		for (int i=0; i<pKeys.length; i++) {
 			if (i > 0) {
@@ -149,19 +149,19 @@ public class MysqlDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	/**
 	 * Do not delete the String[] pKeys parameter, the element of pKeys needs to trim()
 	 */
 	public void forDbSave(String tableName, String[] pKeys, Record record, StringBuilder sql, List<Object> paras) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);	// important
-		
+
 		sql.append("insert into `");
 		sql.append(tableName).append("`(");
 		StringBuilder temp = new StringBuilder();
 		temp.append(") values(");
-		
+
 		for (Entry<String, Object> e: record.getColumns().entrySet()) {
 			if (paras.size() > 0) {
 				sql.append(", ");
@@ -173,14 +173,14 @@ public class MysqlDialect extends Dialect {
 		}
 		sql.append(temp.toString()).append(')');
 	}
-	
+
 	public void forDbUpdate(String tableName, String[] pKeys, Object[] ids, Record record, StringBuilder sql, List<Object> paras) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		// Record 新增支持 modifyFlag
 		Set<String> modifyFlag = CPI.getModifyFlag(record);
-		
+
 		sql.append("update `").append(tableName).append("` set ");
 		for (Entry<String, Object> e: record.getColumns().entrySet()) {
 			String colName = e.getKey();
@@ -201,7 +201,7 @@ public class MysqlDialect extends Dialect {
 			paras.add(ids[i]);
 		}
 	}
-	
+
 	public String forPaginate(int pageNumber, int pageSize, StringBuilder findSql) {
 		int offset = pageSize * (pageNumber - 1);
 		findSql.append(" limit ").append(offset).append(", ").append(pageSize);	// limit can use one or two '?' to pass paras

+ 26 - 22
src/main/java/com/jfinal/plugin/activerecord/dialect/OracleDialect.java

@@ -32,16 +32,16 @@ import com.jfinal.plugin.activerecord.builder.TimestampProcessedRecordBuilder;
  * OracleDialect.
  */
 public class OracleDialect extends Dialect {
-	
+
 	public OracleDialect() {
 		this.modelBuilder = TimestampProcessedModelBuilder.me;
 		this.recordBuilder = TimestampProcessedRecordBuilder.me;
 	}
-	
+
 	public String forTableBuilderDoBuild(String tableName) {
 		return "select * from " + tableName + " where rownum < 1";
 	}
-	
+
 	// insert into table (id,name) values(seq.nextval, ?)
 	public void forModelSave(Table table, Map<String, Object> attrs, StringBuilder sql, List<Object> paras) {
 		sql.append("insert into ").append(table.getName()).append('(');
@@ -67,7 +67,7 @@ public class OracleDialect extends Dialect {
 		}
 		sql.append(temp.toString()).append(')');
 	}
-	
+
 	public String forModelDeleteById(Table table) {
 		String[] pKeys = table.getPrimaryKey();
 		StringBuilder sql = new StringBuilder(45);
@@ -82,7 +82,7 @@ public class OracleDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public void forModelUpdate(Table table, Map<String, Object> attrs, Set<String> modifyFlag, StringBuilder sql, List<Object> paras) {
 		sql.append("update ").append(table.getName()).append(" set ");
 		String[] pKeys = table.getPrimaryKey();
@@ -105,7 +105,7 @@ public class OracleDialect extends Dialect {
 			paras.add(attrs.get(pKeys[i]));
 		}
 	}
-	
+
 	public String forModelFindById(Table table, String columns) {
 		StringBuilder sql = new StringBuilder("select ").append(columns).append(" from ");
 		sql.append(table.getName());
@@ -119,11 +119,11 @@ public class OracleDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public String forDbFindById(String tableName, String[] pKeys) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		StringBuilder sql = new StringBuilder("select * from ").append(tableName).append(" where ");
 		for (int i=0; i<pKeys.length; i++) {
 			if (i > 0) {
@@ -133,11 +133,11 @@ public class OracleDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public String forDbDeleteById(String tableName, String[] pKeys) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		StringBuilder sql = new StringBuilder("delete from ").append(tableName).append(" where ");
 		for (int i=0; i<pKeys.length; i++) {
 			if (i > 0) {
@@ -147,16 +147,16 @@ public class OracleDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public void forDbSave(String tableName, String[] pKeys, Record record, StringBuilder sql, List<Object> paras) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		sql.append("insert into ");
 		sql.append(tableName).append('(');
 		StringBuilder temp = new StringBuilder();
 		temp.append(") values(");
-		
+
 		int count = 0;
 		for (Entry<String, Object> e: record.getColumns().entrySet()) {
 			String colName = e.getKey();
@@ -165,7 +165,7 @@ public class OracleDialect extends Dialect {
 				temp.append(", ");
 			}
 			sql.append(colName);
-			
+
 			Object value = e.getValue();
 			if (value instanceof String && isPrimaryKey(colName, pKeys) && ((String)value).endsWith(".nextval")) {
 			    temp.append(value);
@@ -176,14 +176,14 @@ public class OracleDialect extends Dialect {
 		}
 		sql.append(temp.toString()).append(')');
 	}
-	
+
 	public void forDbUpdate(String tableName, String[] pKeys, Object[] ids, Record record, StringBuilder sql, List<Object> paras) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		// Record 新增支持 modifyFlag
 		Set<String> modifyFlag = CPI.getModifyFlag(record);
-		
+
 		sql.append("update ").append(tableName).append(" set ");
 		for (Entry<String, Object> e: record.getColumns().entrySet()) {
 			String colName = e.getKey();
@@ -204,7 +204,7 @@ public class OracleDialect extends Dialect {
 			paras.add(ids[i]);
 		}
 	}
-	
+
 	public String forPaginate(int pageNumber, int pageSize, StringBuilder findSql) {
 		int start = (pageNumber - 1) * pageSize;
 		int end = pageNumber * pageSize;
@@ -215,20 +215,24 @@ public class OracleDialect extends Dialect {
 		ret.append(" where table_alias.rownum_ > ").append(start);
 		return ret.toString();
 	}
-	
+
 	public boolean isOracle() {
 		return true;
 	}
-	
+
 	public void fillStatement(PreparedStatement pst, List<Object> paras) throws SQLException {
 		fillStatementHandleDateType(pst, paras);
 	}
-	
+
 	public void fillStatement(PreparedStatement pst, Object... paras) throws SQLException {
 		fillStatementHandleDateType(pst, paras);
 	}
-	
+
 	public String getDefaultPrimaryKey() {
 		return "ID";
 	}
 }
+
+
+
+

+ 30 - 25
src/main/java/com/jfinal/plugin/activerecord/dialect/PostgreSqlDialect.java

@@ -35,20 +35,20 @@ import com.jfinal.plugin.activerecord.builder.TimestampProcessedRecordBuilder;
  * PostgreSqlDialect.
  */
 public class PostgreSqlDialect extends Dialect {
-	
+
 	public PostgreSqlDialect() {
 		this.modelBuilder = TimestampProcessedModelBuilder.me;
 		this.recordBuilder = TimestampProcessedRecordBuilder.me;
 	}
-	
+
 	public String forTableBuilderDoBuild(String tableName) {
 		return "select * from \"" + tableName + "\" where 1 = 2";
 	}
-	
+
 	public String forFindAll(String tableName) {
 		return "select * from \"" + tableName + "\"";
 	}
-	
+
 	public void forModelSave(Table table, Map<String, Object> attrs, StringBuilder sql, List<Object> paras) {
 		sql.append("insert into \"").append(table.getName()).append("\"(");
 		StringBuilder temp = new StringBuilder(") values(");
@@ -66,7 +66,7 @@ public class PostgreSqlDialect extends Dialect {
 		}
 		sql.append(temp.toString()).append(')');
 	}
-	
+
 	public String forModelDeleteById(Table table) {
 		String[] pKeys = table.getPrimaryKey();
 		StringBuilder sql = new StringBuilder(45);
@@ -81,7 +81,7 @@ public class PostgreSqlDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public void forModelUpdate(Table table, Map<String, Object> attrs, Set<String> modifyFlag, StringBuilder sql, List<Object> paras) {
 		sql.append("update \"").append(table.getName()).append("\" set ");
 		String[] pKeys = table.getPrimaryKey();
@@ -104,7 +104,7 @@ public class PostgreSqlDialect extends Dialect {
 			paras.add(attrs.get(pKeys[i]));
 		}
 	}
-	
+
 	public String forModelFindById(Table table, String columns) {
 		StringBuilder sql = new StringBuilder("select ");
 		columns = columns.trim();
@@ -120,7 +120,7 @@ public class PostgreSqlDialect extends Dialect {
 				sql.append('\"').append(arr[i].trim()).append('\"');
 			}
 		}
-		
+
 		sql.append(" from \"");
 		sql.append(table.getName());
 		sql.append("\" where ");
@@ -133,11 +133,11 @@ public class PostgreSqlDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public String forDbFindById(String tableName, String[] pKeys) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		StringBuilder sql = new StringBuilder("select * from \"").append(tableName).append("\" where ");
 		for (int i=0; i<pKeys.length; i++) {
 			if (i > 0) {
@@ -147,11 +147,11 @@ public class PostgreSqlDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public String forDbDeleteById(String tableName, String[] pKeys) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		StringBuilder sql = new StringBuilder("delete from \"").append(tableName).append("\" where ");
 		for (int i=0; i<pKeys.length; i++) {
 			if (i > 0) {
@@ -161,16 +161,16 @@ public class PostgreSqlDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public void forDbSave(String tableName, String[] pKeys, Record record, StringBuilder sql, List<Object> paras) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		sql.append("insert into \"");
 		sql.append(tableName).append("\"(");
 		StringBuilder temp = new StringBuilder();
 		temp.append(") values(");
-		
+
 		for (Entry<String, Object> e: record.getColumns().entrySet()) {
 			if (paras.size() > 0) {
 				sql.append(", ");
@@ -182,14 +182,14 @@ public class PostgreSqlDialect extends Dialect {
 		}
 		sql.append(temp.toString()).append(')');
 	}
-	
+
 	public void forDbUpdate(String tableName, String[] pKeys, Object[] ids, Record record, StringBuilder sql, List<Object> paras) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		// Record 新增支持 modifyFlag
 		Set<String> modifyFlag = CPI.getModifyFlag(record);
-		
+
 		sql.append("update \"").append(tableName).append("\" set ");
 		for (Entry<String, Object> e: record.getColumns().entrySet()) {
 			String colName = e.getKey();
@@ -210,25 +210,25 @@ public class PostgreSqlDialect extends Dialect {
 			paras.add(ids[i]);
 		}
 	}
-	
+
 	public String forPaginate(int pageNumber, int pageSize, StringBuilder findSql) {
 		int offset = pageSize * (pageNumber - 1);
 		findSql.append(" limit ").append(pageSize).append(" offset ").append(offset);
 		return findSql.toString();
 	}
-	
+
 	public void fillStatement(PreparedStatement pst, List<Object> paras) throws SQLException {
 		fillStatementHandleDateType(pst, paras);
 	}
-	
+
 	public void fillStatement(PreparedStatement pst, Object... paras) throws SQLException {
 		fillStatementHandleDateType(pst, paras);
 	}
-	
+
 	/**
 	 * 解决 PostgreSql 获取自增主键时 rs.getObject(1) 总是返回第一个字段的值,而非返回了 id 值
 	 * issue: https://www.oschina.net/question/2312705_2243354
-	 * 
+	 *
 	 * 相对于 Dialect 中的默认实现,仅将 rs.getXxx(1) 改成了 rs.getXxx(pKey)
 	 */
 	public void getModelGeneratedKey(Model<?> model, PreparedStatement pst, Table table) throws SQLException {
@@ -254,11 +254,11 @@ public class PostgreSqlDialect extends Dialect {
 		}
 		rs.close();
 	}
-	
+
 	/**
 	 * 解决 PostgreSql 获取自增主键时 rs.getObject(1) 总是返回第一个字段的值,而非返回了 id 值
 	 * issue: https://www.oschina.net/question/2312705_2243354
-	 * 
+	 *
 	 * 相对于 Dialect 中的默认实现,仅将 rs.getXxx(1) 改成了 rs.getXxx(pKey)
 	 */
 	public void getRecordGeneratedKey(PreparedStatement pst, Record record, String[] pKeys) throws SQLException {
@@ -273,3 +273,8 @@ public class PostgreSqlDialect extends Dialect {
 		rs.close();
 	}
 }
+
+
+
+
+

+ 20 - 19
src/main/java/com/jfinal/plugin/activerecord/dialect/SqlServerDialect.java

@@ -32,16 +32,16 @@ import com.jfinal.plugin.activerecord.builder.TimestampProcessedRecordBuilder;
  * SqlServerDialect 为OSC 网友战五渣贡献代码:http://www.oschina.net/question/2333909_234198
  */
 public class SqlServerDialect extends Dialect {
-	
+
 	public SqlServerDialect() {
 		this.modelBuilder = TimestampProcessedModelBuilder.me;
 		this.recordBuilder = TimestampProcessedRecordBuilder.me;
 	}
-	
+
 	public String forTableBuilderDoBuild(String tableName) {
 		return "select * from " + tableName + " where 1 = 2";
 	}
-	
+
 	public void forModelSave(Table table, Map<String, Object> attrs, StringBuilder sql, List<Object> paras) {
 		sql.append("insert into ").append(table.getName()).append('(');
 		StringBuilder temp = new StringBuilder(") values(");
@@ -59,7 +59,7 @@ public class SqlServerDialect extends Dialect {
 		}
 		sql.append(temp.toString()).append(')');
 	}
-	
+
 	public String forModelDeleteById(Table table) {
 		String[] pKeys = table.getPrimaryKey();
 		StringBuilder sql = new StringBuilder(45);
@@ -74,7 +74,7 @@ public class SqlServerDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public void forModelUpdate(Table table, Map<String, Object> attrs, Set<String> modifyFlag, StringBuilder sql, List<Object> paras) {
 		sql.append("update ").append(table.getName()).append(" set ");
 		String[] pKeys = table.getPrimaryKey();
@@ -97,7 +97,7 @@ public class SqlServerDialect extends Dialect {
 			paras.add(attrs.get(pKeys[i]));
 		}
 	}
-	
+
 	public String forModelFindById(Table table, String columns) {
 		StringBuilder sql = new StringBuilder("select ").append(columns).append(" from ");
 		sql.append(table.getName());
@@ -111,11 +111,11 @@ public class SqlServerDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public String forDbFindById(String tableName, String[] pKeys) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		StringBuilder sql = new StringBuilder("select * from ").append(tableName).append(" where ");
 		for (int i=0; i<pKeys.length; i++) {
 			if (i > 0) {
@@ -125,11 +125,11 @@ public class SqlServerDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public String forDbDeleteById(String tableName, String[] pKeys) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		StringBuilder sql = new StringBuilder("delete from ").append(tableName).append(" where ");
 		for (int i=0; i<pKeys.length; i++) {
 			if (i > 0) {
@@ -139,16 +139,16 @@ public class SqlServerDialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public void forDbSave(String tableName, String[] pKeys, Record record, StringBuilder sql, List<Object> paras) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		sql.append("insert into ");
 		sql.append(tableName).append('(');
 		StringBuilder temp = new StringBuilder();
 		temp.append(") values(");
-		
+
 		for (Entry<String, Object> e: record.getColumns().entrySet()) {
 			if (paras.size() > 0) {
 				sql.append(", ");
@@ -160,14 +160,14 @@ public class SqlServerDialect extends Dialect {
 		}
 		sql.append(temp.toString()).append(')');
 	}
-	
+
 	public void forDbUpdate(String tableName, String[] pKeys, Object[] ids, Record record, StringBuilder sql, List<Object> paras) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		// Record 新增支持 modifyFlag
 		Set<String> modifyFlag = CPI.getModifyFlag(record);
-		
+
 		sql.append("update ").append(tableName).append(" set ");
 		for (Entry<String, Object> e: record.getColumns().entrySet()) {
 			String colName = e.getKey();
@@ -188,7 +188,7 @@ public class SqlServerDialect extends Dialect {
 			paras.add(ids[i]);
 		}
 	}
-	
+
 	/**
 	 * sql.replaceFirst("(?i)select", "") 正则中带有 "(?i)" 前缀,指定在匹配时不区分大小写
 	 */
@@ -208,11 +208,11 @@ public class SqlServerDialect extends Dialect {
 		ret.append(")vip)mvp where temprownumber>").append(begin);
 		return ret.toString();
 	}
-	
+
 	public void fillStatement(PreparedStatement pst, List<Object> paras) throws SQLException {
 		fillStatementHandleDateType(pst, paras);
 	}
-	
+
 	public void fillStatement(PreparedStatement pst, Object... paras) throws SQLException {
 		fillStatementHandleDateType(pst, paras);
 	}
@@ -221,3 +221,4 @@ public class SqlServerDialect extends Dialect {
 
 
 
+

+ 22 - 19
src/main/java/com/jfinal/plugin/activerecord/dialect/Sqlite3Dialect.java

@@ -32,16 +32,16 @@ import com.jfinal.plugin.activerecord.builder.TimestampProcessedRecordBuilder;
  * SqliteDialect.
  */
 public class Sqlite3Dialect extends Dialect {
-	
+
 	public Sqlite3Dialect() {
 		this.modelBuilder = TimestampProcessedModelBuilder.me;
 		this.recordBuilder = TimestampProcessedRecordBuilder.me;
 	}
-	
+
 	public String forTableBuilderDoBuild(String tableName) {
 		return "select * from " + tableName + " where 1 = 2";
 	}
-	
+
 	public void forModelSave(Table table, Map<String, Object> attrs, StringBuilder sql, List<Object> paras) {
 		sql.append("insert into ").append(table.getName()).append('(');
 		StringBuilder temp = new StringBuilder(") values(");
@@ -59,7 +59,7 @@ public class Sqlite3Dialect extends Dialect {
 		}
 		sql.append(temp.toString()).append(')');
 	}
-	
+
 	public String forModelDeleteById(Table table) {
 		String[] pKeys = table.getPrimaryKey();
 		StringBuilder sql = new StringBuilder(45);
@@ -74,7 +74,7 @@ public class Sqlite3Dialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public void forModelUpdate(Table table, Map<String, Object> attrs, Set<String> modifyFlag, StringBuilder sql, List<Object> paras) {
 		sql.append("update ").append(table.getName()).append(" set ");
 		String[] pKeys = table.getPrimaryKey();
@@ -97,7 +97,7 @@ public class Sqlite3Dialect extends Dialect {
 			paras.add(attrs.get(pKeys[i]));
 		}
 	}
-	
+
 	public String forModelFindById(Table table, String columns) {
 		StringBuilder sql = new StringBuilder("select ").append(columns).append(" from ");
 		sql.append(table.getName());
@@ -111,11 +111,11 @@ public class Sqlite3Dialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public String forDbFindById(String tableName, String[] pKeys) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		StringBuilder sql = new StringBuilder("select * from ").append(tableName).append(" where ");
 		for (int i=0; i<pKeys.length; i++) {
 			if (i > 0) {
@@ -125,11 +125,11 @@ public class Sqlite3Dialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public String forDbDeleteById(String tableName, String[] pKeys) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		StringBuilder sql = new StringBuilder("delete from ").append(tableName).append(" where ");
 		for (int i=0; i<pKeys.length; i++) {
 			if (i > 0) {
@@ -139,16 +139,16 @@ public class Sqlite3Dialect extends Dialect {
 		}
 		return sql.toString();
 	}
-	
+
 	public void forDbSave(String tableName, String[] pKeys, Record record, StringBuilder sql, List<Object> paras) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		sql.append("insert into ");
 		sql.append(tableName).append('(');
 		StringBuilder temp = new StringBuilder();
 		temp.append(") values(");
-		
+
 		for (Entry<String, Object> e: record.getColumns().entrySet()) {
 			if (paras.size() > 0) {
 				sql.append(", ");
@@ -160,14 +160,14 @@ public class Sqlite3Dialect extends Dialect {
 		}
 		sql.append(temp.toString()).append(')');
 	}
-	
+
 	public void forDbUpdate(String tableName, String[] pKeys, Object[] ids, Record record, StringBuilder sql, List<Object> paras) {
 		tableName = tableName.trim();
 		trimPrimaryKeys(pKeys);
-		
+
 		// Record 新增支持 modifyFlag
 		Set<String> modifyFlag = CPI.getModifyFlag(record);
-		
+
 		sql.append("update ").append(tableName).append(" set ");
 		for (Entry<String, Object> e: record.getColumns().entrySet()) {
 			String colName = e.getKey();
@@ -188,18 +188,21 @@ public class Sqlite3Dialect extends Dialect {
 			paras.add(ids[i]);
 		}
 	}
-	
+
 	public String forPaginate(int pageNumber, int pageSize, StringBuilder findSql) {
 		int offset = pageSize * (pageNumber - 1);
 		findSql.append(" limit ").append(offset).append(", ").append(pageSize);
 		return findSql.toString();
 	}
-	
+
 	public void fillStatement(PreparedStatement pst, List<Object> paras) throws SQLException {
 		fillStatementHandleDateType(pst, paras);
 	}
-	
+
 	public void fillStatement(PreparedStatement pst, Object... paras) throws SQLException {
 		fillStatementHandleDateType(pst, paras);
 	}
 }
+
+
+