@Override public RelDataType toSql(RelDataType type) { return convertToSql(this, type); }
private static Planner createPlanner() { Connection connection; SchemaPlus rootSchema; try { JavaTypeFactory typeFactory = new SamzaSqlJavaTypeFactoryImpl(); SamzaSqlDriver driver = new SamzaSqlDriver(typeFactory); DriverManager.deregisterDriver(DriverManager.getDriver("jdbc:calcite:")); DriverManager.registerDriver(driver); connection = driver.connect("jdbc:calcite:", new Properties()); CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class); rootSchema = calciteConnection.getRootSchema(); } catch (SQLException e) { throw new SamzaException(e); } final List<RelTraitDef> traitDefs = new ArrayList<>(); traitDefs.add(ConventionTraitDef.INSTANCE); traitDefs.add(RelCollationTraitDef.INSTANCE); FrameworkConfig frameworkConfig = Frameworks.newConfigBuilder() .parserConfig(SqlParser.configBuilder().setLex(Lex.JAVA).build()) .defaultSchema(rootSchema) .operatorTable(SqlStdOperatorTable.instance()) .traitDefs(traitDefs) .context(Contexts.EMPTY_CONTEXT) .costFactory(null) .build(); return Frameworks.getPlanner(frameworkConfig); }
private static Planner createPlanner() { Connection connection; SchemaPlus rootSchema; try { JavaTypeFactory typeFactory = new SamzaSqlJavaTypeFactoryImpl(); SamzaSqlDriver driver = new SamzaSqlDriver(typeFactory); DriverManager.deregisterDriver(DriverManager.getDriver("jdbc:calcite:")); DriverManager.registerDriver(driver); connection = driver.connect("jdbc:calcite:", new Properties()); CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class); rootSchema = calciteConnection.getRootSchema(); } catch (SQLException e) { throw new SamzaException(e); } final List<RelTraitDef> traitDefs = new ArrayList<>(); traitDefs.add(ConventionTraitDef.INSTANCE); traitDefs.add(RelCollationTraitDef.INSTANCE); FrameworkConfig frameworkConfig = Frameworks.newConfigBuilder() .parserConfig(SqlParser.configBuilder().setLex(Lex.JAVA).build()) .defaultSchema(rootSchema) .operatorTable(SqlStdOperatorTable.instance()) .traitDefs(traitDefs) .context(Contexts.EMPTY_CONTEXT) .costFactory(null) .build(); return Frameworks.getPlanner(frameworkConfig); }
@Override public RelDataType toSql(RelDataType type) { return convertToSql(this, type); }
final ParameterExpression inputValues = Expressions.parameter(Object[].class, "inputValues"); final ParameterExpression outputValues = Expressions.parameter(Object[].class, "outputValues"); final JavaTypeFactoryImpl javaTypeFactory = new SamzaSqlJavaTypeFactoryImpl(rexBuilder.getTypeFactory().getTypeSystem());
private static RelDataType convertToSql(final RelDataTypeFactory typeFactory, RelDataType type) { if (type instanceof RelRecordType) { return typeFactory.createStructType( Lists.transform(type.getFieldList(), a0 -> convertToSql(typeFactory, a0.getType())), type.getFieldNames()); } if (type instanceof JavaType) { SqlTypeName typeName = JavaToSqlTypeConversionRules.instance().lookup(((JavaType) type).getJavaClass()); // For unknown sql type names, return ANY sql type to make Calcite validation not fail. if (typeName == null) { typeName = SqlTypeName.ANY; } return typeFactory.createTypeWithNullability( typeFactory.createSqlType(typeName), type.isNullable()); } else { return JavaTypeFactoryImpl.toSql(typeFactory, type); } } }
final ParameterExpression inputValues = Expressions.parameter(Object[].class, "inputValues"); final ParameterExpression outputValues = Expressions.parameter(Object[].class, "outputValues"); final JavaTypeFactoryImpl javaTypeFactory = new SamzaSqlJavaTypeFactoryImpl(rexBuilder.getTypeFactory().getTypeSystem());
private static RelDataType convertToSql(final RelDataTypeFactory typeFactory, RelDataType type) { if (type instanceof RelRecordType) { return typeFactory.createStructType( Lists.transform(type.getFieldList(), a0 -> convertToSql(typeFactory, a0.getType())), type.getFieldNames()); } if (type instanceof JavaType) { SqlTypeName typeName = JavaToSqlTypeConversionRules.instance().lookup(((JavaType) type).getJavaClass()); // For unknown sql type names, return ANY sql type to make Calcite validation not fail. if (typeName == null) { typeName = SqlTypeName.ANY; } return typeFactory.createTypeWithNullability( typeFactory.createSqlType(typeName), type.isNullable()); } else { return JavaTypeFactoryImpl.toSql(typeFactory, type); } } }