io.yawp.driver.postgresql.PGQueryDriver Maven / Gradle / Ivy
package io.yawp.driver.postgresql;
import io.yawp.driver.api.QueryDriver;
import io.yawp.driver.postgresql.datastore.*;
import io.yawp.driver.postgresql.sql.ConnectionManager;
import io.yawp.repository.FutureObject;
import io.yawp.repository.IdRef;
import io.yawp.repository.Repository;
import io.yawp.repository.query.QueryBuilder;
import org.apache.commons.lang3.concurrent.ConcurrentUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Future;
public class PGQueryDriver implements QueryDriver {
private Repository r;
private Datastore datastore;
private EntityToObjectConverter toObject;
public PGQueryDriver(Repository r, ConnectionManager connectionManager) {
this.r = r;
this.datastore = Datastore.create(connectionManager);
this.toObject = new EntityToObjectConverter(r);
}
@SuppressWarnings("unchecked")
@Override
public List objects(QueryBuilder> builder) {
try {
List queryResult = generateResults(builder, false);
List objects = new ArrayList();
for (Entity entity : queryResult) {
objects.add((T) toObject.convert(builder.getModel(), entity));
}
return objects;
} catch (FalsePredicateException e) {
return Collections.emptyList();
}
}
@SuppressWarnings("unchecked")
@Override
public List> ids(QueryBuilder> builder) {
try {
List queryResult = generateResults(builder, false);
List> ids = new ArrayList>();
for (Entity entity : queryResult) {
ids.add((IdRef) IdRefToKey.toIdRef(r, entity.getKey(), builder.getModel()));
}
return ids;
} catch (FalsePredicateException e) {
return Collections.emptyList();
}
}
@SuppressWarnings("unchecked")
@Override
public T fetch(IdRef id) {
try {
Key key = IdRefToKey.toKey(r, id);
Entity entity = datastore.get(key);
return (T) toObject.convert(id.getModel(), entity);
} catch (EntityNotFoundException e) {
return null;
}
}
@Override
public FutureObject fetchAsync(IdRef id) {
T object = fetch(id);
Future> futureObject = ConcurrentUtils.constantFuture(object);
return new FutureObject(r, futureObject);
}
// query
private List generateResults(QueryBuilder> builder, boolean keysOnly) throws FalsePredicateException {
return datastore.query(new Query(builder, keysOnly));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy