Skip to content

Commit

Permalink
fixed q query with attrs & added test
Browse files Browse the repository at this point in the history
  • Loading branch information
ScorpioBroker committed Aug 17, 2023
1 parent 28003e1 commit 8e2abdc
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,29 +51,41 @@ public int toSql(StringBuilder query, Tuple tuple, int dollar) {
}

public int toSqlConstructEntity(StringBuilder query, Tuple tuple, int dollar) {
List<String> attrsList = Lists.newArrayList(getAttrs());
attrsList.add(NGSIConstants.JSON_LD_ID);
attrsList.add(NGSIConstants.JSON_LD_TYPE);
attrsList.add(NGSIConstants.NGSI_LD_CREATED_AT);
attrsList.add(NGSIConstants.NGSI_LD_MODIFIED_AT);
for (String attrs : attrsList) {
query.append("JSONB_BUILD_OBJECT($");

query.append("JSONB_BUILD_OBJECT('");
query.append(NGSIConstants.JSON_LD_ID);
query.append("', ENTITY -> '");
query.append(NGSIConstants.JSON_LD_ID);
query.append("', '");
query.append(NGSIConstants.JSON_LD_TYPE);
query.append("', ENTITY -> '");
query.append(NGSIConstants.JSON_LD_TYPE);
query.append("', '");
query.append(NGSIConstants.NGSI_LD_CREATED_AT);
query.append("', ENTITY -> '");
query.append(NGSIConstants.NGSI_LD_CREATED_AT);
query.append("', '");
query.append(NGSIConstants.NGSI_LD_MODIFIED_AT);
query.append("', ENTITY -> '");
query.append(NGSIConstants.NGSI_LD_MODIFIED_AT);
query.append("'");

for (String attrs : getAttrs()) {
query.append(",$");
query.append(dollar);
query.append(", ENTITY->$");
query.append(dollar);
query.append(") ||");
tuple.addString(attrs);
dollar++;
}
query.append("CASE WHEN ENTITY-> $");
query.append(dollar);
query.append(" IS NOT NULL THEN JSONB_BUILD_OBJECT( $");
query.append(dollar);
query.append(" , ENTITY-> $");
query.append(dollar);
query.append(" ) ELSE '{}'::jsonb END");
tuple.addString(NGSIConstants.NGSI_LD_SCOPE);
dollar++;
query.append(") || ");
query.append("CASE WHEN ENTITY-> '");
query.append(NGSIConstants.NGSI_LD_SCOPE);
query.append("' IS NOT NULL THEN JSONB_BUILD_OBJECT('");
query.append(NGSIConstants.NGSI_LD_SCOPE);
query.append("' , ENTITY-> '");
query.append(NGSIConstants.NGSI_LD_SCOPE);
query.append("' ) ELSE '{}'::jsonb END");
return dollar;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -930,8 +930,10 @@ private void addItemToTupel(Tuple tuple, String listItem) {
if (listItem.toLowerCase().equals("true") || listItem.toLowerCase().equals("false")) {
tuple.addBoolean(Boolean.parseBoolean(listItem));
} else {
if (listItem.charAt(0) == '"' && listItem.charAt(listItem.length() - 1) == '"') {
listItem = listItem.substring(1, listItem.length() - 1);
if (!listItem.matches(DATETIME)) {
if (listItem.charAt(0) != '"' || listItem.charAt(listItem.length() - 1) != '"') {
listItem = '"' + listItem + '"';
}
}
tuple.addString(listItem);
}
Expand Down Expand Up @@ -1152,8 +1154,8 @@ public int[] toTempSql(StringBuilder sql, int dollarCount, Tuple tuple, int char

public int toTempSql(StringBuilder sql, StringBuilder laterSql, Tuple tuple, int dollarCount) {
QQueryTerm current = this;
while(current != null) {

while (current != null) {
if (firstChild != null) {
laterSql.append("(");
dollarCount = firstChild.toTempSql(sql, laterSql, tuple, dollarCount);
Expand All @@ -1163,29 +1165,25 @@ public int toTempSql(StringBuilder sql, StringBuilder laterSql, Tuple tuple, int
laterSql.append(dollarCount);
laterSql.append(" = any(attribs)");
tuple.addString(linkHeaders.expandIri(current.attribute, false, true, null, null));
if(current.hasNext()) {
if(current.isNextAnd()) {
if (current.hasNext()) {
if (current.isNextAnd()) {
laterSql.append(" AND ");
}else {
} else {
laterSql.append(" OR ");
}
}
dollarCount++;
if(current.getOperant() != null) {
if (current.getOperant() != null) {
sql.append(" WHEN TEAI.attributeid=$");
sql.append(dollarCount-1);
sql.append(dollarCount - 1);
sql.append(" THEN (");
dollarCount = temporalSqlWherePart(sql, dollarCount, tuple, current, null);

dollarCount = temporalSqlWherePart(sql, dollarCount, tuple, current, null);
}




current = current.getNext();
}




return dollarCount;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import io.vertx.mutiny.sqlclient.RowIterator;
import io.vertx.mutiny.sqlclient.RowSet;
import io.vertx.mutiny.sqlclient.Tuple;
import io.vertx.pgclient.PgException;

@Singleton
public class QueryDAO {
Expand Down Expand Up @@ -814,6 +815,11 @@ public Uni<Tuple2<Map<String, Map<String, Object>>, List<String>>> queryForEntit
});
return Tuple2.of(entities, entityIds);
});
}).onFailure().recoverWithUni(e -> {
if (e instanceof PgException pge) {
logger.debug(pge.getPosition());
}
return Uni.createFrom().failure(e);
});
}

Expand Down
87 changes: 86 additions & 1 deletion api-test.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"info": {
"_postman_id": "bf4b6211-f232-48e4-9e40-0bdf161e3698",
"_postman_id": "d3b8a692-7792-481e-bdc1-a7317ec4e0ad",
"name": "API Test",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
Expand Down Expand Up @@ -10712,6 +10712,71 @@
},
"response": []
},
{
"name": "Query for entity type tbf and q",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.test(\"Status code is 200\", function () {\r",
" pm.response.to.have.status(200);\r",
"});\r",
"\r",
"pm.test(\"Validate that result on contains entity to be found\", function () {\r",
" var jsonData = pm.response.json();\r",
" pm.expect(jsonData.length).to.eql(1);\r",
" var entity = jsonData[0];\r",
" var keys = Object.keys(entity);\r",
" pm.expect(keys.length).to.eql(3);\r",
" pm.expect(keys).to.contain(\"id\");\r",
" pm.expect(keys).to.contain(\"type\");\r",
" pm.expect(keys).to.contain(\"stringproperty\");\r",
" pm.expect(keys).to.not.contain(\"intproperty\");\r",
" \r",
"});"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [
{
"key": "Accept",
"value": "application/json",
"type": "default"
}
],
"url": {
"raw": "{{query-manager}}/ngsi-ld/v1/entities?type={{entityTypeTBF}}&attrs=stringproperty&q=stringproperty==teststring",
"host": [
"{{query-manager}}"
],
"path": [
"ngsi-ld",
"v1",
"entities"
],
"query": [
{
"key": "type",
"value": "{{entityTypeTBF}}"
},
{
"key": "attrs",
"value": "stringproperty"
},
{
"key": "q",
"value": "stringproperty==teststring"
}
]
}
},
"response": []
},
{
"name": "Delete Entity TBF",
"event": [
Expand Down Expand Up @@ -46620,6 +46685,26 @@
{
"key": "cSourceId",
"value": ""
},
{
"key": "createdTBF",
"value": ""
},
{
"key": "entityIdTBF",
"value": ""
},
{
"key": "entityTypeTBF",
"value": ""
},
{
"key": "createdTBNF",
"value": ""
},
{
"key": "entityIdTBNF",
"value": ""
}
]
}

0 comments on commit 8e2abdc

Please sign in to comment.