Author: challngr
Date: Wed Feb 17 21:37:22 2016
New Revision: 1730949

URL: http://svn.apache.org/viewvc?rev=1730949&view=rev
Log:
UIMA-4577 Correctly handle keys in property files to avoid malformed CQL.

Modified:
    
uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java
    
uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java?rev=1730949&r1=1730948&r2=1730949&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/DbUtil.java
 Wed Feb 17 21:37:22 2016
@@ -205,6 +205,9 @@ class DbUtil
 
     }
 
+    /**
+     * Imporant: do not pass key fields in the props or this will barf. 
+     */
     static String mkUpdate(String table, String key, Object... props)
     {
         int len = props.length;
@@ -212,20 +215,21 @@ class DbUtil
         buf.append(table);        
         buf.append(" SET ");
         
+        // NOTE: The property set must NOT contain any key fields or this is 
likely to barf.  Caller
+        //       must insure.
         for ( int i = 0; i < len; i+=2) {
             IDbProperty prop = (IDbProperty) props[i];
-            if ( !prop.isPrimaryKey()) {                  // not allowed to 
update this
-                                                          // we allow it in 
'props' so callers can
-                                                          // simply call 
update and expect the right
-                                                          // thing to happen
 
-                buf.append(prop.columnName());
-                buf.append("=");
-                buf.append(rep(prop, props[i+1]));
-                if ( i + 2 < len ) {
-                    buf.append(",");
-                }  
+            if ( prop.isPrimaryKey() ) {
+                throw new IllegalArgumentException("Primary key not allowed in 
UPDATE");
             }
+
+            buf.append(prop.columnName());
+            buf.append("=");
+            buf.append(rep(prop, props[i+1]));
+            if ( i + 2 < len ) {
+                buf.append(",");
+            }  
         }
         buf.append(" WHERE ");
         buf.append(key);

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java?rev=1730949&r1=1730948&r2=1730949&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-database/src/main/java/org/apache/uima/ducc/database/StateServicesDb.java
 Wed Feb 17 21:37:22 2016
@@ -349,17 +349,18 @@ public class StateServicesDb
         try {            
             h = dbManager.open();
             Map<IDbProperty, Object> map = mkMap(serviceId, table, converter, 
props);
-            Object[] updates = new Object[props.size()*2];
+            List<Object> tmp = new ArrayList<Object>();
             int i = 0;
             for ( IDbProperty k : map.keySet() ) {
                 if ( logger.isTrace() ) {
                     logger.trace(methodName, null, "Updating", k.columnName(), 
"with", map.get(k));
                 }
-                updates[i++] = k;
-                updates[i++] = map.get(k);
+                if ( k.isPrimaryKey() ) continue;    // we do not get to 
update this
+                tmp.add(k);
+                tmp.add(map.get(k));
             }
             
-            h.updateProperties(table, key, updates);            
+            h.updateProperties(table, key, tmp.toArray(new 
Object[tmp.size()]));
             return true;
         } catch ( Exception e ) {
             logger.error(methodName, null, "Unable to update properties for 
service", key, "table", table, ":", e);


Reply via email to