1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.database.core.metadata.database.enums;
19
20 import com.google.common.base.Strings;
21 import lombok.Getter;
22 import lombok.RequiredArgsConstructor;
23
24 import java.util.HashMap;
25 import java.util.Map;
26
27
28
29
30 @RequiredArgsConstructor
31 @Getter
32 public enum QuoteCharacter {
33
34 BACK_QUOTE("`", "`"),
35
36 SINGLE_QUOTE("'", "'"),
37
38 QUOTE("\"", "\""),
39
40 BRACKETS("[", "]"),
41
42 PARENTHESES("(", ")"),
43
44 NONE("", "");
45
46 private static final Map<Character, QuoteCharacter> BY_FIRST_CHAR = new HashMap<>(QuoteCharacter.values().length - 1, 1L);
47
48 static {
49 for (QuoteCharacter each : values()) {
50 if (NONE == each) {
51 continue;
52 }
53 BY_FIRST_CHAR.put(each.startDelimiter.charAt(0), each);
54 }
55 }
56
57 private final String startDelimiter;
58
59 private final String endDelimiter;
60
61
62
63
64
65
66
67 public static QuoteCharacter getQuoteCharacter(final String value) {
68 if (Strings.isNullOrEmpty(value)) {
69 return NONE;
70 }
71 return BY_FIRST_CHAR.getOrDefault(value.charAt(0), NONE);
72 }
73
74
75
76
77
78
79
80 public String wrap(final String value) {
81 return startDelimiter + value + endDelimiter;
82 }
83
84
85
86
87
88
89
90 public String unwrap(final String value) {
91 return isWrapped(value) ? value.substring(startDelimiter.length(), value.length() - endDelimiter.length()) : value;
92 }
93
94
95
96
97
98
99
100 public boolean isWrapped(final String value) {
101 return value.startsWith(startDelimiter) && value.endsWith(endDelimiter);
102 }
103 }