diff --git a/sqldev/pom.xml b/sqldev/pom.xml index 72b74fc5..4be8a609 100644 --- a/sqldev/pom.xml +++ b/sqldev/pom.xml @@ -5,7 +5,7 @@ org.utplsql org.utplsql.sqldev - 0.6.5-SNAPSHOT + 0.7.0-SNAPSHOT bundle UTF-8 diff --git a/sqldev/src/main/java/org/utplsql/sqldev/oddgen/RunGenerator.xtend b/sqldev/src/main/java/org/utplsql/sqldev/oddgen/RunGenerator.xtend index ba7743f0..b321b77f 100644 --- a/sqldev/src/main/java/org/utplsql/sqldev/oddgen/RunGenerator.xtend +++ b/sqldev/src/main/java/org/utplsql/sqldev/oddgen/RunGenerator.xtend @@ -36,6 +36,9 @@ class RunGenerator implements OddgenGenerator2 { public static var RESET_PACKAGE = UtplsqlResources.getString("PREF_RESET_PACKAGE_LABEL") public static var CLEAR_SCREEN = UtplsqlResources.getString("PREF_CLEAR_SCREEN_LABEL") public static var INDENT_SPACES = UtplsqlResources.getString("PREF_INDENT_SPACES_LABEL") + + // oddgen node cache + var List runnables = null; override isSupported(Connection conn) { var ret = false @@ -75,17 +78,22 @@ class RunGenerator implements OddgenGenerator2 { } override getNodes(Connection conn, String parentNodeId) { - val preferences = PreferenceModel.getInstance(Preferences.preferences) - val params = new LinkedHashMap() - params.put(RESET_PACKAGE, if (preferences.resetPackage) {YES} else {NO}) - params.put(CLEAR_SCREEN, if (preferences.clearScreen) {YES} else {NO}) - params.put(INDENT_SPACES, String.valueOf(preferences.indentSpaces)) - val UtplsqlDao dao = new UtplsqlDao(conn) - val nodes = dao.runnables - for (node : nodes) { - node.params = params + // oddgen asks for children for each parent node, regardless of load strategy (eager/lazy) + // oddgen does not know about the load strategy, hence caching is the responsibility of the generator + if (runnables === null) { + val preferences = PreferenceModel.getInstance(Preferences.preferences) + val params = new LinkedHashMap() + params.put(RESET_PACKAGE, if (preferences.resetPackage) {YES} else {NO}) + params.put(CLEAR_SCREEN, if (preferences.clearScreen) {YES} else {NO}) + params.put(INDENT_SPACES, String.valueOf(preferences.indentSpaces)) + val UtplsqlDao dao = new UtplsqlDao(conn) + // load node tree eagerly (all nodes in one go) + runnables = dao.runnables + for (node : runnables) { + node.params = params + } } - return nodes + return runnables } override getLov(Connection conn, LinkedHashMap params, List nodes) {