[#1972] Move MySQLFactory.md5() to Factory and simulate it for Oracle
This commit is contained in:
parent
d7aa549ab1
commit
c6468f6779
@ -89,6 +89,7 @@ import static org.jooq.impl.Factory.log;
|
||||
import static org.jooq.impl.Factory.lower;
|
||||
import static org.jooq.impl.Factory.lpad;
|
||||
import static org.jooq.impl.Factory.ltrim;
|
||||
import static org.jooq.impl.Factory.md5;
|
||||
import static org.jooq.impl.Factory.minute;
|
||||
import static org.jooq.impl.Factory.month;
|
||||
import static org.jooq.impl.Factory.nullif;
|
||||
@ -591,6 +592,34 @@ extends BaseTest<A, AP, B, S, B2S, BS, L, X, DATE, BOOL, D, T, U, I, IPK, T725,
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFunctionsOnStrings_HashFunctions() throws Exception {
|
||||
|
||||
// MD5
|
||||
switch (getDialect()) {
|
||||
case ASE:
|
||||
case CUBRID:
|
||||
case DB2:
|
||||
case DERBY:
|
||||
case FIREBIRD:
|
||||
case H2:
|
||||
case HSQLDB:
|
||||
case INGRES:
|
||||
case POSTGRES:
|
||||
case SQLITE:
|
||||
case SQLSERVER:
|
||||
case SYBASE:
|
||||
log.info("SKIPPING", "MD5 function test");
|
||||
break;
|
||||
|
||||
case MYSQL:
|
||||
case ORACLE:
|
||||
default:
|
||||
assertEquals("900150983cd24fb0d6963f7d28e17f72", create().select(md5("abc")).fetchOne(0));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFunctionsOnNumbers() throws Exception {
|
||||
|
||||
|
||||
@ -1588,6 +1588,11 @@ public abstract class jOOQAbstractTest<
|
||||
new FunctionTests(this).testFunctionsOnStrings_ASCII();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFunctionsOnStrings_HashFunctions() throws Exception {
|
||||
new FunctionTests(this).testFunctionsOnStrings_HashFunctions();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFunctionPosition() throws Exception {
|
||||
new FunctionTests(this).testFunctionPosition();
|
||||
|
||||
@ -3990,6 +3990,30 @@ public class Factory {
|
||||
return new Function<Integer>(Term.OCTET_LENGTH, SQLDataType.INTEGER, nullSafe(field));
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// XXX Hash function factory
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Get the MySQL-specific <code>MD5()</code> function
|
||||
* <p>
|
||||
* Other databases may simulate this, where available
|
||||
*/
|
||||
@Support({ MYSQL })
|
||||
public static Field<String> md5(String string) {
|
||||
return md5(val(string));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the MySQL-specific <code>MD5()</code> function
|
||||
* <p>
|
||||
* Other databases may simulate this, where available
|
||||
*/
|
||||
@Support({ MYSQL })
|
||||
public static Field<String> md5(Field<String> string) {
|
||||
return new MD5(nullSafe(string));
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// XXX Date and time functions
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
71
jOOQ/src/main/java/org/jooq/impl/MD5.java
Normal file
71
jOOQ/src/main/java/org/jooq/impl/MD5.java
Normal file
@ -0,0 +1,71 @@
|
||||
/**
|
||||
* Copyright (c) 2009-2012, Lukas Eder, lukas.eder@gmail.com
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed to you under the Apache License, Version 2.0
|
||||
* (the "License"); You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* . Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* . Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* . Neither the name "jOOQ" nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package org.jooq.impl;
|
||||
|
||||
import static org.jooq.impl.Factory.field;
|
||||
|
||||
import org.jooq.Configuration;
|
||||
import org.jooq.Field;
|
||||
|
||||
/**
|
||||
* @author Lukas Eder
|
||||
*/
|
||||
class MD5 extends AbstractFunction<String> {
|
||||
|
||||
/**
|
||||
* Generated UID
|
||||
*/
|
||||
private static final long serialVersionUID = -7273879239726265322L;
|
||||
|
||||
private final Field<String> argument;
|
||||
|
||||
MD5(Field<String> argument) {
|
||||
super("md5", SQLDataType.VARCHAR, argument);
|
||||
|
||||
this.argument = argument;
|
||||
}
|
||||
|
||||
@Override
|
||||
final Field<String> getFunction0(Configuration configuration) {
|
||||
switch (configuration.getDialect()) {
|
||||
case ORACLE:
|
||||
return field("{lower}({rawtohex}({sys}.{dbms_obfuscation_toolkit}.{md5}(input_string => {0})))", SQLDataType.VARCHAR, argument);
|
||||
case MYSQL:
|
||||
default:
|
||||
return field("{md5}({0})", SQLDataType.VARCHAR, argument);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -215,20 +215,6 @@ public class MySQLFactory extends Factory {
|
||||
return function("uncompressed_length", Integer.class, string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the MySQL-specific <code>MD5()</code> function
|
||||
*/
|
||||
public static Field<String> md5(String string) {
|
||||
return md5(val(string));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the MySQL-specific <code>MD5()</code> function
|
||||
*/
|
||||
public static Field<String> md5(Field<String> string) {
|
||||
return function("md5", String.class, string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the MySQL-specific <code>SHA1()</code> function
|
||||
*/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user