MySQL函数';十六进制';在H2/Derby/HSQL中
我正在尝试使用内存中的数据库对sql查询进行单元测试。查询使用MySQL内置函数“hex”和“unhex”(因为它们将二进制数据写入数据库)。事实证明,这3个momery DB解决方案都不支持“hex”函数,我无法测试它们 我的问题-如果不将十六进制转换为代码,而不是直接在查询中使用“十六进制”函数,是否就无法测试查询MySQL函数';十六进制';在H2/Derby/HSQL中,mysql,derby,hsqldb,in-memory-database,h2db,Mysql,Derby,Hsqldb,In Memory Database,H2db,我正在尝试使用内存中的数据库对sql查询进行单元测试。查询使用MySQL内置函数“hex”和“unhex”(因为它们将二进制数据写入数据库)。事实证明,这3个momery DB解决方案都不支持“hex”函数,我无法测试它们 我的问题-如果不将十六进制转换为代码,而不是直接在查询中使用“十六进制”函数,是否就无法测试查询 另外,我知道内存中的数据库并不代表真正的数据库行为,但查询非常简单——插入和选择。HSQLDB允许您定义自己的函数。如果没有测试实际的十六进制或字符串返回值,可以创建模拟函数he
另外,我知道内存中的数据库并不代表真正的数据库行为,但查询非常简单——插入和选择。HSQLDB允许您定义自己的函数。如果没有测试实际的十六进制或字符串返回值,可以创建模拟函数hex和UNHEX来返回输入。例如:
CREATE FUNCTION UNHEX(S VARCHAR(1000)) RETURNS VARCHAR(1000)
BEGIN ATOMIC
RETURN S;
END;
如果希望函数返回实际转换的值,可以扩展函数以执行转换。在这种情况下,您可以使用内置函数提取ASCII代码,以及任何现有的静态Java方法:
更新:版本2.4.1的HSQLDB中添加了对这两个函数的支持。如何定义您自己的函数:@BryanPendleton我根据您的建议尝试使用Derby,但它不支持
limit
关键字。HSQLDB离我想要做的事情“更近”。谢谢谢谢我花了一些时间将模式翻译成HSQLDB,并从java创建SQL函数,但它成功了!