Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
e6ceeb67
提交
e6ceeb67
authored
6 年前
作者:
sylvain-ilm
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
remove new methods from ValueArray
上级
498b38ab
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
13 行增加
和
61 行删除
+13
-61
Function.java
h2/src/main/org/h2/expression/function/Function.java
+13
-2
ValueArray.java
h2/src/main/org/h2/value/ValueArray.java
+0
-34
TestValue.java
h2/src/test/org/h2/test/unit/TestValue.java
+0
-25
没有找到文件。
h2/src/main/org/h2/expression/function/Function.java
浏览文件 @
e6ceeb67
...
@@ -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:
{
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueArray.java
浏览文件 @
e6ceeb67
...
@@ -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
;
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/unit/TestValue.java
浏览文件 @
e6ceeb67
...
@@ -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
()
{
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论