mirror of
https://github.com/querydsl/querydsl.git
synced 2026-06-16 21:01:10 +08:00
#177 added lpad and rpad
This commit is contained in:
parent
b8c3f32147
commit
97f90e7f3d
@ -222,6 +222,10 @@ public final class Ops {
|
||||
public static final class StringOps {
|
||||
public static final Operator<String> LTRIM = new OperatorImpl<String>("LTRIM",String.class);
|
||||
public static final Operator<String> RTRIM = new OperatorImpl<String>("RTRIM",String.class);
|
||||
public static final Operator<String> LPAD = new OperatorImpl<String>("LPAD",String.class, Integer.class);
|
||||
public static final Operator<String> RPAD = new OperatorImpl<String>("RPAD",String.class, Integer.class);
|
||||
public static final Operator<String> LPAD2 = new OperatorImpl<String>("LPAD2",String.class, Integer.class, Character.class);
|
||||
public static final Operator<String> RPAD2 = new OperatorImpl<String>("RPAD2",String.class, Integer.class, Character.class);
|
||||
public static final Operator<String> SPACE = new OperatorImpl<String>("SPACE",Integer.class);
|
||||
public static final Operator<String[]> SPLIT = new OperatorImpl<String[]>("SPLIT",STRING_X_2);
|
||||
public static final Operator<Number> LAST_INDEX_2ARGS = new OperatorImpl<Number>("LAST_INDEX2");
|
||||
|
||||
@ -131,6 +131,10 @@ public class Templates {
|
||||
add(Ops.StringOps.LAST_INDEX_2ARGS, "lastIndexOf({0},{1},{2})");
|
||||
add(Ops.StringOps.SPLIT, "split({0},{1})");
|
||||
add(Ops.StringOps.POSITION, "position({0},{1})");
|
||||
add(Ops.StringOps.LPAD, "lpad({0},{1})");
|
||||
add(Ops.StringOps.RPAD, "rpad({0},{1})");
|
||||
add(Ops.StringOps.LPAD2, "lpad({0},{1},'{2s}')");
|
||||
add(Ops.StringOps.RPAD2, "rpad({0},{1},'{2s}')");
|
||||
|
||||
// date time
|
||||
add(Ops.DateTimeOps.SYSDATE, "sysdate");
|
||||
|
||||
@ -59,6 +59,86 @@ public final class StringExpressions {
|
||||
return NumberOperation.create(Integer.class, Ops.StringOps.POSITION, in, ConstantImpl.create(search));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param in
|
||||
* @param length
|
||||
* @return
|
||||
*/
|
||||
public static StringExpression lpad(Expression<String> in, int length) {
|
||||
return StringOperation.create(Ops.StringOps.LPAD, in, ConstantImpl.create(length));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param in
|
||||
* @param length
|
||||
* @return
|
||||
*/
|
||||
public static StringExpression lpad(Expression<String> in, Expression<Integer> length) {
|
||||
return StringOperation.create(Ops.StringOps.LPAD, in, length);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param in
|
||||
* @param length
|
||||
* @return
|
||||
*/
|
||||
public static StringExpression rpad(Expression<String> in, int length) {
|
||||
return StringOperation.create(Ops.StringOps.RPAD, in, ConstantImpl.create(length));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param in
|
||||
* @param length
|
||||
* @return
|
||||
*/
|
||||
public static StringExpression rpad(Expression<String> in, Expression<Integer> length) {
|
||||
return StringOperation.create(Ops.StringOps.RPAD, in, length);
|
||||
}
|
||||
|
||||
private StringExpressions() {}
|
||||
|
||||
/**
|
||||
* @param in
|
||||
* @param length
|
||||
* @param c
|
||||
* @return
|
||||
*/
|
||||
public static StringExpression lpad(Expression<String> in, NumberExpression<Integer> length, char c) {
|
||||
return StringOperation.create(Ops.StringOps.LPAD2, in, length, ConstantImpl.create(c));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param in
|
||||
* @param length
|
||||
* @param c
|
||||
* @return
|
||||
*/
|
||||
public static StringExpression lpad(Expression<String> in, int length, char c) {
|
||||
return StringOperation.create(Ops.StringOps.LPAD2, in, ConstantImpl.create(length), ConstantImpl.create(c));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param in
|
||||
* @param length
|
||||
* @param c
|
||||
* @return
|
||||
*/
|
||||
public static StringExpression rpad(Expression<String> in, NumberExpression<Integer> length, char c) {
|
||||
return StringOperation.create(Ops.StringOps.RPAD2, in, length, ConstantImpl.create(c));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param in
|
||||
* @param length
|
||||
* @param c
|
||||
* @return
|
||||
*/
|
||||
public static StringExpression rpad(Expression<String> in, int length, char c) {
|
||||
return StringOperation.create(Ops.StringOps.RPAD2, in, ConstantImpl.create(length), ConstantImpl.create(c));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -318,13 +318,13 @@ public class ExpressivityTest {
|
||||
//Field<String> lower()
|
||||
str.lower();
|
||||
//Field<String> lpad(Field<? extends Number> length)
|
||||
|
||||
StringExpressions.lpad(str, num);
|
||||
//Field<String> lpad(Field<? extends Number> length, Field<String> character)
|
||||
|
||||
StringExpressions.lpad(str, num, '!');
|
||||
//Field<String> lpad(int length)
|
||||
|
||||
StringExpressions.lpad(str, 10);
|
||||
//Field<String> lpad(int length, char character)
|
||||
|
||||
StringExpressions.lpad(str, 10, '!');
|
||||
//Field<String> ltrim()
|
||||
StringExpressions.ltrim(str);
|
||||
//Field<T> max()
|
||||
@ -428,13 +428,13 @@ public class ExpressivityTest {
|
||||
//Field<T> round(int decimals)
|
||||
|
||||
//Field<String> rpad(Field<? extends Number> length)
|
||||
|
||||
StringExpressions.rpad(str, num);
|
||||
//Field<String> rpad(Field<? extends Number> length, Field<String> character)
|
||||
|
||||
StringExpressions.rpad(str, num, '!');
|
||||
//Field<String> rpad(int length)
|
||||
|
||||
StringExpressions.rpad(str, 10);
|
||||
//Field<String> rpad(int length, char character)
|
||||
|
||||
StringExpressions.rpad(str, 10, '!');
|
||||
//Field<String> rtrim()
|
||||
StringExpressions.rtrim(str);
|
||||
// shl (bitwise shift left)
|
||||
|
||||
@ -60,7 +60,6 @@ public class DerbyTemplates extends SQLTemplates {
|
||||
add(Ops.MathOps.LN, "log({0})");
|
||||
add(Ops.MathOps.LOG, "(log({0}) / log({1}))");
|
||||
add(Ops.MathOps.COTH, "(exp({0} * 2) + 1) / (exp({0} * 2) - 1)");
|
||||
|
||||
}
|
||||
|
||||
protected void serializeModifiers(QueryMetadata metadata, SerializationContext context) {
|
||||
|
||||
@ -50,6 +50,9 @@ public class MySQLTemplates extends SQLTemplates {
|
||||
add(Ops.CONCAT, "concat({0}, {1})",0);
|
||||
add(Ops.DateTimeOps.YEAR_MONTH, "extract(year_month from {0})");
|
||||
|
||||
add(Ops.StringOps.LPAD, "lpad({0},{1},' ')");
|
||||
add(Ops.StringOps.RPAD, "rpad({0},{1},' ')");
|
||||
|
||||
// like without escape
|
||||
if (escape == '\\') {
|
||||
add(Ops.LIKE, "{0} like {1}");
|
||||
|
||||
@ -52,6 +52,9 @@ public class SQLiteTemplates extends SQLTemplates {
|
||||
|
||||
add(Ops.MathOps.LN, "log({0})");
|
||||
add(Ops.MathOps.LOG, "(log({0}) / log({1}))");
|
||||
|
||||
// add(Ops.StringOps.LPAD, "concat(repeat(' ', {1} - length({0})), {0})");
|
||||
// add(Ops.StringOps.RPAD, "concat({0}, repeat(' ', {1} - length({0})))");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -64,6 +64,7 @@ import com.mysema.query.sql.domain.QSurvey;
|
||||
import com.mysema.query.support.Expressions;
|
||||
import com.mysema.query.types.ArrayConstructorExpression;
|
||||
import com.mysema.query.types.Concatenation;
|
||||
import com.mysema.query.types.ConstantImpl;
|
||||
import com.mysema.query.types.ConstructorExpression;
|
||||
import com.mysema.query.types.Expression;
|
||||
import com.mysema.query.types.MappingProjection;
|
||||
@ -715,6 +716,20 @@ public abstract class SelectBaseTest extends AbstractBaseTest{
|
||||
assertEquals(Integer.valueOf(3), unique(StringExpressions.position(str, "a")));
|
||||
assertEquals(" abcd", unique(StringExpressions.rtrim(str)));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ExcludeIn({SQLITE, DERBY})
|
||||
public void LPad() {
|
||||
assertEquals(" ab", unique(StringExpressions.lpad(ConstantImpl.create("ab"), 4)));
|
||||
assertEquals("!!ab", unique(StringExpressions.lpad(ConstantImpl.create("ab"), 4, '!')));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ExcludeIn({SQLITE, DERBY})
|
||||
public void Rpad() {
|
||||
assertEquals("ab ", unique(StringExpressions.rpad(ConstantImpl.create("ab"), 4)));
|
||||
assertEquals("ab!!", unique(StringExpressions.rpad(ConstantImpl.create("ab"), 4,'!')));
|
||||
}
|
||||
|
||||
private <T> T unique(Expression<T> expr) {
|
||||
return query().uniqueResult(expr);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user