Skip to content

Commit

Permalink
Implements thing,id,uuid,long
Browse files Browse the repository at this point in the history
  • Loading branch information
emmanuel-keller committed Jun 22, 2024
1 parent 0d08886 commit f2f1cbd
Show file tree
Hide file tree
Showing 16 changed files with 334 additions and 17 deletions.
1 change: 0 additions & 1 deletion src/main/java/com/surrealdb/Array.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ public void close() {
}

@Override
@Deprecated
protected void finalize() throws Throwable {
try {
close();
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/surrealdb/Entry.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ public void close() {
}

@Override
@Deprecated
protected void finalize() throws Throwable {
try {
close();
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/surrealdb/EntryIterator.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ public void close() {
}

@Override
@Deprecated
protected void finalize() throws Throwable {
try {
close();
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/surrealdb/Geometry.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ public void close() {
}

@Override
@Deprecated
protected void finalize() throws Throwable {
try {
close();
Expand Down
76 changes: 76 additions & 0 deletions src/main/java/com/surrealdb/Id.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.surrealdb;

public class Id implements AutoCloseable {

private long id;

Id(long id) {
this.id = id;
}

private static native boolean deleteInstance(long id);

private static native boolean isLong(long id);

private static native long getLong(long id);

private static native boolean isString(long id);

private static native String getString(long id);

private static native boolean isArray(long id);

private static native Array getArray(long id);

private static native boolean isObject(long id);

private static native Object getObject(long id);

@Override
public void close() {
deleteInstance(id);
id = 0;
}

@Override
protected void finalize() throws Throwable {
try {
close();
} finally {
super.finalize();
}
}

public boolean isLong() {
return isLong(id);
}

public long getLong() {
return getLong(id);
}

public boolean isString() {
return isString(id);
}

public String getString() {
return getString(id);
}

public boolean isArray() {
return isArray(id);
}

public Array getArray() {
return getArray(id);
}

public boolean isObject() {
return isObject(id);
}

public Object getObject() {
return getObject(id);
}
}

3 changes: 1 addition & 2 deletions src/main/java/com/surrealdb/Object.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public String toString() {
public String toPrettyString() {
return toPrettyString(id);
}

public Value get(String key) {
return new Value(get(id, key));
}
Expand All @@ -47,7 +47,6 @@ public void close() {
}

@Override
@Deprecated
protected void finalize() throws Throwable {
try {
close();
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/surrealdb/Response.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ public void close() {
}

@Override
@Deprecated
protected void finalize() throws Throwable {
try {
close();
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/surrealdb/Surreal.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ public void close() {
}

@Override
@Deprecated
protected void finalize() throws Throwable {
try {
close();
Expand Down
13 changes: 12 additions & 1 deletion src/main/java/com/surrealdb/Thing.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,31 @@ public class Thing implements AutoCloseable {

private static native boolean deleteInstance(long id);

private static native String getTable(long id);

private static native long getId(long id);

@Override
public void close() {
deleteInstance(id);
id = 0;
}

@Override
@Deprecated
protected void finalize() throws Throwable {
try {
close();
} finally {
super.finalize();
}
}

public String getTable() {
return getTable(id);
}

public Id getId() {
return new Id(getId(id));
}
}

7 changes: 3 additions & 4 deletions src/main/java/com/surrealdb/Value.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public class Value implements AutoCloseable {

private static native boolean isUuid(long id);

private static native UUID getUuid(long id);
private static native String getUuid(long id);

private static native boolean isArray(long id);

Expand Down Expand Up @@ -109,7 +109,7 @@ public boolean isLong() {
return isLong(id);
}

public float getLong() {
public long getLong() {
return getLong(id);
}

Expand Down Expand Up @@ -142,7 +142,7 @@ public boolean isUuid() {
}

public UUID getUuid() {
return getUuid(id);
return UUID.fromString(getUuid(id));
}

public boolean isThing() {
Expand Down Expand Up @@ -176,7 +176,6 @@ public void close() {
}

@Override
@Deprecated
protected void finalize() throws Throwable {
try {
close();
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/surrealdb/ValueIterator.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ public void close() {
}

@Override
@Deprecated
protected void finalize() throws Throwable {
try {
close();
Expand Down
144 changes: 144 additions & 0 deletions src/main/rust/id.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
use std::ptr::null_mut;
use std::sync::Arc;

use jni::JNIEnv;
use jni::objects::JClass;
use jni::sys::{jboolean, jlong, jstring};
use surrealdb::sql::{Id, Value};

use crate::{create_instance, get_value_instance, new_string};
use crate::error::SurrealError;

#[no_mangle]
pub extern "system" fn Java_com_surrealdb_Id_isLong<'local>(
mut env: JNIEnv<'local>,
_class: JClass<'local>,
id: jlong,
) -> jboolean {
let value = get_value_instance!(&mut env, id, ||false as jboolean);
if let Value::Thing(o) = value.as_ref() {
if let Id::Number(_) = &o.id {
true as jboolean
} else {
false as jboolean
}
} else {
SurrealError::NullPointerException("Thing").exception(&mut env, || false as jboolean)
}
}

#[no_mangle]
pub extern "system" fn Java_com_surrealdb_Id_getLong<'local>(
mut env: JNIEnv<'local>,
_class: JClass<'local>,
id: jlong,
) -> jlong {
let value = get_value_instance!(&mut env, id, ||0);
if let Value::Thing(o) = value.as_ref() {
if let Id::Number(i) = &o.id {
return *i as jlong;
}
}
SurrealError::NullPointerException("Thing").exception(&mut env, || 0)
}

#[no_mangle]
pub extern "system" fn Java_com_surrealdb_Id_isString<'local>(
mut env: JNIEnv<'local>,
_class: JClass<'local>,
id: jlong,
) -> jboolean {
let value = get_value_instance!(&mut env, id, ||false as jboolean);
if let Value::Thing(o) = value.as_ref() {
if let Id::String(_) = &o.id {
true as jboolean
} else {
false as jboolean
}
} else {
SurrealError::NullPointerException("Thing").exception(&mut env, || false as jboolean)
}
}

#[no_mangle]
pub extern "system" fn Java_com_surrealdb_Id_getString<'local>(
mut env: JNIEnv<'local>,
_class: JClass<'local>,
id: jlong,
) -> jstring {
let value = get_value_instance!(&mut env, id, ||null_mut());
if let Value::Thing(o) = value.as_ref() {
if let Id::String(s) = &o.id {
new_string!(&mut env, s, ||null_mut())
}
}
SurrealError::NullPointerException("Thing").exception(&mut env, || null_mut())
}

#[no_mangle]
pub extern "system" fn Java_com_surrealdb_Id_isObject<'local>(
mut env: JNIEnv<'local>,
_class: JClass<'local>,
id: jlong,
) -> jboolean {
let value = get_value_instance!(&mut env, id, ||false as jboolean);
if let Value::Thing(o) = value.as_ref() {
if let Id::Object(_) = &o.id {
true as jboolean
} else {
false as jboolean
}
} else {
SurrealError::NullPointerException("Thing").exception(&mut env, || false as jboolean)
}
}

#[no_mangle]
pub extern "system" fn Java_com_surrealdb_Id_getObject<'local>(
mut env: JNIEnv<'local>,
_class: JClass<'local>,
id: jlong,
) -> jlong {
let value = get_value_instance!(&mut env, id, ||0);
if let Value::Thing(o) = value.as_ref() {
if let Id::Object(o) = &o.id {
//TODO no clone?
return create_instance(Arc::new(Value::Object(o.clone())));
}
}
SurrealError::NullPointerException("Thing").exception(&mut env, || 0)
}

#[no_mangle]
pub extern "system" fn Java_com_surrealdb_Id_isArray<'local>(
mut env: JNIEnv<'local>,
_class: JClass<'local>,
id: jlong,
) -> jboolean {
let value = get_value_instance!(&mut env, id, ||false as jboolean);
if let Value::Thing(o) = value.as_ref() {
if let Id::Array(_) = &o.id {
true as jboolean
} else {
false as jboolean
}
} else {
SurrealError::NullPointerException("Thing").exception(&mut env, || false as jboolean)
}
}

#[no_mangle]
pub extern "system" fn Java_com_surrealdb_Id_getArray<'local>(
mut env: JNIEnv<'local>,
_class: JClass<'local>,
id: jlong,
) -> jlong {
let value = get_value_instance!(&mut env, id, ||0);
if let Value::Thing(o) = value.as_ref() {
if let Id::Array(a) = &o.id {
//TODO no clone?
return create_instance(Arc::new(Value::Array(a.clone())));
}
}
SurrealError::NullPointerException("Thing").exception(&mut env, || 0)
}
2 changes: 2 additions & 0 deletions src/main/rust/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ mod response;
mod value;
mod object;
mod array;
mod thing;
mod id;


static TOKIO_RUNTIME: Lazy<Runtime> =
Expand Down
Loading

0 comments on commit f2f1cbd

Please sign in to comment.