else
{
throw new Exception("Database insert attempted without anything specified to insert");
}
DatabaseMap dbMap = TurbineDB.getDatabaseMap( criteria.getDbName() );
TableMap tableMap = dbMap.getTable(tableName);
Object keyInfo = tableMap.getPrimaryKeyMethodInfo();
IdGenerator keyGen = tableMap.getIdGenerator();
ColumnMap pk = getPrimaryKey(criteria);
// only get a new key value if you need to
// the reason is that a primary key might be defined
// but you are still going to set its value. for example:
// a join table where both keys are primary and you are
// setting both columns with your own values
boolean info = false;
if (!criteria.containsKey(pk.getFullyQualifiedName()))
{
// If the keyMethod is SEQUENCE or IDBROKERTABLE, get the id
// before the insert.
if (keyGen.isPriorToInsert())
{
if ( pk.getType() instanceof Number )
{
id = new NumberKey( tableMap.getIdGenerator()
.getIdAsBigDecimal(dbCon.getConnection(), keyInfo) );
}
else
{
id = new StringKey( tableMap.getIdGenerator()
.getIdAsString(dbCon.getConnection(), keyInfo) );
}
criteria.add( pk.getFullyQualifiedName(), id );
}
}
// Set up Village for the insert.
TableDataSet tds = null;
try
{
tds = new TableDataSet(dbCon.getConnection(), tableName );
Record rec = tds.addRecord();
insertOrUpdateRecord(rec, tableName, criteria);
}
finally
{
if (tds != null) tds.close();
}
// If the primary key column is auto-incremented, get the id
// now.
if ((keyGen != null) && (keyGen.isPostInsert()))
{
if ( pk.getType() instanceof Number )
{
id = new NumberKey( tableMap.getIdGenerator()
.getIdAsBigDecimal(dbCon.getConnection(), keyInfo) );
}
else
{
id = new StringKey( tableMap.getIdGenerator()
.getIdAsString(dbCon.getConnection(), keyInfo) );
}
}
return id;