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;
/**