You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cayenne.apache.org by Andrus Adamchik <an...@objectstyle.org> on 2017/03/14 12:06:47 UTC

M5 functions

I finally started using M5 expression functions (the non-aggregating kind). It is a very good start. We can now build expressions with the following functions:

upper(..)
lower(..)
trim(..)
substring(..)
length(..)
locate(..)
abs(..)
sqrt(..)
mod(..)
concat(..)
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP

Some feedback from a few hours playing with it...

1. The list above miraculously works in LinkRest. Cool! (except for date/time functions ... because of #3)

2. The new functions are case insensitive when parsed from String. The rest of the expression syntax is traditionally case sensitive. I suggest that we align functions (both scalar and aggregate) with the prior behavior. Corollary to that - functions like CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP should be changed to camel case (currentDate, currentTime, currentTimestamp). And while we are at it, we need to add empty parenthesis to the no-arg function String definitions ("currentDate()", etc.), so that they look like functions, not paths and don't clash with property namespace. No parenthesis is a JPA approach, we have no reason to mirror it anymore.

3. Date/time functions are unparsable. From what I can tell "someDate < CURRENT_DATE" is not recognized by expression parser now and can only be created via the API.

4. We need more date/time functions. I realize this can be a pretty long list. Perhaps we start with date/time parts extraction functions that I personally find very common (based on java.time.LocalDateTime terminology):

* second(..)
* minute(..)
* hour(..)
* dayOfMonth(..)
* dayOfWeek(..)
* dayOfYear(..)
* month(..)
* year(..)

Andrus