int indent = 4;
-
-
String[] signatureR1RelationInfo = { "int r", "r", "keyR", "long", "InternalProcedure<RelationInfo>", "entry.id" };
String[] signatureR1Bytes = { "int r", "r", "keyR", "long", "InternalProcedure<byte[]>", "entry.id" };
String[] signatureR1IntSet = { "int r", "r", "keyR", "long", "InternalProcedure<IntSet>", "entry.id" };
String[] signatureChildMap = { "int r", "r", "keyR", "long", "InternalProcedure<ObjectResourceIdMap<String>>", "entry.id" };
String[] signatureRead = { "Read<?> r", "r", "id", "long", "AsyncProcedure", "entry.request" };
String[] signatureAsyncRead = { "AsyncRead<?> r", "r", "id", "long", "AsyncProcedure", "entry.request" };
- String[] signatureMultiRead = { "MultiRead<?> r", "r", "id", "long", "AsyncMultiProcedure", "entry.request" };
+ String[] signatureMultiRead = { "MultiRead<?> r", "r", "id", "long", "SyncMultiProcedure", "entry.request" };
String[] signatureAsyncMultiRead = { "AsyncMultiRead<?> r", "r", "id", "long", "AsyncMultiProcedure", "entry.request" };
String[] signatureExternalRead = { "ExternalRead<?> r", "r", "id", "long", "AsyncProcedure", "entry.request" };
line(content, " return;");
line(content, " }");
}
- line(content, " " + clazz + " entry = (" + clazz + ")cache.getOrCreate" + clazz + "(" + signature[1] + (genAsync ? ", isSync" : "") + ");");
+ line(content, " " + clazz + " entry = (" + clazz + ")cache.getOrCreate" + clazz + "(graph.processor, " + signature[1] + (genAsync ? ", isSync" : "") + ");");
if(genAsync) {
line(content, " if(entry == null) {");
- line(content, " graph.processor.schedule(Integer.MIN_VALUE, new SessionTask(r, graph.processor.THREAD_MASK+1, -1) {");
+ line(content, " graph.processor.schedule(new SessionTask(false) {");
line(content, " @Override");
line(content, " public void run(int thread) {");
line(content, " try {");
String lower = Character.toLowerCase(clazz.charAt(0)) + clazz.substring(1);
- line(content, "" + clazz + " getOrCreate" + clazz + "(" + signature[0] + (genAsync ? ", boolean isSync" : "") + ") throws DatabaseException {");
+ line(content, "" + clazz + " getOrCreate" + clazz + "(QueryProcessor processor, " + signature[0] + (genAsync ? ", boolean isSync" : "") + ") throws DatabaseException {");
line(content, " " + clazz + " existing = null;");
line(content, " synchronized(" + lower + "Map) {");
line(content, " existing = (" + clazz + ")" + lower + "Map.get(" + signature[1] + ");");
line(content, " }");
if(genAsync) {
line(content, " if(existing.isPending()) {");
- line(content, " if(isSync) waitPending(existing);");
+ line(content, " if(isSync) waitPending(processor, existing);");
line(content, " else return null;");
line(content, " }");
} else {
- line(content, " if(existing.isPending()) waitPending(existing);");
+ line(content, " if(existing.isPending()) waitPending(processor, existing);");
}
line(content, " return existing;");
line(content, "}");
content.append("import org.simantics.db.procedure.AsyncMultiProcedure;\n");
content.append("import org.simantics.db.procedure.AsyncProcedure;\n");
content.append("import org.simantics.db.procedure.ListenerBase;\n");
+ content.append("import org.simantics.db.procedure.SyncMultiProcedure;\n");
content.append("import org.simantics.db.request.AsyncMultiRead;\n");
content.append("import org.simantics.db.request.AsyncRead;\n");
content.append("import org.simantics.db.request.ExternalRead;\n");
content.append("import org.simantics.db.request.MultiRead;\n");
content.append("import org.simantics.db.request.Read;\n");
content.append("\n");
- content.append("import gnu.trove.map.hash.TObjectIntHashMap;\n");
- content.append("\n");
content.append("public class QueryCache extends QueryCacheBase {\n");
content.append("\n");
generateQuery(content, "ReadEntry", signatureRead, true, true);
generateQuery(content, "AsyncReadEntry", signatureAsyncRead, true, true);
generateQuery(content, "Types", signatureR1IntSet, true, false);
- //generateQuery(content, "NamespaceIndex", signatureID2, true);
generateQuery(content, "ChildMap", signatureChildMap, true, false);
+ generateQuery(content, "TypeHierarchy", signatureR1IntSet, true, false);
+ generateQuery(content, "SuperTypes", signatureR1IntSet, true, false);
+ generateQuery(content, "SuperRelations", signatureR1IntSet, true, false);
- generateQuery(content, "AssertedStatements", signatureR2TIP, false, false);
generateQuery(content, "AssertedPredicates", signatureR1IP, false, false);
+ generateQuery(content, "AssertedStatements", signatureR2TIP, false, false);
generateQuery(content, "DirectSuperRelations", signatureR1IP, false, false);
- generateQuery(content, "SuperTypes", signatureR1IntSet, false, false);
- generateQuery(content, "TypeHierarchy", signatureR1IntSet, false, false);
- generateQuery(content, "SuperRelations", signatureR1IntSet, false, false);
generateQuery(content, "MultiReadEntry", signatureMultiRead, false, false);
generateQuery(content, "AsyncMultiReadEntry", signatureAsyncMultiRead, false, false);
generateQuery(content, "ExternalReadEntry", signatureExternalRead, false, false);