1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 package liquibase.database.typeconversion.ext;
27
28 import liquibase.database.structure.Column;
29 import liquibase.database.structure.type.*;
30 import liquibase.database.Database;
31 import liquibase.database.core.H2Database;
32 import liquibase.database.core.HsqlDatabase;
33 import liquibase.util.StringUtils;
34
35 import static liquibase.ext.Constants.EXTENSION_PRIORITY;
36
37
38
39
40
41 public class HsqlTypeConverter extends liquibase.database.typeconversion.core.HsqlTypeConverter {
42
43 public int getPriority() {
44 return EXTENSION_PRIORITY;
45 }
46
47 @Override
48 public NumberType getNumberType() {
49 return new NumberType("NUMERIC");
50 }
51
52 public String convertToDatabaseTypeString(Column referenceColumn, Database database) {
53 if (referenceColumn.getTypeName().toLowerCase().indexOf("text") > -1) {
54 return getClobType().getDataTypeName();
55 }
56 else if (referenceColumn.getTypeName().toLowerCase().indexOf("varchar") > -1) {
57 final VarcharType type = getVarcharType();
58 type.setFirstParameter("" + referenceColumn.getColumnSize());
59 return type.toString();
60 }
61 else if (referenceColumn.getTypeName().toLowerCase().indexOf("num") > -1) {
62 final NumberType type = new NumberType("NUMERIC");
63 type.setFirstParameter("" + referenceColumn.getColumnSize());
64 return type.toString();
65 }
66
67 return super.convertToDatabaseTypeString(referenceColumn, database);
68 }
69
70
71
72
73
74
75
76 public DataType getDataType(String columnTypeString, Boolean autoIncrement) {
77
78
79 String dataTypeName = null;
80 String precision = null;
81 String additionalInformation = null;
82 if (columnTypeString.startsWith("java.sql.Types") && columnTypeString.contains("(")) {
83 precision = columnTypeString.substring(columnTypeString.indexOf("(") + 1, columnTypeString.indexOf(")"));
84 dataTypeName = columnTypeString.substring(columnTypeString.lastIndexOf(".") + 1, columnTypeString.indexOf("("));
85 } else if (columnTypeString.startsWith("java.sql.Types")) {
86 dataTypeName = columnTypeString.substring(columnTypeString.lastIndexOf(".") + 1);
87 } else if (columnTypeString.contains("(")) {
88 precision = columnTypeString.substring(columnTypeString.indexOf("(") + 1, columnTypeString.indexOf(")"));
89 dataTypeName = columnTypeString.substring(0, columnTypeString.indexOf("("));
90 } else {
91 dataTypeName = columnTypeString;
92 }
93 if (columnTypeString.contains(")")) {
94 additionalInformation = StringUtils.trimToNull(columnTypeString.replaceFirst(".*\\)", ""));
95 }
96
97 return getDataType(columnTypeString, autoIncrement, dataTypeName, precision, additionalInformation);
98 }
99
100 }