public NeedRewriteOnlyMeasureType(String funcName, List<MeasureTypeFactory<?>> factory) { for (MeasureTypeFactory<?> f : factory) { boolean b = f.createMeasureType(funcName, null).needRewrite(); if (needRewrite == null) needRewrite = Boolean.valueOf(b); else if (needRewrite.booleanValue() != b) throw new IllegalStateException( "needRewrite() of factorys " + factory + " does not have consensus"); } }
public static MeasureType<?> create(String funcName, DataType dataType) { funcName = funcName.toUpperCase(Locale.ROOT); List<MeasureTypeFactory<?>> factory = factories.get(funcName); if (factory == null) factory = defaultFactory; // a special case where in early stage of sql parsing, the data type is unknown; only needRewrite() is required at that stage if (dataType == null) { return new NeedRewriteOnlyMeasureType(funcName, factory); } // the normal case, only one factory for a function if (factory.size() == 1) { return factory.get(0).createMeasureType(funcName, dataType); } // sometimes multiple factories are registered for the same function, then data types must tell them apart for (MeasureTypeFactory<?> f : factory) { if (f.getAggrDataTypeName().equals(dataType.getName())) return f.createMeasureType(funcName, dataType); } throw new IllegalStateException( "failed to create MeasureType with funcName: " + funcName + ", dataType: " + dataType); }
private static void registerUDAF(MeasureTypeFactory<?> factory) { MeasureType<?> type = factory.createMeasureType(factory.getAggrFunctionName(), DataType.getType(factory.getAggrDataTypeName())); Map<String, Class<?>> udafs = type.getRewriteCalciteAggrFunctions(); if (type.needRewrite() == false || udafs == null) return; for (String udaf : udafs.keySet()) { udaf = udaf.toUpperCase(Locale.ROOT); if (udaf.equals(FunctionDesc.FUNC_COUNT_DISTINCT)) continue; // skip built-in function if (udafFactories.containsKey(udaf)) throw new IllegalStateException( "UDAF '" + udaf + "' was dup declared by " + udafFactories.get(udaf) + " and " + factory); udafFactories.put(udaf, factory); udafMap.put(udaf, udafs.get(udaf)); } }
public NeedRewriteOnlyMeasureType(String funcName, List<MeasureTypeFactory<?>> factory) { for (MeasureTypeFactory<?> f : factory) { boolean b = f.createMeasureType(funcName, null).needRewrite(); if (needRewrite == null) needRewrite = Boolean.valueOf(b); else if (needRewrite.booleanValue() != b) throw new IllegalStateException( "needRewrite() of factorys " + factory + " does not have consensus"); } }
public NeedRewriteOnlyMeasureType(String funcName, List<MeasureTypeFactory<?>> factory) { for (MeasureTypeFactory<?> f : factory) { boolean b = f.createMeasureType(funcName, null).needRewrite(); if (needRewrite == null) needRewrite = Boolean.valueOf(b); else if (needRewrite.booleanValue() != b) throw new IllegalStateException("needRewrite() of factorys " + factory + " does not have consensus"); } }
public static MeasureType<?> create(String funcName, DataType dataType) { funcName = funcName.toUpperCase(); List<MeasureTypeFactory<?>> factory = factories.get(funcName); if (factory == null) factory = defaultFactory; // a special case where in early stage of sql parsing, the data type is unknown; only needRewrite() is required at that stage if (dataType == null) { return new NeedRewriteOnlyMeasureType(funcName, factory); } // the normal case, only one factory for a function if (factory.size() == 1) { return factory.get(0).createMeasureType(funcName, dataType); } // sometimes multiple factories are registered for the same function, then data types must tell them apart for (MeasureTypeFactory<?> f : factory) { if (f.getAggrDataTypeName().equals(dataType.getName())) return f.createMeasureType(funcName, dataType); } throw new IllegalStateException(); };
public static MeasureType<?> create(String funcName, DataType dataType) { funcName = funcName.toUpperCase(Locale.ROOT); List<MeasureTypeFactory<?>> factory = factories.get(funcName); if (factory == null) factory = defaultFactory; // a special case where in early stage of sql parsing, the data type is unknown; only needRewrite() is required at that stage if (dataType == null) { return new NeedRewriteOnlyMeasureType(funcName, factory); } // the normal case, only one factory for a function if (factory.size() == 1) { return factory.get(0).createMeasureType(funcName, dataType); } // sometimes multiple factories are registered for the same function, then data types must tell them apart for (MeasureTypeFactory<?> f : factory) { if (f.getAggrDataTypeName().equals(dataType.getName())) return f.createMeasureType(funcName, dataType); } throw new IllegalStateException( "failed to create MeasureType with funcName: " + funcName + ", dataType: " + dataType); }
private static void registerUDAF(MeasureTypeFactory<?> factory) { MeasureType<?> type = factory.createMeasureType(factory.getAggrFunctionName(), DataType.getType(factory.getAggrDataTypeName())); Map<String, Class<?>> udafs = type.getRewriteCalciteAggrFunctions(); if (type.needRewrite() == false || udafs == null) return; for (String udaf : udafs.keySet()) { udaf = udaf.toUpperCase(Locale.ROOT); if (udaf.equals(FunctionDesc.FUNC_COUNT_DISTINCT)) continue; // skip built-in function if (udafFactories.containsKey(udaf)) throw new IllegalStateException( "UDAF '" + udaf + "' was dup declared by " + udafFactories.get(udaf) + " and " + factory); udafFactories.put(udaf, factory); udafMap.put(udaf, udafs.get(udaf)); } }