In this JIRA, we will create some sub-tasks for adding specific scalar functions such as mathematical-function LOG, date-functions
DATEADD, string-functions LPAD, etc.
How to contribute a built-in scalar function
Thank you very much for contributing a built-in function. In order to make sure your contributions are in a good direction, it is recommended to read the following instructions.
- Investigate the behavior of the function that you are going to contribute in major DBMSs. This is very important since we have to understand the exact semantics of the function.
- It is recommended to add function for both SQL and table-API (Java and Scala).
- For every scalar function, add corresponding docs which should include a SQL, a Java and a Scala version in ./docs/dev/table/functions.md. Make sure your description of the function is accurate. Please do not simply copy documentation from other projects, especially if the projects are not Apache licensed.
- Take overflow, NullPointerException and other exceptions into consideration.
- Add unit tests for every new function and its supported APIs. Have a look at ScalarFunctionsTest, SqlExpressionTest, ScalaFunctionsValidationTest, etc. for how to implement function tests.
Welcome anybody to add the sub-task about standard database scalar function.
Note: Usually, adding a runtime function to ScalarFunctions.scala is sufficient. However, sometimes it makes sense to implement a CallGenerator for FunctionGenerator to leverage object reuse. E.g., HashCalcCallGen creates a MessageDigest only once for SHA2 if the parameters are literals.