Просмотр исходного кода

fix PostgreSqlColumnSelector sql when table contain foreign key

daitianci 3 лет назад
Родитель
Сommit
aeac27be78

+ 14 - 1
gen/src/main/java/com/gitee/gen/gen/postgresql/PostgreSqlColumnSelector.java

@@ -3,6 +3,7 @@ package com.gitee.gen.gen.postgresql;
 import com.gitee.gen.gen.ColumnDefinition;
 import com.gitee.gen.gen.ColumnSelector;
 import com.gitee.gen.gen.GeneratorConfig;
+import org.apache.commons.lang.StringUtils;
 
 import java.util.Map;
 import java.util.Set;
@@ -34,7 +35,7 @@ public class PostgreSqlColumnSelector extends ColumnSelector {
             " INNER JOIN information_schema.COLUMNS C ON C.TABLE_NAME = pg_class.relname   " +
             " AND C.COLUMN_NAME = pg_attribute.attname   " +
             "WHERE  " +
-            " pg_class.relname = '%s'   " +
+            " pg_class.relname = '%s' and pg_constraint.contype = 'p' " +
             " AND pg_attribute.attnum > 0";
 
     @Override
@@ -71,6 +72,18 @@ public class PostgreSqlColumnSelector extends ColumnSelector {
         columnDefinition.setIsPk(isPk);
 
         String type = convertString(rowMap.get("TYPE"));
+
+        // 如果是number
+        if (StringUtils.containsIgnoreCase(type, "numeric")) {
+            // 有精度则为decimal,否则是int
+            Object scaleCol = rowMap.get("SCALE");
+            if (scaleCol == null) {
+                scaleCol = 0;
+            }
+            String scale = String.valueOf(scaleCol);
+            type = "0".equals(scale) ? "integer" : "decimal";
+        }
+
         columnDefinition.setType(SQL_TYPE_FORMATTER.format(type));
 
         columnDefinition.setComment(convertString(rowMap.get("CMT")));