Skip to content
Snippets Groups Projects
Verified Commit a3f87a26 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

WIP: SELECT for GRPC API

parent 37990553
Branches
Tags
2 merge requests!80Release 0.9,!72F grpc select
Pipeline #30334 failed
...@@ -611,44 +611,66 @@ public class CaosDBToGrpcConverters { ...@@ -611,44 +611,66 @@ public class CaosDBToGrpcConverters {
SelectQueryRow.Builder result = SelectQueryRow.newBuilder(); SelectQueryRow.Builder result = SelectQueryRow.newBuilder();
for (Selection s : selections) { for (Selection s : selections) {
org.caosdb.api.entity.v1.Value.Builder value = getValue(s, e); org.caosdb.api.entity.v1.Value.Builder value = getSelectedValue(s, e);
result.addCells(value); result.addCells(value);
} }
return result; return result;
} }
private org.caosdb.api.entity.v1.Value.Builder getValue(Selection s, EntityInterface e) { private org.caosdb.api.entity.v1.Value.Builder getSelectedValue(Selection s, EntityInterface e) {
org.caosdb.api.entity.v1.Value.Builder result = org.caosdb.api.entity.v1.Value.newBuilder(); org.caosdb.api.entity.v1.Value.Builder result = org.caosdb.api.entity.v1.Value.newBuilder();
String selector = s.getSelector(); String selector = s.getSelector();
switch (selector) { switch (selector) {
case "value":
if(e.hasValue()) {
result = convert(e.getValue());
}
break;
case "name": case "name":
if (e.hasName()) { if (e.hasName()) {
result.setScalarValue(ScalarValue.newBuilder().setStringValue(e.getName())); result.setScalarValue(convertStringValue(e.getName()));
} }
break; break;
case "id": case "id":
result.setScalarValue(ScalarValue.newBuilder().setStringValue(e.getId().toString())); result.setScalarValue(convertStringValue(e.getId().toString()));
break; break;
case "description": case "description":
if (e.hasDescription()) { if (e.hasDescription()) {
result.setScalarValue(ScalarValue.newBuilder().setStringValue(e.getDescription())); result.setScalarValue(convertStringValue(e.getDescription()));
} }
break; break;
case "unit": case "unit":
if (e.hasUnit()) { if (e.hasUnit()) {
final String unit = getStringUnit(e); final String unit = getStringUnit(e);
result.setScalarValue(ScalarValue.newBuilder().setStringValue(unit)); result.setScalarValue(convertStringValue(unit));
}
break;
case "datatype":
if (e.hasDatatype()) {
result.setScalarValue(convertStringValue(e.getDatatype().toString()));
} }
break; break;
// TODO path, hash case "path":
if (e.hasFileProperties() && e.getFileProperties().hasPath()) {
result.setScalarValue(convertStringValue(e.getFileProperties().getPath()));
}
case "parent":
if (e.hasParents()) {
CollectionValues.Builder parents = CollectionValues.newBuilder();
for (org.caosdb.server.entity.wrapper.Parent p : e.getParents()) {
parents.addValues(ScalarValue.newBuilder().setStringValue(p.getName()));
}
result.setListValues(parents);
}
default: default:
// selector for a normal property // selector for a normal property
for (Property p : e.getProperties()) { for (Property p : e.getProperties()) {
// TODO(tf) - handle multiple matching properties
if (p.getName() != null && p.getName().equals(selector)) { if (p.getName() != null && p.getName().equals(selector)) {
if (s.getSubselection() == null) { if (s.getSubselection() == null) {
// no subselection -> just return the actual value // no subselection -> just return the actual value
...@@ -657,44 +679,54 @@ public class CaosDBToGrpcConverters { ...@@ -657,44 +679,54 @@ public class CaosDBToGrpcConverters {
} catch (Message m) { } catch (Message m) {
throw new TransactionException(m); throw new TransactionException(m);
} }
if (!p.hasValue()) {
continue; result = convert(p.getValue());
} else if (p.getValue() instanceof CollectionValue) {
} else if (p.getValue() instanceof GenericValue) {
if (((GenericValue) p.getValue()).getValue() instanceof Double) {
result.setScalarValue(
ScalarValue.newBuilder()
.setDoubleValue((Double) ((GenericValue) p.getValue()).getValue()));
} else if (((GenericValue) p.getValue()).getValue() instanceof Integer) {
result.setScalarValue(
ScalarValue.newBuilder()
.setIntegerValue((Integer) ((GenericValue) p.getValue()).getValue()));
} else {
result.setScalarValue(
ScalarValue.newBuilder().setStringValue(p.getValue().toString()));
}
} else if (p.getValue() instanceof BooleanValue) {
result.setScalarValue(
ScalarValue.newBuilder()
.setBooleanValue(((BooleanValue) p.getValue()).getValue()));
} else {
result.setScalarValue(
ScalarValue.newBuilder().setStringValue(p.getValue().toString()));
}
} else { } else {
// with subselection, e.g. p1.unit, site.geolocation.longitude // with subselection, e.g. p1.unit, site.geolocation.longitude
switch (s.getSubselection().getSelector()) { switch (s.getSubselection().getSelector()) {
case "name":
if (p.hasName()) {
result.setScalarValue(convertStringValue(p.getName()));
}
break;
case "id":
result.setScalarValue(convertStringValue(p.getId().toString()));
break;
case "description":
if (p.hasDescription()) {
result.setScalarValue(convertStringValue(p.getDescription()));
}
break;
case "unit": case "unit":
final String unit = getStringUnit(p); final String unit = getStringUnit(p);
if (unit != null) { if (unit != null) {
result.setScalarValue(ScalarValue.newBuilder().setStringValue(unit)); result.setScalarValue(convertStringValue(unit));
} }
break; break;
// TODO name, description, id case "datatype":
if (p.hasDatatype()) {
result.setScalarValue(convertStringValue(p.getDatatype().toString()));
}
break;
case "value":
if(p.hasValue()) {
result = convert(p.getValue());
}
break;
default: default:
// normal property
Value v = p.getValue();
if (v instanceof ReferenceValue) {
EntityInterface referenced_entity = ((ReferenceValue) v).getEntity();
return getSelectedValue(s.getSubselection(), referenced_entity);
} else if (v instanceof CollectionValue) {
// TODO(tf)
}
break; break;
} }
} }
...@@ -702,7 +734,6 @@ public class CaosDBToGrpcConverters { ...@@ -702,7 +734,6 @@ public class CaosDBToGrpcConverters {
} }
break; break;
} }
// TODO Auto-generated method stub
return result; return result;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment