Skip to content

Commit 50cf4eb

Browse files
committed
refactor: 优化
1 parent d429295 commit 50cf4eb

File tree

7 files changed

+41
-33
lines changed

7 files changed

+41
-33
lines changed

hsweb-easy-orm-rdb/src/main/java/org/hswebframework/ezorm/rdb/codec/ClobValueCodec.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.hswebframework.ezorm.rdb.executor.NullValue;
99
import org.hswebframework.ezorm.rdb.metadata.DataType;
1010
import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata;
11+
import org.hswebframework.ezorm.rdb.supports.oracle.OracleDialect;
1112
import org.hswebframework.ezorm.rdb.utils.FeatureUtils;
1213
import reactor.core.publisher.Flux;
1314
import reactor.core.publisher.Mono;
@@ -23,7 +24,7 @@ public class ClobValueCodec implements ValueCodec {
2324

2425
public static final ClobValueCodec INSTANCE = new ClobValueCodec();
2526

26-
static boolean isClobType(DataType type) {
27+
public static boolean isClobType(DataType type) {
2728
return type.getSqlType() == JDBCType.LONGVARCHAR ||
2829
type.getSqlType() == JDBCType.LONGNVARCHAR ||
2930
type.getSqlType() == JDBCType.CLOB;

hsweb-easy-orm-rdb/src/main/java/org/hswebframework/ezorm/rdb/executor/jdbc/JdbcSqlExecutorHelper.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,7 @@ protected static void preparedStatementParameter(PreparedStatement statement, Ob
3838
if (object == null) {
3939
statement.setNull(index++, Types.NULL);
4040
} else if (object instanceof NullValue nullValue) {
41-
Class<?> javaType = nullValue.getType();
42-
if (LongCharSequence.class == javaType) {
43-
statement.setCharacterStream(index++, new StringReader(""));
44-
} else {
45-
statement.setNull(index++, nullValue.getDataType().getSqlType().getVendorTypeNumber());
46-
}
41+
statement.setNull(index++, nullValue.getDataType().getSqlType().getVendorTypeNumber());
4742
} else if (object instanceof Date) {
4843
statement.setTimestamp(index++, new java.sql.Timestamp(((Date) object).getTime()));
4944
} else if (object instanceof byte[] b) {

hsweb-easy-orm-rdb/src/main/java/org/hswebframework/ezorm/rdb/executor/reactive/r2dbc/R2dbcReactiveSqlExecutor.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -252,11 +252,7 @@ protected Statement prepareStatement(Statement statement, SqlRequest request) {
252252
if (parameter == null) {
253253
bindNull(statement, index, String.class);
254254
} else if (parameter instanceof NullValue nullValue) {
255-
Class<?> javaType = nullValue.getType();
256-
if (javaType == LongCharSequence.class) {
257-
javaType = Clob.class;
258-
}
259-
bindNull(statement, index, javaType);
255+
bindNull(statement, index, nullValue.getType());
260256
} else {
261257
// convert clob
262258
if (parameter instanceof LongCharSequence cb) {

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package org.hswebframework.ezorm.rdb.supports.oracle;
22

3+
import io.r2dbc.mssql.codec.ClobCodec;
34
import lombok.AllArgsConstructor;
45
import org.hswebframework.ezorm.core.RuntimeDefaultValue;
56
import org.hswebframework.ezorm.core.param.Term;
7+
import org.hswebframework.ezorm.rdb.codec.ClobValueCodec;
8+
import org.hswebframework.ezorm.rdb.codec.LongCharSequence;
69
import org.hswebframework.ezorm.rdb.executor.NullValue;
710
import org.hswebframework.ezorm.rdb.executor.SqlRequest;
811
import org.hswebframework.ezorm.rdb.executor.SyncSqlExecutor;
@@ -188,9 +191,15 @@ public SqlRequest build(InsertOperatorParameter parameter) {
188191
value = NullValue.of(column.getType());
189192
}
190193
}
191-
194+
value = column.encode(value);
195+
// 适配 clob字段 不支持设置null
196+
if (valueSize > 1 && (value == null || value instanceof NullValue)) {
197+
if (ClobValueCodec.isClobType(column.getType())) {
198+
value = new LongCharSequence("");
199+
}
200+
}
192201
fragments.addSql("? as ", column.getQuoteName())
193-
.addParameter(column.encode(value));
202+
.addParameter(value);
194203
valueIndex++;
195204
}
196205

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import lombok.RequiredArgsConstructor;
44
import org.apache.commons.lang3.StringUtils;
55
import org.hswebframework.ezorm.core.RuntimeDefaultValue;
6+
import org.hswebframework.ezorm.rdb.codec.ClobValueCodec;
7+
import org.hswebframework.ezorm.rdb.codec.LongCharSequence;
68
import org.hswebframework.ezorm.rdb.executor.NullValue;
79
import org.hswebframework.ezorm.rdb.executor.SqlRequest;
810
import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata;
@@ -126,7 +128,14 @@ public SqlRequest build(InsertOperatorParameter parameter) {
126128
if (value == null) {
127129
value = NullValue.of(column.getType());
128130
}
129-
valuesSql.add(SqlFragments.QUESTION_MARK).addParameter(column.encode(value));
131+
value = column.encode(value);
132+
// 适配 clob字段 不支持设置null
133+
if (valueSize > 1 && (value == null || value instanceof NullValue)) {
134+
if (ClobValueCodec.isClobType(column.getType())) {
135+
value = new LongCharSequence("");
136+
}
137+
}
138+
valuesSql.add(SqlFragments.QUESTION_MARK).addParameter(value);
130139
}
131140
intoSql.add(SqlFragments.RIGHT_BRACKET);
132141
valuesSql.add(SqlFragments.RIGHT_BRACKET);

hsweb-easy-orm-rdb/src/test/java/org/hswebframework/ezorm/rdb/supports/oracle/OracleConnectionProvider.java

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,23 @@ public class OracleConnectionProvider implements ConnectionProvider {
2323
static {
2424
try {
2525
Class.forName("oracle.jdbc.driver.OracleDriver");
26-
} catch (ClassNotFoundException e) {
27-
e.printStackTrace();
28-
}
29-
GenericContainer<?> container = Containers.newOracle();
30-
31-
container.start();
32-
port = container.getMappedPort(1521);
33-
34-
String username = System.getProperty("oracle.username", "system");
35-
String password = System.getProperty("oracle.password", "oracle");
36-
String url = System.getProperty("oracle.url", "127.0.0.1:" + port);
37-
String db = System.getProperty("oracle.db", "orcl");
38-
connectionSupplier = () -> DriverManager.getConnection("jdbc:oracle:thin:@" + url + ":" + db, username, password);
39-
for (int i = 0; i < 10; i++) {
40-
try {
26+
27+
GenericContainer<?> container = Containers.newOracle();
28+
29+
container.start();
30+
port = container.getMappedPort(1521);
31+
32+
String username = System.getProperty("oracle.username", "system");
33+
String password = System.getProperty("oracle.password", "oracle");
34+
String url = System.getProperty("oracle.url", "127.0.0.1:" + port);
35+
String db = System.getProperty("oracle.db", "orcl");
36+
connectionSupplier = () -> DriverManager.getConnection("jdbc:oracle:thin:@" + url + ":" + db, username, password);
37+
for (int i = 0; i < 10; i++) {
4138
connectionQueue.add(connectionSupplier.call());
42-
} catch (Exception e) {
43-
throw new RuntimeException(e);
39+
4440
}
41+
} catch (Throwable e) {
42+
e.printStackTrace();
4543
}
4644
}
4745

hsweb-easy-orm-rdb/src/test/java/org/hswebframework/ezorm/rdb/supports/oracle/OracleReactiveTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ protected Dialect getDialect() {
3636
protected ReactiveSqlExecutor getSqlExecutor() {
3737

3838
return new TestJdbcReactiveSqlExecutor(new OracleConnectionProvider());
39-
39+
//
4040
// return new TestReactiveSqlExecutor(":",new OracleR2dbcConnectionProvider()){
4141
// @Override
4242
// protected void bindNull(Statement statement, int index, Class type) {

0 commit comments

Comments
 (0)