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;
                                     }


Reply via email to