mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
8020b1bd73
- Adding a new argument "flag" to MY_COLLATION_HANDLER::strnncollsp_nchars() and a flag MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES. The flag defines if strnncollsp_nchars() should emulate trailing spaces which were possibly trimmed earlier (e.g. in InnoDB CHAR compression). This is important for NOPAD collations. For example, with this input: - str1= 'a ' (Latin letter a followed by one space) - str2= 'a ' (Latin letter a followed by two spaces) - nchars= 3 if the flag is given, strnncollsp_nchars() will virtually restore one trailing space to str1 up to nchars (3) characters and compare two strings as equal: - str1= 'a ' (one extra trailing space emulated) - str2= 'a ' (as is) If the flag is not given, strnncollsp_nchars() does not add trailing virtual spaces, so in case of a NOPAD collation, str1 will be compared as less than str2 because it is shorter. - Field_string::cmp_prefix() now passes the new flag. Field_varstring::cmp_prefix() and Field_blob::cmp_prefix() do not pass the new flag. - The branch in cmp_whole_field() in storage/innobase/rem/rem0cmp.cc (which handles the CHAR data type) now also passed the new flag. - Fixing UCA collations to respect the new flag. Other collations are possibly also affected, however I had no success in making an SQL script demonstrating the problem. Other collations will be extended to respect this flags in a separate patch later. - Changing the meaning of the last parameter of Field::cmp_prefix() from "number of bytes" (internal length) to "number of characters" (user visible length). The code calling cmp_prefix() from handler.cc was wrong. After this change, the call in handler.cc became correct. The code calling cmp_prefix() from key_rec_cmp() in key.cc was adjusted according to this change. - Old strnncollsp_nchar() related tests in unittest/strings/strings-t.c now pass the new flag. A few new tests also were added, without the flag. |
||
---|---|---|
.. | ||
embedded | ||
examples | ||
json_lib | ||
my_decimal | ||
mysys | ||
mytap | ||
sql | ||
strings | ||
README.txt | ||
unit.pl |
Unit tests directory structure ------------------------------ This is the current structure of the unit tests. More directories will be added over time. mytap Source for the MyTAP library mysys Tests for mysys components bitmap-t.c Unit test for MY_BITMAP base64-t.c Unit test for base64 encoding functions examples Example unit tests. core-t.c Example of raising a signal in the middle of the test THIS TEST WILL STOP ALL FURTHER TESTING! simple-t.c Example of a standard TAP unit test skip-t.c Example where some test points are skipped skip_all-t.c Example of a test where the entire test is skipped todo-t.c Example where test contain test points that are TODO no_plan-t.c Example of a test with no plan (avoid this) Executing unit tests -------------------- To make and execute all unit tests in the directory: make test Observe that the tests in the examples/ directory are just various examples of tests and are not expected to pass. Adding unit tests ----------------- Add a file with a name of the format "foo-t.c" to the appropriate directory and add the following to the Makefile.am in that directory (where ... denotes stuff already there): noinst_PROGRAMS = ... foo-t Note, it's important to have "-t" at the end of the filename, otherwise the test won't be executed by 'make test' ! Documentation ------------- The generated documentation is temporarily placed at: http://www.kindahl.net/mytap/doc/ I will move it to a better place once I figure out where and how.