+ * 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, [EMAIL PROTECTED] <[EMAIL PROTECTED]> 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 [EMAIL PROTECTED] 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 {



Reply via email to