1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item;
19
20 import lombok.Getter;
21 import lombok.RequiredArgsConstructor;
22 import org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
23 import org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
24 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
25 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
26 import org.apache.shardingsphere.sql.parser.sql.common.enums.OrderDirection;
27 import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
28
29 import java.util.Optional;
30
31
32
33
34 @RequiredArgsConstructor
35 @Getter
36 public abstract class OrderByItemSegment implements SQLSegment {
37
38 private final int startIndex;
39
40 private final int stopIndex;
41
42 private final OrderDirection orderDirection;
43
44 private final NullsOrderType nullsOrderType;
45
46
47
48
49
50
51 public Optional<NullsOrderType> getNullsOrderType() {
52 return Optional.ofNullable(nullsOrderType);
53 }
54
55
56
57
58
59
60
61 public NullsOrderType getNullsOrderType(final DatabaseType databaseType) {
62 if (null != nullsOrderType) {
63 return nullsOrderType;
64 }
65 DialectDatabaseMetaData dialectDatabaseMetaData = new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
66 return OrderDirection.ASC == orderDirection ? dialectDatabaseMetaData.getDefaultNullsOrderType() : dialectDatabaseMetaData.getDefaultNullsOrderType().getReversedOrderType();
67 }
68 }