package org.agnitas.emm.extension.sqlparser.validator.impl; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.agnitas.emm.extension.exceptions.DatabaseScriptException; import org.apache.log4j.Logger; /** * Implementation of the StatementValidation interface providing validation of the <code>CREATE TABLE...</code> statemtn. * * @author md * * @see StatementValidation */ class CreateTableValidation extends BasicValidation { /** Logger. */ private static final Logger logger = Logger.getLogger( CreateTableValidation.class); /** Regular expression used for statement recognition. */ private final Pattern CREATE_TABLE_PATTERN = Pattern.compile( "^\\s*create\\s+table\\s+(?:if\\s+not\\s+exists\\s+)?(.*?)\\s*\\((.*)\\)[^)]*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.UNICODE_CASE); @Override public boolean validate(String statement, String namePrefix) throws DatabaseScriptException { Matcher matcher = CREATE_TABLE_PATTERN.matcher( statement); if( !matcher.matches()) { if( logger.isInfoEnabled()) logger.info( "Statement does not match regular expression"); return false; } String tableName = matcher.group( 1); String columnDefinitions = matcher.group( 2); if( logger.isDebugEnabled()) { logger.debug( "table: " + tableName); logger.debug( "columns: " + columnDefinitions); } validateTableName( tableName, namePrefix); return true; } }