danny0405 commented on a change in pull request #1629: [CALCITE-3550] Make 
SqlTypeAssignmentRules conversion mapping pluggable
URL: https://github.com/apache/calcite/pull/1629#discussion_r354067939
 
 

 ##########
 File path: 
core/src/main/java/org/apache/calcite/sql/type/SqlTypeAssignmentRules.java
 ##########
 @@ -207,262 +201,26 @@ private SqlTypeAssignmentRules(
     rule.add(SqlTypeName.TIMESTAMP);
     rules.add(SqlTypeName.ANY, rule);
 
-    // we use coerceRules when we're casting
-    final Builder coerceRules = new Builder(rules);
-
-    // Make numbers symmetrical,
-    // and make VARCHAR and CHAR castable to/from numbers
-    rule.clear();
-    rule.add(SqlTypeName.TINYINT);
-    rule.add(SqlTypeName.SMALLINT);
-    rule.add(SqlTypeName.INTEGER);
-    rule.add(SqlTypeName.BIGINT);
-    rule.add(SqlTypeName.DECIMAL);
-    rule.add(SqlTypeName.FLOAT);
-    rule.add(SqlTypeName.REAL);
-    rule.add(SqlTypeName.DOUBLE);
-
-    rule.add(SqlTypeName.CHAR);
-    rule.add(SqlTypeName.VARCHAR);
-    rule.add(SqlTypeName.BOOLEAN);
-    rule.add(SqlTypeName.TIMESTAMP);
-    rule.add(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE);
-
-    coerceRules.add(SqlTypeName.TINYINT, rule);
-    coerceRules.add(SqlTypeName.SMALLINT, rule);
-    coerceRules.add(SqlTypeName.INTEGER, rule);
-    coerceRules.add(SqlTypeName.BIGINT, rule);
-    coerceRules.add(SqlTypeName.FLOAT, rule);
-    coerceRules.add(SqlTypeName.REAL, rule);
-    coerceRules.add(SqlTypeName.DECIMAL, rule);
-    coerceRules.add(SqlTypeName.DOUBLE, rule);
-    coerceRules.add(SqlTypeName.CHAR, rule);
-    coerceRules.add(SqlTypeName.VARCHAR, rule);
-    coerceRules.add(SqlTypeName.BOOLEAN, rule);
-    coerceRules.add(SqlTypeName.TIMESTAMP, rule);
-    coerceRules.add(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE, rule);
-
-    // Exact numeric types are castable from intervals
-    for (SqlTypeName exactType : SqlTypeName.EXACT_TYPES) {
-      coerceRules.add(exactType,
-          coerceRules.copyValues(exactType)
-              .addAll(SqlTypeName.INTERVAL_TYPES)
-              .build());
-    }
-
-    // Intervals are castable from exact numeric
-    for (SqlTypeName typeName : SqlTypeName.INTERVAL_TYPES) {
-      coerceRules.add(typeName,
-          coerceRules.copyValues(typeName)
-              .add(SqlTypeName.TINYINT)
-              .add(SqlTypeName.SMALLINT)
-              .add(SqlTypeName.INTEGER)
-              .add(SqlTypeName.BIGINT)
-              .add(SqlTypeName.DECIMAL)
-              .add(SqlTypeName.CHAR)
-              .add(SqlTypeName.VARCHAR)
-              .build());
-    }
-
-    // BINARY is castable from VARBINARY, CHARACTERS.
-    coerceRules.add(SqlTypeName.BINARY,
-        coerceRules.copyValues(SqlTypeName.BINARY)
-            .add(SqlTypeName.VARBINARY)
-            .addAll(SqlTypeName.CHAR_TYPES)
-            .build());
-
-    // VARBINARY is castable from BINARY, CHARACTERS.
-    coerceRules.add(SqlTypeName.VARBINARY,
-        coerceRules.copyValues(SqlTypeName.VARBINARY)
-            .add(SqlTypeName.BINARY)
-            .addAll(SqlTypeName.CHAR_TYPES)
-            .build());
-
-    // VARCHAR is castable from BOOLEAN, DATE, TIMESTAMP, numeric types, 
binary and
-    // intervals
-    coerceRules.add(SqlTypeName.VARCHAR,
-        coerceRules.copyValues(SqlTypeName.VARCHAR)
-            .add(SqlTypeName.CHAR)
-            .add(SqlTypeName.BOOLEAN)
-            .add(SqlTypeName.DATE)
-            .add(SqlTypeName.TIME)
-            .add(SqlTypeName.TIMESTAMP)
-            .addAll(SqlTypeName.BINARY_TYPES)
-            .addAll(SqlTypeName.NUMERIC_TYPES)
-            .addAll(SqlTypeName.INTERVAL_TYPES)
-            .build());
-
-    // CHAR is castable from BOOLEAN, DATE, TIME, TIMESTAMP and numeric types, 
binary and
-    // intervals
-    coerceRules.add(SqlTypeName.CHAR,
-        coerceRules.copyValues(SqlTypeName.CHAR)
-            .add(SqlTypeName.VARCHAR)
-            .add(SqlTypeName.BOOLEAN)
-            .add(SqlTypeName.DATE)
-            .add(SqlTypeName.TIME)
-            .add(SqlTypeName.TIMESTAMP)
-            .addAll(SqlTypeName.BINARY_TYPES)
-            .addAll(SqlTypeName.NUMERIC_TYPES)
-            .addAll(SqlTypeName.INTERVAL_TYPES)
-            .build());
-
-    // BOOLEAN is castable from CHAR and VARCHAR
-    coerceRules.add(SqlTypeName.BOOLEAN,
-        coerceRules.copyValues(SqlTypeName.BOOLEAN)
-            .add(SqlTypeName.CHAR)
-            .add(SqlTypeName.VARCHAR)
-            .addAll(SqlTypeName.NUMERIC_TYPES)
-            .build());
-
-    // DATE, TIME, and TIMESTAMP are castable from
-    // CHAR and VARCHAR.
-
-    // DATE is castable from...
-    coerceRules.add(SqlTypeName.DATE,
-        coerceRules.copyValues(SqlTypeName.DATE)
-            .add(SqlTypeName.DATE)
-            .add(SqlTypeName.TIMESTAMP)
-            .add(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE)
-            .add(SqlTypeName.CHAR)
-            .add(SqlTypeName.VARCHAR)
-            .addAll(SqlTypeName.BINARY_TYPES)
-            .build());
-
-    // TIME is castable from...
-    coerceRules.add(SqlTypeName.TIME,
-        coerceRules.copyValues(SqlTypeName.TIME)
-            .add(SqlTypeName.TIME)
-            .add(SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE)
-            .add(SqlTypeName.TIMESTAMP)
-            .add(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE)
-            .add(SqlTypeName.CHAR)
-            .add(SqlTypeName.VARCHAR)
-            .addAll(SqlTypeName.BINARY_TYPES)
-            .build());
-
-    // TIME WITH LOCAL TIME ZONE is castable from...
-    coerceRules.add(SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE,
-        coerceRules.copyValues(SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE)
-            .add(SqlTypeName.TIME)
-            .add(SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE)
-            .add(SqlTypeName.TIMESTAMP)
-            .add(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE)
-            .add(SqlTypeName.CHAR)
-            .add(SqlTypeName.VARCHAR)
-            .addAll(SqlTypeName.BINARY_TYPES)
-            .build());
-
-    // TIMESTAMP is castable from...
-    coerceRules.add(SqlTypeName.TIMESTAMP,
-        coerceRules.copyValues(SqlTypeName.TIMESTAMP)
-            .add(SqlTypeName.TIMESTAMP)
-            .add(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE)
-            .add(SqlTypeName.DATE)
-            .add(SqlTypeName.TIME)
-            .add(SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE)
-            .add(SqlTypeName.CHAR)
-            .add(SqlTypeName.VARCHAR)
-            .addAll(SqlTypeName.BINARY_TYPES)
-            .addAll(SqlTypeName.NUMERIC_TYPES)
-            .add(SqlTypeName.BOOLEAN)
-            .build());
-
-    // TIMESTAMP WITH LOCAL TIME ZONE is castable from...
-    coerceRules.add(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE,
-        coerceRules.copyValues(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE)
-            .add(SqlTypeName.TIMESTAMP)
-            .add(SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE)
-            .add(SqlTypeName.DATE)
-            .add(SqlTypeName.TIME)
-            .add(SqlTypeName.TIME_WITH_LOCAL_TIME_ZONE)
-            .add(SqlTypeName.CHAR)
-            .add(SqlTypeName.VARCHAR)
-            .addAll(SqlTypeName.BINARY_TYPES)
-            .addAll(SqlTypeName.NUMERIC_TYPES)
-            .add(SqlTypeName.BOOLEAN)
-            .build());
-
     INSTANCE = new SqlTypeAssignmentRules(rules.map);
-    COERCE_INSTANCE = new SqlTypeAssignmentRules(coerceRules.map);
   }
 
   //~ Methods ----------------------------------------------------------------
 
-  /** Returns an instance that does not coerce. */
-  public static synchronized SqlTypeAssignmentRules instance() {
-    return instance(false);
-  }
-
   /** Returns an instance. */
-  public static synchronized SqlTypeAssignmentRules instance(boolean coerce) {
-    return coerce ? COERCE_INSTANCE : INSTANCE;
-  }
-
-  @Deprecated
-  public boolean canCastFrom(
-      SqlTypeName to,
-      SqlTypeName from,
-      boolean coerce) {
-    return instance(coerce).canCastFrom(to, from);
+  public static synchronized SqlTypeAssignmentRules instance() {
 
 Review comment:
   The `synchronized ` keyword was always there, but i think we can remove it.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to