浏览代码

jfinal 3.4

James 8 年之前
父节点
当前提交
47cd544103

+ 3 - 0
src/main/java/com/jfinal/plugin/activerecord/Model.java

@@ -795,6 +795,9 @@ public abstract class Model<M extends Model> implements Serializable {
 	public M keep(String... attrs) {
 		if (attrs != null && attrs.length > 0) {
 			Config config = _getConfig();
+			if (config == null) {	// 支持无数据库连接场景
+				config = DbKit.brokenConfig;
+			}
 			Map<String, Object> newAttrs = config.containerFactory.getAttrsMap();	// new HashMap<String, Object>(attrs.length);
 			Set<String> newModifyFlag = config.containerFactory.getModifyFlagSet();	// new HashSet<String>();
 			for (String a : attrs) {

+ 4 - 0
src/main/java/com/jfinal/plugin/activerecord/TableBuilder.java

@@ -98,6 +98,10 @@ class TableBuilder {
 				else if (type == Types.DATE) {
 					table.setColumnType(colName, java.sql.Date.class);
 				}
+				// 支持 PostgreSql 的 jsonb json
+				else if (type == Types.JAVA_OBJECT || type == Types.OTHER) {
+					table.setColumnType(colName, Object.class);
+				}
 				else {
 					table.setColumnType(colName, String.class);
 				}

+ 4 - 0
src/main/java/com/jfinal/plugin/activerecord/generator/MetaBuilder.java

@@ -252,6 +252,10 @@ public class MetaBuilder {
 				// 保留对 Types.DATE 的判断,一是为了逻辑上的正确性、完备性,二是其它类型的数据库可能用得着
 				else if (type == Types.TIMESTAMP || type == Types.DATE) {
 					typeStr = "java.util.Date";
+				}
+				// 支持 PostgreSql 的 jsonb json
+				else if (type == Types.JAVA_OBJECT || type == Types.OTHER) {
+					typeStr = "java.lang.Object";
 				} else {
 					typeStr = "java.lang.String";
 				}

+ 13 - 6
src/main/java/com/jfinal/server/Scanner.java

@@ -36,8 +36,8 @@ public abstract class Scanner {
 	private int interval;
 	private boolean running = false;
 	
-	private final Map<String,TimeSize> preScan = new HashMap<String,TimeSize> ();
-	private final Map<String,TimeSize> curScan = new HashMap<String,TimeSize> ();
+	private Map<String,TimeSize> preScan = new HashMap<String,TimeSize> ();
+	private Map<String,TimeSize> curScan = new HashMap<String,TimeSize> ();
 	
 	public Scanner(String rootDir, int interval) {
 		if (StrKit.isBlank(rootDir))
@@ -56,8 +56,13 @@ public abstract class Scanner {
 		scan(rootDir);
 		compare();
 		
-		preScan.clear();
-		preScan.putAll(curScan);
+		// 优化性能
+		// preScan.clear();
+		// preScan.putAll(curScan);
+		// curScan.clear();
+		Map<String,TimeSize> temp = preScan;
+		preScan = curScan;
+		curScan = temp;
 		curScan.clear();
 	}
 	
@@ -81,11 +86,13 @@ public abstract class Scanner {
 	}
 	
 	private void compare() {
-		if (preScan.size() == 0)
+		if (preScan.size() == 0) {
 			return;
+		}
 		
-		if (!preScan.equals(curScan))
+		if (!preScan.equals(curScan)) {
 			onChange();
+		}
 	}
 	
 	public void start() {

+ 1 - 1
src/main/java/com/jfinal/template/ext/directive/NowDirective.java

@@ -32,7 +32,7 @@ import com.jfinal.template.stat.Scope;
  */
 public class NowDirective extends Directive {
 	
-	public void setExrpList(ExprList exprList) {
+	public void setExprList(ExprList exprList) {
 		if (exprList.length() > 1) {
 			throw new ParseException("#now directive support one parameter only", location);	
 		}