blob: 3f4e239a5ad15332ab1f178de9b8cca1486bb1a4 [file] [log] [blame]
package edu.uci.ics.asterix.aql.expression;
import java.util.ArrayList;
import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
import edu.uci.ics.asterix.aql.expression.visitor.IAqlVisitorWithVoidReturn;
import edu.uci.ics.asterix.common.annotations.IRecordFieldDataGen;
import edu.uci.ics.asterix.common.annotations.UndeclaredFieldsDataGen;
import edu.uci.ics.asterix.common.exceptions.AsterixException;
public class RecordTypeDefinition extends TypeExpression {
public enum RecordKind {
OPEN,
CLOSED
}
private ArrayList<String> fieldNames;
private ArrayList<TypeExpression> fieldTypes;
private ArrayList<IRecordFieldDataGen> fieldDataGen;
private ArrayList<Boolean> nullableFields;
private RecordKind recordKind;
private UndeclaredFieldsDataGen undeclaredFieldsDataGen;
public RecordTypeDefinition() {
fieldNames = new ArrayList<String>();
fieldTypes = new ArrayList<TypeExpression>();
nullableFields = new ArrayList<Boolean>();
fieldDataGen = new ArrayList<IRecordFieldDataGen>();
}
@Override
public TypeExprKind getTypeKind() {
return TypeExprKind.RECORD;
}
public void addField(String name, TypeExpression type, Boolean nullable, IRecordFieldDataGen fldDataGen) {
fieldNames.add(name);
fieldTypes.add(type);
nullableFields.add(nullable);
fieldDataGen.add(fldDataGen);
}
public void addField(String name, TypeExpression type, Boolean nullable) {
fieldNames.add(name);
fieldTypes.add(type);
nullableFields.add(nullable);
}
public ArrayList<String> getFieldNames() {
return fieldNames;
}
public ArrayList<TypeExpression> getFieldTypes() {
return fieldTypes;
}
public ArrayList<Boolean> getNullableFields() {
return nullableFields;
}
public ArrayList<IRecordFieldDataGen> getFieldDataGen() {
return fieldDataGen;
}
public RecordKind getRecordKind() {
return recordKind;
}
public void setRecordKind(RecordKind recordKind) {
this.recordKind = recordKind;
}
@Override
public <R, T> R accept(IAqlExpressionVisitor<R, T> visitor, T arg) throws AsterixException {
return visitor.visitRecordTypeDefiniton(this, arg);
}
@Override
public <T> void accept(IAqlVisitorWithVoidReturn<T> visitor, T arg) throws AsterixException {
visitor.visit(this, arg);
}
public void setUndeclaredFieldsDataGen(UndeclaredFieldsDataGen undeclaredFieldsDataGen) {
this.undeclaredFieldsDataGen = undeclaredFieldsDataGen;
}
public UndeclaredFieldsDataGen getUndeclaredFieldsDataGen() {
return undeclaredFieldsDataGen;
}
}