Data update

This commit is contained in:
Ingy döt Net 2025-08-11 18:05:26 -07:00
parent 4d5544505c
commit 4924dd0264
3073 changed files with 55820 additions and 4408 deletions

View file

@ -0,0 +1,6 @@
(assert (= 0 (string:find "abcd" "ab")) "abcd starts with ab")
(assert (= 6 (string:find "hello world" "world")) "world is located at 6")
(assert (= -1 (string:find "abcd" "zn")) "abcd does not contain zn")
(assert (= -1 (string:find "abab" "bb")) "abab does not contain bb")
(assert (= 0 (string:find "abab" "ab")) "abab contains ab")
(assert (= 2 (string:find "abab" "ab" 1)) "starting lookup at index 1, we found ab at position 2")

View file

@ -0,0 +1,17 @@
# Return a list of the indices of all occurrences (including overlapping occurrences)
create or replace function string_positions(haystack, needle) as (
WITH RECURSIVE etc AS (
SELECT
position(needle IN haystack) AS start_pos,
0 as s
UNION ALL
SELECT
position(needle IN substr(haystack, start_pos + 1)) + start_pos AS start_pos,
start_pos as s
FROM etc
WHERE start_pos != s
)
SELECT coalesce(array_agg(start_pos order by start_pos),[]::BIGINT[])
FROM etc
WHERE start_pos > 0 and s != start_pos
);

View file

@ -0,0 +1,14 @@
startsWith("foobar", "foo")
startsWith("barbaz", "bax")
grepl("bar", "foobarqux") #Note order of arguments isn't always the same
grepl("baz", "foobarqux")
endsWith("foobar", "bar")
endsWith("foobar", "baz")
regexpr("bar", "barbazbarbax") #Only returns position of first match
regexpr("foo", "barbazbarbax") #Returns -1 if no match exists
gregexpr("bar", "barbazbarbax") #Returns positions of all matches
gregexpr("foo", "barbazbarbax") #Same output as regexpr() if no match, but as a length-1 list rather than a vector