Skip to content

Commit b22f1ab

Browse files
ivan-kripakov-m10mp911de
authored andcommitted
Enable eval and evalsha in Jedis pipeline/transaction.
Original pull request: #2988 Closes #1455
1 parent 9c5f21b commit b22f1ab

File tree

3 files changed

+33
-141
lines changed

3 files changed

+33
-141
lines changed

src/main/java/org/springframework/data/redis/connection/jedis/JedisScriptingCommands.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
/**
2828
* @author Mark Paluch
29+
* @author Ivan Kripakov
2930
* @since 2.0
3031
*/
3132
class JedisScriptingCommands implements RedisScriptingCommands {
@@ -76,11 +77,11 @@ public List<Boolean> scriptExists(String... scriptSha1) {
7677
public <T> T eval(byte[] script, ReturnType returnType, int numKeys, byte[]... keysAndArgs) {
7778

7879
Assert.notNull(script, "Script must not be null");
79-
assertDirectMode();
8080

8181
JedisScriptReturnConverter converter = new JedisScriptReturnConverter(returnType);
82-
return (T) connection.invoke().from(it -> it.eval(script, numKeys, keysAndArgs)).getOrElse(converter,
83-
() -> converter.convert(null));
82+
return (T) connection.invoke()
83+
.from(it -> it.eval(script, numKeys, keysAndArgs), t -> t.eval(script, numKeys, keysAndArgs))
84+
.getOrElse(converter, () -> converter.convert(null));
8485
}
8586

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

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

9898
JedisScriptReturnConverter converter = new JedisScriptReturnConverter(returnType);
99-
return (T) connection.invoke().from(it -> it.evalsha(scriptSha, numKeys, keysAndArgs)).getOrElse(converter,
100-
() -> converter.convert(null));
99+
return (T) connection.invoke()
100+
.from(it -> it.evalsha(scriptSha, numKeys, keysAndArgs), t -> t.evalsha(scriptSha, numKeys, keysAndArgs))
101+
.getOrElse(converter, () -> converter.convert(null)
102+
);
101103
}
102104

103105
private void assertDirectMode() {

src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionPipelineIntegrationTests.java

Lines changed: 1 addition & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
* @author Christoph Strobl
3838
* @author Thomas Darimont
3939
* @author Mark Paluch
40+
* @author Ivan Kripakov
4041
*/
4142
@ExtendWith(SpringExtension.class)
4243
@ContextConfiguration("JedisConnectionIntegrationTests-context.xml")
@@ -75,83 +76,6 @@ public void testClosePoolPipelinedDbSelect() {
7576
}
7677

7778
// Unsupported Ops
78-
@Test
79-
public void testScriptLoadEvalSha() {
80-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testScriptLoadEvalSha);
81-
}
82-
83-
@Test
84-
public void testEvalShaArrayStrings() {
85-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalShaArrayStrings);
86-
}
87-
88-
@Test
89-
public void testEvalShaArrayBytes() {
90-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalShaArrayBytes);
91-
}
92-
93-
@Test
94-
@Disabled
95-
public void testEvalShaNotFound() {}
96-
97-
@Test
98-
@Disabled
99-
public void testEvalShaArrayError() {}
100-
101-
@Test
102-
public void testEvalReturnString() {
103-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnString);
104-
}
105-
106-
@Test
107-
public void testEvalReturnNumber() {
108-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnNumber);
109-
}
110-
111-
@Test
112-
public void testEvalReturnSingleOK() {
113-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnSingleOK);
114-
}
115-
116-
@Test
117-
@Disabled
118-
public void testEvalReturnSingleError() {}
119-
120-
@Test
121-
public void testEvalReturnFalse() {
122-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnFalse);
123-
}
124-
125-
@Test
126-
public void testEvalReturnTrue() {
127-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnTrue);
128-
}
129-
130-
@Test
131-
public void testEvalReturnArrayStrings() {
132-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnArrayStrings);
133-
}
134-
135-
@Test
136-
public void testEvalReturnArrayNumbers() {
137-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnArrayNumbers);
138-
}
139-
140-
@Test
141-
public void testEvalReturnArrayOKs() {
142-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnArrayOKs);
143-
}
144-
145-
@Test
146-
public void testEvalReturnArrayFalses() {
147-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnArrayFalses);
148-
}
149-
150-
@Test
151-
public void testEvalReturnArrayTrues() {
152-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testEvalReturnArrayTrues);
153-
}
154-
15579
@Test
15680
public void testScriptExists() {
15781
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testScriptExists);

src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionTransactionIntegrationTests.java

Lines changed: 24 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
*
3737
* @author Jennifer Hickey
3838
* @author Mark Paluch
39+
* @author Ivan Kripakov
3940
*/
4041
@ExtendWith(SpringExtension.class)
4142
@ContextConfiguration("JedisConnectionIntegrationTests-context.xml")
@@ -56,79 +57,44 @@ public void tearDown() {
5657
@Disabled("Jedis issue: Transaction tries to return String instead of List<String>")
5758
public void testGetConfig() {}
5859

59-
// Unsupported Ops
60-
@Test
61-
@Disabled
62-
public void testScriptLoadEvalSha() {}
63-
64-
@Test
65-
@Disabled
66-
public void testEvalShaArrayStrings() {}
67-
68-
@Test
69-
@Disabled
70-
public void testEvalShaArrayBytes() {}
71-
7260
@Test
73-
@Disabled
74-
public void testEvalShaNotFound() {}
61+
public void testEvalShaNotFound() {
62+
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class)
63+
.isThrownBy(() -> {
64+
connection.evalSha("somefakesha", ReturnType.VALUE, 2, "key1", "key2");
65+
getResults();
66+
});
67+
}
7568

7669
@Test
7770
public void testEvalShaArrayError() {
7871
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class)
79-
.isThrownBy(() -> connection.evalSha("notasha", ReturnType.MULTI, 1, "key1", "arg1"));
72+
.isThrownBy(() -> {
73+
connection.evalSha("notasha", ReturnType.MULTI, 1, "key1", "arg1");
74+
getResults();
75+
});
8076
}
8177

8278
@Test
8379
public void testEvalArrayScriptError() {
8480
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class)
85-
.isThrownBy(() -> connection.eval("return {1,2", ReturnType.MULTI, 1, "foo", "bar"));
81+
.isThrownBy(() -> {
82+
connection.eval("return {1,2", ReturnType.MULTI, 1, "foo", "bar");
83+
getResults();
84+
});
8685
}
8786

8887
@Test
89-
@Disabled
90-
public void testEvalReturnString() {}
91-
92-
@Test
93-
@Disabled
94-
public void testEvalReturnNumber() {}
95-
96-
@Test
97-
@Disabled
98-
public void testEvalReturnSingleOK() {}
99-
100-
@Test
101-
@Disabled
102-
public void testEvalReturnSingleError() {}
103-
104-
@Test
105-
@Disabled
106-
public void testEvalReturnFalse() {}
107-
108-
@Test
109-
@Disabled
110-
public void testEvalReturnTrue() {}
111-
112-
@Test
113-
@Disabled
114-
public void testEvalReturnArrayStrings() {}
115-
116-
@Test
117-
@Disabled
118-
public void testEvalReturnArrayNumbers() {}
119-
120-
@Test
121-
@Disabled
122-
public void testEvalReturnArrayOKs() {}
123-
124-
@Test
125-
@Disabled
126-
public void testEvalReturnArrayFalses() {}
88+
public void testEvalReturnSingleError() {
89+
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class)
90+
.isThrownBy(()-> {
91+
connection.eval("return redis.call('expire','foo')", ReturnType.BOOLEAN, 0);
92+
getResults();
93+
});
94+
}
12795

128-
@Test
129-
@Disabled
130-
public void testEvalReturnArrayTrues() {}
13196

97+
// Unsupported Ops
13298
@Test
13399
@Disabled
134100
public void testScriptExists() {}

0 commit comments

Comments
 (0)