# Implementing jdbcDatabaseSnapshotGenerator.readUniqueConstraints() ...?

**URL:** <https://forum.liquibase.org/t/implementing-jdbcdatabasesnapshotgenerator-readuniqueconstraints/1408>\
**Category:** Liquibase Development\
**Created:** [June 24, 2010, 2:38pm UTC](https://forum.liquibase.org/t/implementing-jdbcdatabasesnapshotgenerator-readuniqueconstraints/1408 "2010-06-24T14:38:00Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![cpjust](https://avatars.discourse-cdn.com/v4/letter/c/74df32/32.png) [@cpjust](https://forum.liquibase.org/u/cpjust)\
**Post date:** [June 24, 2010, 2:38pm UTC](https://forum.liquibase.org/t/implementing-jdbcdatabasesnapshotgenerator-readuniqueconstraints/1408/1 "2010-06-24T14:38:00Z")

</div>

Hi,  
I’m trying to implement the jdbcDatabaseSnapshotGenerator.readUniqueConstraints() function so I can get unique constraints to work properly.&nbsp; Right now I’m hard-coding it for DB2, but I’ll abstract the query out to be DB agnostic later.&nbsp; Here’s what I was thinking of doing, but I’m not sure where I should be saving the Schema name?&nbsp; Should I be saving the Table name as “SchemaName.TableName” or just “TableName”?

&nbsp; &nbsp; protected void readUniqueConstraints(DatabaseSnapshot snapshot, String schema, DatabaseMetaData databaseMetaData) throws DatabaseException, SQLException { &nbsp; &nbsp; &nbsp; &nbsp; Database database = snapshot.getDatabase(); &nbsp; &nbsp; &nbsp; &nbsp; updateListeners("Reading unique constraints for " + database.toString() + " ...");

&nbsp; &nbsp; &nbsp; &nbsp; // For DB2, query the system tables like this:  
&nbsp; &nbsp; &nbsp; &nbsp; // “SELECT tc.CONSTNAME, tc.TABSCHEMA, tc.TABNAME, skc.COLNAME FROM syscat.TABCONST tc, sysibm.SYSKEYCOLUSE skc WHERE tc.TYPE = ‘U’ AND skc.CONSTNAME = tc.CONSTNAME”

&nbsp; &nbsp; &nbsp; &nbsp; ResultSet rs = null;  
&nbsp; &nbsp; &nbsp; &nbsp; try {  
&nbsp; &nbsp; &nbsp; &nbsp; rs = ((JdbcConnection) database.getConnection()).getUnderlyingConnection().createStatement().executeQuery(  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; “SELECT tc.CONSTNAME, tc.TABSCHEMA, tc.TABNAME, skc.COLNAME FROM syscat.TABCONST tc, sysibm.SYSKEYCOLUSE skc WHERE tc.TYPE = ‘U’ AND skc.CONSTNAME = tc.CONSTNAME” );

&nbsp; &nbsp; &nbsp; &nbsp; List foundUCs = new ArrayList();

&nbsp; &nbsp; &nbsp; &nbsp; while ( rs.next() )  
&nbsp; &nbsp; &nbsp; &nbsp; {  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String constName&nbsp; = rs.getString( “CONSTNAME” );  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String schemaName = rs.getString( “TABSCHEMA” );  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String tableName&nbsp; = rs.getString( “TABNAME” );  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String columnName = rs.getString( “COLNAME” );

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UniqueConstraint unique = new UniqueConstraint();  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unique.setName( constName );  
//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unique.setSchemaName( schemaName );&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // There is no setSchemaName() function, so where do I save this info?  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unique.setTable( snapshot.getTable( tableName ) );  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unique.getColumns().addAll( Arrays.asList( columnName.split( “,” ) ) );

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foundUCs.add( unique );  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; snapshot.getUniqueConstraints().addAll( foundUCs );  
&nbsp; &nbsp; &nbsp; &nbsp; } finally {  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ( rs != null ) {  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rs.close();  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }  
&nbsp; &nbsp; &nbsp; &nbsp; }  
&nbsp; &nbsp; }

---

<div class="post-metadata">

**Author:** ![nvoxland](https://avatars.discourse-cdn.com/v4/letter/n/87869e/32.png) [@nvoxland](https://forum.liquibase.org/u/nvoxland)\
**Post date:** [June 24, 2010, 2:38pm UTC](https://forum.liquibase.org/t/implementing-jdbcdatabasesnapshotgenerator-readuniqueconstraints/1408/2 "2010-06-24T14:38:00Z")

</div>

Sorry for the slow reply.&nbsp; Thanks for looking into implementing it.&nbsp;

We don’t track the schema of the unique constraint.&nbsp; There maybe should be a tableSchemaName attribute.

Nathan
