Add value of the arguments 70/91770/2
authorPatrick Brady <patrick.brady@att.com>
Fri, 19 Jul 2019 20:03:02 +0000 (13:03 -0700)
committerPatrick Brady <patrick.brady@att.com>
Wed, 24 Jul 2019 21:55:06 +0000 (21:55 +0000)
Also apply the valueof to non svc context arguments.
The original code would always treat null arguments
as null strings. This replaces that functionality
in the prepared statements.

Change-Id: I88ab22c87b86a8f5ff41946757c40a399c37a6c3
Signed-off-by: Patrick Brady <patrick.brady@att.com>
Issue-ID: OJSI-25

appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/dbservices/DbLibServiceQueries.java

index ad4242a..d02eb55 100644 (file)
@@ -70,10 +70,23 @@ public class DbLibServiceQueries {
     public QueryStatus query(String query, SvcLogicContext ctx) {
         ArrayList<String> arguments = new ArrayList<>();
         query = CtxParameterizedResolver.resolveCtxVars(query, ctx, arguments);
-        return query(query, ctx, arguments);
+        return performQuery(query, ctx, null, arguments);
+    }
+    
+    public QueryStatus query(String query, String prefix, SvcLogicContext ctx) {
+        ArrayList<String> arguments = new ArrayList<>();
+        query = CtxParameterizedResolver.resolveCtxVars(query, ctx, arguments);
+        return performQuery(query, ctx, prefix, arguments);
     }
     
     public QueryStatus query(String query, SvcLogicContext ctx, ArrayList<String> arguments) {
+        return performQuery(query, ctx, null, valueOfArrayList(arguments));
+    }
+    public QueryStatus query(String query, SvcLogicContext ctx, String prefix, ArrayList<String> arguments) {
+        return performQuery(query, ctx, prefix, valueOfArrayList(arguments));
+    }
+    
+    private QueryStatus performQuery(String query, SvcLogicContext ctx, String prefix, ArrayList<String> arguments) {
         
         CachedRowSet result = null;
         try {
@@ -82,7 +95,7 @@ public class DbLibServiceQueries {
                 log.debug("No data found");
                 return QueryStatus.NOT_FOUND;
             } else {
-                CtxParameterizedResolver.saveCachedRowSetToCtx(result, ctx, null, dbLibService);
+                CtxParameterizedResolver.saveCachedRowSetToCtx(result, ctx, prefix, dbLibService);
             }
         } catch (SQLException e) {
             log.error("Exception in query()",e);
@@ -94,10 +107,14 @@ public class DbLibServiceQueries {
     public QueryStatus save(String query, SvcLogicContext ctx) {
         ArrayList<String> arguments = new ArrayList<>();
         query = CtxParameterizedResolver.resolveCtxVars(query, ctx, arguments);
-        return save(query,ctx,arguments);
+        return performSave(query, arguments);
     }
     
     public QueryStatus save(String query, SvcLogicContext ctx, ArrayList<String> arguments) {
+        return performSave(query, valueOfArrayList(arguments));
+    }
+    
+    private QueryStatus performSave(String query, ArrayList<String> arguments) {
         boolean success = false;
         try {
             success = dbLibService.writeData(query, arguments, null);
@@ -150,5 +167,16 @@ public class DbLibServiceQueries {
         }
         return dbLibService;
     }
+    
+    //By using String.valueOf on the array list items, we can store any null values as
+    //Strings with the value "null". This mirrors the way queries worked prior to the
+    //prepared statements.
+    private ArrayList<String> valueOfArrayList(ArrayList<String> original) {
+        ArrayList<String> valueOfList = new ArrayList<>();
+        for(String s : original) {
+            valueOfList.add(String.valueOf(s));
+        }
+        return valueOfList;
+    }
 
 }