package org.agnitas.emm.extension.sqlparser.validator.impl;
import java.util.List;
import org.agnitas.emm.extension.exceptions.DatabaseScriptException;
import org.agnitas.emm.extension.sqlparser.validator.DatabaseScriptValidator;
import org.apache.log4j.Logger;
/**
* Implementation of a simple SQL script validator.
*
* The validator used classes implementing the StatementValidation interface.
*
* @author md
*
*@see DatabaseScriptValidator
*/
public class SimpleDatabaseScriptValidator implements DatabaseScriptValidator {
/** Logger. */
private static final transient Logger logger = Logger.getLogger( SimpleDatabaseScriptValidator.class);
/** List of all validation steps. To extend the range of validation, simply add new instances here. */
private StatementValidation[] validationSteps = new StatementValidation[] {
new CreateTableValidation(),
new DropTableValidation(),
new AlterTableAddColumnValidation(),
new AlterTableDropColumnValidation()
};
@Override
public void validate(List<String> statements, String namePrefix) throws DatabaseScriptException {
if( logger.isInfoEnabled())
logger.info( "Validating statements. Name prefix is '" + namePrefix + "'");
for( String statement : statements)
validate( statement, namePrefix);
}
/**
* Validate a single SQL statement.
*
* @param statement SQL statement to validate
* @param namePrefix name prefix used for validation of identifiers (table names, ...)
*
* @throws DatabaseScriptException on errors validating the statement (e. g. invalid names)
*/
private void validate( String statement, String namePrefix) throws DatabaseScriptException {
if( logger.isInfoEnabled())
logger.info( "Validating statement: " + statement);
for( StatementValidation step : validationSteps) {
if( logger.isInfoEnabled())
logger.info( "Validating statement (validation class: " + step.getClass().getCanonicalName() + ")");
if( step.validate( statement, namePrefix))
break; // Terminate loop if statement was validated
}
}
}