-- This pattern generated a merge statement for Oracle database or equivalent of a merge in other dbs
--(c) 2008 Talend Inc.
<% 
	EXTRACT(__MERGE_ON__);
	EXTRACT(__UPDATE_MAPPING__);
	EXTRACT(__ADDITIONAL_UPDATE_COLUMNS__);
	EXTRACT(__INSERT_MAPPING__);
	EXTRACT(__ADDITIONAL_INSERT_COLUMNS__);
	String dbType = "__DBTYPE__";
	boolean hasUpdateClause = __USE_UPDATE__;
	boolean hasAddtionalUpdateColumns = __SPECIFY_ADDITIONAL_UPDATE_COLUMNS__;
	boolean hasUpdateWhereClause = __SPECIFY_UPDATE_WHERE_CLAUSE__;
	boolean uFlag = false;
	
	String mergeOnStrUpdate = "";
	for(int i=0; i < __MERGE_ON_SRC_COLUMN__.length; i++){
		if (uFlag) {
			mergeOnStrUpdate += " AND ";
		} else {
			uFlag = true;
		}
		mergeOnStrUpdate += (__TARGET_TABLE__ + "." + __MERGE_ON_TRG_COLUMN__[i] + " = " + __SOURCE_TABLE__ + "." + __MERGE_ON_SRC_COLUMN__[i]);
	}
	
	String updateStr = "";
	String updateWhereStr = "";
	uFlag = false;
	if (hasUpdateClause) {
		for(int i=0; i < __UPDATE_MAPPING_SRC_COLUMN__.length; i++) {
			if (uFlag) {
				updateStr += ",";
			} else {
				uFlag = true;
			}
			updateStr += (__TARGET_TABLE__ + "." + __UPDATE_MAPPING_TRG_COLUMN__[i] + " = " + __SOURCE_TABLE__ + "." + __UPDATE_MAPPING_SRC_COLUMN__[i]);
		}
		if (hasAddtionalUpdateColumns) {
			for(int i=0; i < __ADDITIONAL_UPDATE_COLUMNS_TRG_COLUMN_VALUE__.length; i++) {
				if (uFlag) {
					updateStr += ",";
				} else {
					uFlag = true;
				}
				updateStr += (__TARGET_TABLE__ + "." + __ADDITIONAL_UPDATE_COLUMNS_TRG_COLUMN_NAME__[i] + " = " + __ADDITIONAL_UPDATE_COLUMNS_TRG_COLUMN_VALUE__[i]);
			}
		}
		if (hasUpdateWhereClause) {
			updateWhereStr = " " + __UPDATE_WHERE_CLAUSE__ + " ";
		}
	}
	
	String mergeStringUpdate = "";
	
	if (hasUpdateClause) {
		mergeStringUpdate = "UPDATE " + __TARGET_TABLE__ + ", " + __SOURCE_TABLE__ +
							" SET " + updateStr + " WHERE (" + mergeOnStrUpdate + ")" + (hasUpdateWhereClause ? (" AND (" + updateWhereStr + ")") : "") + ";";
	} else {
		mergeStringUpdate = "DELETE FROM " + __TARGET_TABLE__ + " WHERE 1=0";
	}
	
%>
<%=mergeStringUpdate%>;