1 package guru.mikelue.jdut.jdbc.util;
2
3 import java.sql.DatabaseMetaData;
4 import java.sql.SQLException;
5
6 import org.apache.commons.lang3.StringUtils;
7
8 public class MetaDataWorker {
9 private final boolean storesUpperCaseIdentifiers;
10 private final boolean storesLowerCaseIdentifiers;
11 private final boolean storesMixedCaseIdentifiers;
12 private final boolean supportsMixedCaseIdentifiers;
13 private final boolean supportsSchemasInTableDefinitions;
14 private final boolean supportsSchemasInDataManipulation;
15 private final String identifierQuoteString;
16
17 public MetaDataWorker(DatabaseMetaData metaData)
18 {
19 try {
20
21
22
23 storesUpperCaseIdentifiers = metaData.storesUpperCaseIdentifiers();
24 storesLowerCaseIdentifiers = metaData.storesLowerCaseIdentifiers();
25 storesMixedCaseIdentifiers = metaData.storesMixedCaseIdentifiers();
26 supportsMixedCaseIdentifiers = metaData.supportsMixedCaseIdentifiers();
27
28
29
30
31
32 supportsSchemasInTableDefinitions = metaData.supportsSchemasInTableDefinitions();
33 supportsSchemasInDataManipulation = metaData.supportsSchemasInDataManipulation();
34
35
36 String quoteString = metaData.getIdentifierQuoteString();
37 identifierQuoteString = " ".equals(quoteString) ? null : quoteString;
38 } catch (SQLException e) {
39 throw new RuntimeException("Cannot load metadata", e);
40 }
41 }
42
43 public String processIdentifier(String identifier)
44 {
45 identifier = StringUtils.trimToNull(identifier);
46 if (identifier == null) {
47 return null;
48 }
49
50
51
52
53 if (storesLowerCaseIdentifiers || storesMixedCaseIdentifiers) {
54 return identifier.toLowerCase();
55 } else if (storesUpperCaseIdentifiers) {
56 return identifier.toUpperCase();
57 }
58
59
60 if (!supportsMixedCaseIdentifiers) {
61 identifier.toLowerCase();
62 }
63
64
65 return identifier;
66 }
67
68 public String quoteIdentifier(String identifier)
69 {
70 return String.format("%s%s%s", identifierQuoteString, identifier, identifierQuoteString);
71 }
72
73 public boolean supportsSchemasInTableDefinitions()
74 {
75 return supportsSchemasInTableDefinitions;
76 }
77
78 public boolean supportsSchemasInDataManipulation()
79 {
80 return supportsSchemasInDataManipulation;
81 }
82 }