提交 e6ceeb67 authored 作者: sylvain-ilm's avatar sylvain-ilm

remove new methods from ValueArray

上级 498b38ab
......@@ -1551,12 +1551,23 @@ public class Function extends Expression implements FunctionCall {
case ARRAY_CONCAT: {
final ValueArray array = (ValueArray) v0.convertTo(Value.ARRAY);
final ValueArray array2 = (ValueArray) v1.convertTo(Value.ARRAY);
result = array.concatenate(array2);
if (!array.getComponentType().equals(array2.getComponentType()))
throw DbException.get(ErrorCode.GENERAL_ERROR_1, "Expected component type " + array.getComponentType()
+ " but got " + array2.getComponentType());
final Value[] res = Arrays.copyOf(array.getList(), array.getList().length + array2.getList().length);
System.arraycopy(array2.getList(), 0, res, array.getList().length, array2.getList().length);
result = ValueArray.get(array.getComponentType(), res);
break;
}
case ARRAY_APPEND: {
final ValueArray array = (ValueArray) v0.convertTo(Value.ARRAY);
result = array.append(v1);
if (v1 != ValueNull.INSTANCE && array.getComponentType() != Object.class
&& !array.getComponentType().isInstance(v1.getObject()))
throw DbException.get(ErrorCode.GENERAL_ERROR_1,
"Expected component type " + array.getComponentType() + " but got " + v1.getClass());
final Value[] res = Arrays.copyOf(array.getList(), array.getList().length + 1);
res[array.getList().length] = v1;
result = ValueArray.get(array.getComponentType(), res);
break;
}
case ARRAY_SLICE: {
......
......@@ -63,40 +63,6 @@ public class ValueArray extends ValueCollectionBase {
return (ValueArray) EMPTY;
}
/**
* Create an array value by concatenating this and the passed value.
*
* @param o an array to add.
* @return a new array.
* @throws DbException if {@link #getComponentType() component types} aren't equal.
*/
public Value concatenate(ValueArray o) {
if (!this.getComponentType().equals(o.getComponentType()))
throw DbException.get(ErrorCode.GENERAL_ERROR_1,
"Expected component type " + this.getComponentType() + " but got " + o.getComponentType());
final Value[] res = Arrays.copyOf(this.getList(), this.getList().length + o.getList().length);
System.arraycopy(o.getList(), 0, res, this.getList().length, o.getList().length);
return ValueArray.get(this.getComponentType(), res);
}
/**
* Create an array value by adding a new item at the end.
*
* @param item the value to add.
* @return a new array.
* @throws DbException if <code>item</code> is of the wrong {@link #getComponentType() type}.
*/
public Value append(Value item) {
if (item != ValueNull.INSTANCE && this.getComponentType() != Object.class
&& !this.getComponentType().isInstance(item.getObject()))
throw DbException.get(ErrorCode.GENERAL_ERROR_1,
"Expected component type " + this.getComponentType() + " but got " + item.getClass());
final Value[] res = Arrays.copyOf(this.getList(), this.getList().length + 1);
res[this.getList().length] = item;
return ValueArray.get(this.getComponentType(), res);
}
@Override
public int getType() {
return Value.ARRAY;
......
......@@ -383,31 +383,6 @@ public class TestValue extends TestDb {
got = src.convertPrecision(0, true);
assertEquals(exp, got);
assertEquals(String.class, ((ValueArray) got).getComponentType());
// concat
// test here rather than in a script since we can't specify the componentType in SQL.
{
ValueArray stringArray_1 = ValueArray.get(String.class, new Value[] { ValueString.get("1") });
ValueArray stringArray_2 = ValueArray.get(String.class, new Value[] { ValueString.get("2") });
final ValueArray stringArray_1_2 = ValueArray.get(String.class,
new Value[] { ValueString.get("1"), ValueString.get("2") });
assertEquals(stringArray_1_2, stringArray_1.append(stringArray_2.getList()[0]));
assertEquals(stringArray_1_2, stringArray_1.concatenate(stringArray_2));
ValueArray intArray = ValueArray.get(Integer.class, new Value[] { ValueInt.get(2) });
try {
stringArray_1.append(intArray.getList()[0]);
fail("Should have thrown since an int cannot be added to String[]");
} catch (IllegalArgumentException e) {
// OK
}
try {
stringArray_1.concatenate(intArray);
fail("Should have thrown since an int[] cannot be added to String[]");
} catch (IllegalArgumentException e) {
// OK
}
}
}
private void testUUID() {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论