protected void parseEjbql()
{
if (parsedEjbql==null || parsedRestrictions==null)
{
QueryParser qp = new QueryParser( getEjbql() );
queryParameters = qp.getParameterValueBindings();
parsedEjbql = qp.getEjbql();
List<ValueExpression> restrictionFragments = getRestrictions();
parsedRestrictions = new ArrayList<String>( restrictionFragments.size() );
restrictionParameters = new ArrayList<ValueExpression>( restrictionFragments.size() );
for ( ValueExpression restriction: restrictionFragments )
{
QueryParser rqp = new QueryParser( restriction.getExpressionString(), queryParameters.size() + restrictionParameters.size() );
if ( rqp.getParameterValueBindings().size()!=1 )
{
throw new IllegalArgumentException("there should be exactly one value binding in a restriction: " + restriction);
}
parsedRestrictions.add( rqp.getEjbql() );
restrictionParameters.addAll( rqp.getParameterValueBindings() );
}
}
}