openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Patrick Linskey" <plins...@gmail.com>
Subject Re: svn commit: r534623 - /incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
Date Wed, 02 May 2007 22:02:37 GMT
A question:

> +    // bitSet indicating if an alias is removed from parent select
> +    // bit 0 : correspond to alias 0
> +    // bit 1 : correspond to alias 1, etc.
> +    // if the bit is set, the corresponding alias has been removed from parent
> +    // and recorded under subselect.
> +    private int _removedAliasFromParent = 0;

Why not use a BitSet? They're not that much more inefficient (esp
considering that these are pathways that only occur when going to the
database), and they don't have an upper bound of 32 like you'll see
with an int.

Also, where's the test case for this change?

-Patrick

On 5/2/07, wisneskid@apache.org <wisneskid@apache.org> wrote:
> Author: wisneskid
> Date: Wed May  2 14:35:55 2007
> New Revision: 534623
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=534623
> Log:
> Fix for issue OPENJPA-51. It should also resolve issue OPENJPA-173.
>
> Modified:
>     incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
>
> Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
> URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java?view=diff&rev=534623&r1=534622&r2=534623
> ==============================================================================
> --- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
(original)
> +++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
Wed May  2 14:35:55 2007
> @@ -158,6 +158,13 @@
>      // from select if this select selects from a tmp table created by another
>      private SelectImpl _from = null;
>      private SelectImpl _outer = null;
> +
> +    // bitSet indicating if an alias is removed from parent select
> +    // bit 0 : correspond to alias 0
> +    // bit 1 : correspond to alias 1, etc.
> +    // if the bit is set, the corresponding alias has been removed from parent
> +    // and recorded under subselect.
> +    private int _removedAliasFromParent = 0;
>
>      /**
>       * Helper method to return the proper table alias for the given alias index.
> @@ -1487,8 +1494,13 @@
>      private void removeParentJoins(PathJoins pj) {
>          if (_parent == null)
>              return;
> -        if (_parent._joins != null && !_parent._joins.isEmpty())
> -            pj.joins().removeAll(_parent._joins.joins());
> +        if (_parent._joins != null && !_parent._joins.isEmpty()) {
> +            boolean removed = false;
> +            if (_removedAliasFromParent > 0)
> +                removed = _parent._joins.joins().removeAll(pj.joins());
> +            if (!removed)
> +                pj.joins().removeAll(_parent._joins.joins());
> +        }
>          if (!pj.isEmpty())
>              _parent.removeParentJoins(pj);
>      }
> @@ -1897,9 +1909,15 @@
>              }
>          }
>          if (!fromParent && _parent != null) {
> -            alias = _parent.findAlias(table, key, false, this);
> -            if (alias != null)
> +            boolean removeAliasFromParent = key.toString().contains(":");
> +            alias = _parent.findAlias(table, key, removeAliasFromParent, this);
> +            if (alias != null) {
> +                if (removeAliasFromParent) {
> +                    recordTableAlias(table, key, alias);
> +                    _removedAliasFromParent |= (1 << alias.intValue());
> +                }
>                  return alias;
> +            }
>          }
>          if (_subsels != null) {
>              SelectImpl sub;
> @@ -1913,9 +1931,11 @@
>                      if (sub._tables != null)
>                          sub._tables.remove(alias);
>                  } else {
> -                    alias = sub.findAlias(table, key, true, null);
> -                    if (!fromParent && alias != null)
> -                        recordTableAlias(table, key, alias);
> +                    if (fromSub == null) {
> +                        alias = sub.findAlias(table, key, true, null);
> +                        if (!fromParent && alias != null)
> +                            recordTableAlias(table, key, alias);
> +                    }
>                  }
>              }
>          }
>
>
>


-- 
Patrick Linskey
202 669 5907

Mime
View raw message