1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.binder.context.segment.select.projection.util;
19
20 import lombok.AccessLevel;
21 import lombok.NoArgsConstructor;
22 import org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
23 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
24 import org.apache.shardingsphere.infra.database.opengauss.type.OpenGaussDatabaseType;
25 import org.apache.shardingsphere.infra.database.oracle.type.OracleDatabaseType;
26 import org.apache.shardingsphere.infra.database.postgresql.type.PostgreSQLDatabaseType;
27 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.SubqueryProjectionSegment;
28 import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
29
30
31
32
33 @NoArgsConstructor(access = AccessLevel.PRIVATE)
34 public final class ProjectionUtils {
35
36
37
38
39
40
41
42
43 public static String getColumnLabelFromAlias(final IdentifierValue alias, final DatabaseType databaseType) {
44 return getIdentifierValueByDatabaseType(alias, databaseType);
45 }
46
47 private static String getIdentifierValueByDatabaseType(final IdentifierValue identifierValue, final DatabaseType databaseType) {
48 if (QuoteCharacter.NONE != identifierValue.getQuoteCharacter()) {
49 return identifierValue.getValue();
50 }
51 if (databaseType instanceof PostgreSQLDatabaseType || databaseType instanceof OpenGaussDatabaseType) {
52 return identifierValue.getValue().toLowerCase();
53 }
54 if (databaseType instanceof OracleDatabaseType) {
55 return identifierValue.getValue().toUpperCase();
56 }
57 return identifierValue.getValue();
58 }
59
60
61
62
63
64
65
66
67 public static String getColumnNameFromColumn(final IdentifierValue columnName, final DatabaseType databaseType) {
68 return getIdentifierValueByDatabaseType(columnName, databaseType);
69 }
70
71
72
73
74
75
76
77
78
79 public static String getColumnNameFromFunction(final String functionName, final String functionExpression, final DatabaseType databaseType) {
80 if (databaseType instanceof PostgreSQLDatabaseType || databaseType instanceof OpenGaussDatabaseType) {
81 return functionName.toLowerCase();
82 }
83 if (databaseType instanceof OracleDatabaseType) {
84 return functionExpression.replace(" ", "").toUpperCase();
85 }
86 return functionExpression;
87 }
88
89
90
91
92
93
94
95
96 public static String getColumnNameFromExpression(final String expression, final DatabaseType databaseType) {
97 if (databaseType instanceof PostgreSQLDatabaseType || databaseType instanceof OpenGaussDatabaseType) {
98 return "?column?";
99 }
100 if (databaseType instanceof OracleDatabaseType) {
101 return expression.replace(" ", "").toUpperCase();
102 }
103 return expression;
104 }
105
106
107
108
109
110
111
112
113 public static String getColumnNameFromSubquery(final SubqueryProjectionSegment subquerySegment, final DatabaseType databaseType) {
114
115 if (databaseType instanceof OracleDatabaseType) {
116 return subquerySegment.getText().replace(" ", "").toUpperCase();
117 }
118 return subquerySegment.getText();
119 }
120 }