libf vor 2 Jahren
Ursprung
Commit
333e668e26
1 geänderte Dateien mit 52 neuen und 3 gelöschten Zeilen
  1. 52 3
      ajs/JsonImporterFuncs.js

+ 52 - 3
ajs/JsonImporterFuncs.js

@@ -3,6 +3,55 @@
 // 应用配置信息
 eval(dfs.read("/script/matrix/utils/ajs/config.js"))
 
+function compitable(dta, dtb) {
+    switch (dta) {
+        case "timestamp":
+            switch (dtb) {
+                case "timestamp":
+                    return true;
+                default:
+                    return false;
+            }
+        case "boolean":
+            switch (dtb) {
+                case "boolean":
+                    return true;
+                default:
+                    return false;
+            }
+        case "int":
+        case "integer":
+        case "bigint":
+            switch (dtb) {
+                case "int":
+                case "integer":
+                case "bigint":
+                    return true;
+                default:
+                    return false;
+            }
+        case "number":
+        case "float":
+        case "double":
+            switch (dtb) {
+                case "number":
+                case "float":
+                case "double":
+                case "int":
+                case "integer":
+                case "bigint":
+                    return true;
+                default:
+                    return false;
+            }
+        case "string":
+        case "varchar":
+        case "text":
+            return true;
+    }
+    return false
+}
+
 // 根据 JSON 对象数据建类或新增字段
 // classname 类名
 // clsoption 建类选项
@@ -189,7 +238,7 @@ function alterClass(input) {
                 if (xk in { "id": "", "class": "", "name": "", "day": "", "tags": "", "vtime": "" }) {
                     throw ("内部使用字段名 " + xk + ",需要映射成其它名称");
                 }
-                if (clsfields[xk] && clsfields[xk].ftype != xfields[xk]) {
+                if (clsfields[xk] && clsfields[xk].ftype != xfields[xk] && !compitable(clsfields[xk].ftype, xfields[xk])) {
                     throw ("类继承字段 " + xk + " 信息不一致," + clsfields[xk].ftype + "!=" + xfields[xk] + ",需手动干预");
                 }
                 mql += fi == 0 ? "\n" : ",\n";
@@ -236,8 +285,8 @@ function alterClass(input) {
                     mql += (addn == 0) ? " " : ", ";
                     mql += xk + " " + xfields[xk];
                     addn++;
-                } else if (clsfields[xk].ftype != xfields[xk]) {
-                    throw ("已经存在同名类字段 " + xk + " 信息不一致,需手动干预");
+                } else if (clsfields[xk].ftype != xfields[xk] && !compitable(clsfields[xk].ftype, xfields[xk])) {
+                    throw ("已经存在同名类字段 " + xk + " 信息不一致," + clsfields[xk].ftype + "!=" + xfields[xk] + ",需手动干预");
                 }
             }
             if (addn > 0) {