|
25 | 25 | import org.apache.calcite.rex.RexNode; |
26 | 26 | import org.apache.calcite.sql.SqlAbstractDateTimeLiteral; |
27 | 27 | import org.apache.calcite.sql.SqlAlienSystemTypeNameSpec; |
28 | | -import org.apache.calcite.sql.SqlArrayWithAngleBracketsNameSpec; |
29 | 28 | import org.apache.calcite.sql.SqlBasicTypeNameSpec; |
30 | 29 | import org.apache.calcite.sql.SqlCall; |
31 | 30 | import org.apache.calcite.sql.SqlDataTypeSpec; |
32 | 31 | import org.apache.calcite.sql.SqlDialect; |
33 | 32 | import org.apache.calcite.sql.SqlLiteral; |
34 | 33 | import org.apache.calcite.sql.SqlMapTypeNameSpec; |
35 | 34 | import org.apache.calcite.sql.SqlNode; |
36 | | -import org.apache.calcite.sql.SqlTypeNameSpec; |
37 | 35 | import org.apache.calcite.sql.SqlWriter; |
38 | 36 | import org.apache.calcite.sql.fun.SqlFloorFunction; |
39 | 37 | import org.apache.calcite.sql.parser.SqlParserPos; |
40 | | -import org.apache.calcite.sql.type.AbstractSqlType; |
41 | | -import org.apache.calcite.sql.type.ArraySqlType; |
42 | | -import org.apache.calcite.sql.type.BasicSqlType; |
43 | 38 | import org.apache.calcite.sql.type.MapSqlType; |
44 | 39 | import org.apache.calcite.sql.type.SqlTypeName; |
45 | 40 | import org.apache.calcite.util.RelToSqlConverterUtil; |
@@ -177,72 +172,55 @@ public StarRocksSqlDialect(Context context) { |
177 | 172 | } |
178 | 173 |
|
179 | 174 | @Override public @Nullable SqlNode getCastSpec(RelDataType type) { |
180 | | - if (type instanceof BasicSqlType) { |
181 | | - switch (type.getSqlTypeName()) { |
182 | | - case INTEGER: |
183 | | - return new SqlDataTypeSpec( |
184 | | - new SqlAlienSystemTypeNameSpec( |
185 | | - "INT", |
186 | | - type.getSqlTypeName(), |
187 | | - SqlParserPos.ZERO), |
188 | | - SqlParserPos.ZERO); |
189 | | - case REAL: |
190 | | - return new SqlDataTypeSpec( |
191 | | - new SqlAlienSystemTypeNameSpec("FLOAT", type.getSqlTypeName(), |
192 | | - SqlParserPos.ZERO), |
193 | | - SqlParserPos.ZERO); |
194 | | - case BIGINT: |
195 | | - return new SqlDataTypeSpec( |
196 | | - new SqlBasicTypeNameSpec(SqlTypeName.BIGINT, SqlParserPos.ZERO), |
197 | | - SqlParserPos.ZERO); |
198 | | - case TIMESTAMP: |
199 | | - return new SqlDataTypeSpec( |
200 | | - new SqlAlienSystemTypeNameSpec( |
201 | | - "DATETIME", |
202 | | - type.getSqlTypeName(), |
203 | | - SqlParserPos.ZERO), |
204 | | - SqlParserPos.ZERO); |
205 | | - case VARCHAR: |
206 | | - return new SqlDataTypeSpec( |
207 | | - new SqlBasicTypeNameSpec(SqlTypeName.VARCHAR, type.getPrecision(), SqlParserPos.ZERO), |
208 | | - SqlParserPos.ZERO); |
209 | | - default: |
210 | | - break; |
211 | | - } |
212 | | - } |
213 | | - |
214 | | - if (type instanceof AbstractSqlType) { |
215 | | - switch (type.getSqlTypeName()) { |
216 | | - case MAP: |
217 | | - MapSqlType mapSqlType = (MapSqlType) type; |
218 | | - SqlDataTypeSpec keySpec = (SqlDataTypeSpec) getCastSpec(mapSqlType.getKeyType()); |
219 | | - SqlDataTypeSpec valueSpec = |
220 | | - (SqlDataTypeSpec) getCastSpec(mapSqlType.getValueType()); |
221 | | - SqlDataTypeSpec nonNullKeySpec = |
222 | | - requireNonNull(keySpec, "keySpec"); |
223 | | - SqlDataTypeSpec nonNullValueSpec = |
224 | | - requireNonNull(valueSpec, "valueSpec"); |
225 | | - SqlMapTypeNameSpec sqlMapTypeNameSpec = |
226 | | - new SqlMapTypeNameSpec(nonNullKeySpec, nonNullValueSpec, SqlParserPos.ZERO); |
227 | | - return new SqlDataTypeSpec(sqlMapTypeNameSpec, |
228 | | - SqlParserPos.ZERO); |
229 | | - case ARRAY: |
230 | | - ArraySqlType arraySqlType = (ArraySqlType) type; |
231 | | - SqlDataTypeSpec arrayValueSpec = |
232 | | - (SqlDataTypeSpec) getCastSpec(arraySqlType.getComponentType()); |
233 | | - SqlDataTypeSpec nonNullarrayValueSpec = |
234 | | - requireNonNull(arrayValueSpec, "arrayValueSpec"); |
235 | | - SqlTypeNameSpec typeNameSpec = |
236 | | - new SqlArrayWithAngleBracketsNameSpec( |
237 | | - nonNullarrayValueSpec.getTypeNameSpec(), |
238 | | - arraySqlType.getSqlTypeName(), SqlParserPos.ZERO); |
239 | | - return new SqlDataTypeSpec(typeNameSpec, SqlParserPos.ZERO); |
240 | | - case MULTISET: |
241 | | - throw new UnsupportedOperationException("StarRocks dialect does not support cast to " |
242 | | - + type.getSqlTypeName()); |
243 | | - default: |
244 | | - break; |
245 | | - } |
| 175 | + switch (type.getSqlTypeName()) { |
| 176 | + case INTEGER: |
| 177 | + return new SqlDataTypeSpec( |
| 178 | + new SqlAlienSystemTypeNameSpec( |
| 179 | + "INT", |
| 180 | + type.getSqlTypeName(), |
| 181 | + SqlParserPos.ZERO), |
| 182 | + SqlParserPos.ZERO); |
| 183 | + case REAL: |
| 184 | + return new SqlDataTypeSpec( |
| 185 | + new SqlAlienSystemTypeNameSpec("FLOAT", type.getSqlTypeName(), |
| 186 | + SqlParserPos.ZERO), |
| 187 | + SqlParserPos.ZERO); |
| 188 | + case BIGINT: |
| 189 | + return new SqlDataTypeSpec( |
| 190 | + new SqlBasicTypeNameSpec(SqlTypeName.BIGINT, SqlParserPos.ZERO), |
| 191 | + SqlParserPos.ZERO); |
| 192 | + case TIMESTAMP: |
| 193 | + return new SqlDataTypeSpec( |
| 194 | + new SqlAlienSystemTypeNameSpec( |
| 195 | + "DATETIME", |
| 196 | + type.getSqlTypeName(), |
| 197 | + SqlParserPos.ZERO), |
| 198 | + SqlParserPos.ZERO); |
| 199 | + case VARCHAR: |
| 200 | + return new SqlDataTypeSpec( |
| 201 | + new SqlBasicTypeNameSpec(SqlTypeName.VARCHAR, type.getPrecision(), SqlParserPos.ZERO), |
| 202 | + SqlParserPos.ZERO); |
| 203 | + case MAP: |
| 204 | + MapSqlType mapSqlType = (MapSqlType) type; |
| 205 | + SqlDataTypeSpec keySpec = (SqlDataTypeSpec) getCastSpec(mapSqlType.getKeyType()); |
| 206 | + SqlDataTypeSpec valueSpec = |
| 207 | + (SqlDataTypeSpec) getCastSpec(mapSqlType.getValueType()); |
| 208 | + SqlDataTypeSpec nonNullKeySpec = |
| 209 | + requireNonNull(keySpec, "keySpec"); |
| 210 | + SqlDataTypeSpec nonNullValueSpec = |
| 211 | + requireNonNull(valueSpec, "valueSpec"); |
| 212 | + SqlMapTypeNameSpec sqlMapTypeNameSpec = |
| 213 | + new SqlMapTypeNameSpec(nonNullKeySpec, nonNullValueSpec, SqlParserPos.ZERO); |
| 214 | + return new SqlDataTypeSpec(sqlMapTypeNameSpec, |
| 215 | + SqlParserPos.ZERO); |
| 216 | + case ARRAY: |
| 217 | + return RelToSqlConverterUtil.getCastSpecAngleBracketArrayType(this, type, |
| 218 | + SqlParserPos.ZERO); |
| 219 | + case MULTISET: |
| 220 | + throw new UnsupportedOperationException("StarRocks dialect does not support cast to " |
| 221 | + + type.getSqlTypeName()); |
| 222 | + default: |
| 223 | + break; |
246 | 224 | } |
247 | 225 |
|
248 | 226 | return super.getCastSpec(type); |
|
0 commit comments