mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
fix: QueryMethods.substring; close #I7T3EA
This commit is contained in:
parent
694665b96f
commit
609003d1bf
@ -807,85 +807,44 @@ public class QueryMethods {
|
||||
/**
|
||||
* 返回字符串 s 的前 n 个字符。
|
||||
*/
|
||||
public static QueryColumn left(String columnS, String columnN) {
|
||||
return new FunctionQueryColumn(LEFT, columnS, columnN);
|
||||
public static QueryColumn left(String columnS, int length) {
|
||||
return new FunctionQueryColumn(LEFT, string(columnS), number(length));
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回字符串 s 的前 n 个字符。
|
||||
*/
|
||||
public static QueryColumn left(QueryColumn columnS, QueryColumn columnN) {
|
||||
return new FunctionQueryColumn(LEFT, columnS, columnN);
|
||||
public static QueryColumn left(QueryColumn columnS, int length) {
|
||||
return new FunctionQueryColumn(LEFT, columnS, number(length));
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回字符串 s 的前 n 个字符。
|
||||
*/
|
||||
public static <S, N> QueryColumn left(LambdaGetter<S> columnS, LambdaGetter<N> columnN) {
|
||||
return new FunctionQueryColumn(LEFT, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN));
|
||||
public static <S, N> QueryColumn left(LambdaGetter<S> columnS, int length) {
|
||||
return new FunctionQueryColumn(LEFT, LambdaUtil.getQueryColumn(columnS), number(length));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 返回字符串 s 的后 length 个字符。
|
||||
*/
|
||||
public static QueryColumn right(String columnS, int length) {
|
||||
return new FunctionQueryColumn(RIGHT, string(columnS), number(length));
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回字符串 s 的前 n 个字符。
|
||||
* 返回字符串 s 的后 length 个字符。
|
||||
*/
|
||||
public static QueryColumn left(String columnX, Integer n) {
|
||||
return new FunctionQueryColumn(LEFT, new QueryColumn(columnX), number(n));
|
||||
public static QueryColumn right(QueryColumn columnS, int length) {
|
||||
return new FunctionQueryColumn(RIGHT, columnS, number(length));
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回字符串 s 的前 n 个字符。
|
||||
* 返回字符串 s 的后 length 个字符。
|
||||
*/
|
||||
public static QueryColumn left(QueryColumn columnX, Integer n) {
|
||||
return new FunctionQueryColumn(LEFT, columnX, number(n));
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回字符串 s 的前 n 个字符。
|
||||
*/
|
||||
public static <T> QueryColumn left(LambdaGetter<T> columnX, Integer n) {
|
||||
return new FunctionQueryColumn(LEFT, LambdaUtil.getQueryColumn(columnX), number(n));
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回字符串 s 的后 n 个字符。
|
||||
*/
|
||||
public static QueryColumn right(String columnS, String columnN) {
|
||||
return new FunctionQueryColumn(RIGHT, columnS, columnN);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回字符串 s 的后 n 个字符。
|
||||
*/
|
||||
public static QueryColumn right(QueryColumn columnS, QueryColumn columnN) {
|
||||
return new FunctionQueryColumn(RIGHT, columnS, columnN);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回字符串 s 的后 n 个字符。
|
||||
*/
|
||||
public static <S, N> QueryColumn right(LambdaGetter<S> columnS, LambdaGetter<N> columnN) {
|
||||
return new FunctionQueryColumn(RIGHT, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN));
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回字符串 s 的后 n 个字符。
|
||||
*/
|
||||
public static QueryColumn right(String columnX, Integer n) {
|
||||
return new FunctionQueryColumn(RIGHT, new QueryColumn(columnX), number(n));
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回字符串 s 的后 n 个字符。
|
||||
*/
|
||||
public static QueryColumn right(QueryColumn columnX, Integer n) {
|
||||
return new FunctionQueryColumn(RIGHT, columnX, number(n));
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回字符串 s 的后 n 个字符。
|
||||
*/
|
||||
public static <T> QueryColumn right(LambdaGetter<T> columnX, Integer n) {
|
||||
return new FunctionQueryColumn(RIGHT, LambdaUtil.getQueryColumn(columnX), number(n));
|
||||
public static <S, N> QueryColumn right(LambdaGetter<S> columnS, int length) {
|
||||
return new FunctionQueryColumn(RIGHT, LambdaUtil.getQueryColumn(columnS), number(length));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1084,25 +1043,47 @@ public class QueryMethods {
|
||||
return new FunctionQueryColumn(STRCMP, LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnS2));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取从字符串 s 中的第 n 个位置开始长度为 len 的字符串。
|
||||
* 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。
|
||||
*/
|
||||
public static QueryColumn substring(String columnS, String columnN, String columnLen) {
|
||||
return new FunctionQueryColumn(SUBSTRING, columnS, columnN, columnLen);
|
||||
public static QueryColumn substring(String columnS, int position) {
|
||||
return new FunctionQueryColumn(SUBSTRING, string(columnS), number(position));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取从字符串 s 中的第 n 个位置开始长度为 len 的字符串。
|
||||
* 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。
|
||||
*/
|
||||
public static QueryColumn substring(QueryColumn columnS, QueryColumn columnN, QueryColumn columnLen) {
|
||||
return new FunctionQueryColumn(SUBSTRING, columnS, columnN, columnLen);
|
||||
public static QueryColumn substring(QueryColumn columnS, int position) {
|
||||
return new FunctionQueryColumn(SUBSTRING, columnS, number(position));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取从字符串 s 中的第 n 个位置开始长度为 len 的字符串。
|
||||
* 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。
|
||||
*/
|
||||
public static <S, N, L> QueryColumn substring(LambdaGetter<S> columnS, LambdaGetter<N> columnN, LambdaGetter<L> columnLen) {
|
||||
return new FunctionQueryColumn(SUBSTRING, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN), LambdaUtil.getQueryColumn(columnLen));
|
||||
public static <S, N, L> QueryColumn substring(LambdaGetter<S> columnS, int position) {
|
||||
return new FunctionQueryColumn(SUBSTRING, LambdaUtil.getQueryColumn(columnS), number(position));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。
|
||||
*/
|
||||
public static QueryColumn substring(String columnS, int position, int length) {
|
||||
return new FunctionQueryColumn(SUBSTRING, string(columnS), number(position), number(length));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。
|
||||
*/
|
||||
public static QueryColumn substring(QueryColumn columnS, int position, int length) {
|
||||
return new FunctionQueryColumn(SUBSTRING, columnS, number(position), number(length));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。
|
||||
*/
|
||||
public static <S, N, L> QueryColumn substring(LambdaGetter<S> columnS, int position, int length) {
|
||||
return new FunctionQueryColumn(SUBSTRING, LambdaUtil.getQueryColumn(columnS), number(position), number(length));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2326,7 +2307,7 @@ public class QueryMethods {
|
||||
* 返回指定列的总行数。
|
||||
*/
|
||||
public static FunctionQueryColumn count() {
|
||||
return new FunctionQueryColumn(COUNT, new StringQueryColumn("*"));
|
||||
return new FunctionQueryColumn(COUNT, new RawQueryColumn("*"));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2391,42 +2372,42 @@ public class QueryMethods {
|
||||
* 构建 TRUE 常量。
|
||||
*/
|
||||
public static QueryColumn true_() {
|
||||
return new StringQueryColumn("TRUE");
|
||||
return new RawQueryColumn("TRUE");
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建 FALSE 常量。
|
||||
*/
|
||||
public static QueryColumn false_() {
|
||||
return new StringQueryColumn("FALSE");
|
||||
return new RawQueryColumn("FALSE");
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建 NULL 常量。
|
||||
*/
|
||||
public static QueryColumn null_() {
|
||||
return new StringQueryColumn("NULL");
|
||||
return new RawQueryColumn("NULL");
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建数字常量。
|
||||
*/
|
||||
public static QueryColumn number(Number n) {
|
||||
return new StringQueryColumn(n.toString());
|
||||
return new RawQueryColumn(n);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建数字常量。
|
||||
*/
|
||||
public static QueryColumn string(String s) {
|
||||
return new StringQueryColumn("'" + s + "'");
|
||||
return new RawQueryColumn("'" + s + "'");
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建自定义列。
|
||||
*/
|
||||
public static QueryColumn column(String column) {
|
||||
return new StringQueryColumn(column);
|
||||
return new RawQueryColumn(column);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -82,7 +82,7 @@ public class QueryWrapper extends BaseQueryWrapper<QueryWrapper> {
|
||||
|
||||
public QueryWrapper select(String... columns) {
|
||||
for (String column : columns) {
|
||||
addSelectColumn(new StringQueryColumn(column));
|
||||
addSelectColumn(new RawQueryColumn(column));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -23,13 +23,13 @@ import java.util.List;
|
||||
/**
|
||||
* 自定义字符串列,用于扩展
|
||||
*/
|
||||
public class StringQueryColumn extends QueryColumn {
|
||||
public class RawQueryColumn extends QueryColumn {
|
||||
|
||||
protected String content;
|
||||
|
||||
|
||||
public StringQueryColumn(String content) {
|
||||
this.content = content;
|
||||
public RawQueryColumn(Object content) {
|
||||
this.content = String.valueOf(content);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -44,14 +44,14 @@ public class StringQueryColumn extends QueryColumn {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "StringQueryColumn{" +
|
||||
return "RawQueryColumn{" +
|
||||
"content='" + content + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringQueryColumn clone() {
|
||||
return (StringQueryColumn) super.clone();
|
||||
public RawQueryColumn clone() {
|
||||
return (RawQueryColumn) super.clone();
|
||||
}
|
||||
|
||||
}
|
||||
@ -18,7 +18,7 @@ package com.mybatisflex.coretest;
|
||||
|
||||
import com.mybatisflex.core.query.FunctionQueryColumn;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.query.StringQueryColumn;
|
||||
import com.mybatisflex.core.query.RawQueryColumn;
|
||||
import org.junit.Test;
|
||||
|
||||
import static com.mybatisflex.core.query.QueryMethods.*;
|
||||
@ -34,7 +34,7 @@ public class FunctionSqlTest {
|
||||
public void test() {
|
||||
String sql = QueryWrapper.create()
|
||||
.select(new FunctionQueryColumn("NOW").as("n1"))
|
||||
.select(new FunctionQueryColumn("NOW", new StringQueryColumn("")).as("n2"))
|
||||
.select(new FunctionQueryColumn("NOW", new RawQueryColumn("")).as("n2"))
|
||||
.select(new FunctionQueryColumn("CONCAT", ACCOUNT.USER_NAME, ACCOUNT.AGE).as("c1"))
|
||||
.from(ACCOUNT)
|
||||
.toSQL();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user