Skip to content

Commit 0f0913e

Browse files
authored
ArcadeData#3991 fix(cypher): valueType() missing NOT NULL suffix for non-null values (ArcadeData#3995)
1 parent 4e9ad90 commit 0f0913e

2 files changed

Lines changed: 34 additions & 24 deletions

File tree

engine/src/main/java/com/arcadedb/function/convert/ValueTypeFunction.java

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,22 @@ public String getName() {
4343
public Object execute(final Object[] args, final CommandContext context) {
4444
if (args.length != 1)
4545
throw new CommandExecutionException("valueType() requires exactly one argument");
46-
if (args[0] == null)
47-
return "NULL";
4846
final Object value = args[0];
49-
if (value instanceof Long || value instanceof Integer || value instanceof Short || value instanceof Byte)
50-
return "INTEGER";
51-
if (value instanceof Double || value instanceof Float)
52-
return "FLOAT";
53-
if (value instanceof String)
54-
return "STRING";
55-
if (value instanceof Boolean)
56-
return "BOOLEAN";
57-
if (value instanceof Vertex)
58-
return "NODE";
59-
if (value instanceof Edge)
60-
return "RELATIONSHIP";
61-
if (value instanceof List)
62-
return "LIST<ANY>";
63-
if (value instanceof Map)
64-
return "MAP";
65-
return value.getClass().getSimpleName().toUpperCase();
47+
return switch (value) {
48+
case null -> "NULL";
49+
case Long l -> "INTEGER NOT NULL";
50+
case Integer i -> "INTEGER NOT NULL";
51+
case Short s -> "INTEGER NOT NULL";
52+
case Byte b -> "INTEGER NOT NULL";
53+
case Double d -> "FLOAT NOT NULL";
54+
case Float f -> "FLOAT NOT NULL";
55+
case String s -> "STRING NOT NULL";
56+
case Boolean b -> "BOOLEAN NOT NULL";
57+
case Vertex vertex -> "NODE NOT NULL";
58+
case Edge edge -> "RELATIONSHIP NOT NULL";
59+
case List list -> "LIST<ANY> NOT NULL";
60+
case Map map -> "MAP NOT NULL";
61+
default -> value.getClass().getSimpleName().toUpperCase() + " NOT NULL";
62+
};
6663
}
6764
}

engine/src/test/java/com/arcadedb/query/opencypher/OpenCypherMissingFunctionsTest.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -373,31 +373,31 @@ void nullIfNotEqual() {
373373
void valueTypeInteger() {
374374
try (final ResultSet rs = database.command("opencypher", "RETURN valueType(42) AS val")) {
375375
assertThat(rs.hasNext()).isTrue();
376-
assertThat(rs.next().<String>getProperty("val")).isEqualTo("INTEGER");
376+
assertThat(rs.next().<String>getProperty("val")).isEqualTo("INTEGER NOT NULL");
377377
}
378378
}
379379

380380
@Test
381381
void valueTypeFloat() {
382382
try (final ResultSet rs = database.command("opencypher", "RETURN valueType(3.14) AS val")) {
383383
assertThat(rs.hasNext()).isTrue();
384-
assertThat(rs.next().<String>getProperty("val")).isEqualTo("FLOAT");
384+
assertThat(rs.next().<String>getProperty("val")).isEqualTo("FLOAT NOT NULL");
385385
}
386386
}
387387

388388
@Test
389389
void valueTypeString() {
390390
try (final ResultSet rs = database.command("opencypher", "RETURN valueType('hello') AS val")) {
391391
assertThat(rs.hasNext()).isTrue();
392-
assertThat(rs.next().<String>getProperty("val")).isEqualTo("STRING");
392+
assertThat(rs.next().<String>getProperty("val")).isEqualTo("STRING NOT NULL");
393393
}
394394
}
395395

396396
@Test
397397
void valueTypeBoolean() {
398398
try (final ResultSet rs = database.command("opencypher", "RETURN valueType(true) AS val")) {
399399
assertThat(rs.hasNext()).isTrue();
400-
assertThat(rs.next().<String>getProperty("val")).isEqualTo("BOOLEAN");
400+
assertThat(rs.next().<String>getProperty("val")).isEqualTo("BOOLEAN NOT NULL");
401401
}
402402
}
403403

@@ -413,7 +413,20 @@ void valueTypeNull() {
413413
void valueTypeList() {
414414
try (final ResultSet rs = database.command("opencypher", "RETURN valueType([1,2,3]) AS val")) {
415415
assertThat(rs.hasNext()).isTrue();
416-
assertThat(rs.next().<String>getProperty("val")).isEqualTo("LIST<ANY>");
416+
assertThat(rs.next().<String>getProperty("val")).isEqualTo("LIST<ANY> NOT NULL");
417+
}
418+
}
419+
420+
@Test
421+
void valueTypeNotNullSuffixForAllLiterals() {
422+
// Regression test for https://github.com/ArcadeData/arcadedb/issues/3991
423+
try (final ResultSet rs = database.command("opencypher",
424+
"RETURN valueType('abc') as t1, valueType(1) as t2, valueType(true) as t3")) {
425+
assertThat(rs.hasNext()).isTrue();
426+
final Result row = rs.next();
427+
assertThat(row.<String>getProperty("t1")).isEqualTo("STRING NOT NULL");
428+
assertThat(row.<String>getProperty("t2")).isEqualTo("INTEGER NOT NULL");
429+
assertThat(row.<String>getProperty("t3")).isEqualTo("BOOLEAN NOT NULL");
417430
}
418431
}
419432

0 commit comments

Comments
 (0)