public static SqlPrimitiveType of(final String typeName) {
    switch (typeName.toUpperCase()) {
      case INT:
        return SqlPrimitiveType.of(SqlBaseType.INTEGER);
      case VARCHAR:
        return SqlPrimitiveType.of(SqlBaseType.STRING);
      default:
        try {
          final SqlBaseType sqlType = SqlBaseType.valueOf(typeName.toUpperCase());
          return SqlPrimitiveType.of(sqlType);
        } catch (final IllegalArgumentException e) {
          throw new SchemaException("Unknown primitive type: " + typeName, e);
        }
    }
  }
@SuppressWarnings("UnstableApiUsage")
  @Test
  public void shouldImplementHashCodeAndEqualsProperly() {
    new EqualsTester()
        .addEqualityGroup(SqlPrimitiveType.of(SqlBaseType.BOOLEAN),
            SqlPrimitiveType.of(SqlBaseType.BOOLEAN))
        .addEqualityGroup(SqlPrimitiveType.of(SqlBaseType.INTEGER),
            SqlPrimitiveType.of(SqlBaseType.INTEGER))
        .addEqualityGroup(SqlPrimitiveType.of(SqlBaseType.BIGINT),
            SqlPrimitiveType.of(SqlBaseType.BIGINT))
        .addEqualityGroup(SqlPrimitiveType.of(SqlBaseType.DOUBLE),
            SqlPrimitiveType.of(SqlBaseType.DOUBLE))
        .addEqualityGroup(SqlPrimitiveType.of(SqlBaseType.STRING),
            SqlPrimitiveType.of(SqlBaseType.STRING))
        .addEqualityGroup(SqlPrimitiveType.of(SqlBaseType.TIMESTAMP),
            SqlPrimitiveType.of(SqlBaseType.TIMESTAMP))
        .addEqualityGroup(SqlArray.of(SqlPrimitiveType.of(SqlBaseType.STRING)))
        .testEquals();
  }