From 53daa02e8bb97dfec8c21d66a26516116c9b60e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 10 Dec 2014 19:51:02 +0200 Subject: [PATCH] Fix behaviour on Boolean value --- .../query/sql/types/AbstractNumberType.java | 12 +++- .../java/com/mysema/query/Connections.java | 4 ++ .../com/mysema/query/SelectMySQLBase.java | 21 +++++-- .../mysema/query/sql/domain/QNumberTest.java | 55 +++++++++++++++++++ 4 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractNumberType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractNumberType.java index 29f11597b..463de58bd 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractNumberType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractNumberType.java @@ -31,8 +31,16 @@ public abstract class AbstractNumberType> exten @Override public T getValue(ResultSet rs, int startIndex) throws SQLException { - Number num = (Number) rs.getObject(startIndex); - return num != null ? MathUtils.cast(num, getReturnedClass()) : null; + Object obj = rs.getObject(startIndex); + if (obj instanceof Number) { + return MathUtils.cast((Number) obj, getReturnedClass()); + } else if (obj instanceof Boolean) { + return MathUtils.cast(Boolean.TRUE.equals(obj) ? 1 : 0, getReturnedClass()); + } else if (obj != null) { + throw new IllegalArgumentException(obj.toString()); + } else { + return null; + } } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 29b7b4c7c..97b3e405f 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -669,6 +669,10 @@ public final class Connections { stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + // numbers + stmt.execute("drop table if exists NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 tinyint(1))"); + // xml stmt.execute("drop table if exists XML_TEST"); stmt.execute("create table XML_TEST(COL varchar(128))"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java index 967bd839e..2647cf1b1 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java @@ -1,12 +1,12 @@ package com.mysema.query; -import static com.mysema.query.Constants.survey; -import static com.mysema.query.Target.MYSQL; - -import org.junit.Test; - +import com.mysema.query.sql.domain.QNumberTest; import com.mysema.query.sql.mysql.MySQLQuery; import com.mysema.testutil.IncludeIn; +import org.junit.Test; +import static com.mysema.query.Constants.survey; +import static com.mysema.query.Target.MYSQL; +import static org.junit.Assert.assertEquals; public class SelectMySQLBase extends AbstractBaseTest { @@ -30,4 +30,15 @@ public class SelectMySQLBase extends AbstractBaseTest { mysqlQuery().from(survey).straightJoin().list(survey.id); } + @Test + @IncludeIn(MYSQL) + public void Tinyint() { + QNumberTest numberTest = QNumberTest.numberTest; + delete(numberTest).execute(); + insert(numberTest).set(numberTest.col1Boolean, true).execute(); + insert(numberTest).set(numberTest.col1Number, 1).execute(); + assertEquals(2, query().from(numberTest).list(numberTest.col1Boolean).size()); + assertEquals(2, query().from(numberTest).list(numberTest.col1Number).size()); + } + } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java new file mode 100644 index 000000000..f39fb7d96 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java @@ -0,0 +1,55 @@ +package com.mysema.query.sql.domain; + +import javax.annotation.Generated; +import java.sql.Types; + +import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.sql.spatial.RelationalPathSpatial; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.BooleanPath; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; + + + +/** + * QNumberTest is a Querydsl query type for QNumberTest + */ +@Generated("com.mysema.query.sql.codegen.MetaDataSerializer") +public class QNumberTest extends RelationalPathSpatial { + + private static final long serialVersionUID = 291758928; + + public static final QNumberTest numberTest = new QNumberTest("NUMBER_TEST"); + + public final BooleanPath col1Boolean = createBoolean("col1"); + + public final NumberPath col1Number = createNumber("col2", Byte.class); + + public QNumberTest(String variable) { + super(QNumberTest.class, forVariable(variable), "null", "NUMBER_TEST"); + addMetadata(); + } + + public QNumberTest(String variable, String schema, String table) { + super(QNumberTest.class, forVariable(variable), schema, table); + addMetadata(); + } + + public QNumberTest(Path path) { + super(path.getType(), path.getMetadata(), "null", "NUMBER_TEST"); + addMetadata(); + } + + public QNumberTest(PathMetadata metadata) { + super(QNumberTest.class, metadata, "null", "NUMBER_TEST"); + addMetadata(); + } + + public void addMetadata() { + addMetadata(col1Boolean, ColumnMetadata.named("col1").withIndex(1).ofType(Types.BIT)); + addMetadata(col1Number, ColumnMetadata.named("col1").withIndex(1).ofType(Types.BIT)); + } + +}