@Override
    protected void performUpdate(Map<String, Object> nameValues)
            throws ScriptException, SQLException, ConfigurationException
    {
        int parameterIndex = 1;

        //  Set parameters for the SET clause
        for (String targetTableColumnName : getColumnNamesWithUpdateValues())
        {
            ValueDefinition definition = config.getUpdateValues().get(targetTableColumnName);

            if (!definition.producesSQL())
            {
                Object columnValue = eval(definition, targetTableColumnName, nameValues);

                if (Import.isVerboseEnabled())
                {
                    printNameValue(targetTableColumnName, columnValue);
                }

                updateStatement.setObject(parameterIndex++, columnValue);
            }
        }

        for (String targetTableColumnName : getOrderedTableColumnNames())
        {
            Object columnValue = transform(targetTableColumnName, nameValues);

            if (Import.isVerboseEnabled())
            {
                printNameValue(targetTableColumnName, columnValue);
            }

            updateStatement.setObject(parameterIndex++, columnValue);
        }

        //  Set parameters for the WHERE clause
        for (String primaryKeyColumnName : config.getPrimaryKeys())
        {
            Object primaryKeyColumnValue = transform(primaryKeyColumnName, nameValues);

            if (Import.isVerboseEnabled())
            {
                printNameValue(primaryKeyColumnName, primaryKeyColumnValue);
            }

            updateStatement.setObject(parameterIndex++, primaryKeyColumnValue);
        }

        numberOfStatementsInBatch++;

        updateStatement.addBatch();

        checkBatchExecution(config.getBatchSize());
    }