killbill-uncached

util: fix ValidationManager to work with H2 Signed-off-by:

12/13/2012 3:19:52 PM

Details

diff --git a/util/src/main/java/com/ning/billing/util/validation/dao/DatabaseSchemaSqlDao.java b/util/src/main/java/com/ning/billing/util/validation/dao/DatabaseSchemaSqlDao.java
index fad2b77..f41e350 100644
--- a/util/src/main/java/com/ning/billing/util/validation/dao/DatabaseSchemaSqlDao.java
+++ b/util/src/main/java/com/ning/billing/util/validation/dao/DatabaseSchemaSqlDao.java
@@ -26,12 +26,12 @@ import org.skife.jdbi.v2.StatementContext;
 import org.skife.jdbi.v2.sqlobject.Bind;
 import org.skife.jdbi.v2.sqlobject.SqlQuery;
 import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
-import org.skife.jdbi.v2.sqlobject.stringtemplate.ExternalizedSqlViaStringTemplate3;
+import org.skife.jdbi.v2.sqlobject.stringtemplate.UseStringTemplate3StatementLocator;
 import org.skife.jdbi.v2.tweak.ResultSetMapper;
 
 import com.ning.billing.util.validation.DefaultColumnInfo;
 
-@ExternalizedSqlViaStringTemplate3
+@UseStringTemplate3StatementLocator
 @RegisterMapper(DatabaseSchemaSqlDao.ColumnInfoMapper.class)
 public interface DatabaseSchemaSqlDao {
 
diff --git a/util/src/main/java/com/ning/billing/util/validation/ValidationManager.java b/util/src/main/java/com/ning/billing/util/validation/ValidationManager.java
index 1392f82..740f88e 100644
--- a/util/src/main/java/com/ning/billing/util/validation/ValidationManager.java
+++ b/util/src/main/java/com/ning/billing/util/validation/ValidationManager.java
@@ -18,6 +18,7 @@ package com.ning.billing.util.validation;
 
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
+import java.sql.Types;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
@@ -28,6 +29,7 @@ import com.ning.billing.util.validation.dao.DatabaseSchemaDao;
 import com.google.inject.Inject;
 
 public class ValidationManager {
+
     private final DatabaseSchemaDao dao;
 
     // table name, string name, column info
@@ -126,7 +128,8 @@ public class ValidationManager {
 
     private boolean isValidLengthString(final DefaultColumnInfo columnInfo, final Object value) {
         if (columnInfo.getMaximumLength() != 0) {
-            if (value != null) {
+            // H2 will report a character_maximum_length for decimal
+            if (value != null && value instanceof String) {
                 if (value.toString().length() > columnInfo.getMaximumLength()) {
                     return false;
                 }
@@ -137,7 +140,8 @@ public class ValidationManager {
     }
 
     private boolean isValidLengthChar(final DefaultColumnInfo columnInfo, final Object value) {
-        if (columnInfo.getDataType().equals("char")) {
+        // MySQL reports data_type as Strings, H2 as SQLTypes
+        if (columnInfo.getDataType().equals("char") || columnInfo.getDataType().equals(String.valueOf(Types.CHAR))) {
             if (value == null) {
                 return false;
             } else {
@@ -152,7 +156,8 @@ public class ValidationManager {
 
     private boolean hasValidPrecision(final DefaultColumnInfo columnInfo, final Object value) {
         if (columnInfo.getPrecision() != 0) {
-            if (value != null) {
+            // H2 will report a numeric precision for varchar columns
+            if (value != null && !(value instanceof String)) {
                 final BigDecimal bigDecimalValue = new BigDecimal(value.toString());
                 if (bigDecimalValue.precision() > columnInfo.getPrecision()) {
                     return false;