forked from ydb-platform/ydb-java-dialects
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathYdbDatabase.java
154 lines (125 loc) · 3.37 KB
/
YdbDatabase.java
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package tech.ydb.liquibase.database;
import java.sql.Date;
import java.sql.Timestamp;
import liquibase.database.AbstractJdbcDatabase;
import liquibase.database.DatabaseConnection;
import liquibase.exception.DatabaseException;
/**
* @author Kirill Kurdyukov
*/
public class YdbDatabase extends AbstractJdbcDatabase {
private final static String DATABASE_PRODUCT_NAME = "YDB";
private final static String DATABASE_QUOTING_CHARACTER = "`";
private final static int DATABASE_DEFAULT_PORT = 2136;
private final static String DRIVER_NAME = "tech.ydb.jdbc.YdbDriver";
public YdbDatabase() {
super.setCurrentDateTimeFunction("CurrentUtcDatetime()");
}
@Override
protected String getDefaultDatabaseProductName() {
return DATABASE_PRODUCT_NAME;
}
@Override
public boolean isCorrectDatabaseImplementation(DatabaseConnection databaseConnection) throws DatabaseException {
return DATABASE_PRODUCT_NAME.equalsIgnoreCase(databaseConnection.getDatabaseProductName());
}
@Override
public String getDefaultDriver(String url) {
if (url.startsWith("jdbc:ydb")) {
return DRIVER_NAME;
}
return null;
}
@Override
public String getShortName() {
return DATABASE_PRODUCT_NAME.toLowerCase();
}
@Override
public Integer getDefaultPort() {
return DATABASE_DEFAULT_PORT;
}
@Override
public int getPriority() {
return PRIORITY_DATABASE;
}
@Override
public String escapeStringForDatabase(String string) {
if (string == null) {
return null;
}
return string.replace("\\", "\\\\").replace("'", "\\'");
}
@Override
public boolean requiresUsername() {
return false;
}
@Override
public String getDateLiteral(Date date) {
return "DATE(" + super.getDateLiteral(date) + ")";
}
@Override
public String getDateTimeLiteral(Timestamp date) {
return "CAST(" + date.toInstant().getEpochSecond() + " AS DATETIME)";
}
@Override
public boolean supportsBatchUpdates() {
return true;
}
@Override
public boolean requiresPassword() {
return false;
}
@Override
protected String getQuotingStartCharacter() {
return DATABASE_QUOTING_CHARACTER;
}
@Override
protected String getQuotingEndCharacter() {
return DATABASE_QUOTING_CHARACTER;
}
@Override
public boolean supportsCatalogs() {
return false;
}
@Override
public boolean supportsSchemas() {
return false;
}
@Override
public boolean supportsInitiallyDeferrableColumns() {
return false;
}
@Override
public boolean supportsTablespaces() {
return false;
}
/**
* YDB does not support foreign key
*/
@Override
public boolean supportsForeignKeyDisable() {
return true;
}
/**
* YDB does not support sequences (yet)
*/
@Override
public boolean supportsSequences() {
return false;
}
/**
* YDB does not support auto increment (yet)
*/
@Override
public boolean supportsAutoIncrement() {
return false;
}
@Override
public boolean supportsDDLInTransaction() {
return false;
}
@Override
public boolean supportsPrimaryKeyNames() {
return false;
}
}