#2598 - H2 + @Lob String fails with - Error[Value too long for column "CHARACTER VARYING": "... (1048577)" [22001-210]]

This commit is contained in:
Rob Bygrave committed 2022-03-16 22:13:52 +13:00
1 parent ff1b01e5ca
commit 92e85e32a2
2 files changed
+26 -1

No files matched your search

@@ -1,5 +1,6 @@
package io.ebeaninternal.server.type; package io.ebeaninternal.server.type;
import io.ebean.core.type.DataBinder;
import io.ebean.core.type.DataReader; import io.ebean.core.type.DataReader;
import java.sql.SQLException; import java.sql.SQLException;
@@ -18,6 +19,15 @@ class ScalarTypeClob extends ScalarTypeStringBase {
super(true, Types.CLOB); super(true, Types.CLOB);
} }
@Override
public void bind(DataBinder binder, String value) throws SQLException {
if (value == null) {
binder.setNull(Types.VARCHAR);
} else {
binder.setClob(value);
}
}
@Override @Override
public String read(DataReader reader) throws SQLException { public String read(DataReader reader) throws SQLException {
return reader.getStringFromStream(); return reader.getStringFromStream();
@@ -7,8 +7,8 @@ import io.ebean.test.LoggedSql;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.tests.model.basic.EBasicClobNoVer; import org.tests.model.basic.EBasicClobNoVer;
import javax.xml.transform.sax.SAXSource;
import java.util.List; import java.util.List;
import java.util.Random;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@@ -83,4 +83,19 @@ class TestBasicClobNoVer extends BaseTestCase {
assertThat(sql.get(0)).contains(" and t0.deleted ="); assertThat(sql.get(0)).contains(" and t0.deleted =");
} }
@Test
void largeValueInsert() {
EBasicClobNoVer bean = new EBasicClobNoVer();
bean.setDescription(largeContent());
DB.save(bean);
}
private String largeContent() {
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1048577; i++) {
sb.append((char) (random.nextInt(26) + 'a'));
}
return sb.toString();
}
} }