@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 ); }
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(); }