Skip to content

Commit

Permalink
fix #162 - fix sort issue
Browse files Browse the repository at this point in the history
  • Loading branch information
grabdoc committed Jan 21, 2024
1 parent 292e382 commit 031d199
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 6 deletions.
21 changes: 18 additions & 3 deletions src/main/java/com/homihq/db2rest/rest/read/helper/ReadContext.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package com.homihq.db2rest.rest.read.helper;

import com.homihq.db2rest.exception.GenericDataAccessException;
import com.homihq.db2rest.exception.InvalidTableException;
import com.homihq.db2rest.mybatis.MyBatisTable;
import lombok.*;
import org.apache.commons.lang3.StringUtils;
import org.mybatis.dynamic.sql.BasicColumn;
import org.mybatis.dynamic.sql.SqlColumn;
import org.mybatis.dynamic.sql.SqlCriterion;
import org.mybatis.dynamic.sql.SqlTable;
import org.mybatis.dynamic.sql.render.RenderingStrategies;
import org.mybatis.dynamic.sql.select.ColumnSortSpecification;
import org.mybatis.dynamic.sql.select.QueryExpressionDSL;
import org.mybatis.dynamic.sql.select.SelectModel;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
Expand Down Expand Up @@ -54,10 +57,22 @@ public boolean isCountQuery() {
return StringUtils.equals(select, "count(*)");
}

public SqlColumn<?> getSortColumn(String columnName) {
//for now just support root table
public ColumnSortSpecification getSortColumn(String tableName, String columnName) {
if(StringUtils.isBlank(tableName)) {
return
new ColumnSortSpecification(from.getAlias(), from.column(columnName));
}
else {
//find by table and column
MyBatisTable table =
tables.stream()
.filter(t -> StringUtils.equalsIgnoreCase(t.getTableName(), tableName))
.findFirst().orElseThrow(() -> new InvalidTableException("Sort : " + tableName));

return
new ColumnSortSpecification(table.getAlias(), SqlColumn.of(columnName, SqlTable.of(tableName)));
}

return from.column(columnName);
}

public void createSelect() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.homihq.db2rest.rest.read.helper;


import com.homihq.db2rest.rest.read.model.DbColumn;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.dynamic.sql.SortSpecification;
Expand Down Expand Up @@ -32,10 +33,12 @@ public void build(ReadContext context) {

private SortSpecification getSortSpecification(ReadContext context, Sort.Order s) {
String column = s.getProperty();
SqlColumn<?> sqlColumn = context.getSortColumn(column);

DbColumn dbColumn = TableUtil.getColumn(column);
ColumnSortSpecification columnSortSpecification = context.getSortColumn(dbColumn.tableName(), dbColumn.name());

return
s.isAscending() ? new ColumnSortSpecification("", sqlColumn) :
new ColumnSortSpecification("", sqlColumn).descending();
s.isAscending() ? columnSortSpecification :
columnSortSpecification.descending();
}
}
55 changes: 55 additions & 0 deletions src/main/java/com/homihq/db2rest/rest/read/helper/TableUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.homihq.db2rest.rest.read.helper;

import com.homihq.db2rest.rest.read.model.DbAlias;
import com.homihq.db2rest.rest.read.model.DbColumn;
import com.homihq.db2rest.rest.read.model.DbTable;

public abstract class TableUtil {

private TableUtil() {}

public static DbTable getTable(String tableName) {
//check if table contains schema name

String [] tableParts = tableName.split("!.");

if(tableParts.length == 2) {
String table = tableParts[1];
DbAlias alias = getAlias(table);
return new DbTable(tableParts[0], alias.name(), alias.alias());
}
else{
String table = tableParts[0];
DbAlias alias = getAlias(table);
return new DbTable(null, alias.name(), alias.alias());
}
}

public static DbColumn getColumn(String columName) {
//check if table contains schema name

String [] columnParts = columName.split("!.");

if(columnParts.length == 2) {
String col = columnParts[1];
DbAlias alias = getAlias(col);
return new DbColumn(columnParts[0], alias.name(), alias.alias());
}
else{
String col = columnParts[0];
DbAlias alias = getAlias(col);
return new DbColumn(null, alias.name(), alias.alias());
}
}

public static DbAlias getAlias(String name) {
String [] aliasParts = name.split(":");

if(aliasParts.length == 2) {
return new DbAlias(aliasParts[0], aliasParts[1]);
}
else {
return new DbAlias(aliasParts[0], null);
}
}
}
3 changes: 3 additions & 0 deletions src/main/java/com/homihq/db2rest/rest/read/model/DbAlias.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.homihq.db2rest.rest.read.model;

public record DbAlias(String name, String alias) { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.homihq.db2rest.rest.read.model;


public record DbColumn(String tableName, String name, String alias) {


}
3 changes: 3 additions & 0 deletions src/main/java/com/homihq/db2rest/rest/read/model/DbTable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package com.homihq.db2rest.rest.read.model;

public record DbTable(String schema, String name, String alias) { }

0 comments on commit 031d199

Please sign in to comment.