/*
***************************************************************************************
* Copyright (C) 2006 EsperTech, Inc. All rights reserved. *
* http://www.espertech.com/esper *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
***************************************************************************************
*/
package com.espertech.esper.client.soda;
import java.io.Serializable;
import java.io.StringWriter;
import java.util.List;
/**
* Table column in a create-table statement.
*/
public class CreateTableColumn implements Serializable {
private static final long serialVersionUID = 0L;
private String columnName;
private Expression optionalExpression;
private String optionalTypeName;
private Boolean optionalTypeIsArray;
private Boolean optionalTypeIsPrimitiveArray;
private List<AnnotationPart> annotations;
private Boolean primaryKey;
/**
* Ctor.
*
* @param columnName the table column name
* @param optionalExpression an optional aggregation expression (exclusive of type name)
* @param optionalTypeName a type name (exclusive of aggregation expression)
* @param optionalTypeIsArray flag whether type is array
* @param optionalTypeIsPrimitiveArray flag whether array of primitive (requires array flag)
* @param annotations optional annotations
* @param primaryKey flag indicating whether the column is a primary key
*/
public CreateTableColumn(String columnName, Expression optionalExpression, String optionalTypeName, Boolean optionalTypeIsArray, Boolean optionalTypeIsPrimitiveArray, List<AnnotationPart> annotations, Boolean primaryKey) {
this.columnName = columnName;
this.optionalExpression = optionalExpression;
this.optionalTypeName = optionalTypeName;
this.optionalTypeIsArray = optionalTypeIsArray;
this.optionalTypeIsPrimitiveArray = optionalTypeIsPrimitiveArray;
this.annotations = annotations;
this.primaryKey = primaryKey;
}
/**
* Ctor.
*/
public CreateTableColumn() {
}
/**
* Returns the table column name
*
* @return column name
*/
public String getColumnName() {
return columnName;
}
/**
* Sets the table column name
*
* @param columnName column name
*/
public void setColumnName(String columnName) {
this.columnName = columnName;
}
/**
* Returns optional annotations, or null if there are none
*
* @return annotations
*/
public List<AnnotationPart> getAnnotations() {
return annotations;
}
/**
* Sets optional annotations, or null if there are none
*
* @param annotations annotations
*/
public void setAnnotations(List<AnnotationPart> annotations) {
this.annotations = annotations;
}
/**
* Returns the aggragtion expression, if the type of the column is aggregation,
* or null if a type name is provided instead.
*
* @return expression
*/
public Expression getOptionalExpression() {
return optionalExpression;
}
/**
* Sets the aggragtion expression, if the type of the column is aggregation,
* or null if a type name is provided instead.
*
* @param optionalExpression expression
*/
public void setOptionalExpression(Expression optionalExpression) {
this.optionalExpression = optionalExpression;
}
/**
* Returns the type name, or null if the column is an aggregation and an
* aggregation expression is provided instead.
*
* @return type name
*/
public String getOptionalTypeName() {
return optionalTypeName;
}
/**
* Sets the type name, or null if the column is an aggregation and an
* aggregation expression is provided instead.
*
* @param optionalTypeName type name
*/
public void setOptionalTypeName(String optionalTypeName) {
this.optionalTypeName = optionalTypeName;
}
/**
* Returns indicator whether type is an array type, applicable only if a type name is provided
*
* @return array type indicator
*/
public Boolean getOptionalTypeIsArray() {
return optionalTypeIsArray;
}
/**
* Sets indicator whether type is an array type, applicable only if a type name is provided
*
* @param optionalTypeIsArray array type indicator
*/
public void setOptionalTypeIsArray(Boolean optionalTypeIsArray) {
this.optionalTypeIsArray = optionalTypeIsArray;
}
/**
* Returns indicator whether the column is a primary key
*
* @return primary key indicator
*/
public Boolean getPrimaryKey() {
return primaryKey;
}
/**
* Sets indicator whether the column is a primary key
*
* @param primaryKey primary key indicator
*/
public void setPrimaryKey(Boolean primaryKey) {
this.primaryKey = primaryKey;
}
/**
* Returns indicator whether the array is an array of primitives or boxed types (only when a type name is provided and array flag set)
*
* @return primitive array indicator
*/
public Boolean getOptionalTypeIsPrimitiveArray() {
return optionalTypeIsPrimitiveArray;
}
/**
* Sets indicator whether the array is an array of primitives or boxed types (only when a type name is provided and array flag set)
*
* @param optionalTypeIsPrimitiveArray primitive array indicator
*/
public void setOptionalTypeIsPrimitiveArray(Boolean optionalTypeIsPrimitiveArray) {
this.optionalTypeIsPrimitiveArray = optionalTypeIsPrimitiveArray;
}
/**
* Render create-table column
*
* @param writer to render to
*/
public void toEPL(StringWriter writer) {
writer.append(columnName);
writer.append(" ");
if (optionalExpression != null) {
optionalExpression.toEPL(writer, ExpressionPrecedenceEnum.MINIMUM);
} else {
writer.append(optionalTypeName);
if (optionalTypeIsArray != null && optionalTypeIsArray) {
if (optionalTypeIsPrimitiveArray != null && optionalTypeIsPrimitiveArray) {
writer.append("[primitive]");
} else {
writer.append("[]");
}
}
if (primaryKey) {
writer.append(" primary key");
}
}
if (annotations != null && !annotations.isEmpty()) {
writer.append(" ");
String delimiter = "";
for (AnnotationPart part : annotations) {
if (part.getName() == null) {
continue;
}
writer.append(delimiter);
delimiter = " ";
part.toEPL(writer);
}
}
}
}