forked from h2database/h2database
/
ValueJavaObject.java
73 lines (63 loc) · 2.04 KB
/
ValueJavaObject.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
* Copyright 2004-2021 H2 Group. Multiple-Licensed under the MPL 2.0,
* and the EPL 1.0 (https://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.value;
import org.h2.api.ErrorCode;
import org.h2.engine.Constants;
import org.h2.engine.SysProperties;
import org.h2.message.DbException;
import org.h2.util.StringUtils;
import org.h2.util.Utils;
/**
* Implementation of the JAVA_OBJECT data type.
*/
public final class ValueJavaObject extends ValueBytesBase {
private static final ValueJavaObject EMPTY = new ValueJavaObject(Utils.EMPTY_BYTES);
protected ValueJavaObject(byte[] v) {
super(v);
int length = value.length;
if (length > Constants.MAX_STRING_LENGTH) {
throw DbException.getValueTooLongException(getTypeName(getValueType()),
StringUtils.convertBytesToHex(value, 41), length);
}
}
/**
* Get or create a java object value for the given byte array.
* Do not clone the data.
*
* @param b the byte array
* @return the value
*/
public static ValueJavaObject getNoCopy(byte[] b) {
int length = b.length;
if (length == 0) {
return EMPTY;
}
ValueJavaObject obj = new ValueJavaObject(b);
if (length > SysProperties.OBJECT_CACHE_MAX_PER_ELEMENT_SIZE) {
return obj;
}
return (ValueJavaObject) Value.cache(obj);
}
@Override
public TypeInfo getType() {
return TypeInfo.TYPE_JAVA_OBJECT;
}
@Override
public int getValueType() {
return JAVA_OBJECT;
}
@Override
public StringBuilder getSQL(StringBuilder builder, int sqlFlags) {
if ((sqlFlags & NO_CASTS) == 0) {
return super.getSQL(builder.append("CAST("), DEFAULT_SQL_FLAGS).append(" AS JAVA_OBJECT)");
}
return super.getSQL(builder, DEFAULT_SQL_FLAGS);
}
@Override
public String getString() {
throw DbException.get(ErrorCode.DATA_CONVERSION_ERROR_1, "JAVA_OBJECT to CHARACTER VARYING");
}
}