diff --git a/core/src/main/java/com/github/drinkjava2/jdbpro/PreparedSQL.java b/core/src/main/java/com/github/drinkjava2/jdbpro/PreparedSQL.java index f87560523ba8eebd4b87ebacf05b211ad184b7b6..00c0f6076f7d9bdf9d1365d24b64a4ff90ab5886 100644 --- a/core/src/main/java/com/github/drinkjava2/jdbpro/PreparedSQL.java +++ b/core/src/main/java/com/github/drinkjava2/jdbpro/PreparedSQL.java @@ -16,6 +16,7 @@ package com.github.drinkjava2.jdbpro; import java.sql.Connection; +import java.sql.DatabaseMetaData; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -489,4 +490,16 @@ public class PreparedSQL { this.ignoreEmpty = ignoreEmpty; } + public String wrapColumn(String col) { + return isMysql() ? "`" + col + "`" : col; + } + private boolean isMysql() { + try { + DatabaseMetaData metaData = connection.getMetaData(); + String databaseProductName = metaData.getDatabaseProductName(); + return "MySQL".equals(databaseProductName); + } catch (Throwable e) { + return false; + } + } } diff --git a/core/src/main/java/com/github/drinkjava2/jdialects/DDLCreateUtils.java b/core/src/main/java/com/github/drinkjava2/jdialects/DDLCreateUtils.java index 395292d4f5d6f091716c84d8e892b17241489e0d..0f1e89490e4113924623374888379d889294ad91 100644 --- a/core/src/main/java/com/github/drinkjava2/jdialects/DDLCreateUtils.java +++ b/core/src/main/java/com/github/drinkjava2/jdialects/DDLCreateUtils.java @@ -155,9 +155,9 @@ public class DDLCreateUtils {// NOSONAR if (col.getPkey()) { hasPkey = true; if (StrUtils.isEmpty(pkeys)) - pkeys = col.getColumnName(); + pkeys = dialect.wrapColumn(col.getColumnName()); else - pkeys += "," + col.getColumnName(); + pkeys += "," + dialect.wrapColumn(col.getColumnName()); } } 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 b5f37c450546590778a3ebc154945bcb6c489bdc..23e15cf77d072558b1f75c252922d85adf424660 100644 --- a/core/src/main/java/com/github/drinkjava2/jdialects/Dialect.java +++ b/core/src/main/java/com/github/drinkjava2/jdialects/Dialect.java @@ -88,22 +88,22 @@ public class Dialect { public static final Dialect IngresDialect = new Dialect("IngresDialect"); public static final Dialect InterbaseDialect = new Dialect("InterbaseDialect"); public static final Dialect JDataStoreDialect = new Dialect("JDataStoreDialect"); - public static final Dialect MariaDB102Dialect = new Dialect("MariaDB102Dialect"); - public static final Dialect MariaDB103Dialect = new Dialect("MariaDB103Dialect"); - public static final Dialect MariaDB10Dialect = new Dialect("MariaDB10Dialect"); - public static final Dialect MariaDB53Dialect = new Dialect("MariaDB53Dialect"); - public static final Dialect MariaDBDialect = new Dialect("MariaDBDialect"); + public static final Dialect MariaDB102Dialect = new MysqlDialect("MariaDB102Dialect"); + public static final Dialect MariaDB103Dialect = new MysqlDialect("MariaDB103Dialect"); + public static final Dialect MariaDB10Dialect = new MysqlDialect("MariaDB10Dialect"); + public static final Dialect MariaDB53Dialect = new MysqlDialect("MariaDB53Dialect"); + public static final Dialect MariaDBDialect = new MysqlDialect("MariaDBDialect"); public static final Dialect MckoiDialect = new Dialect("MckoiDialect"); public static final Dialect MimerSQLDialect = new Dialect("MimerSQLDialect"); - public static final Dialect MySQL55Dialect = new Dialect("MySQL55Dialect"); - public static final Dialect MySQL57Dialect = new Dialect("MySQL57Dialect"); - public static final Dialect MySQL57InnoDBDialect = new Dialect("MySQL57InnoDBDialect"); - public static final Dialect MySQL5Dialect = new Dialect("MySQL5Dialect"); - public static final Dialect MySQL5InnoDBDialect = new Dialect("MySQL5InnoDBDialect"); - public static final Dialect MySQL8Dialect = new Dialect("MySQL8Dialect"); - public static final Dialect MySQLDialect = new Dialect("MySQLDialect"); - public static final Dialect MySQLInnoDBDialect = new Dialect("MySQLInnoDBDialect"); - public static final Dialect MySQLMyISAMDialect = new Dialect("MySQLMyISAMDialect"); + public static final Dialect MySQL55Dialect = new MysqlDialect("MySQL55Dialect"); + public static final Dialect MySQL57Dialect = new MysqlDialect("MySQL57Dialect"); + public static final Dialect MySQL57InnoDBDialect = new MysqlDialect("MySQL57InnoDBDialect"); + public static final Dialect MySQL5Dialect = new MysqlDialect("MySQL5Dialect"); + public static final Dialect MySQL5InnoDBDialect = new MysqlDialect("MySQL5InnoDBDialect"); + public static final Dialect MySQL8Dialect = new MysqlDialect("MySQL8Dialect"); + public static final Dialect MySQLDialect = new MysqlDialect("MySQLDialect"); + public static final Dialect MySQLInnoDBDialect = new MysqlDialect("MySQLInnoDBDialect"); + public static final Dialect MySQLMyISAMDialect = new MysqlDialect("MySQLMyISAMDialect"); public static final Dialect Oracle10gDialect = new Dialect("Oracle10gDialect"); public static final Dialect Oracle12cDialect = new Dialect("Oracle12cDialect"); public static final Dialect Oracle8iDialect = new Dialect("Oracle8iDialect"); @@ -135,6 +135,18 @@ public class Dialect { public static final Dialect TeradataDialect = new Dialect("TeradataDialect"); public static final Dialect TimesTenDialect = new Dialect("TimesTenDialect"); + public static final class MysqlDialect extends Dialect { + + public MysqlDialect(String name) + { + super(name); + } + + @Override + public String wrapColumn(String col) { + return "`" + col + "`"; + } + } /** If set true will allow use reserved words in DDL, default value is false */ private static Boolean globalAllowReservedWords = false; @@ -404,6 +416,9 @@ public class Dialect { return result; } + public String wrapColumn(String col) { + return col; + } @Override public String toString() { return name; diff --git a/core/src/main/java/com/github/drinkjava2/jdialects/TableModelUtils.java b/core/src/main/java/com/github/drinkjava2/jdialects/TableModelUtils.java index 6794db2310471be9d866b27ddadca5241218f8da..7a8052544fb69d5d627309282f54a1c66357c6f4 100644 --- a/core/src/main/java/com/github/drinkjava2/jdialects/TableModelUtils.java +++ b/core/src/main/java/com/github/drinkjava2/jdialects/TableModelUtils.java @@ -16,8 +16,11 @@ import java.io.File; import java.io.FileWriter; import java.sql.Connection; import java.sql.SQLException; +import java.util.Collection; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import javax.sql.DataSource; import com.github.drinkjava2.jdialects.model.TableModel; @@ -86,9 +89,23 @@ public abstract class TableModelUtils {// NOSONAR try { conn = ds.getConnection(); TableModel[] models = db2Models(conn, dialect); + File dir = new File(outputfolder); + if (!dir.exists()) { + dir.mkdirs(); + } + Collection filterModels = (Collection)setting.get("filterModels"); + if (filterModels != null) { + Set t = new HashSet<>(); + for(String s : filterModels) t.add(s.trim().toLowerCase()); + filterModels = t; + } for (TableModel model : models) { - File writename = new File( - outputfolder + "/" + TableModelUtilsOfJavaSrc.getClassNameFromTableModel(model) + ".java"); + String tableName = model.getTableName(); + if (filterModels != null && filterModels.contains(tableName.toLowerCase())) { + continue; + } + File writename = new File(dir, TableModelUtilsOfJavaSrc.getClassNameFromTableModel(model) + ".java"); + writename.createNewFile();// NOSONAR BufferedWriter out = new BufferedWriter(new FileWriter(writename)); String javaSrc = model2JavaSrc(model, setting); diff --git a/core/src/main/java/com/github/drinkjava2/jdialects/TableModelUtilsOfJavaSrc.java b/core/src/main/java/com/github/drinkjava2/jdialects/TableModelUtilsOfJavaSrc.java index 431750d7232978908fde77224d0a69d70bc326dc..063e75135a9601d7d72becfd92568f43aa4631d7 100644 --- a/core/src/main/java/com/github/drinkjava2/jdialects/TableModelUtilsOfJavaSrc.java +++ b/core/src/main/java/com/github/drinkjava2/jdialects/TableModelUtilsOfJavaSrc.java @@ -11,11 +11,14 @@ */ package com.github.drinkjava2.jdialects; +import com.github.drinkjava2.jdialects.springsrc.utils.StringUtils; +import java.util.HashSet; import java.util.Map; import com.github.drinkjava2.jdialects.model.ColumnModel; import com.github.drinkjava2.jdialects.model.FKeyModel; import com.github.drinkjava2.jdialects.model.TableModel; +import java.util.Set; /** * The tool to convert TableModel to Java source code @@ -31,25 +34,30 @@ public abstract class TableModelUtilsOfJavaSrc {// NOSONAR * USER_NAME -> userName
* User_naMe -> userName
* UserName -> userName
- * USERNAME -> uSERNAME
- * userName -> userName
+ * USERNAME -> username
+ * userName -> username
* username -> username
*/ private static String transColumnNameToFieldName(String colName) { - if (StrUtils.isEmpty(colName)) - return colName; - if (!colName.contains("_")) - return StrUtils.toLowerCaseFirstOne(colName); + if (StrUtils.isEmpty(colName)) return colName; + + if (!colName.contains("_")) { + //return StrUtils.toLowerCaseFirstOne(colName); + // 这才是符合 java bean 规范 + return colName.toLowerCase(); + } StringBuilder sb = new StringBuilder(); char[] chars = colName.toLowerCase().toCharArray(); for (int i = 0; i < chars.length; i++) { char c = chars[i]; - if (c == '_') + if (c == '_') { continue; - if ((i > 0) && (chars[i - 1]) == '_' && sb.length() > 0) + } + if ((i > 0) && (chars[i - 1]) == '_' && sb.length() > 0) { sb.append(Character.toUpperCase(c)); - else + } else { sb.append(c); + } } return sb.toString(); } @@ -67,9 +75,9 @@ public abstract class TableModelUtilsOfJavaSrc {// NOSONAR public static String getClassNameFromTableModel(TableModel model) { DialectException.assureNotNull(model, "TableModel can not be null"); String className; - if (model.getEntityClass() != null) + if (model.getEntityClass() != null) { className = model.getEntityClass().getSimpleName(); - else { + } else { DialectException.assureNotEmpty(model.getTableName(), "TableName can not be empty in TableModel"); className = StrUtils.toUpperCaseFirstOne(transColumnNameToFieldName(model.getTableName())); } @@ -104,14 +112,19 @@ public abstract class TableModelUtilsOfJavaSrc {// NOSONAR String imports = (String) setting.get("imports"); // head StringBuilder body = new StringBuilder(); - if (!StrUtils.isEmpty(packageName)) + if (!StrUtils.isEmpty(packageName)) { body.append("package ").append(packageName).append(";\n"); - if (!StrUtils.isEmpty(imports)) + } + if (!StrUtils.isEmpty(imports)) { body.append(imports); + } body.append("\n"); // @table String className = getClassNameFromTableModel(model); + if (!StringUtils.isEmpty(model.getComment())) { + body.append("/**\n * ").append(model.getComment()).append("\n */\n"); + } if (!className.equals(model.getTableName())) { body.append("@Table").append("(name=\"").append(model.getTableName()).append("\")\n"); } @@ -119,17 +132,19 @@ public abstract class TableModelUtilsOfJavaSrc {// NOSONAR // Compound FKEY int fkeyCount = 0; for (FKeyModel fkey : model.getFkeyConstraints()) { - if (fkey.getColumnNames().size() <= 1)// Not compound Fkey - continue; + if (fkey.getColumnNames().size() <= 1)/* Not compound Fkey*/ continue; body.append("@FKey"); - if (fkeyCount > 0) + if (fkeyCount > 0) { body.append(fkeyCount); + } body.append("("); fkeyCount++; - if (!StrUtils.isEmpty(fkey.getFkeyName())) + if (!StrUtils.isEmpty(fkey.getFkeyName())) { body.append("name=\"").append(fkey.getFkeyName()).append("\", "); - if (!fkey.getDdl()) + } + if (!fkey.getDdl()) { body.append("ddl=false, "); + } String fkeyCols = StrUtils.listToString(fkey.getColumnNames()); fkeyCols = StrUtils.replace(fkeyCols, ",", "\",\""); String refCols = StrUtils.arrayToString(fkey.getRefTableAndColumns()); @@ -142,90 +157,130 @@ public abstract class TableModelUtilsOfJavaSrc {// NOSONAR body.append(StrUtils.replace(classDefinition, "$1", className)).append(" {\n\n"); // Fields + StringBuilder fieldSB = new StringBuilder(); StringBuilder pkeySB = new StringBuilder(); StringBuilder normalSB = new StringBuilder(); StringBuilder sb = null; + // 不知道为什么有些表的column 定义信息是重复的,我不是DBA不清楚原因。 + // 也需要还有什么废弃的标志,但前面的处理没有过滤,这里先临时处理一下。 + Set processed = new HashSet<>(); + // fieldStaticNames + if (fieldFlags) { + for (ColumnModel col : model.getColumns()) { + if (processed.contains(col.getColumnName())) { + continue; + } + processed.add(col.getColumnName()); + + fieldSB.append("\tpublic static final String ").append(col.getColumnName().toUpperCase()).append(" = \"").append(col.getColumnName()) .append("\";\n"); + } + } + processed.clear(); for (ColumnModel col : model.getColumns()) { + if (processed.contains(col.getColumnName())) continue; + processed.add(col.getColumnName()); Class javaType = TypeUtils.dialectTypeToJavaType(col.getColumnType()); - if (javaType == null) - continue; + + if (javaType == null) continue; + sb = col.getPkey() ? pkeySB : normalSB; + + if (!StringUtils.isEmpty(col.getComment())) { + sb.append("\t/**\n\t * ").append(col.getComment()).append("\n\t */\n"); + } + String fieldName = col.getEntityField(); - if (StrUtils.isEmpty(fieldName)) + + if (StrUtils.isEmpty(fieldName)) { fieldName = transColumnNameToFieldName(col.getColumnName()); - // fieldStaticNames - if (fieldFlags) - sb.append(" public static final String " + fieldName.toUpperCase() + " = \"" + col.getColumnName() - + "\";\n"); + } + // @Id - if (col.getPkey()) - sb.append(" @Id\n"); + if (col.getPkey()) { + sb.append("\t@Id\n"); + } // @Column boolean isStr = Type.VARCHAR.equals(col.getColumnType()) || Type.CHAR.equals(col.getColumnType()); - if (fieldFlags || !fieldName.equalsIgnoreCase(col.getColumnName()) || (isStr && 250 != col.getLength())) { - sb.append(" @Column("); - if (fieldFlags) - sb.append("name=").append(fieldName.toUpperCase()).append(", "); - else if (!fieldName.equalsIgnoreCase(col.getColumnName())) - sb.append("name=\"").append(col.getColumnName()).append("\", "); - - if (isStr && 250 != col.getLength()) + // 好魔幻的数字 + boolean lenNotEq250 = 250 != col.getLength(); + if (!fieldName.equalsIgnoreCase(col.getColumnName()) || (isStr && lenNotEq250)) { + sb.append("\t@Column("); + sb.append("name=\"").append(col.getColumnName()).append("\", "); + + if (isStr && lenNotEq250) { sb.append("length=").append(col.getLength()).append(", "); + } sb.setLength(sb.length() - 2); sb.append(")\n"); } // @SingleFKey for (FKeyModel fkey : model.getFkeyConstraints()) { - if (fkey.getColumnNames().size() != 1)// Not compound Fkey - continue; - if (!col.getColumnName().equalsIgnoreCase(fkey.getColumnNames().get(0))) - continue; - sb.append(" @SingleFKey"); + /* Not compound Fkey*/ + if (fkey.getColumnNames().size() != 1) continue; + if (!col.getColumnName().equalsIgnoreCase(fkey.getColumnNames().get(0))) continue; + sb.append("\t@SingleFKey"); sb.append("("); fkeyCount++; - if (!StrUtils.isEmpty(fkey.getFkeyName())) + if (!StrUtils.isEmpty(fkey.getFkeyName())) { sb.append("name=\"").append(fkey.getFkeyName()).append("\", "); - if (!fkey.getDdl()) + } + if (!fkey.getDdl()) { sb.append("ddl=false, "); + } String refCols = StrUtils.arrayToString(fkey.getRefTableAndColumns()); refCols = StrUtils.replace(refCols, ",", "\",\""); sb.append("refs={\"").append(refCols).append("\"}"); sb.append(")\n"); } - sb.append(" private ").append(javaType.getSimpleName()).append(" ").append(fieldName).append(";\n\n"); - } - body.append(pkeySB.toString()).append(normalSB.toString()); + + sb.append(" \tprivate ").append(javaType.getSimpleName()).append(" ").append(fieldName).append(";\n\n"); + } + body.append(fieldSB.toString()).append("\n\n") + .append(pkeySB.toString()).append("\n\n") + .append(normalSB.toString()).append("\n\n"); + fieldSB.setLength(0); pkeySB.setLength(0); normalSB.setLength(0); + processed.clear(); for (ColumnModel col : model.getColumns()) { + if (processed.contains(col.getColumnName())) continue; + + processed.add(col.getColumnName()); // getter Class javaType = TypeUtils.dialectTypeToJavaType(col.getColumnType()); - if (javaType == null) - continue; + + if (javaType == null) continue; + sb = col.getPkey() ? pkeySB : normalSB; String fieldName = col.getEntityField(); - if (StrUtils.isEmpty(fieldName)) + if (StrUtils.isEmpty(fieldName)) { fieldName = transColumnNameToFieldName(col.getColumnName()); + } String getFieldName = "get" + StrUtils.toUpperCaseFirstOne(fieldName); - sb.append(" public ").append(javaType.getSimpleName()).append(" ").append(getFieldName).append("(){\n"); - sb.append(" return ").append(fieldName).append(";\n"); - sb.append(" }\n\n"); + sb.append("\tpublic ").append(javaType.getSimpleName()).append(" ").append(getFieldName).append("(){\n"); + sb.append("\t\treturn ").append(fieldName).append(";\n"); + sb.append("\t}\n\n"); // settter String setFieldName = "set" + StrUtils.toUpperCaseFirstOne(fieldName); - sb.append(" public ").append(linkStyle ? className : "void").append(" ").append(setFieldName).append("(") - .append(javaType.getSimpleName()).append(" ").append(fieldName).append("){\n"); - sb.append(" this.").append(fieldName).append("=").append(fieldName).append(";\n"); - if (linkStyle) - sb.append(" return this;\n"); - sb.append(" }\n\n"); + if (linkStyle) { + sb.append("\tpublic ").append(className).append(" ").append(setFieldName).append("(") + .append(javaType.getSimpleName()).append(" ").append(fieldName).append("){\n"); + sb.append("\t\tthis.").append(fieldName).append("=").append(fieldName).append(";\n"); + sb.append("\t\treturn this;\n"); + } else { + sb.append("\tpublic ").append("void").append(" ").append(setFieldName).append("(") + .append(javaType.getSimpleName()).append(" ").append(fieldName).append("){\n"); + sb.append("\t\tthis.").append(fieldName).append("=").append(fieldName).append(";\n"); + } + sb.append("\t}\n\n"); } body.append(pkeySB.toString()).append(normalSB.toString()); - body.append("}"); + body.append("}\n"); return body.toString(); } 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 dd49b5c24055ec7f7384bf5c40083b20f31c5092..5864e707d71b46ee5f7951135d593ba961fc51a7 100644 --- a/core/src/main/java/com/github/drinkjava2/jdialects/TypeUtils.java +++ b/core/src/main/java/com/github/drinkjava2/jdialects/TypeUtils.java @@ -90,7 +90,7 @@ public abstract class TypeUtils {// NOSONAR /* JAVA8_END */ TYPE_TO_JAVA_MAP.put(Type.NUMERIC, BigDecimal.class); - TYPE_TO_JAVA_MAP.put(Type.BIGINT, BigInteger.class); + //TYPE_TO_JAVA_MAP.put(Type.BIGINT, BigInteger.class); TYPE_TO_JAVA_MAP.put(Type.BOOLEAN, Boolean.class); TYPE_TO_JAVA_MAP.put(Type.TINYINT, Byte.class); TYPE_TO_JAVA_MAP.put(Type.SMALLINT, Short.class); @@ -99,7 +99,8 @@ public abstract class TypeUtils {// NOSONAR TYPE_TO_JAVA_MAP.put(Type.BINARY, java.sql.Blob.class); TYPE_TO_JAVA_MAP.put(Type.BIT, Boolean.class); TYPE_TO_JAVA_MAP.put(Type.BLOB, java.sql.Blob.class); - TYPE_TO_JAVA_MAP.put(Type.CHAR, Character.class); + //TYPE_TO_JAVA_MAP.put(Type.CHAR, Character.class); + TYPE_TO_JAVA_MAP.put(Type.CHAR, String.class); TYPE_TO_JAVA_MAP.put(Type.CLOB, java.sql.Clob.class); TYPE_TO_JAVA_MAP.put(Type.DECIMAL, BigDecimal.class); TYPE_TO_JAVA_MAP.put(Type.DOUBLE, Double.class); diff --git a/core/src/main/java/com/github/drinkjava2/jsqlbox/DbContextUtils.java b/core/src/main/java/com/github/drinkjava2/jsqlbox/DbContextUtils.java index b8553c214daae5325324c9f6d111332ef114702a..60a08ccd816035eb97e4b87e23f21ed7ba727266 100644 --- a/core/src/main/java/com/github/drinkjava2/jsqlbox/DbContextUtils.java +++ b/core/src/main/java/com/github/drinkjava2/jsqlbox/DbContextUtils.java @@ -696,6 +696,7 @@ public abstract class DbContextUtils {// NOSONAR boolean foundColumnToInsert = false; SqlItem shardTableItem = null; SqlItem shardDbItem = null; + Dialect dialect = ctx.getDialect(); for (ColumnModel col : cols.values()) {// NOSONAR if (col == null || col.getTransientable() || !col.getInsertable()) continue; @@ -720,7 +721,7 @@ public abstract class DbContextUtils {// NOSONAR identityType = col.getColumnType(); identityCol = col; } else if (GenerationType.SNOWFLAKE.equals(idGen.getGenerationType())) {// Snow - sqlBody.append(col.getColumnName()); + sqlBody.append(dialect.wrapColumn(col.getColumnName())); SnowflakeCreator snow = ctx.getSnowflakeCreator(); if (snow == null) throw new DbException( @@ -731,7 +732,7 @@ public abstract class DbContextUtils {// NOSONAR foundColumnToInsert = true; writeValueToBeanFieldOrTail(col, entityBean, id); } else {// Normal Id Generator - sqlBody.append(col.getColumnName()); + sqlBody.append(dialect.wrapColumn(col.getColumnName())); Object id = idGen.getNextID(ctx, ctx.getDialect(), col.getColumnType()); sqlBody.append(param(id)); sqlBody.append(", "); @@ -740,7 +741,7 @@ public abstract class DbContextUtils {// NOSONAR } } else { if (!(((ignoreNull || ignoreEmpty) && value == null) || (ignoreEmpty && StrUtils.isEmpty(value)))) { - sqlBody.append(col.getColumnName()); + sqlBody.append(dialect.wrapColumn(col.getColumnName())); sqlBody.append(new SqlItem(SqlOption.PARAM, value)); sqlBody.append(", "); foundColumnToInsert = true; @@ -832,7 +833,7 @@ public abstract class DbContextUtils {// NOSONAR SqlItem shardDbItem = null; boolean ignoreNull = hasIgnoreNullItem(optionItems); // if have ignoreNull? boolean ignoreEmpty = hasIgnoreEmptyItem(optionItems); // if have ignoreEmpty? - + Dialect dialect = ctx.getDialect(); for (ColumnModel col : cols.values()) {// NOSONAR if (col.getTransientable() || !col.getUpdatable()) continue; @@ -855,13 +856,13 @@ public abstract class DbContextUtils {// NOSONAR if (col.getPkey()) { if (!sqlWhere.isEmpty()) sqlWhere.append(" and ");// NOSONAR - sqlWhere.append(col.getColumnName()).append("=?"); + sqlWhere.append(dialect.wrapColumn(col.getColumnName())).append("=?"); sqlWhere.append(param(value)); } else { if (!(((ignoreNull || ignoreEmpty) && value == null) || (ignoreEmpty && StrUtils.isEmpty(value)))) { if (!sqlBody.isEmpty()) sqlBody.append(", "); - sqlBody.append(col.getColumnName()).append("=? "); + sqlBody.append(dialect.wrapColumn(col.getColumnName())).append("=? "); sqlBody.append(param(value)); } } @@ -952,7 +953,7 @@ public abstract class DbContextUtils {// NOSONAR LinkArrayList sqlWhere = new LinkArrayList(); SqlItem shardTableItem = null; SqlItem shardDbItem = null; - + Dialect dialect = ctx.getDialect(); for (ColumnModel col : cols.values()) {// NOSONAR if (col == null || col.getTransientable()) continue; @@ -966,7 +967,7 @@ public abstract class DbContextUtils {// NOSONAR if (!sqlWhere.isEmpty()) sqlWhere.append(" and "); sqlWhere.append(param(value)); - sqlWhere.append(col.getColumnName()).append("=? "); + sqlWhere.append(dialect.wrapColumn(col.getColumnName())).append("=? "); } if (col.getShardTable() != null) // Sharding Table? shardTableItem = shardTB(EntityIdUtils.readFeidlValueFromEntityId(id, col)); @@ -1040,19 +1041,19 @@ public abstract class DbContextUtils {// NOSONAR List effectColumns = new ArrayList(); SqlItem shardTableItem = null; SqlItem shardDbItem = null; - + Dialect dialect = ctx.getDialect(); for (ColumnModel col : cols.values()) { if (col.getTransientable()) continue; if (col.getPkey()) { - sqlWhere.append(col.getColumnName()).append("=?") + sqlWhere.append(dialect.wrapColumn(col.getColumnName())).append("=?") .append(param(readValueFromBeanFieldOrTail(col, entityBean, false, false))).append(" and "); } if (col.getShardTable() != null) // Sharding Table? shardTableItem = shardTB(readValueFromBeanFieldOrTail(col, entityBean, false, false)); if (col.getShardDatabase() != null) // Sharding DB? shardDbItem = shardDB(readValueFromBeanFieldOrTail(col, entityBean, false, false)); - sqlBody.append(col.getColumnName()).append(", "); + sqlBody.append(dialect.wrapColumn(col.getColumnName())).append(", "); effectColumns.add(col); } sqlBody.remove(sqlBody.size() - 1);// delete the last ", " @@ -1200,6 +1201,7 @@ public abstract class DbContextUtils {// NOSONAR LinkArrayList sqlWhere = new LinkArrayList(); SqlItem shardTableItem = null; SqlItem shardDbItem = null; + Dialect dialect = ctx.getDialect(); for (ColumnModel col : cols.values()) { if (col.getTransientable()) continue; @@ -1208,7 +1210,7 @@ public abstract class DbContextUtils {// NOSONAR if (!sqlWhere.isEmpty()) sqlWhere.append(" and "); sqlWhere.append(param(value)); - sqlWhere.append(col.getColumnName()).append("=? "); + sqlWhere.append(dialect.wrapColumn(col.getColumnName())).append("=? "); } if (col.getShardTable() != null) // Sharding Table? shardTableItem = shardTB(EntityIdUtils.readFeidlValueFromEntityId(id, col)); @@ -1308,13 +1310,13 @@ public abstract class DbContextUtils {// NOSONAR LinkArrayList sqlBody = new LinkArrayList(); List effectColumns = new ArrayList(); - + Dialect dialect = ctx.getDialect(); for (ColumnModel col : cols.values()) { if (col.getTransientable()) continue; if (col.getShardTable() != null) throw new DbException("Fail to load all entity because ShardTable columns exist."); - sqlBody.append(col.getColumnName()).append(", "); + sqlBody.append(dialect.wrapColumn(col.getColumnName())).append(", "); effectColumns.add(col); } sqlBody.remove(sqlBody.size() - 1);// delete the last ", " diff --git a/core/src/main/java/com/github/drinkjava2/jsqlbox/converter/BaseFieldConverter.java b/core/src/main/java/com/github/drinkjava2/jsqlbox/converter/BaseFieldConverter.java index b8dd1a5b5fec1e4a53eec695d1a69377ec0f44f8..fce9b73ee88f07a50af2f8f71be2a67ca5636a91 100644 --- a/core/src/main/java/com/github/drinkjava2/jsqlbox/converter/BaseFieldConverter.java +++ b/core/src/main/java/com/github/drinkjava2/jsqlbox/converter/BaseFieldConverter.java @@ -15,6 +15,7 @@ import static com.github.drinkjava2.jdbpro.JDBPRO.param; import com.github.drinkjava2.jdbpro.LinkArrayList; import com.github.drinkjava2.jdbpro.SqlOption; +import com.github.drinkjava2.jdialects.Dialect; import com.github.drinkjava2.jdialects.model.ColumnModel; import com.github.drinkjava2.jsqlbox.DbContext; import com.github.drinkjava2.jsqlbox.DbContextUtils; @@ -30,15 +31,16 @@ public class BaseFieldConverter implements FieldConverter { @Override public void handleSQL(SqlOption sqlOption, DbContext ctx, ColumnModel col, Object entity, LinkArrayList sqlBody, LinkArrayList sqlWhere) { + Dialect dialect = ctx.getDialect(); if (SqlOption.UPDATE.equals(sqlOption)) { Object value = DbContextUtils.readValueFromBeanFieldOrTail(col, entity, false, false); if (!sqlBody.isEmpty()) sqlBody.append(", "); - sqlBody.append(col.getColumnName()).append("=?").append(param(value)); + sqlBody.append(dialect.wrapColumn(col.getColumnName())).append("=?").append(param(value)); } else if (SqlOption.DELETE.equals(sqlOption)) {// NOSONAR } else if (SqlOption.INSERT.equals(sqlOption)) { Object value = DbContextUtils.readValueFromBeanFieldOrTail(col, entity, false, false); - sqlBody.append(col.getColumnName()); + sqlBody.append(dialect.wrapColumn(col.getColumnName())); sqlBody.append(param(value)).append(","); } } diff --git a/core/src/main/java/com/github/drinkjava2/jsqlbox/converter/VersionFieldConverter.java b/core/src/main/java/com/github/drinkjava2/jsqlbox/converter/VersionFieldConverter.java index 71ce48009b6d7e9021fd7b93f832b627b29e0470..ba52195aab8d9d797d0400c2b151699e1cd3feb6 100644 --- a/core/src/main/java/com/github/drinkjava2/jsqlbox/converter/VersionFieldConverter.java +++ b/core/src/main/java/com/github/drinkjava2/jsqlbox/converter/VersionFieldConverter.java @@ -15,6 +15,7 @@ import static com.github.drinkjava2.jdbpro.JDBPRO.param; import com.github.drinkjava2.jdbpro.LinkArrayList; import com.github.drinkjava2.jdbpro.SqlOption; +import com.github.drinkjava2.jdialects.Dialect; import com.github.drinkjava2.jdialects.Type; import com.github.drinkjava2.jdialects.model.ColumnModel; import com.github.drinkjava2.jsqlbox.DbContext; @@ -63,27 +64,28 @@ public class VersionFieldConverter extends BaseFieldConverter { @Override public void handleSQL(SqlOption sqlOption, DbContext ctx, ColumnModel col, Object entity, LinkArrayList sqlBody, LinkArrayList sqlWhere) { - Object oldVersion = DbContextUtils.readValueFromBeanFieldOrTail(col, entity, false, false); - Object firstOrOldVersion = getFirstVersion(col, oldVersion); - Object nextVersion = getNextVersion(col, firstOrOldVersion); + Object oldVersion = DbContextUtils.readValueFromBeanFieldOrTail(col, entity, false, false); + Object firstOrOldVersion = getFirstVersion(col, oldVersion); + Object nextVersion = getNextVersion(col, firstOrOldVersion); + Dialect dialect = ctx.getDialect(); if (SqlOption.UPDATE.equals(sqlOption)) { DbContextUtils.writeValueToBeanFieldOrTail(col, entity, nextVersion); if (!sqlBody.isEmpty()) sqlBody.append(", "); - sqlBody.append(col.getColumnName()).append("=?").append(param(nextVersion)); + sqlBody.append(dialect.wrapColumn(col.getColumnName())).append("=?").append(param(nextVersion)); if (!sqlWhere.isEmpty()) sqlWhere.append(" and ");// NOSONAR - sqlWhere.append(col.getColumnName()).append("=?").append(param(firstOrOldVersion)); + sqlWhere.append(dialect.wrapColumn(col.getColumnName())).append("=?").append(param(firstOrOldVersion)); } else if (SqlOption.DELETE.equals(sqlOption)) { if (!sqlWhere.isEmpty()) sqlWhere.append(" and ");// NOSONAR - sqlWhere.append(col.getColumnName()).append("=?"); + sqlWhere.append(dialect.wrapColumn(col.getColumnName())).append("=?"); sqlWhere.append(param(firstOrOldVersion)); } else if (SqlOption.INSERT.equals(sqlOption)) { if (oldVersion != firstOrOldVersion) DbContextUtils.writeValueToBeanFieldOrTail(col, entity, firstOrOldVersion); - sqlBody.append(col.getColumnName()); + sqlBody.append(dialect.wrapColumn(col.getColumnName())); sqlBody.append(param(firstOrOldVersion)).append(","); } } diff --git a/core/src/main/java/com/github/drinkjava2/jsqlbox/handler/SSHandler.java b/core/src/main/java/com/github/drinkjava2/jsqlbox/handler/SSHandler.java index 3e8d4c40f1d42a653599643138a2c84afa8008f3..d6a4b373ff6251104fa2371bbc879b9e626db59f 100644 --- a/core/src/main/java/com/github/drinkjava2/jsqlbox/handler/SSHandler.java +++ b/core/src/main/java/com/github/drinkjava2/jsqlbox/handler/SSHandler.java @@ -132,8 +132,8 @@ public class SSHandler extends DefaultOrderSqlHandler { "Alias '" + alias + "' not same as tableModel's alias '" + ps.getAliases()[i] + "'"); for (ColumnModel col : tb.getColumns()) { if (!col.getTransientable()) - sb.append(alias).append(".").append(col.getColumnName()).append(" as ").append(alias) - .append("_").append(col.getColumnName()).append(", "); + sb.append(alias).append(".").append(ps.wrapColumn(col.getColumnName())).append(" as ").append(alias) + .append("_").append(ps.wrapColumn(col.getColumnName())).append(", "); } break; } @@ -167,8 +167,8 @@ public class SSHandler extends DefaultOrderSqlHandler { } } if (found) - sb.append(alias).append(".").append(col.getColumnName()).append(" as ").append(alias) - .append("_").append(col.getColumnName()).append(", "); + sb.append(alias).append(".").append(ps.wrapColumn(col.getColumnName())).append(" as ").append(alias) + .append("_").append(ps.wrapColumn(col.getColumnName())).append(", "); } break; } diff --git a/core/src/main/java/com/github/drinkjava2/jsqlbox/sqlitem/EntityKeyItem.java b/core/src/main/java/com/github/drinkjava2/jsqlbox/sqlitem/EntityKeyItem.java index 08b89359500c5742d9af983e373a23a599f79ce2..570c11156db5f215710dbf442fdbba15be4dc792 100644 --- a/core/src/main/java/com/github/drinkjava2/jsqlbox/sqlitem/EntityKeyItem.java +++ b/core/src/main/java/com/github/drinkjava2/jsqlbox/sqlitem/EntityKeyItem.java @@ -55,7 +55,7 @@ public class EntityKeyItem implements CustomizedSqlItem { if (col.getPkey() && !col.getTransientable()) { if (i > 0) ps.addSql(" and "); - ps.addSql(alias).append(".").append(col.getColumnName()).append("=? "); + ps.addSql(alias).append(".").append(ps.wrapColumn(col.getColumnName())).append("=? "); Object value = DbContextUtils.readValueFromBeanFieldOrTail(col, entity, false, false); ps.addParam(value); i++; diff --git a/core/src/main/java/com/github/drinkjava2/jsqlbox/sqlitem/SampleItem.java b/core/src/main/java/com/github/drinkjava2/jsqlbox/sqlitem/SampleItem.java index 7ee43cf4cd215ace69c3f3406bd4632c4bbbf0e9..60515e571b3f234dc6d00c0183e31789b58a6692 100644 --- a/core/src/main/java/com/github/drinkjava2/jsqlbox/sqlitem/SampleItem.java +++ b/core/src/main/java/com/github/drinkjava2/jsqlbox/sqlitem/SampleItem.java @@ -11,11 +11,6 @@ */ package com.github.drinkjava2.jsqlbox.sqlitem; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - import com.github.drinkjava2.jdbpro.CustomizedSqlItem; import com.github.drinkjava2.jdbpro.PreparedSQL; import com.github.drinkjava2.jdialects.ClassCacheUtils; @@ -24,6 +19,10 @@ import com.github.drinkjava2.jdialects.model.ColumnModel; import com.github.drinkjava2.jdialects.model.TableModel; import com.github.drinkjava2.jsqlbox.DbContextUtils; import com.github.drinkjava2.jsqlbox.DbException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; /** * This Sample is a CustomizedSqlItem, used to build a " where field1=? and @@ -108,13 +107,13 @@ public class SampleItem implements CustomizedSqlItem { if (fieldValue != null && (nullFieldsOnly == null || !nullFieldsOnly)) { if (!isfirst) ps.addSql(" and "); - ps.addSql(col.getColumnName()).append(" =? "); + ps.addSql(ps.wrapColumn(col.getColumnName())).append(" =? "); ps.addParam(fieldValue); isfirst = false; } else if (nullFieldsOnly == null || nullFieldsOnly) { if (!isfirst) ps.addSql(" and "); - ps.addSql(col.getColumnName()).append(" is null "); + ps.addSql(ps.wrapColumn(col.getColumnName())).append(" is null "); isfirst = false; } }