Changeset: 031d83efcbf9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/031d83efcbf9
Added Files:
monetdb5/modules/atoms/Tests/endswith.test
monetdb5/modules/atoms/Tests/startswith.test
monetdb5/modules/kernel/Tests/batstartswith.test
Modified Files:
monetdb5/modules/atoms/Tests/All
monetdb5/modules/atoms/str.c
Branch: txtsim
Log Message:
Fix endsWith function and add atom testing.
diffs (188 lines):
diff --git a/monetdb5/modules/atoms/Tests/All b/monetdb5/modules/atoms/Tests/All
--- a/monetdb5/modules/atoms/Tests/All
+++ b/monetdb5/modules/atoms/Tests/All
@@ -33,3 +33,6 @@ jsonrender
uuid00
strappend
+
+startswith
+endswith
diff --git a/monetdb5/modules/atoms/Tests/endswith.test
b/monetdb5/modules/atoms/Tests/endswith.test
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/atoms/Tests/endswith.test
@@ -0,0 +1,56 @@
+statement ok
+create function endswith(x string, y string) returns bool external name
str."endsWith"
+
+statement ok
+create function iendswith(x string, y string, i bool) returns bool external
name str."endsWith"
+
+query T rowsort
+select endsWith(NULL, '')
+----
+NULL
+
+query T rowsort
+select endsWith('', NULL)
+----
+NULL
+
+query T rowsort
+select endsWith('', '')
+----
+True
+
+query T rowsort
+select endsWith('johndoe', '')
+----
+True
+
+query T rowsort
+select endsWith('', 'johndoe')
+----
+False
+
+query T rowsort
+select endsWith('johndoe', 'doe')
+----
+True
+
+query T rowsort
+select iendswith('one two three', 'three', true)
+----
+True
+
+query T rowsort
+select iendswith('Thomas Müller', 'müller', true)
+----
+True
+
+query T rowsort
+select iendswith('Thomas Müller', 'müller', false)
+----
+False
+
+statement ok
+drop function endswith
+
+statement ok
+drop function iendswith
diff --git a/monetdb5/modules/atoms/Tests/startswith.test
b/monetdb5/modules/atoms/Tests/startswith.test
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/atoms/Tests/startswith.test
@@ -0,0 +1,56 @@
+statement ok
+create function startswith(x string, y string) returns bool external name
str."startsWith"
+
+statement ok
+create function istartswith(x string, y string, i bool) returns bool external
name str."startsWith"
+
+query T rowsort
+select startswith(NULL, '')
+----
+NULL
+
+query T rowsort
+select startswith('', NULL)
+----
+NULL
+
+query T rowsort
+select startswith('', '')
+----
+True
+
+query T rowsort
+select startswith('johndoe', '')
+----
+True
+
+query T rowsort
+select startswith('', 'johndoe')
+----
+False
+
+query T rowsort
+select startswith('johndoe', 'john')
+----
+True
+
+query T rowsort
+select istartswith('one two three', 'three', true)
+----
+False
+
+query T rowsort
+select istartswith('Müller Thomas', 'müller', true)
+----
+True
+
+query T rowsort
+select istartswith('Müller Thomas', 'müller', false)
+----
+False
+
+statement ok
+drop function startswith
+
+statement ok
+drop function istartswith
diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c
--- a/monetdb5/modules/atoms/str.c
+++ b/monetdb5/modules/atoms/str.c
@@ -3669,13 +3669,11 @@ STRendsWith(Client cntxt, MalBlkPtr mb,
const str *arg1 = getArgReference(stk, pci, 1);
const str *arg2 = getArgReference(stk, pci, 2);
bit icase = pci->argc == 4 && *getArgReference_bit(stk, pci, 3) ? true
: false;
-
- str s = *arg1, suffix = *arg2;
- str s_lower, suffix_lower, msg = MAL_SUCCEED;
+ str s = *arg1, suffix = *arg2, msg = MAL_SUCCEED;
if (icase) {
- if ((msg = STRlower(&s, &s_lower)) != MAL_SUCCEED ||
- (msg = STRlower(&suffix, &suffix_lower)) != MAL_SUCCEED)
+ if ((msg = STRlower(&s, &s)) != MAL_SUCCEED ||
+ (msg = STRlower(&suffix, &suffix)) != MAL_SUCCEED)
goto bail;
}
*res = (strNil(s) || strNil(suffix)) ? bit_nil :str_is_suffix(s,
suffix) ;
diff --git a/monetdb5/modules/kernel/Tests/batstartswith.test
b/monetdb5/modules/kernel/Tests/batstartswith.test
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/kernel/Tests/batstartswith.test
@@ -0,0 +1,31 @@
+statement ok
+create table foo(x string)
+
+statement ok
+insert into stringtest values ('johndoe'),('janedoe'),('robertdoe')
+
+statement ok
+create function startsWith(x string, y string) returns bool external name
str."startsWith"
+
+query T rowsort
+select startsWith('', '')
+----
+true
+
+query T rowsort
+select startsWith('johndoe', '')
+
+query T rowsort
+select startsWith('johndoe', 'john')
+
+query T rowsort
+select startsWith(x, '')
+
+query T rowsort
+select startsWith('', x)
+
+statement ok
+drop function startsWith
+
+statement ok
+drop table stringtest
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]