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 */