You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by se...@apache.org on 2019/03/26 19:45:02 UTC

svn commit: r1856345 - in /ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc: field/ i2b2/ row/ table/

Author: seanfinan
Date: Tue Mar 26 19:45:01 2019
New Revision: 1856345

URL: http://svn.apache.org/viewvc?rev=1856345&view=rev
Log:
Account for jdbc drivers that cannot use callable statement - i.e. can't use named parameters

Modified:
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/AbstractJdbcField.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/BooleanField.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/DoubleField.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/FloatField.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/IntField.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/JdbcField.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/LongField.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TextField.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TimeField.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/i2b2/ObservationFactRow.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/row/JdbcRow.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractJdbcTable.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/JdbcTable.java

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/AbstractJdbcField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/AbstractJdbcField.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/AbstractJdbcField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/AbstractJdbcField.java Tue Mar 26 19:45:01 2019
@@ -9,7 +9,7 @@ package org.apache.ctakes.core.cc.jdbc.f
 abstract public class AbstractJdbcField<FT> implements JdbcField<FT> {
 
    private final String _name;
-   private final int _index;
+   private int _index;
 
    public AbstractJdbcField( final String name, final int index ) {
       _name = name;
@@ -32,4 +32,12 @@ abstract public class AbstractJdbcField<
       return _index;
    }
 
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public void setFieldIndex( final int index ) {
+      _index = index;
+   }
+
 }

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/BooleanField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/BooleanField.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/BooleanField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/BooleanField.java Tue Mar 26 19:45:01 2019
@@ -19,4 +19,8 @@ final public class BooleanField extends
       statement.setBoolean( getFieldName(), value );
    }
 
+   public void insertInStatement( final CallableStatement statement, final Boolean value ) throws SQLException {
+      statement.setBoolean( getFieldIndex(), value );
+   }
+
 }

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/DoubleField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/DoubleField.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/DoubleField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/DoubleField.java Tue Mar 26 19:45:01 2019
@@ -19,4 +19,8 @@ final public class DoubleField extends A
       statement.setDouble( getFieldName(), value );
    }
 
+   public void insertInStatement( final CallableStatement statement, final Double value ) throws SQLException {
+      statement.setDouble( getFieldIndex(), value );
+   }
+
 }

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/FloatField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/FloatField.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/FloatField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/FloatField.java Tue Mar 26 19:45:01 2019
@@ -19,4 +19,8 @@ final public class FloatField extends Ab
       statement.setFloat( getFieldName(), value );
    }
 
+   public void insertInStatement( final CallableStatement statement, final Float value ) throws SQLException {
+      statement.setFloat( getFieldIndex(), value );
+   }
+
 }

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/IntField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/IntField.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/IntField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/IntField.java Tue Mar 26 19:45:01 2019
@@ -19,4 +19,8 @@ final public class IntField extends Abst
       statement.setInt( getFieldName(), value );
    }
 
+   public void insertInStatement( final CallableStatement statement, final Integer value ) throws SQLException {
+      statement.setInt( getFieldIndex(), value );
+   }
+
 }

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/JdbcField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/JdbcField.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/JdbcField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/JdbcField.java Tue Mar 26 19:45:01 2019
@@ -18,6 +18,10 @@ public interface JdbcField<T> {
       return NO_INDEX;
    }
 
+   void setFieldIndex( final int index );
+
    void addToStatement( final CallableStatement statement, final T value ) throws SQLException;
 
+   void insertInStatement( final CallableStatement statement, final T value ) throws SQLException;
+
 }

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/LongField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/LongField.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/LongField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/LongField.java Tue Mar 26 19:45:01 2019
@@ -19,4 +19,8 @@ final public class LongField extends Abs
       statement.setLong( getFieldName(), value );
    }
 
+   public void insertInStatement( final CallableStatement statement, final Long value ) throws SQLException {
+      statement.setLong( getFieldIndex(), value );
+   }
+
 }

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TextField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TextField.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TextField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TextField.java Tue Mar 26 19:45:01 2019
@@ -19,4 +19,8 @@ final public class TextField extends Abs
       statement.setString( getFieldName(), value );
    }
 
+   public void insertInStatement( final CallableStatement statement, final String value ) throws SQLException {
+      statement.setString( getFieldIndex(), value );
+   }
+
 }

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TimeField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TimeField.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TimeField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TimeField.java Tue Mar 26 19:45:01 2019
@@ -20,4 +20,8 @@ final public class TimeField extends Abs
       statement.setTimestamp( getFieldName(), value );
    }
 
+   public void insertInStatement( final CallableStatement statement, final Timestamp value ) throws SQLException {
+      statement.setTimestamp( getFieldIndex(), value );
+   }
+
 }

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/i2b2/ObservationFactRow.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/i2b2/ObservationFactRow.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/i2b2/ObservationFactRow.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/i2b2/ObservationFactRow.java Tue Mar 26 19:45:01 2019
@@ -1,9 +1,6 @@
 package org.apache.ctakes.core.cc.jdbc.i2b2;
 
-import org.apache.ctakes.core.cc.jdbc.field.IntField;
-import org.apache.ctakes.core.cc.jdbc.field.LongField;
-import org.apache.ctakes.core.cc.jdbc.field.TextField;
-import org.apache.ctakes.core.cc.jdbc.field.TimeField;
+import org.apache.ctakes.core.cc.jdbc.field.*;
 import org.apache.ctakes.core.cc.jdbc.row.JdbcRow;
 import org.apache.ctakes.core.util.SourceMetadataUtil;
 import org.apache.ctakes.typesystem.type.constants.CONST;
@@ -90,12 +87,12 @@ final public class ObservationFactRow
    private IdentifiedAnnotation _annotation;
 
 
-   public Collection<String> getFieldNames() {
-      return Arrays.asList( PATIENT_NUM,
+   public Collection<JdbcField<?>> getFields() {
+      return Arrays.asList( _patientNum,
             // Per Document
-            PROVIDER_ID, ENCOUNTER_NUM, START_DATE,
+            _providerId, _encounterNum, _startDate,
             // Per Row
-            INSTANCE_NUM, CONCEPT_CD, MODIFIER_CD, VALTYPE_CD, TVAL_CHAR, OBSERVATION_BLOB );
+            _instanceNum, _conceptCd, _modifierCd, _valtypeCd, _tvalChar, _observationBlob );
    }
 
    public void initializeCorpus( final CorpusSettings corpusValue ) {
@@ -160,20 +157,20 @@ final public class ObservationFactRow
    public void addToStatement( final CallableStatement statement,
                                final UmlsConcept value ) throws SQLException {
       // Per Patient
-      _patientNum.addToStatement( statement, _patient );
+      _patientNum.insertInStatement( statement, _patient );
 
       // Per Document
-      _providerId.addToStatement( statement, _provider );
-      _encounterNum.addToStatement( statement, _encounter );
-      _startDate.addToStatement( statement, _start );
+      _providerId.insertInStatement( statement, _provider );
+      _encounterNum.insertInStatement( statement, _encounter );
+      _startDate.insertInStatement( statement, _start );
 
       // Per Row
-      _instanceNum.addToStatement( statement, _instance );
-      _conceptCd.addToStatement( statement, getConceptCode( value ) );
-      _modifierCd.addToStatement( statement, getModifierCd( value ) );
-      _valtypeCd.addToStatement( statement, getValtypeCd( value ) );
-      _tvalChar.addToStatement( statement, getTvalChar( value ) );
-      _observationBlob.addToStatement( statement, getObservationBlob( value ) );
+      _instanceNum.insertInStatement( statement, _instance );
+      _conceptCd.insertInStatement( statement, getConceptCode( value ) );
+      _modifierCd.insertInStatement( statement, getModifierCd( value ) );
+      _valtypeCd.insertInStatement( statement, getValtypeCd( value ) );
+      _tvalChar.insertInStatement( statement, getTvalChar( value ) );
+      _observationBlob.insertInStatement( statement, getObservationBlob( value ) );
       _instance++;
    }
 

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/row/JdbcRow.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/row/JdbcRow.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/row/JdbcRow.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/row/JdbcRow.java Tue Mar 26 19:45:01 2019
@@ -1,8 +1,13 @@
 package org.apache.ctakes.core.cc.jdbc.row;
 
-import java.sql.CallableStatement;
-import java.sql.SQLException;
+import org.apache.ctakes.core.cc.jdbc.field.JdbcField;
+
+import java.sql.*;
 import java.util.Collection;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * @author SPF , chip-nlp
@@ -11,7 +16,34 @@ import java.util.Collection;
  */
 public interface JdbcRow<C, P, D, E, T> {
 
-   Collection<String> getFieldNames();
+   Collection<JdbcField<?>> getFields();
+
+   default Collection<String> getFieldNames() {
+      return getFields().stream()
+                        .sorted( Comparator.comparingInt( JdbcField::getFieldIndex ) )
+                        .map( JdbcField::getFieldName )
+                        .collect( Collectors.toList() );
+   }
+
+   default void initializeFieldIndices( final Connection connection, final String tableName ) throws SQLException {
+      final Collection<JdbcField<?>> fields = getFields();
+      if ( fields == null ) {
+         throw new SQLException( "No Fields defined for table " + tableName );
+      }
+      final Map<String, JdbcField<?>> fieldMap
+            = fields.stream().collect( Collectors.toMap( JdbcField::getFieldName, Function.identity() ) );
+      final DatabaseMetaData metadata = connection.getMetaData();
+      final ResultSet resultSet = metadata.getColumns( null, null, tableName, null );
+      int index = 0;
+      while ( resultSet.next() ) {
+         index++;
+         final String name = resultSet.getString( "COLUMN_NAME" );
+         final JdbcField<?> field = fieldMap.get( name );
+         if ( field != null ) {
+            field.setFieldIndex( index );
+         }
+      }
+   }
 
    default void initializeCorpus( final C corpusValue ) {
    }

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractJdbcTable.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractJdbcTable.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractJdbcTable.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractJdbcTable.java Tue Mar 26 19:45:01 2019
@@ -23,6 +23,7 @@ abstract public class AbstractJdbcTable<
 
    public AbstractJdbcTable( final Connection connection, final String tableName ) throws SQLException {
       _tableName = tableName;
+      initializeFieldIndices( connection, tableName );
       final String sql = createRowInsertSql();
       _callableStatement = connection.prepareCall( sql );
    }

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/JdbcTable.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/JdbcTable.java?rev=1856345&r1=1856344&r2=1856345&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/JdbcTable.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/JdbcTable.java Tue Mar 26 19:45:01 2019
@@ -4,6 +4,7 @@ package org.apache.ctakes.core.cc.jdbc.t
 import org.apache.ctakes.core.cc.jdbc.row.JdbcRow;
 
 import java.sql.CallableStatement;
+import java.sql.Connection;
 import java.sql.SQLDataException;
 import java.sql.SQLException;
 import java.util.Collection;
@@ -27,6 +28,10 @@ public interface JdbcTable<T> {
       return getJdbcRow().getFieldNames();
    }
 
+   default void initializeFieldIndices( final Connection connection, final String tableName ) throws SQLException {
+      getJdbcRow().initializeFieldIndices( connection, tableName );
+   }
+
    void writeValue( final T value ) throws SQLException;
 
    /**