Skip to content

Enable eval & evalsha in jedis pipeline & transaction. #2988

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

/**
* @author Mark Paluch
* @author Ivan Kripakov
* @since 2.0
*/
class JedisScriptingCommands implements RedisScriptingCommands {
Expand Down Expand Up @@ -76,11 +77,11 @@ public List<Boolean> scriptExists(String... scriptSha1) {
public <T> T eval(byte[] script, ReturnType returnType, int numKeys, byte[]... keysAndArgs) {

Assert.notNull(script, "Script must not be null");
assertDirectMode();

JedisScriptReturnConverter converter = new JedisScriptReturnConverter(returnType);
return (T) connection.invoke().from(it -> it.eval(script, numKeys, keysAndArgs)).getOrElse(converter,
() -> converter.convert(null));
return (T) connection.invoke()
.from(it -> it.eval(script, numKeys, keysAndArgs), t -> t.eval(script, numKeys, keysAndArgs))
.getOrElse(converter, () -> converter.convert(null));
}

@Override
Expand All @@ -93,11 +94,12 @@ public <T> T evalSha(String scriptSha1, ReturnType returnType, int numKeys, byte
public <T> T evalSha(byte[] scriptSha, ReturnType returnType, int numKeys, byte[]... keysAndArgs) {

Assert.notNull(scriptSha, "Script digest must not be null");
assertDirectMode();

JedisScriptReturnConverter converter = new JedisScriptReturnConverter(returnType);
return (T) connection.invoke().from(it -> it.evalsha(scriptSha, numKeys, keysAndArgs)).getOrElse(converter,
() -> converter.convert(null));
return (T) connection.invoke()
.from(it -> it.evalsha(scriptSha, numKeys, keysAndArgs), t -> t.evalsha(scriptSha, numKeys, keysAndArgs))
.getOrElse(converter, () -> converter.convert(null)
);
}

private void assertDirectMode() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
* @author Christoph Strobl
* @author Thomas Darimont
* @author Mark Paluch
* @author Ivan Kripakov
*/
@ExtendWith(SpringExtension.class)
@ContextConfiguration("JedisConnectionIntegrationTests-context.xml")
Expand Down Expand Up @@ -75,83 +76,6 @@ public void testClosePoolPipelinedDbSelect() {
}

// Unsupported Ops
@Test
public void testScriptLoadEvalSha() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testScriptLoadEvalSha);
}

@Test
public void testEvalShaArrayStrings() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalShaArrayStrings);
}

@Test
public void testEvalShaArrayBytes() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalShaArrayBytes);
}

@Test
@Disabled
public void testEvalShaNotFound() {}

@Test
@Disabled
public void testEvalShaArrayError() {}

@Test
public void testEvalReturnString() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnString);
}

@Test
public void testEvalReturnNumber() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnNumber);
}

@Test
public void testEvalReturnSingleOK() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnSingleOK);
}

@Test
@Disabled
public void testEvalReturnSingleError() {}

@Test
public void testEvalReturnFalse() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnFalse);
}

@Test
public void testEvalReturnTrue() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnTrue);
}

@Test
public void testEvalReturnArrayStrings() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnArrayStrings);
}

@Test
public void testEvalReturnArrayNumbers() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnArrayNumbers);
}

@Test
public void testEvalReturnArrayOKs() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnArrayOKs);
}

@Test
public void testEvalReturnArrayFalses() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnArrayFalses);
}

@Test
public void testEvalReturnArrayTrues() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnArrayTrues);
}

@Test
public void testScriptExists() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testScriptExists);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
*
* @author Jennifer Hickey
* @author Mark Paluch
* @author Ivan Kripakov
*/
@ExtendWith(SpringExtension.class)
@ContextConfiguration("JedisConnectionIntegrationTests-context.xml")
Expand All @@ -56,79 +57,44 @@ public void tearDown() {
@Disabled("Jedis issue: Transaction tries to return String instead of List<String>")
public void testGetConfig() {}

// Unsupported Ops
@Test
@Disabled
public void testScriptLoadEvalSha() {}

@Test
@Disabled
public void testEvalShaArrayStrings() {}

@Test
@Disabled
public void testEvalShaArrayBytes() {}

@Test
@Disabled
public void testEvalShaNotFound() {}
public void testEvalShaNotFound() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class)
.isThrownBy(() -> {
connection.evalSha("somefakesha", ReturnType.VALUE, 2, "key1", "key2");
getResults();
});
}

@Test
public void testEvalShaArrayError() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class)
.isThrownBy(() -> connection.evalSha("notasha", ReturnType.MULTI, 1, "key1", "arg1"));
.isThrownBy(() -> {
connection.evalSha("notasha", ReturnType.MULTI, 1, "key1", "arg1");
getResults();
});
}

@Test
public void testEvalArrayScriptError() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class)
.isThrownBy(() -> connection.eval("return {1,2", ReturnType.MULTI, 1, "foo", "bar"));
.isThrownBy(() -> {
connection.eval("return {1,2", ReturnType.MULTI, 1, "foo", "bar");
getResults();
});
}

@Test
@Disabled
public void testEvalReturnString() {}

@Test
@Disabled
public void testEvalReturnNumber() {}

@Test
@Disabled
public void testEvalReturnSingleOK() {}

@Test
@Disabled
public void testEvalReturnSingleError() {}

@Test
@Disabled
public void testEvalReturnFalse() {}

@Test
@Disabled
public void testEvalReturnTrue() {}

@Test
@Disabled
public void testEvalReturnArrayStrings() {}

@Test
@Disabled
public void testEvalReturnArrayNumbers() {}

@Test
@Disabled
public void testEvalReturnArrayOKs() {}

@Test
@Disabled
public void testEvalReturnArrayFalses() {}
public void testEvalReturnSingleError() {
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class)
.isThrownBy(()-> {
connection.eval("return redis.call('expire','foo')", ReturnType.BOOLEAN, 0);
getResults();
});
}

@Test
@Disabled
public void testEvalReturnArrayTrues() {}

// Unsupported Ops
@Test
@Disabled
public void testScriptExists() {}
Expand Down