Yep, it was clear On Tue, Apr 24, 2018 at 4:57 PM Gail Badner <gbad...@redhat.com> wrote:
> I just want to make sure that what I'm suggesting is clear. > > datediff would be registered as a function: > > registerFunction( "datediff", > new StandardSQLFunction( "datediff", StandardBasicTypes.INTEGER ) > ); > > Then, to specify datediff with the keyword, day, as the first parameter > (rendered without quotes): > > final Expression<Integer> diff = cb.function("DATEDIFF", Integer.class, > cb.keyword("day"), ... ).as(Integer.class); > > > On Tue, Apr 24, 2018 at 1:43 PM, Steve Ebersole <st...@hibernate.org> > wrote: > >> I'd personally not like that approach. I think specific registrations >> (for extract and datediff) are better options >> >> >> On Tue, Apr 24, 2018, 1:18 PM Gail Badner <gbad...@redhat.com> wrote: >> >>> When I asked about whether JPA should support this in the future, I was >>> thinking along the lines of adding something like the following >>> to javax.persistence.criteria.CriteriaBuilder: >>> >>> Keyword keyword(String value); // rendered as a String without quotes >>> >>> or: >>> >>> Expression<String> literal(String value, encloseInQuotes); >>> >>> >>> On Tue, Apr 24, 2018 at 7:56 AM, Christian Beikov < >>> christian.bei...@gmail.com> wrote: >>> >>> > Maybe we should wait until it transitioned to Eclipse then? Or do you >>> > think it might make sense to start discussions already? >>> > >>> > The API could be String based by default but allow to "unwrap" to do >>> > something provider specific. If the providers model requires it, the >>> > String could be parsed by the provider. >>> > >>> > Imagine an API like the following >>> > >>> > interface SQLFunction { >>> > ExpressionType getType(FunctionContext ctx, List<ExpressionType> >>> > argumentTypes); >>> > Expression render(FunctionContext ctx, List<Expression> arguments); >>> > >>> > interface FunctionContext { >>> > ExpressionType getExpressionType(Class<?> javaType); >>> > Expression getExpression(String expressionString); >>> > <T> T unwrap(Class<T> clz); >>> > } >>> > >>> > interface ExpressionType { >>> > Class<?> getJavaType(); >>> > <T> T unwrap(Class<T> clz); >>> > } >>> > >>> > interface Expression { >>> > String getExpressionString(); >>> > <T> T unwrap(Class<T> clz); >>> > } >>> > } >>> > >>> > That's just a rough idea of how it could look. >>> > >>> > Mit freundlichen Grüßen, >>> > >>> ------------------------------------------------------------------------ >>> > *Christian Beikov* >>> > Am 24.04.2018 um 16:33 schrieb Steve Ebersole: >>> > > JPA is technically under the old JCP still AFAIK. So for now the >>> > > process would be the same it has always been. >>> > > >>> > > I just do not see how this would ever get agreed upon for a >>> > > standardized contract - it is so very dependent upon how the provider >>> > > models the query (SQM e.g.) versus the specific mechanism they use to >>> > > render it (SQL AST). >>> > > >>> > > >>> > > On Tue, Apr 24, 2018 at 9:29 AM Steve Ebersole <st...@hibernate.org >>> > > <mailto:st...@hibernate.org>> wrote: >>> > > >>> > > On Tue, Apr 24, 2018 at 8:45 AM Gail Badner <gbad...@redhat.com >>> > > <mailto:gbad...@redhat.com>> wrote: >>> > > >>> > > Yes, that should work with CriteriaQuery as well. It's a >>> > > reasonable >>> > > workaround. >>> > > >>> > > If JPA doesn't support this now, is it something that should >>> > > be supported >>> > > in the future? >>> > > >>> > > >>> > > The problem with defining support for this in the spec is that it >>> > > is relying on Hibernate's "SQL function registry" and its >>> > > `SQLFunction` contract. I seriously doubt we'd get all the EG >>> > > members to agree to some standardization of anything like a >>> > > `SQLFunction` contract. >>> > > >>> > > I think proposing to add additional functions to the spec as >>> > > "built-in" is probably more likely. I can especially see EXTRACT >>> > > being likely. Maybe DATEDIFF. Oracle for sure does not support >>> > > DATEDIFF, but it does support the EXTRACT-from-INTERVAL approach. >>> > > Anyone know offhand other databases which to not define >>> DATEIDFF? >>> > > >>> > > I personally think having DATEDIFF defined as "built-in" is the >>> > > best option as the provider can always map that to >>> > > EXTRACT-from-INTERVAL for Oracle, etal - its much harder to do >>> > > that by mapping EXTRACT-from-INTERVAL to DATEDIFF. >>> > > >>> > >>> > _______________________________________________ >>> > hibernate-dev mailing list >>> > hibernate-dev@lists.jboss.org >>> > https://lists.jboss.org/mailman/listinfo/hibernate-dev >>> > >>> _______________________________________________ >>> hibernate-dev mailing list >>> hibernate-dev@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/hibernate-dev >> >> > _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev