gluesql_test_suite/function/
lpad_rpad.rs1use {
2 crate::*,
3 gluesql_core::{
4 error::{EvaluateError, TranslateError},
5 prelude::{Payload, Value::*},
6 },
7};
8
9test_case!(lpad_rpad, {
10 let g = get_tester!();
11
12 let test_cases = [
13 (
14 "CREATE TABLE Item (name TEXT DEFAULT LPAD('a', 5) || LPAD('b', 3))",
15 Ok(Payload::Create),
16 ),
17 ("INSERT INTO Item VALUES ('hello')", Ok(Payload::Insert(1))),
18 (
19 "CREATE TABLE NullName (name TEXT NULL)",
20 Ok(Payload::Create),
21 ),
22 ("INSERT INTO NullName VALUES (NULL)", Ok(Payload::Insert(1))),
23 (
24 "CREATE TABLE NullNumber (number INTEGER NULL)",
25 Ok(Payload::Create),
26 ),
27 (
28 "INSERT INTO NullNumber VALUES (NULL)",
29 Ok(Payload::Insert(1)),
30 ),
31 (
32 "SELECT LPAD(name, 10), RPAD(name, 10) FROM Item",
33 Ok(select!(
34 "LPAD(name, 10)" | "RPAD(name, 10)"
35 Str | Str;
36 " hello".to_owned() "hello ".to_owned()
37 )),
38 ),
39 (
40 "SELECT LPAD(name, 10, 'ab'), RPAD(name, 10, 'ab') FROM Item",
41 Ok(select!(
42 "LPAD(name, 10, 'ab')" | "RPAD(name, 10, 'ab')"
43 Str | Str;
44 "ababahello".to_owned() "helloababa".to_owned()
45 )),
46 ),
47 (
48 "SELECT LPAD(name, 3), RPAD(name, 3) FROM Item",
49 Ok(select!(
50 "LPAD(name, 3)" | "RPAD(name, 3)"
51 Str | Str;
52 "hel".to_owned() "hel".to_owned()
53 )),
54 ),
55 (
56 "SELECT LPAD(name, 3, 'ab'), RPAD(name, 3, 'ab') FROM Item",
57 Ok(select!(
58 "LPAD(name, 3, 'ab')" | "RPAD(name, 3, 'ab')"
59 Str | Str;
60 "hel".to_owned() "hel".to_owned()
61 )),
62 ),
63 (
64 "SELECT LPAD(name, 10, 'ab') AS lpad FROM NullName",
65 Ok(select_with_null!(lpad; Null)),
66 ),
67 (
68 "SELECT RPAD(name, 10, 'ab') AS rpad FROM NullName",
69 Ok(select_with_null!(rpad; Null)),
70 ),
71 (
72 "SELECT LPAD('hello', number, 'ab') AS lpad FROM NullNumber",
73 Ok(select_with_null!(lpad; Null)),
74 ),
75 (
76 "SELECT RPAD('hello', number, 'ab') AS rpad FROM NullNumber",
77 Ok(select_with_null!(rpad; Null)),
78 ),
79 (
80 "SELECT LPAD('hello', 10, name) AS lpad FROM NullName",
81 Ok(select_with_null!(lpad; Null)),
82 ),
83 (
84 "SELECT RPAD('hello', 10, name) AS rpad FROM NullName",
85 Ok(select_with_null!(rpad; Null)),
86 ),
87 (
88 "SELECT LPAD(name) FROM Item",
89 Err(TranslateError::FunctionArgsLengthNotWithinRange {
90 name: "LPAD".to_owned(),
91 expected_minimum: 2,
92 expected_maximum: 3,
93 found: 1,
94 }
95 .into()),
96 ),
97 (
98 "SELECT RPAD(name) FROM Item",
99 Err(TranslateError::FunctionArgsLengthNotWithinRange {
100 name: "RPAD".to_owned(),
101 expected_minimum: 2,
102 expected_maximum: 3,
103 found: 1,
104 }
105 .into()),
106 ),
107 (
108 "SELECT LPAD(name, 10, 'ab', 'cd') FROM Item",
109 Err(TranslateError::FunctionArgsLengthNotWithinRange {
110 name: "LPAD".to_owned(),
111 expected_minimum: 2,
112 expected_maximum: 3,
113 found: 4,
114 }
115 .into()),
116 ),
117 (
118 "SELECT RPAD(name, 10, 'ab', 'cd') FROM Item",
119 Err(TranslateError::FunctionArgsLengthNotWithinRange {
120 name: "RPAD".to_owned(),
121 expected_minimum: 2,
122 expected_maximum: 3,
123 found: 4,
124 }
125 .into()),
126 ),
127 (
128 "SELECT LPAD(1, 10, 'ab') FROM Item",
129 Err(EvaluateError::FunctionRequiresStringValue("LPAD".to_owned()).into()),
130 ),
131 (
132 "SELECT RPAD(1, 10, 'ab') FROM Item",
133 Err(EvaluateError::FunctionRequiresStringValue("RPAD".to_owned()).into()),
134 ),
135 (
136 "SELECT LPAD(name, -10, 'ab') FROM Item",
137 Err(EvaluateError::FunctionRequiresUSizeValue("LPAD".to_owned()).into()),
138 ),
139 (
140 "SELECT RPAD(name, -10, 'ab') FROM Item",
141 Err(EvaluateError::FunctionRequiresUSizeValue("RPAD".to_owned()).into()),
142 ),
143 (
144 "SELECT LPAD(name, 10.1, 'ab') FROM Item",
145 Err(EvaluateError::FunctionRequiresIntegerValue("LPAD".to_owned()).into()),
146 ),
147 (
148 "SELECT RPAD(name, 10.1, 'ab') FROM Item",
149 Err(EvaluateError::FunctionRequiresIntegerValue("RPAD".to_owned()).into()),
150 ),
151 ];
152
153 for (sql, expected) in test_cases {
154 g.test(sql, expected).await;
155 }
156});