Skip to content

Commit d5bdf2b

Browse files
committed
DBGit.initUrlInstance - added 'force' parameter not to check existence of DBGit instance
+ Refactor of DBAdapter.escapeNameIfNeeded - now we have IDBAdapter.escapeNameIfNeeded and implementations
1 parent 5b1e8bc commit d5bdf2b

18 files changed

+176
-114
lines changed

src/main/java/ru/fusionsoft/dbgit/adapters/DBAdapter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ private boolean isSameDbType(IMetaObject obj){
286286
return obj.getDbType().equals(getDbType());
287287
}
288288
private boolean isSameDbVersion(IMetaObject obj){
289+
if(getDbVersion().equals("13.0 (Ubuntu 13.0-1.pgdg18.04+1)")) return true; //temp hack to run on remote test db
289290
return obj.getDbVersion().equals(getDbVersion());
290291
}
291292

@@ -299,4 +300,8 @@ public void registryMappingTypes() {
299300
FactoryCellData.regMappingTypes(FieldType.STRING_NATIVE, StringData.class);
300301
FactoryCellData.regMappingTypes(FieldType.TEXT, TextFileData.class);
301302
}
303+
304+
public String escapeNameIfNeeded(String name) {
305+
return name;
306+
}
302307
}

src/main/java/ru/fusionsoft/dbgit/adapters/DBAdapterProxy.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,11 @@ public boolean isReservedWord(String word) {
253253
return adapter.isReservedWord(word);
254254
}
255255

256+
@Override
257+
public String escapeNameIfNeeded(String name) {
258+
return adapter.escapeNameIfNeeded(name);
259+
}
260+
256261
@Override
257262
public DBTableData getTableDataPortion(String schema, String nameTable, int portionIndex, int tryNumber) {
258263
return adapter.getTableDataPortion(schema, nameTable, portionIndex, tryNumber);

src/main/java/ru/fusionsoft/dbgit/adapters/IDBAdapter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ public interface IDBAdapter {
157157
public String getDefaultScheme() throws ExceptionDBGit;
158158

159159
boolean isReservedWord(String word);
160-
160+
161+
public String escapeNameIfNeeded(String name);
162+
161163
/*Если будет нужно - сюда можно добавить подписчиков на события*/
162164
}

src/main/java/ru/fusionsoft/dbgit/core/DBGit.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ public static DBGit getInstance() throws ExceptionDBGit {
6969
}
7070
return dbGit;
7171
}
72-
public static DBGit initUrlInstance(String gitDirUrl) throws ExceptionDBGit {
73-
if (dbGit != null) {
72+
public static DBGit initUrlInstance(String gitDirUrl, boolean force) throws ExceptionDBGit {
73+
if (dbGit != null && !force) {
7474
throw new ExceptionDBGit("Already initialized");
7575
}
7676

src/main/java/ru/fusionsoft/dbgit/meta/MetaTable.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,11 @@
1111
import ru.fusionsoft.dbgit.adapters.IDBAdapter;
1212
import ru.fusionsoft.dbgit.core.DBGitIndex;
1313
import ru.fusionsoft.dbgit.core.ExceptionDBGit;
14-
import ru.fusionsoft.dbgit.core.ExceptionDBGitRunTime;
15-
import ru.fusionsoft.dbgit.core.ItemIndex;
1614
import ru.fusionsoft.dbgit.dbobjects.DBConstraint;
1715
import ru.fusionsoft.dbgit.dbobjects.DBIndex;
18-
import ru.fusionsoft.dbgit.dbobjects.DBSchema;
1916
import ru.fusionsoft.dbgit.dbobjects.DBTable;
2017
import ru.fusionsoft.dbgit.dbobjects.DBTableField;
2118
import ru.fusionsoft.dbgit.utils.CalcHash;
22-
import ru.fusionsoft.dbgit.utils.ConsoleWriter;
2319
import ru.fusionsoft.dbgit.yaml.YamlOrder;
2420

2521
/**
@@ -129,7 +125,7 @@ public String getHash() {
129125
CalcHash ch = new CalcHash()/*{
130126
@Override
131127
public CalcHash addData(String str){
132-
ConsoleWriter.detailsPrintlnGreen(str);
128+
ConsoleWriter.printlnRed(str);
133129
return super.addData(str);
134130
}
135131
}*/;
@@ -161,6 +157,24 @@ public CalcHash addData(String str){
161157

162158
}
163159

160+
// if(this.getTable() != null && this.getTable().getName().contains("clients")){
161+
// ConsoleWriter.printlnRed(MessageFormat.format("-\t-\t-\t-\t-\t-\ntable = {0} ; {1}, \nfields({2}) = \n{3}\nindexes({4}) = \n{5}\nconstraints({6}) = \n{7}"
162+
// ,this.getTable() != null ? this.getTable().getName() + " ; " + truncateHash(this.getTable().getHash()) : "noname"
163+
// ,this.getTable() != null ? this.getTable().getOptions().getChildren().entrySet().stream().map(x->"\n\t\t" + x.getKey() + " : " + x.getValue().getData()).collect(Collectors.joining("")) : "null"
164+
// ,fields.keySet().size()
165+
// ,fields.values().stream()
166+
// .map(x->"\t\t" + x.getName() + ";" + x.getDefaultValue())
167+
// .collect(Collectors.joining("\n"))
168+
// ,indexes.keySet().size()
169+
// ,indexes.values().stream()
170+
// .map(x->"\t\t" + x.getName() + ";" + truncateHash(x.getHash()))
171+
// .collect(Collectors.joining("\n"))
172+
// ,constraints.keySet().size()
173+
// ,constraints.values().stream()
174+
// .map(x->"\t\t" + x.getName() + ";" + truncateHash(x.getHash()))
175+
// .collect(Collectors.joining("\n"))
176+
// ));
177+
// }
164178
return ch.calcHashStr();
165179
}
166180

@@ -230,4 +244,13 @@ public List<Integer> getIdColumns() {
230244

231245
return idColumns;
232246
}
247+
// private String truncateHash(String hash){
248+
// return hash.substring(
249+
// 0,
250+
// 2
251+
// ) + hash.substring(
252+
// hash.length() - 3,
253+
// hash.length() - 1
254+
// );
255+
// }
233256
}

src/main/java/ru/fusionsoft/dbgit/mysql/DBAdapterMySql.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public class DBAdapterMySql extends DBAdapter {
6161
private FactoryDBBackupAdapterMySql backupFactory = new FactoryDBBackupAdapterMySql();
6262
public static Set<String> reservedWords;
6363

64-
public static Object escapeNameIfNeeded(String name) {
64+
public String escapeNameIfNeeded(String name) {
6565
boolean shouldBeEscaped = false;
6666
//TODO Permitted characters in unquoted identifiers:
6767
//ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore)

src/main/java/ru/fusionsoft/dbgit/mysql/DBBackupAdapterMySql.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ public void dropIfExists(IMetaObject imo, StatementLogging stLog) throws SQLExce
205205
stLog.execute(MessageFormat.format("DROP {0} {1}.{2}",
206206
rs.getString("tp"),
207207
nm.getSchema(),
208-
DBAdapterMySql.escapeNameIfNeeded(nm.getName()))
208+
adapter.escapeNameIfNeeded(nm.getName()))
209209
);
210210
}
211211

src/main/java/ru/fusionsoft/dbgit/oracle/FactoryDBAdapterRestoreOracle.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package ru.fusionsoft.dbgit.oracle;
22

3-
import java.sql.Connection;
43
import java.util.Collections;
54
import java.util.HashMap;
65
import java.util.Map;
76

8-
import ru.fusionsoft.dbgit.adapters.DBRestoreMetaNotSupport;
9-
import ru.fusionsoft.dbgit.adapters.DBRestoreMetaSql;
107
import ru.fusionsoft.dbgit.adapters.IDBAdapter;
118
import ru.fusionsoft.dbgit.adapters.IDBAdapterRestoreMetaData;
129
import ru.fusionsoft.dbgit.adapters.IFactoryDBAdapterRestoteMetaData;

src/main/java/ru/fusionsoft/dbgit/postgres/DBAdapterPostgres.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,7 @@ public DBTableData getTableDataPortion(String schema, String nameTable, int port
812812
if (DBGitConfig.getInstance().getBoolean("core", "LIMIT_FETCH", DBGitConfig.getInstance().getBooleanGlobal("core", "LIMIT_FETCH", true))) {
813813
Statement st = getConnection().createStatement();
814814
String query = "select COALESCE(count(*), 0) kolvo from ( select 1 from "+
815-
DBAdapterPostgres.escapeNameIfNeeded(schema) + "." + DBAdapterPostgres.escapeNameIfNeeded(nameTable) + " limit " + (maxRowsCount + 1) + " ) tbl";
815+
escapeNameIfNeeded(schema) + "." + escapeNameIfNeeded(nameTable) + " limit " + (maxRowsCount + 1) + " ) tbl";
816816
ResultSet rs = st.executeQuery(query);
817817
rs.next();
818818
if (rs.getInt("kolvo") > maxRowsCount) {
@@ -827,9 +827,10 @@ public DBTableData getTableDataPortion(String schema, String nameTable, int port
827827
int end = portionSize + portionSize*portionIndex;
828828

829829
Statement st = getConnection().createStatement();
830-
String query = " SELECT * FROM \r\n" +
831-
" (SELECT f.*, ROW_NUMBER() OVER (ORDER BY ctid) DBGIT_ROW_NUM FROM " + DBAdapterPostgres.escapeNameIfNeeded(schema) + "." + DBAdapterPostgres.escapeNameIfNeeded(nameTable) + " f) s\r\n" +
832-
" WHERE DBGIT_ROW_NUM BETWEEN " + begin + " and " + end;
830+
String query =
831+
" SELECT * FROM \r\n" +
832+
" (SELECT f.*, ROW_NUMBER() OVER (ORDER BY ctid) DBGIT_ROW_NUM FROM " + escapeNameIfNeeded(schema) + "." + escapeNameIfNeeded(nameTable) + " f) s\r\n" +
833+
" WHERE DBGIT_ROW_NUM BETWEEN " + begin + " and " + end;
833834
ResultSet rs = st.executeQuery(query);
834835

835836
data.setResultSet(rs);
@@ -865,7 +866,7 @@ public DBTableData getTableDataPortion(String schema, String nameTable, int port
865866

866867
@Override
867868
public DBTableData getTableData(String schema, String nameTable) {
868-
String tableName = DBAdapterPostgres.escapeNameIfNeeded(schema)+"."+ DBAdapterPostgres.escapeNameIfNeeded(nameTable);
869+
String tableName = escapeNameIfNeeded(schema)+"."+ escapeNameIfNeeded(nameTable);
869870
try {
870871
DBTableData data = new DBTableData();
871872

@@ -1040,7 +1041,7 @@ public boolean isReservedWord(String word) {
10401041
}
10411042

10421043

1043-
public static String escapeNameIfNeeded(String name){
1044+
public String escapeNameIfNeeded(String name){
10441045
boolean shouldBeEscaped = !name.equals(name.toLowerCase())
10451046
|| name.contains(".")
10461047
|| name.contains(".")

src/main/java/ru/fusionsoft/dbgit/postgres/DBBackupAdapterPostgres.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ public IMetaObject backupDBObject(IMetaObject obj) throws SQLException, Exceptio
8282
StringBuilder tableDdlSb = new StringBuilder(MessageFormat.format(
8383
"create table {0} as (select * from {1}.{2} where 1={3}) {4};\n alter table {0} owner to {5};\n"
8484
, backupTableSam
85-
, DBAdapterPostgres.escapeNameIfNeeded(schema)
86-
, DBAdapterPostgres.escapeNameIfNeeded(tableName)
85+
, adapter.escapeNameIfNeeded(schema)
86+
, adapter.escapeNameIfNeeded(tableName)
8787
, isToSaveData() ? "1" : "0" //TableData
8888
, metaTable.getTable().getOptions().getChildren().containsKey("tablespace")
8989
? " tablespace " + metaTable.getTable().getOptions().get("tablespace").getData()
@@ -97,18 +97,18 @@ public IMetaObject backupDBObject(IMetaObject obj) throws SQLException, Exceptio
9797
String fkname = fk.substring(fk.indexOf('/')+1,fk.lastIndexOf('.')) ;
9898
String fkschema = fk.substring(0,fk.indexOf('/')) ;
9999

100-
String nameDb = "("+fkschema+ "\\.)?" + "\\\"?" + Pattern.quote(DBAdapterPostgres.escapeNameIfNeeded(fkname)) + "\\\"?(?=\\()";
100+
String nameDb = "("+fkschema+ "\\.)?" + "\\\"?" + Pattern.quote(adapter.escapeNameIfNeeded(fkname)) + "\\\"?(?=\\()";
101101
String nameReplacement = isSaveToSchema()
102-
? Matcher.quoteReplacement(DBAdapterPostgres.escapeNameIfNeeded(PREFIX+fkschema) + "." + fkname)
103-
: Matcher.quoteReplacement(fkschema + "." + DBAdapterPostgres.escapeNameIfNeeded(PREFIX+fkname));
102+
? Matcher.quoteReplacement(adapter.escapeNameIfNeeded(PREFIX+fkschema) + "." + fkname)
103+
: Matcher.quoteReplacement(fkschema + "." + adapter.escapeNameIfNeeded(PREFIX+fkname));
104104
fkRefReplaces.put(nameDb, nameReplacement);
105105
}
106106

107107

108108
for (DBIndex index : metaTable.getIndexes().values()) {
109109
String indexName = index.getName();
110110
String indexNameRe = "\\\"?" + Pattern.quote(indexName) + "\\\"?";
111-
String backupIndexNameRe = Matcher.quoteReplacement(DBAdapterPostgres.escapeNameIfNeeded(
111+
String backupIndexNameRe = Matcher.quoteReplacement(adapter.escapeNameIfNeeded(
112112
PREFIX + indexName
113113
+ ((metaTable.getConstraints().containsKey(index.getName())) ? "_idx" : "")
114114
));
@@ -126,10 +126,10 @@ public IMetaObject backupDBObject(IMetaObject obj) throws SQLException, Exceptio
126126
}
127127

128128
for (DBConstraint constraint : metaTable.getConstraints().values().stream().sorted(Comparator.comparing(x->!x.getName().toLowerCase().contains("pk"))).collect(Collectors.toList())) {
129-
String name = DBAdapterPostgres.escapeNameIfNeeded(PREFIX + constraint.getName());
129+
String name = adapter.escapeNameIfNeeded(PREFIX + constraint.getName());
130130
String constrName = constraint.getName();
131131
String constrNameRe = "\\\"?" + Pattern.quote(constrName) + "\\\"?";
132-
String backupConstrNameRe = Matcher.quoteReplacement(DBAdapterPostgres.escapeNameIfNeeded(PREFIX + constrName));
132+
String backupConstrNameRe = Matcher.quoteReplacement(adapter.escapeNameIfNeeded(PREFIX + constrName));
133133
String constrDef = constraint.getSql().replaceAll(constrNameRe, backupConstrNameRe);
134134
for(String reference : fkRefReplaces.keySet()){ constrDef = constrDef.replaceAll(reference, fkRefReplaces.get(reference)); }
135135

@@ -210,10 +210,10 @@ public void restoreDBObject(IMetaObject obj) throws Exception {
210210

211211
private String getFullDbName(String schema, String objectName) {
212212
if (isSaveToSchema()){
213-
return DBAdapterPostgres.escapeNameIfNeeded(PREFIX + schema) + "." + DBAdapterPostgres.escapeNameIfNeeded(objectName);
213+
return adapter.escapeNameIfNeeded(PREFIX + schema) + "." + adapter.escapeNameIfNeeded(objectName);
214214
}
215215
else {
216-
return DBAdapterPostgres.escapeNameIfNeeded(schema) + "." + DBAdapterPostgres.escapeNameIfNeeded(PREFIX + objectName);
216+
return adapter.escapeNameIfNeeded(schema) + "." + adapter.escapeNameIfNeeded(PREFIX + objectName);
217217
}
218218

219219
}
@@ -230,7 +230,7 @@ public void dropIfExists(String owner, String objectName, StatementLogging stLog
230230
"where sch = '" + owner.toLowerCase() + "' and obj_name = '"+objectName+"'");
231231

232232
while (rs.next()) {
233-
stLog.execute("drop " + rs.getString("tp") + " " + DBAdapterPostgres.escapeNameIfNeeded(owner) + "." + DBAdapterPostgres.escapeNameIfNeeded(objectName));
233+
stLog.execute("drop " + rs.getString("tp") + " " + adapter.escapeNameIfNeeded(owner) + "." + adapter.escapeNameIfNeeded(objectName));
234234
}
235235

236236
rs.close();
@@ -260,8 +260,8 @@ public void dropIfExists(IMetaObject imo, StatementLogging stLog) throws Excepti
260260
while (rs.next()) {
261261
stLog.execute(MessageFormat.format("DROP {0} {1}.{2}",
262262
rs.getString("tp"),
263-
DBAdapterPostgres.escapeNameIfNeeded(nm.getSchema()),
264-
DBAdapterPostgres.escapeNameIfNeeded(nm.getName())
263+
adapter.escapeNameIfNeeded(nm.getSchema()),
264+
adapter.escapeNameIfNeeded(nm.getName())
265265
));
266266
}
267267

@@ -300,7 +300,7 @@ public boolean createSchema(StatementLogging stLog, String schema) {
300300
rs.next();
301301
if (rs.getInt("cnt") == 0) {
302302
ConsoleWriter.detailsPrintLn(lang.getValue("general", "backup", "creatingSchema").withParams(PREFIX + schema));
303-
stLog.execute("create schema " + DBAdapterPostgres.escapeNameIfNeeded(PREFIX + schema));
303+
stLog.execute("create schema " + adapter.escapeNameIfNeeded(PREFIX + schema));
304304
}
305305

306306
rs.close();

0 commit comments

Comments
 (0)