package com.freetmp.mbg.plugin.upsert;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.xml.XmlElement;
/**
* Created by LiuPin on 2015/5/19.
*/
public class PostgreSQLUpsertPlugin extends AbstractUpsertPlugin {
@Override
protected void generateSqlMapContent(IntrospectedTable introspectedTable, XmlElement parent) {
generateTextBlock("with upsert as ( ", parent);
generateTextBlockAppendTableName("update ", introspectedTable, parent);
generateTextBlock(" set ", parent);
generateParameterForSet(PROPERTY_PREFIX, introspectedTable.getAllColumns(), parent);
XmlElement where = checkArrayWhere(introspectedTable);
parent.addElement(where);
generateTextBlock(" returning * )", parent);
generateTextBlockAppendTableName("insert into ", introspectedTable, parent);
generateActualColumnNamesWithParenthesis(introspectedTable.getAllColumns(), parent);
generateTextBlock(" select ", parent);
generateParametersSeparateByComma(PROPERTY_PREFIX, introspectedTable.getAllColumns(), parent);
generateTextBlock(" where not exists ( select * from upsert )", parent);
}
@Override
protected void generateSqlMapContentSelective(IntrospectedTable introspectedTable, XmlElement parent) {
generateTextBlock("with upsert as ( ", parent);
generateTextBlockAppendTableName("update ", introspectedTable, parent);
generateTextBlock(" set ", parent);
generateParameterForSet(PROPERTY_PREFIX, true, introspectedTable.getAllColumns(), parent);
XmlElement where = checkArrayWhere(introspectedTable);
parent.addElement(where);
generateTextBlock(" returning * )", parent);
generateTextBlockAppendTableName("insert into ", introspectedTable, parent);
generateActualColumnNamesWithParenthesis(PROPERTY_PREFIX, true, introspectedTable.getAllColumns(), parent);
generateTextBlock(" select ", parent);
generateParametersSeparateByComma(PROPERTY_PREFIX, true, introspectedTable.getAllColumns(), parent);
generateTextBlock(" where not exists ( select * from upsert )", parent);
}
}