/** * Constructs a non-aggregate function group with the given name and given default function. * * @param name The function name * @param defaultFunction The default function to use when no specific function for a DBMS is available */ public JpqlFunctionGroup(String name, JpqlFunction defaultFunction) { this(name, false); add(null, defaultFunction); }
private static Set<String> resolveAggregateFunctions(Map<String, JpqlFunctionGroup> functions) { Set<String> aggregateFunctions = new HashSet<String>(); for (Map.Entry<String, JpqlFunctionGroup> entry : functions.entrySet()) { if (entry.getValue().isAggregate()) { aggregateFunctions.add(entry.getKey().toLowerCase()); } } // add standard JPQL aggregate functions aggregateFunctions.add("sum"); aggregateFunctions.add("min"); aggregateFunctions.add("max"); aggregateFunctions.add("avg"); aggregateFunctions.add("count"); return aggregateFunctions; }
@Override public CriteriaBuilderConfiguration registerFunction(JpqlFunctionGroup jpqlFunctionGroup) { String functionName = jpqlFunctionGroup.getName().toLowerCase(); functions.put(functionName, jpqlFunctionGroup); return this; }
String functionName = functionEntry.getKey(); JpqlFunctionGroup dbmsFunctionGroup = functionEntry.getValue(); JpqlFunction function = dbmsFunctionGroup.get(dbms); if (function == null && !dbmsFunctionGroup.contains(dbms)) { function = dbmsFunctionGroup.get(null); exprFactory.registerMethod(null, functionName, new DataNucleusJpqlFunctionAdapter(function, dbmsFunctionGroup.isAggregate()));
JpqlFunctionGroup jpqlFunctionGroup = new JpqlFunctionGroup(CountStarFunction.FUNCTION_NAME, true); jpqlFunctionGroup.add(null, new CountStarFunction()); dbmsFunctions.put(CountStarFunction.FUNCTION_NAME, jpqlFunctionGroup); String functionName = functionEntry.getKey(); JpqlFunctionGroup dbmsFunctionMap = functionEntry.getValue(); JpqlFunction function = dbmsFunctionMap.get(dbms); function = dbmsFunctionMap.get(null);
jpqlFunctionGroup = new JpqlFunctionGroup("limit", false); jpqlFunctionGroup.add(null, new LimitFunction(dbmsDialects.get(null))); jpqlFunctionGroup.add("mysql", new LimitFunction(dbmsDialects.get("mysql"))); jpqlFunctionGroup.add("oracle", new LimitFunction(dbmsDialects.get("oracle"))); jpqlFunctionGroup.add("db2", new LimitFunction(dbmsDialects.get("db2"))); jpqlFunctionGroup.add("sybase", null); // Does not support limit jpqlFunctionGroup.add("microsoft", new LimitFunction(dbmsDialects.get("microsoft"))); registerFunction(jpqlFunctionGroup); jpqlFunctionGroup = new JpqlFunctionGroup(PagePositionFunction.FUNCTION_NAME, false); jpqlFunctionGroup.add(null, new PagePositionFunction()); jpqlFunctionGroup.add("mysql", new MySQLPagePositionFunction()); jpqlFunctionGroup.add("oracle", new OraclePagePositionFunction()); jpqlFunctionGroup.add("sybase", new TransactSQLPagePositionFunction()); jpqlFunctionGroup.add("microsoft", new TransactSQLPagePositionFunction()); registerFunction(jpqlFunctionGroup); jpqlFunctionGroup = new JpqlFunctionGroup(EntityFunction.FUNCTION_NAME, false); jpqlFunctionGroup.add(null, new EntityFunction()); registerFunction(jpqlFunctionGroup); jpqlFunctionGroup = new JpqlFunctionGroup("set_" + setType.name().toLowerCase(), false); jpqlFunctionGroup.add(dbmsDialectEntry.getKey(), new SetFunction(setType, dbmsDialectEntry.getValue())); registerFunction(new JpqlFunctionGroup("cast_boolean")); registerFunction(new JpqlFunctionGroup("cast_byte")); registerFunction(new JpqlFunctionGroup("cast_short")); registerFunction(new JpqlFunctionGroup("cast_integer"));
@Override public CriteriaBuilderConfiguration registerNamedType(String name, Class<?> type) { treatTypes.put(name, type); registerFunction(new JpqlFunctionGroup("treat_" + name.toLowerCase(), new TreatFunction(type))); return this; }
String functionName = functionEntry.getKey(); JpqlFunctionGroup dbmsFunctionGroup = functionEntry.getValue(); JpqlFunction function = dbmsFunctionGroup.get(dbms); if (function == null && !dbmsFunctionGroup.contains(dbms)) { function = dbmsFunctionGroup.get(null); exprFactory.registerMethod(null, functionName, new DataNucleusJpqlFunctionAdapter(function, dbmsFunctionGroup.isAggregate()));
JpqlFunctionGroup jpqlFunctionGroup = new JpqlFunctionGroup(CountStarFunction.FUNCTION_NAME, true); jpqlFunctionGroup.add(null, new CountStarFunction()); dbmsFunctions.put(CountStarFunction.FUNCTION_NAME, jpqlFunctionGroup); String functionName = functionEntry.getKey(); JpqlFunctionGroup dbmsFunctionMap = functionEntry.getValue(); JpqlFunction function = dbmsFunctionMap.get(dbms); function = dbmsFunctionMap.get(null);
@Override protected CriteriaBuilderConfiguration configure(CriteriaBuilderConfiguration config) { config = super.configure(config); config.registerFunction(new JpqlFunctionGroup("zero", new ZeroFunction())); config.registerFunction(new JpqlFunctionGroup("concatenate", new ConcatenateFunction())); config.registerMacro("prefix", new PrefixJpqlMacro()); dbms = config.getEntityManagerIntegrators().get(0).getDbms(em.getEntityManagerFactory()); if ("postgresql".equals(dbms)) { config.setProperty("com.blazebit.persistence.returning_clause_case_sensitive", "false"); } return config; }
JpqlFunction function = dbmsFunctionGroup.get(dbms); if (function == null && !dbmsFunctionGroup.contains(dbms)) { function = dbmsFunctionGroup.get(null); SQLMethod method = new DataNucleusJpqlFunctionAdapter(function, dbmsFunctionGroup.isAggregate()); Set<Object> methodKeys = fieldGet("methodNamesSupported", exprFactory, VERSION); String functionName = functionEntry.getKey(); JpqlFunctionGroup dbmsFunctionGroup = functionEntry.getValue(); JpqlFunction function = dbmsFunctionGroup.get(dbms); if (function == null && !dbmsFunctionGroup.contains(dbms)) { function = dbmsFunctionGroup.get(null); exprFactory.registerMethod(null, functionName, new DataNucleusJpqlFunctionAdapter(function, dbmsFunctionGroup.isAggregate()), true);
@Override protected CriteriaBuilderConfiguration configure(CriteriaBuilderConfiguration config) { config = super.configure(config); config.registerFunction(new JpqlFunctionGroup("zero", new ZeroFunction())); config.registerFunction(new JpqlFunctionGroup("concatenate", new ConcatenateFunction())); config.registerMacro("prefix", new PrefixJpqlMacro()); dbms = config.getEntityManagerIntegrators().get(0).getDbms(em.getEntityManagerFactory()); if ("postgresql".equals(dbms)) { config.setProperty("com.blazebit.persistence.returning_clause_case_sensitive", "false"); } return config; }
/** * Constructs a non-aggregate function group with the given name and given default function. * * @param name The function name * @param defaultFunction The default function to use when no specific function for a DBMS is available */ public JpqlFunctionGroup(String name, JpqlFunction defaultFunction) { this(name, false); add(null, defaultFunction); }