mirror of
https://github.com/tursodatabase/limbo.git
synced 2025-08-04 18:18:03 +00:00
Add support for substr scalar function
This commit is contained in:
parent
28bd0275c0
commit
27d9af2bf4
5 changed files with 23 additions and 4 deletions
|
@ -104,8 +104,8 @@ This document describes the SQLite compatibility status of Limbo:
|
|||
| sqlite_offset(X) | No | |
|
||||
| sqlite_source_id() | No | |
|
||||
| sqlite_version() | No | |
|
||||
| substr(X,Y,Z) | No | |
|
||||
| substr(X,Y) | No | |
|
||||
| substr(X,Y,Z) | Yes | |
|
||||
| substr(X,Y) | Yes | |
|
||||
| substring(X,Y,Z) | Yes | |
|
||||
| substring(X,Y) | Yes | |
|
||||
| total_changes() | No | |
|
||||
|
|
|
@ -53,6 +53,7 @@ pub enum ScalarFunc {
|
|||
Length,
|
||||
Min,
|
||||
Max,
|
||||
Substr,
|
||||
Substring,
|
||||
Date,
|
||||
Time,
|
||||
|
@ -75,6 +76,7 @@ impl ToString for ScalarFunc {
|
|||
ScalarFunc::Length => "length".to_string(),
|
||||
ScalarFunc::Min => "min".to_string(),
|
||||
ScalarFunc::Max => "max".to_string(),
|
||||
ScalarFunc::Substr => "substr".to_string(),
|
||||
ScalarFunc::Substring => "substring".to_string(),
|
||||
ScalarFunc::Date => "date".to_string(),
|
||||
ScalarFunc::Time => "time".to_string(),
|
||||
|
@ -114,6 +116,7 @@ impl Func {
|
|||
"rtrim" => Ok(Func::Scalar(ScalarFunc::RTrim)),
|
||||
"round" => Ok(Func::Scalar(ScalarFunc::Round)),
|
||||
"length" => Ok(Func::Scalar(ScalarFunc::Length)),
|
||||
"substr" => Ok(Func::Scalar(ScalarFunc::Substr)),
|
||||
"substring" => Ok(Func::Scalar(ScalarFunc::Substring)),
|
||||
"date" => Ok(Func::Scalar(ScalarFunc::Date)),
|
||||
"time" => Ok(Func::Scalar(ScalarFunc::Time)),
|
||||
|
|
|
@ -302,7 +302,7 @@ pub fn translate_expr(
|
|||
});
|
||||
Ok(target_register)
|
||||
}
|
||||
ScalarFunc::Substring => {
|
||||
ScalarFunc::Substr | ScalarFunc::Substring => {
|
||||
let args = if let Some(args) = args {
|
||||
if !(args.len() == 2 || args.len() == 3) {
|
||||
crate::bail_parse_error!(
|
||||
|
|
|
@ -1307,7 +1307,7 @@ impl Program {
|
|||
}
|
||||
state.pc += 1;
|
||||
}
|
||||
Func::Scalar(ScalarFunc::Substring) => {
|
||||
Func::Scalar(ScalarFunc::Substr) | Func::Scalar(ScalarFunc::Substring) => {
|
||||
let start_reg = *start_reg;
|
||||
let str_value = &state.registers[start_reg];
|
||||
let start_value = &state.registers[start_reg + 1];
|
||||
|
|
|
@ -239,6 +239,22 @@ do_execsql_test max-null {
|
|||
select max(null,null)
|
||||
} {}
|
||||
|
||||
do_execsql_test substr-3-args {
|
||||
SELECT substr('limbo', 1, 3);
|
||||
} {lim}
|
||||
|
||||
do_execsql_test substr-3-args-exceed-length {
|
||||
SELECT substr('limbo', 1, 10);
|
||||
} {limbo}
|
||||
|
||||
do_execsql_test substr-3-args-start-exceed-length {
|
||||
SELECT substr('limbo', 10, 3);
|
||||
} {}
|
||||
|
||||
do_execsql_test substr-2-args {
|
||||
SELECT substr('limbo', 3);
|
||||
} {mbo}
|
||||
|
||||
do_execsql_test substring-3-args {
|
||||
SELECT substring('limbo', 1, 3);
|
||||
} {lim}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue