View Javadoc
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  			 * Identifier configurations of database
22  			 */
23  			storesUpperCaseIdentifiers = metaData.storesUpperCaseIdentifiers();
24  			storesLowerCaseIdentifiers = metaData.storesLowerCaseIdentifiers();
25  			storesMixedCaseIdentifiers = metaData.storesMixedCaseIdentifiers();
26  			supportsMixedCaseIdentifiers = metaData.supportsMixedCaseIdentifiers();
27  			// :~)
28  
29  			/**
30  			 * Schema configuration of database
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  		 * Changes the identifier to upper or lower case if the database is case insensitive
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  		// Case sensitive
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  }