in rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java [51:128]
public InsertCommandImpl getInsertCommand(MappingWrapper config, DataObject changedObject, Table t) {
List parameters = new ArrayList();
TableWrapper table = new TableWrapper(t);
StringBuffer statement = new StringBuffer("insert into ");
//JIRA-952
if(config.getConfig().isDatabaseSchemaNameSupported()){
statement.append(t.getSchemaName()+"."+t.getTableName());
}
else{
statement.append(t.getTableName());
}
HashSet changedProperties = getAttributeProperties(changedObject, config, table);
Iterator i;
if ( changedProperties.isEmpty() ) {
i = changedObject.getType().getProperties().iterator();
} else {
i = changedProperties.iterator();
}
List attributes = new ArrayList();
List generatedKeys = new ArrayList();
while (i.hasNext()) {
Property attr = (Property) i.next();
if ( attr.getType().isDataType()) {
if (table.isGeneratedColumnProperty(attr.getName())) {
generatedKeys.add(attr.getName());
} else {
attributes.add(attr.getName());
parameters.add(changedObject.getType().getProperty(attr.getName()));
}
}
}
statement.append("(");
Iterator attrs = attributes.iterator();
while (attrs.hasNext()) {
String name = (String) attrs.next();
statement.append("");
Column c = config.getColumnByPropertyName(t, name);
statement.append(c == null ? name : c.getColumnName());
if (attrs.hasNext()) {
statement.append(", ");
} else {
statement.append(")");
}
}
statement.append(" values (");
for (int idx = 1; idx <= attributes.size(); idx++) {
statement.append('?');
if (idx < attributes.size()) {
statement.append(", ");
} else {
statement.append(")");
}
}
InsertCommandImpl cmd = new InsertCommandImpl(statement.toString(),
(String[]) generatedKeys.toArray(new String[0]));
Iterator params = parameters.iterator();
for (int idx = 1; params.hasNext(); idx++) {
Property property = (Property) params.next();
ParameterExtendedImpl p = new ParameterExtendedImpl();
p.setName(property.getName());
p.setType(property.getType());
p.setColumnType(SDODataTypeHelper.columnTypeForSDOType(property.getType()));
p.setConverter(getConverter(table.getConverter(property.getName())));
p.setIndex(idx);
cmd.addParameter(p);
}
if (this.logger.isDebugEnabled()) {
this.logger.debug(statement.toString());
}
return cmd;
}