From adb83373f406bf56036e1914ecef2c9ad3efaa20 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 23 Aug 2016 13:25:10 +0200 Subject: [PATCH 1/2] DATAMONGO-1465 - String arguments passed to DefaultScriptOperations.execute() appear quoted in script. Prepare issue branch. --- pom.xml | 2 +- spring-data-mongodb-cross-store/pom.xml | 4 ++-- spring-data-mongodb-distribution/pom.xml | 2 +- spring-data-mongodb-log4j/pom.xml | 2 +- spring-data-mongodb/pom.xml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index dfb64f9ba3..823f89eae3 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1465-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml index ae0a5d6c8f..fbf73d4ae9 100644 --- a/spring-data-mongodb-cross-store/pom.xml +++ b/spring-data-mongodb-cross-store/pom.xml @@ -6,7 +6,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1465-SNAPSHOT ../pom.xml @@ -48,7 +48,7 @@ org.springframework.data spring-data-mongodb - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1465-SNAPSHOT diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 2d02722262..59ebe4af24 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1465-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-log4j/pom.xml b/spring-data-mongodb-log4j/pom.xml index ee5e3336db..324b07aef9 100644 --- a/spring-data-mongodb-log4j/pom.xml +++ b/spring-data-mongodb-log4j/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1465-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 8072d3f665..798ba73051 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -11,7 +11,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1465-SNAPSHOT ../pom.xml From 66aa6170d0baf96eb31272510825d546266bf7c5 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 23 Aug 2016 14:05:41 +0200 Subject: [PATCH 2/2] DATAMONGO-1465 - Fix String quotation in DefaultScriptOperations.execute(). This change prevents Strings from being quoted prior to sending them as args of a script. --- .../mongodb/core/DefaultScriptOperations.java | 16 ++++++++-------- .../core/DefaultScriptOperationsTests.java | 10 +++++++++- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultScriptOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultScriptOperations.java index 52c7431bfb..2269473a02 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultScriptOperations.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultScriptOperations.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2015 the original author or authors. + * Copyright 2014-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -98,7 +98,7 @@ public Object execute(final ExecutableMongoScript script, final Object... args) @Override public Object doInDB(DB db) throws MongoException, DataAccessException { - return db.eval(script.getCode(), convertScriptArgs(args)); + return db.eval(script.getCode(), convertScriptArgs(false, args)); } }); } @@ -116,7 +116,7 @@ public Object call(final String scriptName, final Object... args) { @Override public Object doInDB(DB db) throws MongoException, DataAccessException { - return db.eval(String.format("%s(%s)", scriptName, convertAndJoinScriptArgs(args))); + return db.eval(String.format("%s(%s)", scriptName, convertAndJoinScriptArgs(true, args))); } }); } @@ -155,7 +155,7 @@ public Set getScriptNames() { return scriptNames; } - private Object[] convertScriptArgs(Object... args) { + private Object[] convertScriptArgs(boolean quote, Object... args) { if (ObjectUtils.isEmpty(args)) { return args; @@ -164,15 +164,15 @@ private Object[] convertScriptArgs(Object... args) { List convertedValues = new ArrayList(args.length); for (Object arg : args) { - convertedValues.add(arg instanceof String ? String.format("'%s'", arg) : this.mongoOperations.getConverter() - .convertToMongoType(arg)); + convertedValues.add(arg instanceof String && quote ? String.format("'%s'", arg) + : this.mongoOperations.getConverter().convertToMongoType(arg)); } return convertedValues.toArray(); } - private String convertAndJoinScriptArgs(Object... args) { - return ObjectUtils.isEmpty(args) ? "" : StringUtils.arrayToCommaDelimitedString(convertScriptArgs(args)); + private String convertAndJoinScriptArgs(boolean quote, Object... args) { + return ObjectUtils.isEmpty(args) ? "" : StringUtils.arrayToCommaDelimitedString(convertScriptArgs(quote, args)); } /** diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultScriptOperationsTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultScriptOperationsTests.java index cdea7a7da3..04834ae69a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultScriptOperationsTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultScriptOperationsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2015 the original author or authors. + * Copyright 2014-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -190,4 +190,12 @@ public void scriptNamesShouldContainNameOfRegisteredScript() { public void scriptNamesShouldReturnEmptySetWhenNoScriptRegistered() { assertThat(scriptOps.getScriptNames(), is(empty())); } + + /** + * @see DATAMONGO-1465 + */ + @Test + public void executeShouldNotQuoteStrings() { + assertThat(scriptOps.execute(EXECUTABLE_SCRIPT, "spring-data"), is((Object) "spring-data")); + } }