in empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java [132:217]
protected boolean appendColumnDataType(DataType type, double size, DBTableColumn c, DBSQLBuilder sql)
{
switch (type)
{
case INTEGER:
case AUTOINC:
{ int bytes = Math.abs((int)size);
if (bytes>0 && bytes<3)
sql.append(DATATYPE_INT_SMALL);
else if (bytes>4)
sql.append(DATATYPE_INT_BIG);
else // Default
sql.append(DATATYPE_INTEGER); // Default integer length
}
break;
case VARCHAR:
case CHAR:
{ // Char or Varchar
sql.append((type==DataType.CHAR) ? DATATYPE_CHAR : DATATYPE_VARCHAR);
// get length (sign may be used for specifying (unicode>0) or bytes (non-unicode<0))
int len = Math.abs((int)size);
if (len == 0)
len = (type==DataType.CHAR) ? 1 : 100;
sql.append("(");
sql.append(String.valueOf(len));
sql.append(")");
}
break;
case DATE:
sql.append(DATATYPE_DATE);
break;
case TIME:
sql.append(DATATYPE_TIME);
break;
case DATETIME:
case TIMESTAMP:
sql.append(DATATYPE_TIMESTAMP);
break;
case BOOL:
sql.append(DATATYPE_BOOLEAN);
break;
case FLOAT:
{ sql.append(DATATYPE_FLOAT);
// append precision (if specified)
int prec = Math.abs((int)size);
if (prec>0) {
sql.append("(");
sql.append(String.valueOf(prec));
sql.append(")");
}
break;
}
case DECIMAL:
{ sql.append(DATATYPE_DECIMAL);
int prec = (int) size;
int scale = c.getDecimalScale();
if (prec>0) {
// append precision and scale
sql.append("(");
sql.append(String.valueOf(prec));
sql.append(",");
sql.append(String.valueOf(scale));
sql.append(")");
}
}
break;
case CLOB:
sql.append(DATATYPE_CLOB);
break;
case BLOB:
sql.append(DATATYPE_BLOB);
if (size > 0) {
sql.append("(").append((long) size).append(") ");
}
break;
case UNIQUEID:
// emulate using java.util.UUID
sql.append(DATATYPE_UNIQUEID);
break;
default:
// Error: Unable to append column of type UNKNOWN
throw new InvalidOperationException("Error: Unable to append column of type UNKNOWN");
}
// done. Add more attributes (like e.g. NULLABLE or NOT NULL)
return true;
}