Skip to content

Commit

Permalink
Get rid of ValueLob.getPrecision()
Browse files Browse the repository at this point in the history
  • Loading branch information
katzyn committed Jun 5, 2021
1 parent 40e3809 commit f440deb
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 28 deletions.
2 changes: 1 addition & 1 deletion h2/src/main/org/h2/mvstore/db/LobStorageMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ public ValueLob copyLob(ValueLob old, int tableId, long length) {
final LobDataDatabase lobData = (LobDataDatabase) old.getLobData();
final int type = old.getValueType();
final long oldLobId = lobData.getLobId();
final long oldLength = old.getPrecision();
final long oldLength = type == Value.CLOB ? old.charLength() : old.octetLength();
if (oldLength != length) {
throw DbException.getInternalError("Length is different");
}
Expand Down
25 changes: 20 additions & 5 deletions h2/src/main/org/h2/mvstore/db/ValueDataType.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@
import org.h2.value.ValueInterval;
import org.h2.value.ValueJavaObject;
import org.h2.value.ValueJson;
import org.h2.value.ValueLob;
import org.h2.value.ValueNull;
import org.h2.value.ValueNumeric;
import org.h2.value.ValueReal;
Expand Down Expand Up @@ -451,17 +450,33 @@ public void write(WriteBuffer buff, Value v) {
}
break;
}
case Value.BLOB:
case Value.BLOB: {
buff.put(BLOB);
ValueBlob lob = (ValueBlob) v;
LobData lobData = lob.getLobData();
if (lobData instanceof LobDataDatabase) {
LobDataDatabase lobDataDatabase = (LobDataDatabase) lobData;
buff.putVarInt(-3).
putVarInt(lobDataDatabase.getTableId()).
putVarLong(lobDataDatabase.getLobId()).
putVarLong(lob.octetLength());
} else {
byte[] small = ((LobDataInMemory) lobData).getSmall();
buff.putVarInt(small.length).
put(small);
}
break;
}
case Value.CLOB: {
buff.put(type == Value.BLOB ? BLOB : CLOB);
ValueLob lob = (ValueLob) v;
buff.put(CLOB);
ValueClob lob = (ValueClob) v;
LobData lobData = lob.getLobData();
if (lobData instanceof LobDataDatabase) {
LobDataDatabase lobDataDatabase = (LobDataDatabase) lobData;
buff.putVarInt(-3).
putVarInt(lobDataDatabase.getTableId()).
putVarLong(lobDataDatabase.getLobId()).
putVarLong(lob.getPrecision());
putVarLong(lob.charLength());
} else {
byte[] small = ((LobDataInMemory) lobData).getSmall();
buff.putVarInt(small.length).
Expand Down
4 changes: 3 additions & 1 deletion h2/src/main/org/h2/tools/Recover.java
Original file line number Diff line number Diff line change
Expand Up @@ -294,12 +294,14 @@ private void getSQL(StringBuilder builder, String column, Value v) {
LobDataDatabase lobDataDatabase = (LobDataDatabase) lobData;
int type = v.getValueType();
long id = lobDataDatabase.getLobId();
long precision = lob.getPrecision();
long precision;
String columnType;
if (type == Value.BLOB) {
precision = lob.octetLength();
columnType = "BLOB";
builder.append("READ_BLOB");
} else {
precision = lob.charLength();
columnType = "CLOB";
builder.append("READ_CLOB");
}
Expand Down
10 changes: 4 additions & 6 deletions h2/src/main/org/h2/util/JdbcUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -596,14 +596,12 @@ private static void setOther(PreparedStatement prep, int parameterIndex, Value v
}

private static void setLob(PreparedStatement prep, int parameterIndex, ValueLob value) throws SQLException {
long p = value.getPrecision();
if (p > Integer.MAX_VALUE) {
p = -1;
}
if (value.getValueType() == Value.BLOB) {
prep.setBinaryStream(parameterIndex, value.getInputStream(), (int) p);
long p = value.octetLength();
prep.setBinaryStream(parameterIndex, value.getInputStream(), p > Integer.MAX_VALUE ? -1 : (int) p);
} else {
prep.setCharacterStream(parameterIndex, value.getReader(), (int) p);
long p = value.charLength();
prep.setCharacterStream(parameterIndex, value.getReader(), p > Integer.MAX_VALUE ? -1 : (int) p);
}
}

Expand Down
8 changes: 4 additions & 4 deletions h2/src/main/org/h2/value/Transfer.java
Original file line number Diff line number Diff line change
Expand Up @@ -874,16 +874,16 @@ public void writeValue(Value v) throws IOException {
writeInt(BLOB);
ValueBlob lob = (ValueBlob) v;
LobData lobData = lob.getLobData();
long length = lob.octetLength();
if (lobData instanceof LobDataDatabase) {
LobDataDatabase lobDataDatabase = (LobDataDatabase) lobData;
writeLong(-1);
writeInt(lobDataDatabase.getTableId());
writeLong(lobDataDatabase.getLobId());
writeBytes(calculateLobMac(lobDataDatabase.getLobId()));
writeLong(lob.getPrecision());
writeLong(length);
break;
}
long length = lob.getPrecision();
if (length < 0) {
throw DbException.get(
ErrorCode.CONNECTION_BROKEN_1, "length=" + length);
Expand All @@ -901,16 +901,16 @@ public void writeValue(Value v) throws IOException {
writeInt(CLOB);
ValueClob lob = (ValueClob) v;
LobData lobData = lob.getLobData();
long length = lob.charLength();
if (lobData instanceof LobDataDatabase) {
LobDataDatabase lobDataDatabase = (LobDataDatabase) lobData;
writeLong(-1);
writeInt(lobDataDatabase.getTableId());
writeLong(lobDataDatabase.getLobId());
writeBytes(calculateLobMac(lobDataDatabase.getLobId()));
writeLong(lob.getPrecision());
writeLong(length);
break;
}
long length = lob.getPrecision();
if (length < 0) {
throw DbException.get(
ErrorCode.CONNECTION_BROKEN_1, "length=" + length);
Expand Down
4 changes: 2 additions & 2 deletions h2/src/main/org/h2/value/Value.java
Original file line number Diff line number Diff line change
Expand Up @@ -1296,7 +1296,7 @@ private ValueClob convertToClob(TypeInfo targetType, int conversionMode, Object
if (conversionMode != CONVERT_TO) {
if (conversionMode == CAST_TO) {
v = v.convertPrecision(targetType.getPrecision());
} else if (v.getPrecision() > targetType.getPrecision()) {
} else if (v.charLength() > targetType.getPrecision()) {
throw v.getValueTooLongException(targetType, column);
}
}
Expand Down Expand Up @@ -1400,7 +1400,7 @@ private ValueBlob convertToBlob(TypeInfo targetType, int conversionMode, Object
if (conversionMode != CONVERT_TO) {
if (conversionMode == CAST_TO) {
v = v.convertPrecision(targetType.getPrecision());
} else if (v.getPrecision() > targetType.getPrecision()) {
} else if (v.octetLength() > targetType.getPrecision()) {
throw v.getValueTooLongException(targetType, column);
}
}
Expand Down
9 changes: 0 additions & 9 deletions h2/src/main/org/h2/value/ValueLob.java
Original file line number Diff line number Diff line change
Expand Up @@ -219,15 +219,6 @@ public int hashCode() {
return hash;
}

/**
* Returns the precision.
*
* @return the precision
*/
public long getPrecision() {
return precision;
}

@Override
public boolean equals(Object other) {
if (!(other instanceof ValueLob))
Expand Down

0 comments on commit f440deb

Please sign in to comment.