Skip to content

Commit 12c3986

Browse files
chrismoclaude
andcommitted
Fix sk_urldecode: add skdoc, fix indexing and string concat
Added missing skdoc metadata so sk_urldecode is discoverable. Fixed pre-existing bugs from SuperDB syntax changes: s[1:3] to s[0:2] (0-based indexing), string + to f-string (+ operator removed for strings). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 7411321 commit 12c3986

2 files changed

Lines changed: 12 additions & 13 deletions

File tree

docs/recipes/string.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,9 @@ super -I string.spq -s -c 'values sk_urldecode("%2Ftavern%20test")' -
235235
op sk_decode_seg s: (
236236
len(s) == 0
237237
? s
238-
: (is_error(hex(s[1:3]))
238+
: (is_error(hex(s[0:2]))
239239
? s
240-
: hex(s[1:3])::string + s[3:])
240+
: f'{hex(s[0:2])::string}{s[2:]}')
241241
)
242242
243243
op sk_urldecode url: (

docs/recipes/string.spq

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -114,21 +114,20 @@ fn skdoc_mid(): (
114114

115115
fn sk_mid(s, start, n): (sk_slice(s, sk_clamp(start, 0, len(s)), sk_clamp(start, 0, len(s)) + sk_clamp(n, 0, len(s))))
116116

117-
-- TODO: skdoc_urldecode
118-
119-
-- URL Decoder for SuperDB
120-
-- Usage: super -I urldecode.spq -s -c 'values sk_urldecode(this)' - <<< '"%%2Ftavern%%20test"'
121-
-- Or inline the definitions in your query
122-
123-
-- Helper operator to decode a single segment after splitting on %%
124-
-- If the segment starts with valid 2-char hex, converts it to the character
125-
-- Otherwise returns the segment as-is
117+
fn skdoc_urldecode(): (
118+
cast(
119+
{name:"sk_urldecode",
120+
type:"op",
121+
desc:"URL-decodes a percent-encoded string. Splits on %%, decodes each hex-encoded segment, and joins back together.",
122+
args:[{name:"url",desc:"The URL-encoded string to decode."}],
123+
examples:[{i:"'%%2Fhello%%20world' | sk_urldecode this",o:"'/hello world'"}]}, <skdoc>)
124+
)
126125
op sk_decode_seg s: (
127126
len(s) == 0
128127
? s
129-
: (is_error(hex(s[1:3]))
128+
: (is_error(hex(s[0:2]))
130129
? s
131-
: hex(s[1:3])::string + s[3:])
130+
: f'{hex(s[0:2])::string}{s[2:]}')
132131
)
133132

134133
-- Main URL decoder operator

0 commit comments

Comments
 (0)