Skip to content

Commit 0e1c7c8

Browse files
Fix Value.isRecordId() returning true for non-RecordId string values (#136)
1 parent 6c8ae96 commit 0e1c7c8

2 files changed

Lines changed: 39 additions & 1 deletion

File tree

src/main/rust/value.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ pub extern "system" fn Java_com_surrealdb_Value_isRecordId<'local>(
318318
ptr: jlong,
319319
) -> jboolean {
320320
let value = get_value_instance!(&mut env, ptr, || false as jboolean);
321-
value.is_record() as jboolean
321+
matches!(value.as_ref(), Value::RecordId(_)) as jboolean
322322
}
323323

324324
#[no_mangle]

src/test/java/com/surrealdb/ValueTypesTests.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.Optional;
55

66
import static org.junit.jupiter.api.Assertions.assertEquals;
7+
import static org.junit.jupiter.api.Assertions.assertFalse;
78
import static org.junit.jupiter.api.Assertions.assertNotNull;
89
import static org.junit.jupiter.api.Assertions.assertTrue;
910
import org.junit.jupiter.api.Disabled;
@@ -77,6 +78,43 @@ void valueMutCreateTable() {
7778
// Conversion to Value happens via DB; we just ensure creation doesn't throw
7879
}
7980

81+
@Test
82+
void isRecordIdReturnsFalseForUrlStrings() {
83+
try (Surreal surreal = new Surreal()) {
84+
surreal.connect("memory").useNs("test").useDb("test");
85+
Response r = surreal.query("RETURN 'https://example.com/avatar/001.png'");
86+
Value v = r.take(0);
87+
assertTrue(v.isString());
88+
assertFalse(v.isRecordId());
89+
}
90+
}
91+
92+
@Test
93+
void isRecordIdReturnsFalseForColonStrings() {
94+
try (Surreal surreal = new Surreal()) {
95+
surreal.connect("memory").useNs("test").useDb("test");
96+
Response r = surreal.query("RETURN 'key:value'");
97+
Value v = r.take(0);
98+
assertTrue(v.isString());
99+
assertFalse(v.isRecordId());
100+
}
101+
}
102+
103+
@Test
104+
void isRecordIdReturnsTrueForActualRecordId() {
105+
try (Surreal surreal = new Surreal()) {
106+
surreal.connect("memory").useNs("test").useDb("test");
107+
surreal.query("CREATE person:1 SET name = 'Test'");
108+
Response r = surreal.query("SELECT * FROM person:1");
109+
Value v = r.take(0);
110+
assertTrue(v.isArray());
111+
Value first = v.getArray().get(0);
112+
assertTrue(first.isObject());
113+
Value id = first.getObject().get("id");
114+
assertTrue(id.isRecordId());
115+
}
116+
}
117+
80118
@Test
81119
void valueRangeFromQuery() {
82120
try (Surreal surreal = new Surreal()) {

0 commit comments

Comments
 (0)