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 -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to