1 package liquibase.database.core;
2
3 import java.util.HashSet;
4 import java.util.Set;
5
6 import liquibase.database.AbstractDatabase;
7 import liquibase.database.DatabaseConnection;
8 import liquibase.exception.DatabaseException;
9
10 public class MaxDBDatabase extends AbstractDatabase {
11
12 public static final String PRODUCT_NAME = "SAP DB";
13 protected Set<String> systemTablesAndViews = new HashSet<String>();
14
15 public MaxDBDatabase() {
16 super();
17 systemTablesAndViews.add("---");
18
19 systemTablesAndViews.add("ACTIVECONFIGURATION");
20 systemTablesAndViews.add("BACKUPTHREADS");
21 systemTablesAndViews.add("CACHESTATISTICS");
22 systemTablesAndViews.add("CATALOGCACHESTATISTICS");
23 systemTablesAndViews.add("COMMANDCACHESTATISTICS");
24 systemTablesAndViews.add("COMMANDCACHESTATISTICSRESET");
25 systemTablesAndViews.add("COMMANDSTATISTICS");
26 systemTablesAndViews.add("COMMANDSTATISTICSRESET");
27 systemTablesAndViews.add("CONSISTENTVIEWS");
28 systemTablesAndViews.add("DATACACHE");
29 systemTablesAndViews.add("DATASTATISTICS");
30 systemTablesAndViews.add("DATASTATISTICSRESET");
31 systemTablesAndViews.add("DATAVOLUMES");
32 systemTablesAndViews.add("DATASTATISTICSRESET");
33 systemTablesAndViews.add("FILEDIRECTORIES");
34 systemTablesAndViews.add("FILES");
35 systemTablesAndViews.add("HOTSTANDBYCOMPONENT");
36 systemTablesAndViews.add("HOTSTANDBYGROUP");
37 systemTablesAndViews.add("INSTANCE");
38 systemTablesAndViews.add("IOBUFFERCACHES");
39 systemTablesAndViews.add("IOTHREADSTATISTICS");
40 systemTablesAndViews.add("IOTHREADSTATISTICSRESET");
41 systemTablesAndViews.add("INDEXSIZE");
42 systemTablesAndViews.add("INDEXSTORAGEDETAILS");
43 systemTablesAndViews.add("LOGINFORMATION");
44 systemTablesAndViews.add("LOGQUEUESTATISTICS");
45 systemTablesAndViews.add("LOGQUEUESTATISTICSRESET");
46 systemTablesAndViews.add("LOGSTATISTICS");
47 systemTablesAndViews.add("LOGSTATISTICSRESET");
48 systemTablesAndViews.add("LOGVOLUMES");
49 systemTablesAndViews.add("MACHINECONFIGURATION");
50 systemTablesAndViews.add("MACHINEUTILIZATION");
51 systemTablesAndViews.add("MEMORYALLOCATORSTATISTICS");
52 systemTablesAndViews.add("OPTIMIZERINFORMATION");
53 systemTablesAndViews.add("READERWRITERLOCKINFORMATION");
54 systemTablesAndViews.add("READERWRITERLOCKSTATISTICS");
55 systemTablesAndViews.add("READERWRITERLOCKSTATISTICSRESET");
56 systemTablesAndViews.add("READERWRITERLOCKWAITINGTASKS");
57 systemTablesAndViews.add("REGIONINFORMATION");
58 systemTablesAndViews.add("REGIONSTATISTICS");
59 systemTablesAndViews.add("REGIONSTATISTICSRESET");
60 systemTablesAndViews.add("RESTARTINFORMATION");
61 systemTablesAndViews.add("SCHEMASIZE");
62 systemTablesAndViews.add("SERVERTASKS");
63 systemTablesAndViews.add("SESSIONS");
64 systemTablesAndViews.add("SNAPSHOTS");
65 systemTablesAndViews.add("SPINLOCKPOOLSTATISTICS");
66 systemTablesAndViews.add("SPINLOCKPOOLSTATISTICSRESET");
67 systemTablesAndViews.add("SPINLOCKSTATISTICS");
68 systemTablesAndViews.add("SPINLOCKSTATISTICSRESET");
69 systemTablesAndViews.add("TABLESIZE");
70 systemTablesAndViews.add("TABLESTORAGEDETAILS");
71 systemTablesAndViews.add("TASKGROUPSTATISTICS");
72 systemTablesAndViews.add("TASKGROUPSTATISTICSRESET");
73 systemTablesAndViews.add("TASKLOADBALANCINGINFORMATION");
74 systemTablesAndViews.add("TASKLOADBALANCINGTASKGROUPSTATES");
75 systemTablesAndViews.add("TASKLOADBALANCINGTASKMOVES");
76 systemTablesAndViews.add("TRANSACTIONHISTORY");
77 systemTablesAndViews.add("TRANSACTIONS");
78 systemTablesAndViews.add("UNLOADEDSTATEMENTS");
79 systemTablesAndViews.add("VERSION");
80 }
81
82 @Override
83 public int getPriority() {
84 return PRIORITY_DEFAULT;
85 }
86
87 @Override
88 public Set<String> getSystemTablesAndViews() {
89 return systemTablesAndViews;
90 }
91
92 @Override
93 public String getTypeName() {
94 return "maxdb";
95 }
96
97 @Override
98 public boolean supportsInitiallyDeferrableColumns() {
99 return false;
100 }
101
102 @Override
103 public boolean supportsSequences() {
104 return true;
105 }
106
107 @Override
108 public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException {
109 return PRODUCT_NAME.equalsIgnoreCase(conn.getDatabaseProductName());
110 }
111
112 @Override
113 public String getDefaultDriver(String url) {
114 if (url.startsWith("jdbc:sapdb")) {
115 return "com.sap.dbtech.jdbc.DriverSapDB";
116 }
117 return null;
118 }
119
120 @Override
121 public String getCurrentDateTimeFunction() {
122 if (currentDateTimeFunction != null) {
123 return currentDateTimeFunction;
124 }
125
126 return "TIMESTAMP";
127 }
128
129 @Override
130 protected String getDefaultDatabaseSchemaName() throws DatabaseException {
131 return super.getDefaultDatabaseSchemaName().toUpperCase();
132 }
133
134 @Override
135 public boolean isSystemTable(String catalogName, String schemaName, String tableName) {
136 if (super.isSystemTable(catalogName, schemaName, tableName)) {
137 return true;
138 } else if ("DOMAIN".equalsIgnoreCase(schemaName)) {
139 return true;
140 } else if ("SYSINFO".equalsIgnoreCase(schemaName)) {
141 return true;
142 } else if ("SYSLOADER".equalsIgnoreCase(schemaName)) {
143 return true;
144 } else if ("SYSDBA".equalsIgnoreCase(schemaName)) {
145 return true;
146 }
147 return false;
148 }
149
150 @Override
151 public boolean isSystemView(String catalogName, String schemaName, String tableName) {
152 if (super.isSystemView(catalogName, schemaName, tableName)) {
153 return true;
154 } else if ("DOMAIN".equalsIgnoreCase(schemaName)) {
155 return true;
156 } else if ("SYSINFO".equalsIgnoreCase(schemaName)) {
157 return true;
158 } else if ("SYSLOADER".equalsIgnoreCase(schemaName)) {
159 return true;
160 } else if ("SYSDBA".equalsIgnoreCase(schemaName)) {
161 return true;
162 }
163 return false;
164 }
165
166 @Override
167 public boolean supportsTablespaces() {
168 return false;
169 }
170
171 @Override
172 public boolean supportsAutoIncrement() {
173 return false;
174 }
175 }