<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
1. See some comments below.<br>
2. Please, send the full patch diff when done (not just an
incremental diff as you did).<br>
Patch seems ok in overall.<br>
<br>
<div class="moz-cite-prefix">On 09.09.2018 17:57, Nikita Tatunov
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:E3BCC6A6-A137-4887-BD78-844A3F228441@tarantool.org">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">Hello, please
consider corrected version of the patch.</div>
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">Diff with the
previous version at the end.<br class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">On 17 Aug 2018, at 11:25, Alex Khatskevich
<<a href="mailto:avkhatskevich@tarantool.org"
class="" moz-do-not-send="true">avkhatskevich@tarantool.org</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class=""><br style="caret-color: rgb(0, 0, 0);
font-family: Helvetica; font-size: 12px; font-style:
normal; font-variant-caps: normal; font-weight:
normal; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
<br style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">On 16.08.2018 20:00,
N.Tatunov wrote:</span><br style="caret-color: rgb(0,
0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">GLOB is a legacy extension for LIKE
from SQLite. As we want our SQL to<br class="">
be close to ANSI SQL & LIKE to depend on
collations, we do not want to<br class="">
support it. This patch totally removes it from
Tarantool along with any<br class="">
mentions of it.<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">1.We delete it because it
is not working properly, and instead of fixing it we</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">want to replace it with
more general regexp. Delete other unnecessary thoughts</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">from this message.</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">2. Do not use "we", "our"
in commit messages.</span><br style="caret-color:
rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>As discussed above it’s not going to be changed.</div>
</div>
</div>
</div>
</blockquote>
Ok.<br>
<blockquote type="cite"
cite="mid:E3BCC6A6-A137-4887-BD78-844A3F228441@tarantool.org">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class=""> static int<br class="">
sql_utf8_pattern_compare(const char *pattern,<br
class="">
<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span>const char
*string,<br class="">
-<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span>const struct
compareInfo *pInfo,<br class="">
-<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span>UChar32
matchOther)<br class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span>const int
*is_like_ci,<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">Pass this parameter by
value.</span><br style="caret-color: rgb(0, 0, 0);
font-family: Helvetica; font-size: 12px; font-style:
normal; font-variant-caps: normal; font-weight:
normal; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>Fixed.</div>
<br class="">
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span>UChar32
match_other)<br class="">
{<br class="">
<span class="Apple-tab-span" style="white-space: pre;"> </span>/*
Next pattern and input string chars */<br class="">
<span class="Apple-tab-span" style="white-space: pre;"> </span>UChar32
c, c2;<br class="">
-<span class="Apple-tab-span" style="white-space: pre;"> </span>/*
"?" or "_" */<br class="">
-<span class="Apple-tab-span" style="white-space: pre;"> </span>UChar32
matchOne = pInfo->matchOne;<br class="">
-<span class="Apple-tab-span" style="white-space: pre;"> </span>/*
"*" or "%" */<br class="">
-<span class="Apple-tab-span" style="white-space: pre;"> </span>UChar32
matchAll = pInfo->matchAll;<br class="">
-<span class="Apple-tab-span" style="white-space: pre;"> </span>/*
True if uppercase==lowercase */<br class="">
-<span class="Apple-tab-span" style="white-space: pre;"> </span>UChar32
noCase = pInfo->noCase;<br class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span>/*
"_" */<br class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span>UChar32
match_one = '_';<br class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span>/*
"%" */<br class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span>UChar32
match_all = '%';<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">This variables consumes
stack. Can they be moved to defines?</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">If it will break smth,
make them const.</span><br style="caret-color: rgb(0,
0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>moved them to defines.</div>
<br class="">
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class=""><br class="">
int<br class="">
-sqlite3_strlike(const char *zPattern, const char
*zStr, unsigned int esc)<br class="">
+sql_strlike_ci(const char *zPattern, const char
*zStr, unsigned int esc)<br class="">
{<br class="">
-<span class="Apple-tab-span" style="white-space: pre;"> </span>return
sql_utf8_pattern_compare(zPattern, zStr,
&likeInfoNorm, esc);<br class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span>return
sql_utf8_pattern_compare(zPattern, zStr,
&case_insensitive_like, esc);<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">Hardcode
`case_insensitive_like` value here.</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>Done.</div>
<div><br class="">
</div>
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>/**<br
class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span>* Limit the
length of the LIKE pattern to avoid problems<br
class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span>* of deep
recursion and N*N behavior in<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">I thought that only globe
could require N*N time. Check delete the comment.</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>The reason is the recursion in
sql_utf8_pattern_compare() which is still</div>
<div>there.</div>
<div><br class="">
</div>
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class=""><br class="">
-<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span> "ESCAPE
expression must be a single character",<br class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span> "ESCAPE
expression must be a"<br class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span> " single
character",<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">Do not split error
messages at the middle of a sentence. It makes errors
ungreppable.</span><br style="caret-color: rgb(0, 0,
0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">Make it <80 somehow
different.</span><br style="caret-color: rgb(0, 0, 0);
font-family: Helvetica; font-size: 12px; font-style:
normal; font-variant-caps: normal; font-weight:
normal; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
<br style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>Have already been discussed in this thread.</div>
</div>
</div>
</div>
</blockquote>
I suppose that we concluded to try to fit into 80 and split the
string only<br>
in case it is impossible.<br>
<blockquote type="cite"
cite="mid:E3BCC6A6-A137-4887-BD78-844A3F228441@tarantool.org">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">
<div>
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">-<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>sqlite3_result_error(context,
"LIKE or GLOB pattern can only"<br class="">
-<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span> " contain
UTF-8 characters", -1);<br class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>sqlite3_result_error(context,
"LIKE pattern can only contain"<br class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span> " UTF-8
characters", -1);<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">Do not split error
messages at the middle of a sentence. Make it <80
somehow different.</span><br style="caret-color:
rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>Have already been discussed in this thread.</div>
</div>
</div>
</div>
</blockquote>
same<br>
<blockquote type="cite"
cite="mid:E3BCC6A6-A137-4887-BD78-844A3F228441@tarantool.org">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">
<div>
<div><br class="">
</div>
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>int
*is_like_ci;<br class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span>if
(is_case_sensitive)<br class="">
+<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span>is_like_ci
= (int *)&case_sensitive_like;<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">pass this var by value.</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>We need (void *) in sqlite3CreateFunc(), i don’t think
it’s relevant to pass</div>
<div>variable by value.</div>
</div>
</div>
</div>
</blockquote>
Yes, sorry.<br>
<blockquote type="cite"
cite="mid:E3BCC6A6-A137-4887-BD78-844A3F228441@tarantool.org">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">diff --git
a/test/sql-tap/alter.test.lua
b/test/sql-tap/alter.test.lua<br class="">
index cfe2801..773bdeb 100755<br class="">
--- a/test/sql-tap/alter.test.lua<br class="">
+++ b/test/sql-tap/alter.test.lua<br class="">
@@ -230,9 +230,10 @@ test:do_execsql_test(<br class="">
test:do_execsql_test(<br class="">
"alter-5.1",<br class="">
[[<br class="">
+ PRAGMA case_sensitive_like = true;<br
class="">
CREATE TABLE xyz(x PRIMARY KEY);<br class="">
ALTER TABLE xyz RENAME TO "xyz1234abc";<br
class="">
- SELECT "name" FROM "_space" WHERE "name" GLOB
'xyz*';<br class="">
+ SELECT "name" FROM "_space" WHERE "name" LIKE
'xyz%';<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">This test become
unreasonably complex.</span><br style="caret-color:
rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">Do just "select where
name = 'xyz1234abc'</span><br style="caret-color:
rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">Or at least delete
case_sensitive…</span></div>
</blockquote>
<div><br class="">
</div>
<div>Done.</div>
<br class="">
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class=""> ]], {<br class="">
-- <alter-5.1><br class="">
"xyz1234abc"<br class="">
@@ -243,7 +244,8 @@ test:do_execsql_test(<br class="">
"alter-5.2",<br class="">
[[<br class="">
ALTER TABLE "xyz1234abc" RENAME TO xyzabc;<br
class="">
- SELECT "name" FROM "_space" WHERE "name" GLOB
'XYZ*';<br class="">
+ SELECT "name" FROM "_space" WHERE "name" LIKE
'XYZ%';<br class="">
+ PRAGMA case_sensitive_like = false;<br
class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">This test become
unreasonably complex.</span><br style="caret-color:
rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">Do just "select where
name = ‘xyz1234abc'</span><br style="caret-color:
rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>Done.</div>
<div><br class="">
</div>
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">--- NOTE: This test needs refactoring
after deletion of GLOB &<br class="">
---<span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span>type
restrictions for LIKE. (See #3572)<br class="">
--- {"LIKE", "like"},<br class="">
--- {"GLOB", "glob"},<br class="">
+ {"LIKE", "like"},<br class="">
{"AND", "and"},<br class="">
{"OR", "or"},<br class="">
{"MATCH", "match"},<br class="">
@@ -98,12 +95,9 @@ operations = {<br class="">
{"+", "-"},<br class="">
{"<<", ">>", "&", "|"},<br
class="">
{"<", "<=", ">", ">="},<br class="">
--- NOTE: This test needs refactoring after deletion
of GLOB &<br class="">
---<span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span>type
restrictions for LIKE. (See #3572)<br class="">
-- Another NOTE: MATCH & REGEXP aren't supported
in Tarantool &<br class="">
---<span class="Apple-converted-space"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span>are waiting
for their hour, don't confuse them<br class="">
---<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span>being
commented with ticket above.<br class="">
- {"=", "==", "!=", "<>"}, --"LIKE", "GLOB"},
--"MATCH", "REGEXP"},<br class="">
+--<span class="Apple-converted-space"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;"> </span><span
class="Apple-converted-space"> </span>are waiting
for their hour.<br class="">
+ {"=", "==", "!=", "<>", "LIKE"}, --"MATCH",
"REGEXP"},<br class="">
{"AND"},<br class="">
{"OR"},<br class="">
}<br class="">
@@ -128,7 +122,7 @@ end<br class="">
-- EVIDENCE-OF: R-15514-65163 SQLite understands the
following binary<br class="">
-- operators, in order from highest to lowest
precedence: || * / % + -<br class="">
-- << >> & | < <= > >= =
== != <> IS IS<br class="">
--- NOT IN LIKE GLOB MATCH REGEXP AND OR<br class="">
+-- NOT IN LIKE MATCH REGEXP AND OR<br class="">
--<br class="">
-- EVIDENCE-OF: R-38759-38789 Operators IS and IS NOT
have the same<br class="">
-- precedence as =.<br class="">
@@ -467,18 +461,63 @@ literals = {<br class="">
for _, op in ipairs(oplist) do<br class="">
for n1, rhs in ipairs(literals) do<br class="">
for n2, lhs in ipairs(literals) do<br
class="">
- local t = test:execsql(string.format("
SELECT typeof(%s %s %s) ", lhs, op, rhs))[1]<br
class="">
- test:do_test(<br class="">
- string.format("e_expr-7.%s.%s.%s",
opname[op], n1, n2),<br class="">
- function()<br class="">
- --print("\n op "..op.." t "..t)<br
class="">
- return (((op == "||") and ((t ==
"text") or<br class="">
- (t == "null"))) or<br
class="">
- ((op ~= "||") and (((t ==
"integer") or<br class="">
- (t == "real")) or<br
class="">
- (t == "null"))))
and 1 or 0<br class="">
- end, 1)<br class="">
+ if op ~= "LIKE" then<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">1. Why do not just delete
like from `oplist`?</span><br style="caret-color:
rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">2. We were discussing
this place with you and Georgy, and decided that you
do</span><br style="caret-color: rgb(0, 0, 0);
font-family: Helvetica; font-size: 12px; font-style:
normal; font-variant-caps: normal; font-weight:
normal; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">not touch this for loop
at all.</span><br style="caret-color: rgb(0, 0, 0);
font-family: Helvetica; font-size: 12px; font-style:
normal; font-variant-caps: normal; font-weight:
normal; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>Ok. Commented LIKE in `oplist` (it’s still a binary
operator who knows, maybe we will revive it).</div>
<div><br class="">
</div>
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">-local function glob(args)<br class="">
- return 1<br class="">
-end<br class="">
-box.internal.sql_create_function("GLOB", glob)<br
class="">
-box.internal.sql_create_function("MATCH", glob)<br
class="">
-box.internal.sql_create_function("REGEXP", glob)<br
class="">
+-- NOTE: GLOB is removed from Tarantool, thus it'll
be needed to<br class="">
+-- refactor these calls. They don't work right
now since<br class="">
+-- we don't support MATHC & REGEXP.<br
class="">
+-- local function glob(args)<br class="">
+-- return 1<br class="">
+-- end<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">This test do not test the
glob function. Delete this comment.</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>Done.</div>
<br class="">
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">+<br class="">
+-- box.internal.sql_create_function("MATCH", glob)<br
class="">
+-- box.internal.sql_create_function("REGEXP", glob)<br
class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">You was lucky that
commenting those lines do not break the tests.
(because there is a similar</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">code above)</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">Return it back.</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>Done.</div>
<div><br class="">
</div>
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">@@ -2274,15 +2312,23 @@
test:do_execsql_test(<br class="">
-- </e_expr-16.1.7><br class="">
})<br class="">
--- EVIDENCE-OF: R-52087-12043 The GLOB operator is
similar to LIKE but<br class="">
--- uses the Unix file globbing syntax for its
wildcards.<br class="">
---<br class="">
--- EVIDENCE-OF: R-09813-17279 Also, GLOB is case
sensitive, unlike LIKE.<br class="">
+-- EVIDENCE-OF: R-52087-12043 LIKE doesn't use Unix
file globbing<br class="">
+-- syntax for its wildcards.<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">Those test was designed
especially for the glob function.</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">There are similar tests
for like above.</span><br style="caret-color: rgb(0,
0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">You should delete it
instead of renaming.</span><br style="caret-color:
rgb(0, 0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>Ok, Deleted.</div>
<br class="">
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class=""> --- EVIDENCE-OF: R-39616-20555 Both
GLOB and LIKE may be preceded by the<br class="">
+-- EVIDENCE-OF: R-39616-20555 LIKE may be preceded by
the<br class="">
-- NOT keyword to invert the sense of the test.<br
class="">
--<br class="">
test:do_execsql_test(<br class="">
+ "e_expr-17.2.0",<br class="">
+ [[<br class="">
+ SELECT 'abcxyz' NOT LIKE 'ABC%'<br class="">
+ ]], {<br class="">
+ -- <e_expr-17.2.0><br class="">
+ 1<br class="">
+ -- </e_expr-17.2.0><br class="">
+ })<br class="">
+<br class="">
+test:do_execsql_test(<br class="">
"e_expr-17.2.1",<br class="">
[[<br class="">
- SELECT 'abcxyz' NOT GLOB 'ABC*'<br class="">
+ SELECT 'abcxyz' NOT LIKE 'abc%'<br class="">
]], {<br class="">
-- <e_expr-17.2.1><br class="">
- 1<br class="">
+ 0<br class="">
-- </e_expr-17.2.1><br class="">
})<br class="">
test:do_execsql_test(<br class="">
"e_expr-17.2.2",<br class="">
[[<br class="">
- SELECT 'abcxyz' NOT GLOB 'abc*'<br class="">
+ PRAGMA case_sensitive_like = 0<br class="">
]], {<br class="">
-- <e_expr-17.2.2><br class="">
- 0<br class="">
- -- </e_expr-17.2.2><br class="">
+<br class="">
+ -- <e_expr-17.2.2><br class="">
})<br class="">
test:do_execsql_test(<br class="">
@@ -2405,10 +2461,11 @@ test:do_execsql_test(<br
class="">
-- MUST_WORK_TEST uses access to nullvalue... (sql
parameters) and built in functions<br class="">
if 0>0 then<br class="">
db("nullvalue", "null")<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">do not change tests which
are not working.</span><br style="caret-color: rgb(0,
0, 0); font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant-caps: normal;
font-weight: normal; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">There is a chance chat
you do it wrong and you do not know about it.</span></div>
</blockquote>
<div> </div>
<div>Made it back.</div>
<div><br class="">
</div>
<blockquote type="cite" class="">
<div class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration:
none;" class="">diff --git
a/test/sql-tap/like3.test.lua
b/test/sql-tap/like3.test.lua<br class="">
index 505d2fa..0bc71a0 100755<br class="">
--- a/test/sql-tap/like3.test.lua<br class="">
+++ b/test/sql-tap/like3.test.lua<br class="">
@@ -12,13 +12,13 @@ test:plan(7)<br class="">
-- May you find forgiveness for yourself and
forgive others.<br class="">
-- May you share freely, never taking more than
you give.<br class="">
--<br class="">
--------------------------------------------------------------------------<br
class="">
+-----------------------------------------------------------------<br
class="">
--<br class="">
--- This file implements regression tests for SQLite
library. The<br class="">
--- focus of this file is testing the LIKE and GLOB
operators and<br class="">
--- in particular the optimizations that occur to help
those operators<br class="">
--- run faster and that those optimizations work
correctly when there<br class="">
--- are both strings and blobs being tested.<br
class="">
+-- This file implements regression tests for SQLite
library. The<br class="">
+-- focus of this file is testing the LIKE operator
and<br class="">
+-- in particular the optimizations that occur to help
this<br class="">
+-- operator run faster and that those optimizations
work<br class="">
+-- correctly when there are both strings and blobs
being tested.<br class="">
--<br class="">
-- Ticket 05f43be8fdda9fbd948d374319b99b054140bc36
shows that the following<br class="">
-- SQL was not working correctly:<br class="">
@@ -70,10 +70,11 @@ test:do_execsql_test(<br class="">
test:do_execsql_test(<br class="">
"like3-2.0",<br class="">
[[<br class="">
+ PRAGMA case_sensitive_like = 1;<br class="">
CREATE TABLE t2(a PRIMARY KEY, b TEXT);<br
class="">
INSERT INTO t2 SELECT a, b FROM t1;<br
class="">
CREATE INDEX t2ba ON t2(b,a);<br class="">
- SELECT a, b FROM t2 WHERE b GLOB 'ab*' ORDER
BY +a;<br class="">
+ SELECT a, b FROM t2 WHERE b LIKE 'ab%' ORDER
BY +a;<br class="">
</blockquote>
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none; float: none; display:
inline !important;" class="">Those tests were
especially created for glob. Delete it instead of
renaming.</span><br style="caret-color: rgb(0, 0, 0);
font-family: Helvetica; font-size: 12px; font-style:
normal; font-variant-caps: normal; font-weight:
normal; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; text-decoration: none;" class="">
</div>
</blockquote>
<div><br class="">
</div>
<div>Done.</div>
</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""><br class="">
</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">Diff with the prev version of the patch:</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""><br class="">
</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">diff --git a/src/box/sql/func.c
b/src/box/sql/func.c</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">index 177193e94..28b435ae3 100644</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- a/src/box/sql/func.c</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+++ b/src/box/sql/func.c</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -631,6 +631,12 @@ static const int
case_insensitive_like = 1;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> */</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> static const int case_sensitive_like = 0;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+/**</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ * Wildcards.</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ */</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+#define match_one '_'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+#define match_all '%'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> /**</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> * Possible error returns from
sql_utf8_pattern_compare().</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> */</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -672,15 +678,11 @@ static const int
case_sensitive_like = 0;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> static int</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> sql_utf8_pattern_compare(const char *pattern,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>
const char *string,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>
const int *is_like_ci,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+<span class="Apple-tab-span" style="white-space:pre"> </span>
const int is_like_ci,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>
UChar32 match_other)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>/*
Next pattern and input string chars */</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>UChar32
c, c2;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>/*
"_" */</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>UChar32
match_one = '_';</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>/*
"%" */</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>UChar32
match_all = '%';</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>/*
One past the last escaped input char */</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>const
char *zEscaped = 0;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>const
char *pattern_end = pattern + strlen(pattern);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -741,7 +743,7 @@
sql_utf8_pattern_compare(const char *pattern,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>
*/</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>int
bMatch;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>if
(*is_like_ci)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+<span class="Apple-tab-span" style="white-space:pre"> </span>if
(is_like_ci)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>c
= u_tolower(c);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>while
(string < string_end){</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>/**</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -757,7 +759,7 @@
sql_utf8_pattern_compare(const char *pattern,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>c2
= Utf8Read(string, string_end);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>if
(c2 == SQL_INVALID_UTF8_SYMBOL)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>return
SQL_NOMATCH;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>if
(!(*is_like_ci)) {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+<span class="Apple-tab-span" style="white-space:pre"> </span>if
(!is_like_ci) {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>if
(c2 != c)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>continue;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>}
else {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -786,7 +788,7 @@
sql_utf8_pattern_compare(const char *pattern,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>return
SQL_NOMATCH;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>if
(c == c2)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>continue;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>if
(*is_like_ci) {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+<span class="Apple-tab-span" style="white-space:pre"> </span>if
(is_like_ci) {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>/**</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>
* Small optimisation. Reduce number of</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>
* calls to u_tolower function. SQL</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -814,7 +816,7 @@
sql_utf8_pattern_compare(const char *pattern,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> int</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> sql_strlike_cs(const char *zPattern, const char
*zStr, unsigned int esc)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>return
sql_utf8_pattern_compare(zPattern, zStr,
&case_sensitive_like, esc);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+<span class="Apple-tab-span" style="white-space:pre"> </span>return
sql_utf8_pattern_compare(zPattern, zStr,
case_sensitive_like, esc);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> }</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> /**</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -824,7 +826,7 @@ sql_strlike_cs(const char
*zPattern, const char *zStr, unsigned int esc)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> int</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> sql_strlike_ci(const char *zPattern, const char
*zStr, unsigned int esc)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>return
sql_utf8_pattern_compare(zPattern, zStr,
&case_insensitive_like, esc);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+<span class="Apple-tab-span" style="white-space:pre"> </span>return
sql_utf8_pattern_compare(zPattern, zStr,
case_insensitive_like, esc);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> }</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> /**</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -907,7 +909,7 @@ likeFunc(sqlite3_context
*context, int argc, sqlite3_value **argv)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>sqlite3_like_count++;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> #endif</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>int
res;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>res
= sql_utf8_pattern_compare(zB, zA, is_like_ci, escape);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+<span class="Apple-tab-span" style="white-space:pre"> </span>res
= sql_utf8_pattern_compare(zB, zA, *is_like_ci, escape);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>if
(res == SQL_INVALID_PATTERN) {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>sqlite3_result_error(context,
"LIKE pattern can only contain"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>
" UTF-8 characters", -1);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">diff --git a/src/box/sql/whereexpr.c
b/src/box/sql/whereexpr.c</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">index 947bd5d94..2d9fb6453 100644</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- a/src/box/sql/whereexpr.c</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+++ b/src/box/sql/whereexpr.c</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -218,6 +218,12 @@ operatorMask(int op)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>return
c;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> }</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+/**</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ * Wildcard characters.</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ */</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+#define match_one '_'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+#define match_all '%'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> /**</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> * Check to see if the given expression is a
LIKE operator that</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -258,9 +264,6 @@ is_like(Parse *pParse,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>int
c;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>/*
Number of non-wildcard prefix characters */</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>int
cnt;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>/*
Wildcard characters */</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>char
match_all = '%';</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-<span class="Apple-tab-span" style="white-space:pre"> </span>char
match_one = '_';</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>/*
Database connection */</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>sqlite3
*db = pParse->db;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>sqlite3_value
*pVal = 0;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">diff --git a/test/sql-tap/alter.test.lua
b/test/sql-tap/alter.test.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">index 773bdebdb..98338c493 100755</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- a/test/sql-tap/alter.test.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+++ b/test/sql-tap/alter.test.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -230,10 +230,9 @@ test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> "alter-5.1",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- PRAGMA case_sensitive_like = true;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> CREATE TABLE xyz(x PRIMARY KEY);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> ALTER TABLE xyz RENAME TO "xyz1234abc";</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT "name" FROM "_space" WHERE "name"
LIKE 'xyz%';</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ SELECT "name" FROM "_space" WHERE "name"
= 'xyz1234abc';</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- <alter-5.1></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> "xyz1234abc"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -244,8 +243,7 @@ test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> "alter-5.2",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> ALTER TABLE "xyz1234abc" RENAME TO
xyzabc;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT "name" FROM "_space" WHERE "name"
LIKE 'XYZ%';</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- PRAGMA case_sensitive_like = false;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ SELECT "name" FROM "_space" WHERE "name"
= 'XYZABC';</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- <alter-5.2></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> "XYZABC"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">diff --git a/test/sql-tap/e_expr.test.lua
b/test/sql-tap/e_expr.test.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">index 162026845..0d69e8535 100755</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- a/test/sql-tap/e_expr.test.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+++ b/test/sql-tap/e_expr.test.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -1,6 +1,6 @@</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> #!/usr/bin/env tarantool</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> test = require("sqltester")</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:plan(11521)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+test:plan(10647)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> --!./tcltestrunner.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- 2010 July 16</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -77,7 +77,7 @@ local operations = {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {"<>", "ne1"},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {"!=", "ne2"},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {"IS", "is"},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- {"LIKE", "like"},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+-- {"LIKE", "like"},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {"AND", "and"},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {"OR", "or"},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {"MATCH", "match"},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -96,8 +96,9 @@ operations = {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {"<<", ">>", "&", "|"},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {"<", "<=", ">", ">="},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- Another NOTE: MATCH & REGEXP aren't
supported in Tarantool &</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- <span class="Apple-tab-span" style="white-space:pre"> </span>
are waiting for their hour.</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- {"=", "==", "!=", "<>", "LIKE"},
--"MATCH", "REGEXP"},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+-- are waiting for their hour,
don't confuse them</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+-- being commented with commenting
of "LIKE".</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ {"=", "==", "!=", "<>"}, --"LIKE"},
--"MATCH", "REGEXP"},</div>
</div>
</div>
</div>
</blockquote>
Delete Like. No one returns here.<br>
<blockquote type="cite"
cite="mid:E3BCC6A6-A137-4887-BD78-844A3F228441@tarantool.org">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">
<div dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode:
space; line-break: after-white-space;" class="">
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {"AND"},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {"OR"},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> }</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -461,67 +462,21 @@ literals = {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> for _, op in ipairs(oplist) do</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> for n1, rhs in ipairs(literals) do</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> for n2, lhs in ipairs(literals) do</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- if op ~= "LIKE" then</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- local t =
test:execsql(string.format(" SELECT typeof(%s %s %s) ",
lhs, op, rhs))[1]</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- test:do_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-
string.format("e_expr-7.%s.%s.%s", opname[op], n1, n2),</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- function()</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- return (((op == "||")
and ((t == "text") or</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- (t == "null")))
or</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ((op ~= "||")
and (((t == "integer") or</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- (t == "real"))
or</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- (t ==
"null")))) and 1 or 0</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- end, 1)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- end</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- end</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- end</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-end</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-local valid_patterns =</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- {"'abc'", "'hexadecimal'", "''", 123, -123,
0,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 123.4, 0.0, -123.4, "X''", "X'0000'",
"NULL"}</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-local invalid_patterns = {"X'ABCDEF'"}</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-for n1, rhs in ipairs(valid_patterns) do</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- for n2, lhs in ipairs(literals) do</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- local t = test:execsql(string.format("
SELECT typeof(%s LIKE %s) ", lhs, rhs))[1]</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- test:do_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- string.format("e_expr-7.%s.LIKE.%s",
n1, n2),</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- function()</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- return (t == "integer" or</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- t == "real" or</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- t == "null") and 1 or 0</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- end, 1)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- end</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-end</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ local t =
test:execsql(string.format(" SELECT typeof(%s %s %s) ",
lhs, op, rhs))[1]</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ test:do_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+
string.format("e_expr-7.%s.%s.%s", opname[op], n1, n2),</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ function()</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ --print("\n op "..op.." t
"..t)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ return (((op == "||") and
((t == "text") or</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ (t == "null"))) or</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ ((op ~= "||") and
(((t == "integer") or</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ (t ==
"real")) or</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ (t ==
"null")))) and 1 or 0</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ end, 1)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-for n1, rhs in ipairs(invalid_patterns) do</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- for n2, lhs in ipairs(literals) do</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- local t = string.format(" SELECT
typeof(%s LIKE %s) ", lhs, rhs)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- local test_name =
string.format("e_expr-7.%s.LIKE.%s", n1 + 12, n2)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- if n2 ~= 13 then</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- test:do_catchsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- test_name,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- t,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <test_name></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 1, "LIKE pattern can only
contain UTF-8 characters"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <test_name></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- else</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- test:do_catchsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- test_name,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- t,</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <test_name></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 0, {"null"}</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <test_name></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> end</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> end</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> end</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> ---------------------------------------------------------------------------</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- Test the IS and IS NOT operators.</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> --</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -1343,15 +1298,12 @@ test:execsql [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> CREATE TABLE tblname(cname PRIMARY KEY);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> ]]</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- NOTE: GLOB is removed from Tarantool, thus
it'll be needed to</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- refactor these calls. They don't work
right now since</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- we don't support MATHC & REGEXP.</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- local function glob(args)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- return 1</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- end</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+local function glob(args)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ return 1</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+end</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- box.internal.sql_create_function("MATCH",
glob)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- box.internal.sql_create_function("REGEXP",
glob)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+box.internal.sql_create_function("MATCH", glob)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+box.internal.sql_create_function("REGEXP", glob)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> local test_cases12 ={</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {1, 123},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> {2, 123.4e05},</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -2312,96 +2264,14 @@ test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- </e_expr-16.1.7></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- EVIDENCE-OF: R-52087-12043 LIKE doesn't use
Unix file globbing</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- syntax for its wildcards.</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">---</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "e_expr-17.1.0",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- PRAGMA case_sensitive_like = 1</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <e_expr-17.1.0></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <e_expr-17.1.0></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "e_expr-17.1.1",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT 'abcxyz' LIKE 'abc*'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <e_expr-17.1.1></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 0</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </e_expr-17.1.1></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "e_expr-17.1.2",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT 'abcxyz' LIKE 'abc%'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <e_expr-17.1.2></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 1</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </e_expr-17.1.2></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "e_expr-17.1.3",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT 'abcxyz' LIKE 'abc???'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <e_expr-17.1.3></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 0</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </e_expr-17.1.3></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "e_expr-17.1.4",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT 'abcxyz' LIKE 'abc___'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <e_expr-17.1.4></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 1</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </e_expr-17.1.4></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "e_expr-17.1.5",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT 'abcxyz' LIKE 'abc%'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <e_expr-17.1.5></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 1</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </e_expr-17.1.5></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "e_expr-17.1.6",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT 'ABCxyz' LIKE 'abc%'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <e_expr-17.1.6></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 0</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </e_expr-17.1.6></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "e_expr-17.1.7",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT 'abcxyz' LIKE 'ABC%'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <e_expr-17.1.7></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 0</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </e_expr-17.1.7></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- EVIDENCE-OF: R-39616-20555 LIKE may be
preceded by the</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- NOT keyword to invert the sense of the test.</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> --</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> "e_expr-17.2.0",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT 'abcxyz' NOT LIKE 'ABC%'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ PRAGMA case_sensitive_like = 1;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ SELECT 'abcxyz' NOT LIKE 'ABC%';</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- <e_expr-17.2.0></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> 1</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -2461,11 +2331,10 @@ test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- MUST_WORK_TEST uses access to nullvalue...
(sql parameters) and built in functions</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> if 0>0 then</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> db("nullvalue", "null")</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> "e_expr-17.2.6",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT 'abcxyz' NOT LIKE NULL</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ SELECT 'abcxyz' NOT GLOB NULL</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- <e_expr-17.2.6></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> "null"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -2475,13 +2344,33 @@ if 0>0 then</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> "e_expr-17.2.7",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT NULL NOT LIKE 'ABC%'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ SELECT 'abcxyz' NOT LIKE NULL</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- <e_expr-17.2.7></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> "null"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- </e_expr-17.2.7></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ "e_expr-17.2.8",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ SELECT NULL NOT GLOB 'abc*'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ -- <e_expr-17.2.8></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ "null"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ -- </e_expr-17.2.8></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ "e_expr-17.2.9",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ SELECT NULL NOT LIKE 'ABC%'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ -- <e_expr-17.2.9></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ "null"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ -- </e_expr-17.2.9></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> db("nullvalue", "")</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> end</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">diff --git
a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">index 55943345f..a6d822ccd 100755</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">---
a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+++
b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -185,7 +185,7 @@ local valid_testcases = {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- Valid testcases.</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> for i, tested_string in ipairs(valid_testcases)
do</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- test_name = prefix .. "8." .. tostring(i)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+ local test_name = prefix .. "8." ..
tostring(i)</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> local test_itself = "SELECT 'abc' LIKE 'ab"
.. tested_string .. "';"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> test:do_execsql_test(test_name, test_itself,
{0})</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">diff --git a/test/sql-tap/like3.test.lua
b/test/sql-tap/like3.test.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">index 0bc71a09c..8f4f79422 100755</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">--- a/test/sql-tap/like3.test.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">+++ b/test/sql-tap/like3.test.lua</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">@@ -67,70 +67,6 @@ test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> -- </like3-1.2></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> </div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "like3-2.0",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- PRAGMA case_sensitive_like = 1;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- CREATE TABLE t2(a PRIMARY KEY, b TEXT);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- INSERT INTO t2 SELECT a, b FROM t1;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- CREATE INDEX t2ba ON t2(b,a);</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT a, b FROM t2 WHERE b LIKE 'ab%'
ORDER BY +a;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <like3-2.0></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 1, "abc", 4, "abc"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </like3-2.0></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "like3-2.1",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT a, b FROM t2 WHERE +b LIKE 'ab%'
ORDER BY +a;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <like3-2.1></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 1, "abc", 4, "abc"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </like3-2.1></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "like3-2.2",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT a, b FROM t2 WHERE b>=x'6162'
AND b LIKE 'ab%'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <like3-2.2></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 4, "abc"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </like3-2.2></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "like3-2.3",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT a, b FROM t2 WHERE +b>=x'6162'
AND +b LIKE 'ab%'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <like3-2.3></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 4, "abc"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </like3-2.3></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "like3-2.4",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT a, b FROM t2 WHERE b LIKE 'ab%'
AND b>=x'6162'</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <like3-2.4></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 4, "abc"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </like3-2.4></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">-test:do_execsql_test(</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- "like3-2.5",</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- [[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- SELECT a, b FROM t2 WHERE +b LIKE 'ab%'
AND +b>=x'6162';</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- PRAGMA case_sensitive_like = 0;</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- ]], {</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- <like3-2.5></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- 4, "abc"</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- -- </like3-2.5></div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">- })</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> test:execsql([[</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> CREATE TABLE t3(x TEXT PRIMARY KEY COLLATE
"unicode_ci");</div>
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class=""> INSERT INTO t3(x)
VALUES('aaa'),('abc'),('abd'),('abe'),('acz');</div>
<div class=""><br class="">
</div>
</div>
<br class="">
<div class="">
<div dir="auto" style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break: after-white-space;"
class="">
<div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0,
0); font-family: Helvetica; font-size: 12px; font-style:
normal; font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none;">--</div>
<div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0,
0); font-family: Helvetica; font-size: 12px; font-style:
normal; font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none;">WBR, Nikita Tatunov.</div>
<div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0,
0); font-family: Helvetica; font-size: 12px; font-style:
normal; font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none;"><a
href="mailto:n.tatunov@tarantool.org" class=""
moz-do-not-send="true">n.tatunov@tarantool.org</a></div>
</div>
</div>
<br class="">
</div>
</div>
</blockquote>
<br>
</body>
</html>