package com.revolsys.record.query; import java.sql.PreparedStatement; import com.revolsys.datatype.DataType; import com.revolsys.datatype.DataTypes; import com.revolsys.record.Record; import com.revolsys.record.schema.FieldDefinition; import com.revolsys.record.schema.RecordDefinition; import com.revolsys.record.schema.RecordStore; public class Column implements QueryValue { private FieldDefinition fieldDefinition; private final String name; public Column(final FieldDefinition fieldDefinition) { this.name = fieldDefinition.getName(); this.fieldDefinition = fieldDefinition; } public Column(final String name) { this.name = name; } @Override public void appendDefaultSql(final Query query, final RecordStore recordStore, final StringBuilder buffer) { buffer.append(toString()); } @Override public int appendParameters(final int index, final PreparedStatement statement) { return index; } @Override public Column clone() { return new Column(this.name); } @Override public boolean equals(final Object obj) { if (obj instanceof Column) { final Column value = (Column)obj; return DataType.equal(value.getName(), this.getName()); } else { return false; } } public FieldDefinition getFieldDefinition() { return this.fieldDefinition; } public String getName() { return this.name; } @Override public String getStringValue(final Record record) { final Object value = getValue(record); if (this.fieldDefinition == null) { return DataTypes.toString(value); } else { return this.fieldDefinition.toString(value); } } @Override @SuppressWarnings("unchecked") public <V> V getValue(final Record record) { final String name = getName(); return (V)record.getValue(name); } @Override public void setRecordDefinition(final RecordDefinition recordDefinition) { this.fieldDefinition = recordDefinition.getField(getName()); } @Override public String toString() { if (this.name.matches("([A-Z][_A-Z1-9]*\\.)?[A-Z][_A-Z1-9]*")) { return this.name; } else { return "\"" + this.name + "\""; } } }