From 59670d0303e04a6355b343682eb87f5a3f53140a Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Mon, 29 Aug 2016 20:54:49 +1200 Subject: [PATCH] #817 - SqlRow getBoolean() does not treat numeric 1 value as true (with MySql and other DB's without native boolean type) --- .../server/core/BasicTypeConverter.java | 3 ++ .../com/avaje/ebean/SqlRowBooleanTest.java | 19 +++++++++++ .../server/core/BasicTypeConverterTest.java | 34 +++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 src/test/java/com/avaje/ebean/SqlRowBooleanTest.java create mode 100644 src/test/java/com/avaje/ebeaninternal/server/core/BasicTypeConverterTest.java diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/BasicTypeConverter.java b/src/main/java/com/avaje/ebeaninternal/server/core/BasicTypeConverter.java index ef2501a32..d98ad3f65 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/BasicTypeConverter.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/BasicTypeConverter.java @@ -150,6 +150,9 @@ public final class BasicTypeConverter implements Serializable { if (value instanceof Boolean) { return (Boolean) value; } + if (value instanceof Number) { + return ((Number)value).intValue() == 1; + } String s = value.toString(); return s.equalsIgnoreCase(dbTrueValue); } diff --git a/src/test/java/com/avaje/ebean/SqlRowBooleanTest.java b/src/test/java/com/avaje/ebean/SqlRowBooleanTest.java new file mode 100644 index 000000000..46b5dc8b3 --- /dev/null +++ b/src/test/java/com/avaje/ebean/SqlRowBooleanTest.java @@ -0,0 +1,19 @@ +package com.avaje.ebean; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class SqlRowBooleanTest { + + @Test + public void getBoolean() { + + SqlQuery sqlQuery = Ebean.createSqlQuery("SELECT 1 IS NOT NULL AS `ISNT_NULL`"); + SqlRow row = sqlQuery.findUnique(); + + Boolean value = row.getBoolean("ISNT_NULL"); + + assertThat(value).isTrue(); + } +} \ No newline at end of file diff --git a/src/test/java/com/avaje/ebeaninternal/server/core/BasicTypeConverterTest.java b/src/test/java/com/avaje/ebeaninternal/server/core/BasicTypeConverterTest.java new file mode 100644 index 000000000..4f061a77f --- /dev/null +++ b/src/test/java/com/avaje/ebeaninternal/server/core/BasicTypeConverterTest.java @@ -0,0 +1,34 @@ +package com.avaje.ebeaninternal.server.core; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class BasicTypeConverterTest { + + @Test + public void toBoolean_when_1_long() throws Exception { + assertTrue(BasicTypeConverter.toBoolean(1L, "T")); + } + + @Test + public void toBoolean_when_1_int() throws Exception { + assertTrue(BasicTypeConverter.toBoolean(1, "T")); + } + + @Test + public void toBoolean_when_0() throws Exception { + assertFalse(BasicTypeConverter.toBoolean(0L, "T")); + } + + @Test + public void toBoolean_when_TrueValue() throws Exception { + assertTrue(BasicTypeConverter.toBoolean("T", "T")); + } + + @Test + public void toBoolean_when_notTrueValue() throws Exception { + assertFalse(BasicTypeConverter.toBoolean("F", "T")); + } + +} \ No newline at end of file