Skip to content

Commit 2601d37

Browse files
committed
refactor: 优化EnumInFragmentBuilder逻辑
1 parent 9dfa4ef commit 2601d37

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

hsweb-easy-orm-rdb/src/main/java/org/hswebframework/ezorm/rdb/metadata/dialect/Dialect.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import org.hswebframework.ezorm.rdb.metadata.DataType;
55
import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata;
66
import org.hswebframework.ezorm.rdb.metadata.RDBFeatureType;
7+
import org.hswebframework.ezorm.rdb.operator.builder.fragments.SqlFragments;
8+
import org.hswebframework.ezorm.rdb.operator.builder.fragments.term.EnumInFragmentBuilder;
79
import org.hswebframework.ezorm.rdb.supports.h2.H2Dialect;
810
import org.hswebframework.ezorm.rdb.supports.mssql.SqlServerDialect;
911
import org.hswebframework.ezorm.rdb.supports.mysql.MysqlDialect;
@@ -76,6 +78,16 @@ default String buildColumnFullName(String tableName, String columnName, boolean
7678
return StringUtils.concat(tableName, ".", getQuoteStart(), changeCase && isColumnToUpperCase() ? columnName.toUpperCase() : columnName, getQuoteEnd());
7779
}
7880

81+
/**
82+
* 位运算AND操作,用于枚举类型的查询等操作
83+
*
84+
* @param column 列名
85+
* @param value 位值
86+
* @return SQL片段
87+
*/
88+
default SqlFragments bitAnd(String column, long value) {
89+
return SqlFragments.of(column, "&", String.valueOf(value));
90+
}
7991

8092
Dialect MYSQL = new MysqlDialect();
8193
Dialect ORACLE = new OracleDialect();

hsweb-easy-orm-rdb/src/main/java/org/hswebframework/ezorm/rdb/operator/builder/fragments/term/EnumInFragmentBuilder.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,12 @@ public static EnumInFragmentBuilder of(Dialect dialect) {
7373
if (dialect instanceof OracleDialect) {
7474
return OracleEnumInFragmentBuilder.in;
7575
}
76-
77-
throw new UnsupportedOperationException("unsupported db type :" + dialect);
76+
return new EnumInFragmentBuilder(false) {
77+
@Override
78+
public SqlFragments bitAnd(String column, long value) {
79+
return dialect.bitAnd(column,value);
80+
}
81+
};
7882
}
7983

8084
public static EnumInFragmentBuilder ofNot(Dialect dialect) {
@@ -90,7 +94,11 @@ public static EnumInFragmentBuilder ofNot(Dialect dialect) {
9094
if (dialect instanceof OracleDialect) {
9195
return OracleEnumInFragmentBuilder.notIn;
9296
}
93-
94-
throw new UnsupportedOperationException("unsupported db type :" + dialect.getType());
97+
return new EnumInFragmentBuilder(true) {
98+
@Override
99+
public SqlFragments bitAnd(String column, long value) {
100+
return dialect.bitAnd(column,value);
101+
}
102+
};
95103
}
96104
}

hsweb-easy-orm-rdb/src/main/java/org/hswebframework/ezorm/rdb/supports/mysql/MysqlDialect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.hswebframework.ezorm.rdb.metadata.JdbcDataType;
55
import org.hswebframework.ezorm.rdb.metadata.dialect.DefaultDialect;
66
import org.hswebframework.ezorm.core.utils.StringUtils;
7+
import org.hswebframework.ezorm.rdb.operator.builder.fragments.SqlFragments;
78

89
import java.sql.Date;
910
import java.sql.JDBCType;

hsweb-easy-orm-rdb/src/main/java/org/hswebframework/ezorm/rdb/supports/oracle/OracleDialect.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
import org.hswebframework.ezorm.rdb.metadata.JdbcDataType;
55
import org.hswebframework.ezorm.rdb.metadata.dialect.DefaultDialect;
66
import org.hswebframework.ezorm.core.utils.StringUtils;
7+
import org.hswebframework.ezorm.rdb.operator.builder.fragments.SimpleSqlFragments;
8+
import org.hswebframework.ezorm.rdb.operator.builder.fragments.SqlFragments;
79

810
import java.math.BigDecimal;
911
import java.sql.Date;
1012
import java.sql.JDBCType;
13+
import java.util.Arrays;
14+
import java.util.Collections;
1115

1216
public class OracleDialect extends DefaultDialect {
1317
public OracleDialect() {
@@ -81,4 +85,12 @@ public String getId() {
8185
public String getName() {
8286
return "Oracle";
8387
}
88+
89+
@Override
90+
public SqlFragments bitAnd(String column, long value) {
91+
return SimpleSqlFragments.of(
92+
Arrays.asList("BITAND(", column, ",", "?)"),
93+
Collections.singletonList(value)
94+
);
95+
}
8496
}

0 commit comments

Comments
 (0)