From cb0023345f1e35e6c54854c9a6daaa514a342e5c Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Wed, 18 Jul 2018 21:59:11 +1200 Subject: [PATCH] Refactor scalar types for Varchar, LongVarchar and Clob - ScalarTypeStringBase --- .../server/type/ScalarTypeClob.java | 50 +-------- .../server/type/ScalarTypeLongVarchar.java | 5 - .../server/type/ScalarTypeString.java | 92 +--------------- .../server/type/ScalarTypeStringBase.java | 101 ++++++++++++++++++ 4 files changed, 107 insertions(+), 141 deletions(-) create mode 100644 src/main/java/io/ebeaninternal/server/type/ScalarTypeStringBase.java diff --git a/src/main/java/io/ebeaninternal/server/type/ScalarTypeClob.java b/src/main/java/io/ebeaninternal/server/type/ScalarTypeClob.java index 5b10769f3..e7971e0c7 100644 --- a/src/main/java/io/ebeaninternal/server/type/ScalarTypeClob.java +++ b/src/main/java/io/ebeaninternal/server/type/ScalarTypeClob.java @@ -1,66 +1,24 @@ package io.ebeaninternal.server.type; -import io.ebeaninternal.server.core.BasicTypeConverter; - import java.sql.SQLException; import java.sql.Types; /** * ScalarType for String. */ -public class ScalarTypeClob extends ScalarTypeBaseVarchar { +public class ScalarTypeClob extends ScalarTypeStringBase { - protected ScalarTypeClob(boolean jdbcNative, int jdbcType) { - super(String.class, jdbcNative, jdbcType); + ScalarTypeClob(boolean jdbcNative, int jdbcType) { + super(jdbcNative, jdbcType); } public ScalarTypeClob() { - super(String.class, true, Types.CLOB); - } - - @Override - public String convertFromDbString(String dbValue) { - return dbValue; - } - - @Override - public String convertToDbString(String beanValue) { - return beanValue; - } - - @Override - public void bind(DataBind b, String value) throws SQLException { - if (value == null) { - b.setNull(Types.VARCHAR); - } else { - b.setString(value); - } + super(true, Types.CLOB); } @Override public String read(DataReader dataReader) throws SQLException { - return dataReader.getStringFromStream(); } - @Override - public Object toJdbcType(Object value) { - return BasicTypeConverter.toString(value); - } - - @Override - public String toBeanType(Object value) { - return BasicTypeConverter.toString(value); - } - - @Override - public String formatValue(String t) { - return t; - } - - @Override - public String parse(String value) { - return value; - } - } diff --git a/src/main/java/io/ebeaninternal/server/type/ScalarTypeLongVarchar.java b/src/main/java/io/ebeaninternal/server/type/ScalarTypeLongVarchar.java index e192a33e1..9bde5947f 100644 --- a/src/main/java/io/ebeaninternal/server/type/ScalarTypeLongVarchar.java +++ b/src/main/java/io/ebeaninternal/server/type/ScalarTypeLongVarchar.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.type; -import java.sql.SQLException; import java.sql.Types; /** @@ -12,8 +11,4 @@ public class ScalarTypeLongVarchar extends ScalarTypeClob { super(true, Types.LONGVARCHAR); } - @Override - public String read(DataReader dataReader) throws SQLException { - return dataReader.getStringFromStream(); - } } diff --git a/src/main/java/io/ebeaninternal/server/type/ScalarTypeString.java b/src/main/java/io/ebeaninternal/server/type/ScalarTypeString.java index f9a31355c..3ee87d9d9 100644 --- a/src/main/java/io/ebeaninternal/server/type/ScalarTypeString.java +++ b/src/main/java/io/ebeaninternal/server/type/ScalarTypeString.java @@ -1,103 +1,15 @@ package io.ebeaninternal.server.type; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import io.ebeaninternal.server.core.BasicTypeConverter; -import io.ebeanservice.docstore.api.mapping.DocPropertyType; - -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; -import java.sql.SQLException; import java.sql.Types; /** * ScalarType for String. */ -public class ScalarTypeString extends ScalarTypeBase { +public class ScalarTypeString extends ScalarTypeStringBase { public static final ScalarTypeString INSTANCE = new ScalarTypeString(); private ScalarTypeString() { - super(String.class, true, Types.VARCHAR); - } - - @Override - public void bind(DataBind b, String value) throws SQLException { - if (value == null) { - b.setNull(Types.VARCHAR); - } else { - b.setString(value); - } - } - - @Override - public String read(DataReader dataReader) throws SQLException { - return dataReader.getString(); - } - - @Override - public Object toJdbcType(Object value) { - return BasicTypeConverter.toString(value); - } - - @Override - public String toBeanType(Object value) { - return BasicTypeConverter.toString(value); - } - - @Override - public String formatValue(String value) { - return value; - } - - @Override - public String parse(String value) { - return value; - } - - @Override - public String convertFromMillis(long systemTimeMillis) { - return String.valueOf(systemTimeMillis); - } - - @Override - public boolean isDateTimeCapable() { - return true; - } - - @Override - public String readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - return dataInput.readUTF(); - } - } - - @Override - public void writeData(DataOutput dataOutput, String value) throws IOException { - - if (value == null) { - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - dataOutput.writeUTF(value); - } - } - - @Override - public String jsonRead(JsonParser parser) throws IOException { - return parser.getValueAsString(); - } - - @Override - public void jsonWrite(JsonGenerator writer, String value) throws IOException { - writer.writeString(value); - } - - @Override - public DocPropertyType getDocType() { - return DocPropertyType.TEXT; + super(true, Types.VARCHAR); } } diff --git a/src/main/java/io/ebeaninternal/server/type/ScalarTypeStringBase.java b/src/main/java/io/ebeaninternal/server/type/ScalarTypeStringBase.java new file mode 100644 index 000000000..b19a9f874 --- /dev/null +++ b/src/main/java/io/ebeaninternal/server/type/ScalarTypeStringBase.java @@ -0,0 +1,101 @@ +package io.ebeaninternal.server.type; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebeanservice.docstore.api.mapping.DocPropertyType; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.sql.SQLException; +import java.sql.Types; + +/** + * Base ScalarType for String type using Varchar, Clob and LongVarchar. + */ +public abstract class ScalarTypeStringBase extends ScalarTypeBase { + + ScalarTypeStringBase(boolean jdbcNative, int jdbcType) { + super(String.class, jdbcNative, jdbcType); + } + + @Override + public void bind(DataBind b, String value) throws SQLException { + if (value == null) { + b.setNull(Types.VARCHAR); + } else { + b.setString(value); + } + } + + @Override + public String read(DataReader dataReader) throws SQLException { + return dataReader.getString(); + } + + @Override + public Object toJdbcType(Object value) { + return BasicTypeConverter.toString(value); + } + + @Override + public String toBeanType(Object value) { + return BasicTypeConverter.toString(value); + } + + @Override + public String formatValue(String value) { + return value; + } + + @Override + public String parse(String value) { + return value; + } + + @Override + public String convertFromMillis(long systemTimeMillis) { + return String.valueOf(systemTimeMillis); + } + + @Override + public boolean isDateTimeCapable() { + return true; + } + + @Override + public String readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + return dataInput.readUTF(); + } + } + + @Override + public void writeData(DataOutput dataOutput, String value) throws IOException { + + if (value == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + dataOutput.writeUTF(value); + } + } + + @Override + public String jsonRead(JsonParser parser) throws IOException { + return parser.getValueAsString(); + } + + @Override + public void jsonWrite(JsonGenerator writer, String value) throws IOException { + writer.writeString(value); + } + + @Override + public DocPropertyType getDocType() { + return DocPropertyType.TEXT; + } +}