public InsertCommandImpl getInsertCommand()

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;

    }