From 03896431a6371b041a2dc500ec080ae30cd8855b Mon Sep 17 00:00:00 2001 From: "Richard G. Curtis" Date: Wed, 5 Jan 2011 17:01:05 +0000 Subject: [PATCH] OPENJPA-1917: Cache column alias. git-svn-id: https://svn.apache.org/repos/asf/openjpa/branches/2.1.x@1055527 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/openjpa/jdbc/sql/SelectImpl.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java index 6e03b8cf5..499ff50ff 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java @@ -2319,6 +2319,7 @@ public class SelectImpl implements PathJoins { private SelectImpl _sel = null; + private Map cachedColumnAlias_ = null; // position in selected columns list where we expect the next load private int _pos = 0; @@ -2399,8 +2400,15 @@ public class SelectImpl // we key directly on objs and join-less cols, or on the alias // for cols with joins PathJoins pj = getJoins(joins); - if (pj != null && pj.path() != null) - obj = getColumnAlias((Column) obj, pj); + if (pj != null && pj.path() != null) { + Object columnAlias = getColumnAlias((Column) obj, pj); + if (joins == null) { + if (cachedColumnAlias_ == null) + cachedColumnAlias_ = new HashMap(); + cachedColumnAlias_.put((Column) obj, columnAlias); + } + return columnAlias != null && _sel._selects.contains(columnAlias); + } return obj != null && _sel._selects.contains(obj); } @@ -2449,7 +2457,13 @@ public class SelectImpl if (pj != null && pj.path() != null) { Column col = (Column) obj; pk = (col.isPrimaryKey()) ? Boolean.TRUE : Boolean.FALSE; - obj = getColumnAlias(col, pj); + if (joins == null && cachedColumnAlias_ != null) { + obj = cachedColumnAlias_.get(col); + if (obj == null) + obj = getColumnAlias(col, pj); + } else { + obj = getColumnAlias(col, pj); + } if (obj == null) throw new SQLException(col.getTable() + ": " + pj.path() + " (" + _sel._aliases + ")");