terrymanu commented on a change in pull request #4850: #4460, fix order by
string column exception
URL:
https://github.com/apache/incubator-shardingsphere/pull/4850#discussion_r395421837
##########
File path:
sharding-core/sharding-core-merge/src/main/java/org/apache/shardingsphere/sharding/merge/dql/orderby/OrderByValue.java
##########
@@ -43,17 +52,38 @@
private List<Comparable<?>> orderValues;
- public OrderByValue(final QueryResult queryResult, final
Collection<OrderByItem> orderByItems) {
+ public OrderByValue(final QueryResult queryResult, final
Collection<OrderByItem> orderByItems, final SelectStatementContext
selectStatementContext, final SchemaMetaData schemaMetaData) {
this.queryResult = queryResult;
this.orderByItems = orderByItems;
- this.orderValuesCaseSensitive = getOrderValuesCaseSensitive();
+ this.orderValuesCaseSensitive =
getOrderValuesCaseSensitive(selectStatementContext, schemaMetaData);
}
@SneakyThrows
- private List<Boolean> getOrderValuesCaseSensitive() {
+ private List<Boolean> getOrderValuesCaseSensitive(final
SelectStatementContext selectStatementContext, final SchemaMetaData
schemaMetaData) {
List<Boolean> result = new ArrayList<>(orderByItems.size());
- for (OrderByItem each : orderByItems) {
- result.add(queryResult.isCaseSensitive(each.getIndex()));
+ for (OrderByItem eachOrderByItem : orderByItems) {
+ for (SimpleTableSegment eachSimpleTableSegment :
selectStatementContext.getAllTables()) {
+ String tableName =
eachSimpleTableSegment.getTableName().getIdentifier().getValue();
+ TableMetaData tableMetaData = schemaMetaData.get(tableName);
+ Map<String, ColumnMetaData> columns =
tableMetaData.getColumns();
+ OrderByItemSegment orderByItemSegment =
eachOrderByItem.getSegment();
+ if (orderByItemSegment instanceof ColumnOrderByItemSegment) {
+ String columnName = ((ColumnOrderByItemSegment)
orderByItemSegment).getColumn().getIdentifier().getValue();
+ if (columns.containsKey(columnName)) {
+ result.add(columns.get(columnName).isCaseSensitive());
+ break;
+ }
+ } else if (orderByItemSegment instanceof
IndexOrderByItemSegment) {
+ int columnIndex = ((IndexOrderByItemSegment)
orderByItemSegment).getColumnIndex();
+ if (columns.values().toArray().length >= columnIndex) {
+ result.add(((ColumnMetaData)
columns.values().toArray()[columnIndex - 1]).isCaseSensitive());
+ break;
+ }
+ } else {
+ result.add(false);
+ break;
Review comment:
This method are pretty long, and lots of break in this method. Can you
consider about extract them as serval small methods?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services