1 package liquibase.database.core; 2 3 import liquibase.database.AbstractDatabase; 4 import liquibase.database.DatabaseConnection; 5 import liquibase.exception.DatabaseException; 6 7 public class UnsupportedDatabase extends AbstractDatabase { 8 9 public int getPriority() { 10 return -1; 11 } 12 13 @Override 14 public void setConnection(DatabaseConnection conn) { 15 super.setConnection(conn); 16 if (currentDateTimeFunction == null) { 17 currentDateTimeFunction = findCurrentDateTimeFunction(); 18 } 19 } 20 21 /** 22 * Always returns null or DATABASECHANGELOG table may not be found. 23 */ 24 @Override 25 public String getDefaultCatalogName() throws DatabaseException { 26 return null; 27 } 28 29 /** 30 * Always returns null or DATABASECHANGELOG table may not be found. 31 */ 32 @Override 33 protected String getDefaultDatabaseSchemaName() throws DatabaseException { 34 return null; 35 } 36 37 public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException { 38 return false; 39 } 40 41 public String getDefaultDriver(String url) { 42 return null; 43 } 44 45 public String getTypeName() { 46 return "unsupported"; 47 } 48 49 public boolean supportsInitiallyDeferrableColumns() { 50 return false; 51 } 52 53 public String getCurrentDateTimeFunction() { 54 return currentDateTimeFunction; 55 } 56 57 private String findCurrentDateTimeFunction() { 58 // todo: reintroduce try { 59 // String nowFunction = null; 60 // String dateFunction = null; 61 // String dateTimeFunction = null; 62 // String timeStampFunction = null; 63 // 64 // String[] timeDateFunctions = getConnection().getMetaData().getTimeDateFunctions().split(","); 65 // for (String functionName : timeDateFunctions) { 66 // String function = functionName.trim().toUpperCase(); 67 // if (function.endsWith("TIMESTAMP")) { 68 // timeStampFunction = functionName.trim(); 69 // } 70 // if (function.endsWith("DATETIME")) { 71 // dateTimeFunction = functionName.trim(); 72 // } 73 // if (function.endsWith("DATE")) { 74 // dateFunction = functionName.trim(); 75 // } 76 // if ("NOW".equals(function)) { 77 // nowFunction = functionName.trim(); 78 // } 79 // } 80 // 81 // if (nowFunction != null) { 82 // return "{fn "+nowFunction+"()"+"}"; 83 // } else if (timeStampFunction != null) { 84 // return "{fn "+timeStampFunction+"()"+"}"; 85 // } else if (dateTimeFunction != null) { 86 // return "{fn "+dateTimeFunction+"()"+"}"; 87 // } else if (dateFunction != null) { 88 // return "{fn "+dateFunction+"()"+"}"; 89 // } else { 90 // return "CURRENT_TIMESTAMP"; 91 // } 92 // 93 // } catch (SQLException e) { 94 // throw new RuntimeException(e); 95 // } 96 return "CURRENT_TIMESTAMP"; 97 } 98 99 // todo: reintroduce? @Override 100 // protected boolean canCreateChangeLogTable() throws DatabaseException { 101 // //check index size. Many drivers just return 0, so it's not a great test 102 // int maxIndexLength; 103 // try { 104 // maxIndexLength = getConnection().getMetaData().getMaxIndexLength(); 105 // 106 // return maxIndexLength == 0 107 // || maxIndexLength >= 150 + 150 + 255 //id + author + filename length 108 // && super.canCreateChangeLogTable(); 109 // } catch (SQLException e) { 110 // throw new DatabaseException(e); 111 // } 112 // } 113 114 public boolean supportsTablespaces() { 115 return false; 116 } 117 }