I am trying to resolve an error that occurs when users are entering text that contains a single backslash thus throwing an error when we cast the string to a bytea.
Error logs:
2023-04-12 18:10:37.249 WARN 1 --- [io-8080-exec-10] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 22P02
2023-04-12 18:10:37.250 ERROR 1 --- [io-8080-exec-10] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: invalid input syntax for type bytea
2023-04-12 18:10:37.251 INFO 1 --- [io-8080-exec-10] o.h.e.j.b.internal.AbstractBatchImpl : HHH000010: On release of batch it still contained JDBC statements
2023-04-12 18:10:37.258 ERROR 1 --- [io-8080-exec-10] c.s.api.bolt.servlet.SlackAppServlet : Failed to handle a request - could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement
A quick explanation, a user inputs an agenda, we encode on write and decode on read.
Some values that do not trigger an error (notice that these working values do not contain a single backslash):
My agenda with my boss and a peer has a few items.
Let's chat today about the weather!
Some values that do not trigger an error (notice that these working values contain a double backslash):
Let's chat with Chad\\Brad has a few items.
In today's meeting with Chad\\Brad let's chat about a few items
Some values that do trigger an error (notice that these values contain a single backslash):
Let's chat with Chad\Brad has a few items.
In today's meeting with Chad\Brad let's chat about a few items
My current code is:
@ColumnTransformer(read = "convert_from(decode(agenda, 'base64'), 'UTF8')", write = "encode(?::bytea, 'base64')")
private String agenda;
After reading through a few stack articles, someone suggested using replace to escape the backslash before casting to a bytea.
I attempted the following:
My expectation would be the logic below is replacing a backslash with a double backslash thus preventing the error. After testing with the example values above, I ran into the exact same error as initially stated.
@ColumnTransformer(read = "convert_from(decode(agenda, 'base64'), 'UTF8')", write = "encode(replace(?, '\', '\\')::bytea, 'base64')")
private String agenda;
Any suggestions would be helpful.