diff --git a/core/pom.xml b/core/pom.xml index f0c9628ec4e8a057347f2f0d1889809bc6c88e37..ee8a08946c44c5598e9a647802ad26daea411d39 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -4,7 +4,7 @@ com.github.drinkjava2 jdialects - 5.0.11.jre8 + 5.0.11.s.jre8 jar jdialects diff --git a/core/scripts/install.sh b/core/scripts/install.sh new file mode 100644 index 0000000000000000000000000000000000000000..5cfbb74dade9d889d6b5072e6aac0215ca50bb4c --- /dev/null +++ b/core/scripts/install.sh @@ -0,0 +1 @@ +mvn clean install -Dmaven.test.skip=true -e -U \ No newline at end of file diff --git a/core/src/main/java/com/github/drinkjava2/jdialects/DDLFeatures.java b/core/src/main/java/com/github/drinkjava2/jdialects/DDLFeatures.java index 9cab7ad7a11352de0ad184cab4a173227a44ea17..2fef4abc4addc9db9b15e47e46eca208a915c3a5 100644 --- a/core/src/main/java/com/github/drinkjava2/jdialects/DDLFeatures.java +++ b/core/src/main/java/com/github/drinkjava2/jdialects/DDLFeatures.java @@ -23,6 +23,9 @@ public class DDLFeatures { public static final String NOT_SUPPORT = "NOT_SUPPORT"; protected String addColumnString; protected String addColumnSuffixString; + protected String dropColumnString; + protected String columnSuffixString; + protected String modifyColumnString; protected String addForeignKeyConstraintString; protected String addFKeyRefPkeyString;// If ref pkey, can ignore ref columns protected String addPrimaryKeyConstraintString; @@ -257,9 +260,13 @@ public class DDLFeatures { // ===========bellow is generated by tool ============ protected static void initDDLFeatures(Dialect dia) { + DDLFeatures ddl = dia.ddlFeatures; ddl.addColumnString = "add"; ddl.addColumnSuffixString = ""; + ddl.dropColumnString = NOT_SUPPORT; + ddl.columnSuffixString = NOT_SUPPORT; + ddl.modifyColumnString = NOT_SUPPORT; ddl.addFKeyRefPkeyString = " add constraint _FKEYNAME foreign key (_FK1, _FK2) references _REFTABLE"; ddl.addForeignKeyConstraintString = " add constraint _FKEYNAME foreign key (_FK1, _FK2) references _REFTABLE (_REF1, _REF2)"; ddl.addPrimaryKeyConstraintString = " add constraint _PKEYNAME primary key "; @@ -270,7 +277,7 @@ public class DDLFeatures { ddl.createPooledSequenceStrings = "create sequence _SEQ start with 11 increment by 33"; ddl.createSchemaCommand = "create schema _SCHEMANAME"; ddl.createSequenceStrings = "create sequence _SEQ"; - ddl.createTableString = "create table"; + ddl.createTableString = "create table if not exists"; ddl.currentSchemaCommand = NOT_SUPPORT; ddl.dropCatalogCommand = NOT_SUPPORT; ddl.dropForeignKeyString = " drop constraint "; @@ -999,7 +1006,11 @@ public class DDLFeatures { } break; case MySQLDialect: { - ddl.addColumnString = "add column"; + ddl.addColumnString = "add"; + ddl.addColumnSuffixString = ""; + ddl.dropColumnString = NOT_SUPPORT; + ddl.columnSuffixString = NOT_SUPPORT; + ddl.modifyColumnString = NOT_SUPPORT; ddl.addFKeyRefPkeyString = " add constraint _FKEYNAME foreign key (_FK1, _FK2) references _REFTABLE (_REF1, _REF2)"; ddl.closeQuote = "`"; ddl.columnComment = " comment '_COMMENT'"; @@ -1057,6 +1068,10 @@ public class DDLFeatures { break; case MySQL55Dialect: { ddl.addColumnString = "add column"; + ddl.addColumnSuffixString = ""; + ddl.dropColumnString = "alter table"; + ddl.columnSuffixString = NOT_SUPPORT; + ddl.modifyColumnString = NOT_SUPPORT; ddl.addFKeyRefPkeyString = " add constraint _FKEYNAME foreign key (_FK1, _FK2) references _REFTABLE (_REF1, _REF2)"; ddl.closeQuote = "`"; ddl.columnComment = " comment '_COMMENT'"; diff --git a/core/src/main/java/com/github/drinkjava2/jdialects/Dialect.java b/core/src/main/java/com/github/drinkjava2/jdialects/Dialect.java index df7fb16671c1d10088a379db8b0598b061cfc89b..5385244b866f5ef26bdf7df245624bd9890b4331 100644 --- a/core/src/main/java/com/github/drinkjava2/jdialects/Dialect.java +++ b/core/src/main/java/com/github/drinkjava2/jdialects/Dialect.java @@ -312,7 +312,7 @@ public class Dialect { for (String templ : typeTempls) { if (templ.contains("<")) {// varchar($l)<255 String[] limitType = StrUtils.split("<", templ); - if (col.getLength() > 0 && col.getLength() < Integer.parseInt(limitType[1]))// NOSONAR + if (col.getLength() > 0 && col.getLength() <= Integer.parseInt(limitType[1]))// NOSONAR return replacePlaceHolders(type, limitType[0], col); } else {// varchar($l) return replacePlaceHolders(type, templ, col); diff --git a/core/src/main/java/com/github/drinkjava2/jdialects/DialectTypeMappingTemplate.java b/core/src/main/java/com/github/drinkjava2/jdialects/DialectTypeMappingTemplate.java index db9e0813c12402a3e147333365883dafb435b311..f501ea327ed6a8e6352d1984a6609320229d5d80 100644 --- a/core/src/main/java/com/github/drinkjava2/jdialects/DialectTypeMappingTemplate.java +++ b/core/src/main/java/com/github/drinkjava2/jdialects/DialectTypeMappingTemplate.java @@ -59,6 +59,18 @@ public class DialectTypeMappingTemplate { mp.put(Type.TINYINT, "tinyint"); mp.put(Type.VARBINARY, "blob"); mp.put(Type.VARCHAR, "varchar($l)"); + mp.put(Type.DATETIME, "datetime"); + mp.put(Type.MEDIUMINT, "MEDIUMINT"); + mp.put(Type.INT, "INT($l)"); + mp.put(Type.TINYBLOB, "TINYBLOB"); + mp.put(Type.TINYTEXT, "TINYTEXT"); + mp.put(Type.TEXT, "TEXT($l)"); + mp.put(Type.MEDIUMBLOB, "MEDIUMBLOB"); + mp.put(Type.MEDIUMTEXT, "MEDIUMTEXT"); + mp.put(Type.LONGBLOB, "LONGBLOB"); + mp.put(Type.LONGTEXT, "LONGTEXT"); + mp.put(Type.YEAR, "YEAR($l)"); + mp.put(Type.JSON, "JSON"); copyTo(mp, Dialect.SQLiteDialect); mp.put(Type.BIGINT, "integer"); mp.put(Type.BINARY, "binary<255|N/A"); @@ -416,7 +428,7 @@ public class DialectTypeMappingTemplate { mp.put(Type.BIT, "bit"); mp.put(Type.BLOB, "longblob"); mp.put(Type.BOOLEAN, "bit"); - mp.put(Type.CHAR, "char(1)"); + mp.put(Type.CHAR, "char($l)"); mp.put(Type.CLOB, "longtext"); mp.put(Type.DATE, "date"); mp.put(Type.DOUBLE, "double precision"); @@ -432,8 +444,15 @@ public class DialectTypeMappingTemplate { mp.put(Type.TINYINT, "tinyint"); mp.put(Type.VARBINARY, "tinyblob<255|blob<65535|mediumblob<16777215|longblob"); mp.put(Type.VARCHAR, "varchar($l)<255|longtext"); - copyTo(mp, Dialect.MySQLDialect); + + mp.put(Type.SMALLINT, "smallint($l)"); + mp.put(Type.MEDIUMINT, "MEDIUMINT($l)"); + mp.put(Type.TINYINT, "tinyint($l)"); + mp.put(Type.BIGINT, "bigint($l)"); + mp.put(Type.YEAR, "year($l)"); mp.put(Type.VARCHAR, "varchar($l)<65535|longtext"); + mp.put(Type.TIMESTAMP, "timestamp"); + copyTo(mp, Dialect.MySQLDialect); copyTo(mp, Dialect.MySQL5Dialect); copyTo(mp, Dialect.MySQL55Dialect); mp.put(Type.JAVA_OBJECT, "json"); @@ -469,19 +488,28 @@ public class DialectTypeMappingTemplate { mp.put(Type.TINYINT, "number(3,0)"); mp.put(Type.VARBINARY, "raw($l)<2000|long raw"); mp.put(Type.VARCHAR, "varchar2($l)<4000|long"); + copyTo(mp, Dialect.OracleDialect); mp.put(Type.BINARY, "raw($l)<2000|long raw"); mp.put(Type.BOOLEAN, "number(1,0)"); - mp.put(Type.CHAR, "char(1 char)"); + mp.put(Type.CHAR, "char($l char)"); mp.put(Type.LONGNVARCHAR, "nvarchar2($l)"); mp.put(Type.LONGVARBINARY, "long raw"); mp.put(Type.LONGVARCHAR, "long"); mp.put(Type.NVARCHAR, "nvarchar2($l)"); mp.put(Type.TIMESTAMP, "timestamp"); - mp.put(Type.VARCHAR, "varchar2($l char)<4000|long"); + mp.put(Type.VARCHAR, "varchar($l char)<4000|long"); + //add new + mp.put(Type.BINARY_FLOAT, "BINARY_FLOAT"); + mp.put(Type.BINARY_DOUBLE, "BINARY_DOUBLE"); + mp.put(Type.DOUBLE_PRECISION, "DOUBLE PRECISION"); + mp.put(Type.TIMESTAMP_WITH_TIME_ZONE, "TIMESTAMP WITH TIME ZONE"); + mp.put(Type.TIMESTAMP_WITH_LOCAL_TIME_ZONE, "TIMESTAMP WITH LOCAL TIME ZONE"); + mp.put(Type.INTERVAL_YEAR_TO_MONTH, "INTERVAL YEAR($l) TO MONTH"); + mp.put(Type.INTERVAL_DAY_TO_SECOND, "INTERVAL DAY($p) TO SECOND($s)"); + mp.put(Type.VARCHAR2, "varchar2($l)"); copyTo(mp, Dialect.Oracle10gDialect); copyTo(mp, Dialect.Oracle12cDialect); - mp.put(Type.CHAR, "char(1)"); mp.put(Type.LONGNVARCHAR, "nvarchar($l)"); mp.put(Type.NVARCHAR, "nvarchar($l)"); mp.put(Type.TIMESTAMP, "date"); @@ -489,7 +517,6 @@ public class DialectTypeMappingTemplate { copyTo(mp, Dialect.Oracle8iDialect); mp.put(Type.BINARY, "N/A"); mp.put(Type.BOOLEAN, "boolean"); - mp.put(Type.CHAR, "char(1 char)"); mp.put(Type.LONGVARBINARY, "bit varying($l)"); mp.put(Type.LONGVARCHAR, "varchar($l)"); mp.put(Type.TIMESTAMP, "timestamp"); @@ -506,7 +533,7 @@ public class DialectTypeMappingTemplate { mp.put(Type.BINARY, "N/A"); mp.put(Type.BIT, "smallint"); mp.put(Type.BOOLEAN, "boolean"); - mp.put(Type.CHAR, "char(1)"); + mp.put(Type.CHAR, "char($l)"); mp.put(Type.DECIMAL, "N/A"); mp.put(Type.INTEGER, "integer"); mp.put(Type.LONGNVARCHAR, "nvarchar($l)"); diff --git a/core/src/main/java/com/github/drinkjava2/jdialects/Type.java b/core/src/main/java/com/github/drinkjava2/jdialects/Type.java index 0a77ab51b990d773db28c5e3e4abf39290f2ebec..94a13b2fdedc126e7af497b54dff66738d9136dd 100644 --- a/core/src/main/java/com/github/drinkjava2/jdialects/Type.java +++ b/core/src/main/java/com/github/drinkjava2/jdialects/Type.java @@ -11,6 +11,7 @@ */ package com.github.drinkjava2.jdialects; + /** * SQL Type definitions * @@ -45,6 +46,39 @@ public enum Type { , TIMESTAMP// , TINYINT// , VARBINARY// - , VARCHAR; + , VARCHAR + //mysql + , DATETIME + , MEDIUMINT + , INT + , TINYBLOB + , TINYTEXT + , TEXT + , MEDIUMBLOB + , MEDIUMTEXT + , LONGBLOB + , LONGTEXT + , YEAR + , JSON + //oracle + , BINARY_FLOAT + , DOUBLE_PRECISION + , BINARY_DOUBLE + , TIMESTAMP_WITH_TIME_ZONE + , TIMESTAMP_WITH_LOCAL_TIME_ZONE + , VARCHAR2 + ,INTERVAL_YEAR_TO_MONTH + ,INTERVAL_DAY_TO_SECOND + ; + + //TODO 此处需要考虑数据类型多对一的情况 + public static Type getByTypeName(String typeName) { + for (Type val : Type.values()) { + if (val.name().equalsIgnoreCase(typeName)) { + return val; + } + } + throw new DialectException("'" + typeName + "' can not be map to a dialect type"); + } } diff --git a/core/src/main/java/com/github/drinkjava2/jdialects/TypeUtils.java b/core/src/main/java/com/github/drinkjava2/jdialects/TypeUtils.java index ef173f1b45478d83e0a1b4445ee51e38b224833f..0e150043ece0dc1d335d4f667dd85cba5bb9a8fd 100644 --- a/core/src/main/java/com/github/drinkjava2/jdialects/TypeUtils.java +++ b/core/src/main/java/com/github/drinkjava2/jdialects/TypeUtils.java @@ -24,36 +24,6 @@ import java.util.Map; */ public abstract class TypeUtils {// NOSONAR - public static final String BIGINT = "BIGINT"; - public static final String BINARY = "BINARY"; - public static final String BIT = "BIT"; - public static final String BLOB = "BLOB"; - public static final String BOOLEAN = "BOOLEAN"; - public static final String CHAR = "CHAR"; - public static final String CLOB = "CLOB"; - public static final String DATE = "DATE"; - public static final String DECIMAL = "DECIMAL"; - public static final String DOUBLE = "DOUBLE"; - public static final String FLOAT = "FLOAT"; - public static final String INTEGER = "INTEGER"; - public static final String INT = "INT"; - public static final String JAVA_OBJECT = "JAVA_OBJECT"; - public static final String LONGNVARCHAR = "LONGNVARCHAR"; - public static final String LONGVARBINARY = "LONGVARBINARY"; - public static final String LONGVARCHAR = "LONGVARCHAR"; - public static final String NCHAR = "NCHAR"; - public static final String NCLOB = "NCLOB"; - public static final String NUMERIC = "NUMERIC"; - public static final String NVARCHAR = "NVARCHAR"; - public static final String UNKNOW = "UNKNOW"; - public static final String REAL = "REAL"; - public static final String SMALLINT = "SMALLINT"; - public static final String TIME = "TIME"; - public static final String TIMESTAMP = "TIMESTAMP"; - public static final String TINYINT = "TINYINT"; - public static final String VARBINARY = "VARBINARY"; - public static final String VARCHAR = "VARCHAR"; - private static final Map, Type> JAVA_TO_TYPE_MAP = new HashMap, Type>(); private static final Map> TYPE_TO_JAVA_MAP = new HashMap>(); static { @@ -147,68 +117,11 @@ public abstract class TypeUtils {// NOSONAR */ public static Type colDef2DialectType(String columnDefination) { String columnDef = StrUtils.substringBefore(columnDefination, "("); - if (BIGINT.equalsIgnoreCase(columnDef)) - return Type.BIGINT; - if (BINARY.equalsIgnoreCase(columnDef)) - return Type.BINARY; - if (BIT.equalsIgnoreCase(columnDef)) - return Type.BIT; - if (BLOB.equalsIgnoreCase(columnDef)) - return Type.BLOB; - if (BOOLEAN.equalsIgnoreCase(columnDef)) - return Type.BOOLEAN; - if (CHAR.equalsIgnoreCase(columnDef)) - return Type.CHAR; - if (CLOB.equalsIgnoreCase(columnDef)) - return Type.CLOB; - if (DATE.equalsIgnoreCase(columnDef)) - return Type.DATE; - if (DECIMAL.equalsIgnoreCase(columnDef)) - return Type.DECIMAL; - if (DOUBLE.equalsIgnoreCase(columnDef)) - return Type.DOUBLE; - if (FLOAT.equalsIgnoreCase(columnDef)) - return Type.FLOAT; - if (INTEGER.equalsIgnoreCase(columnDef)) - return Type.INTEGER; - if (INT.equalsIgnoreCase(columnDef)) - return Type.INTEGER; - if (JAVA_OBJECT.equalsIgnoreCase(columnDef)) - return Type.JAVA_OBJECT; - if (LONGNVARCHAR.equalsIgnoreCase(columnDef)) - return Type.LONGNVARCHAR; - if (LONGVARBINARY.equalsIgnoreCase(columnDef)) - return Type.LONGVARBINARY; - if (LONGVARCHAR.equalsIgnoreCase(columnDef)) - return Type.LONGVARCHAR; - if (NCHAR.equalsIgnoreCase(columnDef)) - return Type.NCHAR; - if (NCLOB.equalsIgnoreCase(columnDef)) - return Type.NCLOB; - if (NUMERIC.equalsIgnoreCase(columnDef)) - return Type.NUMERIC; - if (NVARCHAR.equalsIgnoreCase(columnDef)) - return Type.NVARCHAR; - if (UNKNOW.equalsIgnoreCase(columnDef)) - return Type.UNKNOW; - if (REAL.equalsIgnoreCase(columnDef)) - return Type.REAL; - if (SMALLINT.equalsIgnoreCase(columnDef)) - return Type.SMALLINT; - if (TIME.equalsIgnoreCase(columnDef)) - return Type.TIME; - if (TIMESTAMP.equalsIgnoreCase(columnDef)) - return Type.TIMESTAMP; - if (TINYINT.equalsIgnoreCase(columnDef)) - return Type.TINYINT; - if (VARBINARY.equalsIgnoreCase(columnDef)) - return Type.VARBINARY; - if (VARCHAR.equalsIgnoreCase(columnDef)) - return Type.VARCHAR; - if ("TEXT".equalsIgnoreCase(columnDef)) - return Type.VARCHAR; + if ("TEXT".equalsIgnoreCase(columnDef)) + return Type.VARCHAR; + return Type.getByTypeName(columnDef); // @formatter:on - throw new DialectException("'" + columnDef + "' can not be map to a dialect type"); +// throw new DialectException("'" + columnDef + "' can not be map to a dialect type"); } /** Convert java.sql.Types.xxx type to Dialect's Type */