Changeset 3047


Ignore:
Timestamp:
01/17/12 15:47:21 (4 months ago)
Author:
kasper
Message:

Ticket #750: Used column types for determining which ResultSet?.get method to use...

Location:
MetaModel/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • MetaModel/trunk/core/src/main/java/org/eobjects/metamodel/schema/ColumnType.java

    r1391 r3047  
    3030import java.lang.reflect.Field; 
    3131import java.math.BigInteger; 
     32import java.sql.Blob; 
     33import java.sql.Clob; 
    3234import java.util.Comparator; 
    3335import java.util.Date; 
     
    6870 
    6971        /** 
     72         * Binary types 
     73         */ 
     74        BINARY(BINARY_TYPE), VARBINARY(BINARY_TYPE), LONGVARBINARY(BINARY_TYPE), BLOB( 
     75                        BINARY_TYPE), 
     76 
     77        /** 
    7078         * Other 
    7179         */ 
    72         BINARY(BINARY_TYPE), VARBINARY(BINARY_TYPE), LONGVARBINARY(BINARY_TYPE), NULL( 
    73                         OTHER_TYPE), OTHER(OTHER_TYPE), JAVA_OBJECT(OTHER_TYPE), DISTINCT( 
    74                         OTHER_TYPE), STRUCT(OTHER_TYPE), ARRAY(OTHER_TYPE), BLOB( 
    75                         BINARY_TYPE), REF(OTHER_TYPE), DATALINK(OTHER_TYPE), ROWID( 
    76                         OTHER_TYPE), SQLXML(OTHER_TYPE); 
     80        NULL(OTHER_TYPE), OTHER(OTHER_TYPE), JAVA_OBJECT(OTHER_TYPE), DISTINCT( 
     81                        OTHER_TYPE), STRUCT(OTHER_TYPE), ARRAY(OTHER_TYPE), REF(OTHER_TYPE), DATALINK( 
     82                        OTHER_TYPE), ROWID(OTHER_TYPE), SQLXML(OTHER_TYPE); 
    7783 
    7884        private SuperColumnType _superType; 
     
    154160                case CHAR: 
    155161                        return Character.class; 
     162                case BLOB: 
     163                        return Blob.class; 
     164                case CLOB: 
     165                case NCLOB: 
     166                        return Clob.class; 
    156167                default: 
    157168                        // All other types have fitting java equivalent classes in the super 
  • MetaModel/trunk/core/src/main/java/org/eobjects/metamodel/schema/SuperColumnType.java

    r1391 r3047  
    2929 
    3030        BOOLEAN_TYPE(Boolean.class), LITERAL_TYPE(String.class), NUMBER_TYPE( 
    31                         Number.class), TIME_TYPE(Date.class), BINARY_TYPE(Object.class), OTHER_TYPE( 
     31                        Number.class), TIME_TYPE(Date.class), BINARY_TYPE(byte[].class), OTHER_TYPE( 
    3232                        Object.class); 
    3333 
  • MetaModel/trunk/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDataContext.java

    r3016 r3047  
    956956                                update.run(updateCallback); 
    957957                        } 
    958                 } finally { 
    959                         updateCallback.close(); 
     958                        updateCallback.close(true); 
     959                } catch (RuntimeException e) { 
     960                        updateCallback.close(false); 
     961                        throw e; 
    960962                } 
    961963        } 
  • MetaModel/trunk/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcDataSet.java

    r2990 r3047  
    3636import org.eobjects.metamodel.query.Query; 
    3737import org.eobjects.metamodel.query.SelectItem; 
     38import org.eobjects.metamodel.schema.Column; 
     39import org.eobjects.metamodel.schema.ColumnType; 
    3840 
    3941/** 
     
    9799                                Object[] values = new Object[_selectItems.length]; 
    98100                                for (int i = 0; i < values.length; i++) { 
    99                                         values[i] = _resultSet.getObject(i + 1); 
     101 
     102                                        values[i] = getValue(_resultSet, i); 
    100103 
    101104                                        try { 
     
    122125        } 
    123126 
     127        private Object getValue(ResultSet resultSet, int i) throws SQLException { 
     128                final SelectItem selectItem = _selectItems[i]; 
     129                final int columnIndex = i + 1; 
     130                if (selectItem.getFunction() == null) { 
     131                        Column column = selectItem.getColumn(); 
     132                        if (column != null) { 
     133                                ColumnType type = column.getType(); 
     134                                switch (type) { 
     135                                case TIME: 
     136                                        return _resultSet.getTime(columnIndex); 
     137                                case DATE: 
     138                                        return _resultSet.getDate(columnIndex); 
     139                                case TIMESTAMP: 
     140                                        return _resultSet.getTimestamp(columnIndex); 
     141                                case BLOB: 
     142                                        return _resultSet.getBlob(columnIndex); 
     143                                case BINARY: 
     144                                case VARBINARY: 
     145                                case LONGVARBINARY: 
     146                                        return _resultSet.getBytes(columnIndex); 
     147                                case CLOB: 
     148                                case NCLOB: 
     149                                        return _resultSet.getClob(i); 
     150                                case BIT: 
     151                                case BOOLEAN: 
     152                                        return _resultSet.getBoolean(i); 
     153                                } 
     154                        } 
     155                } 
     156                return _resultSet.getObject(columnIndex); 
     157        } 
     158 
    124159        /** 
    125160         * {@inheritDoc} 
  • MetaModel/trunk/jdbc/src/main/java/org/eobjects/metamodel/jdbc/JdbcUpdateCallback.java

    r3017 r3047  
    3030import org.eobjects.metamodel.schema.Schema; 
    3131import org.eobjects.metamodel.schema.Table; 
     32import org.slf4j.Logger; 
     33import org.slf4j.LoggerFactory; 
    3234 
    3335abstract class JdbcUpdateCallback extends AbstractUpdateCallback implements 
    3436                UpdateCallback { 
     37 
     38        private static final Logger logger = LoggerFactory 
     39                        .getLogger(JdbcUpdateCallback.class); 
    3540 
    3641        private final JdbcDataContext _dataContext; 
     
    6267        } 
    6368 
    64         public final void close() { 
     69        public final void close(boolean success) { 
    6570                if (_connection != null) { 
    66                         if (_preparedStatement != null) { 
     71                        if (success && _preparedStatement != null) { 
    6772                                closePreparedStatement(_preparedStatement); 
    6873                        } 
    6974 
     75                        try { 
     76                                commitOrRollback(success); 
     77 
     78                                if (_dataContext.isDefaultAutoCommit()) { 
     79                                        try { 
     80                                                getConnection().setAutoCommit(true); 
     81                                        } catch (SQLException e) { 
     82                                                throw JdbcUtils.wrapException(e, "enable auto-commit"); 
     83                                        } 
     84                                } 
     85                        } finally { 
     86                                getDataContext().close(_connection, null, null); 
     87                        } 
     88                } 
     89        } 
     90 
     91        private void commitOrRollback(boolean success) { 
     92                if (success) { 
    7093                        try { 
    7194                                getConnection().commit(); 
     
    7396                                throw JdbcUtils.wrapException(e, "commit transaction"); 
    7497                        } 
    75  
    76                         if (_dataContext.isDefaultAutoCommit()) { 
    77                                 try { 
    78                                         getConnection().setAutoCommit(true); 
    79                                 } catch (SQLException e) { 
    80                                         throw JdbcUtils.wrapException(e, "enable auto-commit"); 
    81                                 } 
     98                } else { 
     99                        try { 
     100                                getConnection().commit(); 
     101                        } catch (SQLException e) { 
     102                                throw JdbcUtils.wrapException(e, "rollback transaction"); 
    82103                        } 
    83  
    84                         getDataContext().close(_connection, null, null); 
    85104                } 
    86105        } 
     
    95114        public final RowInsertionBuilder insertInto(Table table) 
    96115                        throws IllegalArgumentException, IllegalStateException { 
    97                 return new JdbcInsertBuilder(this, table, _dataContext.getQueryRewriter()); 
     116                return new JdbcInsertBuilder(this, table, 
     117                                _dataContext.getQueryRewriter()); 
    98118        } 
    99119 
     
    134154                        } else { 
    135155                                if (_preparedStatement != null) { 
    136                                         closePreparedStatement(_preparedStatement); 
     156                                        try { 
     157                                                closePreparedStatement(_preparedStatement); 
     158                                        } catch (RuntimeException e) { 
     159                                                logger.error("Exception occurred while closing prepared statement: " 
     160                                                                + _preparedStatementSql); 
     161                                                throw e; 
     162                                        } 
    137163                                } 
    138164                                preparedStatement = createPreparedStatement(sql); 
  • MetaModel/trunk/jdbc/src/main/java/org/eobjects/metamodel/jdbc/dialects/SQLServerQueryRewriter.java

    r2406 r3047  
    5050                return result; 
    5151        } 
    52  
     52         
     53        @Override 
     54        public String rewriteFromItem(FromItem item) { 
     55                return item.toSql(); 
     56        } 
     57         
    5358        @Override 
    5459        protected String rewriteFromItem(JdbcDataContext strategy, Query query, 
     
    5863                        String alias = item.getAlias(); 
    5964                        if (alias == null) { 
     65                                // always add an alias in SQL Server 
    6066                                item.setAlias(table.getName()); 
    6167                        } 
  • MetaModel/trunk/jdbc/src/test/java/org/eobjects/metamodel/dialects/SQLServerQueryRewriterTest.java

    r2406 r3047  
    2424import org.eobjects.metamodel.jdbc.dialects.IQueryRewriter; 
    2525import org.eobjects.metamodel.jdbc.dialects.SQLServerQueryRewriter; 
     26import org.eobjects.metamodel.query.FromItem; 
    2627import org.eobjects.metamodel.query.Query; 
    2728import org.eobjects.metamodel.schema.MutableColumn; 
     
    4647        } 
    4748 
     49        public void testRewriteFromItem() throws Exception { 
     50                assertEquals("foo", 
     51                                qr.rewriteFromItem(new FromItem(new MutableTable("foo")))); 
     52        } 
     53 
    4854        public void testAliasing() throws Exception { 
    4955                Query q = new Query().from(table).select(column); 
Note: See TracChangeset for help on using the changeset viewer.