Path: blob/main/crates/polars-sql/tests/functions_string.rs
6939 views
use polars_core::prelude::*;1use polars_lazy::prelude::*;2use polars_sql::*;34#[test]5fn test_string_functions() {6let df = df! {7"a" => &["foo", "xxxbarxxx", "---bazyyy"]8}9.unwrap();10let mut context = SQLContext::new();11context.register("df", df.clone().lazy());12let sql = r#"13SELECT14a,15lower('LITERAL') as lower_literal,16lower(a) as lower_a,17lower("a") as lower_a2,18lower(df.a) as lower_a_df,19lower("df".a) as lower_a_df2,20lower("df"."a") as lower_a_df3,21upper(a) as upper_a,22upper(df.a) as upper_a_df,23upper("df".a) as upper_a_df2,24upper("df"."a") as upper_a_df3,25trim(both 'x' from a) as trim_a,26trim(leading 'x' from a) as trim_a_leading,27trim(trailing 'x' from a) as trim_a_trailing,28ltrim(a) as ltrim_a,29rtrim(a) as rtrim_a,30ltrim(a, '-') as ltrim_a_dash,31rtrim(a, '-') as rtrim_a_dash,32ltrim(a, 'xyz') as ltrim_a_xyz,33rtrim(a, 'xyz') as rtrim_a_xyz34FROM df"#;35let df_sql = context.execute(sql).unwrap().collect().unwrap();36let df_pl = df37.lazy()38.select(&[39col("a"),40lit("LITERAL").str().to_lowercase().alias("lower_literal"),41col("a").str().to_lowercase().alias("lower_a"),42col("a").str().to_lowercase().alias("lower_a2"),43col("a").str().to_lowercase().alias("lower_a_df"),44col("a").str().to_lowercase().alias("lower_a_df2"),45col("a").str().to_lowercase().alias("lower_a_df3"),46col("a").str().to_uppercase().alias("upper_a"),47col("a").str().to_uppercase().alias("upper_a_df"),48col("a").str().to_uppercase().alias("upper_a_df2"),49col("a").str().to_uppercase().alias("upper_a_df3"),50col("a").str().strip_chars(lit("x")).alias("trim_a"),51col("a")52.str()53.strip_chars_start(lit("x"))54.alias("trim_a_leading"),55col("a")56.str()57.strip_chars_end(lit("x"))58.alias("trim_a_trailing"),59col("a")60.str()61.strip_chars_start(lit(LiteralValue::untyped_null()))62.alias("ltrim_a"),63col("a")64.str()65.strip_chars_end(lit(LiteralValue::untyped_null()))66.alias("rtrim_a"),67col("a")68.str()69.strip_chars_start(lit("-"))70.alias("ltrim_a_dash"),71col("a")72.str()73.strip_chars_end(lit("-"))74.alias("rtrim_a_dash"),75col("a")76.str()77.strip_chars_start(lit("xyz"))78.alias("ltrim_a_xyz"),79col("a")80.str()81.strip_chars_end(lit("xyz"))82.alias("rtrim_a_xyz"),83])84.collect()85.unwrap();86assert!(df_sql.equals_missing(&df_pl));87}8889#[test]90fn test_array_to_string() {91let df = df! {92"a" => &["first", "first", "third"],93"b" => &[1, 1, 42],94}95.unwrap();9697let mut context = SQLContext::new();98context.register("df", df.lazy());99100let sql = r#"101SELECT b, ARRAY_TO_STRING("a",', ') AS a2s,102FROM (103SELECT b, ARRAY_AGG(a) AS "a"104FROM df105GROUP BY b106) tbl107ORDER BY a2s"#;108let df_sql = context.execute(sql).unwrap().collect().unwrap();109let df_expected = df! {110"b" => &[1, 42],111"a2s" => &["first, first", "third"],112}113.unwrap();114assert!(df_sql.equals(&df_expected));115}116117#[test]118fn test_array_literal() {119let mut context = SQLContext::new();120context.register("df", DataFrame::empty().lazy());121122let sql = "SELECT [100,200,300] AS arr FROM df";123let df_sql = context.execute(sql).unwrap().collect().unwrap();124let df_expected = df! {125"arr" => &[100i64, 200, 300],126}127.unwrap()128.lazy()129.select(&[col("arr").implode()])130.collect()131.unwrap();132133assert!(df_sql.equals(&df_expected));134assert!(df_sql.height() == 1);135}136137138