You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Evgeny Ryabitskiy (JIRA)" <ji...@apache.org> on 2010/05/11 09:27:42 UTC

[jira] Created: (CAY-1430) Problems with TINYINT type mapping

Problems with TINYINT type mapping
----------------------------------

                 Key: CAY-1430
                 URL: https://issues.apache.org/jira/browse/CAY-1430
             Project: Cayenne
          Issue Type: Bug
          Components: Core Library
         Environment: MS SQL 2005
            Reporter: Evgeny Ryabitskiy
            Assignee: Evgeny Ryabitskiy
             Fix For: 3.1M1


Today I fount some not nice thing.
If I am selecting from column with TINYINT type, Cayenne trying to map it to Byte
But TINYINT can have values from 0 to 255 (which is greater then Byte).

So I got this:

java.sql.SQLException: Numeric overflow in conversion of value 160 to type TINYINT.
	at net.sourceforge.jtds.jdbc.Support.convert(Support.java:251)
	at net.sourceforge.jtds.jdbc.JtdsResultSet.getByte(JtdsResultSet.java:648)
	at org.apache.cayenne.access.types.ByteType.materializeObject(ByteType.java:48)
	at org.apache.cayenne.access.jdbc.JDBCResultIterator.readDataRow(JDBCResultIterator.java:291)
	at org.apache.cayenne.access.jdbc.JDBCResultIterator.nextDataRow(JDBCResultIterator.java:145)
	at org.apache.cayenne.access.jdbc.JDBCResultIterator.dataRows(JDBCResultIterator.java:115)
	at org.apache.cayenne.access.jdbc.SQLTemplateAction.processSelectResult(SQLTemplateAction.java:212)
	at org.apache.cayenne.access.jdbc.SQLTemplateAction.execute(SQLTemplateAction.java:153)
	at org.apache.cayenne.access.jdbc.SQLTemplateAction.performAction(SQLTemplateAction.java:107)
	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:59)
	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:273)
	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:301)
	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:60)
	at org.apache.cayenne.access.DataDomainQueryAction$1.transform(DataDomainQueryAction.java:273)
	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:826)
	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:270)
	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:110)
	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:746)
	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:217)
	at org.apache.cayenne.access.DataContextQueryAction.execute(DataContextQueryAction.java:54)
	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1395)
	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1384)

My idea is to map TINYINT to Short by default. Because:
1) Some databases don't support this type
2) It will handle problem described above
3) I think in 99% cases you don't need it on side of Java application (almost same with short) or if you need you can easily get it from any Number type.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (CAY-1430) Problems with TINYINT type mapping

Posted by "Andrus Adamchik (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/CAY-1430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12870767#action_12870767 ] 

Andrus Adamchik commented on CAY-1430:
--------------------------------------

> Maybe we can remove TINYINT from modeller mapping? not to confuse users.... 

+1 to remapping TINYINT as SHORT
-1 to removing it - it is part of JDBC spec after all.

> Problems with TINYINT type mapping
> ----------------------------------
>
>                 Key: CAY-1430
>                 URL: https://issues.apache.org/jira/browse/CAY-1430
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>         Environment: MS SQL 2005
>            Reporter: Evgeny Ryabitskiy
>            Assignee: Evgeny Ryabitskiy
>             Fix For: 3.1M1
>
>
> Today I fount some not nice thing.
> If I am selecting from column with TINYINT type, Cayenne trying to map it to Byte
> But TINYINT can have values from 0 to 255 (which is greater then Byte).
> So I got this:
> java.sql.SQLException: Numeric overflow in conversion of value 160 to type TINYINT.
> 	at net.sourceforge.jtds.jdbc.Support.convert(Support.java:251)
> 	at net.sourceforge.jtds.jdbc.JtdsResultSet.getByte(JtdsResultSet.java:648)
> 	at org.apache.cayenne.access.types.ByteType.materializeObject(ByteType.java:48)
> 	at org.apache.cayenne.access.jdbc.JDBCResultIterator.readDataRow(JDBCResultIterator.java:291)
> 	at org.apache.cayenne.access.jdbc.JDBCResultIterator.nextDataRow(JDBCResultIterator.java:145)
> 	at org.apache.cayenne.access.jdbc.JDBCResultIterator.dataRows(JDBCResultIterator.java:115)
> 	at org.apache.cayenne.access.jdbc.SQLTemplateAction.processSelectResult(SQLTemplateAction.java:212)
> 	at org.apache.cayenne.access.jdbc.SQLTemplateAction.execute(SQLTemplateAction.java:153)
> 	at org.apache.cayenne.access.jdbc.SQLTemplateAction.performAction(SQLTemplateAction.java:107)
> 	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:59)
> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:273)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:301)
> 	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:60)
> 	at org.apache.cayenne.access.DataDomainQueryAction$1.transform(DataDomainQueryAction.java:273)
> 	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:826)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:270)
> 	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:110)
> 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:746)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:217)
> 	at org.apache.cayenne.access.DataContextQueryAction.execute(DataContextQueryAction.java:54)
> 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1395)
> 	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1384)
> My idea is to map TINYINT to Short by default. Because:
> 1) Some databases don't support this type
> 2) It will handle problem described above
> 3) I think in 99% cases you don't need it on side of Java application (almost same with short) or if you need you can easily get it from any Number type.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (CAY-1430) Problems with TINYINT type mapping

Posted by "Evgeny Ryabitskiy (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/CAY-1430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12870665#action_12870665 ] 

Evgeny Ryabitskiy commented on CAY-1430:
----------------------------------------

Problem fixed.

Maybe we can remove TINYINT from modeller mapping? not to confuse users....

> Problems with TINYINT type mapping
> ----------------------------------
>
>                 Key: CAY-1430
>                 URL: https://issues.apache.org/jira/browse/CAY-1430
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>         Environment: MS SQL 2005
>            Reporter: Evgeny Ryabitskiy
>            Assignee: Evgeny Ryabitskiy
>             Fix For: 3.1M1
>
>
> Today I fount some not nice thing.
> If I am selecting from column with TINYINT type, Cayenne trying to map it to Byte
> But TINYINT can have values from 0 to 255 (which is greater then Byte).
> So I got this:
> java.sql.SQLException: Numeric overflow in conversion of value 160 to type TINYINT.
> 	at net.sourceforge.jtds.jdbc.Support.convert(Support.java:251)
> 	at net.sourceforge.jtds.jdbc.JtdsResultSet.getByte(JtdsResultSet.java:648)
> 	at org.apache.cayenne.access.types.ByteType.materializeObject(ByteType.java:48)
> 	at org.apache.cayenne.access.jdbc.JDBCResultIterator.readDataRow(JDBCResultIterator.java:291)
> 	at org.apache.cayenne.access.jdbc.JDBCResultIterator.nextDataRow(JDBCResultIterator.java:145)
> 	at org.apache.cayenne.access.jdbc.JDBCResultIterator.dataRows(JDBCResultIterator.java:115)
> 	at org.apache.cayenne.access.jdbc.SQLTemplateAction.processSelectResult(SQLTemplateAction.java:212)
> 	at org.apache.cayenne.access.jdbc.SQLTemplateAction.execute(SQLTemplateAction.java:153)
> 	at org.apache.cayenne.access.jdbc.SQLTemplateAction.performAction(SQLTemplateAction.java:107)
> 	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:59)
> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:273)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:301)
> 	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:60)
> 	at org.apache.cayenne.access.DataDomainQueryAction$1.transform(DataDomainQueryAction.java:273)
> 	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:826)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:270)
> 	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:110)
> 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:746)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:217)
> 	at org.apache.cayenne.access.DataContextQueryAction.execute(DataContextQueryAction.java:54)
> 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1395)
> 	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1384)
> My idea is to map TINYINT to Short by default. Because:
> 1) Some databases don't support this type
> 2) It will handle problem described above
> 3) I think in 99% cases you don't need it on side of Java application (almost same with short) or if you need you can easily get it from any Number type.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Closed: (CAY-1430) Problems with TINYINT type mapping

Posted by "Evgeny Ryabitskiy (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CAY-1430?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Evgeny Ryabitskiy closed CAY-1430.
----------------------------------

    Resolution: Fixed

Fixed in 3.1 branch. Closed.

> Problems with TINYINT type mapping
> ----------------------------------
>
>                 Key: CAY-1430
>                 URL: https://issues.apache.org/jira/browse/CAY-1430
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>         Environment: MS SQL 2005
>            Reporter: Evgeny Ryabitskiy
>            Assignee: Evgeny Ryabitskiy
>             Fix For: 3.1M1
>
>
> Today I fount some not nice thing.
> If I am selecting from column with TINYINT type, Cayenne trying to map it to Byte
> But TINYINT can have values from 0 to 255 (which is greater then Byte).
> So I got this:
> java.sql.SQLException: Numeric overflow in conversion of value 160 to type TINYINT.
> 	at net.sourceforge.jtds.jdbc.Support.convert(Support.java:251)
> 	at net.sourceforge.jtds.jdbc.JtdsResultSet.getByte(JtdsResultSet.java:648)
> 	at org.apache.cayenne.access.types.ByteType.materializeObject(ByteType.java:48)
> 	at org.apache.cayenne.access.jdbc.JDBCResultIterator.readDataRow(JDBCResultIterator.java:291)
> 	at org.apache.cayenne.access.jdbc.JDBCResultIterator.nextDataRow(JDBCResultIterator.java:145)
> 	at org.apache.cayenne.access.jdbc.JDBCResultIterator.dataRows(JDBCResultIterator.java:115)
> 	at org.apache.cayenne.access.jdbc.SQLTemplateAction.processSelectResult(SQLTemplateAction.java:212)
> 	at org.apache.cayenne.access.jdbc.SQLTemplateAction.execute(SQLTemplateAction.java:153)
> 	at org.apache.cayenne.access.jdbc.SQLTemplateAction.performAction(SQLTemplateAction.java:107)
> 	at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:59)
> 	at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:273)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:301)
> 	at org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:60)
> 	at org.apache.cayenne.access.DataDomainQueryAction$1.transform(DataDomainQueryAction.java:273)
> 	at org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:826)
> 	at org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:270)
> 	at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:110)
> 	at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:746)
> 	at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:217)
> 	at org.apache.cayenne.access.DataContextQueryAction.execute(DataContextQueryAction.java:54)
> 	at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1395)
> 	at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1384)
> My idea is to map TINYINT to Short by default. Because:
> 1) Some databases don't support this type
> 2) It will handle problem described above
> 3) I think in 99% cases you don't need it on side of Java application (almost same with short) or if you need you can easily get it from any Number type.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.