H2 User defined functions for MySQL.
I always use H2 for unit test instead of real MySQL(Docker), but some MySQL functions are not available in H2. So I create this project to define some functions for MySQL and make
unit test easy.
In you pom.xml add following dependency:
For H2 1.4.x, please use 1.0.0 version as following:
<dependency>
<groupId>org.mvnsearch</groupId>
<artifactId>h2-functions-4-mysql</artifactId>
<version>1.0.0</version>
</dependency>
For H2 2.0.x, please use 2.0.0 version as following:
<dependency>
<groupId>org.mvnsearch</groupId>
<artifactId>h2-functions-4-mysql</artifactId>
<version>2.0.0</version>
</dependency>
- Flyway with Spring Boot: automatically(classpath:db/migration/h2/V0_functions.sql), no configuration.
- Manual: Add following code in your application. datasource is h2 datasource.
H2FunctionsLoader.loadMysqlFunctions(dataSource);
- From H2 210, and you can use INIT parameter to load functions automatically.
String jdbcUrl = "jdbc:h2:mem:sample;INIT=RUNSCRIPT FROM 'classpath:db/migration/h2/V0_functions.sql'";
String jdbcUrl2 = "jdbc:h2:mem:sample;INIT=RUNSCRIPT FROM 'classpath:db/migration/h2/V0_functions.sql';RUNSCRIPT FROM 'classpath:your_script.sql'";
N: not available, Y: same, A: available
MySQL |
H2 |
Status |
ABS |
ABS |
Y |
ACOS |
ACOS |
Y |
ADDDATE |
|
A |
ADDTIME |
|
A |
AES_DECRYPT |
|
A |
AES_ENCRYPT |
|
A |
ANY_VALUE |
|
|
ASCII |
ASCII |
Y |
ASIN |
ASIN |
Y |
ATAN |
ATAN |
Y |
ATAN2 |
ATAN2 |
Y |
AVG |
AVG |
Y |
BENCHMARK |
|
|
BIN |
|
A |
BIN_TO_UUID |
|
|
BIT_AND |
BIT_AND |
Y |
BIT_COUNT |
|
N |
BIT_LENGTH |
BIT_LENGTH |
Y |
BIT_OR |
BIT_OR |
Y |
BIT_XOR |
|
|
CAST |
CAST |
Y |
CEIL |
CEIL |
Y |
CEILING |
CEILING |
Y |
CHAR |
CHAR |
Y |
CHAR_LENGTH |
CHAR_LENGTH |
Y |
CHARACTER_LENGTH |
CHARACTER_LENGTH |
Y |
CHARSET |
|
A |
COALESCE |
COALESCE |
Y |
COERCIBILITY |
|
|
COLLATION |
|
|
COMPRESS |
COMPRESS |
Y |
CONCAT |
CONCAT |
Y |
CONCAT_WS |
CONCAT_WS |
Y |
CONNECTION_ID |
|
A |
CONV |
|
A |
CONVERT |
CONVERT |
Y |
CONVERT_TZ |
|
A |
COS |
COS |
Y |
COT |
COT |
Y |
COUNT |
COUNT |
Y |
COUNT |
COUNT |
Y |
CRC32 |
|
A |
CREATE_DH_PARAMETERS |
|
|
CREATE_DIGEST |
|
A |
CUME_DIST |
|
|
CURDATE |
CURDATE |
Y |
CURRENT_DATE |
CURRENT_DATE |
Y |
CURRENT_ROLE |
|
A |
CURRENT_TIME |
CURRENT_TIME |
Y |
CURRENT_TIMESTAMP |
CURRENT_TIMESTAMP |
Y |
CURRENT_USER |
|
A |
CURTIME |
CURTIME |
Y |
DATABASE |
DATABASE |
Y |
DATE |
|
A |
DATE_ADD |
|
A |
DATE_FORMAT |
|
A |
DATE_SUB |
|
A |
DATEDIFF |
DATEDIFF |
Y |
DAY |
DAY |
Y |
DAYNAME |
DAYNAME |
Y |
DAYOFMONTH |
DAYOFMONTH |
Y |
DAYOFWEEK |
DAYOFWEEK |
Y |
DAYOFYEAR |
DAYOFYEAR |
Y |
DECODE |
DECODE |
Y |
DEFAULT |
|
|
DEGREES |
DEGREES |
Y |
DENSE_RANK |
|
|
DES_DECRYPT |
|
Deprecated |
DES_ENCRYPT |
|
Deprecated |
ELT |
|
|
ENCODE |
|
Deprecated |
ENCRYPT |
ENCRYPT |
Y |
EXP |
EXP |
Y |
EXPORT_SET |
|
|
EXTRACT |
EXTRACT |
Y |
ExtractValue |
|
|
FIELD |
|
A |
FIND_IN_SET |
|
A |
FIRST_VALUE |
|
|
FLOOR |
FLOOR |
Y |
FORMAT |
|
A |
FOUND_ROWS |
|
|
FROM_BASE64 |
|
A |
FROM_DAYS |
|
A |
FROM_UNIXTIME |
|
A |
GeomCollection |
|
|
GeometryCollection |
|
|
GET_DD_COLUMN_PRIVILEGES |
|
|
GET_DD_CREATE_OPTIONS |
|
|
GET_DD_INDEX_SUB_PART_LENGTH |
|
|
GET_FORMAT |
|
|
GET_LOCK |
|
|
GREATEST |
GREATEST |
Y |
GROUP_CONCAT |
GROUP_CONCAT |
Y |
GTID_SUBSET |
|
|
GTID_SUBTRACT |
|
|
HEX |
|
A |
HOUR |
HOUR |
Y |
ICU_VERSION |
|
|
IF |
|
N |
IFNULL |
IFNULL |
Y |
INET_ATON |
|
|
INET_NTOA |
|
|
INET6_ATON |
|
|
INET6_NTOA |
|
|
INSERT |
INSERT |
Y |
INSTR |
INSTR |
Y |
INTERVAL |
|
|
IS_FREE_LOCK |
|
|
IS_IPV4 |
|
A |
IS_IPV4_COMPAT |
|
|
IS_IPV4_MAPPED |
|
|
IS_IPV6 |
|
A |
IS_USED_LOCK |
|
|
IS_UUID |
|
A |
ISNULL |
|
|
LAG |
|
|
LAST_INSERT_ID |
LAST_INSERT_ID |
Y |
LAST_VALUE |
|
|
LCASE |
LCASE |
Y |
LEAD |
|
N |
LEAST |
LEAST |
Y |
LEFT |
LEFT |
Y |
LENGTH |
LENGTH |
Y |
LineString |
|
|
LN |
LN |
Y |
LOAD_FILE |
|
|
LOCALTIME |
|
A |
LOCALTIMESTAMP |
|
A |
LOCATE |
LOCATE |
Y |
LOG |
LOG |
Y |
LOG10 |
LOG10 |
Y |
LOG2 |
|
N |
LOWER |
LOWER |
Y |
LPAD |
LPAD |
Y |
LTRIM |
LTRIM |
Y |
MAKE_SET |
|
|
MAKEDATE |
|
A |
MAKETIME |
|
Y |
MASTER_POS_WAIT |
|
N |
MAX |
MAX |
Y |
MBRContains |
|
N |
MBRCoveredBy |
|
N |
MBRCovers |
|
N |
MBRDisjoint |
|
N |
MBREquals |
|
N |
MBRIntersects |
|
N |
MBROverlaps |
|
N |
MBRTouches |
|
N |
MBRWithin |
|
N |
MD5 |
|
A |
MICROSECOND |
|
A |
MID |
|
A |
MIN |
MIN |
Y |
MINUTE |
MINUTE |
Y |
MOD |
MOD |
Y |
MONTH |
MONTH |
Y |
MONTHNAME |
MONTHNAME |
Y |
MultiLineString |
|
N |
MultiPoint |
|
|
MultiPolygon |
|
|
NAME_CONST |
|
|
NOW |
|
A |
NTH_VALUE |
|
|
NTILE |
|
|
NULLIF |
NULLIF |
Y |
OCT |
|
|
OCTET_LENGTH |
OCTET_LENGTH |
Y |
ORD |
|
A |
PASSWORD |
|
A |
PERCENT_RANK |
|
N |
PERIOD_ADD |
|
A |
PERIOD_DIFF |
|
A |
PI |
PI |
Y |
Point |
|
|
Polygon |
|
|
POSITION |
POSITION |
Y |
POW |
|
A |
POWER |
POWER |
Y |
QUARTER |
QUARTER |
Y |
QUOTE |
|
A |
RADIANS |
RADIANS |
Y |
RAND |
RAND |
Y |
RANDOM_BYTES |
|
A |
RANK |
|
|
REGEXP_INSTR |
|
|
REGEXP_LIKE |
REGEXP_LIKE |
Y |
REGEXP_REPLACE |
REGEXP_REPLACE |
Y |
REGEXP_SUBSTR |
|
|
RELEASE_ALL_LOCKS |
|
|
RELEASE_LOCK |
|
|
REPEAT |
REPEAT |
Y |
REPLACE |
REPLACE |
Y |
REVERSE |
|
A |
RIGHT |
RIGHT |
Y |
ROLES_GRAPHML |
|
|
ROUND |
ROUND |
Y |
ROW_COUNT |
|
|
ROW_NUMBER |
|
|
RPAD |
RPAD |
Y |
RTRIM |
RTRIM |
Y |
SCHEMA |
SCHEMA |
Y |
SEC_TO_TIME |
|
A |
SECOND |
SECOND |
Y |
SESSION_USER |
|
A |
SHA1 |
|
A |
SHA2 |
|
A |
SIGN |
SIGN |
Y |
SIN |
SIN |
Y |
SLEEP |
|
A |
SOUNDEX |
SOUNDEX |
Y |
SPACE |
SPACE |
Y |
SQRT |
SQRT |
Y |
STATEMENT_DIGEST |
|
|
STATEMENT_DIGEST_TEXT |
|
|
STD |
|
|
STDDEV |
|
|
STDDEV_POP |
STDDEV_POP |
Y |
STDDEV_SAMP |
STDDEV_SAMP |
Y |
STR_TO_DATE |
|
A |
STRCMP |
|
A |
SUBDATE |
|
A |
SUBSTR |
SUBSTR |
Y |
SUBSTRING |
SUBSTRING |
Y |
SUBSTRING_INDEX |
|
A |
SUBTIME |
|
A |
SUM |
SUM |
Y |
SYSDATE |
SYSDATE |
Y |
SYSTEM_USER |
|
A |
TAN |
TAN |
Y |
TIME |
|
A |
TIME_FORMAT |
|
A |
TIME_TO_SEC |
|
A |
TIMEDIFF |
|
A |
TIMESTAMP |
|
A |
TIMESTAMPADD |
|
|
TIMESTAMPDIFF |
|
|
TO_BASE64 |
|
A |
TO_DAYS |
|
A |
TO_SECONDS |
|
A |
TRIM |
TRIM |
Y |
TRUNCATE |
TRUNCATE |
Y |
UCASE |
|
A |
UNCOMPRESS |
|
|
UNCOMPRESSED_LENGTH |
|
|
UNHEX |
|
A |
UNIX_TIMESTAMP |
|
A |
UpdateXML |
|
|
UPPER |
UPPER |
Y |
USER |
USER |
Y |
UTC_DATE |
|
A |
UTC_TIME |
|
A |
UTC_TIMESTAMP |
|
A |
UUID |
UUID |
A |
UUID_SHORT |
|
A |
UUID_TO_BIN |
|
|
VALIDATE_PASSWORD_STRENGTH |
|
|
VALUES |
|
|
VAR_POP |
VAR_POP |
Y |
VAR_SAMP |
VAR_SAMP |
Y |
VARIANCE |
|
|
VERSION |
|
A |
WAIT_FOR_EXECUTED_GTID_SET |
|
|
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS |
|
|
WEEK |
WEEK |
Y |
WEEKDAY |
|
A |
WEEKOFYEAR |
|
A |
WEIGHT_STRING |
|
|
YEAR |
YEAR |
Y |
YEARWEEK |
|
A |
### datasource
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:public;MODE=MYSQL;DATABASE_TO_UPPER=false;INIT=CREATE SCHEMA IF NOT EXISTS public
spring.datasource.username=sa