// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.dq.analysis.explore; import java.util.Map; import org.eclipse.emf.common.util.EList; import org.talend.cwm.relational.TdColumn; import org.talend.dataquality.analysis.Analysis; import org.talend.utils.sql.Java2SqlType; import orgomg.cwm.objectmodel.core.ModelElement; /** * * DOC mzhao Get sql query statement for correlation. (apply to multiColumnSetValue indicator) */ public final class MultiColumnSetValueExplorer extends DataExplorer { private static final String SELECT_ALL_FROM = "SELECT * FROM "; //$NON-NLS-1$ private static MultiColumnSetValueExplorer instance = null; private MultiColumnSetValueExplorer() { } public static MultiColumnSetValueExplorer getInstance() { if (instance == null) { instance = new MultiColumnSetValueExplorer(); } return instance; } @Override public Map<String, String> getSubClassQueryMap() { return null; } public String getQueryStirng(ModelElement column, Analysis ana, EList<ModelElement> nominalList, String columnName, String columnValue) { setAnalysis(ana); // MOD by hcheng for 6530 String queryString = SELECT_ALL_FROM + getFullyQualifiedTableName(column); int col = columnName.indexOf(" "); //$NON-NLS-1$ int val = columnValue.indexOf("|"); //$NON-NLS-1$ for (ModelElement nominal : nominalList) { final TdColumn tdColumn = (TdColumn) nominal; if (col > 0 && val > 0) { String[] name = columnName.split(" "); //$NON-NLS-1$ String[] value = columnValue.split(" | "); //$NON-NLS-1$ for (int i = 0; i < name.length; i++) { String where = dbmsLanguage.and(); if (i == 0) { where = dbmsLanguage.where(); } queryString = buildWhereClause(queryString, tdColumn, name[i], value[i], where); } } else { queryString = buildWhereClause(queryString, tdColumn, columnName.trim(), columnValue, dbmsLanguage.where()); } } return queryString; } private String buildWhereClause(String queryString, final TdColumn tdColumn, String name, String value, String where) { if (tdColumn.getName().equals(name) && !value.equals("null")) { //$NON-NLS-1$ if (Java2SqlType.isTextInSQL(tdColumn.getSqlDataType().getJavaDataType())) { queryString += where + dbmsLanguage.quote(name) + dbmsLanguage.equal() + "'" + value + "'"; //$NON-NLS-1$ //$NON-NLS-2$ } else { queryString += where + dbmsLanguage.quote(name) + dbmsLanguage.equal() + value; } } else if (tdColumn.getName().equals(name) && value.equals("null")) { //$NON-NLS-1$ queryString += where + dbmsLanguage.quote(name) + dbmsLanguage.isNull(); } return queryString; } }