Ah, Key actually is PrimaryKey and does not in fact keep the primary key
columns around. Cleaned some things up along those lines.
This commit is contained in:
@@ -25,7 +25,6 @@ import java.sql.SQLException;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import com.samskivert.jdbc.depot.Key.WhereCondition;
|
|
||||||
import com.samskivert.jdbc.depot.clause.DeleteClause;
|
import com.samskivert.jdbc.depot.clause.DeleteClause;
|
||||||
import com.samskivert.jdbc.depot.clause.FieldDefinition;
|
import com.samskivert.jdbc.depot.clause.FieldDefinition;
|
||||||
import com.samskivert.jdbc.depot.clause.ForUpdate;
|
import com.samskivert.jdbc.depot.clause.ForUpdate;
|
||||||
@@ -73,9 +72,9 @@ public class BindVisitor implements ExpressionVisitor
|
|||||||
// nothing needed
|
// nothing needed
|
||||||
}
|
}
|
||||||
|
|
||||||
public void visit (WhereCondition<? extends PersistentRecord> whereCondition)
|
public void visit (Key<? extends PersistentRecord> key)
|
||||||
{
|
{
|
||||||
for (Comparable<?> value : whereCondition.getValues()) {
|
for (Comparable<?> value : key.getValues()) {
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
writeValueToStatement(value);
|
writeValueToStatement(value);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,11 +90,11 @@ public abstract class BuildVisitor implements ExpressionVisitor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void visit (Key.WhereCondition<? extends PersistentRecord> whereCondition)
|
public void visit (Key<? extends PersistentRecord> key)
|
||||||
{
|
{
|
||||||
Class<? extends PersistentRecord> pClass = whereCondition.getPersistentClass();
|
Class<? extends PersistentRecord> pClass = key.getPersistentClass();
|
||||||
String[] keyFields = KeyUtil.getKeyFields(pClass);
|
String[] keyFields = KeyUtil.getKeyFields(pClass);
|
||||||
List<Comparable<?>> values = whereCondition.getValues();
|
List<Comparable<?>> values = key.getValues();
|
||||||
for (int ii = 0; ii < keyFields.length; ii ++) {
|
for (int ii = 0; ii < keyFields.length; ii ++) {
|
||||||
if (ii > 0) {
|
if (ii > 0) {
|
||||||
_builder.append(" and ");
|
_builder.append(" and ");
|
||||||
|
|||||||
@@ -42,58 +42,6 @@ import com.samskivert.util.StringUtil;
|
|||||||
public class Key<T extends PersistentRecord> extends WhereClause
|
public class Key<T extends PersistentRecord> extends WhereClause
|
||||||
implements SQLExpression, CacheKey, ValidatingCacheInvalidator, Serializable
|
implements SQLExpression, CacheKey, ValidatingCacheInvalidator, Serializable
|
||||||
{
|
{
|
||||||
/** An expression that contains our key columns and values. */
|
|
||||||
public static class WhereCondition<U extends PersistentRecord>
|
|
||||||
implements SQLExpression, Serializable
|
|
||||||
{
|
|
||||||
public WhereCondition (Class<U> pClass, ArrayList<Comparable<?>> values)
|
|
||||||
{
|
|
||||||
_pClass = pClass;
|
|
||||||
_values = values;
|
|
||||||
}
|
|
||||||
|
|
||||||
// from SQLExpression
|
|
||||||
public void accept (ExpressionVisitor builder)
|
|
||||||
{
|
|
||||||
builder.visit(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// from SQLExpression
|
|
||||||
public void addClasses (Collection<Class<? extends PersistentRecord>> classSet)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public Class<U> getPersistentClass ()
|
|
||||||
{
|
|
||||||
return _pClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArrayList<Comparable<?>> getValues ()
|
|
||||||
{
|
|
||||||
return _values;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override public boolean equals (Object obj)
|
|
||||||
{
|
|
||||||
if (this == obj) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (obj == null || getClass() != obj.getClass()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
WhereCondition<?> other = (WhereCondition<?>) obj;
|
|
||||||
return _pClass == other._pClass && _values.equals(other.getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override public int hashCode ()
|
|
||||||
{
|
|
||||||
return _pClass.hashCode() ^ _values.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Class<U> _pClass;
|
|
||||||
protected ArrayList<Comparable<?>> _values; // List is not Serializable
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new single-column {@code Key} with the given value.
|
* Constructs a new single-column {@code Key} with the given value.
|
||||||
*/
|
*/
|
||||||
@@ -129,6 +77,9 @@ public class Key<T extends PersistentRecord> extends WhereClause
|
|||||||
throw new IllegalArgumentException("Field and Value arrays must be of equal length.");
|
throw new IllegalArgumentException("Field and Value arrays must be of equal length.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// keep this for posterity
|
||||||
|
_pClass = pClass;
|
||||||
|
|
||||||
// build a local map of field name -> field value
|
// build a local map of field name -> field value
|
||||||
Map<String, Comparable<?>> map = new HashMap<String, Comparable<?>>();
|
Map<String, Comparable<?>> map = new HashMap<String, Comparable<?>>();
|
||||||
for (int i = 0; i < fields.length; i ++) {
|
for (int i = 0; i < fields.length; i ++) {
|
||||||
@@ -139,7 +90,7 @@ public class Key<T extends PersistentRecord> extends WhereClause
|
|||||||
String[] keyFields = KeyUtil.getKeyFields(pClass);
|
String[] keyFields = KeyUtil.getKeyFields(pClass);
|
||||||
|
|
||||||
// now extract the values in field order and ensure none are extra or missing
|
// now extract the values in field order and ensure none are extra or missing
|
||||||
ArrayList<Comparable<?>> newValues = new ArrayList<Comparable<?>>();
|
_values = new ArrayList<Comparable<?>>();
|
||||||
for (int ii = 0; ii < keyFields.length; ii++) {
|
for (int ii = 0; ii < keyFields.length; ii++) {
|
||||||
Comparable<?> nugget = map.remove(keyFields[ii]);
|
Comparable<?> nugget = map.remove(keyFields[ii]);
|
||||||
if (nugget == null) {
|
if (nugget == null) {
|
||||||
@@ -147,7 +98,7 @@ public class Key<T extends PersistentRecord> extends WhereClause
|
|||||||
throw new IllegalArgumentException("Missing value for key field: " + keyFields[ii]);
|
throw new IllegalArgumentException("Missing value for key field: " + keyFields[ii]);
|
||||||
}
|
}
|
||||||
if (nugget instanceof Serializable) {
|
if (nugget instanceof Serializable) {
|
||||||
newValues.add(nugget);
|
_values.add(nugget);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
@@ -159,8 +110,6 @@ public class Key<T extends PersistentRecord> extends WhereClause
|
|||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Non-key columns given: " + StringUtil.join(map.keySet().toArray(), ", "));
|
"Non-key columns given: " + StringUtil.join(map.keySet().toArray(), ", "));
|
||||||
}
|
}
|
||||||
|
|
||||||
_condition = new WhereCondition<T>(pClass, newValues);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -168,7 +117,7 @@ public class Key<T extends PersistentRecord> extends WhereClause
|
|||||||
*/
|
*/
|
||||||
public Class<T> getPersistentClass ()
|
public Class<T> getPersistentClass ()
|
||||||
{
|
{
|
||||||
return _condition.getPersistentClass();
|
return _pClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -176,19 +125,19 @@ public class Key<T extends PersistentRecord> extends WhereClause
|
|||||||
*/
|
*/
|
||||||
public ArrayList<Comparable<?>> getValues ()
|
public ArrayList<Comparable<?>> getValues ()
|
||||||
{
|
{
|
||||||
return _condition.getValues();
|
return _values;
|
||||||
}
|
}
|
||||||
|
|
||||||
// from WhereClause
|
// from WhereClause
|
||||||
public SQLExpression getWhereExpression ()
|
public SQLExpression getWhereExpression ()
|
||||||
{
|
{
|
||||||
return _condition;
|
throw new UnsupportedOperationException("Key is bound specially.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// from SQLExpression
|
// from SQLExpression
|
||||||
public void addClasses (Collection<Class<? extends PersistentRecord>> classSet)
|
public void addClasses (Collection<Class<? extends PersistentRecord>> classSet)
|
||||||
{
|
{
|
||||||
classSet.add(_condition.getPersistentClass());
|
classSet.add(_pClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
// from SQLExpression
|
// from SQLExpression
|
||||||
@@ -200,23 +149,22 @@ public class Key<T extends PersistentRecord> extends WhereClause
|
|||||||
// from CacheKey
|
// from CacheKey
|
||||||
public String getCacheId ()
|
public String getCacheId ()
|
||||||
{
|
{
|
||||||
return _condition.getPersistentClass().getName();
|
return _pClass.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
// from CacheKey
|
// from CacheKey
|
||||||
public Serializable getCacheKey ()
|
public Serializable getCacheKey ()
|
||||||
{
|
{
|
||||||
return _condition.getValues();
|
return _values;
|
||||||
}
|
}
|
||||||
|
|
||||||
// from ValidatingCacheInvalidator
|
// from ValidatingCacheInvalidator
|
||||||
public void validateFlushType (Class<?> pClass)
|
public void validateFlushType (Class<?> pClass)
|
||||||
{
|
{
|
||||||
if (!pClass.equals(_condition.getPersistentClass())) {
|
if (!pClass.equals(_pClass)) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Class mismatch between persistent record and cache invalidator " +
|
"Class mismatch between persistent record and cache invalidator " +
|
||||||
"[record=" + pClass.getSimpleName() +
|
"[record=" + pClass.getSimpleName() + ", invtype=" + _pClass.getSimpleName() + "].");
|
||||||
", invtype=" + _condition.getPersistentClass().getSimpleName() + "].");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -230,7 +178,7 @@ public class Key<T extends PersistentRecord> extends WhereClause
|
|||||||
public void validateQueryType (Class<?> pClass)
|
public void validateQueryType (Class<?> pClass)
|
||||||
{
|
{
|
||||||
super.validateQueryType(pClass);
|
super.validateQueryType(pClass);
|
||||||
validateTypesMatch(pClass, _condition.getPersistentClass());
|
validateTypesMatch(pClass, _pClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -242,31 +190,34 @@ public class Key<T extends PersistentRecord> extends WhereClause
|
|||||||
if (obj == null || getClass() != obj.getClass()) {
|
if (obj == null || getClass() != obj.getClass()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return _condition.equals(((Key<?>) obj)._condition);
|
return _values.equals(((Key<?>) obj)._values);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode ()
|
public int hashCode ()
|
||||||
{
|
{
|
||||||
return _condition.hashCode();
|
return _values.hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString ()
|
public String toString ()
|
||||||
{
|
{
|
||||||
StringBuilder builder = new StringBuilder(_condition.getPersistentClass().getSimpleName());
|
StringBuilder builder = new StringBuilder(_pClass.getSimpleName());
|
||||||
builder.append("(");
|
builder.append("(");
|
||||||
String[] keyFields = KeyUtil.getKeyFields(_condition.getPersistentClass());
|
String[] keyFields = KeyUtil.getKeyFields(_pClass);
|
||||||
for (int ii = 0; ii < keyFields.length; ii ++) {
|
for (int ii = 0; ii < keyFields.length; ii ++) {
|
||||||
if (ii > 0) {
|
if (ii > 0) {
|
||||||
builder.append(", ");
|
builder.append(", ");
|
||||||
}
|
}
|
||||||
builder.append(keyFields[ii]).append("=").append(_condition.getValues().get(ii));
|
builder.append(keyFields[ii]).append("=").append(_values.get(ii));
|
||||||
}
|
}
|
||||||
builder.append(")");
|
builder.append(")");
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** The persistent record type for which we are a key. */
|
||||||
|
protected final Class<T> _pClass;
|
||||||
|
|
||||||
/** The expression that identifies our row. */
|
/** The expression that identifies our row. */
|
||||||
protected final WhereCondition<T> _condition;
|
protected final ArrayList<Comparable<?>> _values;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ public class PrimaryKeySet<T extends PersistentRecord> extends WhereClause
|
|||||||
if (obj == null || getClass() != obj.getClass()) {
|
if (obj == null || getClass() != obj.getClass()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return _condition.equals(((Key<?>) obj)._condition);
|
return _condition.equals(((PrimaryKeySet<?>) obj)._condition);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ import com.samskivert.jdbc.depot.operator.SQLOperator.MultiOperator;
|
|||||||
public interface ExpressionVisitor
|
public interface ExpressionVisitor
|
||||||
{
|
{
|
||||||
public void visit (FieldDefinition fieldOverride);
|
public void visit (FieldDefinition fieldOverride);
|
||||||
public void visit (Key.WhereCondition<? extends PersistentRecord> whereCondition);
|
public void visit (Key<? extends PersistentRecord> key);
|
||||||
public void visit (MultiKey<? extends PersistentRecord> key);
|
public void visit (MultiKey<? extends PersistentRecord> key);
|
||||||
public void visit (FunctionExp functionExp);
|
public void visit (FunctionExp functionExp);
|
||||||
public void visit (EpochSeconds epochSeconds);
|
public void visit (EpochSeconds epochSeconds);
|
||||||
|
|||||||
Reference in New Issue
Block a user