Skip to content

Commit e157f2a

Browse files
committed
Fixed import paramater by supporting classic param syntax. Added new -deleteRIDMapping by default it's TRUE. If false avoids to delete the RID mapping index
1 parent e513713 commit e157f2a

File tree

4 files changed

+103
-71
lines changed

4 files changed

+103
-71
lines changed

core/src/main/java/com/orientechnologies/orient/core/db/tool/ODatabaseExport.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515
*/
1616
package com.orientechnologies.orient.core.db.tool;
1717

18-
import java.io.*;
18+
import java.io.File;
19+
import java.io.FileOutputStream;
20+
import java.io.IOException;
21+
import java.io.OutputStream;
22+
import java.io.OutputStreamWriter;
1923
import java.util.ArrayList;
2024
import java.util.Collection;
2125
import java.util.Collections;
@@ -34,7 +38,12 @@
3438
import com.orientechnologies.orient.core.index.OIndexManagerProxy;
3539
import com.orientechnologies.orient.core.index.ORuntimeKeyIndexDefinition;
3640
import com.orientechnologies.orient.core.iterator.ORecordIteratorCluster;
37-
import com.orientechnologies.orient.core.metadata.schema.*;
41+
import com.orientechnologies.orient.core.metadata.schema.OClass;
42+
import com.orientechnologies.orient.core.metadata.schema.OClassImpl;
43+
import com.orientechnologies.orient.core.metadata.schema.OProperty;
44+
import com.orientechnologies.orient.core.metadata.schema.OPropertyImpl;
45+
import com.orientechnologies.orient.core.metadata.schema.OSchemaProxy;
46+
import com.orientechnologies.orient.core.metadata.schema.OSchemaShared;
3847
import com.orientechnologies.orient.core.record.ORecordInternal;
3948
import com.orientechnologies.orient.core.record.impl.ODocument;
4049
import com.orientechnologies.orient.core.serialization.serializer.OJSONWriter;
@@ -47,8 +56,8 @@
4756
* @author Luca Garulli (l.garulli--at--orientechnologies.com)
4857
*/
4958
public class ODatabaseExport extends ODatabaseImpExpAbstract {
50-
private OJSONWriter writer;
51-
private long recordExported;
59+
protected OJSONWriter writer;
60+
protected long recordExported;
5261
public static final int VERSION = 6;
5362

5463
public ODatabaseExport(final ODatabaseRecord iDatabase, final String iFileName, final OCommandOutputListener iListener)
@@ -477,8 +486,8 @@ private boolean exportRecord(long recordTot, long recordNum, ORecordInternal<?>
477486
try {
478487
if (rec.getIdentity().isValid())
479488
rec.reload();
480-
481-
if( useLineFeedForRecords )
489+
490+
if (useLineFeedForRecords)
482491
writer.append("\n");
483492

484493
if (recordExported > 0)

core/src/main/java/com/orientechnologies/orient/core/db/tool/ODatabaseImpExpAbstract.java

Lines changed: 49 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -79,51 +79,7 @@ public ODatabaseImpExpAbstract setOptions(final String iOptions) {
7979
final String option = o.substring(0, sep);
8080
final List<String> items = OStringSerializerHelper.smartSplit(o.substring(sep + 1), ' ');
8181

82-
if (option.equalsIgnoreCase("-includeClass")) {
83-
includeClasses = new HashSet<String>();
84-
for (String item : items)
85-
includeClasses.add(item.toUpperCase());
86-
87-
} else if (option.equalsIgnoreCase("-excludeClass")) {
88-
excludeClasses = new HashSet<String>(items);
89-
for (String item : items)
90-
excludeClasses.add(item.toUpperCase());
91-
92-
} else if (option.equalsIgnoreCase("-includeCluster")) {
93-
includeClusters = new HashSet<String>(items);
94-
for (String item : items)
95-
includeClusters.add(item.toUpperCase());
96-
97-
} else if (option.equalsIgnoreCase("-excludeCluster")) {
98-
excludeClusters = new HashSet<String>(items);
99-
for (String item : items)
100-
excludeClusters.add(item.toUpperCase());
101-
102-
} else if (option.equalsIgnoreCase("-includeInfo")) {
103-
includeInfo = Boolean.parseBoolean(items.get(0));
104-
105-
} else if (option.equalsIgnoreCase("-includeClusterDefinitions")) {
106-
includeClusterDefinitions = Boolean.parseBoolean(items.get(0));
107-
108-
} else if (option.equalsIgnoreCase("-includeSchema")) {
109-
includeSchema = Boolean.parseBoolean(items.get(0));
110-
111-
} else if (option.equalsIgnoreCase("-includeSecurity")) {
112-
includeSecurity = Boolean.parseBoolean(items.get(0));
113-
114-
} else if (option.equalsIgnoreCase("-includeRecords")) {
115-
includeRecords = Boolean.parseBoolean(items.get(0));
116-
117-
} else if (option.equalsIgnoreCase("-includeIndexDefinitions")) {
118-
includeIndexDefinitions = Boolean.parseBoolean(items.get(0));
119-
120-
} else if (option.equalsIgnoreCase("-includeManualIndexes")) {
121-
includeManualIndexes = Boolean.parseBoolean(items.get(0));
122-
123-
} else if (option.equalsIgnoreCase("-useLineFeedForRecords")) {
124-
useLineFeedForRecords = Boolean.parseBoolean(items.get(0));
125-
126-
}
82+
parseSetting(option, items);
12783
}
12884
}
12985
return this;
@@ -224,4 +180,52 @@ public boolean isUseLineFeedForRecords() {
224180
public void setUseLineFeedForRecords(final boolean useLineFeedForRecords) {
225181
this.useLineFeedForRecords = useLineFeedForRecords;
226182
}
183+
184+
protected void parseSetting(final String option, final List<String> items) {
185+
if (option.equalsIgnoreCase("-includeClass")) {
186+
includeClasses = new HashSet<String>();
187+
for (String item : items)
188+
includeClasses.add(item.toUpperCase());
189+
190+
} else if (option.equalsIgnoreCase("-excludeClass")) {
191+
excludeClasses = new HashSet<String>(items);
192+
for (String item : items)
193+
excludeClasses.add(item.toUpperCase());
194+
195+
} else if (option.equalsIgnoreCase("-includeCluster")) {
196+
includeClusters = new HashSet<String>(items);
197+
for (String item : items)
198+
includeClusters.add(item.toUpperCase());
199+
200+
} else if (option.equalsIgnoreCase("-excludeCluster")) {
201+
excludeClusters = new HashSet<String>(items);
202+
for (String item : items)
203+
excludeClusters.add(item.toUpperCase());
204+
205+
} else if (option.equalsIgnoreCase("-includeInfo")) {
206+
includeInfo = Boolean.parseBoolean(items.get(0));
207+
208+
} else if (option.equalsIgnoreCase("-includeClusterDefinitions")) {
209+
includeClusterDefinitions = Boolean.parseBoolean(items.get(0));
210+
211+
} else if (option.equalsIgnoreCase("-includeSchema")) {
212+
includeSchema = Boolean.parseBoolean(items.get(0));
213+
214+
} else if (option.equalsIgnoreCase("-includeSecurity")) {
215+
includeSecurity = Boolean.parseBoolean(items.get(0));
216+
217+
} else if (option.equalsIgnoreCase("-includeRecords")) {
218+
includeRecords = Boolean.parseBoolean(items.get(0));
219+
220+
} else if (option.equalsIgnoreCase("-includeIndexDefinitions")) {
221+
includeIndexDefinitions = Boolean.parseBoolean(items.get(0));
222+
223+
} else if (option.equalsIgnoreCase("-includeManualIndexes")) {
224+
includeManualIndexes = Boolean.parseBoolean(items.get(0));
225+
226+
} else if (option.equalsIgnoreCase("-useLineFeedForRecords")) {
227+
useLineFeedForRecords = Boolean.parseBoolean(items.get(0));
228+
229+
}
230+
}
227231
}

core/src/main/java/com/orientechnologies/orient/core/db/tool/ODatabaseImport.java

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,15 @@ public class ODatabaseImport extends ODatabaseImpExpAbstract {
8686
public static final String EXPORT_IMPORT_MAP_TREE_STATE_EXT = ".eihtsf";
8787
public static final String EXPORT_IMPORT_MAP_BF_EXT = ".eihtb";
8888

89-
private Map<OPropertyImpl, String> linkedClasses = new HashMap<OPropertyImpl, String>();
90-
private Map<OClass, String> superClasses = new HashMap<OClass, String>();
91-
private OJSONReader jsonReader;
92-
private ORecordInternal<?> record;
93-
private boolean schemaImported = false;
94-
private int exporterVersion = -1;
95-
private ORID schemaRecordId;
96-
private ORID indexMgrRecordId;
89+
protected Map<OPropertyImpl, String> linkedClasses = new HashMap<OPropertyImpl, String>();
90+
protected Map<OClass, String> superClasses = new HashMap<OClass, String>();
91+
protected OJSONReader jsonReader;
92+
protected ORecordInternal<?> record;
93+
protected boolean schemaImported = false;
94+
protected int exporterVersion = -1;
95+
protected ORID schemaRecordId;
96+
protected ORID indexMgrRecordId;
97+
protected boolean deleteRIDMapping = true;
9798

9899
private OLocalHashTable<OIdentifiable, OIdentifiable> exportImportHashTable;
99100

@@ -131,10 +132,17 @@ public ODatabaseImport(final ODatabaseDocument database, final InputStream iStre
131132
@Override
132133
public ODatabaseImport setOptions(String iOptions) {
133134
super.setOptions(iOptions);
134-
135135
return this;
136136
}
137137

138+
@Override
139+
protected void parseSetting(final String option, final List<String> items) {
140+
if (option.equalsIgnoreCase("-deleteRIDMapping"))
141+
deleteRIDMapping = Boolean.parseBoolean(items.get(0));
142+
else
143+
super.parseSetting(option, items);
144+
}
145+
138146
public ODatabaseImport importDatabase() {
139147
try {
140148
if (!(database.getStorage() instanceof OStorageLocalAbstract)) {
@@ -180,6 +188,9 @@ else if (tag.equals("manualIndexes"))
180188
exportImportHashTable.close();
181189
database.setStatus(STATUS.OPEN);
182190

191+
if (isDeleteRIDMapping())
192+
removeExportImportRIDsMap();
193+
183194
listener.onMessage("\n\nDatabase import completed in " + ((System.currentTimeMillis() - time)) + " ms");
184195

185196
} catch (Exception e) {
@@ -896,7 +907,7 @@ private void rewriteLinksInImportedDocuments() throws IOException {
896907
OPhysicalPosition[] positions = cluster.ceilingPositions(new OPhysicalPosition(OClusterPositionFactory.INSTANCE.valueOf(0)));
897908
while (positions.length > 0) {
898909
for (OPhysicalPosition position : positions) {
899-
ORecord record = database.load(new ORecordId(clusterId, position.clusterPosition));
910+
ORecord<?> record = database.load(new ORecordId(clusterId, position.clusterPosition));
900911
if (record instanceof ODocument) {
901912
ODocument document = (ODocument) record;
902913
rewriteLinksInDocument(document);
@@ -925,19 +936,30 @@ private void rewriteLinksInDocument(ODocument document) {
925936
}
926937

927938
public ODatabaseImport removeExportImportRIDsMap() {
939+
listener.onMessage("\nDeleting RID Mapping table...");
928940
exportImportHashTable.delete();
929-
return this;
941+
listener.onMessage("OK\n");
942+
return this;
930943
}
931944

932945
public void close() {
933946
database.declareIntent(null);
934947
}
935948

949+
public boolean isDeleteRIDMapping() {
950+
return deleteRIDMapping;
951+
}
952+
953+
public void setDeleteRIDMapping(boolean deleteRIDMapping) {
954+
this.deleteRIDMapping = deleteRIDMapping;
955+
}
956+
936957
private static class RewritersFactory {
937958
public static final RewritersFactory INSTANCE = new RewritersFactory();
938959

939960
private OLocalHashTable<OIdentifiable, OIdentifiable> exportImportHashTable;
940961

962+
@SuppressWarnings("unchecked")
941963
public <T> FieldRewriter<T> findRewriter(ODocument document, String fieldName, T value) {
942964
if (value == null)
943965
return new IdentityRewriter<T>();
@@ -1010,9 +1032,9 @@ public T rewriteValue(T value) {
10101032
}
10111033
}
10121034

1013-
private static class ListRewriter implements FieldRewriter<List> {
1035+
private static class ListRewriter implements FieldRewriter<List<?>> {
10141036
@Override
1015-
public List rewriteValue(List listValue) {
1037+
public List<?> rewriteValue(List<?> listValue) {
10161038
boolean wasRewritten = false;
10171039
List<Object> result = new ArrayList<Object>(listValue.size());
10181040
for (Object listItem : listValue) {
@@ -1109,11 +1131,11 @@ public OMVRBTreeRIDSet rewriteValue(OMVRBTreeRIDSet setValue) {
11091131
}
11101132
}
11111133

1112-
private static class SetRewriter implements FieldRewriter<Set> {
1134+
private static class SetRewriter implements FieldRewriter<Set<?>> {
11131135
@Override
1114-
public Set rewriteValue(Set setValue) {
1136+
public Set<?> rewriteValue(Set<?> setValue) {
11151137
boolean wasRewritten = false;
1116-
Set result = new HashSet();
1138+
Set<Object> result = new HashSet<Object>();
11171139
for (Object item : setValue) {
11181140
FieldRewriter<Object> fieldRewriter = RewritersFactory.INSTANCE.findRewriter(null, null, item);
11191141
Object newItem = fieldRewriter.rewriteValue(item);

tools/src/main/java/com/orientechnologies/orient/console/OConsoleDatabaseApp.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1470,8 +1470,7 @@ public void compareDatabases(
14701470
}
14711471

14721472
@ConsoleCommand(description = "Import a database into the current one", splitInWords = false)
1473-
public void importDatabase(@ConsoleParameter(name = "options", description = "Import options") final String text,
1474-
@ConsoleParameter(name = "delete-rid-mapping", description = "User password", optional = true) final boolean deleteRIDMapping)
1473+
public void importDatabase(@ConsoleParameter(name = "options", description = "Import options") final String text)
14751474
throws IOException {
14761475
checkForDatabase();
14771476

@@ -1485,8 +1484,6 @@ public void importDatabase(@ConsoleParameter(name = "options", description = "Im
14851484
ODatabaseImport databaseImport = new ODatabaseImport(currentDatabase, fileName, this);
14861485

14871486
databaseImport.setOptions(options).importDatabase();
1488-
if (deleteRIDMapping)
1489-
databaseImport.removeExportImportRIDsMap();
14901487

14911488
databaseImport.close();
14921489
} catch (ODatabaseImportException e) {

0 commit comments

Comments
 (0)