提交 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 { ...@@ -1551,12 +1551,23 @@ public class Function extends Expression implements FunctionCall {
case ARRAY_CONCAT: { case ARRAY_CONCAT: {
final ValueArray array = (ValueArray) v0.convertTo(Value.ARRAY); final ValueArray array = (ValueArray) v0.convertTo(Value.ARRAY);
final ValueArray array2 = (ValueArray) v1.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; break;
} }
case ARRAY_APPEND: { case ARRAY_APPEND: {
final ValueArray array = (ValueArray) v0.convertTo(Value.ARRAY); 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; break;
} }
case ARRAY_SLICE: { case ARRAY_SLICE: {
......
...@@ -63,40 +63,6 @@ public class ValueArray extends ValueCollectionBase { ...@@ -63,40 +63,6 @@ public class ValueArray extends ValueCollectionBase {
return (ValueArray) EMPTY; 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 @Override
public int getType() { public int getType() {
return Value.ARRAY; return Value.ARRAY;
......
...@@ -383,31 +383,6 @@ public class TestValue extends TestDb { ...@@ -383,31 +383,6 @@ public class TestValue extends TestDb {
got = src.convertPrecision(0, true); got = src.convertPrecision(0, true);
assertEquals(exp, got); assertEquals(exp, got);
assertEquals(String.class, ((ValueArray) got).getComponentType()); 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() { private void testUUID() {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论