Unverified 提交 c6c72d96 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov 提交者: GitHub

Merge pull request #1169 from katzyn/array_contains

Fix comparison in ARRAY_CONTAINS
......@@ -4155,7 +4155,7 @@ ISO_YEAR(CREATED)
ARRAY_GET(arrayExpression, indexExpression)
","
Returns one element of an array.
This method returns a string.
Returns NULL if there is no such element or array is NULL.
","
CALL ARRAY_GET(('Hello', 'World'), 2)
"
......@@ -4164,6 +4164,7 @@ CALL ARRAY_GET(('Hello', 'World'), 2)
ARRAY_LENGTH(arrayExpression)
","
Returns the length of an array.
Returns NULL if the specified array is NULL.
","
CALL ARRAY_LENGTH(('Hello', 'World'))
"
......@@ -4171,7 +4172,8 @@ CALL ARRAY_LENGTH(('Hello', 'World'))
"Functions (System)","ARRAY_CONTAINS","
ARRAY_CONTAINS(arrayExpression, value)
","
Returns a boolean true if the array contains the value.
Returns a boolean TRUE if the array contains the value or FALSE if it does not contain it.
Returns NULL if the specified array is NULL.
","
CALL ARRAY_CONTAINS(('Hello', 'World'), 'Hello')
"
......
......@@ -414,7 +414,7 @@ public class Function extends Expression implements FunctionCall {
addFunctionNotDeterministic("CURRVAL", CURRVAL,
VAR_ARGS, Value.LONG);
addFunction("ARRAY_GET", ARRAY_GET,
2, Value.STRING);
2, Value.NULL);
addFunction("ARRAY_CONTAINS", ARRAY_CONTAINS,
2, Value.BOOLEAN, false, true, true);
addFunction("CSVREAD", CSVREAD,
......@@ -1054,11 +1054,13 @@ public class Function extends Expression implements FunctionCall {
Value v1 = getNullOrValue(session, args, values, 1);
Value[] list = ((ValueArray) v0).getList();
for (Value v : list) {
if (v.equals(v1)) {
if (database.areEqual(v, v1)) {
result = ValueBoolean.TRUE;
break;
}
}
} else {
result = ValueNull.INSTANCE;
}
break;
}
......
......@@ -180,10 +180,10 @@ public class TestMetaData extends TestBase {
stat.execute("insert into a values((1, 2))");
rs = stat.executeQuery("SELECT x[1] FROM a");
ResultSetMetaData rsMeta = rs.getMetaData();
assertEquals(Types.VARCHAR, rsMeta.getColumnType(1));
assertEquals(Types.NULL, rsMeta.getColumnType(1));
rs.next();
// assertEquals(String.class.getName(),
// rs.getObject(1).getClass().getName());
assertEquals(Integer.class.getName(),
rs.getObject(1).getClass().getName());
stat.execute("drop table a");
conn.close();
}
......
......@@ -22,10 +22,35 @@ select array_contains((null, 'two'), null);
>> TRUE
select array_contains(null, 'one');
>> FALSE
>> null
select array_contains(((1, 2), (3, 4)), (1, 2));
>> TRUE
select array_contains(((1, 2), (3, 4)), (5, 6));
>> FALSE
CREATE TABLE TEST (ID INT PRIMARY KEY AUTO_INCREMENT, A ARRAY);
> ok
INSERT INTO TEST (A) VALUES ((1L, 2L)), ((3L, 4L));
> update count: 2
SELECT ID, ARRAY_CONTAINS(A, 1L), ARRAY_CONTAINS(A, 2L), ARRAY_CONTAINS(A, 3L), ARRAY_CONTAINS(A, 4L) FROM TEST;
> ID ARRAY_CONTAINS(A, 1) ARRAY_CONTAINS(A, 2) ARRAY_CONTAINS(A, 3) ARRAY_CONTAINS(A, 4)
> -- -------------------- -------------------- -------------------- --------------------
> 1 TRUE TRUE FALSE FALSE
> 2 FALSE FALSE TRUE TRUE
> rows: 2
SELECT * FROM (
SELECT ID, ARRAY_CONTAINS(A, 1L), ARRAY_CONTAINS(A, 2L), ARRAY_CONTAINS(A, 3L), ARRAY_CONTAINS(A, 4L) FROM TEST
);
> ID ARRAY_CONTAINS(A, 1) ARRAY_CONTAINS(A, 2) ARRAY_CONTAINS(A, 3) ARRAY_CONTAINS(A, 4)
> -- -------------------- -------------------- -------------------- --------------------
> 1 TRUE TRUE FALSE FALSE
> 2 FALSE FALSE TRUE TRUE
> rows: 2
DROP TABLE TEST;
> ok
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论