private FeatureRow lookupFeatureRow( Feature feature ) throws FeatureStoreException { FeatureRow featureRow = origFidToFeatureRow.get( feature.getId() ); if ( featureRow == null ) { featureRow = new FeatureRow( this, feature.getId() ); delayedRows.add( featureRow ); if ( feature.getId() != null ) { origFidToFeatureRow.put( feature.getId(), featureRow ); } } if ( !featureRow.isAssigned() ) { featureRow.assign( feature ); } return featureRow; }
@Override void performInsert( Connection conn, boolean propagateAutoGenColumns ) throws SQLException, FeatureStoreException { super.performInsert( conn, propagateAutoGenColumns ); newId = buildNewFid(); if ( newId == null ) { String msg = "Internal/configuration error. Feature id must be assignable after feature row INSERT."; throw new FeatureStoreException( msg ); } // clear everything, but keep key columns (values may still be needed by referencing rows) Map<SQLIdentifier, Object> keyColumnToValue = new HashMap<SQLIdentifier, Object>(); Set<SQLIdentifier> genColumns = mgr.getKeyColumns( table ); if ( genColumns != null ) { for ( SQLIdentifier genColumn : genColumns ) { keyColumnToValue.put( genColumn, get( genColumn ) ); } } columnToLiteral.clear(); columnToObject.clear(); columnToObject.putAll( keyColumnToValue ); }
private String buildNewFid() throws FeatureStoreException { if ( get( fidMapping.getColumns().get( 0 ).getFirst() ) == null ) { // fid columns not available yet return null; } String newId = fidMapping.getPrefix(); List<Pair<SQLIdentifier, BaseType>> fidColumns = fidMapping.getColumns(); newId += checkFIDParticle( fidColumns.get( 0 ).first ); for ( int i = 1; i < fidColumns.size(); i++ ) { newId += fidMapping.getDelimiter() + checkFIDParticle( fidColumns.get( i ).first ); } return newId; }
void assign( Feature feature ) throws FeatureStoreException { FeatureTypeMapping ftMapping = mgr.getSchema().getFtMapping( feature.getName() ); this.table = ftMapping.getFtTable(); this.fidMapping = ftMapping.getFidMapping(); switch ( mgr.getIdGenMode() ) { case GENERATE_NEW: { Map<SQLIdentifier, IDGenerator> keyColumnToGenerator = new HashMap<SQLIdentifier, IDGenerator>(); for ( Pair<SQLIdentifier, BaseType> columnAndType : ftMapping.getFidMapping().getColumns() ) { SQLIdentifier fidColumn = columnAndType.first; keyColumnToGenerator.put( fidColumn, ftMapping.getFidMapping().getIdGenerator() ); generateImmediateKeys( keyColumnToGenerator ); } break; } case USE_EXISTING: { preInsertUseExisting( ftMapping ); break; } case REPLACE_DUPLICATE: { throw new UnsupportedOperationException( "REPLACE_DUPLICATE id generation mode is not implemented yet." ); } } newId = buildNewFid(); }
IdAnalysis analysis = mgr.getSchema().analyzeId( getOriginalId() ); idKernels = analysis.getIdKernels(); if ( !analysis.getFeatureType().getName().equals( ftMapping.getFeatureType() ) ) { String msg = "Cannot insert feature with id '" + getOriginalId() + "' and id generation mode 'UseExisting'. " + "Id does not match configured feature id pattern."; PrimitiveParticleConverter primitiveConverter = mgr.getDialect().getPrimitiveConverter( idColumn.first.getName(), type ); addPreparedArgument( idColumn.getFirst(), primitiveValue, primitiveConverter );
void removeParent( InsertRow parent ) { ParentRowReference ref = parentToRef.get( parent ); // propagate values from parent (foreign key values) List<SQLIdentifier> fromColumns = ref.getKeyPropagation().getPrimaryKeyColumns(); List<SQLIdentifier> toColumns = ref.getKeyPropagation().getForeignKeyColumns(); for ( int i = 0; i < fromColumns.size(); i++ ) { SQLIdentifier fromColumn = fromColumns.get( i ); SQLIdentifier toColumn = toColumns.get( i ); Object key = parent.get( fromColumn ); if ( key == null ) { String msg = "Unable to create foreign key relation. Encountered NULL value for foreign key column '" + fromColumn + "'."; throw new IllegalArgumentException( msg ); } addPreparedArgument( toColumn, key ); } // if parent is a feature row, set value for href column if ( ref.isHrefed( this ) && parent instanceof FeatureRow ) { addPreparedArgument( ref.getHrefColum( this ), "#" + ( (FeatureRow) parent ).getNewId() ); } parentToRef.remove( parent ); }
private FeatureRow lookupFeatureRow( String fid ) throws FeatureStoreException { FeatureRow featureRow = origFidToFeatureRow.get( fid ); if ( featureRow == null ) { featureRow = new FeatureRow( this, fid ); origFidToFeatureRow.put( fid, featureRow ); delayedRows.add( featureRow ); } return featureRow; }
private Object checkFIDParticle( SQLIdentifier column ) throws FeatureStoreException { Object value = get( column ); if ( value == null ) { throw new FeatureStoreException( "FIDMapping error: No value for feature id column '" + column + "'." ); } return value; }
fids.add( assignment.getNewId() );