You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by Stefan Guggisberg <st...@gmail.com> on 2007/03/28 14:31:00 UTC

Re: svn commit: r523272 - /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/DbNameIndex.java

> + * Due to a bug with oracle that treats empty strings a null values

erm2, ich bin nicht sicher ob oracle das als bug betrachtet ;)


On 3/28/07, tripod@apache.org <tr...@apache.org> wrote:
> Author: tripod
> Date: Wed Mar 28 03:49:28 2007
> New Revision: 523272
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=523272
> Log:
> JCR-815 SQLException with OracleBundle PM in name index
>
> Modified:
>     jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/DbNameIndex.java
>
> Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/DbNameIndex.java
> URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/DbNameIndex.java?view=diff&rev=523272&r1=523271&r2=523272
> ==============================================================================
> --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/DbNameIndex.java (original)
> +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/DbNameIndex.java Wed Mar 28 03:49:28 2007
> @@ -27,9 +27,13 @@
>  /**
>   * Implements a {@link StringIndex} that stores and retrieves the names from a
>   * table in a database.
> - *
> + * <p/>
>   * Note that this class is not threadsafe by itself. it needs to be synchronized
>   * by the using application.
> + * <p/>
> + * Due to a bug with oracle that treats empty strings a null values
> + * (see JCR-815), all empty strings are replaced by a ' '. since names never
> + * start with a space, this it not problematic yet.
>   */
>  public class DbNameIndex implements StringIndex {
>
> @@ -88,9 +92,10 @@
>          // check cache
>          Integer index = (Integer) string2Index.get(string);
>          if (index == null) {
> -            int idx = getIndex(string);
> +            String dbString = string.length() == 0 ? " " : string;
> +            int idx = getIndex(dbString);
>              if (idx == -1) {
> -                idx = insertString(string);
> +                idx = insertString(dbString);
>              }
>              index = new Integer(idx);
>              string2Index.put(string, index);
> @@ -113,6 +118,9 @@
>              if (s == null) {
>                  throw new IllegalStateException("String empty???");
>              }
> +            if (s.equals(" ")) {
> +                s = "";
> +            }
>              index2String.put(index, s);
>              string2Index.put(s, index);
>          }
> @@ -172,11 +180,11 @@
>      }
>
>      /**
> -     * Retrieves the string from the database for the givein index.
> +     * Retrieves the string from the database for the given index.
>       * @param index the index to retrieve the string for.
>       * @return the string or <code>null</code> if not found.
>       */
> -    private String getString(int index) {
> +    protected String getString(int index) {
>          PreparedStatement stmt = nameSelect;
>          ResultSet rs = null;
>          try {
>
>
>