*
* @see org.modeshape.sequencer.ddl.datatype.DataTypeParser#parse(org.modeshape.sequencer.ddl.DdlTokenStream)
*/
@Override
public DataType parse( final DdlTokenStream tokens ) throws ParsingException {
TeiidDataType teiidType = null;
long length = DataType.DEFAULT_LENGTH;
int[] precisionScale = DEFAULT_PRECISION_SCALE;
for (final TeiidDataType teiidDataType : TeiidDataType.values()) {
if (tokens.canConsume(teiidDataType.toDdl())) {
teiidType = teiidDataType;
if (teiidDataType == TeiidDataType.BIGDECIMAL) {
// ( BIGDECIMAL ( <lparen> <unsigned integer> ( <comma> <unsigned integer> )? <rparen> )? )
precisionScale = parseDecimal(tokens);
} else if (teiidDataType == TeiidDataType.BIGINTEGER) {
// ( BIGINTEGER ( <lparen> <unsigned integer> <rparen> )? )
length = parseLength(tokens);
} else if (teiidDataType == TeiidDataType.BLOB) {
// ( BLOB ( <lparen> <unsigned integer> <rparen> )? )
length = parseLength(tokens);
} else if (teiidDataType == TeiidDataType.CHAR) {
// ( CHAR ( <lparen> <unsigned integer> <rparen> )? )
length = parseLength(tokens);
} else if (teiidDataType == TeiidDataType.CLOB) {
// ( CLOB ( <lparen> <unsigned integer> <rparen> )? )
length = parseLength(tokens);
} else if (teiidDataType == TeiidDataType.DECIMAL) {
// ( DECIMAL ( <lparen> <unsigned integer> ( <comma> <unsigned integer> )? <rparen> )? )
precisionScale = parseDecimal(tokens);
} else if (teiidDataType == TeiidDataType.STRING) {
// ( STRING ( <lparen> <unsigned integer> <rparen> )? )
length = parseLength(tokens);
} else if (teiidDataType == TeiidDataType.VARBINARY) {
// ( VARBINARY ( <lparen> <unsigned integer> <rparen> )? )
length = parseLength(tokens);
} else if (teiidDataType == TeiidDataType.VARCHAR) {
// ( VARCHAR ( <lparen> <unsigned integer> <rparen> )? )
length = parseLength(tokens);
} else if (teiidDataType == TeiidDataType.OBJECT) {
// ( OBJECT ( <lparen> <unsigned integer> <rparen> )? )
length = parseLength(tokens);
}
break;
}
}
if (teiidType != null) {
final DataType type = new DataType(teiidType.toDdl());
// set length
if (length != DataType.DEFAULT_LENGTH) {
type.setLength(length);
}