Add the actual Distinct class; fix bugs.

This commit is contained in:
Par Winzell
2012-02-03 21:39:12 +00:00
parent cf47c335a0
commit 73346e9fd0
3 changed files with 46 additions and 2 deletions
@@ -0,0 +1,44 @@
//
// Depot library - a Java relational persistence library
// http://code.google.com/p/depot/source/browse/trunk/LICENSE
package com.samskivert.depot.clause;
import java.util.Collection;
import com.samskivert.depot.PersistentRecord;
import com.samskivert.depot.expression.SQLExpression;
import com.samskivert.depot.impl.FragmentVisitor;
/**
* Represents a DISTINCT [ON <exp>] clause.
*
* Note: You almost certainly only ever want to use this in a SELECT statement.
*/
public class Distinct implements QueryClause
{
public Distinct (SQLExpression<?> on)
{
_on = on;
}
public SQLExpression<?> getDistinctOn ()
{
return _on;
}
// from SQLExpression
public Object accept (FragmentVisitor<?> builder)
{
return builder.visit(this);
}
// from SQLExpression
public void addClasses (Collection<Class<? extends PersistentRecord>> classSet)
{
}
/** The expression to distinguish by, for DISTINCT ON, or null for mere DISTINCT. */
protected SQLExpression<?> _on;
}
@@ -65,7 +65,7 @@ public class SelectClause
_disMap.put(((FieldDefinition) clause).getField(), ((FieldDefinition) clause));
} else if (clause instanceof Distinct) {
checkArgument(_orderBy == null, "Query can't contain multiple Distinct clauses.");
checkArgument(_distinct == null, "Query can't contain multiple Distinct clauses.");
_distinct = (Distinct) clause;
} else if (clause instanceof OrderBy) {
@@ -136,7 +136,7 @@ public class HSQLBuilder
public Void visit (Distinct distinct)
{
if (distinct.getDistinctOn() != null) {
throw new IllegalArgumentException("MySQL does not support DISTINCT ON");
throw new IllegalArgumentException("HSQL does not support DISTINCT ON");
}
return super.visit(distinct);
}