// ============================================================================
//
// 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.cwm.db.connection;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.talend.core.model.metadata.builder.connection.MetadataColumn;
import org.talend.cwm.helper.TaggedValueHelper;
import org.talend.dataquality.analysis.Analysis;
import org.talend.dataquality.indicators.columnset.RecordMatchingIndicator;
import org.talend.dq.helper.StoreOnDiskUtils;
/**
* created by zhao on Oct 20, 2013 Detailled comment
*
*/
public abstract class SQLExecutor implements ISQLExecutor {
private static Logger log = Logger.getLogger(SQLExecutor.class);
private Boolean isStoreOnDisk = Boolean.FALSE;
protected Object storeOnDiskHandler = null;
public static final String STORE_ON_DISK_KEY = "STORE_ON_DISK"; //$NON-NLS-1$
public static final String MAX_BUFFER_SIZE = "MAX_BUFFER_SIZE";//$NON-NLS-1$
public static final String TEMP_DATA_DIR = "TEMP_DATA_DIR";//$NON-NLS-1$
/**
* the limit count number of rows.
*/
private int limit = 0;
private Boolean isShowRandomData = Boolean.FALSE;
/**
* List of rows obtained from data source.
*/
private List<Object[]> dataFromTable = new ArrayList<Object[]>();
/*
* (non-Javadoc)
*
* @see org.talend.cwm.db.connection.ISQLExecutor#getLimit()
*/
public int getLimit() {
return this.limit;
}
/*
* (non-Javadoc)
*
* @see org.talend.cwm.db.connection.ISQLExecutor#setLimit(int)
*/
public void setLimit(int limit) {
this.limit = limit;
}
/*
* (non-Javadoc)
*
* @see org.talend.cwm.db.connection.ISQLExecutor#isShowRandomData()
*/
public Boolean isShowRandomData() {
return this.isShowRandomData;
}
/*
* (non-Javadoc)
*
* @see org.talend.cwm.db.connection.ISQLExecutor#setShowRandomData(java.lang.Boolean)
*/
public void setShowRandomData(Boolean isShowRandomData) {
this.isShowRandomData = isShowRandomData;
}
/*
* (non-Javadoc)
*
* @see org.talend.cwm.db.connection.ISQLExecutor#initStoreOnDiskHandler(org.talend.dataquality.analysis.Analysis,
* org.talend.dataquality.indicators.columnset.RecordMatchingIndicator, java.util.Map)
*/
public void initStoreOnDiskHandler(Analysis analysis, RecordMatchingIndicator recordMatchingIndicator,
Map<MetadataColumn, String> columnMap) {
if (isStoreOnDisk()) {
try {
String tempDataPath = TaggedValueHelper.getValueString(TEMP_DATA_DIR, analysis);
int bufferSize = Integer.valueOf(TaggedValueHelper.getValueString(MAX_BUFFER_SIZE, analysis));
storeOnDiskHandler = StoreOnDiskUtils.getDefault().createStoreOnDiskHandler(tempDataPath, bufferSize,
recordMatchingIndicator, columnMap);
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
/**
* The client can override the method to prepare an environment before query.
*/
protected void beginQuery() throws Exception {
if (isStoreOnDisk()) {
StoreOnDiskUtils.getDefault().beginQuery(storeOnDiskHandler);
}
}
/**
* mzhao finalize the query, the client can override this method.
*/
protected void endQuery() throws Exception {
if (isStoreOnDisk()) {
StoreOnDiskUtils.getDefault().endQuery(storeOnDiskHandler);
}
}
protected void handleRow(Object[] oneRow) throws Exception {
if (isStoreOnDisk()) {
StoreOnDiskUtils.getDefault().handleRow(oneRow, storeOnDiskHandler);
} else {
dataFromTable.add(oneRow);
}
}
/**
* Sets the storeOnDisk.
*
* @param storeOnDisk the storeOnDisk to set
*/
public void setStoreOnDisk(Boolean storeOnDisk) {
this.isStoreOnDisk = storeOnDisk;
}
/*
* (non-Javadoc)
*
* @see org.talend.cwm.db.connection.ISQLExecutor#isStoreOnDisk()
*/
public Boolean isStoreOnDisk() {
return isStoreOnDisk;
}
/**
* Getter for storeOnDiskHandler.
*
* @return the storeOnDiskHandler
*/
public Object getStoreOnDiskHandler() {
return this.storeOnDiskHandler;
}
public List<Object[]> getDataFromTable() {
return this.dataFromTable;
}
}