Hello hackers, This patch is a follow-up and generalization to [0].
It adds the following jsonpath methods: lower, upper, initcap, l/r/btrim, replace, split_part. It makes jsonpath able to support expressions like these: select jsonb_path_query('" hElLo WorlD "', '$.btrim().lower().upper().lower().replace("hello","bye") starts with "bye"'); select jsonb_path_query('"abc~@~def~@~ghi"', '$.split_part("~@~", 2)') They, of course, forward their implementation to the internal pg_proc-registered function. As a first wip/poc I've picked the functions I typically need to clean up JSON data. I've also added a README.jsonpath with documentation on how to add a new jsonpath method. If I had this available when I started, it would have saved me some time. So, I am leaving it here for the next hacker. This patch is not particularly intrusive to existing code: Afaict, the only struct I've touched is JsonPathParseItem , where I added { JsonPathParseItem *arg0, *arg1; } method_args. Up until now, most of the jsonpath methods that accept arguments rely on left/right operands, which works, but it could be more convenient for future more complex methods. I've also added the appropriate jspGetArgX(JsonPathItem *v, JsonPathItem *a). Open items - What happens if the jsonpath standard adds a new method by the same name? A.D. mentioned this in [0] with the proposal of having a prefix like pg_ or initial-upper letter. - Still using the default collation like the rest of the jsonpath code. - documentation N/A yet - I do realize that the process of adding a new method sketches an imaginary. CREATE JSONPATH FUNCTION. This has been on the back of my mind for some time now, but I can't say I have an action plan for this yet. GitHub PR view if you prefer: https://github.com/Florents-Tselai/postgres/pull/18 [0] https://www.postgresql.org/message-id/flat/185BF814-9225-46DB-B1A1-6468CF2C8B63%40justatheory.com#1850a37a98198974cf543aefe225ba56 All the best, Flo
v1-0001-This-patch-adds-the-following-string-processing-m.patch
Description: Binary data