提交 5a7618d5 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Reduce allocated garbage in Database.getAllSchemaObjects()

上级 a8748cb1
...@@ -51,7 +51,7 @@ public class DropSchema extends DefineCommand { ...@@ -51,7 +51,7 @@ public class DropSchema extends DefineCommand {
} }
if (dropAction == ConstraintActionType.RESTRICT && !schema.isEmpty()) { if (dropAction == ConstraintActionType.RESTRICT && !schema.isEmpty()) {
StatementBuilder buff = new StatementBuilder(); StatementBuilder buff = new StatementBuilder();
for (SchemaObject object : schema.getAll()) { for (SchemaObject object : schema.getAll(null)) {
buff.appendExceptFirst(", "); buff.appendExceptFirst(", ");
buff.append(object.getName()); buff.append(object.getName());
} }
......
...@@ -1564,7 +1564,7 @@ public class Database implements DataHandler { ...@@ -1564,7 +1564,7 @@ public class Database implements DataHandler {
initMetaTables(); initMetaTables();
ArrayList<SchemaObject> list = new ArrayList<>(); ArrayList<SchemaObject> list = new ArrayList<>();
for (Schema schema : schemas.values()) { for (Schema schema : schemas.values()) {
list.addAll(schema.getAll()); schema.getAll(list);
} }
return list; return list;
} }
...@@ -1581,7 +1581,7 @@ public class Database implements DataHandler { ...@@ -1581,7 +1581,7 @@ public class Database implements DataHandler {
} }
ArrayList<SchemaObject> list = new ArrayList<>(); ArrayList<SchemaObject> list = new ArrayList<>();
for (Schema schema : schemas.values()) { for (Schema schema : schemas.values()) {
list.addAll(schema.getAll(type)); schema.getAll(type, list);
} }
return list; return list;
} }
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
package org.h2.schema; package org.h2.schema;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
...@@ -591,30 +592,46 @@ public class Schema extends DbObjectBase { ...@@ -591,30 +592,46 @@ public class Schema extends DbObjectBase {
/** /**
* Get all objects. * Get all objects.
* *
* @return a (possible empty) list of all objects * @param addTo
* list to add objects to, or {@code null} to allocate a new
* list
* @return the specified list with added objects, or a new (possibly empty) list
* with all objects
*/ */
public ArrayList<SchemaObject> getAll() { public ArrayList<SchemaObject> getAll(ArrayList<SchemaObject> addTo) {
ArrayList<SchemaObject> all = Utils.newSmallArrayList(); if (addTo == null) {
all.addAll(tablesAndViews.values()); addTo = Utils.newSmallArrayList();
all.addAll(synonyms.values()); }
all.addAll(sequences.values()); addTo.addAll(tablesAndViews.values());
all.addAll(indexes.values()); addTo.addAll(synonyms.values());
all.addAll(triggers.values()); addTo.addAll(sequences.values());
all.addAll(constraints.values()); addTo.addAll(indexes.values());
all.addAll(constants.values()); addTo.addAll(triggers.values());
all.addAll(functions.values()); addTo.addAll(constraints.values());
return all; addTo.addAll(constants.values());
addTo.addAll(functions.values());
return addTo;
} }
/** /**
* Get all objects of the given type. * Get all objects of the given type.
* *
* @param type the object type * @param type
* @return a (possible empty) list of all objects * the object type
*/ * @param addTo
public ArrayList<SchemaObject> getAll(int type) { * list to add objects to, or {@code null} to allocate a new
Map<String, SchemaObject> map = getMap(type); * list
return new ArrayList<>(map.values()); * @return the specified list with added objects, or a new (possibly empty) list
* with objects of the given type
*/
public ArrayList<SchemaObject> getAll(int type, ArrayList<SchemaObject> addTo) {
Collection<SchemaObject> values = getMap(type).values();
if (addTo != null) {
addTo.addAll(values);
} else {
addTo = new ArrayList<>(values);
}
return addTo;
} }
/** /**
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论