Author: deepak
Date: Sat Jul 22 13:14:43 2017 New Revision: 1802693 URL: http://svn.apache.org/viewvc?rev=1802693&view=rev Log: Fixed: Added check to avoid datetime and time field warning (OFBIZ-9496) The warning message generated by OFBiz is a false positive caused by the fact that the way OFBiz performs the check is too simplistic: OFBiz parses for the content of the "()" in the fieldtype mapping and assumes that it is the column size. However, in MySQL and possibly other database management systems, this is only true for varchar field definitions but not for datetime fields. The column size for DATETIME(3) is not 3. We should probably refactor the code in DatabaseUtil to compare the SQL field type from the JDBC driver, if possible to retrieve, (i.e. from the database) with the whole content (without any sting manipulation) of the attribute sql-type of the element field-type-def type (in fieldtype*.xml) i.e. "DATETIME(3)"; if they differ then a warning should be printed. In this way we will have a more generic, simpler and more reliable tool to spot differences in the database This is a workaround to fix the warning. Thanks Jacopo. Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/DatabaseUtil.java Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/DatabaseUtil.java URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/DatabaseUtil.java?rev=1802693&r1=1802692&r2=1802693&view=diff ============================================================================== --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/DatabaseUtil.java (original) +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/DatabaseUtil.java Sat Jul 22 13:14:43 2017 @@ -292,6 +292,7 @@ public class DatabaseUtil { if (openParen > 0 && closeParen > 0 && closeParen > openParen) { typeName = fullTypeStr.substring(0, openParen); + if (!("DATETIME".equals(typeName) || !"TIME".equals(typeName))) { // for DATETIME and TIME fields the number within the parenthesis doesn't represent the column size if (comma > 0 && comma > openParen && comma < closeParen) { String csStr = fullTypeStr.substring(openParen + 1, comma); try { @@ -306,7 +307,7 @@ public class DatabaseUtil { } catch (NumberFormatException e) { Debug.logError(e, module); } - } else { + } else if (openParen + 1 < closeParen) { String csStr = fullTypeStr.substring(openParen + 1, closeParen); try { columnSize = Integer.parseInt(csStr); @@ -314,6 +315,7 @@ public class DatabaseUtil { Debug.logError(e, module); } } + } } else { typeName = fullTypeStr; } |
Free forum by Nabble | Edit this page |