register regexp_capture with register_extension

This commit is contained in:
bit-aloo
2025-08-05 20:19:48 +05:30
parent 0fcb302d8f
commit 20d4da7054

View File

@@ -2,7 +2,7 @@ use regex::Regex;
use turso_ext::{register_extension, scalar, Value, ValueType};
register_extension! {
scalars: { regexp, regexp_like, regexp_substr, regexp_replace }
scalars: { regexp, regexp_like, regexp_substr, regexp_replace, regexp_capture }
}
#[scalar(name = "regexp")]
@@ -83,11 +83,13 @@ fn regexp_replace(&self, args: &[Value]) -> Value {
}
}
#[scalar(name = "regexp_capture")]
fn regexp_capture(args: &[Value]) -> Value {
match (args.get(0), args.get(1)) {
(Some(source), Some(pattern)) if source.value_type() == ValueType::Text && pattern.value_type() == ValueType::Text => {
(Some(source), Some(pattern))
if source.value_type() == ValueType::Text
&& pattern.value_type() == ValueType::Text =>
{
let Some(source_text) = source.to_text() else {
return Value::null();
};
@@ -96,12 +98,15 @@ fn regexp_capture(args: &[Value]) -> Value {
return Value::null();
};
let group_index: usize = args.get(2).and_then(|v| v.to_integer()).map(|n| n as usize).unwrap_or(1);
let group_index: usize = args
.get(2)
.and_then(|v| v.to_integer())
.map(|n| n as usize)
.unwrap_or(1);
let re = match Regex::new(pattern_text) {
Ok(re) => re,
Err(_) => return Value::null()
Err(_) => return Value::null(),
};
if let Some(caps) = re.captures(source_text) {
@@ -112,6 +117,6 @@ fn regexp_capture(args: &[Value]) -> Value {
Value::null()
}
_ => Value::null()
_ => Value::null(),
}
}
}