package eu.dnetlib.dlms.jdbc.server;

import java.sql.SQLException;
import java.util.Collection;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import eu.dnetlib.dlms.jdbc.ParamInfo;
import eu.dnetlib.dlms.jdbc.ast.Statement;
import eu.dnetlib.dlms.jdbc.parser.IDQLParser;

/**
 * @author alessia
 * 
 */
public class DOLEngine extends AbstractDOLEngine {
    /** Logger. */
    private static final Log log = LogFactory.getLog(DOLEngine.class);

    /**
     * {@inheritDoc}
     * 
     * @see eu.dnetlib.dlms.jdbc.server.AbstractDOLEngine#execute(java.lang.String,
     *      eu.dnetlib.dlms.jdbc.ParamInfo[])
     */
    @Override
    public AbstractDOLExecuter execute(final String dolString,
	    final ParamInfo[] paramList) throws SQLException {

	log.debug(this + ".execute(" + dolString + ", " + paramList + ")");
	IDQLParser dolParser = this.getParserFactory().createParser();
	final Collection<Statement> parsedStms = dolParser.parse(dolString);
	final AbstractDOLExecuter executer = this.getExecuterFactory()
		.createExecuter();
//	executer.setResultSetExpected(parsedStms.last);
	for (Statement stm : parsedStms) {
	    executer.execute(stm);
	}
	try {
	    executer.setExecutionCompleted(true);
	} catch (InterruptedException e) {
	    throw new SQLException(e);
	}
	return executer;
    }

}
