Skip to content

Commit

Permalink
Merge pull request #180 from kbss-cvut/development
Browse files Browse the repository at this point in the history
[0.22.2] Release
  • Loading branch information
ledsoft authored Jun 22, 2023
2 parents 934e249 + cb4f334 commit 381eb72
Show file tree
Hide file tree
Showing 30 changed files with 174 additions and 73 deletions.
4 changes: 2 additions & 2 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ ij_java_case_statement_on_separate_line = true
ij_java_catch_on_new_line = false
ij_java_class_annotation_wrap = split_into_lines
ij_java_class_brace_style = end_of_line
ij_java_class_count_to_use_import_on_demand = 5
ij_java_class_count_to_use_import_on_demand = 100
ij_java_class_names_in_javadoc = 1
ij_java_do_not_indent_top_level_class_members = false
ij_java_do_not_wrap_after_single_annotation = false
Expand Down Expand Up @@ -136,7 +136,7 @@ ij_java_method_parameters_new_line_after_left_paren = false
ij_java_method_parameters_right_paren_on_new_line = false
ij_java_method_parameters_wrap = normal
ij_java_modifier_list_wrap = false
ij_java_names_count_to_use_import_on_demand = 3
ij_java_names_count_to_use_import_on_demand = 100
ij_java_new_line_after_lparen_in_record_header = false
ij_java_parameter_annotation_wrap = off
ij_java_parentheses_expression_new_line_after_left_paren = false
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# JOPA - Release Notes

## 0.22.2 - 2023-06-22
- Fix an issue with commutativity of AND in SOQL when selection by entity identifier is used (Bug #178).

## 0.22.1 - 2023-06-07
- Allow using SPARQL SELECT queries without WHERE keyword (Bug #165).
- Allow disabling generation of annotation fields and the `Thing` class in OWL2Java (Enhancement #170).
Expand Down
2 changes: 1 addition & 1 deletion datatype/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<artifactId>jopa-all</artifactId>
<groupId>cz.cvut.kbss.jopa</groupId>
<version>0.22.1</version>
<version>0.22.2</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion jopa-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>cz.cvut.kbss.jopa</groupId>
<artifactId>jopa-all</artifactId>
<version>0.22.1</version>
<version>0.22.2</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion jopa-distribution/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>cz.cvut.kbss.jopa</groupId>
<artifactId>jopa-all</artifactId>
<version>0.22.1</version>
<version>0.22.2</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion jopa-impl/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>cz.cvut.kbss.jopa</groupId>
<artifactId>jopa-all</artifactId>
<version>0.22.1</version>
<version>0.22.2</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import cz.cvut.kbss.jopa.model.query.criteria.*;
import cz.cvut.kbss.jopa.query.criteria.*;
import cz.cvut.kbss.jopa.query.criteria.expressions.AbstractExpression;
import cz.cvut.kbss.jopa.query.soql.SoqlConstants;
import cz.cvut.kbss.jopa.utils.ErrorUtils;

import java.util.*;
Expand Down Expand Up @@ -174,22 +175,22 @@ public CriteriaQuery<T> having(Predicate... restrictions) {
*/
public String translateQuery(CriteriaParameterFiller parameterFiller) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("SELECT ");
stringBuilder.append(SoqlConstants.SELECT).append(' ');
if (isDistinct()) {
stringBuilder.append("DISTINCT ");
stringBuilder.append(SoqlConstants.DISTINCT).append(' ');
}
((AbstractExpression) query.getSelection()).setExpressionToQuery(stringBuilder, parameterFiller);

stringBuilder.append(" FROM ").append(((RootImpl) query.getRoot()).getJavaType().getSimpleName()).append(' ');
stringBuilder.append(' ').append(SoqlConstants.FROM).append(' ').append(((RootImpl) query.getRoot()).getJavaType().getSimpleName()).append(' ');
((RootImpl) query.getRoot()).setExpressionToQuery(stringBuilder, parameterFiller);

if (query.getWhere() != null && !query.getWhere().getExpressions().isEmpty()) {
stringBuilder.append(" WHERE ");
stringBuilder.append(' ').append(SoqlConstants.WHERE).append(' ');
((AbstractPredicate) query.getWhere()).setExpressionToQuery(stringBuilder, parameterFiller);
}

if (query.getGroupBy() != null && !query.getGroupBy().isEmpty()) {
stringBuilder.append(" GROUP BY ");
stringBuilder.append(' ').append(SoqlConstants.GROUP_BY).append(' ');
for (Expression groupBy : query.getGroupBy()) {
((AbstractExpression) groupBy).setExpressionToQuery(stringBuilder, parameterFiller);
}
Expand All @@ -201,11 +202,11 @@ public String translateQuery(CriteriaParameterFiller parameterFiller) {
}

if (!getOrderList().isEmpty()) {
stringBuilder.append(" ORDER BY ");
stringBuilder.append(' ').append(SoqlConstants.ORDER_BY).append(' ');
List<Order> orders = getOrderList();
for (int i = 0; i < orders.size(); i++) {
((AbstractExpression) orders.get(i).getExpression()).setExpressionToQuery(stringBuilder, parameterFiller);
stringBuilder.append(orders.get(i).isAscending() ? " ASC" : " DESC");
stringBuilder.append(' ').append(orders.get(i).isAscending() ? SoqlConstants.ASC : SoqlConstants.DESC);
if (orders.size() > 1 && (i + 1) != orders.size()) {
stringBuilder.append(", ");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import cz.cvut.kbss.jopa.model.query.criteria.ParameterExpression;
import cz.cvut.kbss.jopa.query.criteria.expressions.ExpressionLiteralImpl;
import cz.cvut.kbss.jopa.query.criteria.expressions.ParameterExpressionImpl;
import cz.cvut.kbss.jopa.query.soql.SoqlConstants;

import java.util.HashMap;
import java.util.Map;
Expand All @@ -40,7 +41,7 @@ public CriteriaParameterFiller() {
public String registerParameter(ExpressionLiteralImpl parameter) {
String name = generateParameterName();
literalParameters.put(name, parameter);
return ":" + name;
return SoqlConstants.VARIABLE_PREFIX + name;
}

/**
Expand All @@ -54,7 +55,7 @@ public String registerParameter(ParameterExpression parameter) {
String name = generateParameterName();
((ParameterExpressionImpl) parameter).setNameIfUnnamed(name);
}
return ":" + parameter.getName();
return SoqlConstants.VARIABLE_PREFIX + parameter.getName();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ private InOperator(boolean isNot) {

@Override
public String toFilterExpression(String parameter, String value) {
return parameter + " " + (isNot ? SoqlConstants.NOT_IN : SoqlConstants.IN) + " (" + value + ')';
return parameter + (isNot ? " " + SoqlConstants.NOT : "") + " " + SoqlConstants.IN + " (" + value + ')';
}

static InOperator in() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,56 @@
*/
public class SoqlConstants {

/**
* {@code SELECT} keyword.
*/
public static final String SELECT = "SELECT";

/**
* {@code DISTINCT} operator.
*/
public static final String DISTINCT = "DISTINCT";

/**
* {@code IN} operator.
* {@code FROM} keyword.
*/
public static final String IN = "IN";
public static final String FROM = "FROM";

/**
* {@code NOT IN} operator.
* {@code WHERE} keyword.
*/
public static final String NOT_IN = "NOT IN";
public static final String WHERE = "WHERE";

/**
* {@code IN} operator.
*/
public static final String IN = "IN";

/**
* {@code NOT} operator.
*/
public static final String NOT = "NOT";

/**
* {@code GROUP BY} statement.
*/
public static final String GROUP_BY = "GROUP BY";

/**
* {@code ORDER BY} statement.
*/
public static final String ORDER_BY = "ORDER BY";

/**
* {@code ASC} keyword.
*/
public static final String ASC = "ASC";

/**
* {@code DESC} keyword.
*/
public static final String DESC = "DESC";

/**
* SPARQL shortcut for {@code rdf:type} - {@code a}.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,13 @@

public class SoqlOrderParameter extends SoqlParameter {

private static final String ASC_ORDER = "ASC";
private static final String DESC_ORDER = "DESC";

private String orderingBy;

private SoqlAttribute attribute;

public SoqlOrderParameter(SoqlNode firstNode, String orderingBy) {
super(firstNode);
this.orderingBy = orderingBy.isEmpty() ? ASC_ORDER : orderingBy;
this.orderingBy = orderingBy.isEmpty() ? SoqlConstants.ASC : orderingBy;
}

public String getOrderingBy() {
Expand All @@ -47,10 +44,10 @@ public void setAttribute(SoqlAttribute attribute) {
public String getOrderByPart() {
String param = attribute.requiresFilter() ? getAsParam().substring(1) : attribute.getValue().substring(1);
StringBuilder sb = new StringBuilder();
if (ASC_ORDER.equals(orderingBy)) {
if (SoqlConstants.ASC.equals(orderingBy)) {
sb.append("?").append(param).append(' ');
} else {
sb.append(DESC_ORDER).append("(?").append(param).append(") ");
sb.append(SoqlConstants.DESC).append("(?").append(param).append(") ");
}
return sb.toString();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,28 @@
package cz.cvut.kbss.jopa.query.soql;

import cz.cvut.kbss.jopa.model.MetamodelImpl;
import cz.cvut.kbss.jopa.model.metamodel.*;
import cz.cvut.kbss.jopa.model.metamodel.Attribute;
import cz.cvut.kbss.jopa.model.metamodel.EntityType;
import cz.cvut.kbss.jopa.model.metamodel.EntityTypeImpl;
import cz.cvut.kbss.jopa.model.metamodel.PluralAttribute;
import cz.cvut.kbss.jopa.model.metamodel.SingularAttribute;
import cz.cvut.kbss.jopa.model.metamodel.Type;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.TerminalNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

public class SoqlQueryListener implements SoqlListener {
Expand All @@ -33,7 +46,7 @@ public class SoqlQueryListener implements SoqlListener {
private String soql;
private String sparql;

private String typeDef = "SELECT";
private String typeDef = SoqlConstants.SELECT;

// keeps pointer at created object of SoqlAttribute while processing other necessary rules
private SoqlAttribute attrPointer;
Expand Down Expand Up @@ -366,7 +379,7 @@ public void exitComparisonExpression(SoqlParser.ComparisonExpressionContext ctx)
if (attrPointer.isProjected()) {
this.rootVariable = SoqlUtils.soqlVariableToSparqlVariable(whereClauseValue.getText());
}
if (attributes.size() > 1) {
if (attributes.size() > 1 && !attrPointer.getFirstNode().getChild().hasChild()) {
final String varName = whereClauseValue.getText();
attrPointer.getFirstNode().getChild().setValue(
varName.charAt(0) == SoqlConstants.VARIABLE_PREFIX ? varName.substring(1) : varName);
Expand Down Expand Up @@ -846,15 +859,15 @@ private String processAttribute(SoqlAttribute attr) {
}

private String buildOrdering() {
StringBuilder sb = new StringBuilder("ORDER BY");
StringBuilder sb = new StringBuilder(SoqlConstants.ORDER_BY);
for (SoqlOrderParameter orderParam : orderAttributes) {
sb.append(' ').append(orderParam.getOrderByPart());
}
return sb.toString();
}

private String buildGrouping() {
StringBuilder sb = new StringBuilder("GROUP BY");
StringBuilder sb = new StringBuilder(SoqlConstants.GROUP_BY);
for (SoqlGroupParameter groupParam : groupAttributes) {
sb.append(' ').append(groupParam.getGroupByPart());
}
Expand Down
Loading

0 comments on commit 381eb72

Please sign in to comment.