@Override public int getMaxPrecision(final SqlTypeName typeName) { return RelDataTypeSystem.DEFAULT.getMaxPrecision(typeName); }
@Override public int getMaxScale(final SqlTypeName typeName) { return RelDataTypeSystem.DEFAULT.getMaxScale(typeName); }
@Override public int getDefaultPrecision(final SqlTypeName typeName) { return RelDataTypeSystem.DEFAULT.getDefaultPrecision(typeName); }
private ImmutableList<MetaTypeInfo> getAllDefaultType() { final ImmutableList.Builder<MetaTypeInfo> allTypeList = ImmutableList.builder(); final CalciteConnectionImpl conn = (CalciteConnectionImpl) connection; final RelDataTypeSystem typeSystem = conn.typeFactory.getTypeSystem(); for (SqlTypeName sqlTypeName : SqlTypeName.values()) { allTypeList.add( new MetaTypeInfo(sqlTypeName.getName(), sqlTypeName.getJdbcOrdinal(), typeSystem.getMaxPrecision(sqlTypeName), typeSystem.getLiteral(sqlTypeName, true), typeSystem.getLiteral(sqlTypeName, false), // All types are nullable (short) DatabaseMetaData.typeNullable, typeSystem.isCaseSensitive(sqlTypeName), // Making all type searchable; we may want to // be specific and declare under SqlTypeName (short) DatabaseMetaData.typeSearchable, false, false, typeSystem.isAutoincrement(sqlTypeName), (short) sqlTypeName.getMinScale(), (short) typeSystem.getMaxScale(sqlTypeName), typeSystem.getNumTypeRadix(sqlTypeName))); } return allTypeList.build(); }
@Test public void testIllegalDecimalType() { RelDataTypeSystem typeSystem = new KylinRelDataTypeSystem(); RelDataTypeFactory typeFactory = new SqlTypeFactoryImpl(typeSystem); DataType dataType = DataType.getType("decimal(40, 10)"); RelDataType relDataType = OLAPTable.createSqlType(typeFactory, dataType, true); Assert.assertTrue(relDataType instanceof BasicSqlType); Assert.assertEquals(relDataType.getSqlTypeName(), SqlTypeName.DECIMAL); Assert.assertTrue(typeSystem.getMaxNumericPrecision() < 40); Assert.assertEquals(relDataType.getPrecision(), typeSystem.getMaxNumericPrecision()); Assert.assertEquals(relDataType.getScale(), 10); Assert.assertTrue(relDataType.getScale() <= typeSystem.getMaxNumericScale()); } }
for (SqlTypeName typeName : SqlTypeName.INTERVAL_TYPES) { assertThat(typeName.getMinPrecision(), is(1)); assertThat(typeSystem.getMaxPrecision(typeName), is(10)); assertThat(typeSystem.getDefaultPrecision(typeName), is(2)); assertThat(typeName.getMinScale(), is(1)); assertThat(typeSystem.getMaxScale(typeName), is(9)); assertThat(typeName.getDefaultScale(), is(6));
final int fracPrecision = qualifier.getFractionalSecondPrecision(typeSystem); final int maxPrecision = typeSystem.getMaxPrecision(qualifier.typeName()); final int minPrecision = qualifier.typeName().getMinPrecision(); final int minScale = qualifier.typeName().getMinScale(); final int maxScale = typeSystem.getMaxScale(qualifier.typeName()); if (qualifier.isYearMonth()) { if (startPrecision < minPrecision || startPrecision > maxPrecision) {
@Override public int getMaxNumericPrecision() { return RelDataTypeSystem.DEFAULT.getMaxNumericPrecision(); }
@Override public boolean isSchemaCaseSensitive() { return RelDataTypeSystem.DEFAULT.isSchemaCaseSensitive(); }
@Override public int getMaxNumericScale() { return RelDataTypeSystem.DEFAULT.getMaxNumericScale(); }
@Override public boolean isCaseSensitive(final SqlTypeName typeName) { return RelDataTypeSystem.DEFAULT.isCaseSensitive(typeName); }
@Override public int getNumTypeRadix(final SqlTypeName typeName) { return RelDataTypeSystem.DEFAULT.getNumTypeRadix(typeName); }
@Override public boolean isAutoincrement(final SqlTypeName typeName) { return RelDataTypeSystem.DEFAULT.isAutoincrement(typeName); }
@Override public String getLiteral(final SqlTypeName typeName, final boolean isPrefix) { return RelDataTypeSystem.DEFAULT.getLiteral(typeName, isPrefix); }
private ImmutableList<MetaTypeInfo> getAllDefaultType() { final ImmutableList.Builder<MetaTypeInfo> allTypeList = ImmutableList.builder(); final CalciteConnectionImpl conn = (CalciteConnectionImpl) connection; final RelDataTypeSystem typeSystem = conn.typeFactory.getTypeSystem(); for (SqlTypeName sqlTypeName : SqlTypeName.values()) { allTypeList.add( new MetaTypeInfo(sqlTypeName.getName(), sqlTypeName.getJdbcOrdinal(), typeSystem.getMaxPrecision(sqlTypeName), typeSystem.getLiteral(sqlTypeName, true), typeSystem.getLiteral(sqlTypeName, false), // All types are nullable (short) DatabaseMetaData.typeNullable, typeSystem.isCaseSensitive(sqlTypeName), // Making all type searchable; we may want to // be specific and declare under SqlTypeName (short) DatabaseMetaData.typeSearchable, false, false, typeSystem.isAutoincrement(sqlTypeName), (short) sqlTypeName.getMinScale(), (short) typeSystem.getMaxScale(sqlTypeName), typeSystem.getNumTypeRadix(sqlTypeName))); } return allTypeList.build(); }
@Test public void testLegalDecimalType() { RelDataTypeSystem typeSystem = new KylinRelDataTypeSystem(); RelDataTypeFactory typeFactory = new SqlTypeFactoryImpl(typeSystem); DataType dataType = DataType.getType("decimal(30, 10)"); RelDataType relDataType = OLAPTable.createSqlType(typeFactory, dataType, true); Assert.assertTrue(relDataType instanceof BasicSqlType); Assert.assertEquals(relDataType.getSqlTypeName(), SqlTypeName.DECIMAL); Assert.assertEquals(relDataType.getPrecision(), 30); Assert.assertTrue(relDataType.getPrecision() <= typeSystem.getMaxNumericPrecision()); Assert.assertEquals(relDataType.getScale(), 10); Assert.assertTrue(relDataType.getScale() <= typeSystem.getMaxNumericScale()); }
for (SqlTypeName typeName : SqlTypeName.INTERVAL_TYPES) { assertThat(typeName.getMinPrecision(), is(1)); assertThat(typeSystem.getMaxPrecision(typeName), is(10)); assertThat(typeSystem.getDefaultPrecision(typeName), is(2)); assertThat(typeName.getMinScale(), is(1)); assertThat(typeSystem.getMaxScale(typeName), is(9)); assertThat(typeName.getDefaultScale(), is(6));
final int fracPrecision = qualifier.getFractionalSecondPrecision(typeSystem); final int maxPrecision = typeSystem.getMaxPrecision(qualifier.typeName()); final int minPrecision = qualifier.typeName().getMinPrecision(); final int minScale = qualifier.typeName().getMinScale(); final int maxScale = typeSystem.getMaxScale(qualifier.typeName()); if (qualifier.isYearMonth()) { if (startPrecision < minPrecision || startPrecision > maxPrecision) {
@Override public int getMaxNumericPrecision() { return RelDataTypeSystem.DEFAULT.getMaxNumericPrecision(); }
@Override public boolean isSchemaCaseSensitive() { return RelDataTypeSystem.DEFAULT.isSchemaCaseSensitive(); }