Tarantool development patches archive
 help / color / mirror / Atom feed
* [tarantool-patches] [PATCH v2 0/2] sql: pattern comparison fixes & GLOB removal
@ 2018-08-16 17:00 N.Tatunov
  2018-08-16 17:00 ` [tarantool-patches] [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue N.Tatunov
                   ` (2 more replies)
  0 siblings, 3 replies; 46+ messages in thread
From: N.Tatunov @ 2018-08-16 17:00 UTC (permalink / raw)
  To: tarantool-patches; +Cc: avkhatskevich, N.Tatunov

Branch: https://github.com/tarantool/tarantool/tree/N_Tatunov/gh-3251-where-like-hanging
Issues:
https://github.com/tarantool/tarantool/issues/3251
https://github.com/tarantool/tarantool/issues/3334
https://github.com/tarantool/tarantool/issues/3589
https://github.com/tarantool/tarantool/issues/3572

Currently we have internal functions for pattern comparisons that are
hanging in certain situations. This patch-set is aimed on refactoring
these functions, fixing possible bugs including the ones that are known.
Also since we want to get close to ANSI SQL it was decided that we're
going to remove GLOB from Tarantool. And due to changes in comparisons
some tests containing GLOB would need refactoring. Thus in order not to
refactor tests that are anyways going to be removed it is quite
convenient to remove GLOB support in the same patch-set.

Changes in v2:
    - Fixes for Alexey's review comments on previous version
    - A lot of code that was touched in the patch is refactored
      according to our code-style.
    - GLOB is removed
    - Internals refactored with respect to GLOB removal
    - Found and removed redundant prototype for sqlite3_user_data
      function

N.Tatunov (2):
  sql: LIKE & GLOB pattern comparison issue
  sql: remove GLOB from Tarantool

 extra/mkkeywordhash.c                              |    1 -
 src/box/sql/analyze.c                              |    7 +-
 src/box/sql/func.c                                 |  477 +-
 src/box/sql/pragma.c                               |    6 +-
 src/box/sql/sqliteInt.h                            |   16 +-
 src/box/sql/sqliteLimit.h                          |    3 +-
 src/box/sql/vdbe.c                                 |    2 +-
 src/box/sql/wherecode.c                            |    2 +-
 src/box/sql/whereexpr.c                            |  157 +-
 test/sql-tap/alter.test.lua                        |    6 +-
 test/sql-tap/analyze9.test.lua                     |    8 +-
 test/sql-tap/e_expr.test.lua                       |  305 +-
 .../gh-3251-string-pattern-comparison.test.lua     |  213 +
 test/sql-tap/like2.test.lua                        |   10 +-
 test/sql-tap/like3.test.lua                        |   26 +-
 test/sql-tap/tkt1537.test.lua                      |    4 +-
 test/sql-tap/triggerA.test.lua                     |    2 +-
 test/sql-tap/where3.test.lua                       |    6 +-
 test/sql-tap/where7.test.lua                       | 4780 ++++++++++----------
 19 files changed, 3112 insertions(+), 2919 deletions(-)
 create mode 100755 test/sql-tap/gh-3251-string-pattern-comparison.test.lua

-- 
2.7.4

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-08-16 17:00 [tarantool-patches] [PATCH v2 0/2] sql: pattern comparison fixes & GLOB removal N.Tatunov
@ 2018-08-16 17:00 ` N.Tatunov
  2018-08-17  9:23   ` [tarantool-patches] " Alex Khatskevich
  2018-08-16 17:00 ` [tarantool-patches] [PATCH 2/2] sql: remove GLOB from Tarantool N.Tatunov
  2018-11-15  4:57 ` [tarantool-patches] Re: [PATCH v2 0/2] sql: pattern comparison fixes & GLOB removal Kirill Yukhin
  2 siblings, 1 reply; 46+ messages in thread
From: N.Tatunov @ 2018-08-16 17:00 UTC (permalink / raw)
  To: tarantool-patches; +Cc: avkhatskevich, N.Tatunov

From: "N.Tatunov" <hollow653@gmail.com>

Currently function that compares pattern and string for GLOB & LIKE
operators doesn't work properly. It uses ICU reading function which
was assumed having other return codes and the implementation for the
comparison ending isn't paying attention to some special cases, hence
in those cases it works improperly.

With the patch applied an error will be returned in case there's an
invalid UTF-8 symbol in pattern & pattern containing only valid UTF-8
symbols will not be matched with the string that contains invalid
symbol.

Сloses #3251
Сloses #3334
Part of #3572
---
 src/box/sql/func.c                                 | 272 +++++++++++++--------
 test/sql-tap/e_expr.test.lua                       |  16 +-
 .../gh-3251-string-pattern-comparison.test.lua     | 213 ++++++++++++++++
 3 files changed, 396 insertions(+), 105 deletions(-)
 create mode 100755 test/sql-tap/gh-3251-string-pattern-comparison.test.lua

diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index c06e3bd..66cae17 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -617,13 +617,16 @@ struct compareInfo {
 	u8 noCase;		/* true to ignore case differences */
 };
 
-/*
- * For LIKE and GLOB matching on EBCDIC machines, assume that every
- * character is exactly one byte in size.  Also, provde the Utf8Read()
- * macro for fast reading of the next character in the common case where
- * the next character is ASCII.
+/**
+ * Providing there are symbols in string s this
+ * macro returns UTF-8 code of character and
+ * promotes pointer to the next symbol in the string.
+ * Otherwise return code is SQL_END_OF_STRING.
  */
-#define Utf8Read(s, e)    ucnv_getNextUChar(pUtf8conv, &s, e, &status)
+#define Utf8Read(s, e) ucnv_getNextUChar(pUtf8conv, &(s), (e), &(status))
+
+#define SQL_END_OF_STRING        0xffff
+#define SQL_INVALID_UTF8_SYMBOL  0xfffd
 
 static const struct compareInfo globInfo = { '*', '?', '[', 0 };
 
@@ -638,19 +641,16 @@ static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
 static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
 
 /*
- * Possible error returns from patternMatch()
+ * Possible error returns from sql_utf8_pattern_compare()
  */
-#define SQLITE_MATCH             0
-#define SQLITE_NOMATCH           1
-#define SQLITE_NOWILDCARDMATCH   2
-
-/*
- * Compare two UTF-8 strings for equality where the first string is
- * a GLOB or LIKE expression.  Return values:
- *
- *    SQLITE_MATCH:            Match
- *    SQLITE_NOMATCH:          No match
- *    SQLITE_NOWILDCARDMATCH:  No match in spite of having * or % wildcards.
+#define SQL_MATCH                0
+#define SQL_NOMATCH              1
+#define SQL_NOWILDCARDMATCH      2
+#define SQL_INVALID_PATTERN      3
+
+/**
+ * Compare two UTF-8 strings for equality where the first string
+ * is a GLOB or LIKE expression.
  *
  * Globbing rules:
  *
@@ -663,92 +663,133 @@ static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
  *
  *     [^...]     Matches one character not in the enclosed list.
  *
- * With the [...] and [^...] matching, a ']' character can be included
- * in the list by making it the first character after '[' or '^'.  A
- * range of characters can be specified using '-'.  Example:
- * "[a-z]" matches any single lower-case letter.  To match a '-', make
- * it the last character in the list.
+ * With the [...] and [^...] matching, a ']' character can be
+ * included in the list by making it the first character after
+ * '[' or '^'. A range of characters can be specified using '-'.
+ * Example: "[a-z]" matches any single lower-case letter.
+ * To match a '-', make it the last character in the list.
  *
  * Like matching rules:
  *
- *      '%'       Matches any sequence of zero or more characters
+ *      '%'       Matches any sequence of zero or more characters.
  *
- **     '_'       Matches any one character
+ *      '_'       Matches any one character.
  *
  *      Ec        Where E is the "esc" character and c is any other
- *                character, including '%', '_', and esc, match exactly c.
+ *                character, including '%', '_', and esc, match
+ *                exactly c.
  *
  * The comments within this routine usually assume glob matching.
  *
- * This routine is usually quick, but can be N**2 in the worst case.
+ * This routine is usually quick, but can be N**2 in the worst
+ * case.
+ *
+ * @param pattern String containing comparison pattern.
+ * @param string String being compared.
+ * @param compareInfo Information about how to compare.
+ * @param matchOther The escape char (LIKE) or '[' (GLOB).
+ *
+ * @retval SQL_MATCH:               Match.
+ *	   SQL_NOMATCH:             No match.
+ *	   SQL_NOWILDCARDMATCH:     No match in spite of having *
+ *				    or % wildcards.
+ *	   SQL_INVALID_PATTERN:     Pattern contains invalid
+ *				    symbol.
  */
 static int
-patternCompare(const char * pattern,	/* The glob pattern */
-	       const char * string,	/* The string to compare against the glob */
-	       const struct compareInfo *pInfo,	/* Information about how to do the compare */
-	       UChar32 matchOther	/* The escape char (LIKE) or '[' (GLOB) */
-    )
+sql_utf8_pattern_compare(const char *pattern,
+			 const char *string,
+			 const struct compareInfo *pInfo,
+			 UChar32 matchOther)
 {
-	UChar32 c, c2;		/* Next pattern and input string chars */
-	UChar32 matchOne = pInfo->matchOne;	/* "?" or "_" */
-	UChar32 matchAll = pInfo->matchAll;	/* "*" or "%" */
-	UChar32 noCase = pInfo->noCase;	/* True if uppercase==lowercase */
-	const char *zEscaped = 0;	/* One past the last escaped input char */
+	/* Next pattern and input string chars */
+	UChar32 c, c2;
+	/* "?" or "_" */
+	UChar32 matchOne = pInfo->matchOne;
+	/* "*" or "%" */
+	UChar32 matchAll = pInfo->matchAll;
+	/* True if uppercase==lowercase */
+	UChar32 noCase = pInfo->noCase;
+	/* One past the last escaped input char */
+	const char *zEscaped = 0;
 	const char * pattern_end = pattern + strlen(pattern);
 	const char * string_end = string + strlen(string);
 	UErrorCode status = U_ZERO_ERROR;
 
-	while (pattern < pattern_end){
+	while (pattern < pattern_end) {
 		c = Utf8Read(pattern, pattern_end);
+		if (c == SQL_INVALID_UTF8_SYMBOL)
+			return SQL_INVALID_PATTERN;
 		if (c == matchAll) {	/* Match "*" */
-			/* Skip over multiple "*" characters in the pattern.  If there
-			 * are also "?" characters, skip those as well, but consume a
-			 * single character of the input string for each "?" skipped
+			/* Skip over multiple "*" characters in
+			 * the pattern. If there are also "?"
+			 * characters, skip those as well, but
+			 * consume a single character of the
+			 * input string for each "?" skipped.
 			 */
-			while (pattern < pattern_end){
-				c = Utf8Read(pattern, pattern_end);
+			while ((c = Utf8Read(pattern, pattern_end)) !=
+			       SQL_END_OF_STRING) {
+				if (c == SQL_INVALID_UTF8_SYMBOL)
+					return SQL_INVALID_PATTERN;
 				if (c != matchAll && c != matchOne)
 					break;
-				if (c == matchOne
-				    && Utf8Read(string, string_end) == 0) {
-					return SQLITE_NOWILDCARDMATCH;
-				}
+				if (c == matchOne &&
+				    (c2 = Utf8Read(string, string_end)) ==
+				    SQL_END_OF_STRING)
+					return SQL_NOWILDCARDMATCH;
+				if (c2 == SQL_INVALID_UTF8_SYMBOL)
+					return SQL_NOMATCH;
+			}
+			/*
+			 * "*" at the end of the pattern matches.
+			 */
+			if (c == SQL_END_OF_STRING) {
+				return SQL_MATCH;
 			}
-			/* "*" at the end of the pattern matches */
-			if (pattern == pattern_end)
-				return SQLITE_MATCH;
 			if (c == matchOther) {
 				if (pInfo->matchSet == 0) {
 					c = Utf8Read(pattern, pattern_end);
-					if (c == 0)
-						return SQLITE_NOWILDCARDMATCH;
+					if (c == SQL_INVALID_UTF8_SYMBOL)
+						return SQL_INVALID_PATTERN;
+					if (c == SQL_END_OF_STRING)
+						return SQL_NOWILDCARDMATCH;
 				} else {
-					/* "[...]" immediately follows the "*".  We have to do a slow
-					 * recursive search in this case, but it is an unusual case.
+					/* "[...]" immediately
+					 * follows the "*". We
+					 * have to do a slow
+					 * recursive search in
+					 * this case, but it is
+					 * an unusual case.
 					 */
-					assert(matchOther < 0x80);	/* '[' is a single-byte character */
+					assert(matchOther < 0x80);
 					while (string < string_end) {
 						int bMatch =
-						    patternCompare(&pattern[-1],
-								   string,
-								   pInfo,
-								   matchOther);
-						if (bMatch != SQLITE_NOMATCH)
+						    sql_utf8_pattern_compare(
+								&pattern[-1],
+								string,
+								pInfo,
+								matchOther);
+						if (bMatch != SQL_NOMATCH)
 							return bMatch;
-						Utf8Read(string, string_end);
+						c = Utf8Read(string, string_end);
+						if (c == SQL_INVALID_UTF8_SYMBOL)
+							return SQL_NOMATCH;
 					}
-					return SQLITE_NOWILDCARDMATCH;
+					return SQL_NOWILDCARDMATCH;
 				}
 			}
 
-			/* At this point variable c contains the first character of the
-			 * pattern string past the "*".  Search in the input string for the
-			 * first matching character and recursively continue the match from
-			 * that point.
+			/* At this point variable c contains the
+			 * first character of the pattern string
+			 * past the "*". Search in the input
+			 * string for the first matching
+			 * character and recursively continue the
+			 * match from that point.
 			 *
-			 * For a case-insensitive search, set variable cx to be the same as
-			 * c but in the other case and search the input string for either
-			 * c or cx.
+			 * For a case-insensitive search, set
+			 * variable cx to be the same as c but in
+			 * the other case and search the input
+			 * string for either c or cx.
 			 */
 
 			int bMatch;
@@ -756,14 +797,18 @@ patternCompare(const char * pattern,	/* The glob pattern */
 				c = u_tolower(c);
 			while (string < string_end){
 				/**
-				 * This loop could have been implemented
-				 * without if converting c2 to lower case
-				 * (by holding c_upper and c_lower), however
-				 * it is implemented this way because lower
-				 * works better with German and Turkish
-				 * languages.
+				 * This loop could have been
+				 * implemented without if
+				 * converting c2 to lower case
+				 * by holding c_upper and
+				 * c_lower,however it is
+				 * implemented this way because
+				 * lower works better with German
+				 * and Turkish languages.
 				 */
 				c2 = Utf8Read(string, string_end);
+				if (c2 == SQL_INVALID_UTF8_SYMBOL)
+					return SQL_NOMATCH;
 				if (!noCase) {
 					if (c2 != c)
 						continue;
@@ -771,42 +816,55 @@ patternCompare(const char * pattern,	/* The glob pattern */
 					if (c2 != c && u_tolower(c2) != c)
 						continue;
 				}
-				bMatch =
-				    patternCompare(pattern, string,
-						   pInfo, matchOther);
-				if (bMatch != SQLITE_NOMATCH)
+				bMatch = sql_utf8_pattern_compare(pattern,
+								  string,
+								  pInfo,
+								  matchOther);
+				if (bMatch != SQL_NOMATCH)
 					return bMatch;
 			}
-			return SQLITE_NOWILDCARDMATCH;
+			return SQL_NOWILDCARDMATCH;
 		}
 		if (c == matchOther) {
 			if (pInfo->matchSet == 0) {
 				c = Utf8Read(pattern, pattern_end);
-				if (c == 0)
-					return SQLITE_NOMATCH;
+				if (c == SQL_INVALID_UTF8_SYMBOL)
+					return SQL_INVALID_PATTERN;
+				if (c == SQL_END_OF_STRING)
+					return SQL_NOMATCH;
 				zEscaped = pattern;
 			} else {
 				UChar32 prior_c = 0;
 				int seen = 0;
 				int invert = 0;
 				c = Utf8Read(string, string_end);
+				if (c == SQL_INVALID_UTF8_SYMBOL)
+					return SQL_NOMATCH;
 				if (string == string_end)
-					return SQLITE_NOMATCH;
+					return SQL_NOMATCH;
 				c2 = Utf8Read(pattern, pattern_end);
+				if (c2 == SQL_INVALID_UTF8_SYMBOL)
+					return SQL_INVALID_PATTERN;
 				if (c2 == '^') {
 					invert = 1;
 					c2 = Utf8Read(pattern, pattern_end);
+					if (c2 == SQL_INVALID_UTF8_SYMBOL)
+						return SQL_INVALID_PATTERN;
 				}
 				if (c2 == ']') {
 					if (c == ']')
 						seen = 1;
 					c2 = Utf8Read(pattern, pattern_end);
+					if (c2 == SQL_INVALID_UTF8_SYMBOL)
+						return SQL_INVALID_PATTERN;
 				}
-				while (c2 && c2 != ']') {
+				while (c2 != SQL_END_OF_STRING && c2 != ']') {
 					if (c2 == '-' && pattern[0] != ']'
 					    && pattern < pattern_end
 					    && prior_c > 0) {
 						c2 = Utf8Read(pattern, pattern_end);
+						if (c2 == SQL_INVALID_UTF8_SYMBOL)
+							return SQL_INVALID_PATTERN;
 						if (c >= prior_c && c <= c2)
 							seen = 1;
 						prior_c = 0;
@@ -817,33 +875,40 @@ patternCompare(const char * pattern,	/* The glob pattern */
 						prior_c = c2;
 					}
 					c2 = Utf8Read(pattern, pattern_end);
+					if (c2 == SQL_INVALID_UTF8_SYMBOL)
+						return SQL_INVALID_PATTERN;
 				}
-				if (pattern == pattern_end || (seen ^ invert) == 0) {
-					return SQLITE_NOMATCH;
+				if (pattern == pattern_end ||
+				    (seen ^ invert) == 0) {
+					return SQL_NOMATCH;
 				}
 				continue;
 			}
 		}
 		c2 = Utf8Read(string, string_end);
+		if (c2 == SQL_INVALID_UTF8_SYMBOL)
+			return SQL_NOMATCH;
 		if (c == c2)
 			continue;
 		if (noCase){
 			/**
-			 * Small optimisation. Reduce number of calls
-			 * to u_tolower function.
-			 * SQL standards suggest use to_upper for symbol
-			 * normalisation. However, using to_lower allows to
-			 * respect Turkish 'İ' in default locale.
+			 * Small optimisation. Reduce number of
+			 * calls to u_tolower function. SQL
+			 * standards suggest use to_upper for
+			 * symbol normalisation. However, using
+			 * to_lower allows to respect Turkish 'İ'
+			 * in default locale.
 			 */
 			if (u_tolower(c) == c2 ||
 			    c == u_tolower(c2))
 				continue;
 		}
-		if (c == matchOne && pattern != zEscaped && c2 != 0)
+		if (c == matchOne && pattern != zEscaped &&
+		    c2 != SQL_END_OF_STRING)
 			continue;
-		return SQLITE_NOMATCH;
+		return SQL_NOMATCH;
 	}
-	return string == string_end ? SQLITE_MATCH : SQLITE_NOMATCH;
+	return string == string_end ? SQL_MATCH : SQL_NOMATCH;
 }
 
 /*
@@ -853,8 +918,7 @@ patternCompare(const char * pattern,	/* The glob pattern */
 int
 sqlite3_strglob(const char *zGlobPattern, const char *zString)
 {
-	return patternCompare(zGlobPattern, zString, &globInfo,
-			      '[');
+	return sql_utf8_pattern_compare(zGlobPattern, zString, &globInfo, '[');
 }
 
 /*
@@ -864,7 +928,7 @@ sqlite3_strglob(const char *zGlobPattern, const char *zString)
 int
 sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc)
 {
-	return patternCompare(zPattern, zStr, &likeInfoNorm, esc);
+	return sql_utf8_pattern_compare(zPattern, zStr, &likeInfoNorm, esc);
 }
 
 /*
@@ -910,8 +974,9 @@ likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
 	zB = (const char *) sqlite3_value_text(argv[0]);
 	zA = (const char *) sqlite3_value_text(argv[1]);
 
-	/* Limit the length of the LIKE or GLOB pattern to avoid problems
-	 * of deep recursion and N*N behavior in patternCompare().
+	/* Limit the length of the LIKE or GLOB pattern to avoid
+	 * problems of deep recursion and N*N behavior in
+	 * sql_utf8_pattern_compare().
 	 */
 	nPat = sqlite3_value_bytes(argv[0]);
 	testcase(nPat == db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]);
@@ -947,8 +1012,13 @@ likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
 	sqlite3_like_count++;
 #endif
 	int res;
-	res = patternCompare(zB, zA, pInfo, escape);
-	sqlite3_result_int(context, res == SQLITE_MATCH);
+	res = sql_utf8_pattern_compare(zB, zA, pInfo, escape);
+	if (res == SQL_INVALID_PATTERN) {
+		sqlite3_result_error(context, "LIKE or GLOB pattern can only"
+				     " contain UTF-8 characters", -1);
+		return;
+	}
+	sqlite3_result_int(context, res == SQL_MATCH);
 }
 
 /*
diff --git a/test/sql-tap/e_expr.test.lua b/test/sql-tap/e_expr.test.lua
index 13d3a96..9780d2c 100755
--- a/test/sql-tap/e_expr.test.lua
+++ b/test/sql-tap/e_expr.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(12431)
+test:plan(10665)
 
 --!./tcltestrunner.lua
 -- 2010 July 16
@@ -77,8 +77,10 @@ local operations = {
     {"<>", "ne1"},
     {"!=", "ne2"},
     {"IS", "is"},
-    {"LIKE", "like"},
-    {"GLOB", "glob"},
+-- NOTE: This test needs refactoring after deletion of GLOB &
+--	 type restrictions for LIKE. (See #3572)
+--    {"LIKE", "like"},
+--    {"GLOB", "glob"},
     {"AND", "and"},
     {"OR", "or"},
     {"MATCH", "match"},
@@ -96,7 +98,12 @@ operations = {
     {"+", "-"},
     {"<<", ">>", "&", "|"},
     {"<", "<=", ">", ">="},
-    {"=", "==", "!=", "<>", "LIKE", "GLOB"}, --"MATCH", "REGEXP"},
+-- NOTE: This test needs refactoring after deletion of GLOB &
+--	 type restrictions for LIKE. (See #3572)
+-- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
+-- 		 are waiting for their hour, don't confuse them
+--		 being commented with ticket above.
+    {"=", "==", "!=", "<>"}, --"LIKE", "GLOB"}, --"MATCH", "REGEXP"},
     {"AND"},
     {"OR"},
 }
@@ -475,6 +482,7 @@ for _, op in ipairs(oplist) do
         end
     end
 end
+
 ---------------------------------------------------------------------------
 -- Test the IS and IS NOT operators.
 --
diff --git a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
new file mode 100755
index 0000000..addf0e3
--- /dev/null
+++ b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
@@ -0,0 +1,213 @@
+#!/usr/bin/env tarantool
+test = require("sqltester")
+test:plan(128)
+
+local prefix = "like-test-"
+
+local like_test_cases =
+{
+    {"1.1",
+        "SELECT 'AB' LIKE '_B';",
+        {0, {1}} },
+    {"1.2",
+        "SELECT 'CD' LIKE '_B';",
+        {0, {0}} },
+    {"1.3",
+        "SELECT '' LIKE '_B';",
+        {0, {0}} },
+    {"1.4",
+        "SELECT 'AB' LIKE '%B';",
+        {0, {1}} },
+    {"1.5",
+        "SELECT 'CD' LIKE '%B';",
+        {0, {0}} },
+    {"1.6",
+        "SELECT '' LIKE '%B';",
+        {0, {0}} },
+    {"1.7",
+        "SELECT 'AB' LIKE 'A__';",
+        {0, {0}} },
+    {"1.8",
+        "SELECT 'CD' LIKE 'A__';",
+        {0, {0}} },
+    {"1.9",
+        "SELECT '' LIKE 'A__';",
+        {0, {0}} },
+    {"1.10",
+        "SELECT 'AB' LIKE 'A_';",
+        {0, {1}} },
+    {"1.11",
+        "SELECT 'CD' LIKE 'A_';",
+        {0, {0}} },
+    {"1.12",
+        "SELECT '' LIKE 'A_';",
+        {0, {0}} },
+    {"1.13",
+        "SELECT 'AB' LIKE 'A';",
+        {0, {0}} },
+    {"1.14",
+        "SELECT 'CD' LIKE 'A';",
+        {0, {0}} },
+    {"1.15",
+        "SELECT '' LIKE 'A';",
+        {0, {0}} },
+    {"1.16",
+        "SELECT 'AB' LIKE '_';",
+        {0, {0}} },
+    {"1.17",
+        "SELECT 'CD' LIKE '_';",
+        {0, {0}} },
+    {"1.18",
+        "SELECT '' LIKE '_';",
+        {0, {0}} },
+    {"1.19",
+        "SELECT 'AB' LIKE '__';",
+        {0, {1}} },
+    {"1.20",
+        "SELECT 'CD' LIKE '__';",
+        {0, {1}} },
+    {"1.21",
+        "SELECT '' LIKE '__';",
+        {0, {0}} },
+    {"1.22",
+        "SELECT 'AB' LIKE '%A';",
+        {0, {0}} },
+    {"1.23",
+        "SELECT 'AB' LIKE '%C';",
+        {0, {0}} },
+    {"1.24",
+        "SELECT 'ёф' LIKE '%œش';",
+        {0, {0}} },
+    {"1.25",
+        "SELECT 'ёфÅŒش' LIKE '%œش';",
+        {0, {1}} },
+    {"1.26",
+        "SELECT 'ÅŒش' LIKE '%œش';",
+        {0, {1}} },
+    {"1.27",
+        "SELECT 'ёф' LIKE 'ё_';",
+        {0, {1}} },
+    {"1.28",
+        "SELECT 'ёфÅŒش' LIKE 'ё_';",
+        {0, {0}} },
+    {"1.29",
+        "SELECT 'ÅŒش' LIKE 'ё_';",
+        {0, {0}} },
+    {"1.30",
+        "SELECT 'ёф' LIKE 'ёф%';",
+        {0, {1}} },
+    {"1.31",
+        "SELECT 'ёфÅŒش' LIKE 'ёф%';",
+        {0, {1}} },
+    {"1.32",
+        "SELECT 'ÅŒش' LIKE 'ёф%';",
+        {0, {0}} },
+    {"1.33",
+        "SELECT 'ёф' LIKE 'ёфÅ%';",
+        {0, {0}} },
+    {"1.34",
+        "SELECT 'ёфÅŒش' LIKE 'ёфÅ%';",
+        {0, {1}} },
+    {"1.35",
+        "SELECT 'ÅŒش' LIKE 'ёфش%';",
+        {0, {0}} },
+    {"1.36",
+        "SELECT 'ёф' LIKE 'ё_%';",
+        {0, {1}} },
+    {"1.37",
+        "SELECT 'ёфÅŒش' LIKE 'ё_%';",
+        {0, {1}} },
+    {"1.38",
+        "SELECT 'ÅŒش' LIKE 'ё_%';",
+        {0, {0}} },
+}
+
+test:do_catchsql_set_test(like_test_cases, prefix)
+
+-- Non-Unicode byte sequences.
+local invalid_testcases = {
+    '\xE2\x80',
+    '\xFE\xFF',
+    '\xC2',
+    '\xED\xB0\x80',
+    '\xD0',
+}
+
+-- Invalid testcases.
+for i, tested_string in ipairs(invalid_testcases) do
+
+    -- We should raise an error in case
+    -- pattern contains invalid characters.
+
+    local test_name = prefix .. "2." .. tostring(i)
+    local test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "';"
+    test:do_catchsql_test(test_name, test_itself,
+                          {1, "LIKE or GLOB pattern can only contain UTF-8 characters"})
+
+    test_name = prefix .. "3." .. tostring(i)
+    test_itself = "SELECT 'abc' LIKE 'abc" .. tested_string .. "';"
+    test:do_catchsql_test(test_name, test_itself,
+                          {1, "LIKE or GLOB pattern can only contain UTF-8 characters"})
+
+    test_name = prefix .. "4." .. tostring(i)
+    test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "c';"
+    test:do_catchsql_test(test_name, test_itself,
+                          {1, "LIKE or GLOB pattern can only contain UTF-8 characters"})
+
+    -- Just skipping if row value predicand contains invalid character.
+
+    test_name = prefix .. "5." .. tostring(i)
+    test_itself = "SELECT 'ab" .. tested_string .. "' LIKE 'abc';"
+    test:do_execsql_test(test_name, test_itself, {0})
+
+    test_name = prefix .. "6." .. tostring(i)
+    test_itself = "SELECT 'abc" .. tested_string .. "' LIKE 'abc';"
+    test:do_execsql_test(test_name, test_itself, {0})
+
+    test_name = prefix .. "7." .. tostring(i)
+    test_itself = "SELECT 'ab" .. tested_string .. "c' LIKE 'abc';"
+    test:do_execsql_test(test_name, test_itself, {0})
+end
+
+-- Unicode byte sequences.
+local valid_testcases = {
+    '\x01',
+    '\x09',
+    '\x1F',
+    '\x7F',
+    '\xC2\x80',
+    '\xC2\x90',
+    '\xC2\x9F',
+    '\xE2\x80\xA8',
+    '\x20\x0B',
+    '\xE2\x80\xA9',
+}
+
+-- Valid testcases.
+for i, tested_string in ipairs(valid_testcases) do
+    test_name = prefix .. "8." .. tostring(i)
+    local test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "';"
+    test:do_execsql_test(test_name, test_itself, {0})
+
+    test_name = prefix .. "9." .. tostring(i)
+    test_itself = "SELECT 'abc' LIKE 'abc" .. tested_string .. "';"
+    test:do_execsql_test(test_name, test_itself, {0})
+
+    test_name = prefix .. "10." .. tostring(i)
+    test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "c';"
+    test:do_execsql_test(test_name,	test_itself, {0})
+
+    test_name = prefix .. "11." .. tostring(i)
+    test_itself = "SELECT 'ab" .. tested_string .. "' LIKE 'abc';"
+    test:do_execsql_test(test_name,	test_itself, {0})
+
+    test_name = prefix .. "12." .. tostring(i)
+    test_itself = "SELECT 'abc" .. tested_string .. "' LIKE 'abc';"
+    test:do_execsql_test(test_name, test_itself, {0})
+
+    test_name = prefix .. "13." .. tostring(i)
+    test_itself = "SELECT 'ab" .. tested_string .. "c' LIKE 'abc';"
+    test:do_execsql_test(test_name, test_itself, {0})
+end
+
+test:finish_test()
-- 
2.7.4

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-08-16 17:00 [tarantool-patches] [PATCH v2 0/2] sql: pattern comparison fixes & GLOB removal N.Tatunov
  2018-08-16 17:00 ` [tarantool-patches] [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue N.Tatunov
@ 2018-08-16 17:00 ` N.Tatunov
  2018-08-17  8:25   ` [tarantool-patches] " Alex Khatskevich
  2018-11-15  4:57 ` [tarantool-patches] Re: [PATCH v2 0/2] sql: pattern comparison fixes & GLOB removal Kirill Yukhin
  2 siblings, 1 reply; 46+ messages in thread
From: N.Tatunov @ 2018-08-16 17:00 UTC (permalink / raw)
  To: tarantool-patches; +Cc: avkhatskevich, N.Tatunov

GLOB is a legacy extension for LIKE from SQLite. As we want our SQL to
be close to ANSI SQL & LIKE to depend on collations, we do not want to
support it. This patch totally removes it from Tarantool along with any
mentions of it.

Part of #3589
Part of #3572
Needed for #3251
Needed for #3334
---
 extra/mkkeywordhash.c                              |    1 -
 src/box/sql/analyze.c                              |    7 +-
 src/box/sql/func.c                                 |  381 +-
 src/box/sql/pragma.c                               |    6 +-
 src/box/sql/sqliteInt.h                            |   16 +-
 src/box/sql/sqliteLimit.h                          |    3 +-
 src/box/sql/vdbe.c                                 |    2 +-
 src/box/sql/wherecode.c                            |    2 +-
 src/box/sql/whereexpr.c                            |  157 +-
 test/sql-tap/alter.test.lua                        |    6 +-
 test/sql-tap/analyze9.test.lua                     |    8 +-
 test/sql-tap/e_expr.test.lua                       |  311 +-
 .../gh-3251-string-pattern-comparison.test.lua     |    6 +-
 test/sql-tap/like2.test.lua                        |   10 +-
 test/sql-tap/like3.test.lua                        |   26 +-
 test/sql-tap/tkt1537.test.lua                      |    4 +-
 test/sql-tap/triggerA.test.lua                     |    2 +-
 test/sql-tap/where3.test.lua                       |    6 +-
 test/sql-tap/where7.test.lua                       | 4780 ++++++++++----------
 19 files changed, 2818 insertions(+), 2916 deletions(-)

diff --git a/extra/mkkeywordhash.c b/extra/mkkeywordhash.c
index 990c419..1fee3a7 100644
--- a/extra/mkkeywordhash.c
+++ b/extra/mkkeywordhash.c
@@ -159,7 +159,6 @@ static Keyword aKeywordTable[] = {
   { "FOR",                    "TK_FOR",         TRIGGER,          true  },
   { "FOREIGN",                "TK_FOREIGN",     FKEY,             true  },
   { "FROM",                   "TK_FROM",        ALWAYS,           true  },
-  { "GLOB",                   "TK_LIKE_KW",     ALWAYS,           false },
   { "GROUP",                  "TK_GROUP",       ALWAYS,           true  },
   { "HAVING",                 "TK_HAVING",      ALWAYS,           true  },
   { "IF",                     "TK_IF",          ALWAYS,           true  },
diff --git a/src/box/sql/analyze.c b/src/box/sql/analyze.c
index 5f73f02..fc7588c 100644
--- a/src/box/sql/analyze.c
+++ b/src/box/sql/analyze.c
@@ -829,7 +829,7 @@ analyzeOneTable(Parse * pParse,	/* Parser context */
 		return;
 	}
 	assert(pTab->tnum != 0);
-	if (sqlite3_strlike("\\_%", pTab->def->name, '\\') == 0) {
+	if (sql_strlike_ci("\\_%", pTab->def->name, '\\') == 0) {
 		/* Do not gather statistics on system tables */
 		return;
 	}
@@ -1333,11 +1333,10 @@ analysis_loader(void *data, int argc, char **argv, char **unused)
 	/* Position ptr at the end of stat string. */
 	for (; *z == ' ' || (*z >= '0' && *z <= '9'); ++z);
 	while (z[0]) {
-		if (sqlite3_strglob("unordered*", z) == 0) {
+		if (sql_strlike_cs("unordered%", z, '[') == 0)
 			index->def->opts.stat->is_unordered = true;
-		} else if (sqlite3_strglob("noskipscan*", z) == 0) {
+		else if (sql_strlike_cs("noskipscan%", z, '[') == 0)
 			index->def->opts.stat->skip_scan_enabled = false;
-		}
 		while (z[0] != 0 && z[0] != ' ')
 			z++;
 		while (z[0] == ' ')
diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index 66cae17..177193e 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -607,41 +607,32 @@ total_changes(sqlite3_context * context, int NotUsed, sqlite3_value ** NotUsed2)
 	sqlite3_result_int(context, sqlite3_total_changes(db));
 }
 
-/*
- * A structure defining how to do GLOB-style comparisons.
- */
-struct compareInfo {
-	u8 matchAll;		/* "*" or "%" */
-	u8 matchOne;		/* "?" or "_" */
-	u8 matchSet;		/* "[" or 0 */
-	u8 noCase;		/* true to ignore case differences */
-};
-
 /**
- * Providing there are symbols in string s this
- * macro returns UTF-8 code of character and
- * promotes pointer to the next symbol in the string.
- * Otherwise return code is SQL_END_OF_STRING.
+ * Providing there are symbols in string s this macro returns
+ * UTF-8 code of character and promotes pointer to the next
+ * symbol in the string. If s points to an invalid UTF-8 symbol
+ * return code is SQL_INVALID_UTF8_SYMBOL. If there're no symbols
+ * left in string s return code is SQL_END_OF_STRING.
  */
 #define Utf8Read(s, e) ucnv_getNextUChar(pUtf8conv, &(s), (e), &(status))
 
 #define SQL_END_OF_STRING        0xffff
 #define SQL_INVALID_UTF8_SYMBOL  0xfffd
 
-static const struct compareInfo globInfo = { '*', '?', '[', 0 };
-
-/* The correct SQL-92 behavior is for the LIKE operator to ignore
- * case.  Thus  'a' LIKE 'A' would be true.
+/**
+ * If SQLITE_CASE_SENSITIVE_LIKE is not defined, then the LIKE
+ * operator is not case sensitive.
  */
-static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
+static const int case_insensitive_like = 1;
 
-/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
- * is case sensitive causing 'a' LIKE 'A' to be false
+/**
+ * If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE
+ * operator is case sensitive causing 'a' LIKE 'A' to be false.
  */
-static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
+static const int case_sensitive_like = 0;
 
-/*
- * Possible error returns from sql_utf8_pattern_compare()
+/**
+ * Possible error returns from sql_utf8_pattern_compare().
  */
 #define SQL_MATCH                0
 #define SQL_NOMATCH              1
@@ -650,138 +641,95 @@ static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
 
 /**
  * Compare two UTF-8 strings for equality where the first string
- * is a GLOB or LIKE expression.
- *
- * Globbing rules:
- *
- *      '*'       Matches any sequence of zero or more characters.
- *
- *      '?'       Matches exactly one character.
- *
- *     [...]      Matches one character from the enclosed list of
- *                characters.
- *
- *     [^...]     Matches one character not in the enclosed list.
- *
- * With the [...] and [^...] matching, a ']' character can be
- * included in the list by making it the first character after
- * '[' or '^'. A range of characters can be specified using '-'.
- * Example: "[a-z]" matches any single lower-case letter.
- * To match a '-', make it the last character in the list.
+ * is a LIKE expression.
  *
  * Like matching rules:
  *
- *      '%'       Matches any sequence of zero or more characters.
+ *      '%'       Matches any sequence of zero or more
+ *                characters.
  *
  *      '_'       Matches any one character.
  *
- *      Ec        Where E is the "esc" character and c is any other
- *                character, including '%', '_', and esc, match
- *                exactly c.
- *
- * The comments within this routine usually assume glob matching.
+ *      Ec        Where E is the "esc" character and c is any
+ *                other character, including '%', '_', and esc,
+ *                match exactly c.
  *
  * This routine is usually quick, but can be N**2 in the worst
  * case.
  *
  * @param pattern String containing comparison pattern.
  * @param string String being compared.
- * @param compareInfo Information about how to compare.
- * @param matchOther The escape char (LIKE) or '[' (GLOB).
+ * @param is_like_ci true if LIKE is case insensitive.
+ * @param match_other The escape char for LIKE.
  *
  * @retval SQL_MATCH:               Match.
  *	   SQL_NOMATCH:             No match.
- *	   SQL_NOWILDCARDMATCH:     No match in spite of having *
- *				    or % wildcards.
+ *	   SQL_NOWILDCARDMATCH:     No match in spite of having %
+ *				    wildcard.
  *	   SQL_INVALID_PATTERN:     Pattern contains invalid
  *				    symbol.
  */
 static int
 sql_utf8_pattern_compare(const char *pattern,
 			 const char *string,
-			 const struct compareInfo *pInfo,
-			 UChar32 matchOther)
+			 const int *is_like_ci,
+			 UChar32 match_other)
 {
 	/* Next pattern and input string chars */
 	UChar32 c, c2;
-	/* "?" or "_" */
-	UChar32 matchOne = pInfo->matchOne;
-	/* "*" or "%" */
-	UChar32 matchAll = pInfo->matchAll;
-	/* True if uppercase==lowercase */
-	UChar32 noCase = pInfo->noCase;
+	/* "_" */
+	UChar32 match_one = '_';
+	/* "%" */
+	UChar32 match_all = '%';
 	/* One past the last escaped input char */
 	const char *zEscaped = 0;
-	const char * pattern_end = pattern + strlen(pattern);
-	const char * string_end = string + strlen(string);
+	const char *pattern_end = pattern + strlen(pattern);
+	const char *string_end = string + strlen(string);
 	UErrorCode status = U_ZERO_ERROR;
 
 	while (pattern < pattern_end) {
 		c = Utf8Read(pattern, pattern_end);
 		if (c == SQL_INVALID_UTF8_SYMBOL)
 			return SQL_INVALID_PATTERN;
-		if (c == matchAll) {	/* Match "*" */
-			/* Skip over multiple "*" characters in
-			 * the pattern. If there are also "?"
+		if (c == match_all) {
+			/**
+			 * Skip over multiple "%" characters in
+			 * the pattern. If there are also "_"
 			 * characters, skip those as well, but
 			 * consume a single character of the
-			 * input string for each "?" skipped.
+			 * input string for each "_" skipped.
 			 */
 			while ((c = Utf8Read(pattern, pattern_end)) !=
 			       SQL_END_OF_STRING) {
 				if (c == SQL_INVALID_UTF8_SYMBOL)
 					return SQL_INVALID_PATTERN;
-				if (c != matchAll && c != matchOne)
+				if (c != match_all && c != match_one)
 					break;
-				if (c == matchOne &&
+				if (c == match_one &&
 				    (c2 = Utf8Read(string, string_end)) ==
 				    SQL_END_OF_STRING)
 					return SQL_NOWILDCARDMATCH;
 				if (c2 == SQL_INVALID_UTF8_SYMBOL)
 					return SQL_NOMATCH;
 			}
-			/*
-			 * "*" at the end of the pattern matches.
+			/**
+			 * "%" at the end of the pattern matches.
 			 */
 			if (c == SQL_END_OF_STRING) {
 				return SQL_MATCH;
 			}
-			if (c == matchOther) {
-				if (pInfo->matchSet == 0) {
-					c = Utf8Read(pattern, pattern_end);
-					if (c == SQL_INVALID_UTF8_SYMBOL)
-						return SQL_INVALID_PATTERN;
-					if (c == SQL_END_OF_STRING)
-						return SQL_NOWILDCARDMATCH;
-				} else {
-					/* "[...]" immediately
-					 * follows the "*". We
-					 * have to do a slow
-					 * recursive search in
-					 * this case, but it is
-					 * an unusual case.
-					 */
-					assert(matchOther < 0x80);
-					while (string < string_end) {
-						int bMatch =
-						    sql_utf8_pattern_compare(
-								&pattern[-1],
-								string,
-								pInfo,
-								matchOther);
-						if (bMatch != SQL_NOMATCH)
-							return bMatch;
-						c = Utf8Read(string, string_end);
-						if (c == SQL_INVALID_UTF8_SYMBOL)
-							return SQL_NOMATCH;
-					}
+			if (c == match_other) {
+				c = Utf8Read(pattern, pattern_end);
+				if (c == SQL_INVALID_UTF8_SYMBOL)
+					return SQL_INVALID_PATTERN;
+				if (c == SQL_END_OF_STRING)
 					return SQL_NOWILDCARDMATCH;
-				}
 			}
 
-			/* At this point variable c contains the
+			/**
+			 * At this point variable c contains the
 			 * first character of the pattern string
-			 * past the "*". Search in the input
+			 * past the "%". Search in the input
 			 * string for the first matching
 			 * character and recursively continue the
 			 * match from that point.
@@ -793,7 +741,7 @@ sql_utf8_pattern_compare(const char *pattern,
 			 */
 
 			int bMatch;
-			if (noCase)
+			if (*is_like_ci)
 				c = u_tolower(c);
 			while (string < string_end){
 				/**
@@ -809,7 +757,7 @@ sql_utf8_pattern_compare(const char *pattern,
 				c2 = Utf8Read(string, string_end);
 				if (c2 == SQL_INVALID_UTF8_SYMBOL)
 					return SQL_NOMATCH;
-				if (!noCase) {
+				if (!(*is_like_ci)) {
 					if (c2 != c)
 						continue;
 				} else {
@@ -818,79 +766,27 @@ sql_utf8_pattern_compare(const char *pattern,
 				}
 				bMatch = sql_utf8_pattern_compare(pattern,
 								  string,
-								  pInfo,
-								  matchOther);
+								  is_like_ci,
+								  match_other);
 				if (bMatch != SQL_NOMATCH)
 					return bMatch;
 			}
 			return SQL_NOWILDCARDMATCH;
 		}
-		if (c == matchOther) {
-			if (pInfo->matchSet == 0) {
-				c = Utf8Read(pattern, pattern_end);
-				if (c == SQL_INVALID_UTF8_SYMBOL)
-					return SQL_INVALID_PATTERN;
-				if (c == SQL_END_OF_STRING)
-					return SQL_NOMATCH;
-				zEscaped = pattern;
-			} else {
-				UChar32 prior_c = 0;
-				int seen = 0;
-				int invert = 0;
-				c = Utf8Read(string, string_end);
-				if (c == SQL_INVALID_UTF8_SYMBOL)
-					return SQL_NOMATCH;
-				if (string == string_end)
-					return SQL_NOMATCH;
-				c2 = Utf8Read(pattern, pattern_end);
-				if (c2 == SQL_INVALID_UTF8_SYMBOL)
-					return SQL_INVALID_PATTERN;
-				if (c2 == '^') {
-					invert = 1;
-					c2 = Utf8Read(pattern, pattern_end);
-					if (c2 == SQL_INVALID_UTF8_SYMBOL)
-						return SQL_INVALID_PATTERN;
-				}
-				if (c2 == ']') {
-					if (c == ']')
-						seen = 1;
-					c2 = Utf8Read(pattern, pattern_end);
-					if (c2 == SQL_INVALID_UTF8_SYMBOL)
-						return SQL_INVALID_PATTERN;
-				}
-				while (c2 != SQL_END_OF_STRING && c2 != ']') {
-					if (c2 == '-' && pattern[0] != ']'
-					    && pattern < pattern_end
-					    && prior_c > 0) {
-						c2 = Utf8Read(pattern, pattern_end);
-						if (c2 == SQL_INVALID_UTF8_SYMBOL)
-							return SQL_INVALID_PATTERN;
-						if (c >= prior_c && c <= c2)
-							seen = 1;
-						prior_c = 0;
-					} else {
-						if (c == c2) {
-							seen = 1;
-						}
-						prior_c = c2;
-					}
-					c2 = Utf8Read(pattern, pattern_end);
-					if (c2 == SQL_INVALID_UTF8_SYMBOL)
-						return SQL_INVALID_PATTERN;
-				}
-				if (pattern == pattern_end ||
-				    (seen ^ invert) == 0) {
-					return SQL_NOMATCH;
-				}
-				continue;
-			}
+		if (c == match_other) {
+			c = Utf8Read(pattern, pattern_end);
+			if (c == SQL_INVALID_UTF8_SYMBOL)
+				return SQL_INVALID_PATTERN;
+			if (c == SQL_END_OF_STRING)
+				return SQL_NOMATCH;
+			zEscaped = pattern;
 		}
 		c2 = Utf8Read(string, string_end);
 		if (c2 == SQL_INVALID_UTF8_SYMBOL)
 			return SQL_NOMATCH;
 		if (c == c2)
 			continue;
-		if (noCase){
+		if (*is_like_ci) {
 			/**
 			 * Small optimisation. Reduce number of
 			 * calls to u_tolower function. SQL
@@ -903,7 +799,7 @@ sql_utf8_pattern_compare(const char *pattern,
 			    c == u_tolower(c2))
 				continue;
 		}
-		if (c == matchOne && pattern != zEscaped &&
+		if (c == match_one && pattern != zEscaped &&
 		    c2 != SQL_END_OF_STRING)
 			continue;
 		return SQL_NOMATCH;
@@ -911,55 +807,52 @@ sql_utf8_pattern_compare(const char *pattern,
 	return string == string_end ? SQL_MATCH : SQL_NOMATCH;
 }
 
-/*
- * The sqlite3_strglob() interface.  Return 0 on a match (like strcmp()) and
- * non-zero if there is no match.
+/**
+ * Compare two UTF-8 strings for equality using case sensitive
+ * sql_utf8_pattern_compare.
  */
 int
-sqlite3_strglob(const char *zGlobPattern, const char *zString)
+sql_strlike_cs(const char *zPattern, const char *zStr, unsigned int esc)
 {
-	return sql_utf8_pattern_compare(zGlobPattern, zString, &globInfo, '[');
+	return sql_utf8_pattern_compare(zPattern, zStr, &case_sensitive_like, esc);
 }
 
-/*
- * The sqlite3_strlike() interface.  Return 0 on a match and non-zero for
- * a miss - like strcmp().
+/**
+ * Compare two UTF-8 strings for equality using case insensitive
+ * sql_utf8_pattern_compare.
  */
 int
-sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc)
+sql_strlike_ci(const char *zPattern, const char *zStr, unsigned int esc)
 {
-	return sql_utf8_pattern_compare(zPattern, zStr, &likeInfoNorm, esc);
+	return sql_utf8_pattern_compare(zPattern, zStr, &case_insensitive_like, esc);
 }
 
-/*
- * Count the number of times that the LIKE operator (or GLOB which is
- * just a variation of LIKE) gets called.  This is used for testing
- * only.
+/**
+ * Count the number of times that the LIKE operator gets called.
+ * This is used for testing only.
  */
 #ifdef SQLITE_TEST
 int sqlite3_like_count = 0;
 #endif
 
-/*
- * Implementation of the like() SQL function.  This function implements
- * the build-in LIKE operator.  The first argument to the function is the
- * pattern and the second argument is the string.  So, the SQL statements:
+/**
+ * Implementation of the like() SQL function. This function
+ * implements the built-in LIKE operator. The first argument to
+ * the function is the pattern and the second argument is the
+ * string. So, the SQL statements of the following type:
  *
  *       A LIKE B
  *
- * is implemented as like(B,A).
- *
- * This same function (with a different compareInfo structure) computes
- * the GLOB operator.
+ * are implemented as like(B,A).
  */
 static void
-likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
+likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
 {
 	const char *zA, *zB;
 	u32 escape;
 	int nPat;
 	sqlite3 *db = sqlite3_context_db_handle(context);
-	struct compareInfo *pInfo = sqlite3_user_data(context);
+	int *is_like_ci = sqlite3_user_data(context);
 
 #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
 	if (sqlite3_value_type(argv[0]) == SQLITE_BLOB
@@ -974,8 +867,9 @@ likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
 	zB = (const char *) sqlite3_value_text(argv[0]);
 	zA = (const char *) sqlite3_value_text(argv[1]);
 
-	/* Limit the length of the LIKE or GLOB pattern to avoid
-	 * problems of deep recursion and N*N behavior in
+	/**
+	 * Limit the length of the LIKE pattern to avoid problems
+	 * of deep recursion and N*N behavior in
 	 * sql_utf8_pattern_compare().
 	 */
 	nPat = sqlite3_value_bytes(argv[0]);
@@ -983,28 +877,29 @@ likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
 	testcase(nPat == db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] + 1);
 	if (nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]) {
 		sqlite3_result_error(context,
-				     "LIKE or GLOB pattern too complex", -1);
+				     "LIKE pattern is too complex", -1);
 		return;
 	}
 	/* Encoding did not change */
 	assert(zB == (const char *) sqlite3_value_text(argv[0]));
 
 	if (argc == 3) {
-		/* The escape character string must consist of a single UTF-8 character.
-		 * Otherwise, return an error.
+		/**
+		 * The escape character string must consist of a
+		 * single UTF-8 character. Otherwise, return an
+		 * error.
 		 */
 		const unsigned char *zEsc = sqlite3_value_text(argv[2]);
 		if (zEsc == 0)
 			return;
 		if (sqlite3Utf8CharLen((char *)zEsc, -1) != 1) {
 			sqlite3_result_error(context,
-					     "ESCAPE expression must be a single character",
+					     "ESCAPE expression must be a"
+					     " single character",
 					     -1);
 			return;
 		}
 		escape = sqlite3Utf8Read(&zEsc);
-	} else {
-		escape = pInfo->matchSet;
 	}
 	if (!zA || !zB)
 		return;
@@ -1012,10 +907,10 @@ likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
 	sqlite3_like_count++;
 #endif
 	int res;
-	res = sql_utf8_pattern_compare(zB, zA, pInfo, escape);
+	res = sql_utf8_pattern_compare(zB, zA, is_like_ci, escape);
 	if (res == SQL_INVALID_PATTERN) {
-		sqlite3_result_error(context, "LIKE or GLOB pattern can only"
-				     " contain UTF-8 characters", -1);
+		sqlite3_result_error(context, "LIKE pattern can only contain"
+				     " UTF-8 characters", -1);
 		return;
 	}
 	sqlite3_result_int(context, res == SQL_MATCH);
@@ -1811,64 +1706,54 @@ setLikeOptFlag(sqlite3 * db, const char *zName, u8 flagVal)
 	}
 }
 
-/*
- * Register the built-in LIKE and GLOB functions.  The caseSensitive
- * parameter determines whether or not the LIKE operator is case
- * sensitive.  GLOB is always case sensitive.
+/**
+ * Register the built-in LIKE function.
+ *
+ * @param db database structure.
+ * @param is_case_sensitive whether like should be case sensitive
+ * 			 or not.
+ *
+ * @retval none.
  */
 void
-sqlite3RegisterLikeFunctions(sqlite3 * db, int caseSensitive)
+sqlite3RegisterLikeFunctions(sqlite3 *db, int is_case_sensitive)
 {
-	struct compareInfo *pInfo;
-	if (caseSensitive) {
-		pInfo = (struct compareInfo *)&likeInfoAlt;
-	} else {
-		pInfo = (struct compareInfo *)&likeInfoNorm;
-	}
-	sqlite3CreateFunc(db, "LIKE", 2, 0, pInfo, likeFunc, 0, 0, 0);
-	sqlite3CreateFunc(db, "LIKE", 3, 0, pInfo, likeFunc, 0, 0, 0);
-	sqlite3CreateFunc(db, "GLOB", 2, 0, (struct compareInfo *)&globInfo, likeFunc, 0, 0, 0);
-	setLikeOptFlag(db, "GLOB", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
+	int *is_like_ci;
+	if (is_case_sensitive)
+		is_like_ci = (int *)&case_sensitive_like;
+	else
+		is_like_ci = (int *)&case_insensitive_like;
+	sqlite3CreateFunc(db, "LIKE", 2, 0, is_like_ci, likeFunc, 0, 0, 0);
+	sqlite3CreateFunc(db, "LIKE", 3, 0, is_like_ci, likeFunc, 0, 0, 0);
 	setLikeOptFlag(db, "LIKE",
-		       caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) :
-		       SQLITE_FUNC_LIKE);
+		       is_case_sensitive ? (SQLITE_FUNC_LIKE |
+		       SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
 }
 
-/*
- * pExpr points to an expression which implements a function.  If
- * it is appropriate to apply the LIKE optimization to that function
- * then set aWc[0] through aWc[2] to the wildcard characters and
- * return TRUE.  If the function is not a LIKE-style function then
- * return FALSE.
+/**
+ * Check if the function implements LIKE-style comparison & if it
+ * is appropriate to apply a LIKE query optimization.
+ *
+ * @param db database structure.
+ * @param pExpr pointer to a function-implementing expression.
+ * @param is_like_ci true if LIKE is case insensitive.
  *
- * *pIsNocase is set to true if uppercase and lowercase are equivalent for
- * the function (default for LIKE).  If the function makes the distinction
- * between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
- * false.
+ * @retval 0 if it's appropriate to apply optimization.
+ *         1 if it's not.
  */
 int
-sqlite3IsLikeFunction(sqlite3 * db, Expr * pExpr, int *pIsNocase, char *aWc)
+sql_is_like_func(sqlite3 *db, Expr *pExpr, int *is_like_ci)
 {
 	FuncDef *pDef;
-	if (pExpr->op != TK_FUNCTION
-	    || !pExpr->x.pList || pExpr->x.pList->nExpr != 2) {
+	if (pExpr->op != TK_FUNCTION || !pExpr->x.pList ||
+	    pExpr->x.pList->nExpr != 2)
 		return 0;
-	}
 	assert(!ExprHasProperty(pExpr, EP_xIsSelect));
 	pDef = sqlite3FindFunction(db, pExpr->u.zToken, 2, 0);
 	if (NEVER(pDef == 0) || (pDef->funcFlags & SQLITE_FUNC_LIKE) == 0) {
 		return 0;
 	}
-
-	/* The memcpy() statement assumes that the wildcard characters are
-	 * the first three statements in the compareInfo structure.  The
-	 * asserts() that follow verify that assumption
-	 */
-	memcpy(aWc, pDef->pUserData, 3);
-	assert((char *)&likeInfoAlt == (char *)&likeInfoAlt.matchAll);
-	assert(&((char *)&likeInfoAlt)[1] == (char *)&likeInfoAlt.matchOne);
-	assert(&((char *)&likeInfoAlt)[2] == (char *)&likeInfoAlt.matchSet);
-	*pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE) == 0;
+	*is_like_ci = (pDef->funcFlags & SQLITE_FUNC_CASE) == 0;
 	return 1;
 }
 
@@ -1962,16 +1847,14 @@ sqlite3RegisterBuiltinFunctions(void)
 		AGGREGATE(group_concat, 2, 0, 0, groupConcatStep,
 			  groupConcatFinalize),
 
-		LIKEFUNC(glob, 2, &globInfo,
-			 SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE),
 #ifdef SQLITE_CASE_SENSITIVE_LIKE
-		LIKEFUNC(like, 2, &likeInfoAlt,
+		LIKEFUNC(like, 2, &case_sensitive_like,
 			 SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE),
-		LIKEFUNC(like, 3, &likeInfoAlt,
+		LIKEFUNC(like, 3, &case_sensitive_like,
 			 SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE),
 #else
-		LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
-		LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
+		LIKEFUNC(like, 2, &case_insensitive_like, SQLITE_FUNC_LIKE),
+		LIKEFUNC(like, 3, &case_insensitive_like, SQLITE_FUNC_LIKE),
 #endif
 #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
 		FUNCTION(unknown, -1, 0, 0, unknownFunc),
diff --git a/src/box/sql/pragma.c b/src/box/sql/pragma.c
index 5fb29c7..26a602b 100644
--- a/src/box/sql/pragma.c
+++ b/src/box/sql/pragma.c
@@ -771,8 +771,10 @@ sqlite3Pragma(Parse * pParse, Token * pId,	/* First part of [schema.]id field */
 		}
 #endif
 
-		/* Reinstall the LIKE and GLOB functions.  The variant of LIKE *
-		 * used will be case sensitive or not depending on the RHS.
+		/**
+		 * Reinstall the LIKE and functions. The variant
+		 * of LIKE * used will be case sensitive or not
+		 * depending on the RHS.
 		 */
 	case PragTyp_CASE_SENSITIVE_LIKE:{
 			if (zRight) {
diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
index e7a02dc..a805adf 100644
--- a/src/box/sql/sqliteInt.h
+++ b/src/box/sql/sqliteInt.h
@@ -565,17 +565,16 @@ char *
 sqlite3_vsnprintf(int, char *, const char *, va_list);
 
 int
-sqlite3_strlike(const char *zGlob, const char *zStr,
-		unsigned int cEsc);
+sql_strlike_cs(const char *zLike, const char *zStr, unsigned int cEsc);
+
+int
+sql_strlike_ci(const char *zLike, const char *zStr, unsigned int cEsc);
 
 typedef void (*sqlite3_destructor_type) (void *);
 #define SQLITE_STATIC      ((sqlite3_destructor_type)0)
 #define SQLITE_TRANSIENT   ((sqlite3_destructor_type)-1)
 
 int
-sqlite3_strglob(const char *zGlob, const char *zStr);
-
-int
 sqlite3_prepare(sqlite3 * db,	/* Database handle */
 		const char *zSql,	/* SQL statement, UTF-8 encoded */
 		int nByte,	/* Maximum length of zSql in bytes. */
@@ -701,9 +700,6 @@ struct on_conflict {
 	enum on_conflict_action optimized_action;
 };
 
-void *
-sqlite3_user_data(sqlite3_context *);
-
 void
 sqlite3_randomness(int N, void *P);
 
@@ -2355,7 +2351,7 @@ struct Expr {
 #define EP_Distinct  0x000010	/* Aggregate function with DISTINCT keyword */
 #define EP_VarSelect 0x000020	/* pSelect is correlated, not constant */
 #define EP_DblQuoted 0x000040	/* token.z was originally in "..." */
-#define EP_InfixFunc 0x000080	/* True for an infix function: LIKE, GLOB, etc */
+#define EP_InfixFunc 0x000080	/* True for an infix function: LIKE, etc */
 #define EP_Collate   0x000100	/* Tree contains a TK_COLLATE operator */
 #define EP_Generic   0x000200	/* Ignore COLLATE or affinity on this tree */
 #define EP_IntValue  0x000400	/* Integer value contained in u.iValue */
@@ -4378,7 +4374,7 @@ index_column_count(const Index *);
 bool
 index_is_unique_not_null(const Index *);
 void sqlite3RegisterLikeFunctions(sqlite3 *, int);
-int sqlite3IsLikeFunction(sqlite3 *, Expr *, int *, char *);
+int sql_is_like_func(sqlite3 *db, Expr *pExpr, int *is_case_insensitive);
 void sqlite3SchemaClear(sqlite3 *);
 Schema *sqlite3SchemaCreate(sqlite3 *);
 int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *,
diff --git a/src/box/sql/sqliteLimit.h b/src/box/sql/sqliteLimit.h
index b88c9c6..e76353a 100644
--- a/src/box/sql/sqliteLimit.h
+++ b/src/box/sql/sqliteLimit.h
@@ -164,8 +164,7 @@ enum {
 #endif
 
 /*
- * Maximum length (in bytes) of the pattern in a LIKE or GLOB
- * operator.
+ * Maximum length (in bytes) of the pattern in a LIKE operator.
  */
 #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH
 #define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000
diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
index 0c97814..3f10f4d 100644
--- a/src/box/sql/vdbe.c
+++ b/src/box/sql/vdbe.c
@@ -5521,7 +5521,7 @@ vdbe_return:
 	testcase( nVmStep>0);
 	p->aCounter[SQLITE_STMTSTATUS_VM_STEP] += (int)nVmStep;
 	assert(rc!=SQLITE_OK || nExtraDelete==0
-		|| sqlite3_strlike("DELETE%",p->zSql,0)!=0
+		|| sql_strlike_ci("DELETE%", p->zSql, 0) != 0
 		);
 	return rc;
 
diff --git a/src/box/sql/wherecode.c b/src/box/sql/wherecode.c
index c35c25a..f864ea7 100644
--- a/src/box/sql/wherecode.c
+++ b/src/box/sql/wherecode.c
@@ -339,7 +339,7 @@ sqlite3WhereAddScanStatus(Vdbe * v,		/* Vdbe to add scanstatus entry to */
  * automatically disabled.  In this way, terms get disabled if derived
  * virtual terms are tested first.  For example:
  *
- *      x GLOB 'abc*' AND x>='abc' AND x<'acd'
+ *      x LIKE 'abc%' AND x>='abc' AND x<'acd'
  *      \___________/     \______/     \_____/
  *         parent          child1       child2
  *
diff --git a/src/box/sql/whereexpr.c b/src/box/sql/whereexpr.c
index 6128686..947bd5d 100644
--- a/src/box/sql/whereexpr.c
+++ b/src/box/sql/whereexpr.c
@@ -219,37 +219,57 @@ operatorMask(int op)
 }
 
 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
-/*
- * Check to see if the given expression is a LIKE or GLOB operator that
- * can be optimized using inequality constraints.  Return TRUE if it is
- * so and false if not.
+/**
+ * Check to see if the given expression is a LIKE operator that
+ * can be optimized using inequality constraints.
+ *
+ * In order for the operator to be optimizible, the RHS must be a
+ * string literal that does not begin with a wildcard. The LHS
+ * must be a column that may only be NULL, a string, or a BLOB,
+ * never a number. The collating sequence for the column on the
+ * LHS must be appropriate for the operator.
+ *
+ * @param pParse      Parsing and code generating context.
+ * @param pExpr       Test this expression.
+ * @param ppPrefix    Pointer to TK_STRING expression with
+ *		      pattern prefix.
+ * @param pisComplete True if the only wildcard is '%' in the
+ * 		      last character.
+ * @param pnoCase     True if case insensitive.
  *
- * In order for the operator to be optimizible, the RHS must be a string
- * literal that does not begin with a wildcard.  The LHS must be a column
- * that may only be NULL, a string, or a BLOB, never a number. The
- * collating sequence for the column on the LHS must be appropriate for
- * the operator.
+ * @retval True if the given expr is a LIKE operator & is
+ *	   optimizable using inequality constraints.
+ * 	   False if not.
  */
 static int
-isLikeOrGlob(Parse * pParse,	/* Parsing and code generating context */
-	     Expr * pExpr,	/* Test this expression */
-	     Expr ** ppPrefix,	/* Pointer to TK_STRING expression with pattern prefix */
-	     int *pisComplete,	/* True if the only wildcard is % in the last character */
-	     int *pnoCase	/* True if uppercase is equivalent to lowercase */
-    )
+is_like(Parse *pParse,
+	Expr *pExpr,
+	Expr **ppPrefix,
+	int *pisComplete,
+	int *pnoCase)
 {
-	const char *z = 0;	/* String on RHS of LIKE operator */
-	Expr *pRight, *pLeft;	/* Right and left size of LIKE operator */
-	ExprList *pList;	/* List of operands to the LIKE operator */
-	int c;			/* One character in z[] */
-	int cnt;		/* Number of non-wildcard prefix characters */
-	char wc[3];		/* Wildcard characters */
-	sqlite3 *db = pParse->db;	/* Database connection */
+	/* String on RHS of LIKE operator */
+	const char *z = 0;
+	/* Right and left size of LIKE operator */
+	Expr *pRight, *pLeft;
+	/* List of operands to the LIKE operator */
+	ExprList *pList;
+	/* One character in z[] */
+	int c;
+	/* Number of non-wildcard prefix characters */
+	int cnt;
+	/* Wildcard characters */
+	char match_all = '%';
+	char match_one = '_';
+	/* Database connection */
+	sqlite3 *db = pParse->db;
 	sqlite3_value *pVal = 0;
-	int op;			/* Opcode of pRight */
-	int rc;			/* Result code to return */
+	/* Opcode of pRight */
+	int op;
+	/* Result code to return */
+	int rc;
 
-	if (!sqlite3IsLikeFunction(db, pExpr, pnoCase, wc)) {
+	if (!sql_is_like_func(db, pExpr, pnoCase)) {
 		return 0;
 	}
 	pList = pExpr->x.pList;
@@ -257,8 +277,9 @@ isLikeOrGlob(Parse * pParse,	/* Parsing and code generating context */
 	/* Value might be numeric */
 	if (pLeft->op != TK_COLUMN ||
 	    sqlite3ExprAffinity(pLeft) != AFFINITY_TEXT) {
-		/* IMP: R-02065-49465 The left-hand side of the LIKE or GLOB operator must
-		 * be the name of an indexed column with TEXT affinity.
+		/* IMP: R-02065-49465 The left-hand side of the
+		 * LIKE operator must be the name of an indexed
+		 * column with TEXT affinity.
 		 */
 		return 0;
 	}
@@ -281,13 +302,11 @@ isLikeOrGlob(Parse * pParse,	/* Parsing and code generating context */
 	}
 	if (z) {
 		cnt = 0;
-		while ((c = z[cnt]) != 0 && c != wc[0] && c != wc[1]
-		       && c != wc[2]) {
+		while ((c = z[cnt]) != 0 && c != match_one && c != match_all)
 			cnt++;
-		}
 		if (cnt != 0 && 255 != (u8) z[cnt - 1]) {
 			Expr *pPrefix;
-			*pisComplete = c == wc[0] && z[cnt + 1] == 0;
+			*pisComplete = c == match_all && z[cnt + 1] == 0;
 			pPrefix = sqlite3Expr(db, TK_STRING, z);
 			if (pPrefix)
 				pPrefix->u.zToken[cnt] = 0;
@@ -943,19 +962,32 @@ exprAnalyze(SrcList * pSrc,	/* the FROM clause */
 	    int idxTerm		/* Index of the term to be analyzed */
     )
 {
-	WhereInfo *pWInfo = pWC->pWInfo;	/* WHERE clause processing context */
-	WhereTerm *pTerm;	/* The term to be analyzed */
-	WhereMaskSet *pMaskSet;	/* Set of table index masks */
-	Expr *pExpr;		/* The expression to be analyzed */
-	Bitmask prereqLeft;	/* Prerequesites of the pExpr->pLeft */
-	Bitmask prereqAll;	/* Prerequesites of pExpr */
-	Bitmask extraRight = 0;	/* Extra dependencies on LEFT JOIN */
-	Expr *pStr1 = 0;	/* RHS of LIKE/GLOB operator */
-	int isComplete = 0;	/* RHS of LIKE/GLOB ends with wildcard */
-	int noCase = 0;		/* uppercase equivalent to lowercase */
-	int op;			/* Top-level operator.  pExpr->op */
-	Parse *pParse = pWInfo->pParse;	/* Parsing context */
-	sqlite3 *db = pParse->db;	/* Database connection */
+	/* WHERE clause processing context */
+	WhereInfo *pWInfo = pWC->pWInfo;
+	/* The term to be analyzed */
+	WhereTerm *pTerm;
+	/* Set of table index masks */
+	WhereMaskSet *pMaskSet;
+	/* The expression to be analyzed */
+	Expr *pExpr;
+	/* Prerequesites of the pExpr->pLeft */
+	Bitmask prereqLeft;
+	/* Prerequesites of pExpr */
+	Bitmask prereqAll;
+	/* Extra dependencies on LEFT JOIN */
+	Bitmask extraRight = 0;
+	/* RHS of LIKE operator */
+	Expr *pStr1 = 0;
+	/* RHS of LIKE ends with wildcard */
+	int isComplete = 0;
+	/* uppercase equivalent to lowercase */
+	int noCase = 0;
+	/* Top-level operator. pExpr->op */
+	int op;
+	/* Parsing context */
+	Parse *pParse = pWInfo->pParse;
+	/* Database connection */
+	sqlite3 *db = pParse->db;
 
 	if (db->mallocFailed) {
 		return;
@@ -1111,37 +1143,44 @@ exprAnalyze(SrcList * pSrc,	/* the FROM clause */
 #endif				/* SQLITE_OMIT_OR_OPTIMIZATION */
 
 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
-	/* Add constraints to reduce the search space on a LIKE or GLOB
+	/**
+	 * Add constraints to reduce the search space on a LIKE
 	 * operator.
 	 *
-	 * A like pattern of the form "x LIKE 'aBc%'" is changed into constraints
+	 * A like pattern of the form "x LIKE 'aBc%'" is changed
+	 * into constraints:
 	 *
 	 *          x>='ABC' AND x<'abd' AND x LIKE 'aBc%'
 	 *
-	 * The last character of the prefix "abc" is incremented to form the
-	 * termination condition "abd".  If case is not significant (the default
-	 * for LIKE) then the lower-bound is made all uppercase and the upper-
-	 * bound is made all lowercase so that the bounds also work when comparing
-	 * BLOBs.
+	 * The last character of the prefix "abc" is incremented
+	 * to form the termination condition "abd". If case is
+	 * not significant (the default for LIKE) then the
+	 * lower-bound is made all uppercase and the upper-bound
+	 * is made all lowercase so that the bounds also work
+	 * when comparing BLOBs.
 	 */
 	if (pWC->op == TK_AND
-	    && isLikeOrGlob(pParse, pExpr, &pStr1, &isComplete, &noCase)
-	    ) {
-		Expr *pLeft;	/* LHS of LIKE/GLOB operator */
-		Expr *pStr2;	/* Copy of pStr1 - RHS of LIKE/GLOB operator */
+	    && is_like(pParse, pExpr, &pStr1, &isComplete, &noCase)) {
+		/* LHS of LIKE operator */
+		Expr *pLeft;
+		/* Copy of pStr1 - RHS of LIKE operator */
+		Expr *pStr2;
 		Expr *pNewExpr1;
 		Expr *pNewExpr2;
 		int idxNew1;
 		int idxNew2;
-		const char *zCollSeqName;	/* Name of collating sequence */
+		/* Name of collating sequence */
+		const char *zCollSeqName;
 		const u16 wtFlags = TERM_LIKEOPT | TERM_VIRTUAL | TERM_DYNAMIC;
 
 		pLeft = pExpr->x.pList->a[1].pExpr;
 		pStr2 = sqlite3ExprDup(db, pStr1, 0);
 
-		/* Convert the lower bound to upper-case and the upper bound to
-		 * lower-case (upper-case is less than lower-case in ASCII) so that
-		 * the range constraints also work for BLOBs
+		/**
+		 * Convert the lower bound to upper-case and the
+		 * upper bound to lower-case (upper-case is less
+		 * than lower-case in ASCII) so that the range
+		 * constraints also work for BLOBs
 		 */
 		if (noCase && !pParse->db->mallocFailed) {
 			int i;
diff --git a/test/sql-tap/alter.test.lua b/test/sql-tap/alter.test.lua
index cfe2801..773bdeb 100755
--- a/test/sql-tap/alter.test.lua
+++ b/test/sql-tap/alter.test.lua
@@ -230,9 +230,10 @@ test:do_execsql_test(
 test:do_execsql_test(
     "alter-5.1",
     [[
+        PRAGMA case_sensitive_like = true;
         CREATE TABLE xyz(x PRIMARY KEY);
         ALTER TABLE xyz RENAME TO "xyz1234abc";
-        SELECT "name" FROM "_space" WHERE "name" GLOB 'xyz*';
+        SELECT "name" FROM "_space" WHERE "name" LIKE 'xyz%';
     ]], {
         -- <alter-5.1>
         "xyz1234abc"
@@ -243,7 +244,8 @@ test:do_execsql_test(
     "alter-5.2",
     [[
         ALTER TABLE "xyz1234abc" RENAME TO xyzabc;
-        SELECT "name" FROM "_space" WHERE "name" GLOB 'XYZ*';
+        SELECT "name" FROM "_space" WHERE "name" LIKE 'XYZ%';
+        PRAGMA case_sensitive_like = false;
     ]], {
         -- <alter-5.2>
         "XYZABC"
diff --git a/test/sql-tap/analyze9.test.lua b/test/sql-tap/analyze9.test.lua
index 3b3d52f..ec3e545 100755
--- a/test/sql-tap/analyze9.test.lua
+++ b/test/sql-tap/analyze9.test.lua
@@ -206,10 +206,10 @@ test:do_execsql_test(
         INSERT INTO t1 VALUES(81, 1, 'one-i');
         INSERT INTO t1 VALUES(91, 1, 'one-j');
         INSERT INTO t1 SELECT a+1,2,'two' || substr(c,4) FROM t1;
-        INSERT INTO t1 SELECT a+2,3,'three'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
-        INSERT INTO t1 SELECT a+3,4,'four'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
-        INSERT INTO t1 SELECT a+4,5,'five'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
-        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';	
+        INSERT INTO t1 SELECT a+2,3,'three'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';
+        INSERT INTO t1 SELECT a+3,4,'four'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';
+        INSERT INTO t1 SELECT a+4,5,'five'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';
+        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';	
         CREATE INDEX t1b ON t1(b);
         ANALYZE;
         SELECT c FROM t1 WHERE b=3 AND a BETWEEN 30 AND 60;
diff --git a/test/sql-tap/e_expr.test.lua b/test/sql-tap/e_expr.test.lua
index 9780d2c..1620268 100755
--- a/test/sql-tap/e_expr.test.lua
+++ b/test/sql-tap/e_expr.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(10665)
+test:plan(11521)
 
 --!./tcltestrunner.lua
 -- 2010 July 16
@@ -77,10 +77,7 @@ local operations = {
     {"<>", "ne1"},
     {"!=", "ne2"},
     {"IS", "is"},
--- NOTE: This test needs refactoring after deletion of GLOB &
---	 type restrictions for LIKE. (See #3572)
---    {"LIKE", "like"},
---    {"GLOB", "glob"},
+    {"LIKE", "like"},
     {"AND", "and"},
     {"OR", "or"},
     {"MATCH", "match"},
@@ -98,12 +95,9 @@ operations = {
     {"+", "-"},
     {"<<", ">>", "&", "|"},
     {"<", "<=", ">", ">="},
--- NOTE: This test needs refactoring after deletion of GLOB &
---	 type restrictions for LIKE. (See #3572)
 -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
--- 		 are waiting for their hour, don't confuse them
---		 being commented with ticket above.
-    {"=", "==", "!=", "<>"}, --"LIKE", "GLOB"}, --"MATCH", "REGEXP"},
+-- 		 are waiting for their hour.
+    {"=", "==", "!=", "<>", "LIKE"}, --"MATCH", "REGEXP"},
     {"AND"},
     {"OR"},
 }
@@ -128,7 +122,7 @@ end
 -- EVIDENCE-OF: R-15514-65163 SQLite understands the following binary
 -- operators, in order from highest to lowest precedence: || * / % + -
 -- << >> & | < <= > >= = == != <> IS IS
--- NOT IN LIKE GLOB MATCH REGEXP AND OR
+-- NOT IN LIKE MATCH REGEXP AND OR
 --
 -- EVIDENCE-OF: R-38759-38789 Operators IS and IS NOT have the same
 -- precedence as =.
@@ -467,18 +461,63 @@ literals = {
 for _, op in ipairs(oplist) do
     for n1, rhs in ipairs(literals) do
         for n2, lhs in ipairs(literals) do
-            local t = test:execsql(string.format(" SELECT typeof(%s %s %s) ", lhs, op, rhs))[1]
-            test:do_test(
-                string.format("e_expr-7.%s.%s.%s", opname[op], n1, n2),
-                function()
-                    --print("\n op "..op.." t "..t)
-                    return (((op == "||") and ((t == "text") or
-                            (t == "null"))) or
-                            ((op ~= "||") and (((t == "integer") or
-                                    (t == "real")) or
-                                    (t == "null")))) and 1 or 0
-                end, 1)
+            if op ~= "LIKE" then
+                local t = test:execsql(string.format(" SELECT typeof(%s %s %s) ", lhs, op, rhs))[1]
+                test:do_test(
+                    string.format("e_expr-7.%s.%s.%s", opname[op], n1, n2),
+                    function()
+                        return (((op == "||") and ((t == "text") or
+                                (t == "null"))) or
+                                ((op ~= "||") and (((t == "integer") or
+                                 (t == "real")) or
+                                 (t == "null")))) and 1 or 0
+                    end, 1)
+            end
+        end
+    end
+end
+
+local valid_patterns =
+    {"'abc'", "'hexadecimal'", "''", 123, -123, 0,
+    123.4, 0.0, -123.4, "X''", "X'0000'", "NULL"}
+
+local invalid_patterns = {"X'ABCDEF'"}
+
+for n1, rhs in ipairs(valid_patterns) do
+    for n2, lhs in ipairs(literals) do
+        local t = test:execsql(string.format(" SELECT typeof(%s LIKE %s) ", lhs, rhs))[1]
+        test:do_test(
+            string.format("e_expr-7.%s.LIKE.%s", n1, n2),
+            function()
+                return (t == "integer" or
+                        t == "real" or
+                        t == "null") and 1 or 0
+            end, 1)
+    end
+end
 
+for n1, rhs in ipairs(invalid_patterns) do
+    for n2, lhs in ipairs(literals) do
+        local t = string.format(" SELECT typeof(%s LIKE %s) ", lhs, rhs)
+        local test_name = string.format("e_expr-7.%s.LIKE.%s", n1 + 12, n2)
+        if n2 ~= 13 then
+            test:do_catchsql_test(
+                test_name,
+                t,
+                {
+                    -- <test_name>
+                    1, "LIKE pattern can only contain UTF-8 characters"
+                    -- <test_name>
+                })
+        else
+            test:do_catchsql_test(
+                test_name,
+                t,
+                {
+                    -- <test_name>
+                    0, {"null"}
+                    -- <test_name>
+                })
         end
     end
 end
@@ -1303,13 +1342,16 @@ end
 test:execsql [[
     CREATE TABLE tblname(cname PRIMARY KEY);
 ]]
-local function glob(args)
-    return 1
-end
 
-box.internal.sql_create_function("GLOB", glob)
-box.internal.sql_create_function("MATCH", glob)
-box.internal.sql_create_function("REGEXP", glob)
+-- NOTE: GLOB is removed from Tarantool, thus it'll be needed to
+--       refactor these calls. They don't work right now since
+--          we don't support MATHC & REGEXP.
+-- local function glob(args)
+--     return 1
+-- end
+
+-- box.internal.sql_create_function("MATCH", glob)
+-- box.internal.sql_create_function("REGEXP", glob)
 local test_cases12 ={
     {1, 123},
     {2, 123.4e05},
@@ -1369,47 +1411,43 @@ local test_cases12 ={
 
     {47, "EXPR1 LIKE EXPR2"},
     {48, "EXPR1 LIKE EXPR2 ESCAPE EXPR"},
-    {49, "EXPR1 GLOB EXPR2"},
-    {50, "EXPR1 GLOB EXPR2 ESCAPE EXPR"},
-    {51, "EXPR1 REGEXP EXPR2"},
-    {52, "EXPR1 REGEXP EXPR2 ESCAPE EXPR"},
-    {53, "EXPR1 MATCH EXPR2"},
-    {54, "EXPR1 MATCH EXPR2 ESCAPE EXPR"},
-    {55, "EXPR1 NOT LIKE EXPR2"},
-    {56, "EXPR1 NOT LIKE EXPR2 ESCAPE EXPR"},
-    {57, "EXPR1 NOT GLOB EXPR2"},
-    {58, "EXPR1 NOT GLOB EXPR2 ESCAPE EXPR"},
-    {59, "EXPR1 NOT REGEXP EXPR2"},
-    {60, "EXPR1 NOT REGEXP EXPR2 ESCAPE EXPR"},
-    {61, "EXPR1 NOT MATCH EXPR2"},
-    {62, "EXPR1 NOT MATCH EXPR2 ESCAPE EXPR"},
-
-    {63, "EXPR IS NULL"},
-    {64, "EXPR IS NOT NULL"},
-
-    {65, "EXPR NOT BETWEEN EXPR1 AND EXPR2"},
-    {66, "EXPR BETWEEN EXPR1 AND EXPR2"},
-
-    {67, "EXPR NOT IN (SELECT cname FROM tblname)"},
-    {68, "EXPR NOT IN (1)"},
-    {69, "EXPR NOT IN (1, 2, 3)"},
-    {70, "EXPR NOT IN tblname"},
-    {71, "EXPR IN (SELECT cname FROM tblname)"},
-    {72, "EXPR IN (1)"},
-    {73, "EXPR IN (1, 2, 3)"},
-    {74, "EXPR IN tblname"},
-
-    {75, "EXISTS (SELECT cname FROM tblname)"},
-    {76, "NOT EXISTS (SELECT cname FROM tblname)"},
-
-    {77, "CASE EXPR WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
-    {78, "CASE EXPR WHEN EXPR1 THEN EXPR2 END"},
-    {79, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"},
-    {80, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
-    {81, "CASE WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
-    {82, "CASE WHEN EXPR1 THEN EXPR2 END"},
-    {83, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"},
-    {84, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
+    {49, "EXPR1 REGEXP EXPR2"},
+    {50, "EXPR1 REGEXP EXPR2 ESCAPE EXPR"},
+    {51, "EXPR1 MATCH EXPR2"},
+    {52, "EXPR1 MATCH EXPR2 ESCAPE EXPR"},
+    {53, "EXPR1 NOT LIKE EXPR2"},
+    {54, "EXPR1 NOT LIKE EXPR2 ESCAPE EXPR"},
+    {55, "EXPR1 NOT REGEXP EXPR2"},
+    {56, "EXPR1 NOT REGEXP EXPR2 ESCAPE EXPR"},
+    {57, "EXPR1 NOT MATCH EXPR2"},
+    {58, "EXPR1 NOT MATCH EXPR2 ESCAPE EXPR"},
+
+    {59, "EXPR IS NULL"},
+    {60, "EXPR IS NOT NULL"},
+
+    {61, "EXPR NOT BETWEEN EXPR1 AND EXPR2"},
+    {62, "EXPR BETWEEN EXPR1 AND EXPR2"},
+
+    {63, "EXPR NOT IN (SELECT cname FROM tblname)"},
+    {64, "EXPR NOT IN (1)"},
+    {65, "EXPR NOT IN (1, 2, 3)"},
+    {66, "EXPR NOT IN tblname"},
+    {67, "EXPR IN (SELECT cname FROM tblname)"},
+    {68, "EXPR IN (1)"},
+    {69, "EXPR IN (1, 2, 3)"},
+    {70, "EXPR IN tblname"},
+
+    {71, "EXISTS (SELECT cname FROM tblname)"},
+    {72, "NOT EXISTS (SELECT cname FROM tblname)"},
+
+    {73, "CASE EXPR WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
+    {74, "CASE EXPR WHEN EXPR1 THEN EXPR2 END"},
+    {75, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"},
+    {76, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
+    {77, "CASE WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
+    {78, "CASE WHEN EXPR1 THEN EXPR2 END"},
+    {79, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"},
+    {80, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
 }
 
 for _, val in ipairs(test_cases12) do
@@ -1802,7 +1840,7 @@ test:do_execsql_test(
     })
 
 ---------------------------------------------------------------------------
--- Test the statements related to the LIKE and GLOB operators.
+-- Test the statements related to the LIKE operator.
 --
 -- EVIDENCE-OF: R-16584-60189 The LIKE operator does a pattern matching
 -- comparison.
@@ -2274,15 +2312,23 @@ test:do_execsql_test(
         -- </e_expr-16.1.7>
     })
 
--- EVIDENCE-OF: R-52087-12043 The GLOB operator is similar to LIKE but
--- uses the Unix file globbing syntax for its wildcards.
---
--- EVIDENCE-OF: R-09813-17279 Also, GLOB is case sensitive, unlike LIKE.
+-- EVIDENCE-OF: R-52087-12043 LIKE doesn't use Unix file globbing
+-- syntax for its wildcards.
 --
 test:do_execsql_test(
+    "e_expr-17.1.0",
+    [[
+        PRAGMA case_sensitive_like = 1
+    ]], {
+        -- <e_expr-17.1.0>
+
+        -- <e_expr-17.1.0>
+    })
+
+test:do_execsql_test(
     "e_expr-17.1.1",
     [[
-        SELECT 'abcxyz' GLOB 'abc%'
+        SELECT 'abcxyz' LIKE 'abc*'
     ]], {
         -- <e_expr-17.1.1>
         0
@@ -2292,7 +2338,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "e_expr-17.1.2",
     [[
-        SELECT 'abcxyz' GLOB 'abc*'
+        SELECT 'abcxyz' LIKE 'abc%'
     ]], {
         -- <e_expr-17.1.2>
         1
@@ -2302,7 +2348,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "e_expr-17.1.3",
     [[
-        SELECT 'abcxyz' GLOB 'abc___'
+        SELECT 'abcxyz' LIKE 'abc???'
     ]], {
         -- <e_expr-17.1.3>
         0
@@ -2312,7 +2358,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "e_expr-17.1.4",
     [[
-        SELECT 'abcxyz' GLOB 'abc???'
+        SELECT 'abcxyz' LIKE 'abc___'
     ]], {
         -- <e_expr-17.1.4>
         1
@@ -2322,7 +2368,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "e_expr-17.1.5",
     [[
-        SELECT 'abcxyz' GLOB 'abc*'
+        SELECT 'abcxyz' LIKE 'abc%'
     ]], {
         -- <e_expr-17.1.5>
         1
@@ -2332,7 +2378,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "e_expr-17.1.6",
     [[
-        SELECT 'ABCxyz' GLOB 'abc*'
+        SELECT 'ABCxyz' LIKE 'abc%'
     ]], {
         -- <e_expr-17.1.6>
         0
@@ -2342,34 +2388,44 @@ test:do_execsql_test(
 test:do_execsql_test(
     "e_expr-17.1.7",
     [[
-        SELECT 'abcxyz' GLOB 'ABC*'
+        SELECT 'abcxyz' LIKE 'ABC%'
     ]], {
         -- <e_expr-17.1.7>
         0
         -- </e_expr-17.1.7>
     })
 
--- EVIDENCE-OF: R-39616-20555 Both GLOB and LIKE may be preceded by the
+-- EVIDENCE-OF: R-39616-20555 LIKE may be preceded by the
 -- NOT keyword to invert the sense of the test.
 --
 test:do_execsql_test(
+    "e_expr-17.2.0",
+    [[
+        SELECT 'abcxyz' NOT LIKE 'ABC%'
+    ]], {
+        -- <e_expr-17.2.0>
+        1
+        -- </e_expr-17.2.0>
+    })
+
+test:do_execsql_test(
     "e_expr-17.2.1",
     [[
-        SELECT 'abcxyz' NOT GLOB 'ABC*'
+        SELECT 'abcxyz' NOT LIKE 'abc%'
     ]], {
         -- <e_expr-17.2.1>
-        1
+        0
         -- </e_expr-17.2.1>
     })
 
 test:do_execsql_test(
     "e_expr-17.2.2",
     [[
-        SELECT 'abcxyz' NOT GLOB 'abc*'
+        PRAGMA case_sensitive_like = 0
     ]], {
         -- <e_expr-17.2.2>
-        0
-        -- </e_expr-17.2.2>
+
+        -- <e_expr-17.2.2>
     })
 
 test:do_execsql_test(
@@ -2405,10 +2461,11 @@ test:do_execsql_test(
 -- MUST_WORK_TEST uses access to nullvalue... (sql parameters) and built in functions
 if 0>0 then
     db("nullvalue", "null")
+
     test:do_execsql_test(
         "e_expr-17.2.6",
         [[
-            SELECT 'abcxyz' NOT GLOB NULL
+            SELECT 'abcxyz' NOT LIKE NULL
         ]], {
             -- <e_expr-17.2.6>
             "null"
@@ -2418,92 +2475,16 @@ if 0>0 then
     test:do_execsql_test(
         "e_expr-17.2.7",
         [[
-            SELECT 'abcxyz' NOT LIKE NULL
+            SELECT NULL NOT LIKE 'ABC%'
         ]], {
             -- <e_expr-17.2.7>
             "null"
             -- </e_expr-17.2.7>
         })
 
-    test:do_execsql_test(
-        "e_expr-17.2.8",
-        [[
-            SELECT NULL NOT GLOB 'abc*'
-        ]], {
-            -- <e_expr-17.2.8>
-            "null"
-            -- </e_expr-17.2.8>
-        })
-
-    test:do_execsql_test(
-        "e_expr-17.2.9",
-        [[
-            SELECT NULL NOT LIKE 'ABC%'
-        ]], {
-            -- <e_expr-17.2.9>
-            "null"
-            -- </e_expr-17.2.9>
-        })
-
     db("nullvalue", "")
 end
 
--- EVIDENCE-OF: R-39414-35489 The infix GLOB operator is implemented by
--- calling the function glob(Y,X) and can be modified by overriding that
--- function.
-
-local globargs = {}
-local function globfunc(...)
-    local args = {...}
-    for i, v in ipairs(args) do
-        table.insert(globargs, v)
-    end
-    return 1
-end
-box.internal.sql_create_function("GLOB", globfunc, 2)
---db("func", "glob", "-argcount", 2, "globfunc")
-
-test:do_execsql_test(
-    "e_expr-17.3.1",
-    [[
-        SELECT 'abc' GLOB 'def'
-    ]], {
-        -- <e_expr-17.3.1>
-        1
-        -- </e_expr-17.3.1>
-    })
-
-test:do_test(
-    "e_expr-17.3.2",
-    function()
-        return globargs
-    end, {
-        -- <e_expr-17.3.2>
-        "def", "abc"
-        -- </e_expr-17.3.2>
-    })
-
-globargs = {  }
-test:do_execsql_test(
-    "e_expr-17.3.3",
-    [[
-        SELECT 'X' NOT GLOB 'Y'
-    ]], {
-        -- <e_expr-17.3.3>
-        0
-        -- </e_expr-17.3.3>
-    })
-
-test:do_test(
-    "e_expr-17.3.4",
-    function()
-        return globargs
-    end, {
-        -- <e_expr-17.3.4>
-        "Y", "X"
-        -- </e_expr-17.3.4>
-    })
-
 --sqlite3("db", "test.db")
 -- EVIDENCE-OF: R-41650-20872 No regexp() user function is defined by
 -- default and so use of the REGEXP operator will normally result in an
diff --git a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
index addf0e3..5594334 100755
--- a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
+++ b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
@@ -142,17 +142,17 @@ for i, tested_string in ipairs(invalid_testcases) do
     local test_name = prefix .. "2." .. tostring(i)
     local test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "';"
     test:do_catchsql_test(test_name, test_itself,
-                          {1, "LIKE or GLOB pattern can only contain UTF-8 characters"})
+                          {1, "LIKE pattern can only contain UTF-8 characters"})
 
     test_name = prefix .. "3." .. tostring(i)
     test_itself = "SELECT 'abc' LIKE 'abc" .. tested_string .. "';"
     test:do_catchsql_test(test_name, test_itself,
-                          {1, "LIKE or GLOB pattern can only contain UTF-8 characters"})
+                          {1, "LIKE pattern can only contain UTF-8 characters"})
 
     test_name = prefix .. "4." .. tostring(i)
     test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "c';"
     test:do_catchsql_test(test_name, test_itself,
-                          {1, "LIKE or GLOB pattern can only contain UTF-8 characters"})
+                          {1, "LIKE pattern can only contain UTF-8 characters"})
 
     -- Just skipping if row value predicand contains invalid character.
 
diff --git a/test/sql-tap/like2.test.lua b/test/sql-tap/like2.test.lua
index abcac39..c6c81cb 100755
--- a/test/sql-tap/like2.test.lua
+++ b/test/sql-tap/like2.test.lua
@@ -12,11 +12,11 @@ test:plan(282)
 --    May you find forgiveness for yourself and forgive others.
 --    May you share freely, never taking more than you give.
 --
--------------------------------------------------------------------------
--- This file implements regression tests for SQLite library.  The
--- focus of this file is testing the LIKE and GLOB operators and
--- in particular the optimizations that occur to help those operators
--- run faster.
+-----------------------------------------------------------------
+-- This file implements regression tests for SQLite library. The
+-- focus of this file is testing the LIKE operator and
+-- in particular the optimizations that occur to help this
+-- operator run faster.
 --
 -- $Id: like2.test,v 1.1 2008/05/26 18:33:41 drh Exp $
 -- ["set","testdir",[["file","dirname",["argv0"]]]]
diff --git a/test/sql-tap/like3.test.lua b/test/sql-tap/like3.test.lua
index 505d2fa..0bc71a0 100755
--- a/test/sql-tap/like3.test.lua
+++ b/test/sql-tap/like3.test.lua
@@ -12,13 +12,13 @@ test:plan(7)
 --    May you find forgiveness for yourself and forgive others.
 --    May you share freely, never taking more than you give.
 --
--------------------------------------------------------------------------
+-----------------------------------------------------------------
 --
--- This file implements regression tests for SQLite library.  The
--- focus of this file is testing the LIKE and GLOB operators and
--- in particular the optimizations that occur to help those operators
--- run faster and that those optimizations work correctly when there
--- are both strings and blobs being tested.
+-- This file implements regression tests for SQLite library. The
+-- focus of this file is testing the LIKE operator and
+-- in particular the optimizations that occur to help this
+-- operator run faster and that those optimizations work
+-- correctly when there are both strings and blobs being tested.
 --
 -- Ticket 05f43be8fdda9fbd948d374319b99b054140bc36 shows that the following
 -- SQL was not working correctly:
@@ -70,10 +70,11 @@ test:do_execsql_test(
 test:do_execsql_test(
     "like3-2.0",
     [[
+        PRAGMA case_sensitive_like = 1;
         CREATE TABLE t2(a PRIMARY KEY, b TEXT);
         INSERT INTO t2 SELECT a, b FROM t1;
         CREATE INDEX t2ba ON t2(b,a);
-        SELECT a, b FROM t2 WHERE b GLOB 'ab*' ORDER BY +a;
+        SELECT a, b FROM t2 WHERE b LIKE 'ab%' ORDER BY +a;
     ]], {
         -- <like3-2.0>
         1, "abc", 4, "abc"
@@ -83,7 +84,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "like3-2.1",
     [[
-        SELECT a, b FROM t2 WHERE +b GLOB 'ab*' ORDER BY +a;
+        SELECT a, b FROM t2 WHERE +b LIKE 'ab%' ORDER BY +a;
     ]], {
         -- <like3-2.1>
         1, "abc", 4, "abc"
@@ -93,7 +94,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "like3-2.2",
     [[
-        SELECT a, b FROM t2 WHERE b>=x'6162' AND b GLOB 'ab*'
+        SELECT a, b FROM t2 WHERE b>=x'6162' AND b LIKE 'ab%'
     ]], {
         -- <like3-2.2>
         4, "abc"
@@ -103,7 +104,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "like3-2.3",
     [[
-        SELECT a, b FROM t2 WHERE +b>=x'6162' AND +b GLOB 'ab*'
+        SELECT a, b FROM t2 WHERE +b>=x'6162' AND +b LIKE 'ab%'
     ]], {
         -- <like3-2.3>
         4, "abc"
@@ -113,7 +114,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "like3-2.4",
     [[
-        SELECT a, b FROM t2 WHERE b GLOB 'ab*' AND b>=x'6162'
+        SELECT a, b FROM t2 WHERE b LIKE 'ab%' AND b>=x'6162'
     ]], {
         -- <like3-2.4>
         4, "abc"
@@ -123,7 +124,8 @@ test:do_execsql_test(
 test:do_execsql_test(
     "like3-2.5",
     [[
-        SELECT a, b FROM t2 WHERE +b GLOB 'ab*' AND +b>=x'6162'
+        SELECT a, b FROM t2 WHERE +b LIKE 'ab%' AND +b>=x'6162';
+        PRAGMA case_sensitive_like = 0;
     ]], {
         -- <like3-2.5>
         4, "abc"
diff --git a/test/sql-tap/tkt1537.test.lua b/test/sql-tap/tkt1537.test.lua
index caa4284..4b2d78c 100755
--- a/test/sql-tap/tkt1537.test.lua
+++ b/test/sql-tap/tkt1537.test.lua
@@ -185,7 +185,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "tkt1537-3.1",
     [[
-        SELECT * FROM t1 LEFT JOIN t2 ON b GLOB 'abc*' WHERE t1.id=1;
+        SELECT * FROM t1 LEFT JOIN t2 ON b LIKE 'abc%' WHERE t1.id=1;
     ]], {
         -- <tkt1537-3.1>
         1, "", "", "", ""
@@ -195,7 +195,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "tkt1537-3.2",
     [[
-        SELECT * FROM t2 LEFT JOIN t1 ON a1 GLOB 'abc*' WHERE t2.id=3;
+        SELECT * FROM t2 LEFT JOIN t1 ON a1 LIKE 'abc%' WHERE t2.id=3;
     ]], {
         -- <tkt1537-3.2>
         3, 1, "", "", ""
diff --git a/test/sql-tap/triggerA.test.lua b/test/sql-tap/triggerA.test.lua
index da1add8..530e488 100755
--- a/test/sql-tap/triggerA.test.lua
+++ b/test/sql-tap/triggerA.test.lua
@@ -76,7 +76,7 @@ test:do_test(
     "triggerA-1.3",
     function()
         return test:execsql [[
-            CREATE VIEW v2 AS SELECT x, y FROM t1 WHERE y GLOB '*e*';
+            CREATE VIEW v2 AS SELECT x, y FROM t1 WHERE y LIKE '%e%';
             SELECT * FROM v2 ORDER BY 1;
         ]]
     end, {
diff --git a/test/sql-tap/where3.test.lua b/test/sql-tap/where3.test.lua
index 4582737..9676131 100755
--- a/test/sql-tap/where3.test.lua
+++ b/test/sql-tap/where3.test.lua
@@ -404,7 +404,7 @@ if 0
             CREATE TABLE t401(p INTEGER PRIMARY KEY, q, r);
             CREATE TABLE t402(x INTEGER PRIMARY KEY, y, z);
             EXPLAIN QUERY PLAN
-            SELECT * FROM t400, t401, t402 WHERE t402.z GLOB 'abc*';
+            SELECT * FROM t400, t401, t402 WHERE t402.z LIKE 'abc%';
         ]], {
             -- <where3-4.0>
             0, 0, 2, "SCAN TABLE T402", 0, 1, 0, "SCAN TABLE T400", 0, 2, 1, "SCAN TABLE T401"
@@ -415,7 +415,7 @@ if 0
         "where3-4.1",
         [[
             EXPLAIN QUERY PLAN
-            SELECT * FROM t400, t401, t402 WHERE t401.r GLOB 'abc*';
+            SELECT * FROM t400, t401, t402 WHERE t401.r LIKE 'abc%';
         ]], {
             -- <where3-4.1>
             0, 0, 1, "SCAN TABLE T401", 0, 1, 0, "SCAN TABLE T400", 0, 2, 2, "SCAN TABLE T402"
@@ -426,7 +426,7 @@ if 0
         "where3-4.2",
         [[
             EXPLAIN QUERY PLAN
-            SELECT * FROM t400, t401, t402 WHERE t400.c GLOB 'abc*';
+            SELECT * FROM t400, t401, t402 WHERE t400.c LIKE 'abc%';
         ]], {
             -- <where3-4.2>
             0, 0, 0, "SCAN TABLE T400", 0, 1, 1, "SCAN TABLE T401", 0, 2, 2, "SCAN TABLE T402"
diff --git a/test/sql-tap/where7.test.lua b/test/sql-tap/where7.test.lua
index 6691dd0..27d25e6 100755
--- a/test/sql-tap/where7.test.lua
+++ b/test/sql-tap/where7.test.lua
@@ -448,12 +448,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1070
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
   ]])
     end, {
         -- <where7-2.2.1>
@@ -467,12 +467,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1070
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
   ]])
     end, {
         -- <where7-2.2.2>
@@ -487,11 +487,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR ((a BETWEEN 33 AND 35) AND a!=34)
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR b=220
          OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
          OR ((a BETWEEN 67 AND 69) AND a!=68)
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.3.1>
@@ -506,11 +506,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR ((a BETWEEN 33 AND 35) AND a!=34)
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR b=220
          OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
          OR ((a BETWEEN 67 AND 69) AND a!=68)
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.3.2>
@@ -525,7 +525,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=190
          OR ((a BETWEEN 49 AND 51) AND a!=50)
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR b=407
   ]])
     end, {
@@ -541,7 +541,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=190
          OR ((a BETWEEN 49 AND 51) AND a!=50)
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR b=407
   ]])
     end, {
@@ -555,7 +555,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?opqr*' AND f GLOB 'nopq*')
+      WHERE (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=795
          OR b=1103
          OR b=583
@@ -571,7 +571,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?opqr*' AND f GLOB 'nopq*')
+      WHERE (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=795
          OR b=1103
          OR b=583
@@ -589,7 +589,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=74
          OR a=50
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR ((a BETWEEN 16 AND 18) AND a!=17)
          OR c=21021
          OR ((a BETWEEN 82 AND 84) AND a!=83)
@@ -607,7 +607,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=74
          OR a=50
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR ((a BETWEEN 16 AND 18) AND a!=17)
          OR c=21021
          OR ((a BETWEEN 82 AND 84) AND a!=83)
@@ -746,7 +746,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=72.0 AND d<73.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR c=11011
          OR c=20020
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
@@ -763,7 +763,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=72.0 AND d<73.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR c=11011
          OR c=20020
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
@@ -781,7 +781,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR b=792
          OR a=97
          OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
@@ -804,7 +804,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR b=792
          OR a=97
          OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
@@ -827,11 +827,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 50 AND 52) AND a!=51)
          OR c=9009
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=539
          OR b=297
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR b=957
          OR f='xyzabcdef'
          OR b=619
@@ -849,11 +849,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 50 AND 52) AND a!=51)
          OR c=9009
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=539
          OR b=297
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR b=957
          OR f='xyzabcdef'
          OR b=619
@@ -931,7 +931,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=938
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.16.1>
@@ -946,7 +946,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=938
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.16.2>
@@ -963,12 +963,12 @@ test:do_test(
          OR f='zabcdefgh'
          OR b=308
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR ((a BETWEEN 15 AND 17) AND a!=16)
          OR b=443
          OR ((a BETWEEN 12 AND 14) AND a!=13)
          OR f='uvwxyzabc'
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
   ]])
     end, {
         -- <where7-2.17.1>
@@ -985,12 +985,12 @@ test:do_test(
          OR f='zabcdefgh'
          OR b=308
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR ((a BETWEEN 15 AND 17) AND a!=16)
          OR b=443
          OR ((a BETWEEN 12 AND 14) AND a!=13)
          OR f='uvwxyzabc'
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
   ]])
     end, {
         -- <where7-2.17.2>
@@ -1037,13 +1037,13 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR a=46
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR a=73
          OR c=20020
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR b=267
          OR ((a BETWEEN 68 AND 70) AND a!=69)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.19.1>
@@ -1058,13 +1058,13 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR a=46
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR a=73
          OR c=20020
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR b=267
          OR ((a BETWEEN 68 AND 70) AND a!=69)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.19.2>
@@ -1078,7 +1078,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 27 AND 29) AND a!=28)
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.20.1>
@@ -1092,7 +1092,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 27 AND 29) AND a!=28)
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.20.2>
@@ -1111,9 +1111,9 @@ test:do_test(
          OR ((a BETWEEN 87 AND 89) AND a!=88)
          OR f='bcdefghij'
          OR b=586
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR (d>=6.0 AND d<7.0 AND d IS NOT NULL)
          OR a=9
   ]])
@@ -1134,9 +1134,9 @@ test:do_test(
          OR ((a BETWEEN 87 AND 89) AND a!=88)
          OR f='bcdefghij'
          OR b=586
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR (d>=6.0 AND d<7.0 AND d IS NOT NULL)
          OR a=9
   ]])
@@ -1154,7 +1154,7 @@ test:do_test(
       WHERE b=399
          OR c=28028
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -1171,7 +1171,7 @@ test:do_test(
       WHERE b=399
          OR c=28028
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -1185,15 +1185,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR ((a BETWEEN 96 AND 98) AND a!=97)
          OR c=14014
          OR c=33033
          OR a=89
          OR b=770
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR a=35
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR b=253
          OR c=14014
   ]])
@@ -1208,15 +1208,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR ((a BETWEEN 96 AND 98) AND a!=97)
          OR c=14014
          OR c=33033
          OR a=89
          OR b=770
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR a=35
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR b=253
          OR c=14014
   ]])
@@ -1231,10 +1231,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'vwxyz*')
+      WHERE (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=330
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR a=16
   ]])
     end, {
@@ -1248,10 +1248,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'vwxyz*')
+      WHERE (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=330
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR a=16
   ]])
     end, {
@@ -1268,7 +1268,7 @@ test:do_test(
       WHERE c=5005
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
          OR ((a BETWEEN 36 AND 38) AND a!=37)
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.25.1>
@@ -1284,7 +1284,7 @@ test:do_test(
       WHERE c=5005
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
          OR ((a BETWEEN 36 AND 38) AND a!=37)
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.25.2>
@@ -1298,9 +1298,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=33
   ]])
     end, {
@@ -1315,9 +1315,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=33
   ]])
     end, {
@@ -1361,8 +1361,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE c=18018
          OR a=94
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=1012
          OR a=3
          OR d>1e10
@@ -1382,8 +1382,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE c=18018
          OR a=94
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=1012
          OR a=3
          OR d>1e10
@@ -1405,11 +1405,11 @@ test:do_test(
          OR c=11011
          OR b=297
          OR a=63
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR a=76
          OR b=1026
          OR a=26
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR c=30030
   ]])
     end, {
@@ -1427,11 +1427,11 @@ test:do_test(
          OR c=11011
          OR b=297
          OR a=63
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR a=76
          OR b=1026
          OR a=26
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR c=30030
   ]])
     end, {
@@ -1449,7 +1449,7 @@ test:do_test(
          OR b=1070
          OR a=59
          OR b=715
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
   ]])
     end, {
         -- <where7-2.30.1>
@@ -1466,7 +1466,7 @@ test:do_test(
          OR b=1070
          OR a=59
          OR b=715
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
   ]])
     end, {
         -- <where7-2.30.2>
@@ -1479,13 +1479,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=1056
          OR b=1012
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR ((a BETWEEN 67 AND 69) AND a!=68)
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
   ]])
     end, {
         -- <where7-2.31.1>
@@ -1498,13 +1498,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=1056
          OR b=1012
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR ((a BETWEEN 67 AND 69) AND a!=68)
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
   ]])
     end, {
         -- <where7-2.31.2>
@@ -1518,7 +1518,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='rstuvwxyz'
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 90 AND 92) AND a!=91)
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
   ]])
@@ -1534,7 +1534,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='rstuvwxyz'
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 90 AND 92) AND a!=91)
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
   ]])
@@ -1549,13 +1549,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
+      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR c=12012
          OR a=18
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
   ]])
     end, {
         -- <where7-2.33.1>
@@ -1568,13 +1568,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
+      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR c=12012
          OR a=18
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
   ]])
     end, {
         -- <where7-2.33.2>
@@ -1622,7 +1622,7 @@ test:do_test(
          OR ((a BETWEEN 67 AND 69) AND a!=68)
          OR c=33033
          OR b=11
-         OR (g='wvutsrq' AND f GLOB 'lmnop*')
+         OR (g='wvutsrq' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 7 AND 9) AND a!=8)
   ]])
     end, {
@@ -1643,7 +1643,7 @@ test:do_test(
          OR ((a BETWEEN 67 AND 69) AND a!=68)
          OR c=33033
          OR b=11
-         OR (g='wvutsrq' AND f GLOB 'lmnop*')
+         OR (g='wvutsrq' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 7 AND 9) AND a!=8)
   ]])
     end, {
@@ -1719,7 +1719,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=165
          OR b=201
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR a=32
   ]])
     end, {
@@ -1735,7 +1735,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=165
          OR b=201
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR a=32
   ]])
     end, {
@@ -1749,8 +1749,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
   ]])
     end, {
         -- <where7-2.39.1>
@@ -1763,8 +1763,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
   ]])
     end, {
         -- <where7-2.39.2>
@@ -1785,8 +1785,8 @@ test:do_test(
          OR a=18
          OR a=34
          OR b=132
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR c=18018
   ]])
     end, {
@@ -1808,8 +1808,8 @@ test:do_test(
          OR a=18
          OR a=34
          OR b=132
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR c=18018
   ]])
     end, {
@@ -1851,13 +1851,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR b=297
          OR b=113
          OR b=176
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
          OR a=67
          OR c=26026
@@ -1873,13 +1873,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR b=297
          OR b=113
          OR b=176
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
          OR a=67
          OR c=26026
@@ -1940,8 +1940,8 @@ test:do_test(
          OR ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=487
          OR b=619
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.44.1>
@@ -1959,8 +1959,8 @@ test:do_test(
          OR ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=487
          OR b=619
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.44.2>
@@ -1980,7 +1980,7 @@ test:do_test(
          OR c=17017
          OR a=82
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR (d>=39.0 AND d<40.0 AND d IS NOT NULL)
   ]])
@@ -2002,7 +2002,7 @@ test:do_test(
          OR c=17017
          OR a=82
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR (d>=39.0 AND d<40.0 AND d IS NOT NULL)
   ]])
@@ -2017,7 +2017,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'bcdef*')
+      WHERE (g='ihgfedc' AND f LIKE 'bcdef%')
          OR c=22022
   ]])
     end, {
@@ -2031,7 +2031,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'bcdef*')
+      WHERE (g='ihgfedc' AND f LIKE 'bcdef%')
          OR c=22022
   ]])
     end, {
@@ -2048,7 +2048,7 @@ test:do_test(
       WHERE c=7007
          OR b=91
          OR b=212
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR c=28028
          OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
   ]])
@@ -2066,7 +2066,7 @@ test:do_test(
       WHERE c=7007
          OR b=91
          OR b=212
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR c=28028
          OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
   ]])
@@ -2111,9 +2111,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR ((a BETWEEN 0 AND 2) AND a!=1)
          OR c=4004
          OR b=322
@@ -2131,9 +2131,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR ((a BETWEEN 0 AND 2) AND a!=1)
          OR c=4004
          OR b=322
@@ -2156,8 +2156,8 @@ test:do_test(
          OR a=46
          OR b=660
          OR (d>=41.0 AND d<42.0 AND d IS NOT NULL)
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR b=355
          OR a=93
          OR b=297
@@ -2178,8 +2178,8 @@ test:do_test(
          OR a=46
          OR b=660
          OR (d>=41.0 AND d<42.0 AND d IS NOT NULL)
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR b=355
          OR a=93
          OR b=297
@@ -2197,7 +2197,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=190
          OR a=62
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.51.1>
@@ -2212,7 +2212,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=190
          OR a=62
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.51.2>
@@ -2306,7 +2306,7 @@ test:do_test(
          OR b=256
          OR a=72
          OR c>=34035
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=674
          OR a=22
   ]])
@@ -2328,7 +2328,7 @@ test:do_test(
          OR b=256
          OR a=72
          OR c>=34035
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=674
          OR a=22
   ]])
@@ -2381,9 +2381,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 96 AND 98) AND a!=97)
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.56.1>
@@ -2396,9 +2396,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 96 AND 98) AND a!=97)
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.56.2>
@@ -2413,7 +2413,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=748
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
          OR b=630
   ]])
@@ -2430,7 +2430,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=748
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
          OR b=630
   ]])
@@ -2521,7 +2521,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=979
          OR ((a BETWEEN 3 AND 5) AND a!=4)
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.60.1>
@@ -2536,7 +2536,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=979
          OR ((a BETWEEN 3 AND 5) AND a!=4)
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.60.2>
@@ -2555,7 +2555,7 @@ test:do_test(
          OR b=726
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR ((a BETWEEN 50 AND 52) AND a!=51)
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
   ]])
     end, {
@@ -2575,7 +2575,7 @@ test:do_test(
          OR b=726
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR ((a BETWEEN 50 AND 52) AND a!=51)
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
   ]])
     end, {
@@ -2593,10 +2593,10 @@ test:do_test(
          OR ((a BETWEEN 18 AND 20) AND a!=19)
          OR b=924
          OR c=11011
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR b=231
          OR b=872
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.62.1>
@@ -2613,10 +2613,10 @@ test:do_test(
          OR ((a BETWEEN 18 AND 20) AND a!=19)
          OR b=924
          OR c=11011
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR b=231
          OR b=872
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.62.2>
@@ -2631,8 +2631,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=24
          OR b=473
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR b=509
          OR b=924
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
@@ -2650,8 +2650,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=24
          OR b=473
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR b=509
          OR b=924
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
@@ -2668,11 +2668,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=93.0 AND d<94.0 AND d IS NOT NULL)
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=363
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR ((a BETWEEN 56 AND 58) AND a!=57)
   ]])
@@ -2688,11 +2688,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=93.0 AND d<94.0 AND d IS NOT NULL)
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=363
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR ((a BETWEEN 56 AND 58) AND a!=57)
   ]])
@@ -2711,9 +2711,9 @@ test:do_test(
          OR e IS NULL
          OR b=495
          OR 1000000<b
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR a=45
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR a=85
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
   ]])
@@ -2732,9 +2732,9 @@ test:do_test(
          OR e IS NULL
          OR b=495
          OR 1000000<b
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR a=45
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR a=85
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
   ]])
@@ -2781,9 +2781,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE c>=34035
          OR ((a BETWEEN 96 AND 98) AND a!=97)
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR (d>=27.0 AND d<28.0 AND d IS NOT NULL)
          OR a=91
   ]])
@@ -2800,9 +2800,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE c>=34035
          OR ((a BETWEEN 96 AND 98) AND a!=97)
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR (d>=27.0 AND d<28.0 AND d IS NOT NULL)
          OR a=91
   ]])
@@ -2817,9 +2817,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
+      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR b=649
          OR b=231
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
@@ -2837,9 +2837,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
+      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR b=649
          OR b=231
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
@@ -2918,11 +2918,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=65
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR c=22022
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR b=671
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR a=91
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
          OR ((a BETWEEN 47 AND 49) AND a!=48)
@@ -2941,11 +2941,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=65
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR c=22022
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR b=671
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR a=91
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
          OR ((a BETWEEN 47 AND 49) AND a!=48)
@@ -2995,7 +2995,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=11.0 AND d<12.0 AND d IS NOT NULL)
          OR a=14
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
          OR b=212
@@ -3014,7 +3014,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=11.0 AND d<12.0 AND d IS NOT NULL)
          OR a=14
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
          OR b=212
@@ -3031,11 +3031,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'bcdef*')
+      WHERE (g='ihgfedc' AND f LIKE 'bcdef%')
          OR b=168
          OR b=25
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.74.1>
@@ -3048,11 +3048,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'bcdef*')
+      WHERE (g='ihgfedc' AND f LIKE 'bcdef%')
          OR b=168
          OR b=25
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.74.2>
@@ -3098,10 +3098,10 @@ test:do_test(
       WHERE c=31031
          OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
          OR ((a BETWEEN 87 AND 89) AND a!=88)
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR a=49
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.76.1>
@@ -3117,10 +3117,10 @@ test:do_test(
       WHERE c=31031
          OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
          OR ((a BETWEEN 87 AND 89) AND a!=88)
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR a=49
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.76.2>
@@ -3170,7 +3170,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=85.0 AND d<86.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 30 AND 32) AND a!=31)
          OR b=1089
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
@@ -3187,7 +3187,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=85.0 AND d<86.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 30 AND 32) AND a!=31)
          OR b=1089
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
@@ -3205,8 +3205,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=399
          OR ((a BETWEEN 9 AND 11) AND a!=10)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR a=10
          OR b=1026
   ]])
@@ -3223,8 +3223,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=399
          OR ((a BETWEEN 9 AND 11) AND a!=10)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR a=10
          OR b=1026
   ]])
@@ -3239,11 +3239,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'yzabc*')
+      WHERE (g='jihgfed' AND f LIKE 'yzabc%')
          OR b=465
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.80.1>
@@ -3256,11 +3256,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'yzabc*')
+      WHERE (g='jihgfed' AND f LIKE 'yzabc%')
          OR b=465
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.80.2>
@@ -3275,7 +3275,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=25
          OR b=792
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
   ]])
     end, {
         -- <where7-2.81.1>
@@ -3290,7 +3290,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=25
          OR b=792
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
   ]])
     end, {
         -- <where7-2.81.2>
@@ -3308,10 +3308,10 @@ test:do_test(
          OR a=13
          OR a=15
          OR ((a BETWEEN 6 AND 8) AND a!=7)
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR a=27
          OR ((a BETWEEN 98 AND 100) AND a!=99)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR a=32
          OR a=39
   ]])
@@ -3331,10 +3331,10 @@ test:do_test(
          OR a=13
          OR a=15
          OR ((a BETWEEN 6 AND 8) AND a!=7)
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR a=27
          OR ((a BETWEEN 98 AND 100) AND a!=99)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR a=32
          OR a=39
   ]])
@@ -3350,14 +3350,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='hijklmnop'
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR ((a BETWEEN 77 AND 79) AND a!=78)
          OR b=528
          OR c=30030
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.83.1>
@@ -3371,14 +3371,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='hijklmnop'
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR ((a BETWEEN 77 AND 79) AND a!=78)
          OR b=528
          OR c=30030
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.83.2>
@@ -3425,11 +3425,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'pqrst*')
+      WHERE (g='lkjihgf' AND f LIKE 'pqrst%')
          OR b=748
          OR b=696
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
   ]])
     end, {
         -- <where7-2.85.1>
@@ -3442,11 +3442,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'pqrst*')
+      WHERE (g='lkjihgf' AND f LIKE 'pqrst%')
          OR b=748
          OR b=696
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
   ]])
     end, {
         -- <where7-2.85.2>
@@ -3460,10 +3460,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 71 AND 73) AND a!=72)
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR a=87
          OR a=80
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=784
          OR a=49
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -3480,10 +3480,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 71 AND 73) AND a!=72)
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR a=87
          OR a=80
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=784
          OR a=49
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -3500,13 +3500,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 14 AND 16) AND a!=15)
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR c=1001
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR c=33033
   ]])
     end, {
@@ -3521,13 +3521,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 14 AND 16) AND a!=15)
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR c=1001
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR c=33033
   ]])
     end, {
@@ -3611,13 +3611,13 @@ test:do_test(
          OR b=553
          OR a=64
          OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR a=62
          OR b=1081
          OR b=770
          OR b=762
          OR b=803
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.90.1>
@@ -3634,13 +3634,13 @@ test:do_test(
          OR b=553
          OR a=64
          OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR a=62
          OR b=1081
          OR b=770
          OR b=762
          OR b=803
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.90.2>
@@ -3653,8 +3653,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'klmno*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (g='wvutsrq' AND f LIKE 'klmno%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR c=17017
          OR b=168
          OR ((a BETWEEN 77 AND 79) AND a!=78)
@@ -3670,8 +3670,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'klmno*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (g='wvutsrq' AND f LIKE 'klmno%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR c=17017
          OR b=168
          OR ((a BETWEEN 77 AND 79) AND a!=78)
@@ -3690,12 +3690,12 @@ test:do_test(
       WHERE c=34034
          OR (d>=68.0 AND d<69.0 AND d IS NOT NULL)
          OR a=44
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR c=31031
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR b=619
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR ((a BETWEEN 29 AND 31) AND a!=30)
   ]])
     end, {
@@ -3712,12 +3712,12 @@ test:do_test(
       WHERE c=34034
          OR (d>=68.0 AND d<69.0 AND d IS NOT NULL)
          OR a=44
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR c=31031
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR b=619
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR ((a BETWEEN 29 AND 31) AND a!=30)
   ]])
     end, {
@@ -3738,10 +3738,10 @@ test:do_test(
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR b=110
          OR f='klmnopqrs'
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR b=674
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.93.1>
@@ -3761,10 +3761,10 @@ test:do_test(
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR b=110
          OR f='klmnopqrs'
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR b=674
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.93.2>
@@ -3882,7 +3882,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=231
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.97.1>
@@ -3896,7 +3896,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=231
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.97.2>
@@ -4057,7 +4057,7 @@ test:do_test(
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR b=630
          OR c=19019
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR a=24
          OR (d>=95.0 AND d<96.0 AND d IS NOT NULL)
          OR ((a BETWEEN 51 AND 53) AND a!=52)
@@ -4077,7 +4077,7 @@ test:do_test(
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR b=630
          OR c=19019
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR a=24
          OR (d>=95.0 AND d<96.0 AND d IS NOT NULL)
          OR ((a BETWEEN 51 AND 53) AND a!=52)
@@ -4128,11 +4128,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='stuvwxyza'
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR ((a BETWEEN 1 AND 3) AND a!=2)
          OR b=1037
          OR f='zabcdefgh'
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.104.1>
@@ -4146,11 +4146,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='stuvwxyza'
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR ((a BETWEEN 1 AND 3) AND a!=2)
          OR b=1037
          OR f='zabcdefgh'
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.104.2>
@@ -4163,7 +4163,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR ((a BETWEEN 30 AND 32) AND a!=31)
   ]])
@@ -4178,7 +4178,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR ((a BETWEEN 30 AND 32) AND a!=31)
   ]])
@@ -4197,8 +4197,8 @@ test:do_test(
          OR b=190
          OR ((a BETWEEN 38 AND 40) AND a!=39)
          OR ((a BETWEEN 70 AND 72) AND a!=71)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR b=704
   ]])
     end, {
@@ -4216,8 +4216,8 @@ test:do_test(
          OR b=190
          OR ((a BETWEEN 38 AND 40) AND a!=39)
          OR ((a BETWEEN 70 AND 72) AND a!=71)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR b=704
   ]])
     end, {
@@ -4234,7 +4234,7 @@ test:do_test(
       WHERE b=88
          OR f='vwxyzabcd'
          OR f='fghijklmn'
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.107.1>
@@ -4250,7 +4250,7 @@ test:do_test(
       WHERE b=88
          OR f='vwxyzabcd'
          OR f='fghijklmn'
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.107.2>
@@ -4296,7 +4296,7 @@ test:do_test(
       WHERE ((a BETWEEN 47 AND 49) AND a!=48)
          OR a=5
          OR b=179
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR a=69
   ]])
     end, {
@@ -4313,7 +4313,7 @@ test:do_test(
       WHERE ((a BETWEEN 47 AND 49) AND a!=48)
          OR a=5
          OR b=179
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR a=69
   ]])
     end, {
@@ -4328,8 +4328,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=971
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR b=828
          OR a=81
          OR ((a BETWEEN 23 AND 25) AND a!=24)
@@ -4350,8 +4350,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=971
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR b=828
          OR a=81
          OR ((a BETWEEN 23 AND 25) AND a!=24)
@@ -4399,8 +4399,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'opqrs*')
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+      WHERE (g='lkjihgf' AND f LIKE 'opqrs%')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
   ]])
     end, {
         -- <where7-2.112.1>
@@ -4413,8 +4413,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'opqrs*')
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+      WHERE (g='lkjihgf' AND f LIKE 'opqrs%')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
   ]])
     end, {
         -- <where7-2.112.2>
@@ -4463,8 +4463,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='vutsrqp' AND f GLOB 'rstuv*')
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='vutsrqp' AND f LIKE 'rstuv%')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=396
   ]])
     end, {
@@ -4478,8 +4478,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='vutsrqp' AND f GLOB 'rstuv*')
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='vutsrqp' AND f LIKE 'rstuv%')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=396
   ]])
     end, {
@@ -4531,7 +4531,7 @@ test:do_test(
          OR ((a BETWEEN 20 AND 22) AND a!=21)
          OR b=396
          OR b=630
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR c=3003
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
   ]])
@@ -4552,7 +4552,7 @@ test:do_test(
          OR ((a BETWEEN 20 AND 22) AND a!=21)
          OR b=396
          OR b=630
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR c=3003
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
   ]])
@@ -4573,8 +4573,8 @@ test:do_test(
          OR b=957
          OR b=311
          OR b=143
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -4594,8 +4594,8 @@ test:do_test(
          OR b=957
          OR b=311
          OR b=143
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -4612,7 +4612,7 @@ test:do_test(
       WHERE ((a BETWEEN 74 AND 76) AND a!=75)
          OR ((a BETWEEN 94 AND 96) AND a!=95)
          OR b=451
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.118.1>
@@ -4628,7 +4628,7 @@ test:do_test(
       WHERE ((a BETWEEN 74 AND 76) AND a!=75)
          OR ((a BETWEEN 94 AND 96) AND a!=95)
          OR b=451
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.118.2>
@@ -4645,11 +4645,11 @@ test:do_test(
          OR b=451
          OR b=363
          OR b=330
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR ((a BETWEEN 52 AND 54) AND a!=53)
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR ((a BETWEEN 81 AND 83) AND a!=82)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.119.1>
@@ -4666,11 +4666,11 @@ test:do_test(
          OR b=451
          OR b=363
          OR b=330
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR ((a BETWEEN 52 AND 54) AND a!=53)
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR ((a BETWEEN 81 AND 83) AND a!=82)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.119.2>
@@ -4683,9 +4683,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR (d>=68.0 AND d<69.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR e IS NULL
          OR b=759
   ]])
@@ -4700,9 +4700,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR (d>=68.0 AND d<69.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR e IS NULL
          OR b=759
   ]])
@@ -4717,9 +4717,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR ((a BETWEEN 19 AND 21) AND a!=20)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.121.1>
@@ -4732,9 +4732,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR ((a BETWEEN 19 AND 21) AND a!=20)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.121.2>
@@ -4815,14 +4815,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'tuvwx*')
+      WHERE (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR b=421
          OR b=429
          OR b=498
          OR b=33
          OR b=198
          OR c=14014
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
   ]])
     end, {
         -- <where7-2.124.1>
@@ -4835,14 +4835,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'tuvwx*')
+      WHERE (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR b=421
          OR b=429
          OR b=498
          OR b=33
          OR b=198
          OR c=14014
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
   ]])
     end, {
         -- <where7-2.124.2>
@@ -4858,13 +4858,13 @@ test:do_test(
       WHERE b=47
          OR c=31031
          OR a=38
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR b=242
          OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
          OR b=352
          OR a=49
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.125.1>
@@ -4880,13 +4880,13 @@ test:do_test(
       WHERE b=47
          OR c=31031
          OR a=38
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR b=242
          OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
          OR b=352
          OR a=49
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.125.2>
@@ -4969,9 +4969,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=528
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.128.1>
@@ -4984,9 +4984,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=528
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.128.2>
@@ -5031,7 +5031,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=71.0 AND d<72.0 AND d IS NOT NULL)
          OR 1000000<b
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR a=24
   ]])
@@ -5048,7 +5048,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=71.0 AND d<72.0 AND d IS NOT NULL)
          OR 1000000<b
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR a=24
   ]])
@@ -5071,8 +5071,8 @@ test:do_test(
          OR a=14
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR b=440
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
   ]])
     end, {
         -- <where7-2.131.1>
@@ -5093,8 +5093,8 @@ test:do_test(
          OR a=14
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR b=440
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
   ]])
     end, {
         -- <where7-2.131.2>
@@ -5226,9 +5226,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=27
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=1045
          OR a=84
          OR f='qrstuvwxy'
@@ -5245,9 +5245,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=27
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=1045
          OR a=84
          OR f='qrstuvwxy'
@@ -5266,7 +5266,7 @@ test:do_test(
       WHERE b=704
          OR b=949
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR c=24024
          OR b=553
          OR a=18
@@ -5286,7 +5286,7 @@ test:do_test(
       WHERE b=704
          OR b=949
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR c=24024
          OR b=553
          OR a=18
@@ -5303,8 +5303,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?cdef*' AND f GLOB 'bcde*')
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (f LIKE '_cdef%' AND f LIKE 'bcde%')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=902
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR b=25
@@ -5323,8 +5323,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?cdef*' AND f GLOB 'bcde*')
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (f LIKE '_cdef%' AND f LIKE 'bcde%')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=902
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR b=25
@@ -5405,8 +5405,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?qrst*' AND f GLOB 'pqrs*')
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+      WHERE (f LIKE '_qrst%' AND f LIKE 'pqrs%')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=641
          OR ((a BETWEEN 36 AND 38) AND a!=37)
   ]])
@@ -5421,8 +5421,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?qrst*' AND f GLOB 'pqrs*')
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+      WHERE (f LIKE '_qrst%' AND f LIKE 'pqrs%')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=641
          OR ((a BETWEEN 36 AND 38) AND a!=37)
   ]])
@@ -5442,9 +5442,9 @@ test:do_test(
          OR ((a BETWEEN 44 AND 46) AND a!=45)
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR b=11
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR a=52
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR a=13
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
   ]])
@@ -5464,9 +5464,9 @@ test:do_test(
          OR ((a BETWEEN 44 AND 46) AND a!=45)
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR b=11
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR a=52
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR a=13
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
   ]])
@@ -5487,7 +5487,7 @@ test:do_test(
          OR b=1045
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR f='uvwxyzabc'
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
   ]])
     end, {
         -- <where7-2.143.1>
@@ -5506,7 +5506,7 @@ test:do_test(
          OR b=1045
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR f='uvwxyzabc'
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
   ]])
     end, {
         -- <where7-2.143.2>
@@ -5562,9 +5562,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=91
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
          OR b=102
@@ -5584,9 +5584,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=91
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
          OR b=102
@@ -5605,8 +5605,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='vutsrqp' AND f GLOB 'opqrs*')
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+      WHERE (g='vutsrqp' AND f LIKE 'opqrs%')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR b=990
          OR a=52
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
@@ -5622,8 +5622,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='vutsrqp' AND f GLOB 'opqrs*')
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+      WHERE (g='vutsrqp' AND f LIKE 'opqrs%')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR b=990
          OR a=52
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
@@ -5683,13 +5683,13 @@ test:do_test(
          OR b=421
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR c=22022
          OR b=825
          OR ((a BETWEEN 17 AND 19) AND a!=18)
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
   ]])
     end, {
         -- <where7-2.148.1>
@@ -5706,13 +5706,13 @@ test:do_test(
          OR b=421
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR c=22022
          OR b=825
          OR ((a BETWEEN 17 AND 19) AND a!=18)
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
   ]])
     end, {
         -- <where7-2.148.2>
@@ -5729,7 +5729,7 @@ test:do_test(
          OR b=484
          OR b=1026
          OR a=90
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=608
          OR a=32
   ]])
@@ -5748,7 +5748,7 @@ test:do_test(
          OR b=484
          OR b=1026
          OR a=90
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=608
          OR a=32
   ]])
@@ -5771,7 +5771,7 @@ test:do_test(
          OR a=55
          OR b=773
          OR b=319
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.150.1>
@@ -5792,7 +5792,7 @@ test:do_test(
          OR a=55
          OR b=773
          OR b=319
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.150.2>
@@ -5805,7 +5805,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'ijklm*')
+      WHERE (g='wvutsrq' AND f LIKE 'ijklm%')
          OR f='mnopqrstu'
          OR a=62
   ]])
@@ -5820,7 +5820,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'ijklm*')
+      WHERE (g='wvutsrq' AND f LIKE 'ijklm%')
          OR f='mnopqrstu'
          OR a=62
   ]])
@@ -5839,9 +5839,9 @@ test:do_test(
          OR b=1045
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR c=13013
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR b=124
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.152.1>
@@ -5858,9 +5858,9 @@ test:do_test(
          OR b=1045
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR c=13013
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR b=124
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.152.2>
@@ -5880,7 +5880,7 @@ test:do_test(
          OR b=421
          OR b=803
          OR c=4004
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
   ]])
     end, {
         -- <where7-2.153.1>
@@ -5900,7 +5900,7 @@ test:do_test(
          OR b=421
          OR b=803
          OR c=4004
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
   ]])
     end, {
         -- <where7-2.153.2>
@@ -5913,9 +5913,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
+      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR b=99
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.154.1>
@@ -5928,9 +5928,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
+      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR b=99
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.154.2>
@@ -5972,9 +5972,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=795
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR f='jklmnopqr'
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR b=1056
   ]])
@@ -5990,9 +5990,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=795
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR f='jklmnopqr'
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR b=1056
   ]])
@@ -6146,7 +6146,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=23
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=641
          OR b=352
          OR b=179
@@ -6166,7 +6166,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=23
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=641
          OR b=352
          OR b=179
@@ -6189,7 +6189,7 @@ test:do_test(
          OR b=1078
          OR ((a BETWEEN 11 AND 13) AND a!=12)
          OR c=12012
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR b=319
          OR c=5005
          OR 1000000<b
@@ -6211,7 +6211,7 @@ test:do_test(
          OR b=1078
          OR ((a BETWEEN 11 AND 13) AND a!=12)
          OR c=12012
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR b=319
          OR c=5005
          OR 1000000<b
@@ -6230,8 +6230,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='cdefghijk'
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -6246,8 +6246,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='cdefghijk'
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -6297,13 +6297,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=891
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR b=484
          OR a=62
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.165.1>
@@ -6316,13 +6316,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=891
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR b=484
          OR a=62
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.165.2>
@@ -6336,11 +6336,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=363
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR a=39
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
   ]])
@@ -6356,11 +6356,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=363
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR a=39
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
   ]])
@@ -6378,7 +6378,7 @@ test:do_test(
       WHERE c=30030
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR b=850
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
   ]])
     end, {
         -- <where7-2.167.1>
@@ -6394,7 +6394,7 @@ test:do_test(
       WHERE c=30030
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR b=850
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
   ]])
     end, {
         -- <where7-2.167.2>
@@ -6540,7 +6540,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=333
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
          OR b=407
          OR a=5
@@ -6559,7 +6559,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=333
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
          OR b=407
          OR a=5
@@ -6580,7 +6580,7 @@ test:do_test(
       WHERE b<0
          OR b=352
          OR b=517
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 12 AND 14) AND a!=13)
          OR b=1012
          OR ((a BETWEEN 11 AND 13) AND a!=12)
@@ -6599,7 +6599,7 @@ test:do_test(
       WHERE b<0
          OR b=352
          OR b=517
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 12 AND 14) AND a!=13)
          OR b=1012
          OR ((a BETWEEN 11 AND 13) AND a!=12)
@@ -6615,11 +6615,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
          OR c<=10
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR a=32
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR d<0.0
   ]])
     end, {
@@ -6633,11 +6633,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
          OR c<=10
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR a=32
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR d<0.0
   ]])
     end, {
@@ -6653,9 +6653,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 20 AND 22) AND a!=21)
          OR b=1045
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR a=26
-         OR (g='gfedcba' AND f GLOB 'opqrs*')
+         OR (g='gfedcba' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.175.1>
@@ -6670,9 +6670,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 20 AND 22) AND a!=21)
          OR b=1045
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR a=26
-         OR (g='gfedcba' AND f GLOB 'opqrs*')
+         OR (g='gfedcba' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.175.2>
@@ -6714,7 +6714,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=3.0 AND d<4.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR c=32032
          OR b=289
          OR ((a BETWEEN 17 AND 19) AND a!=18)
@@ -6732,7 +6732,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=3.0 AND d<4.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR c=32032
          OR b=289
          OR ((a BETWEEN 17 AND 19) AND a!=18)
@@ -6752,7 +6752,7 @@ test:do_test(
       WHERE ((a BETWEEN 15 AND 17) AND a!=16)
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR b=33
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
   ]])
     end, {
         -- <where7-2.178.1>
@@ -6768,7 +6768,7 @@ test:do_test(
       WHERE ((a BETWEEN 15 AND 17) AND a!=16)
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR b=33
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
   ]])
     end, {
         -- <where7-2.178.2>
@@ -6783,15 +6783,15 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=828
          OR b=341
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR b=902
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=242
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.179.1>
@@ -6806,15 +6806,15 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=828
          OR b=341
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR b=902
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=242
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.179.2>
@@ -6827,7 +6827,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'efghi*')
+      WHERE (g='nmlkjih' AND f LIKE 'efghi%')
          OR b=982
          OR b=781
          OR ((a BETWEEN 66 AND 68) AND a!=67)
@@ -6845,7 +6845,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'efghi*')
+      WHERE (g='nmlkjih' AND f LIKE 'efghi%')
          OR b=982
          OR b=781
          OR ((a BETWEEN 66 AND 68) AND a!=67)
@@ -6863,13 +6863,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
          OR a=31
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR a=76
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=176
   ]])
     end, {
@@ -6883,13 +6883,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
          OR a=31
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR a=76
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=176
   ]])
     end, {
@@ -6903,11 +6903,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ponmlkj' AND f GLOB 'vwxyz*')
+      WHERE (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=14
          OR ((a BETWEEN 88 AND 90) AND a!=89)
          OR f='zabcdefgh'
@@ -6923,11 +6923,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ponmlkj' AND f GLOB 'vwxyz*')
+      WHERE (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=14
          OR ((a BETWEEN 88 AND 90) AND a!=89)
          OR f='zabcdefgh'
@@ -6943,7 +6943,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR b=286
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
          OR b=91
@@ -6960,7 +6960,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR b=286
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
          OR b=91
@@ -6977,9 +6977,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'nopqr*')
+      WHERE (g='lkjihgf' AND f LIKE 'nopqr%')
          OR c=19019
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR b=374
   ]])
     end, {
@@ -6993,9 +6993,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'nopqr*')
+      WHERE (g='lkjihgf' AND f LIKE 'nopqr%')
          OR c=19019
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR b=374
   ]])
     end, {
@@ -7010,7 +7010,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE g IS NULL
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.185.1>
@@ -7024,7 +7024,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE g IS NULL
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.185.2>
@@ -7067,10 +7067,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=564
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=234
          OR b=641
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
          OR a=98
@@ -7088,10 +7088,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=564
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=234
          OR b=641
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
          OR a=98
@@ -7111,12 +7111,12 @@ test:do_test(
          OR b=44
          OR b=539
          OR c=11011
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=69
          OR b=1001
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR ((a BETWEEN 32 AND 34) AND a!=33)
   ]])
     end, {
@@ -7134,12 +7134,12 @@ test:do_test(
          OR b=44
          OR b=539
          OR c=11011
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=69
          OR b=1001
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR ((a BETWEEN 32 AND 34) AND a!=33)
   ]])
     end, {
@@ -7224,7 +7224,7 @@ test:do_test(
       WHERE c=23023
          OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
          OR a=66
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR a=51
          OR a=23
          OR c=4004
@@ -7243,7 +7243,7 @@ test:do_test(
       WHERE c=23023
          OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
          OR a=66
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR a=51
          OR a=23
          OR c=4004
@@ -7260,7 +7260,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=36
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR a=80
   ]])
     end, {
@@ -7275,7 +7275,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=36
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR a=80
   ]])
     end, {
@@ -7289,7 +7289,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+      WHERE (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR ((a BETWEEN 37 AND 39) AND a!=38)
          OR a=55
          OR f='efghijklm'
@@ -7310,7 +7310,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+      WHERE (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR ((a BETWEEN 37 AND 39) AND a!=38)
          OR a=55
          OR f='efghijklm'
@@ -7333,11 +7333,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=87.0 AND d<88.0 AND d IS NOT NULL)
          OR b=836
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=91
          OR b=594
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.194.1>
@@ -7352,11 +7352,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=87.0 AND d<88.0 AND d IS NOT NULL)
          OR b=836
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=91
          OR b=594
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.194.2>
@@ -7369,8 +7369,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'yzabc*')
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+      WHERE (g='tsrqpon' AND f LIKE 'yzabc%')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 62 AND 64) AND a!=63)
          OR c=6006
          OR ((a BETWEEN 50 AND 52) AND a!=51)
@@ -7389,8 +7389,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'yzabc*')
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+      WHERE (g='tsrqpon' AND f LIKE 'yzabc%')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 62 AND 64) AND a!=63)
          OR c=6006
          OR ((a BETWEEN 50 AND 52) AND a!=51)
@@ -7415,10 +7415,10 @@ test:do_test(
          OR b=121
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR ((a BETWEEN 12 AND 14) AND a!=13)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR b=660
          OR b=792
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.196.1>
@@ -7437,10 +7437,10 @@ test:do_test(
          OR b=121
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR ((a BETWEEN 12 AND 14) AND a!=13)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR b=660
          OR b=792
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.196.2>
@@ -7456,10 +7456,10 @@ test:do_test(
       WHERE b=1089
          OR b=495
          OR b=157
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR f='wxyzabcde'
   ]])
@@ -7477,10 +7477,10 @@ test:do_test(
       WHERE b=1089
          OR b=495
          OR b=157
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR f='wxyzabcde'
   ]])
@@ -7497,7 +7497,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE f='bcdefghij'
          OR ((a BETWEEN 40 AND 42) AND a!=41)
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR b=157
          OR b=267
          OR c=34034
@@ -7515,7 +7515,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE f='bcdefghij'
          OR ((a BETWEEN 40 AND 42) AND a!=41)
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR b=157
          OR b=267
          OR c=34034
@@ -7534,7 +7534,7 @@ test:do_test(
       WHERE a=19
          OR a=23
          OR c<=10
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.199.1>
@@ -7550,7 +7550,7 @@ test:do_test(
       WHERE a=19
          OR a=23
          OR c<=10
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.199.2>
@@ -7567,7 +7567,7 @@ test:do_test(
          OR b=792
          OR b=803
          OR b=36
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
   ]])
     end, {
         -- <where7-2.200.1>
@@ -7584,7 +7584,7 @@ test:do_test(
          OR b=792
          OR b=803
          OR b=36
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
   ]])
     end, {
         -- <where7-2.200.2>
@@ -7597,11 +7597,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'uvwxy*')
+      WHERE (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR ((a BETWEEN 76 AND 78) AND a!=77)
          OR f='jklmnopqr'
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
          OR b=891
          OR a=40
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
@@ -7617,11 +7617,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'uvwxy*')
+      WHERE (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR ((a BETWEEN 76 AND 78) AND a!=77)
          OR f='jklmnopqr'
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
          OR b=891
          OR a=40
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
@@ -7644,7 +7644,7 @@ test:do_test(
          OR d>1e10
          OR b=429
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
          OR c=10010
          OR ((a BETWEEN 83 AND 85) AND a!=84)
   ]])
@@ -7666,7 +7666,7 @@ test:do_test(
          OR d>1e10
          OR b=429
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
          OR c=10010
          OR ((a BETWEEN 83 AND 85) AND a!=84)
   ]])
@@ -7681,14 +7681,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'defgh*')
+      WHERE (g='xwvutsr' AND f LIKE 'defgh%')
          OR a=22
          OR a=26
          OR a=81
          OR a=53
          OR ((a BETWEEN 92 AND 94) AND a!=93)
          OR c=30030
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=82
          OR b=594
   ]])
@@ -7703,14 +7703,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'defgh*')
+      WHERE (g='xwvutsr' AND f LIKE 'defgh%')
          OR a=22
          OR a=26
          OR a=81
          OR a=53
          OR ((a BETWEEN 92 AND 94) AND a!=93)
          OR c=30030
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=82
          OR b=594
   ]])
@@ -7727,14 +7727,14 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 34 AND 36) AND a!=35)
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR a=83
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR ((a BETWEEN 99 AND 101) AND a!=100)
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=1092
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR b=25
   ]])
     end, {
@@ -7750,14 +7750,14 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 34 AND 36) AND a!=35)
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR a=83
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR ((a BETWEEN 99 AND 101) AND a!=100)
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=1092
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR b=25
   ]])
     end, {
@@ -7773,9 +7773,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=20
          OR b=421
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR a=50
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -7791,9 +7791,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=20
          OR b=421
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR a=50
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -7808,7 +7808,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=960
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
   ]])
     end, {
         -- <where7-2.206.1>
@@ -7822,7 +7822,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=960
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
   ]])
     end, {
         -- <where7-2.206.2>
@@ -7899,7 +7899,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
+      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=957
          OR ((a BETWEEN 48 AND 50) AND a!=49)
   ]])
@@ -7914,7 +7914,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
+      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=957
          OR ((a BETWEEN 48 AND 50) AND a!=49)
   ]])
@@ -7961,7 +7961,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=66.0 AND d<67.0 AND d IS NOT NULL)
          OR b=11
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 14 AND 16) AND a!=15)
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR a=99
@@ -7979,7 +7979,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=66.0 AND d<67.0 AND d IS NOT NULL)
          OR b=11
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 14 AND 16) AND a!=15)
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR a=99
@@ -7997,12 +7997,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE f='fghijklmn'
          OR a=16
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR ((a BETWEEN 60 AND 62) AND a!=61)
          OR ((a BETWEEN 90 AND 92) AND a!=91)
          OR ((a BETWEEN 9 AND 11) AND a!=10)
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=80
   ]])
     end, {
@@ -8018,12 +8018,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE f='fghijklmn'
          OR a=16
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR ((a BETWEEN 60 AND 62) AND a!=61)
          OR ((a BETWEEN 90 AND 92) AND a!=91)
          OR ((a BETWEEN 9 AND 11) AND a!=10)
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=80
   ]])
     end, {
@@ -8037,10 +8037,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
+      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
          OR a=44
          OR a=43
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
          OR b=25
   ]])
     end, {
@@ -8054,10 +8054,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
+      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
          OR a=44
          OR a=43
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
          OR b=25
   ]])
     end, {
@@ -8134,10 +8134,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=3.0 AND d<4.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'opqrs*')
+         OR (g='gfedcba' AND f LIKE 'opqrs%')
          OR b=1015
          OR c=16016
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR f='abcdefghi'
          OR b=605
          OR a=63
@@ -8154,10 +8154,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=3.0 AND d<4.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'opqrs*')
+         OR (g='gfedcba' AND f LIKE 'opqrs%')
          OR b=1015
          OR c=16016
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR f='abcdefghi'
          OR b=605
          OR a=63
@@ -8173,7 +8173,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='yxwvuts' AND f GLOB 'bcdef*')
+      WHERE (g='yxwvuts' AND f LIKE 'bcdef%')
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR b=641
          OR b=795
@@ -8189,7 +8189,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='yxwvuts' AND f GLOB 'bcdef*')
+      WHERE (g='yxwvuts' AND f LIKE 'bcdef%')
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR b=641
          OR b=795
@@ -8281,7 +8281,7 @@ test:do_test(
          OR b=1089
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR f IS NULL
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
   ]])
     end, {
         -- <where7-2.220.1>
@@ -8302,7 +8302,7 @@ test:do_test(
          OR b=1089
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR f IS NULL
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
   ]])
     end, {
         -- <where7-2.220.2>
@@ -8317,15 +8317,15 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1026
          OR b=407
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR b=564
          OR c=23023
          OR b=891
          OR c=22022
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR ((a BETWEEN 9 AND 11) AND a!=10)
-         OR (g='rqponml' AND f GLOB 'ijklm*')
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.221.1>
@@ -8340,15 +8340,15 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1026
          OR b=407
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR b=564
          OR c=23023
          OR b=891
          OR c=22022
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR ((a BETWEEN 9 AND 11) AND a!=10)
-         OR (g='rqponml' AND f GLOB 'ijklm*')
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.221.2>
@@ -8395,7 +8395,7 @@ test:do_test(
          OR ((a BETWEEN 79 AND 81) AND a!=80)
          OR c=18018
          OR b=792
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
@@ -8417,7 +8417,7 @@ test:do_test(
          OR ((a BETWEEN 79 AND 81) AND a!=80)
          OR c=18018
          OR b=792
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
@@ -8437,10 +8437,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=429
          OR (d>=33.0 AND d<34.0 AND d IS NOT NULL)
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR b=1070
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.224.1>
@@ -8455,10 +8455,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=429
          OR (d>=33.0 AND d<34.0 AND d IS NOT NULL)
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR b=1070
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.224.2>
@@ -8471,7 +8471,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
+      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=572
   ]])
     end, {
@@ -8485,7 +8485,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
+      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=572
   ]])
     end, {
@@ -8501,7 +8501,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 62 AND 64) AND a!=63)
          OR f='abcdefghi'
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.226.1>
@@ -8516,7 +8516,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 62 AND 64) AND a!=63)
          OR f='abcdefghi'
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.226.2>
@@ -8562,7 +8562,7 @@ test:do_test(
          OR a=1
          OR ((a BETWEEN 75 AND 77) AND a!=76)
          OR a=75
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
   ]])
     end, {
@@ -8581,7 +8581,7 @@ test:do_test(
          OR a=1
          OR ((a BETWEEN 75 AND 77) AND a!=76)
          OR a=75
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
   ]])
     end, {
@@ -8595,9 +8595,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR b=231
          OR a=87
   ]])
@@ -8612,9 +8612,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR b=231
          OR a=87
   ]])
@@ -8630,8 +8630,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=77
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR c=24024
          OR c=5005
   ]])
@@ -8647,8 +8647,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=77
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR c=24024
          OR c=5005
   ]])
@@ -8663,13 +8663,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='mlkjihg' AND f GLOB 'ijklm*')
+      WHERE (g='mlkjihg' AND f LIKE 'ijklm%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR b=682
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -8683,13 +8683,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='mlkjihg' AND f GLOB 'ijklm*')
+      WHERE (g='mlkjihg' AND f LIKE 'ijklm%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR b=682
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -8707,7 +8707,7 @@ test:do_test(
          OR b=121
          OR c=2002
          OR ((a BETWEEN 84 AND 86) AND a!=85)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.232.1>
@@ -8724,7 +8724,7 @@ test:do_test(
          OR b=121
          OR c=2002
          OR ((a BETWEEN 84 AND 86) AND a!=85)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.232.2>
@@ -8740,8 +8740,8 @@ test:do_test(
       WHERE (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR f='abcdefghi'
          OR b=267
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR a=82
          OR a=54
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
@@ -8761,8 +8761,8 @@ test:do_test(
       WHERE (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR f='abcdefghi'
          OR b=267
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR a=82
          OR a=54
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
@@ -8815,9 +8815,9 @@ test:do_test(
          OR ((a BETWEEN 31 AND 33) AND a!=32)
          OR (d>=94.0 AND d<95.0 AND d IS NOT NULL)
          OR 1000000<b
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
   ]])
     end, {
         -- <where7-2.235.1>
@@ -8836,9 +8836,9 @@ test:do_test(
          OR ((a BETWEEN 31 AND 33) AND a!=32)
          OR (d>=94.0 AND d<95.0 AND d IS NOT NULL)
          OR 1000000<b
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
   ]])
     end, {
         -- <where7-2.235.2>
@@ -8853,7 +8853,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1001
          OR b=168
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -8869,7 +8869,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1001
          OR b=168
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -8884,8 +8884,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=51
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR b=330
   ]])
     end, {
@@ -8900,8 +8900,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=51
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR b=330
   ]])
     end, {
@@ -8915,13 +8915,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
+      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=704
          OR a=62
          OR f='pqrstuvwx'
          OR b=495
          OR c=26026
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b<0
          OR b=597
   ]])
@@ -8936,13 +8936,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
+      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=704
          OR a=62
          OR f='pqrstuvwx'
          OR b=495
          OR c=26026
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b<0
          OR b=597
   ]])
@@ -8992,7 +8992,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=14014
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=572
          OR c=15015
   ]])
@@ -9008,7 +9008,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=14014
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=572
          OR c=15015
   ]])
@@ -9023,9 +9023,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR b=850
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 15 AND 17) AND a!=16)
          OR b=88
          OR f='hijklmnop'
@@ -9044,9 +9044,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR b=850
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 15 AND 17) AND a!=16)
          OR b=88
          OR f='hijklmnop'
@@ -9073,8 +9073,8 @@ test:do_test(
          OR b=374
          OR b=938
          OR b=773
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.242.1>
@@ -9095,8 +9095,8 @@ test:do_test(
          OR b=374
          OR b=938
          OR b=773
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.242.2>
@@ -9109,7 +9109,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=146
   ]])
     end, {
@@ -9123,7 +9123,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=146
   ]])
     end, {
@@ -9171,7 +9171,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR b=399
          OR b=1004
          OR c=16016
@@ -9193,7 +9193,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR b=399
          OR b=1004
          OR c=16016
@@ -9222,8 +9222,8 @@ test:do_test(
          OR b=861
          OR (d>=90.0 AND d<91.0 AND d IS NOT NULL)
          OR b=949
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.246.1>
@@ -9243,8 +9243,8 @@ test:do_test(
          OR b=861
          OR (d>=90.0 AND d<91.0 AND d IS NOT NULL)
          OR b=949
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.246.2>
@@ -9257,7 +9257,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
+      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
          OR a=83
          OR c=26026
          OR a=49
@@ -9276,7 +9276,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
+      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
          OR a=83
          OR c=26026
          OR a=49
@@ -9328,7 +9328,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=451
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
   ]])
     end, {
         -- <where7-2.249.1>
@@ -9342,7 +9342,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=451
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
   ]])
     end, {
         -- <where7-2.249.2>
@@ -9356,7 +9356,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=47
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
   ]])
     end, {
         -- <where7-2.250.1>
@@ -9370,7 +9370,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=47
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
   ]])
     end, {
         -- <where7-2.250.2>
@@ -9384,7 +9384,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1037
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=344
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
@@ -9401,7 +9401,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1037
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=344
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
@@ -9419,7 +9419,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=506
          OR ((a BETWEEN 20 AND 22) AND a!=21)
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR b=429
          OR b=275
   ]])
@@ -9436,7 +9436,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=506
          OR ((a BETWEEN 20 AND 22) AND a!=21)
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR b=429
          OR b=275
   ]])
@@ -9458,7 +9458,7 @@ test:do_test(
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR a=60
          OR b=80
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR b=616
   ]])
     end, {
@@ -9479,7 +9479,7 @@ test:do_test(
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR a=60
          OR b=80
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR b=616
   ]])
     end, {
@@ -9521,13 +9521,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
+      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
          OR a=43
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR b=586
          OR c=17017
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR a=87
          OR b=968
   ]])
@@ -9542,13 +9542,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
+      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
          OR a=43
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR b=586
          OR c=17017
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR a=87
          OR b=968
   ]])
@@ -9597,8 +9597,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='rqponml' AND f GLOB 'jklmn*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+      WHERE (g='rqponml' AND f LIKE 'jklmn%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR c>=34035
          OR b=850
          OR ((a BETWEEN 32 AND 34) AND a!=33)
@@ -9620,8 +9620,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='rqponml' AND f GLOB 'jklmn*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+      WHERE (g='rqponml' AND f LIKE 'jklmn%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR c>=34035
          OR b=850
          OR ((a BETWEEN 32 AND 34) AND a!=33)
@@ -9705,7 +9705,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'nopqr*')
+      WHERE (g='qponmlk' AND f LIKE 'nopqr%')
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=993
   ]])
@@ -9720,7 +9720,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'nopqr*')
+      WHERE (g='qponmlk' AND f LIKE 'nopqr%')
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=993
   ]])
@@ -9739,7 +9739,7 @@ test:do_test(
          OR a=22
          OR b=289
          OR b=795
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR b=242
          OR a=59
          OR b=1045
@@ -9760,7 +9760,7 @@ test:do_test(
          OR a=22
          OR b=289
          OR b=795
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR b=242
          OR a=59
          OR b=1045
@@ -9778,9 +9778,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=245
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR c=3003
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR (d>=33.0 AND d<34.0 AND d IS NOT NULL)
@@ -9798,9 +9798,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=245
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR c=3003
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR (d>=33.0 AND d<34.0 AND d IS NOT NULL)
@@ -9817,15 +9817,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'jklmn*')
+      WHERE (g='hgfedcb' AND f LIKE 'jklmn%')
          OR b=220
          OR b=443
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR a=62
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR b=1023
          OR a=100
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -9839,15 +9839,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'jklmn*')
+      WHERE (g='hgfedcb' AND f LIKE 'jklmn%')
          OR b=220
          OR b=443
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR a=62
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR b=1023
          OR a=100
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -9863,8 +9863,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE c=11011
          OR f='tuvwxyzab'
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.264.1>
@@ -9879,8 +9879,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE c=11011
          OR f='tuvwxyzab'
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.264.2>
@@ -10005,15 +10005,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=443
          OR b=33
          OR b=762
          OR b=575
          OR c=16016
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 41 AND 43) AND a!=42)
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR b=1092
   ]])
     end, {
@@ -10027,15 +10027,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=443
          OR b=33
          OR b=762
          OR b=575
          OR c=16016
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 41 AND 43) AND a!=42)
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR b=1092
   ]])
     end, {
@@ -10051,14 +10051,14 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=806
          OR b=872
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR f='uvwxyzabc'
          OR b=748
          OR b=586
          OR ((a BETWEEN 15 AND 17) AND a!=16)
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR ((a BETWEEN 32 AND 34) AND a!=33)
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR b=891
   ]])
     end, {
@@ -10074,14 +10074,14 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=806
          OR b=872
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR f='uvwxyzabc'
          OR b=748
          OR b=586
          OR ((a BETWEEN 15 AND 17) AND a!=16)
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR ((a BETWEEN 32 AND 34) AND a!=33)
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR b=891
   ]])
     end, {
@@ -10097,8 +10097,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=693
          OR f='fghijklmn'
-         OR (g='rqponml' AND f GLOB 'hijkl*')
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR a=96
   ]])
@@ -10115,8 +10115,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=693
          OR f='fghijklmn'
-         OR (g='rqponml' AND f GLOB 'hijkl*')
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR a=96
   ]])
@@ -10131,7 +10131,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
+      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
          OR b=451
          OR ((a BETWEEN 96 AND 98) AND a!=97)
          OR ((a BETWEEN 97 AND 99) AND a!=98)
@@ -10148,7 +10148,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
+      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
          OR b=451
          OR ((a BETWEEN 96 AND 98) AND a!=97)
          OR ((a BETWEEN 97 AND 99) AND a!=98)
@@ -10165,16 +10165,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'bcdef*')
+      WHERE (g='nmlkjih' AND f LIKE 'bcdef%')
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR a=75
          OR b=960
-         OR (g='tsrqpon' AND f GLOB 'yzabc*')
+         OR (g='tsrqpon' AND f LIKE 'yzabc%')
          OR b=616
          OR b=330
          OR ((a BETWEEN 16 AND 18) AND a!=17)
          OR a=26
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.272.1>
@@ -10187,16 +10187,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'bcdef*')
+      WHERE (g='nmlkjih' AND f LIKE 'bcdef%')
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR a=75
          OR b=960
-         OR (g='tsrqpon' AND f GLOB 'yzabc*')
+         OR (g='tsrqpon' AND f LIKE 'yzabc%')
          OR b=616
          OR b=330
          OR ((a BETWEEN 16 AND 18) AND a!=17)
          OR a=26
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.272.2>
@@ -10210,7 +10210,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=762
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.273.1>
@@ -10224,7 +10224,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=762
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.273.2>
@@ -10310,7 +10310,7 @@ test:do_test(
          OR b=176
          OR ((a BETWEEN 34 AND 36) AND a!=35)
          OR b=220
-         OR (g='tsrqpon' AND f GLOB 'yzabc*')
+         OR (g='tsrqpon' AND f LIKE 'yzabc%')
          OR a=4
   ]])
     end, {
@@ -10329,7 +10329,7 @@ test:do_test(
          OR b=176
          OR ((a BETWEEN 34 AND 36) AND a!=35)
          OR b=220
-         OR (g='tsrqpon' AND f GLOB 'yzabc*')
+         OR (g='tsrqpon' AND f LIKE 'yzabc%')
          OR a=4
   ]])
     end, {
@@ -10344,7 +10344,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=29
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=979
          OR b=275
          OR ((a BETWEEN 56 AND 58) AND a!=57)
@@ -10364,7 +10364,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=29
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=979
          OR b=275
          OR ((a BETWEEN 56 AND 58) AND a!=57)
@@ -10384,11 +10384,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 43 AND 45) AND a!=44)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR f='fghijklmn'
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR a=74
          OR ((a BETWEEN 7 AND 9) AND a!=8)
@@ -10405,11 +10405,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 43 AND 45) AND a!=44)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR f='fghijklmn'
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR a=74
          OR ((a BETWEEN 7 AND 9) AND a!=8)
@@ -10426,10 +10426,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 80 AND 82) AND a!=81)
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
          OR ((a BETWEEN 49 AND 51) AND a!=50)
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.279.1>
@@ -10443,10 +10443,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 80 AND 82) AND a!=81)
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
          OR ((a BETWEEN 49 AND 51) AND a!=50)
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.279.2>
@@ -10495,11 +10495,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR c=23023
          OR b=377
          OR b=858
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.281.1>
@@ -10512,11 +10512,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR c=23023
          OR b=377
          OR b=858
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.281.2>
@@ -10532,13 +10532,13 @@ test:do_test(
       WHERE (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR b=322
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'pqrst*')
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='fedcbaz' AND f LIKE 'pqrst%')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR b=432
          OR b=55
          OR a=53
          OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR b=25
   ]])
     end, {
@@ -10555,13 +10555,13 @@ test:do_test(
       WHERE (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR b=322
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'pqrst*')
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='fedcbaz' AND f LIKE 'pqrst%')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR b=432
          OR b=55
          OR a=53
          OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR b=25
   ]])
     end, {
@@ -10576,7 +10576,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=484
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=616
          OR c=5005
          OR ((a BETWEEN 27 AND 29) AND a!=28)
@@ -10593,7 +10593,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=484
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=616
          OR c=5005
          OR ((a BETWEEN 27 AND 29) AND a!=28)
@@ -10610,11 +10610,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=916
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=1048
          OR c=6006
          OR b=762
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
          OR b=751
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
@@ -10631,11 +10631,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=916
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=1048
          OR c=6006
          OR b=762
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
          OR b=751
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
@@ -10656,7 +10656,7 @@ test:do_test(
          OR b=275
          OR b=396
          OR c=4004
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR b=319
          OR ((a BETWEEN 83 AND 85) AND a!=84)
          OR a=3
@@ -10678,7 +10678,7 @@ test:do_test(
          OR b=275
          OR b=396
          OR c=4004
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR b=319
          OR ((a BETWEEN 83 AND 85) AND a!=84)
          OR a=3
@@ -10695,16 +10695,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'lmnop*')
+      WHERE (g='wvutsrq' AND f LIKE 'lmnop%')
          OR b=718
          OR f='vwxyzabcd'
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR ((a BETWEEN 66 AND 68) AND a!=67)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -10718,16 +10718,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'lmnop*')
+      WHERE (g='wvutsrq' AND f LIKE 'lmnop%')
          OR b=718
          OR f='vwxyzabcd'
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR ((a BETWEEN 66 AND 68) AND a!=67)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -10920,9 +10920,9 @@ test:do_test(
          OR b=231
          OR b=212
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR c=30030
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
   ]])
     end, {
         -- <where7-2.292.1>
@@ -10940,9 +10940,9 @@ test:do_test(
          OR b=231
          OR b=212
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR c=30030
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
   ]])
     end, {
         -- <where7-2.292.2>
@@ -10996,8 +10996,8 @@ test:do_test(
          OR f='vwxyzabcd'
          OR b=762
          OR a=60
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.294.1>
@@ -11015,8 +11015,8 @@ test:do_test(
          OR f='vwxyzabcd'
          OR b=762
          OR a=60
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.294.2>
@@ -11029,14 +11029,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='mlkjihg' AND f GLOB 'ghijk*')
+      WHERE (g='mlkjihg' AND f LIKE 'ghijk%')
          OR a=3
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=498
          OR a=100
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR a=69
   ]])
     end, {
@@ -11050,14 +11050,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='mlkjihg' AND f GLOB 'ghijk*')
+      WHERE (g='mlkjihg' AND f LIKE 'ghijk%')
          OR a=3
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=498
          OR a=100
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR a=69
   ]])
     end, {
@@ -11071,12 +11071,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=300
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
          OR b=58
          OR ((a BETWEEN 55 AND 57) AND a!=56)
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR b=286
          OR b=234
          OR ((a BETWEEN 43 AND 45) AND a!=44)
@@ -11094,12 +11094,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=300
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
          OR b=58
          OR ((a BETWEEN 55 AND 57) AND a!=56)
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR b=286
          OR b=234
          OR ((a BETWEEN 43 AND 45) AND a!=44)
@@ -11121,12 +11121,12 @@ test:do_test(
          OR ((a BETWEEN 72 AND 74) AND a!=73)
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR b=594
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR ((a BETWEEN 37 AND 39) AND a!=38)
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
   ]])
     end, {
@@ -11144,12 +11144,12 @@ test:do_test(
          OR ((a BETWEEN 72 AND 74) AND a!=73)
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR b=594
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR ((a BETWEEN 37 AND 39) AND a!=38)
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
   ]])
     end, {
@@ -11164,8 +11164,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=949
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.298.1>
@@ -11179,8 +11179,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=949
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.298.2>
@@ -11195,13 +11195,13 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=960
          OR a=44
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR a=39
          OR b=828
          OR ((a BETWEEN 3 AND 5) AND a!=4)
          OR d<0.0
          OR b=770
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR b=594
          OR ((a BETWEEN 89 AND 91) AND a!=90)
   ]])
@@ -11218,13 +11218,13 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=960
          OR a=44
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR a=39
          OR b=828
          OR ((a BETWEEN 3 AND 5) AND a!=4)
          OR d<0.0
          OR b=770
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR b=594
          OR ((a BETWEEN 89 AND 91) AND a!=90)
   ]])
@@ -11278,7 +11278,7 @@ test:do_test(
       WHERE b=1081
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=1004
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 29 AND 31) AND a!=30)
          OR b=660
          OR b=957
@@ -11298,7 +11298,7 @@ test:do_test(
       WHERE b=1081
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=1004
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 29 AND 31) AND a!=30)
          OR b=660
          OR b=957
@@ -11320,9 +11320,9 @@ test:do_test(
          OR f='yzabcdefg'
          OR b=880
          OR a=63
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.302.1>
@@ -11340,9 +11340,9 @@ test:do_test(
          OR f='yzabcdefg'
          OR b=880
          OR a=63
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.302.2>
@@ -11357,12 +11357,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=69
          OR b=1103
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR f='wxyzabcde'
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR f='pqrstuvwx'
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR a=59
          OR b=946
   ]])
@@ -11379,12 +11379,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=69
          OR b=1103
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR f='wxyzabcde'
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR f='pqrstuvwx'
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR a=59
          OR b=946
   ]])
@@ -11400,7 +11400,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=47.0 AND d<48.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR a=68
          OR ((a BETWEEN 14 AND 16) AND a!=15)
   ]])
@@ -11416,7 +11416,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=47.0 AND d<48.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR a=68
          OR ((a BETWEEN 14 AND 16) AND a!=15)
   ]])
@@ -11432,7 +11432,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=10.0 AND d<11.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.305.1>
@@ -11446,7 +11446,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=10.0 AND d<11.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.305.2>
@@ -11526,12 +11526,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR c=14014
          OR b=990
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
          OR c=14014
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR b=740
          OR c=3003
   ]])
@@ -11547,12 +11547,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR c=14014
          OR b=990
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
          OR c=14014
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR b=740
          OR c=3003
   ]])
@@ -11640,7 +11640,7 @@ test:do_test(
          OR a=4
          OR b=311
          OR ((a BETWEEN 97 AND 99) AND a!=98)
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR b=396
   ]])
     end, {
@@ -11663,7 +11663,7 @@ test:do_test(
          OR a=4
          OR b=311
          OR ((a BETWEEN 97 AND 99) AND a!=98)
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR b=396
   ]])
     end, {
@@ -11679,7 +11679,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=82
          OR b=333
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR b=99
          OR a=63
          OR a=35
@@ -11698,7 +11698,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=82
          OR b=333
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR b=99
          OR a=63
          OR a=35
@@ -11803,9 +11803,9 @@ test:do_test(
          OR f='hijklmnop'
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR b=817
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
   ]])
@@ -11824,9 +11824,9 @@ test:do_test(
          OR f='hijklmnop'
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR b=817
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
   ]])
@@ -11841,12 +11841,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR b=311
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR a=48
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR c=32032
          OR f='opqrstuvw'
          OR b=300
@@ -11864,12 +11864,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR b=311
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR a=48
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR c=32032
          OR f='opqrstuvw'
          OR b=300
@@ -11889,7 +11889,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=95.0 AND d<96.0 AND d IS NOT NULL)
          OR b=1070
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR a=22
@@ -11912,7 +11912,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=95.0 AND d<96.0 AND d IS NOT NULL)
          OR b=1070
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR a=22
@@ -11934,7 +11934,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=8.0 AND d<9.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR a=21
          OR b=1026
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -11952,7 +11952,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=8.0 AND d<9.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR a=21
          OR b=1026
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -11975,7 +11975,7 @@ test:do_test(
          OR a=29
          OR c=15015
          OR a=87
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.319.1>
@@ -11994,7 +11994,7 @@ test:do_test(
          OR a=29
          OR c=15015
          OR a=87
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.319.2>
@@ -12042,7 +12042,7 @@ test:do_test(
          OR a=91
          OR b=1015
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR ((a BETWEEN 91 AND 93) AND a!=92)
   ]])
     end, {
@@ -12061,7 +12061,7 @@ test:do_test(
          OR a=91
          OR b=1015
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR ((a BETWEEN 91 AND 93) AND a!=92)
   ]])
     end, {
@@ -12076,12 +12076,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=7
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR b=1015
          OR b=839
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR b=410
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR a=71
   ]])
     end, {
@@ -12096,12 +12096,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=7
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR b=1015
          OR b=839
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR b=410
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR a=71
   ]])
     end, {
@@ -12118,12 +12118,12 @@ test:do_test(
       WHERE b=880
          OR b=982
          OR a=52
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR a=24
          OR ((a BETWEEN 47 AND 49) AND a!=48)
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
   ]])
     end, {
         -- <where7-2.323.1>
@@ -12139,12 +12139,12 @@ test:do_test(
       WHERE b=880
          OR b=982
          OR a=52
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR a=24
          OR ((a BETWEEN 47 AND 49) AND a!=48)
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
   ]])
     end, {
         -- <where7-2.323.2>
@@ -12158,9 +12158,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 67 AND 69) AND a!=68)
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
   ]])
     end, {
         -- <where7-2.324.1>
@@ -12174,9 +12174,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 67 AND 69) AND a!=68)
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
   ]])
     end, {
         -- <where7-2.324.2>
@@ -12192,7 +12192,7 @@ test:do_test(
       WHERE f='abcdefghi'
          OR a=5
          OR b=124
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=432
          OR 1000000<b
          OR a=58
@@ -12214,7 +12214,7 @@ test:do_test(
       WHERE f='abcdefghi'
          OR a=5
          OR b=124
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=432
          OR 1000000<b
          OR a=58
@@ -12271,7 +12271,7 @@ test:do_test(
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR ((a BETWEEN 63 AND 65) AND a!=64)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR f='uvwxyzabc'
   ]])
     end, {
@@ -12293,7 +12293,7 @@ test:do_test(
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR ((a BETWEEN 63 AND 65) AND a!=64)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR f='uvwxyzabc'
   ]])
     end, {
@@ -12308,16 +12308,16 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 57 AND 59) AND a!=58)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=564
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR b=77
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
          OR b=968
          OR b=847
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.328.1>
@@ -12331,16 +12331,16 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 57 AND 59) AND a!=58)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=564
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR b=77
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
          OR b=968
          OR b=847
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.328.2>
@@ -12421,7 +12421,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=72.0 AND d<73.0 AND d IS NOT NULL)
          OR b=693
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR b=968
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR b=132
@@ -12441,7 +12441,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=72.0 AND d<73.0 AND d IS NOT NULL)
          OR b=693
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR b=968
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR b=132
@@ -12496,11 +12496,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=190
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR b=924
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR b=759
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.333.1>
@@ -12514,11 +12514,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=190
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR b=924
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR b=759
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.333.2>
@@ -12576,12 +12576,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=26026
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR c=17017
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='srqponm' AND f GLOB 'ghijk*')
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
   ]])
@@ -12597,12 +12597,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=26026
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR c=17017
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='srqponm' AND f GLOB 'ghijk*')
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
   ]])
@@ -12662,9 +12662,9 @@ test:do_test(
          OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR b=300
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR a=41
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR b=135
          OR b=605
   ]])
@@ -12684,9 +12684,9 @@ test:do_test(
          OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR b=300
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR a=41
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR b=135
          OR b=605
   ]])
@@ -12701,16 +12701,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR b=762
          OR b=484
          OR b=190
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=1023
   ]])
     end, {
@@ -12724,16 +12724,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR b=762
          OR b=484
          OR b=190
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=1023
   ]])
     end, {
@@ -12747,7 +12747,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
          OR a=34
          OR f='rstuvwxyz'
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
@@ -12764,7 +12764,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
          OR a=34
          OR f='rstuvwxyz'
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
@@ -12783,7 +12783,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=37.0 AND d<38.0 AND d IS NOT NULL)
          OR b=1004
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR g IS NULL
   ]])
     end, {
@@ -12799,7 +12799,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=37.0 AND d<38.0 AND d IS NOT NULL)
          OR b=1004
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR g IS NULL
   ]])
     end, {
@@ -12822,8 +12822,8 @@ test:do_test(
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR a=44
          OR a=23
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.341.1>
@@ -12845,8 +12845,8 @@ test:do_test(
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR a=44
          OR a=23
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.341.2>
@@ -12864,8 +12864,8 @@ test:do_test(
          OR a=11
          OR ((a BETWEEN 12 AND 14) AND a!=13)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR a=13
          OR a=15
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
@@ -12887,8 +12887,8 @@ test:do_test(
          OR a=11
          OR ((a BETWEEN 12 AND 14) AND a!=13)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR a=13
          OR a=15
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
@@ -13019,16 +13019,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='gfedcba' AND f GLOB 'klmno*')
+      WHERE (g='gfedcba' AND f LIKE 'klmno%')
          OR ((a BETWEEN 9 AND 11) AND a!=10)
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR a=48
          OR b=113
          OR ((a BETWEEN 20 AND 22) AND a!=21)
          OR b=880
          OR ((a BETWEEN 85 AND 87) AND a!=86)
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.346.1>
@@ -13041,16 +13041,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='gfedcba' AND f GLOB 'klmno*')
+      WHERE (g='gfedcba' AND f LIKE 'klmno%')
          OR ((a BETWEEN 9 AND 11) AND a!=10)
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR a=48
          OR b=113
          OR ((a BETWEEN 20 AND 22) AND a!=21)
          OR b=880
          OR ((a BETWEEN 85 AND 87) AND a!=86)
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.346.2>
@@ -13065,10 +13065,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=517
          OR b=187
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR b=1092
          OR ((a BETWEEN 84 AND 86) AND a!=85)
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.347.1>
@@ -13083,10 +13083,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=517
          OR b=187
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR b=1092
          OR ((a BETWEEN 84 AND 86) AND a!=85)
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.347.2>
@@ -13259,7 +13259,7 @@ test:do_test(
          OR a=30
          OR c=3003
          OR (d>=88.0 AND d<89.0 AND d IS NOT NULL)
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
          OR b=564
          OR b=55
          OR a=38
@@ -13281,7 +13281,7 @@ test:do_test(
          OR a=30
          OR c=3003
          OR (d>=88.0 AND d<89.0 AND d IS NOT NULL)
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
          OR b=564
          OR b=55
          OR a=38
@@ -13328,7 +13328,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=792
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
   ]])
     end, {
         -- <where7-2.354.1>
@@ -13342,7 +13342,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=792
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
   ]])
     end, {
         -- <where7-2.354.2>
@@ -13357,9 +13357,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=73.0 AND d<74.0 AND d IS NOT NULL)
          OR c=21021
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR f='zabcdefgh'
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR b=781
          OR a=64
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
@@ -13377,9 +13377,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=73.0 AND d<74.0 AND d IS NOT NULL)
          OR c=21021
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR f='zabcdefgh'
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR b=781
          OR a=64
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
@@ -13395,12 +13395,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'pqrst*')
+      WHERE (g='lkjihgf' AND f LIKE 'pqrst%')
          OR (d>=90.0 AND d<91.0 AND d IS NOT NULL)
          OR a=34
-         OR (g='rqponml' AND f GLOB 'ijklm*')
-         OR (g='rqponml' AND f GLOB 'klmno*')
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
+         OR (g='rqponml' AND f LIKE 'klmno%')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR b=319
          OR b=330
          OR ((a BETWEEN 28 AND 30) AND a!=29)
@@ -13416,12 +13416,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'pqrst*')
+      WHERE (g='lkjihgf' AND f LIKE 'pqrst%')
          OR (d>=90.0 AND d<91.0 AND d IS NOT NULL)
          OR a=34
-         OR (g='rqponml' AND f GLOB 'ijklm*')
-         OR (g='rqponml' AND f GLOB 'klmno*')
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
+         OR (g='rqponml' AND f LIKE 'klmno%')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR b=319
          OR b=330
          OR ((a BETWEEN 28 AND 30) AND a!=29)
@@ -13437,8 +13437,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR a=45
          OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
   ]])
@@ -13453,8 +13453,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR a=45
          OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
   ]])
@@ -13470,7 +13470,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=53.0 AND d<54.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=165
          OR b=836
   ]])
@@ -13486,7 +13486,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=53.0 AND d<54.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=165
          OR b=836
   ]])
@@ -13503,7 +13503,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1034
          OR f='vwxyzabcd'
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
   ]])
     end, {
@@ -13519,7 +13519,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1034
          OR f='vwxyzabcd'
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
   ]])
     end, {
@@ -13575,12 +13575,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=37
          OR b=88
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR c=23023
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
          OR a=56
          OR ((a BETWEEN 13 AND 15) AND a!=14)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR f='ijklmnopq'
          OR ((a BETWEEN 85 AND 87) AND a!=86)
   ]])
@@ -13597,12 +13597,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=37
          OR b=88
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR c=23023
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
          OR a=56
          OR ((a BETWEEN 13 AND 15) AND a!=14)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR f='ijklmnopq'
          OR ((a BETWEEN 85 AND 87) AND a!=86)
   ]])
@@ -13620,7 +13620,7 @@ test:do_test(
       WHERE (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR a=74
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 42 AND 44) AND a!=43)
   ]])
     end, {
@@ -13637,7 +13637,7 @@ test:do_test(
       WHERE (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR a=74
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 42 AND 44) AND a!=43)
   ]])
     end, {
@@ -13747,13 +13747,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'vwxyz*')
+      WHERE (g='jihgfed' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR b=212
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR a=20
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=627
   ]])
     end, {
@@ -13767,13 +13767,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'vwxyz*')
+      WHERE (g='jihgfed' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR b=212
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR a=20
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=627
   ]])
     end, {
@@ -13787,7 +13787,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+      WHERE (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR b=157
          OR b=1026
@@ -13803,7 +13803,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+      WHERE (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR b=157
          OR b=1026
@@ -13823,10 +13823,10 @@ test:do_test(
          OR a=16
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='wvutsrq' AND f GLOB 'lmnop*')
+         OR (g='wvutsrq' AND f LIKE 'lmnop%')
          OR f='zabcdefgh'
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.368.1>
@@ -13843,10 +13843,10 @@ test:do_test(
          OR a=16
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='wvutsrq' AND f GLOB 'lmnop*')
+         OR (g='wvutsrq' AND f LIKE 'lmnop%')
          OR f='zabcdefgh'
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.368.2>
@@ -13895,11 +13895,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE f IS NULL
          OR a=37
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 55 AND 57) AND a!=56)
          OR b=168
          OR b=22
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=506
   ]])
     end, {
@@ -13915,11 +13915,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE f IS NULL
          OR a=37
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 55 AND 57) AND a!=56)
          OR b=168
          OR b=22
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=506
   ]])
     end, {
@@ -13935,11 +13935,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=29
          OR ((a BETWEEN 26 AND 28) AND a!=27)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR b=209
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
          OR b=146
   ]])
     end, {
@@ -13955,11 +13955,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=29
          OR ((a BETWEEN 26 AND 28) AND a!=27)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR b=209
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
          OR b=146
   ]])
     end, {
@@ -14017,7 +14017,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
+      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR b=113
          OR ((a BETWEEN 40 AND 42) AND a!=41)
@@ -14035,7 +14035,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
+      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR b=113
          OR ((a BETWEEN 40 AND 42) AND a!=41)
@@ -14081,7 +14081,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='rqponml' AND f GLOB 'ijklm*')
+      WHERE (g='rqponml' AND f LIKE 'ijklm%')
          OR a=99
          OR a=100
          OR b=429
@@ -14104,7 +14104,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='rqponml' AND f GLOB 'ijklm*')
+      WHERE (g='rqponml' AND f LIKE 'ijklm%')
          OR a=99
          OR a=100
          OR b=429
@@ -14164,9 +14164,9 @@ test:do_test(
          OR c=6006
          OR a=18
          OR c=24024
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR c=19019
          OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
          OR ((a BETWEEN 44 AND 46) AND a!=45)
@@ -14187,9 +14187,9 @@ test:do_test(
          OR c=6006
          OR a=18
          OR c=24024
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR c=19019
          OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
          OR ((a BETWEEN 44 AND 46) AND a!=45)
@@ -14243,7 +14243,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=99
          OR ((a BETWEEN 85 AND 87) AND a!=86)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
   ]])
     end, {
         -- <where7-2.379.1>
@@ -14258,7 +14258,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=99
          OR ((a BETWEEN 85 AND 87) AND a!=86)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
   ]])
     end, {
         -- <where7-2.379.2>
@@ -14271,7 +14271,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?hijk*' AND f GLOB 'ghij*')
+      WHERE (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR ((a BETWEEN 79 AND 81) AND a!=80)
          OR b=715
          OR ((a BETWEEN 23 AND 25) AND a!=24)
@@ -14287,7 +14287,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?hijk*' AND f GLOB 'ghij*')
+      WHERE (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR ((a BETWEEN 79 AND 81) AND a!=80)
          OR b=715
          OR ((a BETWEEN 23 AND 25) AND a!=24)
@@ -14304,7 +14304,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=97.0 AND d<98.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR a=46
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
   ]])
@@ -14320,7 +14320,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=97.0 AND d<98.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR a=46
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
   ]])
@@ -14335,7 +14335,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'defgh*')
+      WHERE (g='ihgfedc' AND f LIKE 'defgh%')
          OR ((a BETWEEN 97 AND 99) AND a!=98)
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
          OR b=1056
@@ -14352,7 +14352,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'defgh*')
+      WHERE (g='ihgfedc' AND f LIKE 'defgh%')
          OR ((a BETWEEN 97 AND 99) AND a!=98)
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
          OR b=1056
@@ -14453,7 +14453,7 @@ test:do_test(
          OR ((a BETWEEN 39 AND 41) AND a!=40)
          OR b=242
          OR ((a BETWEEN 32 AND 34) AND a!=33)
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=300
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
@@ -14476,7 +14476,7 @@ test:do_test(
          OR ((a BETWEEN 39 AND 41) AND a!=40)
          OR b=242
          OR ((a BETWEEN 32 AND 34) AND a!=33)
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=300
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
@@ -14502,7 +14502,7 @@ test:do_test(
          OR b=1048
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR c=19019
   ]])
     end, {
@@ -14525,7 +14525,7 @@ test:do_test(
          OR b=1048
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR c=19019
   ]])
     end, {
@@ -14608,10 +14608,10 @@ test:do_test(
          OR a=58
          OR b=333
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR b=572
          OR ((a BETWEEN 50 AND 52) AND a!=51)
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
   ]])
     end, {
         -- <where7-2.389.1>
@@ -14631,10 +14631,10 @@ test:do_test(
          OR a=58
          OR b=333
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR b=572
          OR ((a BETWEEN 50 AND 52) AND a!=51)
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
   ]])
     end, {
         -- <where7-2.389.2>
@@ -14649,7 +14649,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1034
          OR f='lmnopqrst'
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.390.1>
@@ -14664,7 +14664,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1034
          OR f='lmnopqrst'
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.390.2>
@@ -14679,7 +14679,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE c=15015
          OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR b=58
          OR b=674
          OR b=979
@@ -14697,7 +14697,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE c=15015
          OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR b=58
          OR b=674
          OR b=979
@@ -14747,9 +14747,9 @@ test:do_test(
          OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
          OR b=630
          OR a=19
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR f='wxyzabcde'
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR b=377
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
          OR a=77
@@ -14770,9 +14770,9 @@ test:do_test(
          OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
          OR b=630
          OR a=19
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR f='wxyzabcde'
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR b=377
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
          OR a=77
@@ -14818,14 +14818,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=64
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'cdefg*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
          OR c=14014
          OR b=586
          OR c=27027
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.395.1>
@@ -14839,14 +14839,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=64
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'cdefg*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
          OR c=14014
          OR b=586
          OR c=27027
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.395.2>
@@ -14903,11 +14903,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR a=23
          OR b=737
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
@@ -14926,11 +14926,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR a=23
          OR b=737
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
@@ -14983,10 +14983,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=18
          OR b=1059
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=795
   ]])
     end, {
@@ -15002,10 +15002,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=18
          OR b=1059
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=795
   ]])
     end, {
@@ -15019,7 +15019,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?mnop*' AND f GLOB 'lmno*')
+      WHERE (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR a=93
          OR a=11
          OR f='nopqrstuv'
@@ -15039,7 +15039,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?mnop*' AND f GLOB 'lmno*')
+      WHERE (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR a=93
          OR a=11
          OR f='nopqrstuv'
@@ -15062,8 +15062,8 @@ test:do_test(
       WHERE b=685
          OR a=33
          OR ((a BETWEEN 40 AND 42) AND a!=41)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 39 AND 41) AND a!=40)
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR b=715
@@ -15085,8 +15085,8 @@ test:do_test(
       WHERE b=685
          OR a=33
          OR ((a BETWEEN 40 AND 42) AND a!=41)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 39 AND 41) AND a!=40)
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR b=715
@@ -15107,7 +15107,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=89
          OR b=1037
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.402.1>
@@ -15122,7 +15122,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=89
          OR b=1037
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.402.2>
@@ -15179,9 +15179,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (g='rqponml' AND f GLOB 'jklmn*')
-         OR (g='lkjihgf' AND f GLOB 'mnopq*')
+      WHERE (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
+         OR (g='lkjihgf' AND f LIKE 'mnopq%')
          OR b=726
          OR ((a BETWEEN 73 AND 75) AND a!=74)
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
@@ -15201,9 +15201,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (g='rqponml' AND f GLOB 'jklmn*')
-         OR (g='lkjihgf' AND f GLOB 'mnopq*')
+      WHERE (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
+         OR (g='lkjihgf' AND f LIKE 'mnopq%')
          OR b=726
          OR ((a BETWEEN 73 AND 75) AND a!=74)
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
@@ -15223,7 +15223,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=924
          OR f='lmnopqrst'
          OR b=1048
@@ -15239,7 +15239,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=924
          OR f='lmnopqrst'
          OR b=1048
@@ -15256,7 +15256,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=198
          OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
          OR ((a BETWEEN 12 AND 14) AND a!=13)
@@ -15276,7 +15276,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=198
          OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
          OR ((a BETWEEN 12 AND 14) AND a!=13)
@@ -15341,7 +15341,7 @@ test:do_test(
          OR b=630
          OR a=55
          OR c=26026
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -15359,7 +15359,7 @@ test:do_test(
          OR b=630
          OR a=55
          OR c=26026
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -15375,12 +15375,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE f='uvwxyzabc'
          OR f='xyzabcdef'
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
          OR ((a BETWEEN 51 AND 53) AND a!=52)
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
          OR b=69
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
   ]])
     end, {
         -- <where7-2.409.1>
@@ -15395,12 +15395,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE f='uvwxyzabc'
          OR f='xyzabcdef'
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
          OR ((a BETWEEN 51 AND 53) AND a!=52)
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
          OR b=69
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
   ]])
     end, {
         -- <where7-2.409.2>
@@ -15417,7 +15417,7 @@ test:do_test(
          OR b=454
          OR ((a BETWEEN 92 AND 94) AND a!=93)
          OR b=179
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR f='qrstuvwxy'
   ]])
     end, {
@@ -15435,7 +15435,7 @@ test:do_test(
          OR b=454
          OR ((a BETWEEN 92 AND 94) AND a!=93)
          OR b=179
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR f='qrstuvwxy'
   ]])
     end, {
@@ -15452,7 +15452,7 @@ test:do_test(
       WHERE ((a BETWEEN 6 AND 8) AND a!=7)
          OR b=619
          OR a=20
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR b=946
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR a=64
@@ -15474,7 +15474,7 @@ test:do_test(
       WHERE ((a BETWEEN 6 AND 8) AND a!=7)
          OR b=619
          OR a=20
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR b=946
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR a=64
@@ -15527,8 +15527,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR a=32
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR c=32032
   ]])
     end, {
@@ -15544,8 +15544,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR a=32
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR c=32032
   ]])
     end, {
@@ -15654,7 +15654,7 @@ test:do_test(
       WHERE (d>=32.0 AND d<33.0 AND d IS NOT NULL)
          OR a=27
          OR ((a BETWEEN 55 AND 57) AND a!=56)
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.417.1>
@@ -15670,7 +15670,7 @@ test:do_test(
       WHERE (d>=32.0 AND d<33.0 AND d IS NOT NULL)
          OR a=27
          OR ((a BETWEEN 55 AND 57) AND a!=56)
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.417.2>
@@ -15720,7 +15720,7 @@ test:do_test(
          OR b=561
          OR b=352
          OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR a=95
   ]])
     end, {
@@ -15743,7 +15743,7 @@ test:do_test(
          OR b=561
          OR b=352
          OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR a=95
   ]])
     end, {
@@ -15761,7 +15761,7 @@ test:do_test(
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR f='ghijklmno'
          OR b=619
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR b=476
          OR a=83
@@ -15782,7 +15782,7 @@ test:do_test(
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR f='ghijklmno'
          OR b=619
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR b=476
          OR a=83
@@ -15868,8 +15868,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1059
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=47
          OR b=660
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -15887,8 +15887,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1059
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=47
          OR b=660
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -15936,13 +15936,13 @@ test:do_test(
       WHERE b=597
          OR f='lmnopqrst'
          OR a=24
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 31 AND 33) AND a!=32)
          OR b=1023
          OR a=53
          OR a=78
          OR f='efghijklm'
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -15959,13 +15959,13 @@ test:do_test(
       WHERE b=597
          OR f='lmnopqrst'
          OR a=24
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 31 AND 33) AND a!=32)
          OR b=1023
          OR a=53
          OR a=78
          OR f='efghijklm'
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -16012,11 +16012,11 @@ test:do_test(
       WHERE f='tuvwxyzab'
          OR b=388
          OR ((a BETWEEN 84 AND 86) AND a!=85)
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR b=957
          OR b=663
          OR b=847
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.427.1>
@@ -16032,11 +16032,11 @@ test:do_test(
       WHERE f='tuvwxyzab'
          OR b=388
          OR ((a BETWEEN 84 AND 86) AND a!=85)
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR b=957
          OR b=663
          OR b=847
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.427.2>
@@ -16051,7 +16051,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=81.0 AND d<82.0 AND d IS NOT NULL)
          OR a=56
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.428.1>
@@ -16066,7 +16066,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=81.0 AND d<82.0 AND d IS NOT NULL)
          OR a=56
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.428.2>
@@ -16082,7 +16082,7 @@ test:do_test(
       WHERE c>=34035
          OR b=168
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
   ]])
     end, {
         -- <where7-2.429.1>
@@ -16098,7 +16098,7 @@ test:do_test(
       WHERE c>=34035
          OR b=168
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
   ]])
     end, {
         -- <where7-2.429.2>
@@ -16144,9 +16144,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=29.0 AND d<30.0 AND d IS NOT NULL)
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR f='rstuvwxyz'
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.431.1>
@@ -16160,9 +16160,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=29.0 AND d<30.0 AND d IS NOT NULL)
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR f='rstuvwxyz'
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.431.2>
@@ -16246,7 +16246,7 @@ test:do_test(
       WHERE b=113
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR b=113
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR ((a BETWEEN 62 AND 64) AND a!=63)
          OR c=6006
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
@@ -16267,7 +16267,7 @@ test:do_test(
       WHERE b=113
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR b=113
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR ((a BETWEEN 62 AND 64) AND a!=63)
          OR c=6006
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
@@ -16285,7 +16285,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR c=22022
          OR ((a BETWEEN 79 AND 81) AND a!=80)
@@ -16303,7 +16303,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR c=22022
          OR ((a BETWEEN 79 AND 81) AND a!=80)
@@ -16322,7 +16322,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 74 AND 76) AND a!=75)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=47
          OR ((a BETWEEN 44 AND 46) AND a!=45)
          OR a=92
@@ -16331,7 +16331,7 @@ test:do_test(
          OR c=7007
          OR a=93
          OR ((a BETWEEN 93 AND 95) AND a!=94)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.436.1>
@@ -16345,7 +16345,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 74 AND 76) AND a!=75)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=47
          OR ((a BETWEEN 44 AND 46) AND a!=45)
          OR a=92
@@ -16354,7 +16354,7 @@ test:do_test(
          OR c=7007
          OR a=93
          OR ((a BETWEEN 93 AND 95) AND a!=94)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.436.2>
@@ -16367,11 +16367,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR a=13
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR c=29029
          OR b=311
          OR b=366
@@ -16389,11 +16389,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR a=13
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR c=29029
          OR b=311
          OR b=366
@@ -16453,12 +16453,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=82.0 AND d<83.0 AND d IS NOT NULL)
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR a=41
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR b=913
   ]])
     end, {
@@ -16474,12 +16474,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=82.0 AND d<83.0 AND d IS NOT NULL)
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR a=41
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR b=913
   ]])
     end, {
@@ -16593,12 +16593,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=102
          OR b=212
          OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
          OR b=487
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.443.1>
@@ -16611,12 +16611,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=102
          OR b=212
          OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
          OR b=487
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.443.2>
@@ -16661,7 +16661,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=872
          OR ((a BETWEEN 58 AND 60) AND a!=59)
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR b=957
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
          OR a=67
@@ -16680,7 +16680,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=872
          OR ((a BETWEEN 58 AND 60) AND a!=59)
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR b=957
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
          OR a=67
@@ -16700,12 +16700,12 @@ test:do_test(
       WHERE b=66
          OR b=102
          OR b=396
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 7 AND 9) AND a!=8)
          OR b=759
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR f='ghijklmno'
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 90 AND 92) AND a!=91)
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
   ]])
@@ -16723,12 +16723,12 @@ test:do_test(
       WHERE b=66
          OR b=102
          OR b=396
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 7 AND 9) AND a!=8)
          OR b=759
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR f='ghijklmno'
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 90 AND 92) AND a!=91)
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
   ]])
@@ -16744,8 +16744,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR a=72
          OR b=1100
          OR b=102
@@ -16763,8 +16763,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR a=72
          OR b=1100
          OR b=102
@@ -16878,7 +16878,7 @@ test:do_test(
       WHERE b=47
          OR a=91
          OR d>1e10
-         OR (g='srqponm' AND f GLOB 'cdefg*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.451.1>
@@ -16894,7 +16894,7 @@ test:do_test(
       WHERE b=47
          OR a=91
          OR d>1e10
-         OR (g='srqponm' AND f GLOB 'cdefg*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.451.2>
@@ -16975,13 +16975,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR b=619
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR c=11011
          OR b=550
          OR b=1059
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
@@ -16998,13 +16998,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR b=619
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR c=11011
          OR b=550
          OR b=1059
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
@@ -17021,16 +17021,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='edcbazy' AND f GLOB 'vwxyz*')
+      WHERE (g='edcbazy' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR a=78
          OR a=27
          OR b=792
          OR b=946
          OR c=22022
          OR a=23
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=388
   ]])
     end, {
@@ -17044,16 +17044,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='edcbazy' AND f GLOB 'vwxyz*')
+      WHERE (g='edcbazy' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR a=78
          OR a=27
          OR b=792
          OR b=946
          OR c=22022
          OR a=23
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=388
   ]])
     end, {
@@ -17070,8 +17070,8 @@ test:do_test(
       WHERE c=32032
          OR f IS NULL
          OR ((a BETWEEN 37 AND 39) AND a!=38)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR b=825
   ]])
     end, {
@@ -17088,8 +17088,8 @@ test:do_test(
       WHERE c=32032
          OR f IS NULL
          OR ((a BETWEEN 37 AND 39) AND a!=38)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR b=825
   ]])
     end, {
@@ -17104,7 +17104,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=84.0 AND d<85.0 AND d IS NOT NULL)
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR b=1078
@@ -17126,7 +17126,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=84.0 AND d<85.0 AND d IS NOT NULL)
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR b=1078
@@ -17147,11 +17147,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'ijklm*')
+      WHERE (g='wvutsrq' AND f LIKE 'ijklm%')
          OR c=25025
          OR b=550
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.458.1>
@@ -17164,11 +17164,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'ijklm*')
+      WHERE (g='wvutsrq' AND f LIKE 'ijklm%')
          OR c=25025
          OR b=550
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.458.2>
@@ -17183,7 +17183,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=432
          OR f='opqrstuvw'
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.459.1>
@@ -17198,7 +17198,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=432
          OR f='opqrstuvw'
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.459.2>
@@ -17213,7 +17213,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 14 AND 16) AND a!=15)
          OR b=847
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR b=583
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
@@ -17234,7 +17234,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 14 AND 16) AND a!=15)
          OR b=847
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR b=583
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
@@ -17299,7 +17299,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=586
          OR d<0.0
          OR c=9009
@@ -17315,7 +17315,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=586
          OR d<0.0
          OR c=9009
@@ -17378,7 +17378,7 @@ test:do_test(
       WHERE ((a BETWEEN 44 AND 46) AND a!=45)
          OR a=53
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=594
          OR b=80
          OR ((a BETWEEN 18 AND 20) AND a!=19)
@@ -17399,7 +17399,7 @@ test:do_test(
       WHERE ((a BETWEEN 44 AND 46) AND a!=45)
          OR a=53
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=594
          OR b=80
          OR ((a BETWEEN 18 AND 20) AND a!=19)
@@ -17482,9 +17482,9 @@ test:do_test(
       WHERE a=59
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR f='wxyzabcde'
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
          OR a=70
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR ((a BETWEEN 14 AND 16) AND a!=15)
@@ -17503,9 +17503,9 @@ test:do_test(
       WHERE a=59
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR f='wxyzabcde'
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
          OR a=70
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR ((a BETWEEN 14 AND 16) AND a!=15)
@@ -17522,7 +17522,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=69
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.468.1>
@@ -17536,7 +17536,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=69
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.468.2>
@@ -17552,8 +17552,8 @@ test:do_test(
       WHERE a=41
          OR a=43
          OR a=92
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.469.1>
@@ -17569,8 +17569,8 @@ test:do_test(
       WHERE a=41
          OR a=43
          OR a=92
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.469.2>
@@ -17617,7 +17617,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE f='fghijklmn'
          OR f='fghijklmn'
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR b=465
          OR b=586
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
@@ -17639,7 +17639,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE f='fghijklmn'
          OR f='fghijklmn'
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR b=465
          OR b=586
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
@@ -17660,10 +17660,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=34.0 AND d<35.0 AND d IS NOT NULL)
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=814
          OR a=20
          OR 1000000<b
@@ -17681,10 +17681,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=34.0 AND d<35.0 AND d IS NOT NULL)
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=814
          OR a=20
          OR 1000000<b
@@ -17701,14 +17701,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
          OR c=1001
          OR b=484
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
          OR c<=10
          OR a=92
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 0 AND 2) AND a!=1)
          OR b=1026
   ]])
@@ -17723,14 +17723,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
          OR c=1001
          OR b=484
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
          OR c<=10
          OR a=92
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 0 AND 2) AND a!=1)
          OR b=1026
   ]])
@@ -17746,13 +17746,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=54
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR b=993
          OR c=22022
          OR a=68
          OR ((a BETWEEN 99 AND 101) AND a!=100)
          OR a=62
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR b=1015
   ]])
     end, {
@@ -17767,13 +17767,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=54
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR b=993
          OR c=22022
          OR a=68
          OR ((a BETWEEN 99 AND 101) AND a!=100)
          OR a=62
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR b=1015
   ]])
     end, {
@@ -17789,7 +17789,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=319
          OR a=50
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
@@ -17808,7 +17808,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=319
          OR a=50
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
@@ -17889,14 +17889,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
          OR b=407
          OR b=454
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
          OR b=627
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
   ]])
     end, {
         -- <where7-2.478.1>
@@ -17909,14 +17909,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
          OR b=407
          OR b=454
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
          OR b=627
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
   ]])
     end, {
         -- <where7-2.478.2>
@@ -17933,7 +17933,7 @@ test:do_test(
          OR c=34034
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR a=67
   ]])
     end, {
@@ -17951,7 +17951,7 @@ test:do_test(
          OR c=34034
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR a=67
   ]])
     end, {
@@ -17970,7 +17970,7 @@ test:do_test(
          OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
   ]])
     end, {
         -- <where7-2.480.1>
@@ -17988,7 +17988,7 @@ test:do_test(
          OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
   ]])
     end, {
         -- <where7-2.480.2>
@@ -18006,12 +18006,12 @@ test:do_test(
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
          OR b=201
          OR a=99
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 36 AND 38) AND a!=37)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
          OR b=946
          OR b=993
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.481.1>
@@ -18029,12 +18029,12 @@ test:do_test(
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
          OR b=201
          OR a=99
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 36 AND 38) AND a!=37)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
          OR b=946
          OR b=993
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.481.2>
@@ -18048,7 +18048,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=806
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR b=916
          OR b<0
@@ -18070,7 +18070,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=806
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR b=916
          OR b<0
@@ -18093,11 +18093,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=836
          OR d>1e10
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR f='pqrstuvwx'
          OR ((a BETWEEN 3 AND 5) AND a!=4)
          OR f='abcdefghi'
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR a=33
          OR ((a BETWEEN 19 AND 21) AND a!=20)
          OR ((a BETWEEN 88 AND 90) AND a!=89)
@@ -18116,11 +18116,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=836
          OR d>1e10
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR f='pqrstuvwx'
          OR ((a BETWEEN 3 AND 5) AND a!=4)
          OR f='abcdefghi'
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR a=33
          OR ((a BETWEEN 19 AND 21) AND a!=20)
          OR ((a BETWEEN 88 AND 90) AND a!=89)
@@ -18140,10 +18140,10 @@ test:do_test(
       WHERE a=48
          OR a=92
          OR a=1
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR b=905
          OR ((a BETWEEN 51 AND 53) AND a!=52)
   ]])
@@ -18161,10 +18161,10 @@ test:do_test(
       WHERE a=48
          OR a=92
          OR a=1
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR b=905
          OR ((a BETWEEN 51 AND 53) AND a!=52)
   ]])
@@ -18215,12 +18215,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=740
          OR b=564
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR a=11
          OR ((a BETWEEN 44 AND 46) AND a!=45)
          OR b=322
          OR (d>=6.0 AND d<7.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR b=902
          OR c>=34035
   ]])
@@ -18237,12 +18237,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=740
          OR b=564
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR a=11
          OR ((a BETWEEN 44 AND 46) AND a!=45)
          OR b=322
          OR (d>=6.0 AND d<7.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR b=902
          OR c>=34035
   ]])
@@ -18264,7 +18264,7 @@ test:do_test(
          OR a=48
          OR b=927
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR f='abcdefghi'
          OR b=91
          OR b=55
@@ -18287,7 +18287,7 @@ test:do_test(
          OR a=48
          OR b=927
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR f='abcdefghi'
          OR b=91
          OR b=55
@@ -18303,7 +18303,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='srqponm' AND f GLOB 'efghi*')
+      WHERE (g='srqponm' AND f LIKE 'efghi%')
          OR ((a BETWEEN 88 AND 90) AND a!=89)
          OR a=20
          OR b=11
@@ -18319,7 +18319,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='srqponm' AND f GLOB 'efghi*')
+      WHERE (g='srqponm' AND f LIKE 'efghi%')
          OR ((a BETWEEN 88 AND 90) AND a!=89)
          OR a=20
          OR b=11
@@ -18338,7 +18338,7 @@ test:do_test(
       WHERE (d>=27.0 AND d<28.0 AND d IS NOT NULL)
          OR b=55
          OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR a=50
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
@@ -18358,7 +18358,7 @@ test:do_test(
       WHERE (d>=27.0 AND d<28.0 AND d IS NOT NULL)
          OR b=55
          OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR a=50
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
@@ -18375,8 +18375,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='rqponml' AND f GLOB 'ijklm*')
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+      WHERE (g='rqponml' AND f LIKE 'ijklm%')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
   ]])
     end, {
         -- <where7-2.490.1>
@@ -18389,8 +18389,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='rqponml' AND f GLOB 'ijklm*')
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+      WHERE (g='rqponml' AND f LIKE 'ijklm%')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
   ]])
     end, {
         -- <where7-2.490.2>
@@ -18405,7 +18405,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=704
          OR b=924
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR b=113
   ]])
     end, {
@@ -18421,7 +18421,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=704
          OR b=924
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR b=113
   ]])
     end, {
@@ -18503,11 +18503,11 @@ test:do_test(
          OR b=726
          OR f='abcdefghi'
          OR b=179
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=539
          OR b=66
          OR ((a BETWEEN 86 AND 88) AND a!=87)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.494.1>
@@ -18524,11 +18524,11 @@ test:do_test(
          OR b=726
          OR f='abcdefghi'
          OR b=179
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=539
          OR b=66
          OR ((a BETWEEN 86 AND 88) AND a!=87)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.494.2>
@@ -18573,11 +18573,11 @@ test:do_test(
          OR b=682
          OR b=443
          OR b=836
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
          OR ((a BETWEEN 51 AND 53) AND a!=52)
          OR b=110
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
   ]])
     end, {
         -- <where7-2.496.1>
@@ -18594,11 +18594,11 @@ test:do_test(
          OR b=682
          OR b=443
          OR b=836
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
          OR ((a BETWEEN 51 AND 53) AND a!=52)
          OR b=110
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
   ]])
     end, {
         -- <where7-2.496.2>
@@ -18611,15 +18611,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?zabc*' AND f GLOB 'yzab*')
+      WHERE (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR b=462
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR a=22
          OR b=594
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
   ]])
     end, {
         -- <where7-2.497.1>
@@ -18632,15 +18632,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?zabc*' AND f GLOB 'yzab*')
+      WHERE (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR b=462
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR a=22
          OR b=594
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
   ]])
     end, {
         -- <where7-2.497.2>
@@ -18653,11 +18653,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
+      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR f='vwxyzabcd'
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR a=37
          OR a=50
   ]])
@@ -18672,11 +18672,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
+      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR f='vwxyzabcd'
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR a=37
          OR a=50
   ]])
@@ -18693,10 +18693,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 83 AND 85) AND a!=84)
          OR b=784
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR b=825
          OR a=80
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR b=531
          OR a=100
@@ -18714,10 +18714,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 83 AND 85) AND a!=84)
          OR b=784
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR b=825
          OR a=80
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR b=531
          OR a=100
@@ -18733,7 +18733,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=220
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
   ]])
@@ -18748,7 +18748,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=220
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
   ]])
@@ -18797,9 +18797,9 @@ test:do_test(
          OR b=894
          OR c=28028
          OR b=905
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR b=1037
   ]])
     end, {
@@ -18817,9 +18817,9 @@ test:do_test(
          OR b=894
          OR c=28028
          OR b=905
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR b=1037
   ]])
     end, {
@@ -18863,9 +18863,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
+      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=861
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.504.1>
@@ -18878,9 +18878,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
+      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=861
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.504.2>
@@ -18894,13 +18894,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=704
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR b=25
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=487
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR ((a BETWEEN 77 AND 79) AND a!=78)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
          OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
@@ -18917,13 +18917,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=704
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR b=25
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=487
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR ((a BETWEEN 77 AND 79) AND a!=78)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
          OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
@@ -18940,16 +18940,16 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=19
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR b=674
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR b=355
          OR ((a BETWEEN 72 AND 74) AND a!=73)
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR c=28028
          OR b=649
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
+         OR (g='srqponm' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.506.1>
@@ -18963,16 +18963,16 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=19
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR b=674
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR b=355
          OR ((a BETWEEN 72 AND 74) AND a!=73)
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR c=28028
          OR b=649
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
+         OR (g='srqponm' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.506.2>
@@ -19020,7 +19020,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=135
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 39 AND 41) AND a!=40)
   ]])
     end, {
@@ -19035,7 +19035,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=135
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 39 AND 41) AND a!=40)
   ]])
     end, {
@@ -19049,8 +19049,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.509.1>
@@ -19063,8 +19063,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.509.2>
@@ -19077,7 +19077,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'wxyza*')
+      WHERE (g='jihgfed' AND f LIKE 'wxyza%')
          OR f='ghijklmno'
   ]])
     end, {
@@ -19091,7 +19091,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'wxyza*')
+      WHERE (g='jihgfed' AND f LIKE 'wxyza%')
          OR f='ghijklmno'
   ]])
     end, {
@@ -19187,7 +19187,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?lmno*' AND f GLOB 'klmn*')
+      WHERE (f LIKE '_lmno%' AND f LIKE 'klmn%')
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR b=99
          OR a=54
@@ -19203,7 +19203,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?lmno*' AND f GLOB 'klmn*')
+      WHERE (f LIKE '_lmno%' AND f LIKE 'klmn%')
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR b=99
          OR a=54
@@ -19220,7 +19220,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=300
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
          OR b=319
          OR f='fghijklmn'
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
@@ -19238,7 +19238,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=300
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
          OR b=319
          OR f='fghijklmn'
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
@@ -19263,7 +19263,7 @@ test:do_test(
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
          OR b=748
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.515.1>
@@ -19284,7 +19284,7 @@ test:do_test(
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
          OR b=748
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.515.2>
@@ -19333,10 +19333,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'wxyza*')
+      WHERE (g='jihgfed' AND f LIKE 'wxyza%')
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
          OR b=110
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR c=26026
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
          OR b=850
@@ -19353,10 +19353,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'wxyza*')
+      WHERE (g='jihgfed' AND f LIKE 'wxyza%')
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
          OR b=110
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR c=26026
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
          OR b=850
@@ -19375,9 +19375,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 74 AND 76) AND a!=75)
          OR ((a BETWEEN 1 AND 3) AND a!=2)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
          OR b=135
          OR a=28
          OR ((a BETWEEN 1 AND 3) AND a!=2)
@@ -19396,9 +19396,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 74 AND 76) AND a!=75)
          OR ((a BETWEEN 1 AND 3) AND a!=2)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
          OR b=135
          OR a=28
          OR ((a BETWEEN 1 AND 3) AND a!=2)
@@ -19485,9 +19485,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR a=52
   ]])
     end, {
@@ -19501,9 +19501,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR a=52
   ]])
     end, {
@@ -19517,7 +19517,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'abcde*')
+      WHERE (g='ihgfedc' AND f LIKE 'abcde%')
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR a=86
          OR c=33033
@@ -19535,7 +19535,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'abcde*')
+      WHERE (g='ihgfedc' AND f LIKE 'abcde%')
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR a=86
          OR c=33033
@@ -19557,7 +19557,7 @@ test:do_test(
          OR b=517
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR ((a BETWEEN 67 AND 69) AND a!=68)
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR f='defghijkl'
          OR b=707
          OR c>=34035
@@ -19580,7 +19580,7 @@ test:do_test(
          OR b=517
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR ((a BETWEEN 67 AND 69) AND a!=68)
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR f='defghijkl'
          OR b=707
          OR c>=34035
@@ -19602,7 +19602,7 @@ test:do_test(
       WHERE (d>=96.0 AND d<97.0 AND d IS NOT NULL)
          OR b=209
          OR b=399
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.524.1>
@@ -19618,7 +19618,7 @@ test:do_test(
       WHERE (d>=96.0 AND d<97.0 AND d IS NOT NULL)
          OR b=209
          OR b=399
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.524.2>
@@ -19632,11 +19632,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=597
          OR a=95
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR b=432
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
   ]])
@@ -19652,11 +19652,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=597
          OR a=95
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR b=432
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
   ]])
@@ -19680,7 +19680,7 @@ test:do_test(
          OR c=21021
          OR b=330
          OR b=231
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.526.1>
@@ -19702,7 +19702,7 @@ test:do_test(
          OR c=21021
          OR b=330
          OR b=231
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.526.2>
@@ -19715,7 +19715,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'fghij*')
+      WHERE (g='hgfedcb' AND f LIKE 'fghij%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR f IS NULL
   ]])
@@ -19730,7 +19730,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'fghij*')
+      WHERE (g='hgfedcb' AND f LIKE 'fghij%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR f IS NULL
   ]])
@@ -19746,9 +19746,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 99 AND 101) AND a!=100)
-         OR (g='fedcbaz' AND f GLOB 'pqrst*')
+         OR (g='fedcbaz' AND f LIKE 'pqrst%')
          OR 1000000<b
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR b=990
   ]])
     end, {
@@ -19763,9 +19763,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 99 AND 101) AND a!=100)
-         OR (g='fedcbaz' AND f GLOB 'pqrst*')
+         OR (g='fedcbaz' AND f LIKE 'pqrst%')
          OR 1000000<b
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR b=990
   ]])
     end, {
@@ -19781,7 +19781,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=165
          OR a=69
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.529.1>
@@ -19796,7 +19796,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=165
          OR a=69
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.529.2>
@@ -19809,13 +19809,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'defgh*')
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='nmlkjih' AND f LIKE 'defgh%')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=784
          OR b=583
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR b=814
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR b=619
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
   ]])
@@ -19830,13 +19830,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'defgh*')
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='nmlkjih' AND f LIKE 'defgh%')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=784
          OR b=583
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR b=814
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR b=619
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
   ]])
@@ -19853,7 +19853,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=86
          OR b=484
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR b=418
          OR b=509
          OR a=42
@@ -19876,7 +19876,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=86
          OR b=484
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR b=418
          OR b=509
          OR a=42
@@ -20007,7 +20007,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
+      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR c=5005
          OR ((a BETWEEN 50 AND 52) AND a!=51)
          OR a=93
@@ -20015,7 +20015,7 @@ test:do_test(
          OR b=619
          OR b=234
          OR b=55
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -20029,7 +20029,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
+      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR c=5005
          OR ((a BETWEEN 50 AND 52) AND a!=51)
          OR a=93
@@ -20037,7 +20037,7 @@ test:do_test(
          OR b=619
          OR b=234
          OR b=55
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -20053,11 +20053,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=355
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=806
          OR b=462
          OR b=531
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
          OR f='mnopqrstu'
   ]])
     end, {
@@ -20073,11 +20073,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=355
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=806
          OR b=462
          OR b=531
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
          OR f='mnopqrstu'
   ]])
     end, {
@@ -20093,9 +20093,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 60 AND 62) AND a!=61)
          OR f='pqrstuvwx'
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
          OR b=495
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
          OR a=75
   ]])
     end, {
@@ -20111,9 +20111,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 60 AND 62) AND a!=61)
          OR f='pqrstuvwx'
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
          OR b=495
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
          OR a=75
   ]])
     end, {
@@ -20127,8 +20127,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=748
          OR b=913
          OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
@@ -20145,8 +20145,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=748
          OR b=913
          OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
@@ -20167,7 +20167,7 @@ test:do_test(
          OR b=902
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR b=168
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR a=50
          OR f='uvwxyzabc'
          OR b=836
@@ -20189,7 +20189,7 @@ test:do_test(
          OR b=902
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR b=168
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR a=50
          OR f='uvwxyzabc'
          OR b=836
@@ -20243,13 +20243,13 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=814
          OR c=30030
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
          OR a=16
          OR b=1048
          OR b=113
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR b=729
          OR a=54
   ]])
@@ -20266,13 +20266,13 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=814
          OR c=30030
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
          OR a=16
          OR b=1048
          OR b=113
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR b=729
          OR a=54
   ]])
@@ -20288,15 +20288,15 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=399
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=814
          OR c=22022
          OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR a=1
          OR b=311
          OR b=121
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=198
   ]])
     end, {
@@ -20311,15 +20311,15 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=399
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=814
          OR c=22022
          OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR a=1
          OR b=311
          OR b=121
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=198
   ]])
     end, {
@@ -20403,7 +20403,7 @@ test:do_test(
          OR a=22
          OR b=594
          OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
   ]])
     end, {
         -- <where7-2.545.1>
@@ -20424,7 +20424,7 @@ test:do_test(
          OR a=22
          OR b=594
          OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
   ]])
     end, {
         -- <where7-2.545.2>
@@ -20443,7 +20443,7 @@ test:do_test(
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
          OR ((a BETWEEN 3 AND 5) AND a!=4)
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR f='mnopqrstu'
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
          OR b=902
@@ -20465,7 +20465,7 @@ test:do_test(
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
          OR ((a BETWEEN 3 AND 5) AND a!=4)
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR f='mnopqrstu'
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
          OR b=902
@@ -20481,8 +20481,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='onmlkji' AND f GLOB 'zabcd*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+      WHERE (g='onmlkji' AND f LIKE 'zabcd%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR a=13
   ]])
     end, {
@@ -20496,8 +20496,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='onmlkji' AND f GLOB 'zabcd*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+      WHERE (g='onmlkji' AND f LIKE 'zabcd%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR a=13
   ]])
     end, {
@@ -20511,11 +20511,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
+      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=410
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=418
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -20529,11 +20529,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
+      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=410
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=418
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -20552,8 +20552,8 @@ test:do_test(
          OR a=56
          OR a=46
          OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR (d>=41.0 AND d<42.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -20572,8 +20572,8 @@ test:do_test(
          OR a=56
          OR a=46
          OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR (d>=41.0 AND d<42.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -20633,7 +20633,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=539
          OR b=418
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR b=759
   ]])
     end, {
@@ -20649,7 +20649,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=539
          OR b=418
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR b=759
   ]])
     end, {
@@ -20664,8 +20664,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1001
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR c=34034
          OR a=84
   ]])
@@ -20681,8 +20681,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1001
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR c=34034
          OR a=84
   ]])
@@ -20702,7 +20702,7 @@ test:do_test(
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR b=322
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR c=34034
@@ -20724,7 +20724,7 @@ test:do_test(
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR b=322
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR c=34034
@@ -20742,12 +20742,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=13013
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=47
          OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=828
   ]])
     end, {
@@ -20762,12 +20762,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=13013
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=47
          OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=828
   ]])
     end, {
@@ -20783,7 +20783,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=451
          OR b=836
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.555.1>
@@ -20798,7 +20798,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=451
          OR b=836
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.555.2>
@@ -20848,7 +20848,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='tuvwxyzab'
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.557.1>
@@ -20862,7 +20862,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='tuvwxyzab'
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.557.2>
@@ -20881,7 +20881,7 @@ test:do_test(
          OR d<0.0
          OR b=982
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR ((a BETWEEN 97 AND 99) AND a!=98)
          OR e IS NULL
          OR c=32032
@@ -20904,7 +20904,7 @@ test:do_test(
          OR d<0.0
          OR b=982
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR ((a BETWEEN 97 AND 99) AND a!=98)
          OR e IS NULL
          OR c=32032
@@ -20922,9 +20922,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=62
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.559.1>
@@ -20938,9 +20938,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=62
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.559.2>
@@ -20994,8 +20994,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=44
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.561.1>
@@ -21009,8 +21009,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=44
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.561.2>
@@ -21026,7 +21026,7 @@ test:do_test(
       WHERE b=883
          OR b=311
          OR b=880
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR a=88
          OR b=154
@@ -21048,7 +21048,7 @@ test:do_test(
       WHERE b=883
          OR b=311
          OR b=880
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR a=88
          OR b=154
@@ -21067,12 +21067,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='onmlkji' AND f GLOB 'xyzab*')
+      WHERE (g='onmlkji' AND f LIKE 'xyzab%')
          OR a=10
          OR b=190
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 67 AND 69) AND a!=68)
          OR b=385
          OR a=82
@@ -21090,12 +21090,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='onmlkji' AND f GLOB 'xyzab*')
+      WHERE (g='onmlkji' AND f LIKE 'xyzab%')
          OR a=10
          OR b=190
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 67 AND 69) AND a!=68)
          OR b=385
          OR a=82
@@ -21151,7 +21151,7 @@ test:do_test(
          OR a=49
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR c=33033
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
          OR g IS NULL
          OR b=220
@@ -21174,7 +21174,7 @@ test:do_test(
          OR a=49
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR c=33033
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
          OR g IS NULL
          OR b=220
@@ -21191,7 +21191,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
+      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=212
          OR b=418
          OR ((a BETWEEN 31 AND 33) AND a!=32)
@@ -21207,7 +21207,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
+      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=212
          OR b=418
          OR ((a BETWEEN 31 AND 33) AND a!=32)
@@ -21283,8 +21283,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'jklmn*')
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+      WHERE (g='hgfedcb' AND f LIKE 'jklmn%')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
   ]])
     end, {
         -- <where7-2.569.1>
@@ -21297,8 +21297,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'jklmn*')
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+      WHERE (g='hgfedcb' AND f LIKE 'jklmn%')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
   ]])
     end, {
         -- <where7-2.569.2>
@@ -21356,7 +21356,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=18018
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR b=410
          OR b=858
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
@@ -21373,7 +21373,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=18018
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR b=410
          OR b=858
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
@@ -21389,7 +21389,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ponmlkj' AND f GLOB 'vwxyz*')
+      WHERE (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR b=781
   ]])
     end, {
@@ -21403,7 +21403,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ponmlkj' AND f GLOB 'vwxyz*')
+      WHERE (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR b=781
   ]])
     end, {
@@ -21420,10 +21420,10 @@ test:do_test(
       WHERE b=1070
          OR ((a BETWEEN 50 AND 52) AND a!=51)
          OR a=54
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR a=9
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -21440,10 +21440,10 @@ test:do_test(
       WHERE b=1070
          OR ((a BETWEEN 50 AND 52) AND a!=51)
          OR a=54
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR a=9
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -21460,8 +21460,8 @@ test:do_test(
       WHERE a=55
          OR a=62
          OR a=63
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
          OR ((a BETWEEN 99 AND 101) AND a!=100)
   ]])
     end, {
@@ -21478,8 +21478,8 @@ test:do_test(
       WHERE a=55
          OR a=62
          OR a=63
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
          OR ((a BETWEEN 99 AND 101) AND a!=100)
   ]])
     end, {
@@ -21527,9 +21527,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=553
          OR ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=583
          OR a=56
   ]])
@@ -21546,9 +21546,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=553
          OR ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=583
          OR a=56
   ]])
@@ -21565,7 +21565,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=83
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR a=1
          OR ((a BETWEEN 17 AND 19) AND a!=18)
          OR ((a BETWEEN 49 AND 51) AND a!=50)
@@ -21584,7 +21584,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=83
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR a=1
          OR ((a BETWEEN 17 AND 19) AND a!=18)
          OR ((a BETWEEN 49 AND 51) AND a!=50)
@@ -21635,7 +21635,7 @@ test:do_test(
          OR a=92
          OR a=63
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.579.1>
@@ -21652,7 +21652,7 @@ test:do_test(
          OR a=92
          OR a=63
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.579.2>
@@ -21668,7 +21668,7 @@ test:do_test(
       WHERE b=440
          OR f='vwxyzabcd'
          OR b=190
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
          OR b=88
          OR b=58
@@ -21687,7 +21687,7 @@ test:do_test(
       WHERE b=440
          OR f='vwxyzabcd'
          OR b=190
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
          OR b=88
          OR b=58
@@ -21707,7 +21707,7 @@ test:do_test(
          OR c=24024
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
          OR b=1001
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR d>1e10
          OR b=531
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
@@ -21728,7 +21728,7 @@ test:do_test(
          OR c=24024
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
          OR b=1001
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR d>1e10
          OR b=531
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
@@ -21774,7 +21774,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 71 AND 73) AND a!=72)
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR ((a BETWEEN 91 AND 93) AND a!=92)
@@ -21795,7 +21795,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 71 AND 73) AND a!=72)
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR ((a BETWEEN 91 AND 93) AND a!=92)
@@ -21820,8 +21820,8 @@ test:do_test(
          OR b=806
          OR b=605
          OR ((a BETWEEN 23 AND 25) AND a!=24)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
   ]])
     end, {
         -- <where7-2.584.1>
@@ -21839,8 +21839,8 @@ test:do_test(
          OR b=806
          OR b=605
          OR ((a BETWEEN 23 AND 25) AND a!=24)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
   ]])
     end, {
         -- <where7-2.584.2>
@@ -21856,9 +21856,9 @@ test:do_test(
       WHERE ((a BETWEEN 84 AND 86) AND a!=85)
          OR b=572
          OR c=10010
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=29
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
   ]])
     end, {
         -- <where7-2.585.1>
@@ -21874,9 +21874,9 @@ test:do_test(
       WHERE ((a BETWEEN 84 AND 86) AND a!=85)
          OR b=572
          OR c=10010
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=29
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
   ]])
     end, {
         -- <where7-2.585.2>
@@ -21962,9 +21962,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=5005
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR b=143
          OR a=68
          OR a=77
@@ -21982,9 +21982,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=5005
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR b=143
          OR a=68
          OR a=77
@@ -22002,10 +22002,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=5.0 AND d<6.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
          OR ((a BETWEEN 76 AND 78) AND a!=77)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=99
          OR ((a BETWEEN 12 AND 14) AND a!=13)
   ]])
@@ -22021,10 +22021,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=5.0 AND d<6.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
          OR ((a BETWEEN 76 AND 78) AND a!=77)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=99
          OR ((a BETWEEN 12 AND 14) AND a!=13)
   ]])
@@ -22039,12 +22039,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'opqrs*')
+      WHERE (g='qponmlk' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 88 AND 90) AND a!=89)
          OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR b=971
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.590.1>
@@ -22057,12 +22057,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'opqrs*')
+      WHERE (g='qponmlk' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 88 AND 90) AND a!=89)
          OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR b=971
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.590.2>
@@ -22075,12 +22075,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?lmno*' AND f GLOB 'klmn*')
+      WHERE (f LIKE '_lmno%' AND f LIKE 'klmn%')
          OR b=806
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR b=1015
          OR ((a BETWEEN 68 AND 70) AND a!=69)
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
   ]])
     end, {
         -- <where7-2.591.1>
@@ -22093,12 +22093,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?lmno*' AND f GLOB 'klmn*')
+      WHERE (f LIKE '_lmno%' AND f LIKE 'klmn%')
          OR b=806
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR b=1015
          OR ((a BETWEEN 68 AND 70) AND a!=69)
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
   ]])
     end, {
         -- <where7-2.591.2>
@@ -22119,7 +22119,7 @@ test:do_test(
          OR a=26
          OR b=1048
          OR b=561
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR ((a BETWEEN 55 AND 57) AND a!=56)
          OR a=56
   ]])
@@ -22142,7 +22142,7 @@ test:do_test(
          OR a=26
          OR b=1048
          OR b=561
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR ((a BETWEEN 55 AND 57) AND a!=56)
          OR a=56
   ]])
@@ -22165,7 +22165,7 @@ test:do_test(
          OR b=113
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
          OR b=385
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.593.1>
@@ -22186,7 +22186,7 @@ test:do_test(
          OR b=113
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
          OR b=385
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.593.2>
@@ -22204,7 +22204,7 @@ test:do_test(
          OR b=674
          OR b=825
          OR b=704
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR a=76
@@ -22227,7 +22227,7 @@ test:do_test(
          OR b=674
          OR b=825
          OR b=704
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR a=76
@@ -22246,7 +22246,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=869
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.595.1>
@@ -22260,7 +22260,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=869
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.595.2>
@@ -22303,12 +22303,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='rqponml' AND f GLOB 'hijkl*')
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+      WHERE (g='rqponml' AND f LIKE 'hijkl%')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR a=8
          OR a=72
          OR ((a BETWEEN 95 AND 97) AND a!=96)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.597.1>
@@ -22321,12 +22321,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='rqponml' AND f GLOB 'hijkl*')
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+      WHERE (g='rqponml' AND f LIKE 'hijkl%')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR a=8
          OR a=72
          OR ((a BETWEEN 95 AND 97) AND a!=96)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.597.2>
@@ -22342,7 +22342,7 @@ test:do_test(
       WHERE a=20
          OR ((a BETWEEN 74 AND 76) AND a!=75)
          OR b=341
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=814
          OR b=1026
          OR a=14
@@ -22364,7 +22364,7 @@ test:do_test(
       WHERE a=20
          OR ((a BETWEEN 74 AND 76) AND a!=75)
          OR b=341
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=814
          OR b=1026
          OR a=14
@@ -22387,8 +22387,8 @@ test:do_test(
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR b=839
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR c=7007
   ]])
     end, {
@@ -22406,8 +22406,8 @@ test:do_test(
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR b=839
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR c=7007
   ]])
     end, {
@@ -22421,7 +22421,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
+      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR a=21
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
          OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
@@ -22443,7 +22443,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
+      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR a=21
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
          OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
@@ -22469,11 +22469,11 @@ test:do_test(
          OR f='bcdefghij'
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=762
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.601.1>
@@ -22490,11 +22490,11 @@ test:do_test(
          OR f='bcdefghij'
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=762
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.601.2>
@@ -22574,7 +22574,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=55.0 AND d<56.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR b=1067
          OR b=231
@@ -22595,7 +22595,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=55.0 AND d<56.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR b=1067
          OR b=231
@@ -22620,7 +22620,7 @@ test:do_test(
          OR b=396
          OR b=1059
          OR a=69
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR b=440
          OR b=825
   ]])
@@ -22640,7 +22640,7 @@ test:do_test(
          OR b=396
          OR b=1059
          OR a=69
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR b=440
          OR b=825
   ]])
@@ -22658,7 +22658,7 @@ test:do_test(
       WHERE (d>=26.0 AND d<27.0 AND d IS NOT NULL)
          OR b=308
          OR c<=10
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
          OR f='ghijklmno'
          OR b=289
          OR a=5
@@ -22680,7 +22680,7 @@ test:do_test(
       WHERE (d>=26.0 AND d<27.0 AND d IS NOT NULL)
          OR b=308
          OR c<=10
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
          OR f='ghijklmno'
          OR b=289
          OR a=5
@@ -22703,9 +22703,9 @@ test:do_test(
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
          OR b=993
          OR ((a BETWEEN 43 AND 45) AND a!=44)
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR b=663
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR b=869
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
          OR b=121
@@ -22725,9 +22725,9 @@ test:do_test(
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
          OR b=993
          OR ((a BETWEEN 43 AND 45) AND a!=44)
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR b=663
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR b=869
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
          OR b=121
@@ -22743,9 +22743,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR b=770
   ]])
     end, {
@@ -22759,9 +22759,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR b=770
   ]])
     end, {
@@ -22776,10 +22776,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 80 AND 82) AND a!=81)
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.609.1>
@@ -22793,10 +22793,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 80 AND 82) AND a!=81)
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.609.2>
@@ -22855,16 +22855,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='onmlkji' AND f GLOB 'zabcd*')
+      WHERE (g='onmlkji' AND f LIKE 'zabcd%')
          OR b=1092
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR a=77
          OR a=63
          OR b=762
          OR b=894
          OR b=685
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.611.1>
@@ -22877,16 +22877,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='onmlkji' AND f GLOB 'zabcd*')
+      WHERE (g='onmlkji' AND f LIKE 'zabcd%')
          OR b=1092
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR a=77
          OR a=63
          OR b=762
          OR b=894
          OR b=685
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.611.2>
@@ -22899,7 +22899,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'klmno*')
+      WHERE (g='wvutsrq' AND f LIKE 'klmno%')
          OR ((a BETWEEN 93 AND 95) AND a!=94)
          OR b=231
   ]])
@@ -22914,7 +22914,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'klmno*')
+      WHERE (g='wvutsrq' AND f LIKE 'klmno%')
          OR ((a BETWEEN 93 AND 95) AND a!=94)
          OR b=231
   ]])
@@ -22930,7 +22930,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=828
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
   ]])
     end, {
@@ -22945,7 +22945,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=828
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
   ]])
     end, {
@@ -22959,13 +22959,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?opqr*' AND f GLOB 'nopq*')
+      WHERE (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR b=520
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR a=21
   ]])
     end, {
@@ -22979,13 +22979,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?opqr*' AND f GLOB 'nopq*')
+      WHERE (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR b=520
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR a=21
   ]])
     end, {
@@ -23000,7 +23000,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=553
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
          OR b=1034
          OR b=418
          OR a=57
@@ -23019,7 +23019,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=553
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
          OR b=1034
          OR b=418
          OR a=57
@@ -23038,9 +23038,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=43
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR b=418
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
          OR b=594
          OR a=21
@@ -23060,9 +23060,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=43
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR b=418
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
          OR b=594
          OR a=21
@@ -23082,7 +23082,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=671
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 95 AND 97) AND a!=96)
   ]])
     end, {
@@ -23097,7 +23097,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=671
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 95 AND 97) AND a!=96)
   ]])
     end, {
@@ -23148,7 +23148,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=806
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR b=275
@@ -23166,7 +23166,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=806
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR b=275
@@ -23184,12 +23184,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=24024
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR b=429
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR b=110
          OR a=39
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.620.1>
@@ -23203,12 +23203,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=24024
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR b=429
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR b=110
          OR a=39
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.620.2>
@@ -23287,7 +23287,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=509
          OR ((a BETWEEN 22 AND 24) AND a!=23)
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR b=718
          OR a=4
          OR ((a BETWEEN 56 AND 58) AND a!=57)
@@ -23307,7 +23307,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=509
          OR ((a BETWEEN 22 AND 24) AND a!=23)
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR b=718
          OR a=4
          OR ((a BETWEEN 56 AND 58) AND a!=57)
@@ -23325,7 +23325,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=1026
          OR a=93
          OR c=18018
@@ -23341,7 +23341,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=1026
          OR a=93
          OR c=18018
@@ -23422,11 +23422,11 @@ test:do_test(
       WHERE b=990
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR ((a BETWEEN 41 AND 43) AND a!=42)
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
          OR b=531
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR f='qrstuvwxy'
   ]])
     end, {
@@ -23443,11 +23443,11 @@ test:do_test(
       WHERE b=990
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR ((a BETWEEN 41 AND 43) AND a!=42)
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
          OR b=531
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR f='qrstuvwxy'
   ]])
     end, {
@@ -23462,9 +23462,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=60
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR b=627
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
          OR b=883
@@ -23484,9 +23484,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=60
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR b=627
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
          OR b=883
@@ -23572,13 +23572,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=28
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR b=69
          OR ((a BETWEEN 85 AND 87) AND a!=86)
          OR b=781
          OR a=64
          OR b=91
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR a=16
          OR b=278
          OR a=26
@@ -23595,13 +23595,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=28
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR b=69
          OR ((a BETWEEN 85 AND 87) AND a!=86)
          OR b=781
          OR a=64
          OR b=91
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR a=16
          OR b=278
          OR a=26
@@ -23710,7 +23710,7 @@ test:do_test(
       WHERE f='yzabcdefg'
          OR ((a BETWEEN 48 AND 50) AND a!=49)
          OR a=100
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
          OR a=62
          OR a=67
          OR b=605
@@ -23733,7 +23733,7 @@ test:do_test(
       WHERE f='yzabcdefg'
          OR ((a BETWEEN 48 AND 50) AND a!=49)
          OR a=100
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
          OR a=62
          OR a=67
          OR b=605
@@ -23787,9 +23787,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
+      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR b=751
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR a=67
          OR b=102
@@ -23805,9 +23805,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
+      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR b=751
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR a=67
          OR b=102
@@ -23862,14 +23862,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=2002
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR ((a BETWEEN 41 AND 43) AND a!=42)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR b=33
          OR b=817
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -23884,14 +23884,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=2002
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR ((a BETWEEN 41 AND 43) AND a!=42)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR b=33
          OR b=817
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -23905,8 +23905,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='srqponm' AND f GLOB 'cdefg*')
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+      WHERE (g='srqponm' AND f LIKE 'cdefg%')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR a=80
          OR a=53
          OR a=62
@@ -23926,8 +23926,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='srqponm' AND f GLOB 'cdefg*')
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+      WHERE (g='srqponm' AND f LIKE 'cdefg%')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR a=80
          OR a=53
          OR a=62
@@ -23951,7 +23951,7 @@ test:do_test(
          OR b=652
          OR a=72
          OR b=209
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR a=38
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR d>1e10
@@ -23971,7 +23971,7 @@ test:do_test(
          OR b=652
          OR a=72
          OR b=209
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR a=38
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR d>1e10
@@ -24016,11 +24016,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=179
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR b=509
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR f='bcdefghij'
   ]])
     end, {
@@ -24035,11 +24035,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=179
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR b=509
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR f='bcdefghij'
   ]])
     end, {
@@ -24149,13 +24149,13 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR b=421
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=704
          OR a=90
          OR a=78
          OR 1000000<b
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
   ]])
     end, {
@@ -24171,13 +24171,13 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR b=421
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=704
          OR a=90
          OR a=78
          OR 1000000<b
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
   ]])
     end, {
@@ -24191,7 +24191,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'pqrst*')
+      WHERE (g='fedcbaz' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 93 AND 95) AND a!=94)
   ]])
     end, {
@@ -24205,7 +24205,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'pqrst*')
+      WHERE (g='fedcbaz' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 93 AND 95) AND a!=94)
   ]])
     end, {
@@ -24226,7 +24226,7 @@ test:do_test(
          OR ((a BETWEEN 25 AND 27) AND a!=26)
          OR e IS NULL
          OR a=48
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.649.1>
@@ -24246,7 +24246,7 @@ test:do_test(
          OR ((a BETWEEN 25 AND 27) AND a!=26)
          OR e IS NULL
          OR a=48
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.649.2>
@@ -24292,7 +24292,7 @@ test:do_test(
       WHERE b=275
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
          OR f='ijklmnopq'
   ]])
@@ -24310,7 +24310,7 @@ test:do_test(
       WHERE b=275
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
          OR f='ijklmnopq'
   ]])
@@ -24360,7 +24360,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='zabcdefgh'
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR a=54
          OR b=770
          OR ((a BETWEEN 96 AND 98) AND a!=97)
@@ -24380,7 +24380,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='zabcdefgh'
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR a=54
          OR b=770
          OR ((a BETWEEN 96 AND 98) AND a!=97)
@@ -24446,7 +24446,7 @@ test:do_test(
       WHERE b=223
          OR a=14
          OR ((a BETWEEN 74 AND 76) AND a!=75)
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR b=539
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
@@ -24467,7 +24467,7 @@ test:do_test(
       WHERE b=223
          OR a=14
          OR ((a BETWEEN 74 AND 76) AND a!=75)
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR b=539
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
@@ -24486,7 +24486,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=99
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR a=73
          OR a=56
          OR b=253
@@ -24504,7 +24504,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=99
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR a=73
          OR a=56
          OR b=253
@@ -24524,8 +24524,8 @@ test:do_test(
       WHERE b=927
          OR b=300
          OR b=223
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=154
          OR b=759
   ]])
@@ -24543,8 +24543,8 @@ test:do_test(
       WHERE b=927
          OR b=300
          OR b=223
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=154
          OR b=759
   ]])
@@ -24562,7 +24562,7 @@ test:do_test(
       WHERE b=242
          OR b=905
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
          OR a=24
          OR ((a BETWEEN 67 AND 69) AND a!=68)
@@ -24584,7 +24584,7 @@ test:do_test(
       WHERE b=242
          OR b=905
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
          OR a=24
          OR ((a BETWEEN 67 AND 69) AND a!=68)
@@ -24606,10 +24606,10 @@ test:do_test(
       WHERE b=190
          OR a=72
          OR b=377
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
          OR b=476
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.659.1>
@@ -24625,10 +24625,10 @@ test:do_test(
       WHERE b=190
          OR a=72
          OR b=377
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
          OR b=476
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.659.2>
@@ -24644,12 +24644,12 @@ test:do_test(
       WHERE b=245
          OR b=638
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR f='opqrstuvw'
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
          OR b=817
          OR a=85
-         OR (g='lkjihgf' AND f GLOB 'mnopq*')
+         OR (g='lkjihgf' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.660.1>
@@ -24665,12 +24665,12 @@ test:do_test(
       WHERE b=245
          OR b=638
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR f='opqrstuvw'
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
          OR b=817
          OR a=85
-         OR (g='lkjihgf' AND f GLOB 'mnopq*')
+         OR (g='lkjihgf' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.660.2>
@@ -24749,9 +24749,9 @@ test:do_test(
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
          OR c<=10
          OR ((a BETWEEN 75 AND 77) AND a!=76)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=553
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR b=1045
   ]])
     end, {
@@ -24769,9 +24769,9 @@ test:do_test(
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
          OR c<=10
          OR ((a BETWEEN 75 AND 77) AND a!=76)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=553
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR b=1045
   ]])
     end, {
@@ -24788,12 +24788,12 @@ test:do_test(
       WHERE b=440
          OR ((a BETWEEN 3 AND 5) AND a!=4)
          OR ((a BETWEEN 44 AND 46) AND a!=45)
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR a=89
          OR c=18018
          OR b=154
          OR b=506
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR a=78
          OR b=751
   ]])
@@ -24811,12 +24811,12 @@ test:do_test(
       WHERE b=440
          OR ((a BETWEEN 3 AND 5) AND a!=4)
          OR ((a BETWEEN 44 AND 46) AND a!=45)
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR a=89
          OR c=18018
          OR b=154
          OR b=506
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR a=78
          OR b=751
   ]])
@@ -24832,13 +24832,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=407
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR b=209
          OR b=814
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR a=44
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
          OR b=1092
   ]])
@@ -24854,13 +24854,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=407
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR b=209
          OR b=814
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR a=44
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
          OR b=1092
   ]])
@@ -25002,10 +25002,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=27
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR b=121
          OR ((a BETWEEN 7 AND 9) AND a!=8)
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=67
          OR ((a BETWEEN 30 AND 32) AND a!=31)
          OR c=1001
@@ -25024,10 +25024,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=27
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR b=121
          OR ((a BETWEEN 7 AND 9) AND a!=8)
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=67
          OR ((a BETWEEN 30 AND 32) AND a!=31)
          OR c=1001
@@ -25046,7 +25046,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=99
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
@@ -25063,7 +25063,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=99
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
@@ -25083,9 +25083,9 @@ test:do_test(
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
          OR b=355
          OR b=814
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR a=81
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=542
          OR b=795
   ]])
@@ -25104,9 +25104,9 @@ test:do_test(
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
          OR b=355
          OR b=814
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR a=81
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=542
          OR b=795
   ]])
@@ -25124,10 +25124,10 @@ test:do_test(
       WHERE (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR b=363
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR b=619
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR a=73
   ]])
     end, {
@@ -25144,10 +25144,10 @@ test:do_test(
       WHERE (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR b=363
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR b=619
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR a=73
   ]])
     end, {
@@ -25163,9 +25163,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=935
          OR a=42
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR b=330
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.673.1>
@@ -25180,9 +25180,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=935
          OR a=42
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR b=330
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.673.2>
@@ -25201,7 +25201,7 @@ test:do_test(
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
          OR a=64
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR a=89
   ]])
     end, {
@@ -25221,7 +25221,7 @@ test:do_test(
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
          OR a=64
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR a=89
   ]])
     end, {
@@ -25240,9 +25240,9 @@ test:do_test(
          OR b=663
          OR c=17017
          OR b=561
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=495
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR b=352
          OR ((a BETWEEN 39 AND 41) AND a!=40)
   ]])
@@ -25262,9 +25262,9 @@ test:do_test(
          OR b=663
          OR c=17017
          OR b=561
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=495
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR b=352
          OR ((a BETWEEN 39 AND 41) AND a!=40)
   ]])
@@ -25280,7 +25280,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=100.0 AND d<101.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR f='klmnopqrs'
          OR f='lmnopqrst'
   ]])
@@ -25296,7 +25296,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=100.0 AND d<101.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR f='klmnopqrs'
          OR f='lmnopqrst'
   ]])
@@ -25342,16 +25342,16 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=36
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 18 AND 20) AND a!=19)
          OR b=682
          OR ((a BETWEEN 53 AND 55) AND a!=54)
          OR b=91
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR c=12012
          OR b=267
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.678.1>
@@ -25365,16 +25365,16 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=36
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 18 AND 20) AND a!=19)
          OR b=682
          OR ((a BETWEEN 53 AND 55) AND a!=54)
          OR b=91
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR c=12012
          OR b=267
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.678.2>
@@ -25390,12 +25390,12 @@ test:do_test(
       WHERE b=594
          OR f='hijklmnop'
          OR ((a BETWEEN 65 AND 67) AND a!=66)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR b=707
          OR b=363
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=157
-         OR (g='tsrqpon' AND f GLOB 'yzabc*')
+         OR (g='tsrqpon' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.679.1>
@@ -25411,12 +25411,12 @@ test:do_test(
       WHERE b=594
          OR f='hijklmnop'
          OR ((a BETWEEN 65 AND 67) AND a!=66)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR b=707
          OR b=363
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=157
-         OR (g='tsrqpon' AND f GLOB 'yzabc*')
+         OR (g='tsrqpon' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.679.2>
@@ -25473,7 +25473,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'defgh*')
+      WHERE (g='nmlkjih' AND f LIKE 'defgh%')
          OR b=674
          OR ((a BETWEEN 38 AND 40) AND a!=39)
          OR c=3003
@@ -25492,7 +25492,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'defgh*')
+      WHERE (g='nmlkjih' AND f LIKE 'defgh%')
          OR b=674
          OR ((a BETWEEN 38 AND 40) AND a!=39)
          OR c=3003
@@ -25554,7 +25554,7 @@ test:do_test(
          OR b=707
          OR f='vwxyzabcd'
          OR b=286
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=693
          OR ((a BETWEEN 6 AND 8) AND a!=7)
   ]])
@@ -25576,7 +25576,7 @@ test:do_test(
          OR b=707
          OR f='vwxyzabcd'
          OR b=286
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=693
          OR ((a BETWEEN 6 AND 8) AND a!=7)
   ]])
@@ -25596,8 +25596,8 @@ test:do_test(
          OR a=52
          OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
          OR d<0.0
-         OR (g='rqponml' AND f GLOB 'jklmn*')
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR b=168
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR f='uvwxyzabc'
@@ -25619,8 +25619,8 @@ test:do_test(
          OR a=52
          OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
          OR d<0.0
-         OR (g='rqponml' AND f GLOB 'jklmn*')
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR b=168
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR f='uvwxyzabc'
@@ -25638,12 +25638,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 4 AND 6) AND a!=5)
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR f='rstuvwxyz'
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=14
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
   ]])
@@ -25659,12 +25659,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 4 AND 6) AND a!=5)
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR f='rstuvwxyz'
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=14
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
   ]])
@@ -25681,9 +25681,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 13 AND 15) AND a!=14)
          OR ((a BETWEEN 93 AND 95) AND a!=94)
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR f='mnopqrstu'
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR a=38
          OR c=26026
@@ -25701,9 +25701,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 13 AND 15) AND a!=14)
          OR ((a BETWEEN 93 AND 95) AND a!=94)
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR f='mnopqrstu'
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR a=38
          OR c=26026
@@ -25719,11 +25719,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ponmlkj' AND f GLOB 'stuvw*')
+      WHERE (g='ponmlkj' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR a=7
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
   ]])
     end, {
@@ -25737,11 +25737,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ponmlkj' AND f GLOB 'stuvw*')
+      WHERE (g='ponmlkj' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR a=7
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
   ]])
     end, {
@@ -25759,8 +25759,8 @@ test:do_test(
          OR b=938
          OR b=484
          OR b=652
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR f='opqrstuvw'
   ]])
     end, {
@@ -25778,8 +25778,8 @@ test:do_test(
          OR b=938
          OR b=484
          OR b=652
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR f='opqrstuvw'
   ]])
     end, {
@@ -25835,12 +25835,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=25
          OR ((a BETWEEN 43 AND 45) AND a!=44)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR b=443
          OR b=564
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=531
          OR b=1081
          OR a=96
@@ -25858,12 +25858,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=25
          OR ((a BETWEEN 43 AND 45) AND a!=44)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR b=443
          OR b=564
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=531
          OR b=1081
          OR a=96
@@ -25880,7 +25880,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=36
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.691.1>
@@ -25894,7 +25894,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=36
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.691.2>
@@ -25907,7 +25907,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'stuvw*')
+      WHERE (g='kjihgfe' AND f LIKE 'stuvw%')
          OR b=531
          OR ((a BETWEEN 93 AND 95) AND a!=94)
          OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
@@ -25923,7 +25923,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'stuvw*')
+      WHERE (g='kjihgfe' AND f LIKE 'stuvw%')
          OR b=531
          OR ((a BETWEEN 93 AND 95) AND a!=94)
          OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
@@ -25975,8 +25975,8 @@ test:do_test(
          OR b=718
          OR a=18
          OR a=3
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR c=28028
   ]])
     end, {
@@ -25998,8 +25998,8 @@ test:do_test(
          OR b=718
          OR a=18
          OR a=3
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR c=28028
   ]])
     end, {
@@ -26062,7 +26062,7 @@ test:do_test(
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
          OR ((a BETWEEN 30 AND 32) AND a!=31)
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -26081,7 +26081,7 @@ test:do_test(
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
          OR ((a BETWEEN 30 AND 32) AND a!=31)
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -26095,7 +26095,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='mlkjihg' AND f GLOB 'ijklm*')
+      WHERE (g='mlkjihg' AND f LIKE 'ijklm%')
          OR b=883
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR b=938
@@ -26115,7 +26115,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='mlkjihg' AND f GLOB 'ijklm*')
+      WHERE (g='mlkjihg' AND f LIKE 'ijklm%')
          OR b=883
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR b=938
@@ -26167,7 +26167,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'abcde*')
+      WHERE (g='tsrqpon' AND f LIKE 'abcde%')
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR ((a BETWEEN 74 AND 76) AND a!=75)
@@ -26185,7 +26185,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'abcde*')
+      WHERE (g='tsrqpon' AND f LIKE 'abcde%')
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR ((a BETWEEN 74 AND 76) AND a!=75)
@@ -26271,12 +26271,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?abcd*' AND f GLOB 'zabc*')
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
-         OR (g='srqponm' AND f GLOB 'cdefg*')
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+      WHERE (f LIKE '_abcd%' AND f LIKE 'zabc%')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR f='lmnopqrst'
          OR ((a BETWEEN 11 AND 13) AND a!=12)
          OR b=872
@@ -26294,12 +26294,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?abcd*' AND f GLOB 'zabc*')
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
-         OR (g='srqponm' AND f GLOB 'cdefg*')
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+      WHERE (f LIKE '_abcd%' AND f LIKE 'zabc%')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR f='lmnopqrst'
          OR ((a BETWEEN 11 AND 13) AND a!=12)
          OR b=872
@@ -26319,14 +26319,14 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 71 AND 73) AND a!=72)
          OR a=20
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR b=1004
          OR b=77
          OR b=927
          OR a=99
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
   ]])
     end, {
         -- <where7-2.703.1>
@@ -26341,14 +26341,14 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 71 AND 73) AND a!=72)
          OR a=20
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR b=1004
          OR b=77
          OR b=927
          OR a=99
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
   ]])
     end, {
         -- <where7-2.703.2>
@@ -26394,7 +26394,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=572
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.705.1>
@@ -26408,7 +26408,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=572
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.705.2>
@@ -26424,8 +26424,8 @@ test:do_test(
       WHERE (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR ((a BETWEEN 54 AND 56) AND a!=55)
          OR f='lmnopqrst'
-         OR (f GLOB '?lmno*' AND f GLOB 'klmn*')
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (f LIKE '_lmno%' AND f LIKE 'klmn%')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR a=23
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
   ]])
@@ -26443,8 +26443,8 @@ test:do_test(
       WHERE (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR ((a BETWEEN 54 AND 56) AND a!=55)
          OR f='lmnopqrst'
-         OR (f GLOB '?lmno*' AND f GLOB 'klmn*')
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (f LIKE '_lmno%' AND f LIKE 'klmn%')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR a=23
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
   ]])
@@ -26463,13 +26463,13 @@ test:do_test(
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR b=605
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
          OR b=759
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR ((a BETWEEN 38 AND 40) AND a!=39)
          OR a=40
          OR f='ghijklmno'
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.707.1>
@@ -26486,13 +26486,13 @@ test:do_test(
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR b=605
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
          OR b=759
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR ((a BETWEEN 38 AND 40) AND a!=39)
          OR a=40
          OR f='ghijklmno'
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.707.2>
@@ -26601,7 +26601,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'efghi*')
+      WHERE (g='nmlkjih' AND f LIKE 'efghi%')
          OR a=34
          OR ((a BETWEEN 6 AND 8) AND a!=7)
          OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
@@ -26619,7 +26619,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'efghi*')
+      WHERE (g='nmlkjih' AND f LIKE 'efghi%')
          OR a=34
          OR ((a BETWEEN 6 AND 8) AND a!=7)
          OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
@@ -26637,16 +26637,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
          OR a=52
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR f='ghijklmno'
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=319
          OR a=34
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR f='hijklmnop'
   ]])
     end, {
@@ -26660,16 +26660,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
          OR a=52
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR f='ghijklmno'
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=319
          OR a=34
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR f='hijklmnop'
   ]])
     end, {
@@ -26683,7 +26683,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
          OR a=47
@@ -26699,7 +26699,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
          OR a=47
@@ -26781,11 +26781,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE c=31031
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=256
          OR ((a BETWEEN 77 AND 79) AND a!=78)
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=715
          OR b=212
          OR b=99
@@ -26804,11 +26804,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE c=31031
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=256
          OR ((a BETWEEN 77 AND 79) AND a!=78)
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=715
          OR b=212
          OR b=99
@@ -26899,7 +26899,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 62 AND 64) AND a!=63)
   ]])
     end, {
@@ -26913,7 +26913,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 62 AND 64) AND a!=63)
   ]])
     end, {
@@ -26929,11 +26929,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 43 AND 45) AND a!=44)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR a=43
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
          OR b=729
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.720.1>
@@ -26948,11 +26948,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 43 AND 45) AND a!=44)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR a=43
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
          OR b=729
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.720.2>
@@ -26972,7 +26972,7 @@ test:do_test(
          OR c=8008
          OR f='opqrstuvw'
          OR ((a BETWEEN 23 AND 25) AND a!=24)
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.721.1>
@@ -26992,7 +26992,7 @@ test:do_test(
          OR c=8008
          OR f='opqrstuvw'
          OR ((a BETWEEN 23 AND 25) AND a!=24)
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.721.2>
@@ -27008,9 +27008,9 @@ test:do_test(
       WHERE ((a BETWEEN 40 AND 42) AND a!=41)
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
          OR c<=10
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR a=35
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=1089
          OR a=73
          OR b=737
@@ -27031,9 +27031,9 @@ test:do_test(
       WHERE ((a BETWEEN 40 AND 42) AND a!=41)
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
          OR c<=10
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR a=35
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=1089
          OR a=73
          OR b=737
@@ -27053,7 +27053,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 0 AND 2) AND a!=1)
          OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=762
          OR ((a BETWEEN 39 AND 41) AND a!=40)
          OR a=80
@@ -27071,7 +27071,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 0 AND 2) AND a!=1)
          OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=762
          OR ((a BETWEEN 39 AND 41) AND a!=40)
          OR a=80
@@ -27092,10 +27092,10 @@ test:do_test(
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR b=979
          OR a=36
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR a=55
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.724.1>
@@ -27113,10 +27113,10 @@ test:do_test(
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR b=979
          OR a=36
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR a=55
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.724.2>
@@ -27131,8 +27131,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=75
          OR a=61
-         OR (g='onmlkji' AND f GLOB 'abcde*')
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.725.1>
@@ -27147,8 +27147,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=75
          OR a=61
-         OR (g='onmlkji' AND f GLOB 'abcde*')
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.725.2>
@@ -27162,7 +27162,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1004
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
          OR a=56
   ]])
@@ -27178,7 +27178,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1004
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
          OR a=56
   ]])
@@ -27194,13 +27194,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=93
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR a=83
          OR b=828
          OR b=454
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR b=924
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
          OR a=50
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
   ]])
@@ -27216,13 +27216,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=93
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR a=83
          OR b=828
          OR b=454
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR b=924
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
          OR a=50
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
   ]])
@@ -27269,7 +27269,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=55
          OR a=65
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
   ]])
     end, {
         -- <where7-2.729.1>
@@ -27284,7 +27284,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=55
          OR a=65
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
   ]])
     end, {
         -- <where7-2.729.2>
@@ -27300,7 +27300,7 @@ test:do_test(
       WHERE ((a BETWEEN 72 AND 74) AND a!=73)
          OR b=605
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 72 AND 74) AND a!=73)
          OR f='ijklmnopq'
          OR ((a BETWEEN 86 AND 88) AND a!=87)
@@ -27322,7 +27322,7 @@ test:do_test(
       WHERE ((a BETWEEN 72 AND 74) AND a!=73)
          OR b=605
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 72 AND 74) AND a!=73)
          OR f='ijklmnopq'
          OR ((a BETWEEN 86 AND 88) AND a!=87)
@@ -27342,7 +27342,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=476
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR b=982
          OR a=43
          OR b=355
@@ -27359,7 +27359,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=476
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR b=982
          OR a=43
          OR b=355
@@ -27377,8 +27377,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=85
          OR b=718
-         OR (g='fedcbaz' AND f GLOB 'pqrst*')
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (g='fedcbaz' AND f LIKE 'pqrst%')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -27394,8 +27394,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=85
          OR b=718
-         OR (g='fedcbaz' AND f GLOB 'pqrst*')
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (g='fedcbaz' AND f LIKE 'pqrst%')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -27515,12 +27515,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
+      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR b=465
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR a=37
          OR b=1056
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR (d>=4.0 AND d<5.0 AND d IS NOT NULL)
          OR b=1023
   ]])
@@ -27535,12 +27535,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
+      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR b=465
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR a=37
          OR b=1056
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR (d>=4.0 AND d<5.0 AND d IS NOT NULL)
          OR b=1023
   ]])
@@ -27557,7 +27557,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=76
          OR a=8
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR b=495
          OR b=663
          OR a=98
@@ -27576,7 +27576,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=76
          OR a=8
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR b=495
          OR b=663
          OR a=98
@@ -27595,7 +27595,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1081
          OR b=542
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR b=828
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
@@ -27615,7 +27615,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1081
          OR b=542
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR b=828
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
@@ -27745,9 +27745,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=880
          OR b=696
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR b=308
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 96 AND 98) AND a!=97)
   ]])
     end, {
@@ -27763,9 +27763,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=880
          OR b=696
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR b=308
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 96 AND 98) AND a!=97)
   ]])
     end, {
@@ -27779,7 +27779,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR a=24
          OR f IS NULL
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
@@ -27798,7 +27798,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR a=24
          OR f IS NULL
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
@@ -27819,7 +27819,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=94
          OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR b=792
          OR a=77
          OR a=26
@@ -27839,7 +27839,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=94
          OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR b=792
          OR a=77
          OR a=26
@@ -27935,11 +27935,11 @@ test:do_test(
          OR c=19019
          OR a=42
          OR b=938
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR ((a BETWEEN 22 AND 24) AND a!=23)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.747.1>
@@ -27958,11 +27958,11 @@ test:do_test(
          OR c=19019
          OR a=42
          OR b=938
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR ((a BETWEEN 22 AND 24) AND a!=23)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.747.2>
@@ -27977,7 +27977,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=179
          OR a=50
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.748.1>
@@ -27992,7 +27992,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=179
          OR a=50
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.748.2>
@@ -28005,12 +28005,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='vutsrqp' AND f GLOB 'rstuv*')
+      WHERE (g='vutsrqp' AND f LIKE 'rstuv%')
          OR f='xyzabcdef'
          OR ((a BETWEEN 49 AND 51) AND a!=50)
          OR b=575
          OR b=385
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR a=46
          OR b=220
@@ -28027,12 +28027,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='vutsrqp' AND f GLOB 'rstuv*')
+      WHERE (g='vutsrqp' AND f LIKE 'rstuv%')
          OR f='xyzabcdef'
          OR ((a BETWEEN 49 AND 51) AND a!=50)
          OR b=575
          OR b=385
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR a=46
          OR b=220
@@ -28055,7 +28055,7 @@ test:do_test(
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
          OR c=31031
          OR b=869
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=245
          OR a=92
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
@@ -28078,7 +28078,7 @@ test:do_test(
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
          OR c=31031
          OR b=869
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=245
          OR a=92
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
@@ -28099,8 +28099,8 @@ test:do_test(
          OR c=28028
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR ((a BETWEEN 17 AND 19) AND a!=18)
          OR c=9009
          OR a=17
@@ -28121,8 +28121,8 @@ test:do_test(
          OR c=28028
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR ((a BETWEEN 17 AND 19) AND a!=18)
          OR c=9009
          OR a=17
@@ -28141,7 +28141,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=57.0 AND d<58.0 AND d IS NOT NULL)
          OR b=762
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR f='tuvwxyzab'
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
@@ -28161,7 +28161,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=57.0 AND d<58.0 AND d IS NOT NULL)
          OR b=762
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR f='tuvwxyzab'
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
@@ -28219,7 +28219,7 @@ test:do_test(
          OR a=14
          OR c=16016
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR f='jklmnopqr'
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
          OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
@@ -28240,7 +28240,7 @@ test:do_test(
          OR a=14
          OR c=16016
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR f='jklmnopqr'
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
          OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
@@ -28258,12 +28258,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=949
-         OR (g='srqponm' AND f GLOB 'cdefg*')
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR c<=10
          OR a=14
          OR b=608
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
          OR b=121
          OR b=333
@@ -28281,12 +28281,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=949
-         OR (g='srqponm' AND f GLOB 'cdefg*')
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR c<=10
          OR a=14
          OR b=608
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
          OR b=121
          OR b=333
@@ -28303,7 +28303,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=355
          OR b=627
          OR b=1001
@@ -28321,7 +28321,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=355
          OR b=627
          OR b=1001
@@ -28339,7 +28339,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
+      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
          OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -28353,7 +28353,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
+      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
          OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -28370,11 +28370,11 @@ test:do_test(
       WHERE b=685
          OR a=14
          OR b=990
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR f='efghijklm'
          OR c=1001
          OR b=784
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -28391,11 +28391,11 @@ test:do_test(
       WHERE b=685
          OR a=14
          OR b=990
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR f='efghijklm'
          OR c=1001
          OR b=784
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -28410,7 +28410,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=54
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR c=26026
          OR ((a BETWEEN 97 AND 99) AND a!=98)
   ]])
@@ -28426,7 +28426,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=54
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR c=26026
          OR ((a BETWEEN 97 AND 99) AND a!=98)
   ]])
@@ -28441,13 +28441,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'ghijk*')
+      WHERE (g='hgfedcb' AND f LIKE 'ghijk%')
          OR c=24024
          OR a=98
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR a=5
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR f='pqrstuvwx'
          OR f='bcdefghij'
          OR b=1001
@@ -28464,13 +28464,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'ghijk*')
+      WHERE (g='hgfedcb' AND f LIKE 'ghijk%')
          OR c=24024
          OR a=98
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR a=5
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR f='pqrstuvwx'
          OR f='bcdefghij'
          OR b=1001
@@ -28488,11 +28488,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=781
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR f='lmnopqrst'
          OR a=39
          OR a=100
@@ -28510,11 +28510,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=781
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR f='lmnopqrst'
          OR a=39
          OR a=100
@@ -28533,11 +28533,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE c=4004
          OR b=718
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR a=50
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
          OR b=363
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
          OR b=1023
   ]])
     end, {
@@ -28553,11 +28553,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE c=4004
          OR b=718
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR a=50
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
          OR b=363
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
          OR b=1023
   ]])
     end, {
@@ -28576,8 +28576,8 @@ test:do_test(
          OR b=473
          OR ((a BETWEEN 43 AND 45) AND a!=44)
          OR b=586
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
   ]])
     end, {
         -- <where7-2.763.1>
@@ -28595,8 +28595,8 @@ test:do_test(
          OR b=473
          OR ((a BETWEEN 43 AND 45) AND a!=44)
          OR b=586
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
   ]])
     end, {
         -- <where7-2.763.2>
@@ -28609,7 +28609,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+      WHERE (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
          OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
   ]])
@@ -28624,7 +28624,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+      WHERE (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
          OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
   ]])
@@ -28639,11 +28639,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR ((a BETWEEN 76 AND 78) AND a!=77)
          OR a=47
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
          OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
          OR f='lmnopqrst'
   ]])
@@ -28658,11 +28658,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR ((a BETWEEN 76 AND 78) AND a!=77)
          OR a=47
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
          OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
          OR f='lmnopqrst'
   ]])
@@ -28680,7 +28680,7 @@ test:do_test(
       WHERE c>=34035
          OR a=29
          OR ((a BETWEEN 19 AND 21) AND a!=20)
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR f='abcdefghi'
          OR b=993
          OR ((a BETWEEN 52 AND 54) AND a!=53)
@@ -28700,7 +28700,7 @@ test:do_test(
       WHERE c>=34035
          OR a=29
          OR ((a BETWEEN 19 AND 21) AND a!=20)
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR f='abcdefghi'
          OR b=993
          OR ((a BETWEEN 52 AND 54) AND a!=53)
@@ -28878,7 +28878,7 @@ test:do_test(
       WHERE ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=1045
          OR c=27027
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
   ]])
     end, {
         -- <where7-2.771.1>
@@ -28894,7 +28894,7 @@ test:do_test(
       WHERE ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=1045
          OR c=27027
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
   ]])
     end, {
         -- <where7-2.771.2>
@@ -28910,7 +28910,7 @@ test:do_test(
       WHERE a=87
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR b=487
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.772.1>
@@ -28926,7 +28926,7 @@ test:do_test(
       WHERE a=87
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR b=487
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.772.2>
@@ -29018,10 +29018,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=220
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=363
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR ((a BETWEEN 10 AND 12) AND a!=11)
   ]])
@@ -29037,10 +29037,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=220
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=363
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR ((a BETWEEN 10 AND 12) AND a!=11)
   ]])
@@ -29096,8 +29096,8 @@ test:do_test(
       WHERE b=1059
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR b=960
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=894
          OR c=2002
   ]])
@@ -29115,8 +29115,8 @@ test:do_test(
       WHERE b=1059
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR b=960
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=894
          OR c=2002
   ]])
@@ -29132,7 +29132,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=14
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.778.1>
@@ -29146,7 +29146,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=14
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.778.2>
@@ -29160,7 +29160,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=806
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR b=795
          OR ((a BETWEEN 99 AND 101) AND a!=100)
          OR ((a BETWEEN 21 AND 23) AND a!=22)
@@ -29180,7 +29180,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=806
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR b=795
          OR ((a BETWEEN 99 AND 101) AND a!=100)
          OR ((a BETWEEN 21 AND 23) AND a!=22)
@@ -29200,7 +29200,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=726
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR f='abcdefghi'
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
@@ -29218,7 +29218,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=726
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR f='abcdefghi'
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
@@ -29238,7 +29238,7 @@ test:do_test(
       WHERE a=59
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR b=1081
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.781.1>
@@ -29254,7 +29254,7 @@ test:do_test(
       WHERE a=59
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR b=1081
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.781.2>
@@ -29267,15 +29267,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'nopqr*')
+      WHERE (g='qponmlk' AND f LIKE 'nopqr%')
          OR b=1037
          OR b=132
          OR c=1001
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=32
   ]])
     end, {
@@ -29289,15 +29289,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'nopqr*')
+      WHERE (g='qponmlk' AND f LIKE 'nopqr%')
          OR b=1037
          OR b=132
          OR c=1001
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=32
   ]])
     end, {
@@ -29355,7 +29355,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
+      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=1001
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR a=83
@@ -29371,7 +29371,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
+      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=1001
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR a=83
@@ -29389,13 +29389,13 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR b=36
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR ((a BETWEEN 46 AND 48) AND a!=47)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR ((a BETWEEN 26 AND 28) AND a!=27)
   ]])
@@ -29412,13 +29412,13 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR b=36
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR ((a BETWEEN 46 AND 48) AND a!=47)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR ((a BETWEEN 26 AND 28) AND a!=27)
   ]])
@@ -29434,7 +29434,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=69
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR a=98
          OR b=300
@@ -29456,7 +29456,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=69
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR a=98
          OR b=300
@@ -29480,8 +29480,8 @@ test:do_test(
       WHERE ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
          OR ((a BETWEEN 94 AND 96) AND a!=95)
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR b=619
          OR c=6006
@@ -29503,8 +29503,8 @@ test:do_test(
       WHERE ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
          OR ((a BETWEEN 94 AND 96) AND a!=95)
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR b=619
          OR c=6006
@@ -29525,7 +29525,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 9 AND 11) AND a!=10)
          OR a=55
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.788.1>
@@ -29540,7 +29540,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 9 AND 11) AND a!=10)
          OR a=55
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.788.2>
@@ -29558,7 +29558,7 @@ test:do_test(
          OR b=201
          OR a=7
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR b=957
   ]])
     end, {
@@ -29577,7 +29577,7 @@ test:do_test(
          OR b=201
          OR a=7
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR b=957
   ]])
     end, {
@@ -29593,10 +29593,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 90 AND 92) AND a!=91)
          OR a=74
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 95 AND 97) AND a!=96)
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR a=89
   ]])
     end, {
@@ -29612,10 +29612,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 90 AND 92) AND a!=91)
          OR a=74
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 95 AND 97) AND a!=96)
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR a=89
   ]])
     end, {
@@ -29636,7 +29636,7 @@ test:do_test(
          OR b=495
          OR b=564
          OR b=289
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.791.1>
@@ -29656,7 +29656,7 @@ test:do_test(
          OR b=495
          OR b=564
          OR b=289
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.791.2>
@@ -29669,7 +29669,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
+      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
          OR a=69
          OR a=12
          OR b=718
@@ -29686,7 +29686,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
+      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
          OR a=69
          OR a=12
          OR b=718
@@ -29703,7 +29703,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR f='klmnopqrs'
          OR b=674
          OR a=96
@@ -29712,7 +29712,7 @@ test:do_test(
          OR b=707
          OR f='cdefghijk'
          OR a=91
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.793.1>
@@ -29725,7 +29725,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR f='klmnopqrs'
          OR b=674
          OR a=96
@@ -29734,7 +29734,7 @@ test:do_test(
          OR b=707
          OR f='cdefghijk'
          OR a=91
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.793.2>
@@ -29747,12 +29747,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
+      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR b=564
          OR b=784
          OR b=418
          OR b=275
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR a=58
          OR c=11011
          OR b=660
@@ -29768,12 +29768,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
+      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR b=564
          OR b=784
          OR b=418
          OR b=275
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR a=58
          OR c=11011
          OR b=660
@@ -29794,7 +29794,7 @@ test:do_test(
          OR b=1004
          OR ((a BETWEEN 28 AND 30) AND a!=29)
          OR ((a BETWEEN 57 AND 59) AND a!=58)
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR f='pqrstuvwx'
   ]])
     end, {
@@ -29813,7 +29813,7 @@ test:do_test(
          OR b=1004
          OR ((a BETWEEN 28 AND 30) AND a!=29)
          OR ((a BETWEEN 57 AND 59) AND a!=58)
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR f='pqrstuvwx'
   ]])
     end, {
@@ -29886,7 +29886,7 @@ test:do_test(
       WHERE a=19
          OR a=29
          OR b=476
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR b=91
   ]])
     end, {
@@ -29903,7 +29903,7 @@ test:do_test(
       WHERE a=19
          OR a=29
          OR b=476
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR b=91
   ]])
     end, {
@@ -29954,8 +29954,8 @@ test:do_test(
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=44
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR b=707
          OR b=322
   ]])
@@ -29975,8 +29975,8 @@ test:do_test(
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=44
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR b=707
          OR b=322
   ]])
@@ -29991,8 +29991,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR f='jklmnopqr'
   ]])
@@ -30007,8 +30007,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR f='jklmnopqr'
   ]])
@@ -30024,14 +30024,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=946
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR a=47
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR b=80
          OR ((a BETWEEN 60 AND 62) AND a!=61)
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.802.1>
@@ -30045,14 +30045,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=946
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR a=47
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR b=80
          OR ((a BETWEEN 60 AND 62) AND a!=61)
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.802.2>
@@ -30069,10 +30069,10 @@ test:do_test(
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR b=1015
          OR a=57
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR ((a BETWEEN 47 AND 49) AND a!=48)
          OR ((a BETWEEN 98 AND 100) AND a!=99)
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
          OR (d>=4.0 AND d<5.0 AND d IS NOT NULL)
          OR b=165
   ]])
@@ -30091,10 +30091,10 @@ test:do_test(
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR b=1015
          OR a=57
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR ((a BETWEEN 47 AND 49) AND a!=48)
          OR ((a BETWEEN 98 AND 100) AND a!=99)
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
          OR (d>=4.0 AND d<5.0 AND d IS NOT NULL)
          OR b=165
   ]])
@@ -30113,7 +30113,7 @@ test:do_test(
          OR a=73
          OR b=1048
          OR c>=34035
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR a=72
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR b=638
@@ -30133,7 +30133,7 @@ test:do_test(
          OR a=73
          OR b=1048
          OR c>=34035
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR a=72
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR b=638
@@ -30181,10 +30181,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=50
          OR ((a BETWEEN 61 AND 63) AND a!=62)
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR a=32
          OR ((a BETWEEN 93 AND 95) AND a!=94)
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR a=14
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR b=946
@@ -30204,10 +30204,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=50
          OR ((a BETWEEN 61 AND 63) AND a!=62)
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR a=32
          OR ((a BETWEEN 93 AND 95) AND a!=94)
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR a=14
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR b=946
@@ -30228,7 +30228,7 @@ test:do_test(
       WHERE ((a BETWEEN 88 AND 90) AND a!=89)
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.807.1>
@@ -30244,7 +30244,7 @@ test:do_test(
       WHERE ((a BETWEEN 88 AND 90) AND a!=89)
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.807.2>
@@ -30259,7 +30259,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=6
          OR f='tuvwxyzab'
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR b=286
          OR b=781
   ]])
@@ -30276,7 +30276,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=6
          OR f='tuvwxyzab'
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR b=286
          OR b=781
   ]])
@@ -30291,12 +30291,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
          OR ((a BETWEEN 79 AND 81) AND a!=80)
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR f='vwxyzabcd'
          OR b=275
   ]])
@@ -30311,12 +30311,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
          OR ((a BETWEEN 79 AND 81) AND a!=80)
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR f='vwxyzabcd'
          OR b=275
   ]])
@@ -30332,10 +30332,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR a=59
   ]])
     end, {
@@ -30350,10 +30350,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR a=59
   ]])
     end, {
@@ -30367,10 +30367,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+      WHERE (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR b=663
          OR f='ghijklmno'
          OR ((a BETWEEN 14 AND 16) AND a!=15)
@@ -30390,10 +30390,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+      WHERE (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR b=663
          OR f='ghijklmno'
          OR ((a BETWEEN 14 AND 16) AND a!=15)
@@ -30420,9 +30420,9 @@ test:do_test(
          OR b=597
          OR ((a BETWEEN 92 AND 94) AND a!=93)
          OR (d>=88.0 AND d<89.0 AND d IS NOT NULL)
-         OR (f GLOB '?lmno*' AND f GLOB 'klmn*')
+         OR (f LIKE '_lmno%' AND f LIKE 'klmn%')
          OR b=168
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.812.1>
@@ -30442,9 +30442,9 @@ test:do_test(
          OR b=597
          OR ((a BETWEEN 92 AND 94) AND a!=93)
          OR (d>=88.0 AND d<89.0 AND d IS NOT NULL)
-         OR (f GLOB '?lmno*' AND f GLOB 'klmn*')
+         OR (f LIKE '_lmno%' AND f LIKE 'klmn%')
          OR b=168
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.812.2>
@@ -30498,7 +30498,7 @@ test:do_test(
          OR a=75
          OR b=179
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
          OR b=850
          OR a=62
@@ -30519,7 +30519,7 @@ test:do_test(
          OR a=75
          OR b=179
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
          OR b=850
          OR a=62
@@ -30583,7 +30583,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=176
          OR b=297
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR f='ijklmnopq'
   ]])
     end, {
@@ -30599,7 +30599,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=176
          OR b=297
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR f='ijklmnopq'
   ]])
     end, {
@@ -30653,9 +30653,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR b=396
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=1012
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR b=784
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR b=979
@@ -30676,9 +30676,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR b=396
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=1012
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR b=784
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR b=979
@@ -30726,9 +30726,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 79 AND 81) AND a!=80)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR ((a BETWEEN 23 AND 25) AND a!=24)
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
   ]])
     end, {
         -- <where7-2.820.1>
@@ -30742,9 +30742,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 79 AND 81) AND a!=80)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR ((a BETWEEN 23 AND 25) AND a!=24)
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
   ]])
     end, {
         -- <where7-2.820.2>
@@ -30830,7 +30830,7 @@ test:do_test(
          OR c=19019
          OR b=245
          OR ((a BETWEEN 97 AND 99) AND a!=98)
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR b=572
          OR ((a BETWEEN 22 AND 24) AND a!=23)
@@ -30853,7 +30853,7 @@ test:do_test(
          OR c=19019
          OR b=245
          OR ((a BETWEEN 97 AND 99) AND a!=98)
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR b=572
          OR ((a BETWEEN 22 AND 24) AND a!=23)
@@ -30915,7 +30915,7 @@ test:do_test(
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR b=828
          OR b=363
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.825.1>
@@ -30934,7 +30934,7 @@ test:do_test(
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR b=828
          OR b=363
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.825.2>
@@ -30947,7 +30947,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='gfedcba' AND f GLOB 'lmnop*')
+      WHERE (g='gfedcba' AND f LIKE 'lmnop%')
          OR a=41
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
          OR b=825
@@ -30963,7 +30963,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='gfedcba' AND f GLOB 'lmnop*')
+      WHERE (g='gfedcba' AND f LIKE 'lmnop%')
          OR a=41
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
          OR b=825
@@ -30986,7 +30986,7 @@ test:do_test(
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR b=561
          OR c=8008
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR b=935
          OR c=1001
   ]])
@@ -31008,7 +31008,7 @@ test:do_test(
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR b=561
          OR c=8008
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR b=935
          OR c=1001
   ]])
@@ -31024,7 +31024,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 75 AND 77) AND a!=76)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.828.1>
@@ -31038,7 +31038,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 75 AND 77) AND a!=76)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.828.2>
@@ -31114,9 +31114,9 @@ test:do_test(
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR f='zabcdefgh'
          OR b=861
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR a=28
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=311
   ]])
     end, {
@@ -31137,9 +31137,9 @@ test:do_test(
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR f='zabcdefgh'
          OR b=861
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR a=28
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=311
   ]])
     end, {
@@ -31154,10 +31154,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=575
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
          OR b=418
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR b=792
          OR b=861
          OR b=220
@@ -31175,10 +31175,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=575
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
          OR b=418
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR b=792
          OR b=861
          OR b=220
@@ -31233,7 +31233,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'qrstu*')
+      WHERE (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=693
          OR a=73
          OR b=627
@@ -31243,7 +31243,7 @@ test:do_test(
          OR b=267
          OR b=872
          OR a=27
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.834.1>
@@ -31256,7 +31256,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'qrstu*')
+      WHERE (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=693
          OR a=73
          OR b=627
@@ -31266,7 +31266,7 @@ test:do_test(
          OR b=267
          OR b=872
          OR a=27
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.834.2>
@@ -31351,15 +31351,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=66
          OR b=322
          OR b=465
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
          OR ((a BETWEEN 77 AND 79) AND a!=78)
-         OR (g='lkjihgf' AND f GLOB 'mnopq*')
+         OR (g='lkjihgf' AND f LIKE 'mnopq%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR b=454
   ]])
@@ -31374,15 +31374,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=66
          OR b=322
          OR b=465
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
          OR ((a BETWEEN 77 AND 79) AND a!=78)
-         OR (g='lkjihgf' AND f GLOB 'mnopq*')
+         OR (g='lkjihgf' AND f LIKE 'mnopq%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR b=454
   ]])
@@ -31402,7 +31402,7 @@ test:do_test(
          OR c=15015
          OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
          OR ((a BETWEEN 3 AND 5) AND a!=4)
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR b=803
   ]])
     end, {
@@ -31421,7 +31421,7 @@ test:do_test(
          OR c=15015
          OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
          OR ((a BETWEEN 3 AND 5) AND a!=4)
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR b=803
   ]])
     end, {
@@ -31436,12 +31436,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1100
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 72 AND 74) AND a!=73)
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR a=75
          OR a=45
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR a=27
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR b=850
@@ -31459,12 +31459,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1100
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 72 AND 74) AND a!=73)
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR a=75
          OR a=45
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR a=27
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR b=850
@@ -31484,7 +31484,7 @@ test:do_test(
       WHERE b=751
          OR ((a BETWEEN 96 AND 98) AND a!=97)
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR a=89
          OR ((a BETWEEN 36 AND 38) AND a!=37)
@@ -31503,7 +31503,7 @@ test:do_test(
       WHERE b=751
          OR ((a BETWEEN 96 AND 98) AND a!=97)
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR a=89
          OR ((a BETWEEN 36 AND 38) AND a!=37)
@@ -31519,10 +31519,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+      WHERE (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR a=1
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.841.1>
@@ -31535,10 +31535,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+      WHERE (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR a=1
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.841.2>
@@ -31557,9 +31557,9 @@ test:do_test(
          OR c=8008
          OR ((a BETWEEN 41 AND 43) AND a!=42)
          OR b=960
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
          OR b=443
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.842.1>
@@ -31578,9 +31578,9 @@ test:do_test(
          OR c=8008
          OR ((a BETWEEN 41 AND 43) AND a!=42)
          OR b=960
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
          OR b=443
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.842.2>
@@ -31624,14 +31624,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=685
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR b=520
          OR (d>=76.0 AND d<77.0 AND d IS NOT NULL)
          OR a=53
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR b=938
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR c=25025
   ]])
     end, {
@@ -31646,14 +31646,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=685
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR b=520
          OR (d>=76.0 AND d<77.0 AND d IS NOT NULL)
          OR a=53
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR b=938
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR c=25025
   ]])
     end, {
@@ -31700,7 +31700,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='abcdefghi'
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.846.1>
@@ -31714,7 +31714,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='abcdefghi'
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.846.2>
@@ -31802,7 +31802,7 @@ test:do_test(
       WHERE b=209
          OR b=806
          OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.849.1>
@@ -31818,7 +31818,7 @@ test:do_test(
       WHERE b=209
          OR b=806
          OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.849.2>
@@ -31863,10 +31863,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=4.0 AND d<5.0 AND d IS NOT NULL)
          OR a=45
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR a=69
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.851.1>
@@ -31881,10 +31881,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=4.0 AND d<5.0 AND d IS NOT NULL)
          OR a=45
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR a=69
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.851.2>
@@ -31899,9 +31899,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE c=9009
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.852.1>
@@ -31916,9 +31916,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE c=9009
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.852.2>
@@ -31937,7 +31937,7 @@ test:do_test(
          OR a=47
          OR c=24024
          OR a=27
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -31957,7 +31957,7 @@ test:do_test(
          OR a=47
          OR c=24024
          OR a=27
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -31971,9 +31971,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR a=19
   ]])
     end, {
@@ -31987,9 +31987,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR a=19
   ]])
     end, {
@@ -32006,7 +32006,7 @@ test:do_test(
       WHERE c=12012
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
          OR ((a BETWEEN 16 AND 18) AND a!=17)
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.855.1>
@@ -32022,7 +32022,7 @@ test:do_test(
       WHERE c=12012
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
          OR ((a BETWEEN 16 AND 18) AND a!=17)
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.855.2>
@@ -32036,7 +32036,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 38 AND 40) AND a!=39)
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR b=429
          OR f='jklmnopqr'
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
@@ -32054,7 +32054,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 38 AND 40) AND a!=39)
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR b=429
          OR f='jklmnopqr'
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
@@ -32071,7 +32071,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'mnopq*')
+      WHERE (g='lkjihgf' AND f LIKE 'mnopq%')
          OR b=190
   ]])
     end, {
@@ -32085,7 +32085,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'mnopq*')
+      WHERE (g='lkjihgf' AND f LIKE 'mnopq%')
          OR b=190
   ]])
     end, {
@@ -32099,7 +32099,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'yzabc*')
+      WHERE (g='jihgfed' AND f LIKE 'yzabc%')
          OR b=674
          OR b=289
   ]])
@@ -32114,7 +32114,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'yzabc*')
+      WHERE (g='jihgfed' AND f LIKE 'yzabc%')
          OR b=674
          OR b=289
   ]])
@@ -32131,8 +32131,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=17
          OR b=539
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.859.1>
@@ -32147,8 +32147,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=17
          OR b=539
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.859.2>
@@ -32259,12 +32259,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE f='ghijklmno'
          OR a=26
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=81
          OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
          OR ((a BETWEEN 28 AND 30) AND a!=29)
          OR b=275
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR b=311
          OR b=894
          OR b=872
@@ -32282,12 +32282,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE f='ghijklmno'
          OR a=26
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=81
          OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
          OR ((a BETWEEN 28 AND 30) AND a!=29)
          OR b=275
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR b=311
          OR b=894
          OR b=872
@@ -32376,12 +32376,12 @@ test:do_test(
       WHERE a=44
          OR b=55
          OR a=30
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR 1000000<b
          OR a=24
          OR b=1089
          OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.866.1>
@@ -32397,12 +32397,12 @@ test:do_test(
       WHERE a=44
          OR b=55
          OR a=30
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR 1000000<b
          OR a=24
          OR b=1089
          OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.866.2>
@@ -32487,14 +32487,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='edcbazy' AND f GLOB 'uvwxy*')
+      WHERE (g='edcbazy' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 25 AND 27) AND a!=26)
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR f='xyzabcdef'
          OR b=517
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.869.1>
@@ -32507,14 +32507,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='edcbazy' AND f GLOB 'uvwxy*')
+      WHERE (g='edcbazy' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 25 AND 27) AND a!=26)
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR f='xyzabcdef'
          OR b=517
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.869.2>
@@ -32555,9 +32555,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'yzabc*')
+      WHERE (g='tsrqpon' AND f LIKE 'yzabc%')
          OR b=762
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR a=25
          OR ((a BETWEEN 65 AND 67) AND a!=66)
   ]])
@@ -32572,9 +32572,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'yzabc*')
+      WHERE (g='tsrqpon' AND f LIKE 'yzabc%')
          OR b=762
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR a=25
          OR ((a BETWEEN 65 AND 67) AND a!=66)
   ]])
@@ -32594,9 +32594,9 @@ test:do_test(
          OR b=839
          OR f='defghijkl'
          OR (d>=95.0 AND d<96.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR b=498
   ]])
     end, {
@@ -32615,9 +32615,9 @@ test:do_test(
          OR b=839
          OR f='defghijkl'
          OR (d>=95.0 AND d<96.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR b=498
   ]])
     end, {
@@ -32667,7 +32667,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
+      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=256
          OR b=586
          OR a=74
@@ -32686,7 +32686,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
+      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=256
          OR b=586
          OR a=74
@@ -32739,14 +32739,14 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=308
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR a=83
          OR c=23023
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR a=58
          OR ((a BETWEEN 17 AND 19) AND a!=18)
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR c=4004
   ]])
     end, {
@@ -32762,14 +32762,14 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=308
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR a=83
          OR c=23023
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR a=58
          OR ((a BETWEEN 17 AND 19) AND a!=18)
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR c=4004
   ]])
     end, {
@@ -32789,7 +32789,7 @@ test:do_test(
          OR b=762
          OR b=157
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.877.1>
@@ -32808,7 +32808,7 @@ test:do_test(
          OR b=762
          OR b=157
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.877.2>
@@ -32825,12 +32825,12 @@ test:do_test(
          OR a=1
          OR ((a BETWEEN 93 AND 95) AND a!=94)
          OR b=278
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR f='qrstuvwxy'
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR ((a BETWEEN 82 AND 84) AND a!=83)
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -32848,12 +32848,12 @@ test:do_test(
          OR a=1
          OR ((a BETWEEN 93 AND 95) AND a!=94)
          OR b=278
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR f='qrstuvwxy'
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR ((a BETWEEN 82 AND 84) AND a!=83)
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -32872,9 +32872,9 @@ test:do_test(
          OR ((a BETWEEN 41 AND 43) AND a!=42)
          OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
          OR b=759
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR ((a BETWEEN 45 AND 47) AND a!=46)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.879.1>
@@ -32892,9 +32892,9 @@ test:do_test(
          OR ((a BETWEEN 41 AND 43) AND a!=42)
          OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
          OR b=759
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR ((a BETWEEN 45 AND 47) AND a!=46)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.879.2>
@@ -32916,7 +32916,7 @@ test:do_test(
          OR b=44
          OR f='zabcdefgh'
          OR b=979
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.880.1>
@@ -32938,7 +32938,7 @@ test:do_test(
          OR b=44
          OR f='zabcdefgh'
          OR b=979
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.880.2>
@@ -32988,7 +32988,7 @@ test:do_test(
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR a=90
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR f='nopqrstuv'
   ]])
     end, {
@@ -33011,7 +33011,7 @@ test:do_test(
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR a=90
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR f='nopqrstuv'
   ]])
     end, {
@@ -33061,7 +33061,7 @@ test:do_test(
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR d<0.0
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR c=9009
   ]])
     end, {
@@ -33083,7 +33083,7 @@ test:do_test(
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR d<0.0
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR c=9009
   ]])
     end, {
@@ -33097,7 +33097,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR b=814
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
   ]])
@@ -33112,7 +33112,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR b=814
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
   ]])
@@ -33127,7 +33127,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'mnopq*')
+      WHERE (g='lkjihgf' AND f LIKE 'mnopq%')
          OR b=333
          OR b=275
   ]])
@@ -33142,7 +33142,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'mnopq*')
+      WHERE (g='lkjihgf' AND f LIKE 'mnopq%')
          OR b=333
          OR b=275
   ]])
@@ -33157,7 +33157,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
   ]])
     end, {
@@ -33171,7 +33171,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
   ]])
     end, {
@@ -33187,7 +33187,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 11 AND 13) AND a!=12)
          OR b=253
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=286
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
   ]])
@@ -33204,7 +33204,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 11 AND 13) AND a!=12)
          OR b=253
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=286
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
   ]])
@@ -33220,10 +33220,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=15.0 AND d<16.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 26 AND 28) AND a!=27)
          OR b=421
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR f='ijklmnopq'
          OR b=891
          OR b=1056
@@ -33240,10 +33240,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=15.0 AND d<16.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 26 AND 28) AND a!=27)
          OR b=421
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR f='ijklmnopq'
          OR b=891
          OR b=1056
@@ -33260,10 +33260,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='fghijklmn'
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR b=671
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.890.1>
@@ -33277,10 +33277,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='fghijklmn'
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR b=671
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.890.2>
@@ -33293,10 +33293,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'lmnop*')
-         OR (g='srqponm' AND f GLOB 'fghij*')
+      WHERE (g='lkjihgf' AND f LIKE 'lmnop%')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR ((a BETWEEN 4 AND 6) AND a!=5)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -33310,10 +33310,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'lmnop*')
-         OR (g='srqponm' AND f GLOB 'fghij*')
+      WHERE (g='lkjihgf' AND f LIKE 'lmnop%')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR ((a BETWEEN 4 AND 6) AND a!=5)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -33439,11 +33439,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 67 AND 69) AND a!=68)
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR a=46
          OR b=187
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.895.1>
@@ -33458,11 +33458,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 67 AND 69) AND a!=68)
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR a=46
          OR b=187
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.895.2>
@@ -33522,7 +33522,7 @@ test:do_test(
          OR b=729
          OR ((a BETWEEN 81 AND 83) AND a!=82)
          OR a=58
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=608
   ]])
     end, {
@@ -33543,7 +33543,7 @@ test:do_test(
          OR b=729
          OR ((a BETWEEN 81 AND 83) AND a!=82)
          OR a=58
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=608
   ]])
     end, {
@@ -33561,7 +33561,7 @@ test:do_test(
          OR f='efghijklm'
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
          OR a=26
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
   ]])
     end, {
         -- <where7-2.898.1>
@@ -33578,7 +33578,7 @@ test:do_test(
          OR f='efghijklm'
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
          OR a=26
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
   ]])
     end, {
         -- <where7-2.898.2>
@@ -33592,11 +33592,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=59
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR a=7
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=762
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
   ]])
     end, {
         -- <where7-2.899.1>
@@ -33610,11 +33610,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=59
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR a=7
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=762
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
   ]])
     end, {
         -- <where7-2.899.2>
@@ -33627,7 +33627,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
+      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
          OR b=539
          OR b=399
   ]])
@@ -33642,7 +33642,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
+      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
          OR b=539
          OR b=399
   ]])
@@ -33687,10 +33687,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (g='rqponml' AND f GLOB 'klmno*')
+      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR f='lmnopqrst'
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.902.1>
@@ -33703,10 +33703,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (g='rqponml' AND f GLOB 'klmno*')
+      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR f='lmnopqrst'
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.902.2>
@@ -33751,14 +33751,14 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1067
          OR ((a BETWEEN 53 AND 55) AND a!=54)
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR b=520
          OR b=399
          OR b=209
          OR a=68
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.904.1>
@@ -33773,14 +33773,14 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1067
          OR ((a BETWEEN 53 AND 55) AND a!=54)
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR b=520
          OR b=399
          OR b=209
          OR a=68
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.904.2>
@@ -33798,7 +33798,7 @@ test:do_test(
          OR b=55
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
          OR ((a BETWEEN 20 AND 22) AND a!=21)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 0 AND 2) AND a!=1)
          OR ((a BETWEEN 21 AND 23) AND a!=22)
   ]])
@@ -33818,7 +33818,7 @@ test:do_test(
          OR b=55
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
          OR ((a BETWEEN 20 AND 22) AND a!=21)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 0 AND 2) AND a!=1)
          OR ((a BETWEEN 21 AND 23) AND a!=22)
   ]])
@@ -33837,7 +33837,7 @@ test:do_test(
          OR a=2
          OR b=784
          OR ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR b=850
   ]])
     end, {
@@ -33855,7 +33855,7 @@ test:do_test(
          OR a=2
          OR b=784
          OR ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR b=850
   ]])
     end, {
@@ -33903,17 +33903,17 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
          OR a=18
          OR a=30
          OR ((a BETWEEN 9 AND 11) AND a!=10)
          OR ((a BETWEEN 84 AND 86) AND a!=85)
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR b=792
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR ((a BETWEEN 19 AND 21) AND a!=20)
          OR c=26026
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.908.1>
@@ -33926,17 +33926,17 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
          OR a=18
          OR a=30
          OR ((a BETWEEN 9 AND 11) AND a!=10)
          OR ((a BETWEEN 84 AND 86) AND a!=85)
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR b=792
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR ((a BETWEEN 19 AND 21) AND a!=20)
          OR c=26026
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.908.2>
@@ -33949,11 +33949,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='vutsrqp' AND f GLOB 'qrstu*')
+      WHERE (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=968
          OR ((a BETWEEN 63 AND 65) AND a!=64)
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
          OR a=78
          OR ((a BETWEEN 90 AND 92) AND a!=91)
@@ -33969,11 +33969,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='vutsrqp' AND f GLOB 'qrstu*')
+      WHERE (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=968
          OR ((a BETWEEN 63 AND 65) AND a!=64)
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
          OR a=78
          OR ((a BETWEEN 90 AND 92) AND a!=91)
@@ -34096,7 +34096,7 @@ test:do_test(
          OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR a=81
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR f='mnopqrstu'
   ]])
     end, {
@@ -34117,7 +34117,7 @@ test:do_test(
          OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR a=81
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR f='mnopqrstu'
   ]])
     end, {
@@ -34177,7 +34177,7 @@ test:do_test(
          OR ((a BETWEEN 20 AND 22) AND a!=21)
          OR ((a BETWEEN 27 AND 29) AND a!=28)
          OR b=319
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 14 AND 16) AND a!=15)
   ]])
     end, {
@@ -34197,7 +34197,7 @@ test:do_test(
          OR ((a BETWEEN 20 AND 22) AND a!=21)
          OR ((a BETWEEN 27 AND 29) AND a!=28)
          OR b=319
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 14 AND 16) AND a!=15)
   ]])
     end, {
@@ -34214,7 +34214,7 @@ test:do_test(
       WHERE b=179
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR a=46
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
          OR a=25
          OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
@@ -34237,7 +34237,7 @@ test:do_test(
       WHERE b=179
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR a=46
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
          OR a=25
          OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
@@ -34257,7 +34257,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'fghij*')
+      WHERE (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -34271,7 +34271,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'fghij*')
+      WHERE (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -34286,7 +34286,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=748
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR a=32
          OR b=110
          OR b=297
@@ -34308,7 +34308,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=748
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR a=32
          OR b=110
          OR b=297
@@ -34332,13 +34332,13 @@ test:do_test(
       WHERE (d>=33.0 AND d<34.0 AND d IS NOT NULL)
          OR b=905
          OR a=97
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR c=27027
          OR f='bcdefghij'
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
          OR ((a BETWEEN 38 AND 40) AND a!=39)
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
   ]])
     end, {
         -- <where7-2.919.1>
@@ -34354,13 +34354,13 @@ test:do_test(
       WHERE (d>=33.0 AND d<34.0 AND d IS NOT NULL)
          OR b=905
          OR a=97
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR c=27027
          OR f='bcdefghij'
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
          OR ((a BETWEEN 38 AND 40) AND a!=39)
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
   ]])
     end, {
         -- <where7-2.919.2>
@@ -34403,13 +34403,13 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=594
          OR b=80
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=421
          OR b=418
          OR b=828
          OR a=88
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -34425,13 +34425,13 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=594
          OR b=80
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=421
          OR b=418
          OR b=828
          OR a=88
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -34446,11 +34446,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=17.0 AND d<18.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR b=366
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR c=16016
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR c=9009
   ]])
     end, {
@@ -34465,11 +34465,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=17.0 AND d<18.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR b=366
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR c=16016
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR c=9009
   ]])
     end, {
@@ -34485,7 +34485,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=33
          OR f='qrstuvwxy'
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR b=858
   ]])
     end, {
@@ -34501,7 +34501,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=33
          OR f='qrstuvwxy'
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR b=858
   ]])
     end, {
@@ -34516,7 +34516,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=861
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
          OR b=682
          OR ((a BETWEEN 93 AND 95) AND a!=94)
@@ -34534,7 +34534,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=861
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
          OR b=682
          OR ((a BETWEEN 93 AND 95) AND a!=94)
@@ -34584,7 +34584,7 @@ test:do_test(
       WHERE f='abcdefghi'
          OR c=9009
          OR b=663
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR b=91
   ]])
     end, {
@@ -34601,7 +34601,7 @@ test:do_test(
       WHERE f='abcdefghi'
          OR c=9009
          OR b=663
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR b=91
   ]])
     end, {
@@ -34615,15 +34615,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'qrstu*')
+      WHERE (g='kjihgfe' AND f LIKE 'qrstu%')
          OR ((a BETWEEN 29 AND 31) AND a!=30)
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=1015
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=916
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
          OR b=69
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.927.1>
@@ -34636,15 +34636,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'qrstu*')
+      WHERE (g='kjihgfe' AND f LIKE 'qrstu%')
          OR ((a BETWEEN 29 AND 31) AND a!=30)
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=1015
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=916
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
          OR b=69
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.927.2>
@@ -34664,7 +34664,7 @@ test:do_test(
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR a=63
          OR f='mnopqrstu'
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR b=495
          OR a=35
          OR a=22
@@ -34687,7 +34687,7 @@ test:do_test(
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR a=63
          OR f='mnopqrstu'
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR b=495
          OR a=35
          OR a=22
@@ -34704,7 +34704,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=869
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=289
          OR a=62
          OR ((a BETWEEN 9 AND 11) AND a!=10)
@@ -34721,7 +34721,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=869
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=289
          OR a=62
          OR ((a BETWEEN 9 AND 11) AND a!=10)
@@ -34774,7 +34774,7 @@ test:do_test(
       WHERE ((a BETWEEN 57 AND 59) AND a!=58)
          OR b=1078
          OR ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR b=429
   ]])
@@ -34792,7 +34792,7 @@ test:do_test(
       WHERE ((a BETWEEN 57 AND 59) AND a!=58)
          OR b=1078
          OR ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR b=429
   ]])
@@ -34876,7 +34876,7 @@ test:do_test(
       WHERE (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR b=858
          OR a=58
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR c=21021
          OR ((a BETWEEN 45 AND 47) AND a!=46)
          OR b=616
@@ -34897,7 +34897,7 @@ test:do_test(
       WHERE (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR b=858
          OR a=58
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR c=21021
          OR ((a BETWEEN 45 AND 47) AND a!=46)
          OR b=616
@@ -34917,7 +34917,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=682
          OR b=99
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR b=531
   ]])
     end, {
@@ -34933,7 +34933,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=682
          OR b=99
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR b=531
   ]])
     end, {
@@ -34948,13 +34948,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 56 AND 58) AND a!=57)
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR b=726
          OR a=79
          OR a=47
          OR b=212
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR c=8008
   ]])
     end, {
@@ -34969,13 +34969,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 56 AND 58) AND a!=57)
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR b=726
          OR a=79
          OR a=47
          OR b=212
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR c=8008
   ]])
     end, {
@@ -34993,7 +34993,7 @@ test:do_test(
          OR ((a BETWEEN 60 AND 62) AND a!=61)
          OR a=5
          OR b=33
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
          OR a=59
          OR b=44
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
@@ -35014,7 +35014,7 @@ test:do_test(
          OR ((a BETWEEN 60 AND 62) AND a!=61)
          OR a=5
          OR b=33
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
          OR a=59
          OR b=44
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
@@ -35213,8 +35213,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=96
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR ((a BETWEEN 37 AND 39) AND a!=38)
          OR a=85
          OR ((a BETWEEN 10 AND 12) AND a!=11)
@@ -35236,8 +35236,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=96
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR ((a BETWEEN 37 AND 39) AND a!=38)
          OR a=85
          OR ((a BETWEEN 10 AND 12) AND a!=11)
@@ -35299,17 +35299,17 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
+      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
          OR a=60
          OR a=4
          OR b=520
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR a=44
          OR a=36
          OR (d>=76.0 AND d<77.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=715
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.945.1>
@@ -35322,17 +35322,17 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
+      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
          OR a=60
          OR a=4
          OR b=520
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR a=44
          OR a=36
          OR (d>=76.0 AND d<77.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=715
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.945.2>
@@ -35349,10 +35349,10 @@ test:do_test(
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
          OR a=24
          OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
   ]])
     end, {
         -- <where7-2.946.1>
@@ -35369,10 +35369,10 @@ test:do_test(
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
          OR a=24
          OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
   ]])
     end, {
         -- <where7-2.946.2>
@@ -35385,12 +35385,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'vwxyz*')
+      WHERE (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=132
          OR f='ghijklmno'
          OR b=740
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=1059
   ]])
     end, {
@@ -35404,12 +35404,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'vwxyz*')
+      WHERE (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=132
          OR f='ghijklmno'
          OR b=740
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=1059
   ]])
     end, {
@@ -35459,10 +35459,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'cdefg*')
+      WHERE (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=1026
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'lmnop*')
+         OR (g='wvutsrq' AND f LIKE 'lmnop%')
          OR b=355
          OR b=641
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
@@ -35478,10 +35478,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'cdefg*')
+      WHERE (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=1026
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'lmnop*')
+         OR (g='wvutsrq' AND f LIKE 'lmnop%')
          OR b=355
          OR b=641
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
@@ -35506,7 +35506,7 @@ test:do_test(
          OR f='opqrstuvw'
          OR a=41
          OR a=83
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=751
   ]])
     end, {
@@ -35529,7 +35529,7 @@ test:do_test(
          OR f='opqrstuvw'
          OR a=41
          OR a=83
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=751
   ]])
     end, {
@@ -35579,7 +35579,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'qrstu*')
+      WHERE (g='qponmlk' AND f LIKE 'qrstu%')
          OR f='bcdefghij'
          OR f='hijklmnop'
          OR a=65
@@ -35602,7 +35602,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'qrstu*')
+      WHERE (g='qponmlk' AND f LIKE 'qrstu%')
          OR f='bcdefghij'
          OR f='hijklmnop'
          OR a=65
@@ -35625,11 +35625,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'vwxyz*')
+      WHERE (g='jihgfed' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR ((a BETWEEN 79 AND 81) AND a!=80)
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR b=1100
          OR c=6006
          OR c=4004
@@ -35647,11 +35647,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'vwxyz*')
+      WHERE (g='jihgfed' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR ((a BETWEEN 79 AND 81) AND a!=80)
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR b=1100
          OR c=6006
          OR c=4004
@@ -35728,7 +35728,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=42.0 AND d<43.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 21 AND 23) AND a!=22)
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=737
@@ -35745,7 +35745,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=42.0 AND d<43.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 21 AND 23) AND a!=22)
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=737
@@ -35761,7 +35761,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='rqponml' AND f GLOB 'klmno*')
+      WHERE (g='rqponml' AND f LIKE 'klmno%')
          OR ((a BETWEEN 5 AND 7) AND a!=6)
   ]])
     end, {
@@ -35775,7 +35775,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='rqponml' AND f GLOB 'klmno*')
+      WHERE (g='rqponml' AND f LIKE 'klmno%')
          OR ((a BETWEEN 5 AND 7) AND a!=6)
   ]])
     end, {
@@ -35789,7 +35789,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR c=32032
          OR f='opqrstuvw'
          OR ((a BETWEEN 66 AND 68) AND a!=67)
@@ -35807,7 +35807,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR c=32032
          OR f='opqrstuvw'
          OR ((a BETWEEN 66 AND 68) AND a!=67)
@@ -35875,11 +35875,11 @@ test:do_test(
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR ((a BETWEEN 86 AND 88) AND a!=87)
          OR b=146
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR ((a BETWEEN 73 AND 75) AND a!=74)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 60 AND 62) AND a!=61)
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=704
   ]])
     end, {
@@ -35897,11 +35897,11 @@ test:do_test(
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR ((a BETWEEN 86 AND 88) AND a!=87)
          OR b=146
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR ((a BETWEEN 73 AND 75) AND a!=74)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 60 AND 62) AND a!=61)
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=704
   ]])
     end, {
@@ -35950,7 +35950,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=17017
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=971
          OR a=37
          OR a=7
@@ -35970,7 +35970,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=17017
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=971
          OR a=37
          OR a=7
@@ -35990,7 +35990,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='tuvwxyzab'
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
   ]])
     end, {
         -- <where7-2.963.1>
@@ -36004,7 +36004,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='tuvwxyzab'
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
   ]])
     end, {
         -- <where7-2.963.2>
@@ -36019,7 +36019,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=638
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR b=165
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR f='stuvwxyza'
@@ -36041,7 +36041,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=638
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR b=165
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR f='stuvwxyza'
@@ -36067,7 +36067,7 @@ test:do_test(
          OR a=93
          OR b=858
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.965.1>
@@ -36086,7 +36086,7 @@ test:do_test(
          OR a=93
          OR b=858
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.965.2>
@@ -36157,7 +36157,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'mnopq*')
+      WHERE (g='qponmlk' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR a=5
          OR b=396
@@ -36174,7 +36174,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'mnopq*')
+      WHERE (g='qponmlk' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR a=5
          OR b=396
@@ -36191,7 +36191,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=748
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
@@ -36210,7 +36210,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=748
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
@@ -36231,7 +36231,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
          OR ((a BETWEEN 8 AND 10) AND a!=9)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR a=50
          OR a=46
          OR ((a BETWEEN 38 AND 40) AND a!=39)
@@ -36249,7 +36249,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
          OR ((a BETWEEN 8 AND 10) AND a!=9)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR a=50
          OR a=46
          OR ((a BETWEEN 38 AND 40) AND a!=39)
@@ -36312,7 +36312,7 @@ test:do_test(
          OR c=16016
          OR b=1078
          OR b=960
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
   ]])
     end, {
         -- <where7-2.972.1>
@@ -36330,7 +36330,7 @@ test:do_test(
          OR c=16016
          OR b=1078
          OR b=960
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
   ]])
     end, {
         -- <where7-2.972.2>
@@ -36345,7 +36345,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1081
          OR ((a BETWEEN 19 AND 21) AND a!=20)
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 73 AND 75) AND a!=74)
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR a=6
@@ -36363,7 +36363,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1081
          OR ((a BETWEEN 19 AND 21) AND a!=20)
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 73 AND 75) AND a!=74)
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR a=6
@@ -36379,10 +36379,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR a=92
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR f='fghijklmn'
          OR a=100
          OR b=209
@@ -36402,10 +36402,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR a=92
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR f='fghijklmn'
          OR a=100
          OR b=209
@@ -36458,13 +36458,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 51 AND 53) AND a!=52)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=91
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR b=77
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.976.1>
@@ -36478,13 +36478,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 51 AND 53) AND a!=52)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=91
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR b=77
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.976.2>
@@ -36582,13 +36582,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=737
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR a=40
          OR f='uvwxyzabc'
          OR b=311
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=927
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
   ]])
@@ -36604,13 +36604,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=737
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR a=40
          OR f='uvwxyzabc'
          OR b=311
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=927
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
   ]])
@@ -36657,16 +36657,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR b=487
          OR f='tuvwxyzab'
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR b=971
          OR c=19019
          OR a=39
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR b=550
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=660
   ]])
     end, {
@@ -36680,16 +36680,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR b=487
          OR f='tuvwxyzab'
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR b=971
          OR c=19019
          OR a=39
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR b=550
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=660
   ]])
     end, {
@@ -36735,7 +36735,7 @@ test:do_test(
          OR b=630
          OR b=935
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR f='yzabcdefg'
          OR ((a BETWEEN 37 AND 39) AND a!=38)
   ]])
@@ -36754,7 +36754,7 @@ test:do_test(
          OR b=630
          OR b=935
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR f='yzabcdefg'
          OR ((a BETWEEN 37 AND 39) AND a!=38)
   ]])
@@ -36774,7 +36774,7 @@ test:do_test(
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
          OR f='abcdefghi'
          OR b=696
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=682
          OR a=32
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -36797,7 +36797,7 @@ test:do_test(
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
          OR f='abcdefghi'
          OR b=696
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=682
          OR a=32
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -36815,8 +36815,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='gfedcba' AND f GLOB 'lmnop*')
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+      WHERE (g='gfedcba' AND f LIKE 'lmnop%')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR b=311
   ]])
     end, {
@@ -36830,8 +36830,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='gfedcba' AND f GLOB 'lmnop*')
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+      WHERE (g='gfedcba' AND f LIKE 'lmnop%')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR b=311
   ]])
     end, {
@@ -36884,7 +36884,7 @@ test:do_test(
       WHERE ((a BETWEEN 98 AND 100) AND a!=99)
          OR b=110
          OR ((a BETWEEN 38 AND 40) AND a!=39)
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR b=484
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
   ]])
@@ -36902,7 +36902,7 @@ test:do_test(
       WHERE ((a BETWEEN 98 AND 100) AND a!=99)
          OR b=110
          OR ((a BETWEEN 38 AND 40) AND a!=39)
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR b=484
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
   ]])
@@ -36925,7 +36925,7 @@ test:do_test(
          OR c=27027
          OR b=1026
          OR c=6006
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -36947,7 +36947,7 @@ test:do_test(
          OR c=27027
          OR b=1026
          OR c=6006
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -36963,11 +36963,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=79.0 AND d<80.0 AND d IS NOT NULL)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR a=97
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR ((a BETWEEN 22 AND 24) AND a!=23)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR b=674
          OR c=14014
          OR b=69
@@ -36985,11 +36985,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=79.0 AND d<80.0 AND d IS NOT NULL)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR a=97
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR ((a BETWEEN 22 AND 24) AND a!=23)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR b=674
          OR c=14014
          OR b=69
@@ -37039,12 +37039,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=451
          OR ((a BETWEEN 11 AND 13) AND a!=12)
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=539
          OR a=26
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR b=465
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.991.1>
@@ -37059,12 +37059,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=451
          OR ((a BETWEEN 11 AND 13) AND a!=12)
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=539
          OR a=26
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR b=465
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.991.2>
@@ -37135,9 +37135,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?cdef*' AND f GLOB 'bcde*')
+      WHERE (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR a=13
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR b=322
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR b=377
@@ -37156,9 +37156,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?cdef*' AND f GLOB 'bcde*')
+      WHERE (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR a=13
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR b=322
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR b=377
@@ -37181,9 +37181,9 @@ test:do_test(
          OR b=990
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
          OR b=605
-         OR (g='srqponm' AND f GLOB 'cdefg*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=968
          OR a=66
   ]])
@@ -37202,9 +37202,9 @@ test:do_test(
          OR b=990
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
          OR b=605
-         OR (g='srqponm' AND f GLOB 'cdefg*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=968
          OR a=66
   ]])
@@ -37220,12 +37220,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1059
-         OR (g='srqponm' AND f GLOB 'ghijk*')
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
          OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR ((a BETWEEN 39 AND 41) AND a!=40)
   ]])
     end, {
@@ -37240,12 +37240,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1059
-         OR (g='srqponm' AND f GLOB 'ghijk*')
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
          OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR ((a BETWEEN 39 AND 41) AND a!=40)
   ]])
     end, {
@@ -37261,7 +37261,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 41 AND 43) AND a!=42)
          OR f='nopqrstuv'
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR a=42
          OR b=729
          OR b=297
@@ -37282,7 +37282,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 41 AND 43) AND a!=42)
          OR f='nopqrstuv'
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR a=42
          OR b=729
          OR b=297
@@ -37337,9 +37337,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=451
          OR b=660
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
          OR b=781
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=198
          OR b=1023
          OR a=98
@@ -37359,9 +37359,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=451
          OR b=660
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
          OR b=781
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=198
          OR b=1023
          OR a=98
@@ -37383,7 +37383,7 @@ test:do_test(
          OR a=86
          OR c=17017
          OR ((a BETWEEN 85 AND 87) AND a!=86)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR a=80
          OR b=773
   ]])
@@ -37402,7 +37402,7 @@ test:do_test(
          OR a=86
          OR c=17017
          OR ((a BETWEEN 85 AND 87) AND a!=86)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR a=80
          OR b=773
   ]])
@@ -37419,7 +37419,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1092
          OR a=23
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR d<0.0
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR a=91
@@ -37437,7 +37437,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1092
          OR a=23
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR d<0.0
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR a=91
-- 
2.7.4

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-08-16 17:00 ` [tarantool-patches] [PATCH 2/2] sql: remove GLOB from Tarantool N.Tatunov
@ 2018-08-17  8:25   ` Alex Khatskevich
  2018-08-17  8:49     ` n.pettik
                       ` (4 more replies)
  0 siblings, 5 replies; 46+ messages in thread
From: Alex Khatskevich @ 2018-08-17  8:25 UTC (permalink / raw)
  To: N.Tatunov, tarantool-patches



On 16.08.2018 20:00, N.Tatunov wrote:
> GLOB is a legacy extension for LIKE from SQLite. As we want our SQL to
> be close to ANSI SQL & LIKE to depend on collations, we do not want to
> support it. This patch totally removes it from Tarantool along with any
> mentions of it.
1.We delete it because it is not working properly, and instead of fixing 
it we
want to replace it with more general regexp. Delete other unnecessary 
thoughts
from this message.
2. Do not use "we", "our" in commit messages.
> Part of #3589
> Part of #3572
> Needed for #3251
> Needed for #3334
> ---
>   extra/mkkeywordhash.c                              |    1 -
>   src/box/sql/analyze.c                              |    7 +-
>   src/box/sql/func.c                                 |  381 +-
>   src/box/sql/pragma.c                               |    6 +-
>   src/box/sql/sqliteInt.h                            |   16 +-
>   src/box/sql/sqliteLimit.h                          |    3 +-
>   src/box/sql/vdbe.c                                 |    2 +-
>   src/box/sql/wherecode.c                            |    2 +-
>   src/box/sql/whereexpr.c                            |  157 +-
>   test/sql-tap/alter.test.lua                        |    6 +-
>   test/sql-tap/analyze9.test.lua                     |    8 +-
>   test/sql-tap/e_expr.test.lua                       |  311 +-
>   .../gh-3251-string-pattern-comparison.test.lua     |    6 +-
>   test/sql-tap/like2.test.lua                        |   10 +-
>   test/sql-tap/like3.test.lua                        |   26 +-
>   test/sql-tap/tkt1537.test.lua                      |    4 +-
>   test/sql-tap/triggerA.test.lua                     |    2 +-
>   test/sql-tap/where3.test.lua                       |    6 +-
>   test/sql-tap/where7.test.lua                       | 4780 ++++++++++----------
>   19 files changed, 2818 insertions(+), 2916 deletions(-)
>
> diff --git a/extra/mkkeywordhash.c b/extra/mkkeywordhash.c
> index 990c419..1fee3a7 100644
> --- a/extra/mkkeywordhash.c
> +++ b/extra/mkkeywordhash.c
> @@ -159,7 +159,6 @@ static Keyword aKeywordTable[] = {
>     { "FOR",                    "TK_FOR",         TRIGGER,          true  },
>     { "FOREIGN",                "TK_FOREIGN",     FKEY,             true  },
>     { "FROM",                   "TK_FROM",        ALWAYS,           true  },
> -  { "GLOB",                   "TK_LIKE_KW",     ALWAYS,           false },
>     { "GROUP",                  "TK_GROUP",       ALWAYS,           true  },
>     { "HAVING",                 "TK_HAVING",      ALWAYS,           true  },
>     { "IF",                     "TK_IF",          ALWAYS,           true  },
> diff --git a/src/box/sql/analyze.c b/src/box/sql/analyze.c
> index 5f73f02..fc7588c 100644
> --- a/src/box/sql/analyze.c
> +++ b/src/box/sql/analyze.c
> @@ -829,7 +829,7 @@ analyzeOneTable(Parse * pParse,	/* Parser context */
>   		return;
>   	}
>   	assert(pTab->tnum != 0);
> -	if (sqlite3_strlike("\\_%", pTab->def->name, '\\') == 0) {
> +	if (sql_strlike_ci("\\_%", pTab->def->name, '\\') == 0) {
>   		/* Do not gather statistics on system tables */
>   		return;
>   	}
> @@ -1333,11 +1333,10 @@ analysis_loader(void *data, int argc, char **argv, char **unused)
>   	/* Position ptr at the end of stat string. */
>   	for (; *z == ' ' || (*z >= '0' && *z <= '9'); ++z);
>   	while (z[0]) {
> -		if (sqlite3_strglob("unordered*", z) == 0) {
> +		if (sql_strlike_cs("unordered%", z, '[') == 0)
>   			index->def->opts.stat->is_unordered = true;
> -		} else if (sqlite3_strglob("noskipscan*", z) == 0) {
> +		else if (sql_strlike_cs("noskipscan%", z, '[') == 0)
>   			index->def->opts.stat->skip_scan_enabled = false;
> -		}
>   		while (z[0] != 0 && z[0] != ' ')
>   			z++;
>   		while (z[0] == ' ')
> diff --git a/src/box/sql/func.c b/src/box/sql/func.c
> index 66cae17..177193e 100644
> --- a/src/box/sql/func.c
> +++ b/src/box/sql/func.c
> @@ -607,41 +607,32 @@ total_changes(sqlite3_context * context, int NotUsed, sqlite3_value ** NotUsed2)
>   	sqlite3_result_int(context, sqlite3_total_changes(db));
>   }
>   
> -/*
> - * A structure defining how to do GLOB-style comparisons.
> - */
> -struct compareInfo {
> -	u8 matchAll;		/* "*" or "%" */
> -	u8 matchOne;		/* "?" or "_" */
> -	u8 matchSet;		/* "[" or 0 */
> -	u8 noCase;		/* true to ignore case differences */
> -};
> -
>   /**
> - * Providing there are symbols in string s this
> - * macro returns UTF-8 code of character and
> - * promotes pointer to the next symbol in the string.
> - * Otherwise return code is SQL_END_OF_STRING.
> + * Providing there are symbols in string s this macro returns
> + * UTF-8 code of character and promotes pointer to the next
> + * symbol in the string. If s points to an invalid UTF-8 symbol
> + * return code is SQL_INVALID_UTF8_SYMBOL. If there're no symbols
> + * left in string s return code is SQL_END_OF_STRING.
>    */
>   #define Utf8Read(s, e) ucnv_getNextUChar(pUtf8conv, &(s), (e), &(status))
>   
>   #define SQL_END_OF_STRING        0xffff
>   #define SQL_INVALID_UTF8_SYMBOL  0xfffd
>   
> -static const struct compareInfo globInfo = { '*', '?', '[', 0 };
> -
> -/* The correct SQL-92 behavior is for the LIKE operator to ignore
> - * case.  Thus  'a' LIKE 'A' would be true.
> +/**
> + * If SQLITE_CASE_SENSITIVE_LIKE is not defined, then the LIKE
> + * operator is not case sensitive.
>    */
> -static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
> +static const int case_insensitive_like = 1;
>   
> -/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
> - * is case sensitive causing 'a' LIKE 'A' to be false
> +/**
> + * If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE
> + * operator is case sensitive causing 'a' LIKE 'A' to be false.
>    */
> -static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
> +static const int case_sensitive_like = 0;
>   
> -/*
> - * Possible error returns from sql_utf8_pattern_compare()
> +/**
> + * Possible error returns from sql_utf8_pattern_compare().
>    */
>   #define SQL_MATCH                0
>   #define SQL_NOMATCH              1
> @@ -650,138 +641,95 @@ static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
>   
>   /**
>    * Compare two UTF-8 strings for equality where the first string
> - * is a GLOB or LIKE expression.
> - *
> - * Globbing rules:
> - *
> - *      '*'       Matches any sequence of zero or more characters.
> - *
> - *      '?'       Matches exactly one character.
> - *
> - *     [...]      Matches one character from the enclosed list of
> - *                characters.
> - *
> - *     [^...]     Matches one character not in the enclosed list.
> - *
> - * With the [...] and [^...] matching, a ']' character can be
> - * included in the list by making it the first character after
> - * '[' or '^'. A range of characters can be specified using '-'.
> - * Example: "[a-z]" matches any single lower-case letter.
> - * To match a '-', make it the last character in the list.
> + * is a LIKE expression.
>    *
>    * Like matching rules:
>    *
> - *      '%'       Matches any sequence of zero or more characters.
> + *      '%'       Matches any sequence of zero or more
> + *                characters.
>    *
>    *      '_'       Matches any one character.
>    *
> - *      Ec        Where E is the "esc" character and c is any other
> - *                character, including '%', '_', and esc, match
> - *                exactly c.
> - *
> - * The comments within this routine usually assume glob matching.
> + *      Ec        Where E is the "esc" character and c is any
> + *                other character, including '%', '_', and esc,
> + *                match exactly c.
>    *
>    * This routine is usually quick, but can be N**2 in the worst
>    * case.
>    *
>    * @param pattern String containing comparison pattern.
>    * @param string String being compared.
> - * @param compareInfo Information about how to compare.
> - * @param matchOther The escape char (LIKE) or '[' (GLOB).
> + * @param is_like_ci true if LIKE is case insensitive.
> + * @param match_other The escape char for LIKE.
>    *
>    * @retval SQL_MATCH:               Match.
>    *	   SQL_NOMATCH:             No match.
> - *	   SQL_NOWILDCARDMATCH:     No match in spite of having *
> - *				    or % wildcards.
> + *	   SQL_NOWILDCARDMATCH:     No match in spite of having %
> + *				    wildcard.
>    *	   SQL_INVALID_PATTERN:     Pattern contains invalid
>    *				    symbol.
>    */
>   static int
>   sql_utf8_pattern_compare(const char *pattern,
>   			 const char *string,
> -			 const struct compareInfo *pInfo,
> -			 UChar32 matchOther)
> +			 const int *is_like_ci,
Pass this parameter by value.
> +			 UChar32 match_other)
>   {
>   	/* Next pattern and input string chars */
>   	UChar32 c, c2;
> -	/* "?" or "_" */
> -	UChar32 matchOne = pInfo->matchOne;
> -	/* "*" or "%" */
> -	UChar32 matchAll = pInfo->matchAll;
> -	/* True if uppercase==lowercase */
> -	UChar32 noCase = pInfo->noCase;
> +	/* "_" */
> +	UChar32 match_one = '_';
> +	/* "%" */
> +	UChar32 match_all = '%';
This variables consumes stack. Can they be moved to defines?
If it will break smth, make them const.
>   	/* One past the last escaped input char */
>   	const char *zEscaped = 0;
> -	const char * pattern_end = pattern + strlen(pattern);
> -	const char * string_end = string + strlen(string);
> +	const char *pattern_end = pattern + strlen(pattern);
> +	const char *string_end = string + strlen(string);
>   	UErrorCode status = U_ZERO_ERROR;
>   
>   	while (pattern < pattern_end) {
>   		c = Utf8Read(pattern, pattern_end);
>   		if (c == SQL_INVALID_UTF8_SYMBOL)
>   			return SQL_INVALID_PATTERN;
> -		if (c == matchAll) {	/* Match "*" */
> -			/* Skip over multiple "*" characters in
> -			 * the pattern. If there are also "?"
> +		if (c == match_all) {
> +			/**
> +			 * Skip over multiple "%" characters in
> +			 * the pattern. If there are also "_"
>   			 * characters, skip those as well, but
>   			 * consume a single character of the
> -			 * input string for each "?" skipped.
> +			 * input string for each "_" skipped.
>   			 */
>   			while ((c = Utf8Read(pattern, pattern_end)) !=
>   			       SQL_END_OF_STRING) {
>   				if (c == SQL_INVALID_UTF8_SYMBOL)
>   					return SQL_INVALID_PATTERN;
> -				if (c != matchAll && c != matchOne)
> +				if (c != match_all && c != match_one)
>   					break;
> -				if (c == matchOne &&
> +				if (c == match_one &&
>   				    (c2 = Utf8Read(string, string_end)) ==
>   				    SQL_END_OF_STRING)
>   					return SQL_NOWILDCARDMATCH;
>   				if (c2 == SQL_INVALID_UTF8_SYMBOL)
>   					return SQL_NOMATCH;
>   			}
> -			/*
> -			 * "*" at the end of the pattern matches.
> +			/**
> +			 * "%" at the end of the pattern matches.
>   			 */
>   			if (c == SQL_END_OF_STRING) {
>   				return SQL_MATCH;
>   			}
> -			if (c == matchOther) {
> -				if (pInfo->matchSet == 0) {
> -					c = Utf8Read(pattern, pattern_end);
> -					if (c == SQL_INVALID_UTF8_SYMBOL)
> -						return SQL_INVALID_PATTERN;
> -					if (c == SQL_END_OF_STRING)
> -						return SQL_NOWILDCARDMATCH;
> -				} else {
> -					/* "[...]" immediately
> -					 * follows the "*". We
> -					 * have to do a slow
> -					 * recursive search in
> -					 * this case, but it is
> -					 * an unusual case.
> -					 */
> -					assert(matchOther < 0x80);
> -					while (string < string_end) {
> -						int bMatch =
> -						    sql_utf8_pattern_compare(
> -								&pattern[-1],
> -								string,
> -								pInfo,
> -								matchOther);
> -						if (bMatch != SQL_NOMATCH)
> -							return bMatch;
> -						c = Utf8Read(string, string_end);
> -						if (c == SQL_INVALID_UTF8_SYMBOL)
> -							return SQL_NOMATCH;
> -					}
> +			if (c == match_other) {
> +				c = Utf8Read(pattern, pattern_end);
> +				if (c == SQL_INVALID_UTF8_SYMBOL)
> +					return SQL_INVALID_PATTERN;
> +				if (c == SQL_END_OF_STRING)
>   					return SQL_NOWILDCARDMATCH;
> -				}
>   			}
>   
> -			/* At this point variable c contains the
> +			/**
> +			 * At this point variable c contains the
>   			 * first character of the pattern string
> -			 * past the "*". Search in the input
> +			 * past the "%". Search in the input
>   			 * string for the first matching
>   			 * character and recursively continue the
>   			 * match from that point.
> @@ -793,7 +741,7 @@ sql_utf8_pattern_compare(const char *pattern,
>   			 */
>   
>   			int bMatch;
> -			if (noCase)
> +			if (*is_like_ci)
>   				c = u_tolower(c);
>   			while (string < string_end){
>   				/**
> @@ -809,7 +757,7 @@ sql_utf8_pattern_compare(const char *pattern,
>   				c2 = Utf8Read(string, string_end);
>   				if (c2 == SQL_INVALID_UTF8_SYMBOL)
>   					return SQL_NOMATCH;
> -				if (!noCase) {
> +				if (!(*is_like_ci)) {
>   					if (c2 != c)
>   						continue;
>   				} else {
> @@ -818,79 +766,27 @@ sql_utf8_pattern_compare(const char *pattern,
>   				}
>   				bMatch = sql_utf8_pattern_compare(pattern,
>   								  string,
> -								  pInfo,
> -								  matchOther);
> +								  is_like_ci,
> +								  match_other);
>   				if (bMatch != SQL_NOMATCH)
>   					return bMatch;
>   			}
>   			return SQL_NOWILDCARDMATCH;
>   		}
> -		if (c == matchOther) {
> -			if (pInfo->matchSet == 0) {
> -				c = Utf8Read(pattern, pattern_end);
> -				if (c == SQL_INVALID_UTF8_SYMBOL)
> -					return SQL_INVALID_PATTERN;
> -				if (c == SQL_END_OF_STRING)
> -					return SQL_NOMATCH;
> -				zEscaped = pattern;
> -			} else {
> -				UChar32 prior_c = 0;
> -				int seen = 0;
> -				int invert = 0;
> -				c = Utf8Read(string, string_end);
> -				if (c == SQL_INVALID_UTF8_SYMBOL)
> -					return SQL_NOMATCH;
> -				if (string == string_end)
> -					return SQL_NOMATCH;
> -				c2 = Utf8Read(pattern, pattern_end);
> -				if (c2 == SQL_INVALID_UTF8_SYMBOL)
> -					return SQL_INVALID_PATTERN;
> -				if (c2 == '^') {
> -					invert = 1;
> -					c2 = Utf8Read(pattern, pattern_end);
> -					if (c2 == SQL_INVALID_UTF8_SYMBOL)
> -						return SQL_INVALID_PATTERN;
> -				}
> -				if (c2 == ']') {
> -					if (c == ']')
> -						seen = 1;
> -					c2 = Utf8Read(pattern, pattern_end);
> -					if (c2 == SQL_INVALID_UTF8_SYMBOL)
> -						return SQL_INVALID_PATTERN;
> -				}
> -				while (c2 != SQL_END_OF_STRING && c2 != ']') {
> -					if (c2 == '-' && pattern[0] != ']'
> -					    && pattern < pattern_end
> -					    && prior_c > 0) {
> -						c2 = Utf8Read(pattern, pattern_end);
> -						if (c2 == SQL_INVALID_UTF8_SYMBOL)
> -							return SQL_INVALID_PATTERN;
> -						if (c >= prior_c && c <= c2)
> -							seen = 1;
> -						prior_c = 0;
> -					} else {
> -						if (c == c2) {
> -							seen = 1;
> -						}
> -						prior_c = c2;
> -					}
> -					c2 = Utf8Read(pattern, pattern_end);
> -					if (c2 == SQL_INVALID_UTF8_SYMBOL)
> -						return SQL_INVALID_PATTERN;
> -				}
> -				if (pattern == pattern_end ||
> -				    (seen ^ invert) == 0) {
> -					return SQL_NOMATCH;
> -				}
> -				continue;
> -			}
> +		if (c == match_other) {
> +			c = Utf8Read(pattern, pattern_end);
> +			if (c == SQL_INVALID_UTF8_SYMBOL)
> +				return SQL_INVALID_PATTERN;
> +			if (c == SQL_END_OF_STRING)
> +				return SQL_NOMATCH;
> +			zEscaped = pattern;
>   		}
>   		c2 = Utf8Read(string, string_end);
>   		if (c2 == SQL_INVALID_UTF8_SYMBOL)
>   			return SQL_NOMATCH;
>   		if (c == c2)
>   			continue;
> -		if (noCase){
> +		if (*is_like_ci) {
>   			/**
>   			 * Small optimisation. Reduce number of
>   			 * calls to u_tolower function. SQL
> @@ -903,7 +799,7 @@ sql_utf8_pattern_compare(const char *pattern,
>   			    c == u_tolower(c2))
>   				continue;
>   		}
> -		if (c == matchOne && pattern != zEscaped &&
> +		if (c == match_one && pattern != zEscaped &&
>   		    c2 != SQL_END_OF_STRING)
>   			continue;
>   		return SQL_NOMATCH;
> @@ -911,55 +807,52 @@ sql_utf8_pattern_compare(const char *pattern,
>   	return string == string_end ? SQL_MATCH : SQL_NOMATCH;
>   }
>   
> -/*
> - * The sqlite3_strglob() interface.  Return 0 on a match (like strcmp()) and
> - * non-zero if there is no match.
> +/**
> + * Compare two UTF-8 strings for equality using case sensitive
> + * sql_utf8_pattern_compare.
>    */
>   int
> -sqlite3_strglob(const char *zGlobPattern, const char *zString)
> +sql_strlike_cs(const char *zPattern, const char *zStr, unsigned int esc)
>   {
> -	return sql_utf8_pattern_compare(zGlobPattern, zString, &globInfo, '[');
> +	return sql_utf8_pattern_compare(zPattern, zStr, &case_sensitive_like, esc);
>   }
>   
> -/*
> - * The sqlite3_strlike() interface.  Return 0 on a match and non-zero for
> - * a miss - like strcmp().
> +/**
> + * Compare two UTF-8 strings for equality using case insensitive
> + * sql_utf8_pattern_compare.
>    */
>   int
> -sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc)
> +sql_strlike_ci(const char *zPattern, const char *zStr, unsigned int esc)
>   {
> -	return sql_utf8_pattern_compare(zPattern, zStr, &likeInfoNorm, esc);
> +	return sql_utf8_pattern_compare(zPattern, zStr, &case_insensitive_like, esc);
Hardcode `case_insensitive_like` value here.
>   }
>   
> -/*
> - * Count the number of times that the LIKE operator (or GLOB which is
> - * just a variation of LIKE) gets called.  This is used for testing
> - * only.
> +/**
> + * Count the number of times that the LIKE operator gets called.
> + * This is used for testing only.
>    */
>   #ifdef SQLITE_TEST
>   int sqlite3_like_count = 0;
>   #endif
>   
> -/*
> - * Implementation of the like() SQL function.  This function implements
> - * the build-in LIKE operator.  The first argument to the function is the
> - * pattern and the second argument is the string.  So, the SQL statements:
> +/**
> + * Implementation of the like() SQL function. This function
> + * implements the built-in LIKE operator. The first argument to
> + * the function is the pattern and the second argument is the
> + * string. So, the SQL statements of the following type:
>    *
>    *       A LIKE B
>    *
> - * is implemented as like(B,A).
> - *
> - * This same function (with a different compareInfo structure) computes
> - * the GLOB operator.
> + * are implemented as like(B,A).
>    */
>   static void
> -likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
> +likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
>   {
>   	const char *zA, *zB;
>   	u32 escape;
>   	int nPat;
>   	sqlite3 *db = sqlite3_context_db_handle(context);
> -	struct compareInfo *pInfo = sqlite3_user_data(context);
> +	int *is_like_ci = sqlite3_user_data(context);
>   
>   #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
>   	if (sqlite3_value_type(argv[0]) == SQLITE_BLOB
> @@ -974,8 +867,9 @@ likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
>   	zB = (const char *) sqlite3_value_text(argv[0]);
>   	zA = (const char *) sqlite3_value_text(argv[1]);
>   
> -	/* Limit the length of the LIKE or GLOB pattern to avoid
> -	 * problems of deep recursion and N*N behavior in
> +	/**
> +	 * Limit the length of the LIKE pattern to avoid problems
> +	 * of deep recursion and N*N behavior in
I thought that only globe could require N*N time. Check delete the comment.
>   	 * sql_utf8_pattern_compare().
>   	 */
>   	nPat = sqlite3_value_bytes(argv[0]);
> @@ -983,28 +877,29 @@ likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
>   	testcase(nPat == db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] + 1);
>   	if (nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]) {
>   		sqlite3_result_error(context,
> -				     "LIKE or GLOB pattern too complex", -1);
> +				     "LIKE pattern is too complex", -1);
>   		return;
>   	}
>   	/* Encoding did not change */
>   	assert(zB == (const char *) sqlite3_value_text(argv[0]));
>   
>   	if (argc == 3) {
> -		/* The escape character string must consist of a single UTF-8 character.
> -		 * Otherwise, return an error.
> +		/**
> +		 * The escape character string must consist of a
> +		 * single UTF-8 character. Otherwise, return an
> +		 * error.
>   		 */
>   		const unsigned char *zEsc = sqlite3_value_text(argv[2]);
>   		if (zEsc == 0)
>   			return;
>   		if (sqlite3Utf8CharLen((char *)zEsc, -1) != 1) {
>   			sqlite3_result_error(context,
> -					     "ESCAPE expression must be a single character",
> +					     "ESCAPE expression must be a"
> +					     " single character",
Do not split error messages at the middle of a sentence. It makes errors 
ungreppable.
Make it <80 somehow different.

>   					     -1);
>   			return;
>   		}
>   		escape = sqlite3Utf8Read(&zEsc);
> -	} else {
> -		escape = pInfo->matchSet;
>   	}
>   	if (!zA || !zB)
>   		return;
> @@ -1012,10 +907,10 @@ likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
>   	sqlite3_like_count++;
>   #endif
>   	int res;
> -	res = sql_utf8_pattern_compare(zB, zA, pInfo, escape);
> +	res = sql_utf8_pattern_compare(zB, zA, is_like_ci, escape);
>   	if (res == SQL_INVALID_PATTERN) {
> -		sqlite3_result_error(context, "LIKE or GLOB pattern can only"
> -				     " contain UTF-8 characters", -1);
> +		sqlite3_result_error(context, "LIKE pattern can only contain"
> +				     " UTF-8 characters", -1);
Do not split error messages at the middle of a sentence. Make it <80 
somehow different.
>   		return;
>   	}
>   	sqlite3_result_int(context, res == SQL_MATCH);
> @@ -1811,64 +1706,54 @@ setLikeOptFlag(sqlite3 * db, const char *zName, u8 flagVal)
>   	}
>   }
>   
> -/*
> - * Register the built-in LIKE and GLOB functions.  The caseSensitive
> - * parameter determines whether or not the LIKE operator is case
> - * sensitive.  GLOB is always case sensitive.
> +/**
> + * Register the built-in LIKE function.
> + *
> + * @param db database structure.
> + * @param is_case_sensitive whether like should be case sensitive
> + * 			 or not.
> + *
> + * @retval none.
>    */
>   void
> -sqlite3RegisterLikeFunctions(sqlite3 * db, int caseSensitive)
> +sqlite3RegisterLikeFunctions(sqlite3 *db, int is_case_sensitive)
>   {
> -	struct compareInfo *pInfo;
> -	if (caseSensitive) {
> -		pInfo = (struct compareInfo *)&likeInfoAlt;
> -	} else {
> -		pInfo = (struct compareInfo *)&likeInfoNorm;
> -	}
> -	sqlite3CreateFunc(db, "LIKE", 2, 0, pInfo, likeFunc, 0, 0, 0);
> -	sqlite3CreateFunc(db, "LIKE", 3, 0, pInfo, likeFunc, 0, 0, 0);
> -	sqlite3CreateFunc(db, "GLOB", 2, 0, (struct compareInfo *)&globInfo, likeFunc, 0, 0, 0);
> -	setLikeOptFlag(db, "GLOB", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
> +	int *is_like_ci;
> +	if (is_case_sensitive)
> +		is_like_ci = (int *)&case_sensitive_like;
pass this var by value.
> +	else
> +		is_like_ci = (int *)&case_insensitive_like;
> +	sqlite3CreateFunc(db, "LIKE", 2, 0, is_like_ci, likeFunc, 0, 0, 0);
> +	sqlite3CreateFunc(db, "LIKE", 3, 0, is_like_ci, likeFunc, 0, 0, 0);
>   	setLikeOptFlag(db, "LIKE",
> -		       caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) :
> -		       SQLITE_FUNC_LIKE);
> +		       is_case_sensitive ? (SQLITE_FUNC_LIKE |
> +		       SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
>   }
>   
> -/*
> - * pExpr points to an expression which implements a function.  If
> - * it is appropriate to apply the LIKE optimization to that function
> - * then set aWc[0] through aWc[2] to the wildcard characters and
> - * return TRUE.  If the function is not a LIKE-style function then
> - * return FALSE.
> +/**
> + * Check if the function implements LIKE-style comparison & if it
> + * is appropriate to apply a LIKE query optimization.
> + *
> + * @param db database structure.
> + * @param pExpr pointer to a function-implementing expression.
> + * @param is_like_ci true if LIKE is case insensitive.
>    *
> - * *pIsNocase is set to true if uppercase and lowercase are equivalent for
> - * the function (default for LIKE).  If the function makes the distinction
> - * between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
> - * false.
> + * @retval 0 if it's appropriate to apply optimization.
> + *         1 if it's not.
>    */
>   int
> -sqlite3IsLikeFunction(sqlite3 * db, Expr * pExpr, int *pIsNocase, char *aWc)
> +sql_is_like_func(sqlite3 *db, Expr *pExpr, int *is_like_ci)
>   {
>   	FuncDef *pDef;
> -	if (pExpr->op != TK_FUNCTION
> -	    || !pExpr->x.pList || pExpr->x.pList->nExpr != 2) {
> +	if (pExpr->op != TK_FUNCTION || !pExpr->x.pList ||
> +	    pExpr->x.pList->nExpr != 2)
>   		return 0;
> -	}
>   	assert(!ExprHasProperty(pExpr, EP_xIsSelect));
>   	pDef = sqlite3FindFunction(db, pExpr->u.zToken, 2, 0);
>   	if (NEVER(pDef == 0) || (pDef->funcFlags & SQLITE_FUNC_LIKE) == 0) {
>   		return 0;
>   	}
> -
> -	/* The memcpy() statement assumes that the wildcard characters are
> -	 * the first three statements in the compareInfo structure.  The
> -	 * asserts() that follow verify that assumption
> -	 */
> -	memcpy(aWc, pDef->pUserData, 3);
> -	assert((char *)&likeInfoAlt == (char *)&likeInfoAlt.matchAll);
> -	assert(&((char *)&likeInfoAlt)[1] == (char *)&likeInfoAlt.matchOne);
> -	assert(&((char *)&likeInfoAlt)[2] == (char *)&likeInfoAlt.matchSet);
> -	*pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE) == 0;
> +	*is_like_ci = (pDef->funcFlags & SQLITE_FUNC_CASE) == 0;
>   	return 1;
>   }
>   
> @@ -1962,16 +1847,14 @@ sqlite3RegisterBuiltinFunctions(void)
>   		AGGREGATE(group_concat, 2, 0, 0, groupConcatStep,
>   			  groupConcatFinalize),
>   
> -		LIKEFUNC(glob, 2, &globInfo,
> -			 SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE),
>   #ifdef SQLITE_CASE_SENSITIVE_LIKE
> -		LIKEFUNC(like, 2, &likeInfoAlt,
> +		LIKEFUNC(like, 2, &case_sensitive_like,
>   			 SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE),
> -		LIKEFUNC(like, 3, &likeInfoAlt,
> +		LIKEFUNC(like, 3, &case_sensitive_like,
>   			 SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE),
>   #else
> -		LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
> -		LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
> +		LIKEFUNC(like, 2, &case_insensitive_like, SQLITE_FUNC_LIKE),
> +		LIKEFUNC(like, 3, &case_insensitive_like, SQLITE_FUNC_LIKE),
>   #endif
>   #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
>   		FUNCTION(unknown, -1, 0, 0, unknownFunc),
> diff --git a/src/box/sql/pragma.c b/src/box/sql/pragma.c
> index 5fb29c7..26a602b 100644
> --- a/src/box/sql/pragma.c
> +++ b/src/box/sql/pragma.c
> @@ -771,8 +771,10 @@ sqlite3Pragma(Parse * pParse, Token * pId,	/* First part of [schema.]id field */
>   		}
>   #endif
>   
> -		/* Reinstall the LIKE and GLOB functions.  The variant of LIKE *
> -		 * used will be case sensitive or not depending on the RHS.
> +		/**
> +		 * Reinstall the LIKE and functions. The variant
> +		 * of LIKE * used will be case sensitive or not
> +		 * depending on the RHS.
>   		 */
>   	case PragTyp_CASE_SENSITIVE_LIKE:{
>   			if (zRight) {
> diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
> index e7a02dc..a805adf 100644
> --- a/src/box/sql/sqliteInt.h
> +++ b/src/box/sql/sqliteInt.h
> @@ -565,17 +565,16 @@ char *
>   sqlite3_vsnprintf(int, char *, const char *, va_list);
>   
>   int
> -sqlite3_strlike(const char *zGlob, const char *zStr,
> -		unsigned int cEsc);
> +sql_strlike_cs(const char *zLike, const char *zStr, unsigned int cEsc);
> +
> +int
> +sql_strlike_ci(const char *zLike, const char *zStr, unsigned int cEsc);
>   
>   typedef void (*sqlite3_destructor_type) (void *);
>   #define SQLITE_STATIC      ((sqlite3_destructor_type)0)
>   #define SQLITE_TRANSIENT   ((sqlite3_destructor_type)-1)
>   
>   int
> -sqlite3_strglob(const char *zGlob, const char *zStr);
> -
> -int
>   sqlite3_prepare(sqlite3 * db,	/* Database handle */
>   		const char *zSql,	/* SQL statement, UTF-8 encoded */
>   		int nByte,	/* Maximum length of zSql in bytes. */
> @@ -701,9 +700,6 @@ struct on_conflict {
>   	enum on_conflict_action optimized_action;
>   };
>   
> -void *
> -sqlite3_user_data(sqlite3_context *);
> -
>   void
>   sqlite3_randomness(int N, void *P);
>   
> @@ -2355,7 +2351,7 @@ struct Expr {
>   #define EP_Distinct  0x000010	/* Aggregate function with DISTINCT keyword */
>   #define EP_VarSelect 0x000020	/* pSelect is correlated, not constant */
>   #define EP_DblQuoted 0x000040	/* token.z was originally in "..." */
> -#define EP_InfixFunc 0x000080	/* True for an infix function: LIKE, GLOB, etc */
> +#define EP_InfixFunc 0x000080	/* True for an infix function: LIKE, etc */
>   #define EP_Collate   0x000100	/* Tree contains a TK_COLLATE operator */
>   #define EP_Generic   0x000200	/* Ignore COLLATE or affinity on this tree */
>   #define EP_IntValue  0x000400	/* Integer value contained in u.iValue */
> @@ -4378,7 +4374,7 @@ index_column_count(const Index *);
>   bool
>   index_is_unique_not_null(const Index *);
>   void sqlite3RegisterLikeFunctions(sqlite3 *, int);
> -int sqlite3IsLikeFunction(sqlite3 *, Expr *, int *, char *);
> +int sql_is_like_func(sqlite3 *db, Expr *pExpr, int *is_case_insensitive);
>   void sqlite3SchemaClear(sqlite3 *);
>   Schema *sqlite3SchemaCreate(sqlite3 *);
>   int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *,
> diff --git a/src/box/sql/sqliteLimit.h b/src/box/sql/sqliteLimit.h
> index b88c9c6..e76353a 100644
> --- a/src/box/sql/sqliteLimit.h
> +++ b/src/box/sql/sqliteLimit.h
> @@ -164,8 +164,7 @@ enum {
>   #endif
>   
>   /*
> - * Maximum length (in bytes) of the pattern in a LIKE or GLOB
> - * operator.
> + * Maximum length (in bytes) of the pattern in a LIKE operator.
>    */
>   #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH
>   #define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000
> diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
> index 0c97814..3f10f4d 100644
> --- a/src/box/sql/vdbe.c
> +++ b/src/box/sql/vdbe.c
> @@ -5521,7 +5521,7 @@ vdbe_return:
>   	testcase( nVmStep>0);
>   	p->aCounter[SQLITE_STMTSTATUS_VM_STEP] += (int)nVmStep;
>   	assert(rc!=SQLITE_OK || nExtraDelete==0
> -		|| sqlite3_strlike("DELETE%",p->zSql,0)!=0
> +		|| sql_strlike_ci("DELETE%", p->zSql, 0) != 0
>   		);
>   	return rc;
>   
> diff --git a/src/box/sql/wherecode.c b/src/box/sql/wherecode.c
> index c35c25a..f864ea7 100644
> --- a/src/box/sql/wherecode.c
> +++ b/src/box/sql/wherecode.c
> @@ -339,7 +339,7 @@ sqlite3WhereAddScanStatus(Vdbe * v,		/* Vdbe to add scanstatus entry to */
>    * automatically disabled.  In this way, terms get disabled if derived
>    * virtual terms are tested first.  For example:
>    *
> - *      x GLOB 'abc*' AND x>='abc' AND x<'acd'
> + *      x LIKE 'abc%' AND x>='abc' AND x<'acd'
>    *      \___________/     \______/     \_____/
>    *         parent          child1       child2
>    *
> diff --git a/src/box/sql/whereexpr.c b/src/box/sql/whereexpr.c
> index 6128686..947bd5d 100644
> --- a/src/box/sql/whereexpr.c
> +++ b/src/box/sql/whereexpr.c
> @@ -219,37 +219,57 @@ operatorMask(int op)
>   }
>   
>   #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
> -/*
> - * Check to see if the given expression is a LIKE or GLOB operator that
> - * can be optimized using inequality constraints.  Return TRUE if it is
> - * so and false if not.
> +/**
> + * Check to see if the given expression is a LIKE operator that
> + * can be optimized using inequality constraints.
> + *
> + * In order for the operator to be optimizible, the RHS must be a
> + * string literal that does not begin with a wildcard. The LHS
> + * must be a column that may only be NULL, a string, or a BLOB,
> + * never a number. The collating sequence for the column on the
> + * LHS must be appropriate for the operator.
> + *
> + * @param pParse      Parsing and code generating context.
> + * @param pExpr       Test this expression.
> + * @param ppPrefix    Pointer to TK_STRING expression with
> + *		      pattern prefix.
> + * @param pisComplete True if the only wildcard is '%' in the
> + * 		      last character.
> + * @param pnoCase     True if case insensitive.
>    *
> - * In order for the operator to be optimizible, the RHS must be a string
> - * literal that does not begin with a wildcard.  The LHS must be a column
> - * that may only be NULL, a string, or a BLOB, never a number. The
> - * collating sequence for the column on the LHS must be appropriate for
> - * the operator.
> + * @retval True if the given expr is a LIKE operator & is
> + *	   optimizable using inequality constraints.
> + * 	   False if not.
>    */
>   static int
> -isLikeOrGlob(Parse * pParse,	/* Parsing and code generating context */
> -	     Expr * pExpr,	/* Test this expression */
> -	     Expr ** ppPrefix,	/* Pointer to TK_STRING expression with pattern prefix */
> -	     int *pisComplete,	/* True if the only wildcard is % in the last character */
> -	     int *pnoCase	/* True if uppercase is equivalent to lowercase */
> -    )
> +is_like(Parse *pParse,
> +	Expr *pExpr,
> +	Expr **ppPrefix,
> +	int *pisComplete,
> +	int *pnoCase)
>   {
> -	const char *z = 0;	/* String on RHS of LIKE operator */
> -	Expr *pRight, *pLeft;	/* Right and left size of LIKE operator */
> -	ExprList *pList;	/* List of operands to the LIKE operator */
> -	int c;			/* One character in z[] */
> -	int cnt;		/* Number of non-wildcard prefix characters */
> -	char wc[3];		/* Wildcard characters */
> -	sqlite3 *db = pParse->db;	/* Database connection */
> +	/* String on RHS of LIKE operator */
> +	const char *z = 0;
> +	/* Right and left size of LIKE operator */
> +	Expr *pRight, *pLeft;
> +	/* List of operands to the LIKE operator */
> +	ExprList *pList;
> +	/* One character in z[] */
> +	int c;
> +	/* Number of non-wildcard prefix characters */
> +	int cnt;
> +	/* Wildcard characters */
> +	char match_all = '%';
> +	char match_one = '_';
> +	/* Database connection */
> +	sqlite3 *db = pParse->db;
>   	sqlite3_value *pVal = 0;
> -	int op;			/* Opcode of pRight */
> -	int rc;			/* Result code to return */
> +	/* Opcode of pRight */
> +	int op;
> +	/* Result code to return */
> +	int rc;
>   
> -	if (!sqlite3IsLikeFunction(db, pExpr, pnoCase, wc)) {
> +	if (!sql_is_like_func(db, pExpr, pnoCase)) {
>   		return 0;
>   	}
>   	pList = pExpr->x.pList;
> @@ -257,8 +277,9 @@ isLikeOrGlob(Parse * pParse,	/* Parsing and code generating context */
>   	/* Value might be numeric */
>   	if (pLeft->op != TK_COLUMN ||
>   	    sqlite3ExprAffinity(pLeft) != AFFINITY_TEXT) {
> -		/* IMP: R-02065-49465 The left-hand side of the LIKE or GLOB operator must
> -		 * be the name of an indexed column with TEXT affinity.
> +		/* IMP: R-02065-49465 The left-hand side of the
> +		 * LIKE operator must be the name of an indexed
> +		 * column with TEXT affinity.
>   		 */
>   		return 0;
>   	}
> @@ -281,13 +302,11 @@ isLikeOrGlob(Parse * pParse,	/* Parsing and code generating context */
>   	}
>   	if (z) {
>   		cnt = 0;
> -		while ((c = z[cnt]) != 0 && c != wc[0] && c != wc[1]
> -		       && c != wc[2]) {
> +		while ((c = z[cnt]) != 0 && c != match_one && c != match_all)
>   			cnt++;
> -		}
>   		if (cnt != 0 && 255 != (u8) z[cnt - 1]) {
>   			Expr *pPrefix;
> -			*pisComplete = c == wc[0] && z[cnt + 1] == 0;
> +			*pisComplete = c == match_all && z[cnt + 1] == 0;
>   			pPrefix = sqlite3Expr(db, TK_STRING, z);
>   			if (pPrefix)
>   				pPrefix->u.zToken[cnt] = 0;
> @@ -943,19 +962,32 @@ exprAnalyze(SrcList * pSrc,	/* the FROM clause */
>   	    int idxTerm		/* Index of the term to be analyzed */
>       )
>   {
> -	WhereInfo *pWInfo = pWC->pWInfo;	/* WHERE clause processing context */
> -	WhereTerm *pTerm;	/* The term to be analyzed */
> -	WhereMaskSet *pMaskSet;	/* Set of table index masks */
> -	Expr *pExpr;		/* The expression to be analyzed */
> -	Bitmask prereqLeft;	/* Prerequesites of the pExpr->pLeft */
> -	Bitmask prereqAll;	/* Prerequesites of pExpr */
> -	Bitmask extraRight = 0;	/* Extra dependencies on LEFT JOIN */
> -	Expr *pStr1 = 0;	/* RHS of LIKE/GLOB operator */
> -	int isComplete = 0;	/* RHS of LIKE/GLOB ends with wildcard */
> -	int noCase = 0;		/* uppercase equivalent to lowercase */
> -	int op;			/* Top-level operator.  pExpr->op */
> -	Parse *pParse = pWInfo->pParse;	/* Parsing context */
> -	sqlite3 *db = pParse->db;	/* Database connection */
> +	/* WHERE clause processing context */
> +	WhereInfo *pWInfo = pWC->pWInfo;
> +	/* The term to be analyzed */
> +	WhereTerm *pTerm;
> +	/* Set of table index masks */
> +	WhereMaskSet *pMaskSet;
> +	/* The expression to be analyzed */
> +	Expr *pExpr;
> +	/* Prerequesites of the pExpr->pLeft */
> +	Bitmask prereqLeft;
> +	/* Prerequesites of pExpr */
> +	Bitmask prereqAll;
> +	/* Extra dependencies on LEFT JOIN */
> +	Bitmask extraRight = 0;
> +	/* RHS of LIKE operator */
> +	Expr *pStr1 = 0;
> +	/* RHS of LIKE ends with wildcard */
> +	int isComplete = 0;
> +	/* uppercase equivalent to lowercase */
> +	int noCase = 0;
> +	/* Top-level operator. pExpr->op */
> +	int op;
> +	/* Parsing context */
> +	Parse *pParse = pWInfo->pParse;
> +	/* Database connection */
> +	sqlite3 *db = pParse->db;
>   
>   	if (db->mallocFailed) {
>   		return;
> @@ -1111,37 +1143,44 @@ exprAnalyze(SrcList * pSrc,	/* the FROM clause */
>   #endif				/* SQLITE_OMIT_OR_OPTIMIZATION */
>   
>   #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
> -	/* Add constraints to reduce the search space on a LIKE or GLOB
> +	/**
> +	 * Add constraints to reduce the search space on a LIKE
>   	 * operator.
>   	 *
> -	 * A like pattern of the form "x LIKE 'aBc%'" is changed into constraints
> +	 * A like pattern of the form "x LIKE 'aBc%'" is changed
> +	 * into constraints:
>   	 *
>   	 *          x>='ABC' AND x<'abd' AND x LIKE 'aBc%'
>   	 *
> -	 * The last character of the prefix "abc" is incremented to form the
> -	 * termination condition "abd".  If case is not significant (the default
> -	 * for LIKE) then the lower-bound is made all uppercase and the upper-
> -	 * bound is made all lowercase so that the bounds also work when comparing
> -	 * BLOBs.
> +	 * The last character of the prefix "abc" is incremented
> +	 * to form the termination condition "abd". If case is
> +	 * not significant (the default for LIKE) then the
> +	 * lower-bound is made all uppercase and the upper-bound
> +	 * is made all lowercase so that the bounds also work
> +	 * when comparing BLOBs.
>   	 */
>   	if (pWC->op == TK_AND
> -	    && isLikeOrGlob(pParse, pExpr, &pStr1, &isComplete, &noCase)
> -	    ) {
> -		Expr *pLeft;	/* LHS of LIKE/GLOB operator */
> -		Expr *pStr2;	/* Copy of pStr1 - RHS of LIKE/GLOB operator */
> +	    && is_like(pParse, pExpr, &pStr1, &isComplete, &noCase)) {
> +		/* LHS of LIKE operator */
> +		Expr *pLeft;
> +		/* Copy of pStr1 - RHS of LIKE operator */
> +		Expr *pStr2;
>   		Expr *pNewExpr1;
>   		Expr *pNewExpr2;
>   		int idxNew1;
>   		int idxNew2;
> -		const char *zCollSeqName;	/* Name of collating sequence */
> +		/* Name of collating sequence */
> +		const char *zCollSeqName;
>   		const u16 wtFlags = TERM_LIKEOPT | TERM_VIRTUAL | TERM_DYNAMIC;
>   
>   		pLeft = pExpr->x.pList->a[1].pExpr;
>   		pStr2 = sqlite3ExprDup(db, pStr1, 0);
>   
> -		/* Convert the lower bound to upper-case and the upper bound to
> -		 * lower-case (upper-case is less than lower-case in ASCII) so that
> -		 * the range constraints also work for BLOBs
> +		/**
> +		 * Convert the lower bound to upper-case and the
> +		 * upper bound to lower-case (upper-case is less
> +		 * than lower-case in ASCII) so that the range
> +		 * constraints also work for BLOBs
>   		 */
>   		if (noCase && !pParse->db->mallocFailed) {
>   			int i;
> diff --git a/test/sql-tap/alter.test.lua b/test/sql-tap/alter.test.lua
> index cfe2801..773bdeb 100755
> --- a/test/sql-tap/alter.test.lua
> +++ b/test/sql-tap/alter.test.lua
> @@ -230,9 +230,10 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "alter-5.1",
>       [[
> +        PRAGMA case_sensitive_like = true;
>           CREATE TABLE xyz(x PRIMARY KEY);
>           ALTER TABLE xyz RENAME TO "xyz1234abc";
> -        SELECT "name" FROM "_space" WHERE "name" GLOB 'xyz*';
> +        SELECT "name" FROM "_space" WHERE "name" LIKE 'xyz%';
This test become unreasonably complex.
Do just "select where name = 'xyz1234abc'
Or at least delete case_sensitive...
>       ]], {
>           -- <alter-5.1>
>           "xyz1234abc"
> @@ -243,7 +244,8 @@ test:do_execsql_test(
>       "alter-5.2",
>       [[
>           ALTER TABLE "xyz1234abc" RENAME TO xyzabc;
> -        SELECT "name" FROM "_space" WHERE "name" GLOB 'XYZ*';
> +        SELECT "name" FROM "_space" WHERE "name" LIKE 'XYZ%';
> +        PRAGMA case_sensitive_like = false;
This test become unreasonably complex.
Do just "select where name = 'xyz1234abc'
>       ]], {
>           -- <alter-5.2>
>           "XYZABC"
> diff --git a/test/sql-tap/analyze9.test.lua b/test/sql-tap/analyze9.test.lua
> index 3b3d52f..ec3e545 100755
> --- a/test/sql-tap/analyze9.test.lua
> +++ b/test/sql-tap/analyze9.test.lua
> @@ -206,10 +206,10 @@ test:do_execsql_test(
>           INSERT INTO t1 VALUES(81, 1, 'one-i');
>           INSERT INTO t1 VALUES(91, 1, 'one-j');
>           INSERT INTO t1 SELECT a+1,2,'two' || substr(c,4) FROM t1;
> -        INSERT INTO t1 SELECT a+2,3,'three'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
> -        INSERT INTO t1 SELECT a+3,4,'four'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
> -        INSERT INTO t1 SELECT a+4,5,'five'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
> -        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';	
> +        INSERT INTO t1 SELECT a+2,3,'three'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';
> +        INSERT INTO t1 SELECT a+3,4,'four'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';
> +        INSERT INTO t1 SELECT a+4,5,'five'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';
> +        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';	
>           CREATE INDEX t1b ON t1(b);
>           ANALYZE;
>           SELECT c FROM t1 WHERE b=3 AND a BETWEEN 30 AND 60;
> diff --git a/test/sql-tap/e_expr.test.lua b/test/sql-tap/e_expr.test.lua
> index 9780d2c..1620268 100755
> --- a/test/sql-tap/e_expr.test.lua
> +++ b/test/sql-tap/e_expr.test.lua
> @@ -1,6 +1,6 @@
>   #!/usr/bin/env tarantool
>   test = require("sqltester")
> -test:plan(10665)
> +test:plan(11521)
>   
>   --!./tcltestrunner.lua
>   -- 2010 July 16
> @@ -77,10 +77,7 @@ local operations = {
>       {"<>", "ne1"},
>       {"!=", "ne2"},
>       {"IS", "is"},
> --- NOTE: This test needs refactoring after deletion of GLOB &
> ---	 type restrictions for LIKE. (See #3572)
> ---    {"LIKE", "like"},
> ---    {"GLOB", "glob"},
> +    {"LIKE", "like"},
>       {"AND", "and"},
>       {"OR", "or"},
>       {"MATCH", "match"},
> @@ -98,12 +95,9 @@ operations = {
>       {"+", "-"},
>       {"<<", ">>", "&", "|"},
>       {"<", "<=", ">", ">="},
> --- NOTE: This test needs refactoring after deletion of GLOB &
> ---	 type restrictions for LIKE. (See #3572)
>   -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
> --- 		 are waiting for their hour, don't confuse them
> ---		 being commented with ticket above.
> -    {"=", "==", "!=", "<>"}, --"LIKE", "GLOB"}, --"MATCH", "REGEXP"},
> +-- 		 are waiting for their hour.
> +    {"=", "==", "!=", "<>", "LIKE"}, --"MATCH", "REGEXP"},
>       {"AND"},
>       {"OR"},
>   }
> @@ -128,7 +122,7 @@ end
>   -- EVIDENCE-OF: R-15514-65163 SQLite understands the following binary
>   -- operators, in order from highest to lowest precedence: || * / % + -
>   -- << >> & | < <= > >= = == != <> IS IS
> --- NOT IN LIKE GLOB MATCH REGEXP AND OR
> +-- NOT IN LIKE MATCH REGEXP AND OR
>   --
>   -- EVIDENCE-OF: R-38759-38789 Operators IS and IS NOT have the same
>   -- precedence as =.
> @@ -467,18 +461,63 @@ literals = {
>   for _, op in ipairs(oplist) do
>       for n1, rhs in ipairs(literals) do
>           for n2, lhs in ipairs(literals) do
> -            local t = test:execsql(string.format(" SELECT typeof(%s %s %s) ", lhs, op, rhs))[1]
> -            test:do_test(
> -                string.format("e_expr-7.%s.%s.%s", opname[op], n1, n2),
> -                function()
> -                    --print("\n op "..op.." t "..t)
> -                    return (((op == "||") and ((t == "text") or
> -                            (t == "null"))) or
> -                            ((op ~= "||") and (((t == "integer") or
> -                                    (t == "real")) or
> -                                    (t == "null")))) and 1 or 0
> -                end, 1)
> +            if op ~= "LIKE" then
1. Why do not just delete like from `oplist`?
2. We were discussing this place with you and Georgy, and decided that 
you do
not touch this for loop at all.
> +                local t = test:execsql(string.format(" SELECT typeof(%s %s %s) ", lhs, op, rhs))[1]
> +                test:do_test(
> +                    string.format("e_expr-7.%s.%s.%s", opname[op], n1, n2),
> +                    function()
> +                        return (((op == "||") and ((t == "text") or
> +                                (t == "null"))) or
> +                                ((op ~= "||") and (((t == "integer") or
> +                                 (t == "real")) or
> +                                 (t == "null")))) and 1 or 0
> +                    end, 1)
> +            end
> +        end
> +    end
> +end
> +
> +local valid_patterns =
> +    {"'abc'", "'hexadecimal'", "''", 123, -123, 0,
> +    123.4, 0.0, -123.4, "X''", "X'0000'", "NULL"}
> +
> +local invalid_patterns = {"X'ABCDEF'"}
> +
> +for n1, rhs in ipairs(valid_patterns) do
> +    for n2, lhs in ipairs(literals) do
> +        local t = test:execsql(string.format(" SELECT typeof(%s LIKE %s) ", lhs, rhs))[1]
> +        test:do_test(
> +            string.format("e_expr-7.%s.LIKE.%s", n1, n2),
> +            function()
> +                return (t == "integer" or
> +                        t == "real" or
> +                        t == "null") and 1 or 0
> +            end, 1)
> +    end
> +end
>   
> +for n1, rhs in ipairs(invalid_patterns) do
> +    for n2, lhs in ipairs(literals) do
> +        local t = string.format(" SELECT typeof(%s LIKE %s) ", lhs, rhs)
> +        local test_name = string.format("e_expr-7.%s.LIKE.%s", n1 + 12, n2)
> +        if n2 ~= 13 then
> +            test:do_catchsql_test(
> +                test_name,
> +                t,
> +                {
> +                    -- <test_name>
> +                    1, "LIKE pattern can only contain UTF-8 characters"
> +                    -- <test_name>
> +                })
> +        else
> +            test:do_catchsql_test(
> +                test_name,
> +                t,
> +                {
> +                    -- <test_name>
> +                    0, {"null"}
> +                    -- <test_name>
> +                })
>           end
>       end
>   end
> @@ -1303,13 +1342,16 @@ end
>   test:execsql [[
>       CREATE TABLE tblname(cname PRIMARY KEY);
>   ]]
> -local function glob(args)
> -    return 1
> -end
>   
> -box.internal.sql_create_function("GLOB", glob)
> -box.internal.sql_create_function("MATCH", glob)
> -box.internal.sql_create_function("REGEXP", glob)
> +-- NOTE: GLOB is removed from Tarantool, thus it'll be needed to
> +--       refactor these calls. They don't work right now since
> +--          we don't support MATHC & REGEXP.
> +-- local function glob(args)
> +--     return 1
> +-- end
This test do not test the glob function. Delete this comment.
> +
> +-- box.internal.sql_create_function("MATCH", glob)
> +-- box.internal.sql_create_function("REGEXP", glob)
You was lucky that commenting those lines do not break the tests. 
(because there is a similar
code above)
Return it back.
>   local test_cases12 ={
>       {1, 123},
>       {2, 123.4e05},
> @@ -1369,47 +1411,43 @@ local test_cases12 ={
>   
>       {47, "EXPR1 LIKE EXPR2"},
>       {48, "EXPR1 LIKE EXPR2 ESCAPE EXPR"},
> -    {49, "EXPR1 GLOB EXPR2"},
> -    {50, "EXPR1 GLOB EXPR2 ESCAPE EXPR"},
> -    {51, "EXPR1 REGEXP EXPR2"},
> -    {52, "EXPR1 REGEXP EXPR2 ESCAPE EXPR"},
> -    {53, "EXPR1 MATCH EXPR2"},
> -    {54, "EXPR1 MATCH EXPR2 ESCAPE EXPR"},
> -    {55, "EXPR1 NOT LIKE EXPR2"},
> -    {56, "EXPR1 NOT LIKE EXPR2 ESCAPE EXPR"},
> -    {57, "EXPR1 NOT GLOB EXPR2"},
> -    {58, "EXPR1 NOT GLOB EXPR2 ESCAPE EXPR"},
> -    {59, "EXPR1 NOT REGEXP EXPR2"},
> -    {60, "EXPR1 NOT REGEXP EXPR2 ESCAPE EXPR"},
> -    {61, "EXPR1 NOT MATCH EXPR2"},
> -    {62, "EXPR1 NOT MATCH EXPR2 ESCAPE EXPR"},
> -
> -    {63, "EXPR IS NULL"},
> -    {64, "EXPR IS NOT NULL"},
> -
> -    {65, "EXPR NOT BETWEEN EXPR1 AND EXPR2"},
> -    {66, "EXPR BETWEEN EXPR1 AND EXPR2"},
> -
> -    {67, "EXPR NOT IN (SELECT cname FROM tblname)"},
> -    {68, "EXPR NOT IN (1)"},
> -    {69, "EXPR NOT IN (1, 2, 3)"},
> -    {70, "EXPR NOT IN tblname"},
> -    {71, "EXPR IN (SELECT cname FROM tblname)"},
> -    {72, "EXPR IN (1)"},
> -    {73, "EXPR IN (1, 2, 3)"},
> -    {74, "EXPR IN tblname"},
> -
> -    {75, "EXISTS (SELECT cname FROM tblname)"},
> -    {76, "NOT EXISTS (SELECT cname FROM tblname)"},
> -
> -    {77, "CASE EXPR WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
> -    {78, "CASE EXPR WHEN EXPR1 THEN EXPR2 END"},
> -    {79, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"},
> -    {80, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
> -    {81, "CASE WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
> -    {82, "CASE WHEN EXPR1 THEN EXPR2 END"},
> -    {83, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"},
> -    {84, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
> +    {49, "EXPR1 REGEXP EXPR2"},
> +    {50, "EXPR1 REGEXP EXPR2 ESCAPE EXPR"},
> +    {51, "EXPR1 MATCH EXPR2"},
> +    {52, "EXPR1 MATCH EXPR2 ESCAPE EXPR"},
> +    {53, "EXPR1 NOT LIKE EXPR2"},
> +    {54, "EXPR1 NOT LIKE EXPR2 ESCAPE EXPR"},
> +    {55, "EXPR1 NOT REGEXP EXPR2"},
> +    {56, "EXPR1 NOT REGEXP EXPR2 ESCAPE EXPR"},
> +    {57, "EXPR1 NOT MATCH EXPR2"},
> +    {58, "EXPR1 NOT MATCH EXPR2 ESCAPE EXPR"},
> +
> +    {59, "EXPR IS NULL"},
> +    {60, "EXPR IS NOT NULL"},
> +
> +    {61, "EXPR NOT BETWEEN EXPR1 AND EXPR2"},
> +    {62, "EXPR BETWEEN EXPR1 AND EXPR2"},
> +
> +    {63, "EXPR NOT IN (SELECT cname FROM tblname)"},
> +    {64, "EXPR NOT IN (1)"},
> +    {65, "EXPR NOT IN (1, 2, 3)"},
> +    {66, "EXPR NOT IN tblname"},
> +    {67, "EXPR IN (SELECT cname FROM tblname)"},
> +    {68, "EXPR IN (1)"},
> +    {69, "EXPR IN (1, 2, 3)"},
> +    {70, "EXPR IN tblname"},
> +
> +    {71, "EXISTS (SELECT cname FROM tblname)"},
> +    {72, "NOT EXISTS (SELECT cname FROM tblname)"},
> +
> +    {73, "CASE EXPR WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
> +    {74, "CASE EXPR WHEN EXPR1 THEN EXPR2 END"},
> +    {75, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"},
> +    {76, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
> +    {77, "CASE WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
> +    {78, "CASE WHEN EXPR1 THEN EXPR2 END"},
> +    {79, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"},
> +    {80, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
>   }
>   
>   for _, val in ipairs(test_cases12) do
> @@ -1802,7 +1840,7 @@ test:do_execsql_test(
>       })
>   
>   ---------------------------------------------------------------------------
> --- Test the statements related to the LIKE and GLOB operators.
> +-- Test the statements related to the LIKE operator.
>   --
>   -- EVIDENCE-OF: R-16584-60189 The LIKE operator does a pattern matching
>   -- comparison.
> @@ -2274,15 +2312,23 @@ test:do_execsql_test(
>           -- </e_expr-16.1.7>
>       })
>   
> --- EVIDENCE-OF: R-52087-12043 The GLOB operator is similar to LIKE but
> --- uses the Unix file globbing syntax for its wildcards.
> ---
> --- EVIDENCE-OF: R-09813-17279 Also, GLOB is case sensitive, unlike LIKE.
> +-- EVIDENCE-OF: R-52087-12043 LIKE doesn't use Unix file globbing
> +-- syntax for its wildcards.
Those test was designed especially for the glob function.
There are similar tests for like above.
You should delete it instead of renaming.
>   --
>   test:do_execsql_test(
> +    "e_expr-17.1.0",
> +    [[
> +        PRAGMA case_sensitive_like = 1
> +    ]], {
> +        -- <e_expr-17.1.0>
> +
> +        -- <e_expr-17.1.0>
> +    })
> +
> +test:do_execsql_test(
>       "e_expr-17.1.1",
>       [[
> -        SELECT 'abcxyz' GLOB 'abc%'
> +        SELECT 'abcxyz' LIKE 'abc*'
>       ]], {
>           -- <e_expr-17.1.1>
>           0
> @@ -2292,7 +2338,7 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "e_expr-17.1.2",
>       [[
> -        SELECT 'abcxyz' GLOB 'abc*'
> +        SELECT 'abcxyz' LIKE 'abc%'
>       ]], {
>           -- <e_expr-17.1.2>
>           1
> @@ -2302,7 +2348,7 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "e_expr-17.1.3",
>       [[
> -        SELECT 'abcxyz' GLOB 'abc___'
> +        SELECT 'abcxyz' LIKE 'abc???'
>       ]], {
>           -- <e_expr-17.1.3>
>           0
> @@ -2312,7 +2358,7 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "e_expr-17.1.4",
>       [[
> -        SELECT 'abcxyz' GLOB 'abc???'
> +        SELECT 'abcxyz' LIKE 'abc___'
>       ]], {
>           -- <e_expr-17.1.4>
>           1
> @@ -2322,7 +2368,7 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "e_expr-17.1.5",
>       [[
> -        SELECT 'abcxyz' GLOB 'abc*'
> +        SELECT 'abcxyz' LIKE 'abc%'
>       ]], {
>           -- <e_expr-17.1.5>
>           1
> @@ -2332,7 +2378,7 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "e_expr-17.1.6",
>       [[
> -        SELECT 'ABCxyz' GLOB 'abc*'
> +        SELECT 'ABCxyz' LIKE 'abc%'
>       ]], {
>           -- <e_expr-17.1.6>
>           0
> @@ -2342,34 +2388,44 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "e_expr-17.1.7",
>       [[
> -        SELECT 'abcxyz' GLOB 'ABC*'
> +        SELECT 'abcxyz' LIKE 'ABC%'
>       ]], {
>           -- <e_expr-17.1.7>
>           0
>           -- </e_expr-17.1.7>
>       })
>   
> --- EVIDENCE-OF: R-39616-20555 Both GLOB and LIKE may be preceded by the
> +-- EVIDENCE-OF: R-39616-20555 LIKE may be preceded by the
>   -- NOT keyword to invert the sense of the test.
>   --
>   test:do_execsql_test(
> +    "e_expr-17.2.0",
> +    [[
> +        SELECT 'abcxyz' NOT LIKE 'ABC%'
> +    ]], {
> +        -- <e_expr-17.2.0>
> +        1
> +        -- </e_expr-17.2.0>
> +    })
> +
> +test:do_execsql_test(
>       "e_expr-17.2.1",
>       [[
> -        SELECT 'abcxyz' NOT GLOB 'ABC*'
> +        SELECT 'abcxyz' NOT LIKE 'abc%'
>       ]], {
>           -- <e_expr-17.2.1>
> -        1
> +        0
>           -- </e_expr-17.2.1>
>       })
>   
>   test:do_execsql_test(
>       "e_expr-17.2.2",
>       [[
> -        SELECT 'abcxyz' NOT GLOB 'abc*'
> +        PRAGMA case_sensitive_like = 0
>       ]], {
>           -- <e_expr-17.2.2>
> -        0
> -        -- </e_expr-17.2.2>
> +
> +        -- <e_expr-17.2.2>
>       })
>   
>   test:do_execsql_test(
> @@ -2405,10 +2461,11 @@ test:do_execsql_test(
>   -- MUST_WORK_TEST uses access to nullvalue... (sql parameters) and built in functions
>   if 0>0 then
>       db("nullvalue", "null")
do not change tests which are not working.
There is a chance chat you do it wrong and you do not know about it.
> +
>       test:do_execsql_test(
>           "e_expr-17.2.6",
>           [[
> -            SELECT 'abcxyz' NOT GLOB NULL
> +            SELECT 'abcxyz' NOT LIKE NULL
>           ]], {
>               -- <e_expr-17.2.6>
>               "null"
> @@ -2418,92 +2475,16 @@ if 0>0 then
>       test:do_execsql_test(
>           "e_expr-17.2.7",
>           [[
> -            SELECT 'abcxyz' NOT LIKE NULL
> +            SELECT NULL NOT LIKE 'ABC%'
>           ]], {
>               -- <e_expr-17.2.7>
>               "null"
>               -- </e_expr-17.2.7>
>           })
>   
> -    test:do_execsql_test(
> -        "e_expr-17.2.8",
> -        [[
> -            SELECT NULL NOT GLOB 'abc*'
> -        ]], {
> -            -- <e_expr-17.2.8>
> -            "null"
> -            -- </e_expr-17.2.8>
> -        })
> -
> -    test:do_execsql_test(
> -        "e_expr-17.2.9",
> -        [[
> -            SELECT NULL NOT LIKE 'ABC%'
> -        ]], {
> -            -- <e_expr-17.2.9>
> -            "null"
> -            -- </e_expr-17.2.9>
> -        })
> -
>       db("nullvalue", "")
>   end
>   
> --- EVIDENCE-OF: R-39414-35489 The infix GLOB operator is implemented by
> --- calling the function glob(Y,X) and can be modified by overriding that
> --- function.
> -
> -local globargs = {}
> -local function globfunc(...)
> -    local args = {...}
> -    for i, v in ipairs(args) do
> -        table.insert(globargs, v)
> -    end
> -    return 1
> -end
> -box.internal.sql_create_function("GLOB", globfunc, 2)
> ---db("func", "glob", "-argcount", 2, "globfunc")
> -
> -test:do_execsql_test(
> -    "e_expr-17.3.1",
> -    [[
> -        SELECT 'abc' GLOB 'def'
> -    ]], {
> -        -- <e_expr-17.3.1>
> -        1
> -        -- </e_expr-17.3.1>
> -    })
> -
> -test:do_test(
> -    "e_expr-17.3.2",
> -    function()
> -        return globargs
> -    end, {
> -        -- <e_expr-17.3.2>
> -        "def", "abc"
> -        -- </e_expr-17.3.2>
> -    })
> -
> -globargs = {  }
> -test:do_execsql_test(
> -    "e_expr-17.3.3",
> -    [[
> -        SELECT 'X' NOT GLOB 'Y'
> -    ]], {
> -        -- <e_expr-17.3.3>
> -        0
> -        -- </e_expr-17.3.3>
> -    })
> -
> -test:do_test(
> -    "e_expr-17.3.4",
> -    function()
> -        return globargs
> -    end, {
> -        -- <e_expr-17.3.4>
> -        "Y", "X"
> -        -- </e_expr-17.3.4>
> -    })
> -
>   --sqlite3("db", "test.db")
>   -- EVIDENCE-OF: R-41650-20872 No regexp() user function is defined by
>   -- default and so use of the REGEXP operator will normally result in an
> diff --git a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
> index addf0e3..5594334 100755
> --- a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
> +++ b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
> @@ -142,17 +142,17 @@ for i, tested_string in ipairs(invalid_testcases) do
>       local test_name = prefix .. "2." .. tostring(i)
>       local test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "';"
>       test:do_catchsql_test(test_name, test_itself,
> -                          {1, "LIKE or GLOB pattern can only contain UTF-8 characters"})
> +                          {1, "LIKE pattern can only contain UTF-8 characters"})
>   
>       test_name = prefix .. "3." .. tostring(i)
>       test_itself = "SELECT 'abc' LIKE 'abc" .. tested_string .. "';"
>       test:do_catchsql_test(test_name, test_itself,
> -                          {1, "LIKE or GLOB pattern can only contain UTF-8 characters"})
> +                          {1, "LIKE pattern can only contain UTF-8 characters"})
>   
>       test_name = prefix .. "4." .. tostring(i)
>       test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "c';"
>       test:do_catchsql_test(test_name, test_itself,
> -                          {1, "LIKE or GLOB pattern can only contain UTF-8 characters"})
> +                          {1, "LIKE pattern can only contain UTF-8 characters"})
>   
>       -- Just skipping if row value predicand contains invalid character.
>   
> diff --git a/test/sql-tap/like2.test.lua b/test/sql-tap/like2.test.lua
> index abcac39..c6c81cb 100755
> --- a/test/sql-tap/like2.test.lua
> +++ b/test/sql-tap/like2.test.lua
> @@ -12,11 +12,11 @@ test:plan(282)
>   --    May you find forgiveness for yourself and forgive others.
>   --    May you share freely, never taking more than you give.
>   --
> --------------------------------------------------------------------------
> --- This file implements regression tests for SQLite library.  The
> --- focus of this file is testing the LIKE and GLOB operators and
> --- in particular the optimizations that occur to help those operators
> --- run faster.
> +-----------------------------------------------------------------
> +-- This file implements regression tests for SQLite library. The
> +-- focus of this file is testing the LIKE operator and
> +-- in particular the optimizations that occur to help this
> +-- operator run faster.
>   --
>   -- $Id: like2.test,v 1.1 2008/05/26 18:33:41 drh Exp $
>   -- ["set","testdir",[["file","dirname",["argv0"]]]]
> diff --git a/test/sql-tap/like3.test.lua b/test/sql-tap/like3.test.lua
> index 505d2fa..0bc71a0 100755
> --- a/test/sql-tap/like3.test.lua
> +++ b/test/sql-tap/like3.test.lua
> @@ -12,13 +12,13 @@ test:plan(7)
>   --    May you find forgiveness for yourself and forgive others.
>   --    May you share freely, never taking more than you give.
>   --
> --------------------------------------------------------------------------
> +-----------------------------------------------------------------
>   --
> --- This file implements regression tests for SQLite library.  The
> --- focus of this file is testing the LIKE and GLOB operators and
> --- in particular the optimizations that occur to help those operators
> --- run faster and that those optimizations work correctly when there
> --- are both strings and blobs being tested.
> +-- This file implements regression tests for SQLite library. The
> +-- focus of this file is testing the LIKE operator and
> +-- in particular the optimizations that occur to help this
> +-- operator run faster and that those optimizations work
> +-- correctly when there are both strings and blobs being tested.
>   --
>   -- Ticket 05f43be8fdda9fbd948d374319b99b054140bc36 shows that the following
>   -- SQL was not working correctly:
> @@ -70,10 +70,11 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "like3-2.0",
>       [[
> +        PRAGMA case_sensitive_like = 1;
>           CREATE TABLE t2(a PRIMARY KEY, b TEXT);
>           INSERT INTO t2 SELECT a, b FROM t1;
>           CREATE INDEX t2ba ON t2(b,a);
> -        SELECT a, b FROM t2 WHERE b GLOB 'ab*' ORDER BY +a;
> +        SELECT a, b FROM t2 WHERE b LIKE 'ab%' ORDER BY +a;
Those tests were especially created for glob. Delete it instead of renaming.
>       ]], {
>           -- <like3-2.0>
>           1, "abc", 4, "abc"
> @@ -83,7 +84,7 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "like3-2.1",
>       [[
> -        SELECT a, b FROM t2 WHERE +b GLOB 'ab*' ORDER BY +a;
> +        SELECT a, b FROM t2 WHERE +b LIKE 'ab%' ORDER BY +a;
>       ]], {
>           -- <like3-2.1>
>           1, "abc", 4, "abc"
> @@ -93,7 +94,7 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "like3-2.2",
>       [[
> -        SELECT a, b FROM t2 WHERE b>=x'6162' AND b GLOB 'ab*'
> +        SELECT a, b FROM t2 WHERE b>=x'6162' AND b LIKE 'ab%'
>       ]], {
>           -- <like3-2.2>
>           4, "abc"
> @@ -103,7 +104,7 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "like3-2.3",
>       [[
> -        SELECT a, b FROM t2 WHERE +b>=x'6162' AND +b GLOB 'ab*'
> +        SELECT a, b FROM t2 WHERE +b>=x'6162' AND +b LIKE 'ab%'
>       ]], {
>           -- <like3-2.3>
>           4, "abc"
> @@ -113,7 +114,7 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "like3-2.4",
>       [[
> -        SELECT a, b FROM t2 WHERE b GLOB 'ab*' AND b>=x'6162'
> +        SELECT a, b FROM t2 WHERE b LIKE 'ab%' AND b>=x'6162'
>       ]], {
>           -- <like3-2.4>
>           4, "abc"
> @@ -123,7 +124,8 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "like3-2.5",
>       [[
> -        SELECT a, b FROM t2 WHERE +b GLOB 'ab*' AND +b>=x'6162'
> +        SELECT a, b FROM t2 WHERE +b LIKE 'ab%' AND +b>=x'6162';
> +        PRAGMA case_sensitive_like = 0;
>       ]], {
>           -- <like3-2.5>
>           4, "abc"
> diff --git a/test/sql-tap/tkt1537.test.lua b/test/sql-tap/tkt1537.test.lua
> index caa4284..4b2d78c 100755
> --- a/test/sql-tap/tkt1537.test.lua
> +++ b/test/sql-tap/tkt1537.test.lua
> @@ -185,7 +185,7 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "tkt1537-3.1",
>       [[
> -        SELECT * FROM t1 LEFT JOIN t2 ON b GLOB 'abc*' WHERE t1.id=1;
> +        SELECT * FROM t1 LEFT JOIN t2 ON b LIKE 'abc%' WHERE t1.id=1;
>       ]], {
>           -- <tkt1537-3.1>
>           1, "", "", "", ""
> @@ -195,7 +195,7 @@ test:do_execsql_test(
>   test:do_execsql_test(
>       "tkt1537-3.2",
>       [[
> -        SELECT * FROM t2 LEFT JOIN t1 ON a1 GLOB 'abc*' WHERE t2.id=3;
> +        SELECT * FROM t2 LEFT JOIN t1 ON a1 LIKE 'abc%' WHERE t2.id=3;
>       ]], {
>           -- <tkt1537-3.2>
>           3, 1, "", "", ""
> diff --git a/test/sql-tap/triggerA.test.lua b/test/sql-tap/triggerA.test.lua
> index da1add8..530e488 100755
> --- a/test/sql-tap/triggerA.test.lua
> +++ b/test/sql-tap/triggerA.test.lua
> @@ -76,7 +76,7 @@ test:do_test(
>       "triggerA-1.3",
>       function()
>           return test:execsql [[
> -            CREATE VIEW v2 AS SELECT x, y FROM t1 WHERE y GLOB '*e*';
> +            CREATE VIEW v2 AS SELECT x, y FROM t1 WHERE y LIKE '%e%';
>               SELECT * FROM v2 ORDER BY 1;
>           ]]
>       end, {
> diff --git a/test/sql-tap/where3.test.lua b/test/sql-tap/where3.test.lua
> index 4582737..9676131 100755
> --- a/test/sql-tap/where3.test.lua
> +++ b/test/sql-tap/where3.test.lua
> @@ -404,7 +404,7 @@ if 0
>               CREATE TABLE t401(p INTEGER PRIMARY KEY, q, r);
>               CREATE TABLE t402(x INTEGER PRIMARY KEY, y, z);
>               EXPLAIN QUERY PLAN
> -            SELECT * FROM t400, t401, t402 WHERE t402.z GLOB 'abc*';
> +            SELECT * FROM t400, t401, t402 WHERE t402.z LIKE 'abc%';
>           ]], {
>               -- <where3-4.0>
>               0, 0, 2, "SCAN TABLE T402", 0, 1, 0, "SCAN TABLE T400", 0, 2, 1, "SCAN TABLE T401"
> @@ -415,7 +415,7 @@ if 0
>           "where3-4.1",
>           [[
>               EXPLAIN QUERY PLAN
> -            SELECT * FROM t400, t401, t402 WHERE t401.r GLOB 'abc*';
> +            SELECT * FROM t400, t401, t402 WHERE t401.r LIKE 'abc%';
>           ]], {
>               -- <where3-4.1>
>               0, 0, 1, "SCAN TABLE T401", 0, 1, 0, "SCAN TABLE T400", 0, 2, 2, "SCAN TABLE T402"
> @@ -426,7 +426,7 @@ if 0
>           "where3-4.2",
>           [[
>               EXPLAIN QUERY PLAN
> -            SELECT * FROM t400, t401, t402 WHERE t400.c GLOB 'abc*';
> +            SELECT * FROM t400, t401, t402 WHERE t400.c LIKE 'abc%';
>           ]], {
>               -- <where3-4.2>
>               0, 0, 0, "SCAN TABLE T400", 0, 1, 1, "SCAN TABLE T401", 0, 2, 2, "SCAN TABLE T402"
> diff --git a/test/sql-tap/where7.test.lua b/test/sql-tap/where7.test.lua
> index 6691dd0..27d25e6 100755
> --- a/test/sql-tap/where7.test.lua
> +++ b/test/sql-tap/where7.test.lua
> @@ -448,12 +448,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=1070
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>     ]])
>       end, {
>           -- <where7-2.2.1>
> @@ -467,12 +467,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=1070
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>     ]])
>       end, {
>           -- <where7-2.2.2>
> @@ -487,11 +487,11 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=47.0 AND d<48.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
> -         OR (g='edcbazy' AND f GLOB 'uvwxy*')
> +         OR (g='edcbazy' AND f LIKE 'uvwxy%')
>            OR b=220
>            OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 67 AND 69) AND a!=68)
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>     ]])
>       end, {
>           -- <where7-2.3.1>
> @@ -506,11 +506,11 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=47.0 AND d<48.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
> -         OR (g='edcbazy' AND f GLOB 'uvwxy*')
> +         OR (g='edcbazy' AND f LIKE 'uvwxy%')
>            OR b=220
>            OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 67 AND 69) AND a!=68)
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>     ]])
>       end, {
>           -- <where7-2.3.2>
> @@ -525,7 +525,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=190
>            OR ((a BETWEEN 49 AND 51) AND a!=50)
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>            OR b=407
>     ]])
>       end, {
> @@ -541,7 +541,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=190
>            OR ((a BETWEEN 49 AND 51) AND a!=50)
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>            OR b=407
>     ]])
>       end, {
> @@ -555,7 +555,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +      WHERE (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR b=795
>            OR b=1103
>            OR b=583
> @@ -571,7 +571,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +      WHERE (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR b=795
>            OR b=1103
>            OR b=583
> @@ -589,7 +589,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=74
>            OR a=50
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR ((a BETWEEN 16 AND 18) AND a!=17)
>            OR c=21021
>            OR ((a BETWEEN 82 AND 84) AND a!=83)
> @@ -607,7 +607,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=74
>            OR a=50
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR ((a BETWEEN 16 AND 18) AND a!=17)
>            OR c=21021
>            OR ((a BETWEEN 82 AND 84) AND a!=83)
> @@ -746,7 +746,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=72.0 AND d<73.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR c=11011
>            OR c=20020
>            OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
> @@ -763,7 +763,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=72.0 AND d<73.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR c=11011
>            OR c=20020
>            OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
> @@ -781,7 +781,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=50.0 AND d<51.0 AND d IS NOT NULL)
>            OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>            OR b=792
>            OR a=97
>            OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
> @@ -804,7 +804,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=50.0 AND d<51.0 AND d IS NOT NULL)
>            OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>            OR b=792
>            OR a=97
>            OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
> @@ -827,11 +827,11 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 50 AND 52) AND a!=51)
>            OR c=9009
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR b=539
>            OR b=297
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>            OR b=957
>            OR f='xyzabcdef'
>            OR b=619
> @@ -849,11 +849,11 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 50 AND 52) AND a!=51)
>            OR c=9009
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR b=539
>            OR b=297
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>            OR b=957
>            OR f='xyzabcdef'
>            OR b=619
> @@ -931,7 +931,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=938
>            OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>     ]])
>       end, {
>           -- <where7-2.16.1>
> @@ -946,7 +946,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=938
>            OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>     ]])
>       end, {
>           -- <where7-2.16.2>
> @@ -963,12 +963,12 @@ test:do_test(
>            OR f='zabcdefgh'
>            OR b=308
>            OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 15 AND 17) AND a!=16)
>            OR b=443
>            OR ((a BETWEEN 12 AND 14) AND a!=13)
>            OR f='uvwxyzabc'
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>     ]])
>       end, {
>           -- <where7-2.17.1>
> @@ -985,12 +985,12 @@ test:do_test(
>            OR f='zabcdefgh'
>            OR b=308
>            OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 15 AND 17) AND a!=16)
>            OR b=443
>            OR ((a BETWEEN 12 AND 14) AND a!=13)
>            OR f='uvwxyzabc'
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>     ]])
>       end, {
>           -- <where7-2.17.2>
> @@ -1037,13 +1037,13 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=63.0 AND d<64.0 AND d IS NOT NULL)
>            OR a=46
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR a=73
>            OR c=20020
>            OR ((a BETWEEN 2 AND 4) AND a!=3)
>            OR b=267
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.19.1>
> @@ -1058,13 +1058,13 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=63.0 AND d<64.0 AND d IS NOT NULL)
>            OR a=46
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR a=73
>            OR c=20020
>            OR ((a BETWEEN 2 AND 4) AND a!=3)
>            OR b=267
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.19.2>
> @@ -1078,7 +1078,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 27 AND 29) AND a!=28)
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.20.1>
> @@ -1092,7 +1092,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 27 AND 29) AND a!=28)
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.20.2>
> @@ -1111,9 +1111,9 @@ test:do_test(
>            OR ((a BETWEEN 87 AND 89) AND a!=88)
>            OR f='bcdefghij'
>            OR b=586
> -         OR (g='edcbazy' AND f GLOB 'uvwxy*')
> +         OR (g='edcbazy' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 59 AND 61) AND a!=60)
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR (d>=6.0 AND d<7.0 AND d IS NOT NULL)
>            OR a=9
>     ]])
> @@ -1134,9 +1134,9 @@ test:do_test(
>            OR ((a BETWEEN 87 AND 89) AND a!=88)
>            OR f='bcdefghij'
>            OR b=586
> -         OR (g='edcbazy' AND f GLOB 'uvwxy*')
> +         OR (g='edcbazy' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 59 AND 61) AND a!=60)
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR (d>=6.0 AND d<7.0 AND d IS NOT NULL)
>            OR a=9
>     ]])
> @@ -1154,7 +1154,7 @@ test:do_test(
>         WHERE b=399
>            OR c=28028
>            OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>            OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -1171,7 +1171,7 @@ test:do_test(
>         WHERE b=399
>            OR c=28028
>            OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>            OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -1185,15 +1185,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
> +      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
>            OR c=14014
>            OR c=33033
>            OR a=89
>            OR b=770
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR a=35
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
>            OR b=253
>            OR c=14014
>     ]])
> @@ -1208,15 +1208,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
> +      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
>            OR c=14014
>            OR c=33033
>            OR a=89
>            OR b=770
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR a=35
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
>            OR b=253
>            OR c=14014
>     ]])
> @@ -1231,10 +1231,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='utsrqpo' AND f GLOB 'vwxyz*')
> +      WHERE (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
>            OR b=330
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR a=16
>     ]])
>       end, {
> @@ -1248,10 +1248,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='utsrqpo' AND f GLOB 'vwxyz*')
> +      WHERE (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
>            OR b=330
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR a=16
>     ]])
>       end, {
> @@ -1268,7 +1268,7 @@ test:do_test(
>         WHERE c=5005
>            OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 36 AND 38) AND a!=37)
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.25.1>
> @@ -1284,7 +1284,7 @@ test:do_test(
>         WHERE c=5005
>            OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 36 AND 38) AND a!=37)
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.25.2>
> @@ -1298,9 +1298,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR ((a BETWEEN 64 AND 66) AND a!=65)
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR a=33
>     ]])
>       end, {
> @@ -1315,9 +1315,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR ((a BETWEEN 64 AND 66) AND a!=65)
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR a=33
>     ]])
>       end, {
> @@ -1361,8 +1361,8 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE c=18018
>            OR a=94
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR b=1012
>            OR a=3
>            OR d>1e10
> @@ -1382,8 +1382,8 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE c=18018
>            OR a=94
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR b=1012
>            OR a=3
>            OR d>1e10
> @@ -1405,11 +1405,11 @@ test:do_test(
>            OR c=11011
>            OR b=297
>            OR a=63
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>            OR a=76
>            OR b=1026
>            OR a=26
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>            OR c=30030
>     ]])
>       end, {
> @@ -1427,11 +1427,11 @@ test:do_test(
>            OR c=11011
>            OR b=297
>            OR a=63
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>            OR a=76
>            OR b=1026
>            OR a=26
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>            OR c=30030
>     ]])
>       end, {
> @@ -1449,7 +1449,7 @@ test:do_test(
>            OR b=1070
>            OR a=59
>            OR b=715
> -         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
> +         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
>     ]])
>       end, {
>           -- <where7-2.30.1>
> @@ -1466,7 +1466,7 @@ test:do_test(
>            OR b=1070
>            OR a=59
>            OR b=715
> -         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
> +         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
>     ]])
>       end, {
>           -- <where7-2.30.2>
> @@ -1479,13 +1479,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
> +      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=1056
>            OR b=1012
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>            OR ((a BETWEEN 67 AND 69) AND a!=68)
>            OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>     ]])
>       end, {
>           -- <where7-2.31.1>
> @@ -1498,13 +1498,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
> +      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=1056
>            OR b=1012
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>            OR ((a BETWEEN 67 AND 69) AND a!=68)
>            OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>     ]])
>       end, {
>           -- <where7-2.31.2>
> @@ -1518,7 +1518,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE f='rstuvwxyz'
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR ((a BETWEEN 90 AND 92) AND a!=91)
>            OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
>     ]])
> @@ -1534,7 +1534,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE f='rstuvwxyz'
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR ((a BETWEEN 90 AND 92) AND a!=91)
>            OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
>     ]])
> @@ -1549,13 +1549,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
>            OR c=12012
>            OR a=18
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>     ]])
>       end, {
>           -- <where7-2.33.1>
> @@ -1568,13 +1568,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
>            OR c=12012
>            OR a=18
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>     ]])
>       end, {
>           -- <where7-2.33.2>
> @@ -1622,7 +1622,7 @@ test:do_test(
>            OR ((a BETWEEN 67 AND 69) AND a!=68)
>            OR c=33033
>            OR b=11
> -         OR (g='wvutsrq' AND f GLOB 'lmnop*')
> +         OR (g='wvutsrq' AND f LIKE 'lmnop%')
>            OR ((a BETWEEN 7 AND 9) AND a!=8)
>     ]])
>       end, {
> @@ -1643,7 +1643,7 @@ test:do_test(
>            OR ((a BETWEEN 67 AND 69) AND a!=68)
>            OR c=33033
>            OR b=11
> -         OR (g='wvutsrq' AND f GLOB 'lmnop*')
> +         OR (g='wvutsrq' AND f LIKE 'lmnop%')
>            OR ((a BETWEEN 7 AND 9) AND a!=8)
>     ]])
>       end, {
> @@ -1719,7 +1719,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=165
>            OR b=201
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR a=32
>     ]])
>       end, {
> @@ -1735,7 +1735,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=165
>            OR b=201
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR a=32
>     ]])
>       end, {
> @@ -1749,8 +1749,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
> -         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> +      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
> +         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
>     ]])
>       end, {
>           -- <where7-2.39.1>
> @@ -1763,8 +1763,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
> -         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> +      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
> +         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
>     ]])
>       end, {
>           -- <where7-2.39.2>
> @@ -1785,8 +1785,8 @@ test:do_test(
>            OR a=18
>            OR a=34
>            OR b=132
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>            OR c=18018
>     ]])
>       end, {
> @@ -1808,8 +1808,8 @@ test:do_test(
>            OR a=18
>            OR a=34
>            OR b=132
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>            OR c=18018
>     ]])
>       end, {
> @@ -1851,13 +1851,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
> +      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
>            OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>            OR b=297
>            OR b=113
>            OR b=176
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
>            OR a=67
>            OR c=26026
> @@ -1873,13 +1873,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
> +      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
>            OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>            OR b=297
>            OR b=113
>            OR b=176
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
>            OR a=67
>            OR c=26026
> @@ -1940,8 +1940,8 @@ test:do_test(
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
>            OR b=487
>            OR b=619
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>     ]])
>       end, {
>           -- <where7-2.44.1>
> @@ -1959,8 +1959,8 @@ test:do_test(
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
>            OR b=487
>            OR b=619
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>     ]])
>       end, {
>           -- <where7-2.44.2>
> @@ -1980,7 +1980,7 @@ test:do_test(
>            OR c=17017
>            OR a=82
>            OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
>            OR (d>=39.0 AND d<40.0 AND d IS NOT NULL)
>     ]])
> @@ -2002,7 +2002,7 @@ test:do_test(
>            OR c=17017
>            OR a=82
>            OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
>            OR (d>=39.0 AND d<40.0 AND d IS NOT NULL)
>     ]])
> @@ -2017,7 +2017,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ihgfedc' AND f GLOB 'bcdef*')
> +      WHERE (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR c=22022
>     ]])
>       end, {
> @@ -2031,7 +2031,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ihgfedc' AND f GLOB 'bcdef*')
> +      WHERE (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR c=22022
>     ]])
>       end, {
> @@ -2048,7 +2048,7 @@ test:do_test(
>         WHERE c=7007
>            OR b=91
>            OR b=212
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR c=28028
>            OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
>     ]])
> @@ -2066,7 +2066,7 @@ test:do_test(
>         WHERE c=7007
>            OR b=91
>            OR b=212
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR c=28028
>            OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
>     ]])
> @@ -2111,9 +2111,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
> -         OR (g='wvutsrq' AND f GLOB 'jklmn*')
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
> +         OR (g='wvutsrq' AND f LIKE 'jklmn%')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR ((a BETWEEN 0 AND 2) AND a!=1)
>            OR c=4004
>            OR b=322
> @@ -2131,9 +2131,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
> -         OR (g='wvutsrq' AND f GLOB 'jklmn*')
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
> +         OR (g='wvutsrq' AND f LIKE 'jklmn%')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR ((a BETWEEN 0 AND 2) AND a!=1)
>            OR c=4004
>            OR b=322
> @@ -2156,8 +2156,8 @@ test:do_test(
>            OR a=46
>            OR b=660
>            OR (d>=41.0 AND d<42.0 AND d IS NOT NULL)
> -         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>            OR b=355
>            OR a=93
>            OR b=297
> @@ -2178,8 +2178,8 @@ test:do_test(
>            OR a=46
>            OR b=660
>            OR (d>=41.0 AND d<42.0 AND d IS NOT NULL)
> -         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>            OR b=355
>            OR a=93
>            OR b=297
> @@ -2197,7 +2197,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=190
>            OR a=62
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.51.1>
> @@ -2212,7 +2212,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=190
>            OR a=62
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.51.2>
> @@ -2306,7 +2306,7 @@ test:do_test(
>            OR b=256
>            OR a=72
>            OR c>=34035
> -         OR (g='rqponml' AND f GLOB 'jklmn*')
> +         OR (g='rqponml' AND f LIKE 'jklmn%')
>            OR b=674
>            OR a=22
>     ]])
> @@ -2328,7 +2328,7 @@ test:do_test(
>            OR b=256
>            OR a=72
>            OR c>=34035
> -         OR (g='rqponml' AND f GLOB 'jklmn*')
> +         OR (g='rqponml' AND f LIKE 'jklmn%')
>            OR b=674
>            OR a=22
>     ]])
> @@ -2381,9 +2381,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
> +      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
> -         OR (g='onmlkji' AND f GLOB 'xyzab*')
> +         OR (g='onmlkji' AND f LIKE 'xyzab%')
>     ]])
>       end, {
>           -- <where7-2.56.1>
> @@ -2396,9 +2396,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
> +      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
> -         OR (g='onmlkji' AND f GLOB 'xyzab*')
> +         OR (g='onmlkji' AND f LIKE 'xyzab%')
>     ]])
>       end, {
>           -- <where7-2.56.2>
> @@ -2413,7 +2413,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=748
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
>            OR b=630
>     ]])
> @@ -2430,7 +2430,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=748
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
>            OR b=630
>     ]])
> @@ -2521,7 +2521,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=979
>            OR ((a BETWEEN 3 AND 5) AND a!=4)
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.60.1>
> @@ -2536,7 +2536,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=979
>            OR ((a BETWEEN 3 AND 5) AND a!=4)
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.60.2>
> @@ -2555,7 +2555,7 @@ test:do_test(
>            OR b=726
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 50 AND 52) AND a!=51)
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>            OR ((a BETWEEN 59 AND 61) AND a!=60)
>     ]])
>       end, {
> @@ -2575,7 +2575,7 @@ test:do_test(
>            OR b=726
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 50 AND 52) AND a!=51)
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>            OR ((a BETWEEN 59 AND 61) AND a!=60)
>     ]])
>       end, {
> @@ -2593,10 +2593,10 @@ test:do_test(
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
>            OR b=924
>            OR c=11011
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR b=231
>            OR b=872
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
>     ]])
>       end, {
>           -- <where7-2.62.1>
> @@ -2613,10 +2613,10 @@ test:do_test(
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
>            OR b=924
>            OR c=11011
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR b=231
>            OR b=872
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
>     ]])
>       end, {
>           -- <where7-2.62.2>
> @@ -2631,8 +2631,8 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=24
>            OR b=473
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>            OR b=509
>            OR b=924
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
> @@ -2650,8 +2650,8 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=24
>            OR b=473
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>            OR b=509
>            OR b=924
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
> @@ -2668,11 +2668,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=93.0 AND d<94.0 AND d IS NOT NULL)
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR b=363
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
>     ]])
> @@ -2688,11 +2688,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=93.0 AND d<94.0 AND d IS NOT NULL)
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR b=363
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
>     ]])
> @@ -2711,9 +2711,9 @@ test:do_test(
>            OR e IS NULL
>            OR b=495
>            OR 1000000<b
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>            OR a=45
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR a=85
>            OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
>     ]])
> @@ -2732,9 +2732,9 @@ test:do_test(
>            OR e IS NULL
>            OR b=495
>            OR 1000000<b
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>            OR a=45
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR a=85
>            OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
>     ]])
> @@ -2781,9 +2781,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE c>=34035
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR (d>=27.0 AND d<28.0 AND d IS NOT NULL)
>            OR a=91
>     ]])
> @@ -2800,9 +2800,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE c>=34035
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR (d>=27.0 AND d<28.0 AND d IS NOT NULL)
>            OR a=91
>     ]])
> @@ -2817,9 +2817,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
> +      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
>            OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR b=649
>            OR b=231
>            OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
> @@ -2837,9 +2837,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
> +      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
>            OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR b=649
>            OR b=231
>            OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
> @@ -2918,11 +2918,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=65
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR c=22022
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>            OR b=671
> -         OR (g='onmlkji' AND f GLOB 'zabcd*')
> +         OR (g='onmlkji' AND f LIKE 'zabcd%')
>            OR a=91
>            OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 47 AND 49) AND a!=48)
> @@ -2941,11 +2941,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=65
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR c=22022
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>            OR b=671
> -         OR (g='onmlkji' AND f GLOB 'zabcd*')
> +         OR (g='onmlkji' AND f LIKE 'zabcd%')
>            OR a=91
>            OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 47 AND 49) AND a!=48)
> @@ -2995,7 +2995,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=11.0 AND d<12.0 AND d IS NOT NULL)
>            OR a=14
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
>            OR b=212
> @@ -3014,7 +3014,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=11.0 AND d<12.0 AND d IS NOT NULL)
>            OR a=14
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
>            OR b=212
> @@ -3031,11 +3031,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ihgfedc' AND f GLOB 'bcdef*')
> +      WHERE (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR b=168
>            OR b=25
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'opqrs*')
> +         OR (g='lkjihgf' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.74.1>
> @@ -3048,11 +3048,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ihgfedc' AND f GLOB 'bcdef*')
> +      WHERE (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR b=168
>            OR b=25
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'opqrs*')
> +         OR (g='lkjihgf' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.74.2>
> @@ -3098,10 +3098,10 @@ test:do_test(
>         WHERE c=31031
>            OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 87 AND 89) AND a!=88)
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>            OR a=49
>            OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'klmno*')
> +         OR (g='mlkjihg' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.76.1>
> @@ -3117,10 +3117,10 @@ test:do_test(
>         WHERE c=31031
>            OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 87 AND 89) AND a!=88)
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>            OR a=49
>            OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'klmno*')
> +         OR (g='mlkjihg' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.76.2>
> @@ -3170,7 +3170,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=85.0 AND d<86.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>            OR ((a BETWEEN 30 AND 32) AND a!=31)
>            OR b=1089
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
> @@ -3187,7 +3187,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=85.0 AND d<86.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>            OR ((a BETWEEN 30 AND 32) AND a!=31)
>            OR b=1089
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
> @@ -3205,8 +3205,8 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=399
>            OR ((a BETWEEN 9 AND 11) AND a!=10)
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR a=10
>            OR b=1026
>     ]])
> @@ -3223,8 +3223,8 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=399
>            OR ((a BETWEEN 9 AND 11) AND a!=10)
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR a=10
>            OR b=1026
>     ]])
> @@ -3239,11 +3239,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='jihgfed' AND f GLOB 'yzabc*')
> +      WHERE (g='jihgfed' AND f LIKE 'yzabc%')
>            OR b=465
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.80.1>
> @@ -3256,11 +3256,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='jihgfed' AND f GLOB 'yzabc*')
> +      WHERE (g='jihgfed' AND f LIKE 'yzabc%')
>            OR b=465
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.80.2>
> @@ -3275,7 +3275,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=25
>            OR b=792
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>     ]])
>       end, {
>           -- <where7-2.81.1>
> @@ -3290,7 +3290,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=25
>            OR b=792
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>     ]])
>       end, {
>           -- <where7-2.81.2>
> @@ -3308,10 +3308,10 @@ test:do_test(
>            OR a=13
>            OR a=15
>            OR ((a BETWEEN 6 AND 8) AND a!=7)
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR a=27
>            OR ((a BETWEEN 98 AND 100) AND a!=99)
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR a=32
>            OR a=39
>     ]])
> @@ -3331,10 +3331,10 @@ test:do_test(
>            OR a=13
>            OR a=15
>            OR ((a BETWEEN 6 AND 8) AND a!=7)
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR a=27
>            OR ((a BETWEEN 98 AND 100) AND a!=99)
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR a=32
>            OR a=39
>     ]])
> @@ -3350,14 +3350,14 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE f='hijklmnop'
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 77 AND 79) AND a!=78)
>            OR b=528
>            OR c=30030
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.83.1>
> @@ -3371,14 +3371,14 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE f='hijklmnop'
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 77 AND 79) AND a!=78)
>            OR b=528
>            OR c=30030
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.83.2>
> @@ -3425,11 +3425,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='lkjihgf' AND f GLOB 'pqrst*')
> +      WHERE (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR b=748
>            OR b=696
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
>     ]])
>       end, {
>           -- <where7-2.85.1>
> @@ -3442,11 +3442,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='lkjihgf' AND f GLOB 'pqrst*')
> +      WHERE (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR b=748
>            OR b=696
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
>     ]])
>       end, {
>           -- <where7-2.85.2>
> @@ -3460,10 +3460,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 71 AND 73) AND a!=72)
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR a=87
>            OR a=80
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR b=784
>            OR a=49
>            OR ((a BETWEEN 34 AND 36) AND a!=35)
> @@ -3480,10 +3480,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 71 AND 73) AND a!=72)
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR a=87
>            OR a=80
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR b=784
>            OR a=49
>            OR ((a BETWEEN 34 AND 36) AND a!=35)
> @@ -3500,13 +3500,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 14 AND 16) AND a!=15)
> -         OR (g='wvutsrq' AND f GLOB 'jklmn*')
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> +         OR (g='wvutsrq' AND f LIKE 'jklmn%')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
>            OR c=1001
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
>            OR c=33033
>     ]])
>       end, {
> @@ -3521,13 +3521,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 14 AND 16) AND a!=15)
> -         OR (g='wvutsrq' AND f GLOB 'jklmn*')
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> +         OR (g='wvutsrq' AND f LIKE 'jklmn%')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
>            OR c=1001
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
>            OR c=33033
>     ]])
>       end, {
> @@ -3611,13 +3611,13 @@ test:do_test(
>            OR b=553
>            OR a=64
>            OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>            OR a=62
>            OR b=1081
>            OR b=770
>            OR b=762
>            OR b=803
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>     ]])
>       end, {
>           -- <where7-2.90.1>
> @@ -3634,13 +3634,13 @@ test:do_test(
>            OR b=553
>            OR a=64
>            OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>            OR a=62
>            OR b=1081
>            OR b=770
>            OR b=762
>            OR b=803
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>     ]])
>       end, {
>           -- <where7-2.90.2>
> @@ -3653,8 +3653,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='wvutsrq' AND f GLOB 'klmno*')
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +      WHERE (g='wvutsrq' AND f LIKE 'klmno%')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR c=17017
>            OR b=168
>            OR ((a BETWEEN 77 AND 79) AND a!=78)
> @@ -3670,8 +3670,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='wvutsrq' AND f GLOB 'klmno*')
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +      WHERE (g='wvutsrq' AND f LIKE 'klmno%')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR c=17017
>            OR b=168
>            OR ((a BETWEEN 77 AND 79) AND a!=78)
> @@ -3690,12 +3690,12 @@ test:do_test(
>         WHERE c=34034
>            OR (d>=68.0 AND d<69.0 AND d IS NOT NULL)
>            OR a=44
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>            OR c=31031
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
>            OR b=619
> -         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
> +         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
>            OR ((a BETWEEN 29 AND 31) AND a!=30)
>     ]])
>       end, {
> @@ -3712,12 +3712,12 @@ test:do_test(
>         WHERE c=34034
>            OR (d>=68.0 AND d<69.0 AND d IS NOT NULL)
>            OR a=44
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>            OR c=31031
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
>            OR b=619
> -         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
> +         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
>            OR ((a BETWEEN 29 AND 31) AND a!=30)
>     ]])
>       end, {
> @@ -3738,10 +3738,10 @@ test:do_test(
>            OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
>            OR b=110
>            OR f='klmnopqrs'
> -         OR (g='fedcbaz' AND f GLOB 'qrstu*')
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='fedcbaz' AND f LIKE 'qrstu%')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>            OR b=674
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>     ]])
>       end, {
>           -- <where7-2.93.1>
> @@ -3761,10 +3761,10 @@ test:do_test(
>            OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
>            OR b=110
>            OR f='klmnopqrs'
> -         OR (g='fedcbaz' AND f GLOB 'qrstu*')
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='fedcbaz' AND f LIKE 'qrstu%')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>            OR b=674
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>     ]])
>       end, {
>           -- <where7-2.93.2>
> @@ -3882,7 +3882,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=231
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>     ]])
>       end, {
>           -- <where7-2.97.1>
> @@ -3896,7 +3896,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=231
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>     ]])
>       end, {
>           -- <where7-2.97.2>
> @@ -4057,7 +4057,7 @@ test:do_test(
>            OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
>            OR b=630
>            OR c=19019
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>            OR a=24
>            OR (d>=95.0 AND d<96.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 51 AND 53) AND a!=52)
> @@ -4077,7 +4077,7 @@ test:do_test(
>            OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
>            OR b=630
>            OR c=19019
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>            OR a=24
>            OR (d>=95.0 AND d<96.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 51 AND 53) AND a!=52)
> @@ -4128,11 +4128,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE f='stuvwxyza'
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>            OR ((a BETWEEN 1 AND 3) AND a!=2)
>            OR b=1037
>            OR f='zabcdefgh'
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>     ]])
>       end, {
>           -- <where7-2.104.1>
> @@ -4146,11 +4146,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE f='stuvwxyza'
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>            OR ((a BETWEEN 1 AND 3) AND a!=2)
>            OR b=1037
>            OR f='zabcdefgh'
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>     ]])
>       end, {
>           -- <where7-2.104.2>
> @@ -4163,7 +4163,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
> +      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR ((a BETWEEN 4 AND 6) AND a!=5)
>            OR ((a BETWEEN 30 AND 32) AND a!=31)
>     ]])
> @@ -4178,7 +4178,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
> +      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR ((a BETWEEN 4 AND 6) AND a!=5)
>            OR ((a BETWEEN 30 AND 32) AND a!=31)
>     ]])
> @@ -4197,8 +4197,8 @@ test:do_test(
>            OR b=190
>            OR ((a BETWEEN 38 AND 40) AND a!=39)
>            OR ((a BETWEEN 70 AND 72) AND a!=71)
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR b=704
>     ]])
>       end, {
> @@ -4216,8 +4216,8 @@ test:do_test(
>            OR b=190
>            OR ((a BETWEEN 38 AND 40) AND a!=39)
>            OR ((a BETWEEN 70 AND 72) AND a!=71)
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR b=704
>     ]])
>       end, {
> @@ -4234,7 +4234,7 @@ test:do_test(
>         WHERE b=88
>            OR f='vwxyzabcd'
>            OR f='fghijklmn'
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>     ]])
>       end, {
>           -- <where7-2.107.1>
> @@ -4250,7 +4250,7 @@ test:do_test(
>         WHERE b=88
>            OR f='vwxyzabcd'
>            OR f='fghijklmn'
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>     ]])
>       end, {
>           -- <where7-2.107.2>
> @@ -4296,7 +4296,7 @@ test:do_test(
>         WHERE ((a BETWEEN 47 AND 49) AND a!=48)
>            OR a=5
>            OR b=179
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>            OR a=69
>     ]])
>       end, {
> @@ -4313,7 +4313,7 @@ test:do_test(
>         WHERE ((a BETWEEN 47 AND 49) AND a!=48)
>            OR a=5
>            OR b=179
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>            OR a=69
>     ]])
>       end, {
> @@ -4328,8 +4328,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=971
> -         OR (g='xwvutsr' AND f GLOB 'hijkl*')
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> +         OR (g='xwvutsr' AND f LIKE 'hijkl%')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
>            OR b=828
>            OR a=81
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
> @@ -4350,8 +4350,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=971
> -         OR (g='xwvutsr' AND f GLOB 'hijkl*')
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> +         OR (g='xwvutsr' AND f LIKE 'hijkl%')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
>            OR b=828
>            OR a=81
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
> @@ -4399,8 +4399,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='lkjihgf' AND f GLOB 'opqrs*')
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +      WHERE (g='lkjihgf' AND f LIKE 'opqrs%')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>     ]])
>       end, {
>           -- <where7-2.112.1>
> @@ -4413,8 +4413,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='lkjihgf' AND f GLOB 'opqrs*')
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +      WHERE (g='lkjihgf' AND f LIKE 'opqrs%')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>     ]])
>       end, {
>           -- <where7-2.112.2>
> @@ -4463,8 +4463,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='vutsrqp' AND f GLOB 'rstuv*')
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +      WHERE (g='vutsrqp' AND f LIKE 'rstuv%')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR b=396
>     ]])
>       end, {
> @@ -4478,8 +4478,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='vutsrqp' AND f GLOB 'rstuv*')
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +      WHERE (g='vutsrqp' AND f LIKE 'rstuv%')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR b=396
>     ]])
>       end, {
> @@ -4531,7 +4531,7 @@ test:do_test(
>            OR ((a BETWEEN 20 AND 22) AND a!=21)
>            OR b=396
>            OR b=630
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR c=3003
>            OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
>     ]])
> @@ -4552,7 +4552,7 @@ test:do_test(
>            OR ((a BETWEEN 20 AND 22) AND a!=21)
>            OR b=396
>            OR b=630
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR c=3003
>            OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
>     ]])
> @@ -4573,8 +4573,8 @@ test:do_test(
>            OR b=957
>            OR b=311
>            OR b=143
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -4594,8 +4594,8 @@ test:do_test(
>            OR b=957
>            OR b=311
>            OR b=143
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -4612,7 +4612,7 @@ test:do_test(
>         WHERE ((a BETWEEN 74 AND 76) AND a!=75)
>            OR ((a BETWEEN 94 AND 96) AND a!=95)
>            OR b=451
> -         OR (g='lkjihgf' AND f GLOB 'opqrs*')
> +         OR (g='lkjihgf' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.118.1>
> @@ -4628,7 +4628,7 @@ test:do_test(
>         WHERE ((a BETWEEN 74 AND 76) AND a!=75)
>            OR ((a BETWEEN 94 AND 96) AND a!=95)
>            OR b=451
> -         OR (g='lkjihgf' AND f GLOB 'opqrs*')
> +         OR (g='lkjihgf' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.118.2>
> @@ -4645,11 +4645,11 @@ test:do_test(
>            OR b=451
>            OR b=363
>            OR b=330
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>            OR ((a BETWEEN 52 AND 54) AND a!=53)
> -         OR (g='xwvutsr' AND f GLOB 'defgh*')
> +         OR (g='xwvutsr' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 81 AND 83) AND a!=82)
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>     ]])
>       end, {
>           -- <where7-2.119.1>
> @@ -4666,11 +4666,11 @@ test:do_test(
>            OR b=451
>            OR b=363
>            OR b=330
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>            OR ((a BETWEEN 52 AND 54) AND a!=53)
> -         OR (g='xwvutsr' AND f GLOB 'defgh*')
> +         OR (g='xwvutsr' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 81 AND 83) AND a!=82)
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>     ]])
>       end, {
>           -- <where7-2.119.2>
> @@ -4683,9 +4683,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
> +      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR (d>=68.0 AND d<69.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>            OR e IS NULL
>            OR b=759
>     ]])
> @@ -4700,9 +4700,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
> +      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR (d>=68.0 AND d<69.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>            OR e IS NULL
>            OR b=759
>     ]])
> @@ -4717,9 +4717,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR ((a BETWEEN 19 AND 21) AND a!=20)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>     ]])
>       end, {
>           -- <where7-2.121.1>
> @@ -4732,9 +4732,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR ((a BETWEEN 19 AND 21) AND a!=20)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>     ]])
>       end, {
>           -- <where7-2.121.2>
> @@ -4815,14 +4815,14 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='fedcbaz' AND f GLOB 'tuvwx*')
> +      WHERE (g='fedcbaz' AND f LIKE 'tuvwx%')
>            OR b=421
>            OR b=429
>            OR b=498
>            OR b=33
>            OR b=198
>            OR c=14014
> -         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
> +         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
>     ]])
>       end, {
>           -- <where7-2.124.1>
> @@ -4835,14 +4835,14 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='fedcbaz' AND f GLOB 'tuvwx*')
> +      WHERE (g='fedcbaz' AND f LIKE 'tuvwx%')
>            OR b=421
>            OR b=429
>            OR b=498
>            OR b=33
>            OR b=198
>            OR c=14014
> -         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
> +         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
>     ]])
>       end, {
>           -- <where7-2.124.2>
> @@ -4858,13 +4858,13 @@ test:do_test(
>         WHERE b=47
>            OR c=31031
>            OR a=38
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>            OR b=242
>            OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
>            OR b=352
>            OR a=49
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.125.1>
> @@ -4880,13 +4880,13 @@ test:do_test(
>         WHERE b=47
>            OR c=31031
>            OR a=38
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>            OR b=242
>            OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
>            OR b=352
>            OR a=49
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.125.2>
> @@ -4969,9 +4969,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
> +      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR b=528
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.128.1>
> @@ -4984,9 +4984,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
> +      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR b=528
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.128.2>
> @@ -5031,7 +5031,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=71.0 AND d<72.0 AND d IS NOT NULL)
>            OR 1000000<b
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
>            OR a=24
>     ]])
> @@ -5048,7 +5048,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=71.0 AND d<72.0 AND d IS NOT NULL)
>            OR 1000000<b
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
>            OR a=24
>     ]])
> @@ -5071,8 +5071,8 @@ test:do_test(
>            OR a=14
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
>            OR b=440
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> -         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
> +         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
>     ]])
>       end, {
>           -- <where7-2.131.1>
> @@ -5093,8 +5093,8 @@ test:do_test(
>            OR a=14
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
>            OR b=440
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> -         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
> +         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
>     ]])
>       end, {
>           -- <where7-2.131.2>
> @@ -5226,9 +5226,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=27
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR b=1045
>            OR a=84
>            OR f='qrstuvwxy'
> @@ -5245,9 +5245,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=27
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR b=1045
>            OR a=84
>            OR f='qrstuvwxy'
> @@ -5266,7 +5266,7 @@ test:do_test(
>         WHERE b=704
>            OR b=949
>            OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR c=24024
>            OR b=553
>            OR a=18
> @@ -5286,7 +5286,7 @@ test:do_test(
>         WHERE b=704
>            OR b=949
>            OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR c=24024
>            OR b=553
>            OR a=18
> @@ -5303,8 +5303,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?cdef*' AND f GLOB 'bcde*')
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +      WHERE (f LIKE '_cdef%' AND f LIKE 'bcde%')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR b=902
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
>            OR b=25
> @@ -5323,8 +5323,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?cdef*' AND f GLOB 'bcde*')
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +      WHERE (f LIKE '_cdef%' AND f LIKE 'bcde%')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR b=902
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
>            OR b=25
> @@ -5405,8 +5405,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +      WHERE (f LIKE '_qrst%' AND f LIKE 'pqrs%')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR b=641
>            OR ((a BETWEEN 36 AND 38) AND a!=37)
>     ]])
> @@ -5421,8 +5421,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +      WHERE (f LIKE '_qrst%' AND f LIKE 'pqrs%')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR b=641
>            OR ((a BETWEEN 36 AND 38) AND a!=37)
>     ]])
> @@ -5442,9 +5442,9 @@ test:do_test(
>            OR ((a BETWEEN 44 AND 46) AND a!=45)
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
>            OR b=11
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR a=52
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR a=13
>            OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
>     ]])
> @@ -5464,9 +5464,9 @@ test:do_test(
>            OR ((a BETWEEN 44 AND 46) AND a!=45)
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
>            OR b=11
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR a=52
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR a=13
>            OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
>     ]])
> @@ -5487,7 +5487,7 @@ test:do_test(
>            OR b=1045
>            OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
>            OR f='uvwxyzabc'
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>     ]])
>       end, {
>           -- <where7-2.143.1>
> @@ -5506,7 +5506,7 @@ test:do_test(
>            OR b=1045
>            OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
>            OR f='uvwxyzabc'
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>     ]])
>       end, {
>           -- <where7-2.143.2>
> @@ -5562,9 +5562,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=91
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>            OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
>            OR b=102
> @@ -5584,9 +5584,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=91
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>            OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
>            OR b=102
> @@ -5605,8 +5605,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='vutsrqp' AND f GLOB 'opqrs*')
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +      WHERE (g='vutsrqp' AND f LIKE 'opqrs%')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR b=990
>            OR a=52
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
> @@ -5622,8 +5622,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='vutsrqp' AND f GLOB 'opqrs*')
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +      WHERE (g='vutsrqp' AND f LIKE 'opqrs%')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR b=990
>            OR a=52
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
> @@ -5683,13 +5683,13 @@ test:do_test(
>            OR b=421
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
>            OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
>            OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
>            OR c=22022
>            OR b=825
>            OR ((a BETWEEN 17 AND 19) AND a!=18)
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>     ]])
>       end, {
>           -- <where7-2.148.1>
> @@ -5706,13 +5706,13 @@ test:do_test(
>            OR b=421
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
>            OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
>            OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
>            OR c=22022
>            OR b=825
>            OR ((a BETWEEN 17 AND 19) AND a!=18)
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>     ]])
>       end, {
>           -- <where7-2.148.2>
> @@ -5729,7 +5729,7 @@ test:do_test(
>            OR b=484
>            OR b=1026
>            OR a=90
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR b=608
>            OR a=32
>     ]])
> @@ -5748,7 +5748,7 @@ test:do_test(
>            OR b=484
>            OR b=1026
>            OR a=90
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR b=608
>            OR a=32
>     ]])
> @@ -5771,7 +5771,7 @@ test:do_test(
>            OR a=55
>            OR b=773
>            OR b=319
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.150.1>
> @@ -5792,7 +5792,7 @@ test:do_test(
>            OR a=55
>            OR b=773
>            OR b=319
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.150.2>
> @@ -5805,7 +5805,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='wvutsrq' AND f GLOB 'ijklm*')
> +      WHERE (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR f='mnopqrstu'
>            OR a=62
>     ]])
> @@ -5820,7 +5820,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='wvutsrq' AND f GLOB 'ijklm*')
> +      WHERE (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR f='mnopqrstu'
>            OR a=62
>     ]])
> @@ -5839,9 +5839,9 @@ test:do_test(
>            OR b=1045
>            OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
>            OR c=13013
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR b=124
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.152.1>
> @@ -5858,9 +5858,9 @@ test:do_test(
>            OR b=1045
>            OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
>            OR c=13013
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR b=124
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.152.2>
> @@ -5880,7 +5880,7 @@ test:do_test(
>            OR b=421
>            OR b=803
>            OR c=4004
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>     ]])
>       end, {
>           -- <where7-2.153.1>
> @@ -5900,7 +5900,7 @@ test:do_test(
>            OR b=421
>            OR b=803
>            OR c=4004
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>     ]])
>       end, {
>           -- <where7-2.153.2>
> @@ -5913,9 +5913,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR b=99
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.154.1>
> @@ -5928,9 +5928,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR b=99
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.154.2>
> @@ -5972,9 +5972,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=795
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR f='jklmnopqr'
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>            OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
>            OR b=1056
>     ]])
> @@ -5990,9 +5990,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=795
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR f='jklmnopqr'
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>            OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
>            OR b=1056
>     ]])
> @@ -6146,7 +6146,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=23
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR b=641
>            OR b=352
>            OR b=179
> @@ -6166,7 +6166,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=23
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR b=641
>            OR b=352
>            OR b=179
> @@ -6189,7 +6189,7 @@ test:do_test(
>            OR b=1078
>            OR ((a BETWEEN 11 AND 13) AND a!=12)
>            OR c=12012
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>            OR b=319
>            OR c=5005
>            OR 1000000<b
> @@ -6211,7 +6211,7 @@ test:do_test(
>            OR b=1078
>            OR ((a BETWEEN 11 AND 13) AND a!=12)
>            OR c=12012
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>            OR b=319
>            OR c=5005
>            OR 1000000<b
> @@ -6230,8 +6230,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE f='cdefghijk'
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -6246,8 +6246,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE f='cdefghijk'
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -6297,13 +6297,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
> -         OR (g='rqponml' AND f GLOB 'jklmn*')
> +      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
> +         OR (g='rqponml' AND f LIKE 'jklmn%')
>            OR b=891
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR b=484
>            OR a=62
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>     ]])
>       end, {
>           -- <where7-2.165.1>
> @@ -6316,13 +6316,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
> -         OR (g='rqponml' AND f GLOB 'jklmn*')
> +      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
> +         OR (g='rqponml' AND f LIKE 'jklmn%')
>            OR b=891
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR b=484
>            OR a=62
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>     ]])
>       end, {
>           -- <where7-2.165.2>
> @@ -6336,11 +6336,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=363
> -         OR (g='tsrqpon' AND f GLOB 'zabcd*')
> +         OR (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR ((a BETWEEN 58 AND 60) AND a!=59)
>            OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
>            OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR a=39
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>     ]])
> @@ -6356,11 +6356,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=363
> -         OR (g='tsrqpon' AND f GLOB 'zabcd*')
> +         OR (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR ((a BETWEEN 58 AND 60) AND a!=59)
>            OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
>            OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR a=39
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>     ]])
> @@ -6378,7 +6378,7 @@ test:do_test(
>         WHERE c=30030
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
>            OR b=850
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>     ]])
>       end, {
>           -- <where7-2.167.1>
> @@ -6394,7 +6394,7 @@ test:do_test(
>         WHERE c=30030
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
>            OR b=850
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>     ]])
>       end, {
>           -- <where7-2.167.2>
> @@ -6540,7 +6540,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=333
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>            OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
>            OR b=407
>            OR a=5
> @@ -6559,7 +6559,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=333
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>            OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
>            OR b=407
>            OR a=5
> @@ -6580,7 +6580,7 @@ test:do_test(
>         WHERE b<0
>            OR b=352
>            OR b=517
> -         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
> +         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
>            OR ((a BETWEEN 12 AND 14) AND a!=13)
>            OR b=1012
>            OR ((a BETWEEN 11 AND 13) AND a!=12)
> @@ -6599,7 +6599,7 @@ test:do_test(
>         WHERE b<0
>            OR b=352
>            OR b=517
> -         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
> +         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
>            OR ((a BETWEEN 12 AND 14) AND a!=13)
>            OR b=1012
>            OR ((a BETWEEN 11 AND 13) AND a!=12)
> @@ -6615,11 +6615,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
> +      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
>            OR c<=10
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>            OR a=32
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR d<0.0
>     ]])
>       end, {
> @@ -6633,11 +6633,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
> +      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
>            OR c<=10
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>            OR a=32
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR d<0.0
>     ]])
>       end, {
> @@ -6653,9 +6653,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 20 AND 22) AND a!=21)
>            OR b=1045
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
>            OR a=26
> -         OR (g='gfedcba' AND f GLOB 'opqrs*')
> +         OR (g='gfedcba' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.175.1>
> @@ -6670,9 +6670,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 20 AND 22) AND a!=21)
>            OR b=1045
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
>            OR a=26
> -         OR (g='gfedcba' AND f GLOB 'opqrs*')
> +         OR (g='gfedcba' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.175.2>
> @@ -6714,7 +6714,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=3.0 AND d<4.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>            OR c=32032
>            OR b=289
>            OR ((a BETWEEN 17 AND 19) AND a!=18)
> @@ -6732,7 +6732,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=3.0 AND d<4.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>            OR c=32032
>            OR b=289
>            OR ((a BETWEEN 17 AND 19) AND a!=18)
> @@ -6752,7 +6752,7 @@ test:do_test(
>         WHERE ((a BETWEEN 15 AND 17) AND a!=16)
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>            OR b=33
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>     ]])
>       end, {
>           -- <where7-2.178.1>
> @@ -6768,7 +6768,7 @@ test:do_test(
>         WHERE ((a BETWEEN 15 AND 17) AND a!=16)
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>            OR b=33
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>     ]])
>       end, {
>           -- <where7-2.178.2>
> @@ -6783,15 +6783,15 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=828
>            OR b=341
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR b=902
>            OR ((a BETWEEN 64 AND 66) AND a!=65)
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=242
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.179.1>
> @@ -6806,15 +6806,15 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=828
>            OR b=341
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR b=902
>            OR ((a BETWEEN 64 AND 66) AND a!=65)
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=242
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.179.2>
> @@ -6827,7 +6827,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='nmlkjih' AND f GLOB 'efghi*')
> +      WHERE (g='nmlkjih' AND f LIKE 'efghi%')
>            OR b=982
>            OR b=781
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
> @@ -6845,7 +6845,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='nmlkjih' AND f GLOB 'efghi*')
> +      WHERE (g='nmlkjih' AND f LIKE 'efghi%')
>            OR b=982
>            OR b=781
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
> @@ -6863,13 +6863,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
> +      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR a=31
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>            OR a=76
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR b=176
>     ]])
>       end, {
> @@ -6883,13 +6883,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
> +      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR a=31
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>            OR a=76
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR b=176
>     ]])
>       end, {
> @@ -6903,11 +6903,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ponmlkj' AND f GLOB 'vwxyz*')
> +      WHERE (g='ponmlkj' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 59 AND 61) AND a!=60)
> -         OR (g='nmlkjih' AND f GLOB 'defgh*')
> +         OR (g='nmlkjih' AND f LIKE 'defgh%')
>            OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR b=14
>            OR ((a BETWEEN 88 AND 90) AND a!=89)
>            OR f='zabcdefgh'
> @@ -6923,11 +6923,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ponmlkj' AND f GLOB 'vwxyz*')
> +      WHERE (g='ponmlkj' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 59 AND 61) AND a!=60)
> -         OR (g='nmlkjih' AND f GLOB 'defgh*')
> +         OR (g='nmlkjih' AND f LIKE 'defgh%')
>            OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR b=14
>            OR ((a BETWEEN 88 AND 90) AND a!=89)
>            OR f='zabcdefgh'
> @@ -6943,7 +6943,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
> +      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR b=286
>            OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
>            OR b=91
> @@ -6960,7 +6960,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
> +      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR b=286
>            OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
>            OR b=91
> @@ -6977,9 +6977,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='lkjihgf' AND f GLOB 'nopqr*')
> +      WHERE (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR c=19019
> -         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> +         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
>            OR b=374
>     ]])
>       end, {
> @@ -6993,9 +6993,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='lkjihgf' AND f GLOB 'nopqr*')
> +      WHERE (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR c=19019
> -         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> +         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
>            OR b=374
>     ]])
>       end, {
> @@ -7010,7 +7010,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE g IS NULL
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>     ]])
>       end, {
>           -- <where7-2.185.1>
> @@ -7024,7 +7024,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE g IS NULL
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>     ]])
>       end, {
>           -- <where7-2.185.2>
> @@ -7067,10 +7067,10 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 66 AND 68) AND a!=67)
>            OR b=564
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR b=234
>            OR b=641
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>            OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
>            OR a=98
> @@ -7088,10 +7088,10 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 66 AND 68) AND a!=67)
>            OR b=564
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR b=234
>            OR b=641
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>            OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
>            OR a=98
> @@ -7111,12 +7111,12 @@ test:do_test(
>            OR b=44
>            OR b=539
>            OR c=11011
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=69
>            OR b=1001
>            OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
>     ]])
>       end, {
> @@ -7134,12 +7134,12 @@ test:do_test(
>            OR b=44
>            OR b=539
>            OR c=11011
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=69
>            OR b=1001
>            OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
>     ]])
>       end, {
> @@ -7224,7 +7224,7 @@ test:do_test(
>         WHERE c=23023
>            OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
>            OR a=66
> -         OR (g='onmlkji' AND f GLOB 'zabcd*')
> +         OR (g='onmlkji' AND f LIKE 'zabcd%')
>            OR a=51
>            OR a=23
>            OR c=4004
> @@ -7243,7 +7243,7 @@ test:do_test(
>         WHERE c=23023
>            OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
>            OR a=66
> -         OR (g='onmlkji' AND f GLOB 'zabcd*')
> +         OR (g='onmlkji' AND f LIKE 'zabcd%')
>            OR a=51
>            OR a=23
>            OR c=4004
> @@ -7260,7 +7260,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=36
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR a=80
>     ]])
>       end, {
> @@ -7275,7 +7275,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=36
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR a=80
>     ]])
>       end, {
> @@ -7289,7 +7289,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +      WHERE (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>            OR ((a BETWEEN 37 AND 39) AND a!=38)
>            OR a=55
>            OR f='efghijklm'
> @@ -7310,7 +7310,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +      WHERE (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>            OR ((a BETWEEN 37 AND 39) AND a!=38)
>            OR a=55
>            OR f='efghijklm'
> @@ -7333,11 +7333,11 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=87.0 AND d<88.0 AND d IS NOT NULL)
>            OR b=836
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR a=91
>            OR b=594
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.194.1>
> @@ -7352,11 +7352,11 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=87.0 AND d<88.0 AND d IS NOT NULL)
>            OR b=836
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR a=91
>            OR b=594
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.194.2>
> @@ -7369,8 +7369,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='tsrqpon' AND f GLOB 'yzabc*')
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +      WHERE (g='tsrqpon' AND f LIKE 'yzabc%')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 62 AND 64) AND a!=63)
>            OR c=6006
>            OR ((a BETWEEN 50 AND 52) AND a!=51)
> @@ -7389,8 +7389,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='tsrqpon' AND f GLOB 'yzabc*')
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +      WHERE (g='tsrqpon' AND f LIKE 'yzabc%')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 62 AND 64) AND a!=63)
>            OR c=6006
>            OR ((a BETWEEN 50 AND 52) AND a!=51)
> @@ -7415,10 +7415,10 @@ test:do_test(
>            OR b=121
>            OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 12 AND 14) AND a!=13)
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
>            OR b=660
>            OR b=792
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
>     ]])
>       end, {
>           -- <where7-2.196.1>
> @@ -7437,10 +7437,10 @@ test:do_test(
>            OR b=121
>            OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 12 AND 14) AND a!=13)
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
>            OR b=660
>            OR b=792
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
>     ]])
>       end, {
>           -- <where7-2.196.2>
> @@ -7456,10 +7456,10 @@ test:do_test(
>         WHERE b=1089
>            OR b=495
>            OR b=157
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>            OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> -         OR (g='xwvutsr' AND f GLOB 'hijkl*')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
> +         OR (g='xwvutsr' AND f LIKE 'hijkl%')
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR f='wxyzabcde'
>     ]])
> @@ -7477,10 +7477,10 @@ test:do_test(
>         WHERE b=1089
>            OR b=495
>            OR b=157
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>            OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> -         OR (g='xwvutsr' AND f GLOB 'hijkl*')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
> +         OR (g='xwvutsr' AND f LIKE 'hijkl%')
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR f='wxyzabcde'
>     ]])
> @@ -7497,7 +7497,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE f='bcdefghij'
>            OR ((a BETWEEN 40 AND 42) AND a!=41)
> -         OR (g='srqponm' AND f GLOB 'ghijk*')
> +         OR (g='srqponm' AND f LIKE 'ghijk%')
>            OR b=157
>            OR b=267
>            OR c=34034
> @@ -7515,7 +7515,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE f='bcdefghij'
>            OR ((a BETWEEN 40 AND 42) AND a!=41)
> -         OR (g='srqponm' AND f GLOB 'ghijk*')
> +         OR (g='srqponm' AND f LIKE 'ghijk%')
>            OR b=157
>            OR b=267
>            OR c=34034
> @@ -7534,7 +7534,7 @@ test:do_test(
>         WHERE a=19
>            OR a=23
>            OR c<=10
> -         OR (g='lkjihgf' AND f GLOB 'opqrs*')
> +         OR (g='lkjihgf' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.199.1>
> @@ -7550,7 +7550,7 @@ test:do_test(
>         WHERE a=19
>            OR a=23
>            OR c<=10
> -         OR (g='lkjihgf' AND f GLOB 'opqrs*')
> +         OR (g='lkjihgf' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.199.2>
> @@ -7567,7 +7567,7 @@ test:do_test(
>            OR b=792
>            OR b=803
>            OR b=36
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>     ]])
>       end, {
>           -- <where7-2.200.1>
> @@ -7584,7 +7584,7 @@ test:do_test(
>            OR b=792
>            OR b=803
>            OR b=36
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>     ]])
>       end, {
>           -- <where7-2.200.2>
> @@ -7597,11 +7597,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='utsrqpo' AND f GLOB 'uvwxy*')
> +      WHERE (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 71 AND 73) AND a!=72)
>            OR ((a BETWEEN 76 AND 78) AND a!=77)
>            OR f='jklmnopqr'
> -         OR (g='onmlkji' AND f GLOB 'yzabc*')
> +         OR (g='onmlkji' AND f LIKE 'yzabc%')
>            OR b=891
>            OR a=40
>            OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
> @@ -7617,11 +7617,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='utsrqpo' AND f GLOB 'uvwxy*')
> +      WHERE (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 71 AND 73) AND a!=72)
>            OR ((a BETWEEN 76 AND 78) AND a!=77)
>            OR f='jklmnopqr'
> -         OR (g='onmlkji' AND f GLOB 'yzabc*')
> +         OR (g='onmlkji' AND f LIKE 'yzabc%')
>            OR b=891
>            OR a=40
>            OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
> @@ -7644,7 +7644,7 @@ test:do_test(
>            OR d>1e10
>            OR b=429
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
>            OR c=10010
>            OR ((a BETWEEN 83 AND 85) AND a!=84)
>     ]])
> @@ -7666,7 +7666,7 @@ test:do_test(
>            OR d>1e10
>            OR b=429
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
>            OR c=10010
>            OR ((a BETWEEN 83 AND 85) AND a!=84)
>     ]])
> @@ -7681,14 +7681,14 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='xwvutsr' AND f GLOB 'defgh*')
> +      WHERE (g='xwvutsr' AND f LIKE 'defgh%')
>            OR a=22
>            OR a=26
>            OR a=81
>            OR a=53
>            OR ((a BETWEEN 92 AND 94) AND a!=93)
>            OR c=30030
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR a=82
>            OR b=594
>     ]])
> @@ -7703,14 +7703,14 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='xwvutsr' AND f GLOB 'defgh*')
> +      WHERE (g='xwvutsr' AND f LIKE 'defgh%')
>            OR a=22
>            OR a=26
>            OR a=81
>            OR a=53
>            OR ((a BETWEEN 92 AND 94) AND a!=93)
>            OR c=30030
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR a=82
>            OR b=594
>     ]])
> @@ -7727,14 +7727,14 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 34 AND 36) AND a!=35)
>            OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>            OR a=83
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR ((a BETWEEN 99 AND 101) AND a!=100)
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>            OR b=1092
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>            OR b=25
>     ]])
>       end, {
> @@ -7750,14 +7750,14 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 34 AND 36) AND a!=35)
>            OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>            OR a=83
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR ((a BETWEEN 99 AND 101) AND a!=100)
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>            OR b=1092
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>            OR b=25
>     ]])
>       end, {
> @@ -7773,9 +7773,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=20
>            OR b=421
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>            OR a=50
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -7791,9 +7791,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=20
>            OR b=421
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>            OR a=50
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -7808,7 +7808,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=960
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>     ]])
>       end, {
>           -- <where7-2.206.1>
> @@ -7822,7 +7822,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=960
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>     ]])
>       end, {
>           -- <where7-2.206.2>
> @@ -7899,7 +7899,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
> +      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
>            OR b=957
>            OR ((a BETWEEN 48 AND 50) AND a!=49)
>     ]])
> @@ -7914,7 +7914,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
> +      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
>            OR b=957
>            OR ((a BETWEEN 48 AND 50) AND a!=49)
>     ]])
> @@ -7961,7 +7961,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=66.0 AND d<67.0 AND d IS NOT NULL)
>            OR b=11
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>            OR ((a BETWEEN 14 AND 16) AND a!=15)
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR a=99
> @@ -7979,7 +7979,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=66.0 AND d<67.0 AND d IS NOT NULL)
>            OR b=11
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>            OR ((a BETWEEN 14 AND 16) AND a!=15)
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR a=99
> @@ -7997,12 +7997,12 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE f='fghijklmn'
>            OR a=16
> -         OR (g='xwvutsr' AND f GLOB 'defgh*')
> +         OR (g='xwvutsr' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 60 AND 62) AND a!=61)
>            OR ((a BETWEEN 90 AND 92) AND a!=91)
>            OR ((a BETWEEN 9 AND 11) AND a!=10)
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
> +         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
>            OR b=80
>     ]])
>       end, {
> @@ -8018,12 +8018,12 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE f='fghijklmn'
>            OR a=16
> -         OR (g='xwvutsr' AND f GLOB 'defgh*')
> +         OR (g='xwvutsr' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 60 AND 62) AND a!=61)
>            OR ((a BETWEEN 90 AND 92) AND a!=91)
>            OR ((a BETWEEN 9 AND 11) AND a!=10)
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
> +         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
>            OR b=80
>     ]])
>       end, {
> @@ -8037,10 +8037,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
> +      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR a=44
>            OR a=43
> -         OR (g='lkjihgf' AND f GLOB 'opqrs*')
> +         OR (g='lkjihgf' AND f LIKE 'opqrs%')
>            OR b=25
>     ]])
>       end, {
> @@ -8054,10 +8054,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
> +      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR a=44
>            OR a=43
> -         OR (g='lkjihgf' AND f GLOB 'opqrs*')
> +         OR (g='lkjihgf' AND f LIKE 'opqrs%')
>            OR b=25
>     ]])
>       end, {
> @@ -8134,10 +8134,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=3.0 AND d<4.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'opqrs*')
> +         OR (g='gfedcba' AND f LIKE 'opqrs%')
>            OR b=1015
>            OR c=16016
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR f='abcdefghi'
>            OR b=605
>            OR a=63
> @@ -8154,10 +8154,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=3.0 AND d<4.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'opqrs*')
> +         OR (g='gfedcba' AND f LIKE 'opqrs%')
>            OR b=1015
>            OR c=16016
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR f='abcdefghi'
>            OR b=605
>            OR a=63
> @@ -8173,7 +8173,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='yxwvuts' AND f GLOB 'bcdef*')
> +      WHERE (g='yxwvuts' AND f LIKE 'bcdef%')
>            OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
>            OR b=641
>            OR b=795
> @@ -8189,7 +8189,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='yxwvuts' AND f GLOB 'bcdef*')
> +      WHERE (g='yxwvuts' AND f LIKE 'bcdef%')
>            OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
>            OR b=641
>            OR b=795
> @@ -8281,7 +8281,7 @@ test:do_test(
>            OR b=1089
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
>            OR f IS NULL
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>     ]])
>       end, {
>           -- <where7-2.220.1>
> @@ -8302,7 +8302,7 @@ test:do_test(
>            OR b=1089
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
>            OR f IS NULL
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>     ]])
>       end, {
>           -- <where7-2.220.2>
> @@ -8317,15 +8317,15 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=1026
>            OR b=407
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>            OR b=564
>            OR c=23023
>            OR b=891
>            OR c=22022
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
>            OR ((a BETWEEN 9 AND 11) AND a!=10)
> -         OR (g='rqponml' AND f GLOB 'ijklm*')
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='rqponml' AND f LIKE 'ijklm%')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.221.1>
> @@ -8340,15 +8340,15 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=1026
>            OR b=407
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>            OR b=564
>            OR c=23023
>            OR b=891
>            OR c=22022
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
>            OR ((a BETWEEN 9 AND 11) AND a!=10)
> -         OR (g='rqponml' AND f GLOB 'ijklm*')
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='rqponml' AND f LIKE 'ijklm%')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.221.2>
> @@ -8395,7 +8395,7 @@ test:do_test(
>            OR ((a BETWEEN 79 AND 81) AND a!=80)
>            OR c=18018
>            OR b=792
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
>            OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
>            OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
> @@ -8417,7 +8417,7 @@ test:do_test(
>            OR ((a BETWEEN 79 AND 81) AND a!=80)
>            OR c=18018
>            OR b=792
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
>            OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
>            OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
> @@ -8437,10 +8437,10 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=429
>            OR (d>=33.0 AND d<34.0 AND d IS NOT NULL)
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR b=1070
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>     ]])
>       end, {
>           -- <where7-2.224.1>
> @@ -8455,10 +8455,10 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=429
>            OR (d>=33.0 AND d<34.0 AND d IS NOT NULL)
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR b=1070
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>     ]])
>       end, {
>           -- <where7-2.224.2>
> @@ -8471,7 +8471,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
> +      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=572
>     ]])
>       end, {
> @@ -8485,7 +8485,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
> +      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=572
>     ]])
>       end, {
> @@ -8501,7 +8501,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 62 AND 64) AND a!=63)
>            OR f='abcdefghi'
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>     ]])
>       end, {
>           -- <where7-2.226.1>
> @@ -8516,7 +8516,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 62 AND 64) AND a!=63)
>            OR f='abcdefghi'
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>     ]])
>       end, {
>           -- <where7-2.226.2>
> @@ -8562,7 +8562,7 @@ test:do_test(
>            OR a=1
>            OR ((a BETWEEN 75 AND 77) AND a!=76)
>            OR a=75
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 59 AND 61) AND a!=60)
>     ]])
>       end, {
> @@ -8581,7 +8581,7 @@ test:do_test(
>            OR a=1
>            OR ((a BETWEEN 75 AND 77) AND a!=76)
>            OR a=75
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 59 AND 61) AND a!=60)
>     ]])
>       end, {
> @@ -8595,9 +8595,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> +      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR b=231
>            OR a=87
>     ]])
> @@ -8612,9 +8612,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> +      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR b=231
>            OR a=87
>     ]])
> @@ -8630,8 +8630,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=77
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>            OR c=24024
>            OR c=5005
>     ]])
> @@ -8647,8 +8647,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=77
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>            OR c=24024
>            OR c=5005
>     ]])
> @@ -8663,13 +8663,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='mlkjihg' AND f GLOB 'ijklm*')
> +      WHERE (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 64 AND 66) AND a!=65)
>            OR b=682
>            OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -8683,13 +8683,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='mlkjihg' AND f GLOB 'ijklm*')
> +      WHERE (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 64 AND 66) AND a!=65)
>            OR b=682
>            OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -8707,7 +8707,7 @@ test:do_test(
>            OR b=121
>            OR c=2002
>            OR ((a BETWEEN 84 AND 86) AND a!=85)
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>     ]])
>       end, {
>           -- <where7-2.232.1>
> @@ -8724,7 +8724,7 @@ test:do_test(
>            OR b=121
>            OR c=2002
>            OR ((a BETWEEN 84 AND 86) AND a!=85)
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>     ]])
>       end, {
>           -- <where7-2.232.2>
> @@ -8740,8 +8740,8 @@ test:do_test(
>         WHERE (d>=55.0 AND d<56.0 AND d IS NOT NULL)
>            OR f='abcdefghi'
>            OR b=267
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR a=82
>            OR a=54
>            OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
> @@ -8761,8 +8761,8 @@ test:do_test(
>         WHERE (d>=55.0 AND d<56.0 AND d IS NOT NULL)
>            OR f='abcdefghi'
>            OR b=267
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR a=82
>            OR a=54
>            OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
> @@ -8815,9 +8815,9 @@ test:do_test(
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
>            OR (d>=94.0 AND d<95.0 AND d IS NOT NULL)
>            OR 1000000<b
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>     ]])
>       end, {
>           -- <where7-2.235.1>
> @@ -8836,9 +8836,9 @@ test:do_test(
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
>            OR (d>=94.0 AND d<95.0 AND d IS NOT NULL)
>            OR 1000000<b
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>     ]])
>       end, {
>           -- <where7-2.235.2>
> @@ -8853,7 +8853,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=1001
>            OR b=168
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -8869,7 +8869,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=1001
>            OR b=168
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -8884,8 +8884,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=51
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> -         OR (g='edcbazy' AND f GLOB 'uvwxy*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
> +         OR (g='edcbazy' AND f LIKE 'uvwxy%')
>            OR b=330
>     ]])
>       end, {
> @@ -8900,8 +8900,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=51
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> -         OR (g='edcbazy' AND f GLOB 'uvwxy*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
> +         OR (g='edcbazy' AND f LIKE 'uvwxy%')
>            OR b=330
>     ]])
>       end, {
> @@ -8915,13 +8915,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
> +      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
>            OR b=704
>            OR a=62
>            OR f='pqrstuvwx'
>            OR b=495
>            OR c=26026
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR b<0
>            OR b=597
>     ]])
> @@ -8936,13 +8936,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
> +      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
>            OR b=704
>            OR a=62
>            OR f='pqrstuvwx'
>            OR b=495
>            OR c=26026
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR b<0
>            OR b=597
>     ]])
> @@ -8992,7 +8992,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE c=14014
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=572
>            OR c=15015
>     ]])
> @@ -9008,7 +9008,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE c=14014
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=572
>            OR c=15015
>     ]])
> @@ -9023,9 +9023,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
> +      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
>            OR b=850
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 15 AND 17) AND a!=16)
>            OR b=88
>            OR f='hijklmnop'
> @@ -9044,9 +9044,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
> +      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
>            OR b=850
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 15 AND 17) AND a!=16)
>            OR b=88
>            OR f='hijklmnop'
> @@ -9073,8 +9073,8 @@ test:do_test(
>            OR b=374
>            OR b=938
>            OR b=773
> -         OR (g='jihgfed' AND f GLOB 'zabcd*')
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='jihgfed' AND f LIKE 'zabcd%')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>     ]])
>       end, {
>           -- <where7-2.242.1>
> @@ -9095,8 +9095,8 @@ test:do_test(
>            OR b=374
>            OR b=938
>            OR b=773
> -         OR (g='jihgfed' AND f GLOB 'zabcd*')
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='jihgfed' AND f LIKE 'zabcd%')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>     ]])
>       end, {
>           -- <where7-2.242.2>
> @@ -9109,7 +9109,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
> +      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR b=146
>     ]])
>       end, {
> @@ -9123,7 +9123,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
> +      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR b=146
>     ]])
>       end, {
> @@ -9171,7 +9171,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR b=399
>            OR b=1004
>            OR c=16016
> @@ -9193,7 +9193,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR b=399
>            OR b=1004
>            OR c=16016
> @@ -9222,8 +9222,8 @@ test:do_test(
>            OR b=861
>            OR (d>=90.0 AND d<91.0 AND d IS NOT NULL)
>            OR b=949
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>     ]])
>       end, {
>           -- <where7-2.246.1>
> @@ -9243,8 +9243,8 @@ test:do_test(
>            OR b=861
>            OR (d>=90.0 AND d<91.0 AND d IS NOT NULL)
>            OR b=949
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>     ]])
>       end, {
>           -- <where7-2.246.2>
> @@ -9257,7 +9257,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
> +      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
>            OR a=83
>            OR c=26026
>            OR a=49
> @@ -9276,7 +9276,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
> +      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
>            OR a=83
>            OR c=26026
>            OR a=49
> @@ -9328,7 +9328,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=451
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>     ]])
>       end, {
>           -- <where7-2.249.1>
> @@ -9342,7 +9342,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=451
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>     ]])
>       end, {
>           -- <where7-2.249.2>
> @@ -9356,7 +9356,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=47
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>     ]])
>       end, {
>           -- <where7-2.250.1>
> @@ -9370,7 +9370,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=47
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>     ]])
>       end, {
>           -- <where7-2.250.2>
> @@ -9384,7 +9384,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=1037
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
>            OR b=344
>            OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
> @@ -9401,7 +9401,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=1037
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
>            OR b=344
>            OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
> @@ -9419,7 +9419,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=506
>            OR ((a BETWEEN 20 AND 22) AND a!=21)
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
>            OR b=429
>            OR b=275
>     ]])
> @@ -9436,7 +9436,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=506
>            OR ((a BETWEEN 20 AND 22) AND a!=21)
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
>            OR b=429
>            OR b=275
>     ]])
> @@ -9458,7 +9458,7 @@ test:do_test(
>            OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
>            OR a=60
>            OR b=80
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
>            OR b=616
>     ]])
>       end, {
> @@ -9479,7 +9479,7 @@ test:do_test(
>            OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
>            OR a=60
>            OR b=80
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
>            OR b=616
>     ]])
>       end, {
> @@ -9521,13 +9521,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
> +      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
>            OR a=43
>            OR ((a BETWEEN 64 AND 66) AND a!=65)
>            OR b=586
>            OR c=17017
> -         OR (g='onmlkji' AND f GLOB 'yzabc*')
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (g='onmlkji' AND f LIKE 'yzabc%')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR a=87
>            OR b=968
>     ]])
> @@ -9542,13 +9542,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
> +      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
>            OR a=43
>            OR ((a BETWEEN 64 AND 66) AND a!=65)
>            OR b=586
>            OR c=17017
> -         OR (g='onmlkji' AND f GLOB 'yzabc*')
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (g='onmlkji' AND f LIKE 'yzabc%')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR a=87
>            OR b=968
>     ]])
> @@ -9597,8 +9597,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='rqponml' AND f GLOB 'jklmn*')
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +      WHERE (g='rqponml' AND f LIKE 'jklmn%')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>            OR c>=34035
>            OR b=850
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
> @@ -9620,8 +9620,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='rqponml' AND f GLOB 'jklmn*')
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +      WHERE (g='rqponml' AND f LIKE 'jklmn%')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>            OR c>=34035
>            OR b=850
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
> @@ -9705,7 +9705,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='qponmlk' AND f GLOB 'nopqr*')
> +      WHERE (g='qponmlk' AND f LIKE 'nopqr%')
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>            OR b=993
>     ]])
> @@ -9720,7 +9720,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='qponmlk' AND f GLOB 'nopqr*')
> +      WHERE (g='qponmlk' AND f LIKE 'nopqr%')
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>            OR b=993
>     ]])
> @@ -9739,7 +9739,7 @@ test:do_test(
>            OR a=22
>            OR b=289
>            OR b=795
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR b=242
>            OR a=59
>            OR b=1045
> @@ -9760,7 +9760,7 @@ test:do_test(
>            OR a=22
>            OR b=289
>            OR b=795
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR b=242
>            OR a=59
>            OR b=1045
> @@ -9778,9 +9778,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=245
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR c=3003
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR (d>=33.0 AND d<34.0 AND d IS NOT NULL)
> @@ -9798,9 +9798,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=245
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR c=3003
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR (d>=33.0 AND d<34.0 AND d IS NOT NULL)
> @@ -9817,15 +9817,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='hgfedcb' AND f GLOB 'jklmn*')
> +      WHERE (g='hgfedcb' AND f LIKE 'jklmn%')
>            OR b=220
>            OR b=443
> -         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
> +         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
>            OR a=62
> -         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
> +         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
>            OR b=1023
>            OR a=100
> -         OR (g='nmlkjih' AND f GLOB 'defgh*')
> +         OR (g='nmlkjih' AND f LIKE 'defgh%')
>            OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -9839,15 +9839,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='hgfedcb' AND f GLOB 'jklmn*')
> +      WHERE (g='hgfedcb' AND f LIKE 'jklmn%')
>            OR b=220
>            OR b=443
> -         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
> +         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
>            OR a=62
> -         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
> +         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
>            OR b=1023
>            OR a=100
> -         OR (g='nmlkjih' AND f GLOB 'defgh*')
> +         OR (g='nmlkjih' AND f LIKE 'defgh%')
>            OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -9863,8 +9863,8 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE c=11011
>            OR f='tuvwxyzab'
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>     ]])
>       end, {
>           -- <where7-2.264.1>
> @@ -9879,8 +9879,8 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE c=11011
>            OR f='tuvwxyzab'
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>     ]])
>       end, {
>           -- <where7-2.264.2>
> @@ -10005,15 +10005,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
> +      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR b=443
>            OR b=33
>            OR b=762
>            OR b=575
>            OR c=16016
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 41 AND 43) AND a!=42)
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR b=1092
>     ]])
>       end, {
> @@ -10027,15 +10027,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
> +      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR b=443
>            OR b=33
>            OR b=762
>            OR b=575
>            OR c=16016
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 41 AND 43) AND a!=42)
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR b=1092
>     ]])
>       end, {
> @@ -10051,14 +10051,14 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=806
>            OR b=872
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
>            OR f='uvwxyzabc'
>            OR b=748
>            OR b=586
>            OR ((a BETWEEN 15 AND 17) AND a!=16)
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>            OR b=891
>     ]])
>       end, {
> @@ -10074,14 +10074,14 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=806
>            OR b=872
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
>            OR f='uvwxyzabc'
>            OR b=748
>            OR b=586
>            OR ((a BETWEEN 15 AND 17) AND a!=16)
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>            OR b=891
>     ]])
>       end, {
> @@ -10097,8 +10097,8 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=693
>            OR f='fghijklmn'
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 71 AND 73) AND a!=72)
>            OR a=96
>     ]])
> @@ -10115,8 +10115,8 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=693
>            OR f='fghijklmn'
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 71 AND 73) AND a!=72)
>            OR a=96
>     ]])
> @@ -10131,7 +10131,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
> +      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
>            OR b=451
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
>            OR ((a BETWEEN 97 AND 99) AND a!=98)
> @@ -10148,7 +10148,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
> +      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
>            OR b=451
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
>            OR ((a BETWEEN 97 AND 99) AND a!=98)
> @@ -10165,16 +10165,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='nmlkjih' AND f GLOB 'bcdef*')
> +      WHERE (g='nmlkjih' AND f LIKE 'bcdef%')
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
>            OR a=75
>            OR b=960
> -         OR (g='tsrqpon' AND f GLOB 'yzabc*')
> +         OR (g='tsrqpon' AND f LIKE 'yzabc%')
>            OR b=616
>            OR b=330
>            OR ((a BETWEEN 16 AND 18) AND a!=17)
>            OR a=26
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.272.1>
> @@ -10187,16 +10187,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='nmlkjih' AND f GLOB 'bcdef*')
> +      WHERE (g='nmlkjih' AND f LIKE 'bcdef%')
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
>            OR a=75
>            OR b=960
> -         OR (g='tsrqpon' AND f GLOB 'yzabc*')
> +         OR (g='tsrqpon' AND f LIKE 'yzabc%')
>            OR b=616
>            OR b=330
>            OR ((a BETWEEN 16 AND 18) AND a!=17)
>            OR a=26
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.272.2>
> @@ -10210,7 +10210,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=762
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>     ]])
>       end, {
>           -- <where7-2.273.1>
> @@ -10224,7 +10224,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=762
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>     ]])
>       end, {
>           -- <where7-2.273.2>
> @@ -10310,7 +10310,7 @@ test:do_test(
>            OR b=176
>            OR ((a BETWEEN 34 AND 36) AND a!=35)
>            OR b=220
> -         OR (g='tsrqpon' AND f GLOB 'yzabc*')
> +         OR (g='tsrqpon' AND f LIKE 'yzabc%')
>            OR a=4
>     ]])
>       end, {
> @@ -10329,7 +10329,7 @@ test:do_test(
>            OR b=176
>            OR ((a BETWEEN 34 AND 36) AND a!=35)
>            OR b=220
> -         OR (g='tsrqpon' AND f GLOB 'yzabc*')
> +         OR (g='tsrqpon' AND f LIKE 'yzabc%')
>            OR a=4
>     ]])
>       end, {
> @@ -10344,7 +10344,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=29
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR b=979
>            OR b=275
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
> @@ -10364,7 +10364,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=29
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR b=979
>            OR b=275
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
> @@ -10384,11 +10384,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 43 AND 45) AND a!=44)
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>            OR f='fghijklmn'
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
>            OR ((a BETWEEN 4 AND 6) AND a!=5)
>            OR a=74
>            OR ((a BETWEEN 7 AND 9) AND a!=8)
> @@ -10405,11 +10405,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 43 AND 45) AND a!=44)
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>            OR f='fghijklmn'
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
>            OR ((a BETWEEN 4 AND 6) AND a!=5)
>            OR a=74
>            OR ((a BETWEEN 7 AND 9) AND a!=8)
> @@ -10426,10 +10426,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 80 AND 82) AND a!=81)
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>            OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 49 AND 51) AND a!=50)
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
>     ]])
>       end, {
>           -- <where7-2.279.1>
> @@ -10443,10 +10443,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 80 AND 82) AND a!=81)
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>            OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 49 AND 51) AND a!=50)
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
>     ]])
>       end, {
>           -- <where7-2.279.2>
> @@ -10495,11 +10495,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
> +      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR c=23023
>            OR b=377
>            OR b=858
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.281.1>
> @@ -10512,11 +10512,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
> +      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR c=23023
>            OR b=377
>            OR b=858
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.281.2>
> @@ -10532,13 +10532,13 @@ test:do_test(
>         WHERE (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR b=322
>            OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
> -         OR (g='fedcbaz' AND f GLOB 'pqrst*')
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='fedcbaz' AND f LIKE 'pqrst%')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR b=432
>            OR b=55
>            OR a=53
>            OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR b=25
>     ]])
>       end, {
> @@ -10555,13 +10555,13 @@ test:do_test(
>         WHERE (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR b=322
>            OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
> -         OR (g='fedcbaz' AND f GLOB 'pqrst*')
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='fedcbaz' AND f LIKE 'pqrst%')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR b=432
>            OR b=55
>            OR a=53
>            OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR b=25
>     ]])
>       end, {
> @@ -10576,7 +10576,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=484
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR b=616
>            OR c=5005
>            OR ((a BETWEEN 27 AND 29) AND a!=28)
> @@ -10593,7 +10593,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=484
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR b=616
>            OR c=5005
>            OR ((a BETWEEN 27 AND 29) AND a!=28)
> @@ -10610,11 +10610,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=916
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR b=1048
>            OR c=6006
>            OR b=762
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR ((a BETWEEN 59 AND 61) AND a!=60)
>            OR b=751
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
> @@ -10631,11 +10631,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=916
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR b=1048
>            OR c=6006
>            OR b=762
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR ((a BETWEEN 59 AND 61) AND a!=60)
>            OR b=751
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
> @@ -10656,7 +10656,7 @@ test:do_test(
>            OR b=275
>            OR b=396
>            OR c=4004
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>            OR b=319
>            OR ((a BETWEEN 83 AND 85) AND a!=84)
>            OR a=3
> @@ -10678,7 +10678,7 @@ test:do_test(
>            OR b=275
>            OR b=396
>            OR c=4004
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>            OR b=319
>            OR ((a BETWEEN 83 AND 85) AND a!=84)
>            OR a=3
> @@ -10695,16 +10695,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='wvutsrq' AND f GLOB 'lmnop*')
> +      WHERE (g='wvutsrq' AND f LIKE 'lmnop%')
>            OR b=718
>            OR f='vwxyzabcd'
>            OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -10718,16 +10718,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='wvutsrq' AND f GLOB 'lmnop*')
> +      WHERE (g='wvutsrq' AND f LIKE 'lmnop%')
>            OR b=718
>            OR f='vwxyzabcd'
>            OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -10920,9 +10920,9 @@ test:do_test(
>            OR b=231
>            OR b=212
>            OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR c=30030
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>     ]])
>       end, {
>           -- <where7-2.292.1>
> @@ -10940,9 +10940,9 @@ test:do_test(
>            OR b=231
>            OR b=212
>            OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR c=30030
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>     ]])
>       end, {
>           -- <where7-2.292.2>
> @@ -10996,8 +10996,8 @@ test:do_test(
>            OR f='vwxyzabcd'
>            OR b=762
>            OR a=60
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>     ]])
>       end, {
>           -- <where7-2.294.1>
> @@ -11015,8 +11015,8 @@ test:do_test(
>            OR f='vwxyzabcd'
>            OR b=762
>            OR a=60
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>     ]])
>       end, {
>           -- <where7-2.294.2>
> @@ -11029,14 +11029,14 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='mlkjihg' AND f GLOB 'ghijk*')
> +      WHERE (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR a=3
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR b=498
>            OR a=100
>            OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR a=69
>     ]])
>       end, {
> @@ -11050,14 +11050,14 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='mlkjihg' AND f GLOB 'ghijk*')
> +      WHERE (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR a=3
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR b=498
>            OR a=100
>            OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR a=69
>     ]])
>       end, {
> @@ -11071,12 +11071,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
> +      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
>            OR b=300
>            OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
>            OR b=58
>            OR ((a BETWEEN 55 AND 57) AND a!=56)
> -         OR (g='nmlkjih' AND f GLOB 'defgh*')
> +         OR (g='nmlkjih' AND f LIKE 'defgh%')
>            OR b=286
>            OR b=234
>            OR ((a BETWEEN 43 AND 45) AND a!=44)
> @@ -11094,12 +11094,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
> +      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
>            OR b=300
>            OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
>            OR b=58
>            OR ((a BETWEEN 55 AND 57) AND a!=56)
> -         OR (g='nmlkjih' AND f GLOB 'defgh*')
> +         OR (g='nmlkjih' AND f LIKE 'defgh%')
>            OR b=286
>            OR b=234
>            OR ((a BETWEEN 43 AND 45) AND a!=44)
> @@ -11121,12 +11121,12 @@ test:do_test(
>            OR ((a BETWEEN 72 AND 74) AND a!=73)
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
>            OR b=594
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR ((a BETWEEN 37 AND 39) AND a!=38)
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
>            OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>            OR ((a BETWEEN 53 AND 55) AND a!=54)
>     ]])
>       end, {
> @@ -11144,12 +11144,12 @@ test:do_test(
>            OR ((a BETWEEN 72 AND 74) AND a!=73)
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
>            OR b=594
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR ((a BETWEEN 37 AND 39) AND a!=38)
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
>            OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>            OR ((a BETWEEN 53 AND 55) AND a!=54)
>     ]])
>       end, {
> @@ -11164,8 +11164,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=949
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.298.1>
> @@ -11179,8 +11179,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=949
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.298.2>
> @@ -11195,13 +11195,13 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=960
>            OR a=44
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR a=39
>            OR b=828
>            OR ((a BETWEEN 3 AND 5) AND a!=4)
>            OR d<0.0
>            OR b=770
> -         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
> +         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
>            OR b=594
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>     ]])
> @@ -11218,13 +11218,13 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=960
>            OR a=44
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR a=39
>            OR b=828
>            OR ((a BETWEEN 3 AND 5) AND a!=4)
>            OR d<0.0
>            OR b=770
> -         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
> +         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
>            OR b=594
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>     ]])
> @@ -11278,7 +11278,7 @@ test:do_test(
>         WHERE b=1081
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
>            OR b=1004
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 29 AND 31) AND a!=30)
>            OR b=660
>            OR b=957
> @@ -11298,7 +11298,7 @@ test:do_test(
>         WHERE b=1081
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
>            OR b=1004
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 29 AND 31) AND a!=30)
>            OR b=660
>            OR b=957
> @@ -11320,9 +11320,9 @@ test:do_test(
>            OR f='yzabcdefg'
>            OR b=880
>            OR a=63
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
>     ]])
>       end, {
>           -- <where7-2.302.1>
> @@ -11340,9 +11340,9 @@ test:do_test(
>            OR f='yzabcdefg'
>            OR b=880
>            OR a=63
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
>     ]])
>       end, {
>           -- <where7-2.302.2>
> @@ -11357,12 +11357,12 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=69
>            OR b=1103
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR f='wxyzabcde'
> -         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR f='pqrstuvwx'
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR a=59
>            OR b=946
>     ]])
> @@ -11379,12 +11379,12 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=69
>            OR b=1103
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR f='wxyzabcde'
> -         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR f='pqrstuvwx'
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR a=59
>            OR b=946
>     ]])
> @@ -11400,7 +11400,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=47.0 AND d<48.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>            OR a=68
>            OR ((a BETWEEN 14 AND 16) AND a!=15)
>     ]])
> @@ -11416,7 +11416,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=47.0 AND d<48.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>            OR a=68
>            OR ((a BETWEEN 14 AND 16) AND a!=15)
>     ]])
> @@ -11432,7 +11432,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=10.0 AND d<11.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'lmnop*')
> +         OR (g='lkjihgf' AND f LIKE 'lmnop%')
>     ]])
>       end, {
>           -- <where7-2.305.1>
> @@ -11446,7 +11446,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=10.0 AND d<11.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'lmnop*')
> +         OR (g='lkjihgf' AND f LIKE 'lmnop%')
>     ]])
>       end, {
>           -- <where7-2.305.2>
> @@ -11526,12 +11526,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 21 AND 23) AND a!=22)
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>            OR c=14014
>            OR b=990
> -         OR (g='nmlkjih' AND f GLOB 'efghi*')
> +         OR (g='nmlkjih' AND f LIKE 'efghi%')
>            OR c=14014
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>            OR b=740
>            OR c=3003
>     ]])
> @@ -11547,12 +11547,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 21 AND 23) AND a!=22)
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>            OR c=14014
>            OR b=990
> -         OR (g='nmlkjih' AND f GLOB 'efghi*')
> +         OR (g='nmlkjih' AND f LIKE 'efghi%')
>            OR c=14014
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>            OR b=740
>            OR c=3003
>     ]])
> @@ -11640,7 +11640,7 @@ test:do_test(
>            OR a=4
>            OR b=311
>            OR ((a BETWEEN 97 AND 99) AND a!=98)
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
>            OR b=396
>     ]])
>       end, {
> @@ -11663,7 +11663,7 @@ test:do_test(
>            OR a=4
>            OR b=311
>            OR ((a BETWEEN 97 AND 99) AND a!=98)
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
>            OR b=396
>     ]])
>       end, {
> @@ -11679,7 +11679,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=82
>            OR b=333
> -         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> +         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
>            OR b=99
>            OR a=63
>            OR a=35
> @@ -11698,7 +11698,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=82
>            OR b=333
> -         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> +         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
>            OR b=99
>            OR a=63
>            OR a=35
> @@ -11803,9 +11803,9 @@ test:do_test(
>            OR f='hijklmnop'
>            OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
>            OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR b=817
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
>     ]])
> @@ -11824,9 +11824,9 @@ test:do_test(
>            OR f='hijklmnop'
>            OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
>            OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR b=817
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
>     ]])
> @@ -11841,12 +11841,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
> +      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR b=311
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
>            OR a=48
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
>            OR c=32032
>            OR f='opqrstuvw'
>            OR b=300
> @@ -11864,12 +11864,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
> +      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR b=311
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
>            OR a=48
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
>            OR c=32032
>            OR f='opqrstuvw'
>            OR b=300
> @@ -11889,7 +11889,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=95.0 AND d<96.0 AND d IS NOT NULL)
>            OR b=1070
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
>            OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
>            OR a=22
> @@ -11912,7 +11912,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=95.0 AND d<96.0 AND d IS NOT NULL)
>            OR b=1070
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
>            OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
>            OR a=22
> @@ -11934,7 +11934,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=8.0 AND d<9.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'qrstu*')
> +         OR (g='vutsrqp' AND f LIKE 'qrstu%')
>            OR a=21
>            OR b=1026
>            OR ((a BETWEEN 34 AND 36) AND a!=35)
> @@ -11952,7 +11952,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=8.0 AND d<9.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'qrstu*')
> +         OR (g='vutsrqp' AND f LIKE 'qrstu%')
>            OR a=21
>            OR b=1026
>            OR ((a BETWEEN 34 AND 36) AND a!=35)
> @@ -11975,7 +11975,7 @@ test:do_test(
>            OR a=29
>            OR c=15015
>            OR a=87
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.319.1>
> @@ -11994,7 +11994,7 @@ test:do_test(
>            OR a=29
>            OR c=15015
>            OR a=87
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.319.2>
> @@ -12042,7 +12042,7 @@ test:do_test(
>            OR a=91
>            OR b=1015
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
>            OR ((a BETWEEN 91 AND 93) AND a!=92)
>     ]])
>       end, {
> @@ -12061,7 +12061,7 @@ test:do_test(
>            OR a=91
>            OR b=1015
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
>            OR ((a BETWEEN 91 AND 93) AND a!=92)
>     ]])
>       end, {
> @@ -12076,12 +12076,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=7
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
>            OR b=1015
>            OR b=839
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
>            OR b=410
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>            OR a=71
>     ]])
>       end, {
> @@ -12096,12 +12096,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=7
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
>            OR b=1015
>            OR b=839
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
>            OR b=410
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>            OR a=71
>     ]])
>       end, {
> @@ -12118,12 +12118,12 @@ test:do_test(
>         WHERE b=880
>            OR b=982
>            OR a=52
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>            OR a=24
>            OR ((a BETWEEN 47 AND 49) AND a!=48)
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>     ]])
>       end, {
>           -- <where7-2.323.1>
> @@ -12139,12 +12139,12 @@ test:do_test(
>         WHERE b=880
>            OR b=982
>            OR a=52
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>            OR a=24
>            OR ((a BETWEEN 47 AND 49) AND a!=48)
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>     ]])
>       end, {
>           -- <where7-2.323.2>
> @@ -12158,9 +12158,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 67 AND 69) AND a!=68)
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>     ]])
>       end, {
>           -- <where7-2.324.1>
> @@ -12174,9 +12174,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 67 AND 69) AND a!=68)
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>     ]])
>       end, {
>           -- <where7-2.324.2>
> @@ -12192,7 +12192,7 @@ test:do_test(
>         WHERE f='abcdefghi'
>            OR a=5
>            OR b=124
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR b=432
>            OR 1000000<b
>            OR a=58
> @@ -12214,7 +12214,7 @@ test:do_test(
>         WHERE f='abcdefghi'
>            OR a=5
>            OR b=124
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR b=432
>            OR 1000000<b
>            OR a=58
> @@ -12271,7 +12271,7 @@ test:do_test(
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>            OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR f='uvwxyzabc'
>     ]])
>       end, {
> @@ -12293,7 +12293,7 @@ test:do_test(
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>            OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR f='uvwxyzabc'
>     ]])
>       end, {
> @@ -12308,16 +12308,16 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 57 AND 59) AND a!=58)
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR b=564
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
>            OR b=77
> -         OR (g='nmlkjih' AND f GLOB 'efghi*')
> +         OR (g='nmlkjih' AND f LIKE 'efghi%')
>            OR b=968
>            OR b=847
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> -         OR (g='lkjihgf' AND f GLOB 'opqrs*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
> +         OR (g='lkjihgf' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.328.1>
> @@ -12331,16 +12331,16 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 57 AND 59) AND a!=58)
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR b=564
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
>            OR b=77
> -         OR (g='nmlkjih' AND f GLOB 'efghi*')
> +         OR (g='nmlkjih' AND f LIKE 'efghi%')
>            OR b=968
>            OR b=847
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> -         OR (g='lkjihgf' AND f GLOB 'opqrs*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
> +         OR (g='lkjihgf' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.328.2>
> @@ -12421,7 +12421,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=72.0 AND d<73.0 AND d IS NOT NULL)
>            OR b=693
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
>            OR b=968
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
>            OR b=132
> @@ -12441,7 +12441,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=72.0 AND d<73.0 AND d IS NOT NULL)
>            OR b=693
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
>            OR b=968
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
>            OR b=132
> @@ -12496,11 +12496,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=190
> -         OR (g='mlkjihg' AND f GLOB 'hijkl*')
> +         OR (g='mlkjihg' AND f LIKE 'hijkl%')
>            OR b=924
>            OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
>            OR b=759
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
>     ]])
>       end, {
>           -- <where7-2.333.1>
> @@ -12514,11 +12514,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=190
> -         OR (g='mlkjihg' AND f GLOB 'hijkl*')
> +         OR (g='mlkjihg' AND f LIKE 'hijkl%')
>            OR b=924
>            OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
>            OR b=759
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
>     ]])
>       end, {
>           -- <where7-2.333.2>
> @@ -12576,12 +12576,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE c=26026
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR c=17017
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> -         OR (g='srqponm' AND f GLOB 'ghijk*')
> -         OR (g='jihgfed' AND f GLOB 'zabcd*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
> +         OR (g='srqponm' AND f LIKE 'ghijk%')
> +         OR (g='jihgfed' AND f LIKE 'zabcd%')
>            OR ((a BETWEEN 2 AND 4) AND a!=3)
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
>     ]])
> @@ -12597,12 +12597,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE c=26026
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR c=17017
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> -         OR (g='srqponm' AND f GLOB 'ghijk*')
> -         OR (g='jihgfed' AND f GLOB 'zabcd*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
> +         OR (g='srqponm' AND f LIKE 'ghijk%')
> +         OR (g='jihgfed' AND f LIKE 'zabcd%')
>            OR ((a BETWEEN 2 AND 4) AND a!=3)
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
>     ]])
> @@ -12662,9 +12662,9 @@ test:do_test(
>            OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR b=300
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR a=41
> -         OR (g='onmlkji' AND f GLOB 'xyzab*')
> +         OR (g='onmlkji' AND f LIKE 'xyzab%')
>            OR b=135
>            OR b=605
>     ]])
> @@ -12684,9 +12684,9 @@ test:do_test(
>            OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR b=300
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR a=41
> -         OR (g='onmlkji' AND f GLOB 'xyzab*')
> +         OR (g='onmlkji' AND f LIKE 'xyzab%')
>            OR b=135
>            OR b=605
>     ]])
> @@ -12701,16 +12701,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR b=762
>            OR b=484
>            OR b=190
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
>            OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=1023
>     ]])
>       end, {
> @@ -12724,16 +12724,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR b=762
>            OR b=484
>            OR b=190
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
>            OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=1023
>     ]])
>       end, {
> @@ -12747,7 +12747,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
> +      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
>            OR a=34
>            OR f='rstuvwxyz'
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
> @@ -12764,7 +12764,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
> +      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
>            OR a=34
>            OR f='rstuvwxyz'
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
> @@ -12783,7 +12783,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=37.0 AND d<38.0 AND d IS NOT NULL)
>            OR b=1004
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR g IS NULL
>     ]])
>       end, {
> @@ -12799,7 +12799,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=37.0 AND d<38.0 AND d IS NOT NULL)
>            OR b=1004
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR g IS NULL
>     ]])
>       end, {
> @@ -12822,8 +12822,8 @@ test:do_test(
>            OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
>            OR a=44
>            OR a=23
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>     ]])
>       end, {
>           -- <where7-2.341.1>
> @@ -12845,8 +12845,8 @@ test:do_test(
>            OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
>            OR a=44
>            OR a=23
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>     ]])
>       end, {
>           -- <where7-2.341.2>
> @@ -12864,8 +12864,8 @@ test:do_test(
>            OR a=11
>            OR ((a BETWEEN 12 AND 14) AND a!=13)
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
>            OR a=13
>            OR a=15
>            OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
> @@ -12887,8 +12887,8 @@ test:do_test(
>            OR a=11
>            OR ((a BETWEEN 12 AND 14) AND a!=13)
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
>            OR a=13
>            OR a=15
>            OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
> @@ -13019,16 +13019,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='gfedcba' AND f GLOB 'klmno*')
> +      WHERE (g='gfedcba' AND f LIKE 'klmno%')
>            OR ((a BETWEEN 9 AND 11) AND a!=10)
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>            OR a=48
>            OR b=113
>            OR ((a BETWEEN 20 AND 22) AND a!=21)
>            OR b=880
>            OR ((a BETWEEN 85 AND 87) AND a!=86)
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>     ]])
>       end, {
>           -- <where7-2.346.1>
> @@ -13041,16 +13041,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='gfedcba' AND f GLOB 'klmno*')
> +      WHERE (g='gfedcba' AND f LIKE 'klmno%')
>            OR ((a BETWEEN 9 AND 11) AND a!=10)
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>            OR a=48
>            OR b=113
>            OR ((a BETWEEN 20 AND 22) AND a!=21)
>            OR b=880
>            OR ((a BETWEEN 85 AND 87) AND a!=86)
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>     ]])
>       end, {
>           -- <where7-2.346.2>
> @@ -13065,10 +13065,10 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=517
>            OR b=187
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR b=1092
>            OR ((a BETWEEN 84 AND 86) AND a!=85)
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.347.1>
> @@ -13083,10 +13083,10 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=517
>            OR b=187
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR b=1092
>            OR ((a BETWEEN 84 AND 86) AND a!=85)
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.347.2>
> @@ -13259,7 +13259,7 @@ test:do_test(
>            OR a=30
>            OR c=3003
>            OR (d>=88.0 AND d<89.0 AND d IS NOT NULL)
> -         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
> +         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
>            OR b=564
>            OR b=55
>            OR a=38
> @@ -13281,7 +13281,7 @@ test:do_test(
>            OR a=30
>            OR c=3003
>            OR (d>=88.0 AND d<89.0 AND d IS NOT NULL)
> -         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
> +         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
>            OR b=564
>            OR b=55
>            OR a=38
> @@ -13328,7 +13328,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=792
> -         OR (g='wvutsrq' AND f GLOB 'jklmn*')
> +         OR (g='wvutsrq' AND f LIKE 'jklmn%')
>     ]])
>       end, {
>           -- <where7-2.354.1>
> @@ -13342,7 +13342,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=792
> -         OR (g='wvutsrq' AND f GLOB 'jklmn*')
> +         OR (g='wvutsrq' AND f LIKE 'jklmn%')
>     ]])
>       end, {
>           -- <where7-2.354.2>
> @@ -13357,9 +13357,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=73.0 AND d<74.0 AND d IS NOT NULL)
>            OR c=21021
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR f='zabcdefgh'
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
>            OR b=781
>            OR a=64
>            OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
> @@ -13377,9 +13377,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=73.0 AND d<74.0 AND d IS NOT NULL)
>            OR c=21021
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR f='zabcdefgh'
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
>            OR b=781
>            OR a=64
>            OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
> @@ -13395,12 +13395,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='lkjihgf' AND f GLOB 'pqrst*')
> +      WHERE (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR (d>=90.0 AND d<91.0 AND d IS NOT NULL)
>            OR a=34
> -         OR (g='rqponml' AND f GLOB 'ijklm*')
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='rqponml' AND f LIKE 'ijklm%')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR b=319
>            OR b=330
>            OR ((a BETWEEN 28 AND 30) AND a!=29)
> @@ -13416,12 +13416,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='lkjihgf' AND f GLOB 'pqrst*')
> +      WHERE (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR (d>=90.0 AND d<91.0 AND d IS NOT NULL)
>            OR a=34
> -         OR (g='rqponml' AND f GLOB 'ijklm*')
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='rqponml' AND f LIKE 'ijklm%')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR b=319
>            OR b=330
>            OR ((a BETWEEN 28 AND 30) AND a!=29)
> @@ -13437,8 +13437,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>            OR a=45
>            OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
>     ]])
> @@ -13453,8 +13453,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>            OR a=45
>            OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
>     ]])
> @@ -13470,7 +13470,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=53.0 AND d<54.0 AND d IS NOT NULL)
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>            OR b=165
>            OR b=836
>     ]])
> @@ -13486,7 +13486,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=53.0 AND d<54.0 AND d IS NOT NULL)
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>            OR b=165
>            OR b=836
>     ]])
> @@ -13503,7 +13503,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=1034
>            OR f='vwxyzabcd'
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>     ]])
>       end, {
> @@ -13519,7 +13519,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=1034
>            OR f='vwxyzabcd'
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>     ]])
>       end, {
> @@ -13575,12 +13575,12 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=37
>            OR b=88
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR c=23023
>            OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
>            OR a=56
>            OR ((a BETWEEN 13 AND 15) AND a!=14)
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR f='ijklmnopq'
>            OR ((a BETWEEN 85 AND 87) AND a!=86)
>     ]])
> @@ -13597,12 +13597,12 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=37
>            OR b=88
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR c=23023
>            OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
>            OR a=56
>            OR ((a BETWEEN 13 AND 15) AND a!=14)
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR f='ijklmnopq'
>            OR ((a BETWEEN 85 AND 87) AND a!=86)
>     ]])
> @@ -13620,7 +13620,7 @@ test:do_test(
>         WHERE (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
>            OR a=74
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 42 AND 44) AND a!=43)
>     ]])
>       end, {
> @@ -13637,7 +13637,7 @@ test:do_test(
>         WHERE (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
>            OR a=74
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 42 AND 44) AND a!=43)
>     ]])
>       end, {
> @@ -13747,13 +13747,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='jihgfed' AND f GLOB 'vwxyz*')
> +      WHERE (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 2 AND 4) AND a!=3)
>            OR b=212
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>            OR ((a BETWEEN 24 AND 26) AND a!=25)
>            OR a=20
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR b=627
>     ]])
>       end, {
> @@ -13767,13 +13767,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='jihgfed' AND f GLOB 'vwxyz*')
> +      WHERE (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 2 AND 4) AND a!=3)
>            OR b=212
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>            OR ((a BETWEEN 24 AND 26) AND a!=25)
>            OR a=20
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR b=627
>     ]])
>       end, {
> @@ -13787,7 +13787,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +      WHERE (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>            OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
>            OR b=157
>            OR b=1026
> @@ -13803,7 +13803,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +      WHERE (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>            OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
>            OR b=157
>            OR b=1026
> @@ -13823,10 +13823,10 @@ test:do_test(
>            OR a=16
>            OR ((a BETWEEN 80 AND 82) AND a!=81)
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> -         OR (g='wvutsrq' AND f GLOB 'lmnop*')
> +         OR (g='wvutsrq' AND f LIKE 'lmnop%')
>            OR f='zabcdefgh'
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.368.1>
> @@ -13843,10 +13843,10 @@ test:do_test(
>            OR a=16
>            OR ((a BETWEEN 80 AND 82) AND a!=81)
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> -         OR (g='wvutsrq' AND f GLOB 'lmnop*')
> +         OR (g='wvutsrq' AND f LIKE 'lmnop%')
>            OR f='zabcdefgh'
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.368.2>
> @@ -13895,11 +13895,11 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE f IS NULL
>            OR a=37
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR ((a BETWEEN 55 AND 57) AND a!=56)
>            OR b=168
>            OR b=22
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR b=506
>     ]])
>       end, {
> @@ -13915,11 +13915,11 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE f IS NULL
>            OR a=37
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR ((a BETWEEN 55 AND 57) AND a!=56)
>            OR b=168
>            OR b=22
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR b=506
>     ]])
>       end, {
> @@ -13935,11 +13935,11 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=29
>            OR ((a BETWEEN 26 AND 28) AND a!=27)
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR b=209
> -         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
> +         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
>            OR b=146
>     ]])
>       end, {
> @@ -13955,11 +13955,11 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=29
>            OR ((a BETWEEN 26 AND 28) AND a!=27)
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR b=209
> -         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
> +         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
>            OR b=146
>     ]])
>       end, {
> @@ -14017,7 +14017,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
> +      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
>            OR b=113
>            OR ((a BETWEEN 40 AND 42) AND a!=41)
> @@ -14035,7 +14035,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
> +      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
>            OR b=113
>            OR ((a BETWEEN 40 AND 42) AND a!=41)
> @@ -14081,7 +14081,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='rqponml' AND f GLOB 'ijklm*')
> +      WHERE (g='rqponml' AND f LIKE 'ijklm%')
>            OR a=99
>            OR a=100
>            OR b=429
> @@ -14104,7 +14104,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='rqponml' AND f GLOB 'ijklm*')
> +      WHERE (g='rqponml' AND f LIKE 'ijklm%')
>            OR a=99
>            OR a=100
>            OR b=429
> @@ -14164,9 +14164,9 @@ test:do_test(
>            OR c=6006
>            OR a=18
>            OR c=24024
> -         OR (g='wvutsrq' AND f GLOB 'jklmn*')
> +         OR (g='wvutsrq' AND f LIKE 'jklmn%')
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR c=19019
>            OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 44 AND 46) AND a!=45)
> @@ -14187,9 +14187,9 @@ test:do_test(
>            OR c=6006
>            OR a=18
>            OR c=24024
> -         OR (g='wvutsrq' AND f GLOB 'jklmn*')
> +         OR (g='wvutsrq' AND f LIKE 'jklmn%')
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR c=19019
>            OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 44 AND 46) AND a!=45)
> @@ -14243,7 +14243,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=99
>            OR ((a BETWEEN 85 AND 87) AND a!=86)
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>     ]])
>       end, {
>           -- <where7-2.379.1>
> @@ -14258,7 +14258,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=99
>            OR ((a BETWEEN 85 AND 87) AND a!=86)
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>     ]])
>       end, {
>           -- <where7-2.379.2>
> @@ -14271,7 +14271,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +      WHERE (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR ((a BETWEEN 79 AND 81) AND a!=80)
>            OR b=715
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
> @@ -14287,7 +14287,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +      WHERE (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR ((a BETWEEN 79 AND 81) AND a!=80)
>            OR b=715
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
> @@ -14304,7 +14304,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=97.0 AND d<98.0 AND d IS NOT NULL)
> -         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
> +         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
>            OR a=46
>            OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
>     ]])
> @@ -14320,7 +14320,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=97.0 AND d<98.0 AND d IS NOT NULL)
> -         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
> +         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
>            OR a=46
>            OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
>     ]])
> @@ -14335,7 +14335,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ihgfedc' AND f GLOB 'defgh*')
> +      WHERE (g='ihgfedc' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 97 AND 99) AND a!=98)
>            OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
>            OR b=1056
> @@ -14352,7 +14352,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ihgfedc' AND f GLOB 'defgh*')
> +      WHERE (g='ihgfedc' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 97 AND 99) AND a!=98)
>            OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
>            OR b=1056
> @@ -14453,7 +14453,7 @@ test:do_test(
>            OR ((a BETWEEN 39 AND 41) AND a!=40)
>            OR b=242
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR b=300
>            OR ((a BETWEEN 24 AND 26) AND a!=25)
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
> @@ -14476,7 +14476,7 @@ test:do_test(
>            OR ((a BETWEEN 39 AND 41) AND a!=40)
>            OR b=242
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR b=300
>            OR ((a BETWEEN 24 AND 26) AND a!=25)
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
> @@ -14502,7 +14502,7 @@ test:do_test(
>            OR b=1048
>            OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR c=19019
>     ]])
>       end, {
> @@ -14525,7 +14525,7 @@ test:do_test(
>            OR b=1048
>            OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR c=19019
>     ]])
>       end, {
> @@ -14608,10 +14608,10 @@ test:do_test(
>            OR a=58
>            OR b=333
>            OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR b=572
>            OR ((a BETWEEN 50 AND 52) AND a!=51)
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>     ]])
>       end, {
>           -- <where7-2.389.1>
> @@ -14631,10 +14631,10 @@ test:do_test(
>            OR a=58
>            OR b=333
>            OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR b=572
>            OR ((a BETWEEN 50 AND 52) AND a!=51)
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>     ]])
>       end, {
>           -- <where7-2.389.2>
> @@ -14649,7 +14649,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=1034
>            OR f='lmnopqrst'
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
>     ]])
>       end, {
>           -- <where7-2.390.1>
> @@ -14664,7 +14664,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=1034
>            OR f='lmnopqrst'
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
>     ]])
>       end, {
>           -- <where7-2.390.2>
> @@ -14679,7 +14679,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE c=15015
>            OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'hijkl*')
> +         OR (g='mlkjihg' AND f LIKE 'hijkl%')
>            OR b=58
>            OR b=674
>            OR b=979
> @@ -14697,7 +14697,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE c=15015
>            OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'hijkl*')
> +         OR (g='mlkjihg' AND f LIKE 'hijkl%')
>            OR b=58
>            OR b=674
>            OR b=979
> @@ -14747,9 +14747,9 @@ test:do_test(
>            OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
>            OR b=630
>            OR a=19
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR f='wxyzabcde'
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR b=377
>            OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
>            OR a=77
> @@ -14770,9 +14770,9 @@ test:do_test(
>            OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
>            OR b=630
>            OR a=19
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR f='wxyzabcde'
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR b=377
>            OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
>            OR a=77
> @@ -14818,14 +14818,14 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=64
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'cdefg*')
> +         OR (g='srqponm' AND f LIKE 'cdefg%')
>            OR c=14014
>            OR b=586
>            OR c=27027
>            OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>     ]])
>       end, {
>           -- <where7-2.395.1>
> @@ -14839,14 +14839,14 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=64
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'cdefg*')
> +         OR (g='srqponm' AND f LIKE 'cdefg%')
>            OR c=14014
>            OR b=586
>            OR c=27027
>            OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>     ]])
>       end, {
>           -- <where7-2.395.2>
> @@ -14903,11 +14903,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
> -         OR (g='tsrqpon' AND f GLOB 'zabcd*')
> +      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
> +         OR (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
>            OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
>            OR a=23
>            OR b=737
>            OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
> @@ -14926,11 +14926,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
> -         OR (g='tsrqpon' AND f GLOB 'zabcd*')
> +      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
> +         OR (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
>            OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
>            OR a=23
>            OR b=737
>            OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
> @@ -14983,10 +14983,10 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=18
>            OR b=1059
> -         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>            OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
> +         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR b=795
>     ]])
>       end, {
> @@ -15002,10 +15002,10 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=18
>            OR b=1059
> -         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>            OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
> +         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR b=795
>     ]])
>       end, {
> @@ -15019,7 +15019,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +      WHERE (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR a=93
>            OR a=11
>            OR f='nopqrstuv'
> @@ -15039,7 +15039,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +      WHERE (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR a=93
>            OR a=11
>            OR f='nopqrstuv'
> @@ -15062,8 +15062,8 @@ test:do_test(
>         WHERE b=685
>            OR a=33
>            OR ((a BETWEEN 40 AND 42) AND a!=41)
> -         OR (g='vutsrqp' AND f GLOB 'qrstu*')
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='vutsrqp' AND f LIKE 'qrstu%')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR ((a BETWEEN 39 AND 41) AND a!=40)
>            OR ((a BETWEEN 80 AND 82) AND a!=81)
>            OR b=715
> @@ -15085,8 +15085,8 @@ test:do_test(
>         WHERE b=685
>            OR a=33
>            OR ((a BETWEEN 40 AND 42) AND a!=41)
> -         OR (g='vutsrqp' AND f GLOB 'qrstu*')
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='vutsrqp' AND f LIKE 'qrstu%')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR ((a BETWEEN 39 AND 41) AND a!=40)
>            OR ((a BETWEEN 80 AND 82) AND a!=81)
>            OR b=715
> @@ -15107,7 +15107,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=89
>            OR b=1037
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
>     ]])
>       end, {
>           -- <where7-2.402.1>
> @@ -15122,7 +15122,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=89
>            OR b=1037
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
>     ]])
>       end, {
>           -- <where7-2.402.2>
> @@ -15179,9 +15179,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'stuvw*')
> -         OR (g='rqponml' AND f GLOB 'jklmn*')
> -         OR (g='lkjihgf' AND f GLOB 'mnopq*')
> +      WHERE (g='kjihgfe' AND f LIKE 'stuvw%')
> +         OR (g='rqponml' AND f LIKE 'jklmn%')
> +         OR (g='lkjihgf' AND f LIKE 'mnopq%')
>            OR b=726
>            OR ((a BETWEEN 73 AND 75) AND a!=74)
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
> @@ -15201,9 +15201,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'stuvw*')
> -         OR (g='rqponml' AND f GLOB 'jklmn*')
> -         OR (g='lkjihgf' AND f GLOB 'mnopq*')
> +      WHERE (g='kjihgfe' AND f LIKE 'stuvw%')
> +         OR (g='rqponml' AND f LIKE 'jklmn%')
> +         OR (g='lkjihgf' AND f LIKE 'mnopq%')
>            OR b=726
>            OR ((a BETWEEN 73 AND 75) AND a!=74)
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
> @@ -15223,7 +15223,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
> +      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR b=924
>            OR f='lmnopqrst'
>            OR b=1048
> @@ -15239,7 +15239,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
> +      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR b=924
>            OR f='lmnopqrst'
>            OR b=1048
> @@ -15256,7 +15256,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=63.0 AND d<64.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR b=198
>            OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 12 AND 14) AND a!=13)
> @@ -15276,7 +15276,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=63.0 AND d<64.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR b=198
>            OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 12 AND 14) AND a!=13)
> @@ -15341,7 +15341,7 @@ test:do_test(
>            OR b=630
>            OR a=55
>            OR c=26026
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -15359,7 +15359,7 @@ test:do_test(
>            OR b=630
>            OR a=55
>            OR c=26026
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -15375,12 +15375,12 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE f='uvwxyzabc'
>            OR f='xyzabcdef'
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 51 AND 53) AND a!=52)
>            OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
>            OR b=69
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>     ]])
>       end, {
>           -- <where7-2.409.1>
> @@ -15395,12 +15395,12 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE f='uvwxyzabc'
>            OR f='xyzabcdef'
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 51 AND 53) AND a!=52)
>            OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
>            OR b=69
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>     ]])
>       end, {
>           -- <where7-2.409.2>
> @@ -15417,7 +15417,7 @@ test:do_test(
>            OR b=454
>            OR ((a BETWEEN 92 AND 94) AND a!=93)
>            OR b=179
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR f='qrstuvwxy'
>     ]])
>       end, {
> @@ -15435,7 +15435,7 @@ test:do_test(
>            OR b=454
>            OR ((a BETWEEN 92 AND 94) AND a!=93)
>            OR b=179
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR f='qrstuvwxy'
>     ]])
>       end, {
> @@ -15452,7 +15452,7 @@ test:do_test(
>         WHERE ((a BETWEEN 6 AND 8) AND a!=7)
>            OR b=619
>            OR a=20
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>            OR b=946
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
>            OR a=64
> @@ -15474,7 +15474,7 @@ test:do_test(
>         WHERE ((a BETWEEN 6 AND 8) AND a!=7)
>            OR b=619
>            OR a=20
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>            OR b=946
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
>            OR a=64
> @@ -15527,8 +15527,8 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=56.0 AND d<57.0 AND d IS NOT NULL)
>            OR a=32
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>            OR c=32032
>     ]])
>       end, {
> @@ -15544,8 +15544,8 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=56.0 AND d<57.0 AND d IS NOT NULL)
>            OR a=32
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>            OR c=32032
>     ]])
>       end, {
> @@ -15654,7 +15654,7 @@ test:do_test(
>         WHERE (d>=32.0 AND d<33.0 AND d IS NOT NULL)
>            OR a=27
>            OR ((a BETWEEN 55 AND 57) AND a!=56)
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>     ]])
>       end, {
>           -- <where7-2.417.1>
> @@ -15670,7 +15670,7 @@ test:do_test(
>         WHERE (d>=32.0 AND d<33.0 AND d IS NOT NULL)
>            OR a=27
>            OR ((a BETWEEN 55 AND 57) AND a!=56)
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>     ]])
>       end, {
>           -- <where7-2.417.2>
> @@ -15720,7 +15720,7 @@ test:do_test(
>            OR b=561
>            OR b=352
>            OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
>            OR a=95
>     ]])
>       end, {
> @@ -15743,7 +15743,7 @@ test:do_test(
>            OR b=561
>            OR b=352
>            OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
>            OR a=95
>     ]])
>       end, {
> @@ -15761,7 +15761,7 @@ test:do_test(
>            OR ((a BETWEEN 10 AND 12) AND a!=11)
>            OR f='ghijklmno'
>            OR b=619
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 91 AND 93) AND a!=92)
>            OR b=476
>            OR a=83
> @@ -15782,7 +15782,7 @@ test:do_test(
>            OR ((a BETWEEN 10 AND 12) AND a!=11)
>            OR f='ghijklmno'
>            OR b=619
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 91 AND 93) AND a!=92)
>            OR b=476
>            OR a=83
> @@ -15868,8 +15868,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=1059
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> -         OR (g='rqponml' AND f GLOB 'jklmn*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
> +         OR (g='rqponml' AND f LIKE 'jklmn%')
>            OR b=47
>            OR b=660
>            OR ((a BETWEEN 34 AND 36) AND a!=35)
> @@ -15887,8 +15887,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=1059
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> -         OR (g='rqponml' AND f GLOB 'jklmn*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
> +         OR (g='rqponml' AND f LIKE 'jklmn%')
>            OR b=47
>            OR b=660
>            OR ((a BETWEEN 34 AND 36) AND a!=35)
> @@ -15936,13 +15936,13 @@ test:do_test(
>         WHERE b=597
>            OR f='lmnopqrst'
>            OR a=24
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
>            OR b=1023
>            OR a=53
>            OR a=78
>            OR f='efghijklm'
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -15959,13 +15959,13 @@ test:do_test(
>         WHERE b=597
>            OR f='lmnopqrst'
>            OR a=24
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
>            OR b=1023
>            OR a=53
>            OR a=78
>            OR f='efghijklm'
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -16012,11 +16012,11 @@ test:do_test(
>         WHERE f='tuvwxyzab'
>            OR b=388
>            OR ((a BETWEEN 84 AND 86) AND a!=85)
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>            OR b=957
>            OR b=663
>            OR b=847
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.427.1>
> @@ -16032,11 +16032,11 @@ test:do_test(
>         WHERE f='tuvwxyzab'
>            OR b=388
>            OR ((a BETWEEN 84 AND 86) AND a!=85)
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>            OR b=957
>            OR b=663
>            OR b=847
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.427.2>
> @@ -16051,7 +16051,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=81.0 AND d<82.0 AND d IS NOT NULL)
>            OR a=56
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>     ]])
>       end, {
>           -- <where7-2.428.1>
> @@ -16066,7 +16066,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=81.0 AND d<82.0 AND d IS NOT NULL)
>            OR a=56
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>     ]])
>       end, {
>           -- <where7-2.428.2>
> @@ -16082,7 +16082,7 @@ test:do_test(
>         WHERE c>=34035
>            OR b=168
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>     ]])
>       end, {
>           -- <where7-2.429.1>
> @@ -16098,7 +16098,7 @@ test:do_test(
>         WHERE c>=34035
>            OR b=168
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>     ]])
>       end, {
>           -- <where7-2.429.2>
> @@ -16144,9 +16144,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=29.0 AND d<30.0 AND d IS NOT NULL)
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR f='rstuvwxyz'
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.431.1>
> @@ -16160,9 +16160,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=29.0 AND d<30.0 AND d IS NOT NULL)
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR f='rstuvwxyz'
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.431.2>
> @@ -16246,7 +16246,7 @@ test:do_test(
>         WHERE b=113
>            OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
>            OR b=113
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>            OR ((a BETWEEN 62 AND 64) AND a!=63)
>            OR c=6006
>            OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
> @@ -16267,7 +16267,7 @@ test:do_test(
>         WHERE b=113
>            OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
>            OR b=113
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>            OR ((a BETWEEN 62 AND 64) AND a!=63)
>            OR c=6006
>            OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
> @@ -16285,7 +16285,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
> +      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
>            OR c=22022
>            OR ((a BETWEEN 79 AND 81) AND a!=80)
> @@ -16303,7 +16303,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
> +      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
>            OR c=22022
>            OR ((a BETWEEN 79 AND 81) AND a!=80)
> @@ -16322,7 +16322,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 74 AND 76) AND a!=75)
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR b=47
>            OR ((a BETWEEN 44 AND 46) AND a!=45)
>            OR a=92
> @@ -16331,7 +16331,7 @@ test:do_test(
>            OR c=7007
>            OR a=93
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
>     ]])
>       end, {
>           -- <where7-2.436.1>
> @@ -16345,7 +16345,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 74 AND 76) AND a!=75)
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR b=47
>            OR ((a BETWEEN 44 AND 46) AND a!=45)
>            OR a=92
> @@ -16354,7 +16354,7 @@ test:do_test(
>            OR c=7007
>            OR a=93
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
>     ]])
>       end, {
>           -- <where7-2.436.2>
> @@ -16367,11 +16367,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
> +      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR a=13
> -         OR (g='fedcbaz' AND f GLOB 'qrstu*')
> +         OR (g='fedcbaz' AND f LIKE 'qrstu%')
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR c=29029
>            OR b=311
>            OR b=366
> @@ -16389,11 +16389,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
> +      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR a=13
> -         OR (g='fedcbaz' AND f GLOB 'qrstu*')
> +         OR (g='fedcbaz' AND f LIKE 'qrstu%')
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR c=29029
>            OR b=311
>            OR b=366
> @@ -16453,12 +16453,12 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=82.0 AND d<83.0 AND d IS NOT NULL)
>            OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
>            OR a=41
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> -         OR (g='onmlkji' AND f GLOB 'zabcd*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
> +         OR (g='onmlkji' AND f LIKE 'zabcd%')
>            OR b=913
>     ]])
>       end, {
> @@ -16474,12 +16474,12 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=82.0 AND d<83.0 AND d IS NOT NULL)
>            OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
>            OR a=41
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> -         OR (g='onmlkji' AND f GLOB 'zabcd*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
> +         OR (g='onmlkji' AND f LIKE 'zabcd%')
>            OR b=913
>     ]])
>       end, {
> @@ -16593,12 +16593,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
> +      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
>            OR b=102
>            OR b=212
>            OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
>            OR b=487
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>     ]])
>       end, {
>           -- <where7-2.443.1>
> @@ -16611,12 +16611,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
> +      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
>            OR b=102
>            OR b=212
>            OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
>            OR b=487
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>     ]])
>       end, {
>           -- <where7-2.443.2>
> @@ -16661,7 +16661,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=872
>            OR ((a BETWEEN 58 AND 60) AND a!=59)
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR b=957
>            OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
>            OR a=67
> @@ -16680,7 +16680,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=872
>            OR ((a BETWEEN 58 AND 60) AND a!=59)
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR b=957
>            OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
>            OR a=67
> @@ -16700,12 +16700,12 @@ test:do_test(
>         WHERE b=66
>            OR b=102
>            OR b=396
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>            OR ((a BETWEEN 7 AND 9) AND a!=8)
>            OR b=759
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR f='ghijklmno'
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR ((a BETWEEN 90 AND 92) AND a!=91)
>            OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>     ]])
> @@ -16723,12 +16723,12 @@ test:do_test(
>         WHERE b=66
>            OR b=102
>            OR b=396
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>            OR ((a BETWEEN 7 AND 9) AND a!=8)
>            OR b=759
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR f='ghijklmno'
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR ((a BETWEEN 90 AND 92) AND a!=91)
>            OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>     ]])
> @@ -16744,8 +16744,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 69 AND 71) AND a!=70)
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR a=72
>            OR b=1100
>            OR b=102
> @@ -16763,8 +16763,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 69 AND 71) AND a!=70)
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR a=72
>            OR b=1100
>            OR b=102
> @@ -16878,7 +16878,7 @@ test:do_test(
>         WHERE b=47
>            OR a=91
>            OR d>1e10
> -         OR (g='srqponm' AND f GLOB 'cdefg*')
> +         OR (g='srqponm' AND f LIKE 'cdefg%')
>     ]])
>       end, {
>           -- <where7-2.451.1>
> @@ -16894,7 +16894,7 @@ test:do_test(
>         WHERE b=47
>            OR a=91
>            OR d>1e10
> -         OR (g='srqponm' AND f GLOB 'cdefg*')
> +         OR (g='srqponm' AND f LIKE 'cdefg%')
>     ]])
>       end, {
>           -- <where7-2.451.2>
> @@ -16975,13 +16975,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
> +      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
>            OR b=619
>            OR ((a BETWEEN 91 AND 93) AND a!=92)
>            OR c=11011
>            OR b=550
>            OR b=1059
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>            OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
>            OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
>            OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
> @@ -16998,13 +16998,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
> +      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
>            OR b=619
>            OR ((a BETWEEN 91 AND 93) AND a!=92)
>            OR c=11011
>            OR b=550
>            OR b=1059
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>            OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
>            OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
>            OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
> @@ -17021,16 +17021,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='edcbazy' AND f GLOB 'vwxyz*')
> +      WHERE (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 59 AND 61) AND a!=60)
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
>            OR a=78
>            OR a=27
>            OR b=792
>            OR b=946
>            OR c=22022
>            OR a=23
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR b=388
>     ]])
>       end, {
> @@ -17044,16 +17044,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='edcbazy' AND f GLOB 'vwxyz*')
> +      WHERE (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 59 AND 61) AND a!=60)
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
>            OR a=78
>            OR a=27
>            OR b=792
>            OR b=946
>            OR c=22022
>            OR a=23
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR b=388
>     ]])
>       end, {
> @@ -17070,8 +17070,8 @@ test:do_test(
>         WHERE c=32032
>            OR f IS NULL
>            OR ((a BETWEEN 37 AND 39) AND a!=38)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>            OR b=825
>     ]])
>       end, {
> @@ -17088,8 +17088,8 @@ test:do_test(
>         WHERE c=32032
>            OR f IS NULL
>            OR ((a BETWEEN 37 AND 39) AND a!=38)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>            OR b=825
>     ]])
>       end, {
> @@ -17104,7 +17104,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=84.0 AND d<85.0 AND d IS NOT NULL)
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR ((a BETWEEN 5 AND 7) AND a!=6)
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>            OR b=1078
> @@ -17126,7 +17126,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=84.0 AND d<85.0 AND d IS NOT NULL)
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR ((a BETWEEN 5 AND 7) AND a!=6)
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>            OR b=1078
> @@ -17147,11 +17147,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='wvutsrq' AND f GLOB 'ijklm*')
> +      WHERE (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR c=25025
>            OR b=550
>            OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>     ]])
>       end, {
>           -- <where7-2.458.1>
> @@ -17164,11 +17164,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='wvutsrq' AND f GLOB 'ijklm*')
> +      WHERE (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR c=25025
>            OR b=550
>            OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>     ]])
>       end, {
>           -- <where7-2.458.2>
> @@ -17183,7 +17183,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=432
>            OR f='opqrstuvw'
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.459.1>
> @@ -17198,7 +17198,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=432
>            OR f='opqrstuvw'
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.459.2>
> @@ -17213,7 +17213,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 14 AND 16) AND a!=15)
>            OR b=847
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR b=583
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
>            OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
> @@ -17234,7 +17234,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 14 AND 16) AND a!=15)
>            OR b=847
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR b=583
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
>            OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
> @@ -17299,7 +17299,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
> +      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR b=586
>            OR d<0.0
>            OR c=9009
> @@ -17315,7 +17315,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
> +      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR b=586
>            OR d<0.0
>            OR c=9009
> @@ -17378,7 +17378,7 @@ test:do_test(
>         WHERE ((a BETWEEN 44 AND 46) AND a!=45)
>            OR a=53
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
> +         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR b=594
>            OR b=80
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
> @@ -17399,7 +17399,7 @@ test:do_test(
>         WHERE ((a BETWEEN 44 AND 46) AND a!=45)
>            OR a=53
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
> +         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR b=594
>            OR b=80
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
> @@ -17482,9 +17482,9 @@ test:do_test(
>         WHERE a=59
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
>            OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>            OR f='wxyzabcde'
> -         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
> +         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
>            OR a=70
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
>            OR ((a BETWEEN 14 AND 16) AND a!=15)
> @@ -17503,9 +17503,9 @@ test:do_test(
>         WHERE a=59
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
>            OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>            OR f='wxyzabcde'
> -         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
> +         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
>            OR a=70
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
>            OR ((a BETWEEN 14 AND 16) AND a!=15)
> @@ -17522,7 +17522,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=69
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>     ]])
>       end, {
>           -- <where7-2.468.1>
> @@ -17536,7 +17536,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=69
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>     ]])
>       end, {
>           -- <where7-2.468.2>
> @@ -17552,8 +17552,8 @@ test:do_test(
>         WHERE a=41
>            OR a=43
>            OR a=92
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> -         OR (g='mlkjihg' AND f GLOB 'klmno*')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
> +         OR (g='mlkjihg' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.469.1>
> @@ -17569,8 +17569,8 @@ test:do_test(
>         WHERE a=41
>            OR a=43
>            OR a=92
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> -         OR (g='mlkjihg' AND f GLOB 'klmno*')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
> +         OR (g='mlkjihg' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.469.2>
> @@ -17617,7 +17617,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE f='fghijklmn'
>            OR f='fghijklmn'
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>            OR b=465
>            OR b=586
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
> @@ -17639,7 +17639,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE f='fghijklmn'
>            OR f='fghijklmn'
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>            OR b=465
>            OR b=586
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
> @@ -17660,10 +17660,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=34.0 AND d<35.0 AND d IS NOT NULL)
> -         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> -         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
> +         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR b=814
>            OR a=20
>            OR 1000000<b
> @@ -17681,10 +17681,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=34.0 AND d<35.0 AND d IS NOT NULL)
> -         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> -         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
> +         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR b=814
>            OR a=20
>            OR 1000000<b
> @@ -17701,14 +17701,14 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
> +      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 53 AND 55) AND a!=54)
>            OR c=1001
>            OR b=484
>            OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
>            OR c<=10
>            OR a=92
> -         OR (g='tsrqpon' AND f GLOB 'zabcd*')
> +         OR (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR ((a BETWEEN 0 AND 2) AND a!=1)
>            OR b=1026
>     ]])
> @@ -17723,14 +17723,14 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
> +      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 53 AND 55) AND a!=54)
>            OR c=1001
>            OR b=484
>            OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
>            OR c<=10
>            OR a=92
> -         OR (g='tsrqpon' AND f GLOB 'zabcd*')
> +         OR (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR ((a BETWEEN 0 AND 2) AND a!=1)
>            OR b=1026
>     ]])
> @@ -17746,13 +17746,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=54
> -         OR (g='xwvutsr' AND f GLOB 'defgh*')
> +         OR (g='xwvutsr' AND f LIKE 'defgh%')
>            OR b=993
>            OR c=22022
>            OR a=68
>            OR ((a BETWEEN 99 AND 101) AND a!=100)
>            OR a=62
> -         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
> +         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
>            OR b=1015
>     ]])
>       end, {
> @@ -17767,13 +17767,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=54
> -         OR (g='xwvutsr' AND f GLOB 'defgh*')
> +         OR (g='xwvutsr' AND f LIKE 'defgh%')
>            OR b=993
>            OR c=22022
>            OR a=68
>            OR ((a BETWEEN 99 AND 101) AND a!=100)
>            OR a=62
> -         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
> +         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
>            OR b=1015
>     ]])
>       end, {
> @@ -17789,7 +17789,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=319
>            OR a=50
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>            OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
> @@ -17808,7 +17808,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=319
>            OR a=50
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>            OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
> @@ -17889,14 +17889,14 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
> +      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
>            OR b=407
>            OR b=454
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
>            OR b=627
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>     ]])
>       end, {
>           -- <where7-2.478.1>
> @@ -17909,14 +17909,14 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
> +      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
>            OR b=407
>            OR b=454
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
>            OR b=627
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>     ]])
>       end, {
>           -- <where7-2.478.2>
> @@ -17933,7 +17933,7 @@ test:do_test(
>            OR c=34034
>            OR ((a BETWEEN 24 AND 26) AND a!=25)
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR a=67
>     ]])
>       end, {
> @@ -17951,7 +17951,7 @@ test:do_test(
>            OR c=34034
>            OR ((a BETWEEN 24 AND 26) AND a!=25)
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR a=67
>     ]])
>       end, {
> @@ -17970,7 +17970,7 @@ test:do_test(
>            OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 2 AND 4) AND a!=3)
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
>     ]])
>       end, {
>           -- <where7-2.480.1>
> @@ -17988,7 +17988,7 @@ test:do_test(
>            OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 2 AND 4) AND a!=3)
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
>     ]])
>       end, {
>           -- <where7-2.480.2>
> @@ -18006,12 +18006,12 @@ test:do_test(
>            OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
>            OR b=201
>            OR a=99
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR ((a BETWEEN 36 AND 38) AND a!=37)
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
>            OR b=946
>            OR b=993
> -         OR (g='fedcbaz' AND f GLOB 'qrstu*')
> +         OR (g='fedcbaz' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.481.1>
> @@ -18029,12 +18029,12 @@ test:do_test(
>            OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
>            OR b=201
>            OR a=99
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR ((a BETWEEN 36 AND 38) AND a!=37)
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
>            OR b=946
>            OR b=993
> -         OR (g='fedcbaz' AND f GLOB 'qrstu*')
> +         OR (g='fedcbaz' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.481.2>
> @@ -18048,7 +18048,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=806
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 24 AND 26) AND a!=25)
>            OR b=916
>            OR b<0
> @@ -18070,7 +18070,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=806
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 24 AND 26) AND a!=25)
>            OR b=916
>            OR b<0
> @@ -18093,11 +18093,11 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=836
>            OR d>1e10
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR f='pqrstuvwx'
>            OR ((a BETWEEN 3 AND 5) AND a!=4)
>            OR f='abcdefghi'
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR a=33
>            OR ((a BETWEEN 19 AND 21) AND a!=20)
>            OR ((a BETWEEN 88 AND 90) AND a!=89)
> @@ -18116,11 +18116,11 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=836
>            OR d>1e10
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR f='pqrstuvwx'
>            OR ((a BETWEEN 3 AND 5) AND a!=4)
>            OR f='abcdefghi'
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR a=33
>            OR ((a BETWEEN 19 AND 21) AND a!=20)
>            OR ((a BETWEEN 88 AND 90) AND a!=89)
> @@ -18140,10 +18140,10 @@ test:do_test(
>         WHERE a=48
>            OR a=92
>            OR a=1
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
>            OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
>            OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR b=905
>            OR ((a BETWEEN 51 AND 53) AND a!=52)
>     ]])
> @@ -18161,10 +18161,10 @@ test:do_test(
>         WHERE a=48
>            OR a=92
>            OR a=1
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
>            OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
>            OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR b=905
>            OR ((a BETWEEN 51 AND 53) AND a!=52)
>     ]])
> @@ -18215,12 +18215,12 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=740
>            OR b=564
> -         OR (g='onmlkji' AND f GLOB 'zabcd*')
> +         OR (g='onmlkji' AND f LIKE 'zabcd%')
>            OR a=11
>            OR ((a BETWEEN 44 AND 46) AND a!=45)
>            OR b=322
>            OR (d>=6.0 AND d<7.0 AND d IS NOT NULL)
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR b=902
>            OR c>=34035
>     ]])
> @@ -18237,12 +18237,12 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=740
>            OR b=564
> -         OR (g='onmlkji' AND f GLOB 'zabcd*')
> +         OR (g='onmlkji' AND f LIKE 'zabcd%')
>            OR a=11
>            OR ((a BETWEEN 44 AND 46) AND a!=45)
>            OR b=322
>            OR (d>=6.0 AND d<7.0 AND d IS NOT NULL)
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR b=902
>            OR c>=34035
>     ]])
> @@ -18264,7 +18264,7 @@ test:do_test(
>            OR a=48
>            OR b=927
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>            OR f='abcdefghi'
>            OR b=91
>            OR b=55
> @@ -18287,7 +18287,7 @@ test:do_test(
>            OR a=48
>            OR b=927
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>            OR f='abcdefghi'
>            OR b=91
>            OR b=55
> @@ -18303,7 +18303,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='srqponm' AND f GLOB 'efghi*')
> +      WHERE (g='srqponm' AND f LIKE 'efghi%')
>            OR ((a BETWEEN 88 AND 90) AND a!=89)
>            OR a=20
>            OR b=11
> @@ -18319,7 +18319,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='srqponm' AND f GLOB 'efghi*')
> +      WHERE (g='srqponm' AND f LIKE 'efghi%')
>            OR ((a BETWEEN 88 AND 90) AND a!=89)
>            OR a=20
>            OR b=11
> @@ -18338,7 +18338,7 @@ test:do_test(
>         WHERE (d>=27.0 AND d<28.0 AND d IS NOT NULL)
>            OR b=55
>            OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>            OR a=50
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
>            OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
> @@ -18358,7 +18358,7 @@ test:do_test(
>         WHERE (d>=27.0 AND d<28.0 AND d IS NOT NULL)
>            OR b=55
>            OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>            OR a=50
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
>            OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
> @@ -18375,8 +18375,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='rqponml' AND f GLOB 'ijklm*')
> -         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> +      WHERE (g='rqponml' AND f LIKE 'ijklm%')
> +         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
>     ]])
>       end, {
>           -- <where7-2.490.1>
> @@ -18389,8 +18389,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='rqponml' AND f GLOB 'ijklm*')
> -         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> +      WHERE (g='rqponml' AND f LIKE 'ijklm%')
> +         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
>     ]])
>       end, {
>           -- <where7-2.490.2>
> @@ -18405,7 +18405,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=704
>            OR b=924
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR b=113
>     ]])
>       end, {
> @@ -18421,7 +18421,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=704
>            OR b=924
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR b=113
>     ]])
>       end, {
> @@ -18503,11 +18503,11 @@ test:do_test(
>            OR b=726
>            OR f='abcdefghi'
>            OR b=179
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR b=539
>            OR b=66
>            OR ((a BETWEEN 86 AND 88) AND a!=87)
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>     ]])
>       end, {
>           -- <where7-2.494.1>
> @@ -18524,11 +18524,11 @@ test:do_test(
>            OR b=726
>            OR f='abcdefghi'
>            OR b=179
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR b=539
>            OR b=66
>            OR ((a BETWEEN 86 AND 88) AND a!=87)
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>     ]])
>       end, {
>           -- <where7-2.494.2>
> @@ -18573,11 +18573,11 @@ test:do_test(
>            OR b=682
>            OR b=443
>            OR b=836
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 51 AND 53) AND a!=52)
>            OR b=110
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>     ]])
>       end, {
>           -- <where7-2.496.1>
> @@ -18594,11 +18594,11 @@ test:do_test(
>            OR b=682
>            OR b=443
>            OR b=836
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 51 AND 53) AND a!=52)
>            OR b=110
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>     ]])
>       end, {
>           -- <where7-2.496.2>
> @@ -18611,15 +18611,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +      WHERE (f LIKE '_zabc%' AND f LIKE 'yzab%')
>            OR b=462
>            OR ((a BETWEEN 4 AND 6) AND a!=5)
>            OR a=22
>            OR b=594
> -         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
> +         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
>            OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>     ]])
>       end, {
>           -- <where7-2.497.1>
> @@ -18632,15 +18632,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +      WHERE (f LIKE '_zabc%' AND f LIKE 'yzab%')
>            OR b=462
>            OR ((a BETWEEN 4 AND 6) AND a!=5)
>            OR a=22
>            OR b=594
> -         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
> +         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
>            OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>     ]])
>       end, {
>           -- <where7-2.497.2>
> @@ -18653,11 +18653,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
> +      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR f='vwxyzabcd'
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>            OR a=37
>            OR a=50
>     ]])
> @@ -18672,11 +18672,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
> +      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR f='vwxyzabcd'
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>            OR a=37
>            OR a=50
>     ]])
> @@ -18693,10 +18693,10 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 83 AND 85) AND a!=84)
>            OR b=784
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>            OR b=825
>            OR a=80
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>            OR b=531
>            OR a=100
> @@ -18714,10 +18714,10 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 83 AND 85) AND a!=84)
>            OR b=784
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>            OR b=825
>            OR a=80
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>            OR b=531
>            OR a=100
> @@ -18733,7 +18733,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
> +      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR b=220
>            OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
>     ]])
> @@ -18748,7 +18748,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
> +      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR b=220
>            OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
>     ]])
> @@ -18797,9 +18797,9 @@ test:do_test(
>            OR b=894
>            OR c=28028
>            OR b=905
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> -         OR (g='kjihgfe' AND f GLOB 'stuvw*')
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
> +         OR (g='kjihgfe' AND f LIKE 'stuvw%')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR b=1037
>     ]])
>       end, {
> @@ -18817,9 +18817,9 @@ test:do_test(
>            OR b=894
>            OR c=28028
>            OR b=905
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> -         OR (g='kjihgfe' AND f GLOB 'stuvw*')
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
> +         OR (g='kjihgfe' AND f LIKE 'stuvw%')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR b=1037
>     ]])
>       end, {
> @@ -18863,9 +18863,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
> +      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR b=861
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>     ]])
>       end, {
>           -- <where7-2.504.1>
> @@ -18878,9 +18878,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
> +      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR b=861
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>     ]])
>       end, {
>           -- <where7-2.504.2>
> @@ -18894,13 +18894,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=704
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
>            OR b=25
> -         OR (g='jihgfed' AND f GLOB 'zabcd*')
> +         OR (g='jihgfed' AND f LIKE 'zabcd%')
>            OR b=487
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 77 AND 79) AND a!=78)
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
>            OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
> @@ -18917,13 +18917,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=704
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
>            OR b=25
> -         OR (g='jihgfed' AND f GLOB 'zabcd*')
> +         OR (g='jihgfed' AND f LIKE 'zabcd%')
>            OR b=487
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 77 AND 79) AND a!=78)
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
>            OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
> @@ -18940,16 +18940,16 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=19
> -         OR (g='onmlkji' AND f GLOB 'xyzab*')
> +         OR (g='onmlkji' AND f LIKE 'xyzab%')
>            OR b=674
>            OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
>            OR b=355
>            OR ((a BETWEEN 72 AND 74) AND a!=73)
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR c=28028
>            OR b=649
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.506.1>
> @@ -18963,16 +18963,16 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=19
> -         OR (g='onmlkji' AND f GLOB 'xyzab*')
> +         OR (g='onmlkji' AND f LIKE 'xyzab%')
>            OR b=674
>            OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
>            OR b=355
>            OR ((a BETWEEN 72 AND 74) AND a!=73)
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR c=28028
>            OR b=649
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.506.2>
> @@ -19020,7 +19020,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=135
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 39 AND 41) AND a!=40)
>     ]])
>       end, {
> @@ -19035,7 +19035,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=135
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 39 AND 41) AND a!=40)
>     ]])
>       end, {
> @@ -19049,8 +19049,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>     ]])
>       end, {
>           -- <where7-2.509.1>
> @@ -19063,8 +19063,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>     ]])
>       end, {
>           -- <where7-2.509.2>
> @@ -19077,7 +19077,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='jihgfed' AND f GLOB 'wxyza*')
> +      WHERE (g='jihgfed' AND f LIKE 'wxyza%')
>            OR f='ghijklmno'
>     ]])
>       end, {
> @@ -19091,7 +19091,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='jihgfed' AND f GLOB 'wxyza*')
> +      WHERE (g='jihgfed' AND f LIKE 'wxyza%')
>            OR f='ghijklmno'
>     ]])
>       end, {
> @@ -19187,7 +19187,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?lmno*' AND f GLOB 'klmn*')
> +      WHERE (f LIKE '_lmno%' AND f LIKE 'klmn%')
>            OR ((a BETWEEN 5 AND 7) AND a!=6)
>            OR b=99
>            OR a=54
> @@ -19203,7 +19203,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?lmno*' AND f GLOB 'klmn*')
> +      WHERE (f LIKE '_lmno%' AND f LIKE 'klmn%')
>            OR ((a BETWEEN 5 AND 7) AND a!=6)
>            OR b=99
>            OR a=54
> @@ -19220,7 +19220,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=300
> -         OR (g='mlkjihg' AND f GLOB 'klmno*')
> +         OR (g='mlkjihg' AND f LIKE 'klmno%')
>            OR b=319
>            OR f='fghijklmn'
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
> @@ -19238,7 +19238,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=300
> -         OR (g='mlkjihg' AND f GLOB 'klmno*')
> +         OR (g='mlkjihg' AND f LIKE 'klmno%')
>            OR b=319
>            OR f='fghijklmn'
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
> @@ -19263,7 +19263,7 @@ test:do_test(
>            OR ((a BETWEEN 5 AND 7) AND a!=6)
>            OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
>            OR b=748
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>     ]])
>       end, {
>           -- <where7-2.515.1>
> @@ -19284,7 +19284,7 @@ test:do_test(
>            OR ((a BETWEEN 5 AND 7) AND a!=6)
>            OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
>            OR b=748
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>     ]])
>       end, {
>           -- <where7-2.515.2>
> @@ -19333,10 +19333,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='jihgfed' AND f GLOB 'wxyza*')
> +      WHERE (g='jihgfed' AND f LIKE 'wxyza%')
>            OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
>            OR b=110
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR c=26026
>            OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
>            OR b=850
> @@ -19353,10 +19353,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='jihgfed' AND f GLOB 'wxyza*')
> +      WHERE (g='jihgfed' AND f LIKE 'wxyza%')
>            OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
>            OR b=110
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR c=26026
>            OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
>            OR b=850
> @@ -19375,9 +19375,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 74 AND 76) AND a!=75)
>            OR ((a BETWEEN 1 AND 3) AND a!=2)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> -         OR (g='mlkjihg' AND f GLOB 'klmno*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
> +         OR (g='mlkjihg' AND f LIKE 'klmno%')
>            OR b=135
>            OR a=28
>            OR ((a BETWEEN 1 AND 3) AND a!=2)
> @@ -19396,9 +19396,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 74 AND 76) AND a!=75)
>            OR ((a BETWEEN 1 AND 3) AND a!=2)
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> -         OR (g='mlkjihg' AND f GLOB 'klmno*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
> +         OR (g='mlkjihg' AND f LIKE 'klmno%')
>            OR b=135
>            OR a=28
>            OR ((a BETWEEN 1 AND 3) AND a!=2)
> @@ -19485,9 +19485,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
> +      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>            OR a=52
>     ]])
>       end, {
> @@ -19501,9 +19501,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
> +      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>            OR a=52
>     ]])
>       end, {
> @@ -19517,7 +19517,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ihgfedc' AND f GLOB 'abcde*')
> +      WHERE (g='ihgfedc' AND f LIKE 'abcde%')
>            OR ((a BETWEEN 2 AND 4) AND a!=3)
>            OR a=86
>            OR c=33033
> @@ -19535,7 +19535,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ihgfedc' AND f GLOB 'abcde*')
> +      WHERE (g='ihgfedc' AND f LIKE 'abcde%')
>            OR ((a BETWEEN 2 AND 4) AND a!=3)
>            OR a=86
>            OR c=33033
> @@ -19557,7 +19557,7 @@ test:do_test(
>            OR b=517
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 67 AND 69) AND a!=68)
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>            OR f='defghijkl'
>            OR b=707
>            OR c>=34035
> @@ -19580,7 +19580,7 @@ test:do_test(
>            OR b=517
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 67 AND 69) AND a!=68)
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>            OR f='defghijkl'
>            OR b=707
>            OR c>=34035
> @@ -19602,7 +19602,7 @@ test:do_test(
>         WHERE (d>=96.0 AND d<97.0 AND d IS NOT NULL)
>            OR b=209
>            OR b=399
> -         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
> +         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
>     ]])
>       end, {
>           -- <where7-2.524.1>
> @@ -19618,7 +19618,7 @@ test:do_test(
>         WHERE (d>=96.0 AND d<97.0 AND d IS NOT NULL)
>            OR b=209
>            OR b=399
> -         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
> +         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
>     ]])
>       end, {
>           -- <where7-2.524.2>
> @@ -19632,11 +19632,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 18 AND 20) AND a!=19)
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
>            OR b=597
>            OR a=95
> -         OR (g='nmlkjih' AND f GLOB 'defgh*')
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (g='nmlkjih' AND f LIKE 'defgh%')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>            OR b=432
>            OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
>     ]])
> @@ -19652,11 +19652,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 18 AND 20) AND a!=19)
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
>            OR b=597
>            OR a=95
> -         OR (g='nmlkjih' AND f GLOB 'defgh*')
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (g='nmlkjih' AND f LIKE 'defgh%')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>            OR b=432
>            OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
>     ]])
> @@ -19680,7 +19680,7 @@ test:do_test(
>            OR c=21021
>            OR b=330
>            OR b=231
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
>     ]])
>       end, {
>           -- <where7-2.526.1>
> @@ -19702,7 +19702,7 @@ test:do_test(
>            OR c=21021
>            OR b=330
>            OR b=231
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
>     ]])
>       end, {
>           -- <where7-2.526.2>
> @@ -19715,7 +19715,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='hgfedcb' AND f GLOB 'fghij*')
> +      WHERE (g='hgfedcb' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 64 AND 66) AND a!=65)
>            OR f IS NULL
>     ]])
> @@ -19730,7 +19730,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='hgfedcb' AND f GLOB 'fghij*')
> +      WHERE (g='hgfedcb' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 64 AND 66) AND a!=65)
>            OR f IS NULL
>     ]])
> @@ -19746,9 +19746,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 99 AND 101) AND a!=100)
> -         OR (g='fedcbaz' AND f GLOB 'pqrst*')
> +         OR (g='fedcbaz' AND f LIKE 'pqrst%')
>            OR 1000000<b
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>            OR b=990
>     ]])
>       end, {
> @@ -19763,9 +19763,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 99 AND 101) AND a!=100)
> -         OR (g='fedcbaz' AND f GLOB 'pqrst*')
> +         OR (g='fedcbaz' AND f LIKE 'pqrst%')
>            OR 1000000<b
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>            OR b=990
>     ]])
>       end, {
> @@ -19781,7 +19781,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=165
>            OR a=69
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>     ]])
>       end, {
>           -- <where7-2.529.1>
> @@ -19796,7 +19796,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=165
>            OR a=69
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>     ]])
>       end, {
>           -- <where7-2.529.2>
> @@ -19809,13 +19809,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='nmlkjih' AND f GLOB 'defgh*')
> -         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
> +      WHERE (g='nmlkjih' AND f LIKE 'defgh%')
> +         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR b=784
>            OR b=583
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>            OR b=814
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR b=619
>            OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
>     ]])
> @@ -19830,13 +19830,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='nmlkjih' AND f GLOB 'defgh*')
> -         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
> +      WHERE (g='nmlkjih' AND f LIKE 'defgh%')
> +         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR b=784
>            OR b=583
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>            OR b=814
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR b=619
>            OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
>     ]])
> @@ -19853,7 +19853,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=86
>            OR b=484
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR b=418
>            OR b=509
>            OR a=42
> @@ -19876,7 +19876,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=86
>            OR b=484
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR b=418
>            OR b=509
>            OR a=42
> @@ -20007,7 +20007,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR c=5005
>            OR ((a BETWEEN 50 AND 52) AND a!=51)
>            OR a=93
> @@ -20015,7 +20015,7 @@ test:do_test(
>            OR b=619
>            OR b=234
>            OR b=55
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -20029,7 +20029,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR c=5005
>            OR ((a BETWEEN 50 AND 52) AND a!=51)
>            OR a=93
> @@ -20037,7 +20037,7 @@ test:do_test(
>            OR b=619
>            OR b=234
>            OR b=55
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -20053,11 +20053,11 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=355
>            OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR b=806
>            OR b=462
>            OR b=531
> -         OR (g='lkjihgf' AND f GLOB 'lmnop*')
> +         OR (g='lkjihgf' AND f LIKE 'lmnop%')
>            OR f='mnopqrstu'
>     ]])
>       end, {
> @@ -20073,11 +20073,11 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=355
>            OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR b=806
>            OR b=462
>            OR b=531
> -         OR (g='lkjihgf' AND f GLOB 'lmnop*')
> +         OR (g='lkjihgf' AND f LIKE 'lmnop%')
>            OR f='mnopqrstu'
>     ]])
>       end, {
> @@ -20093,9 +20093,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 60 AND 62) AND a!=61)
>            OR f='pqrstuvwx'
> -         OR (g='nmlkjih' AND f GLOB 'efghi*')
> +         OR (g='nmlkjih' AND f LIKE 'efghi%')
>            OR b=495
> -         OR (g='kjihgfe' AND f GLOB 'stuvw*')
> +         OR (g='kjihgfe' AND f LIKE 'stuvw%')
>            OR a=75
>     ]])
>       end, {
> @@ -20111,9 +20111,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 60 AND 62) AND a!=61)
>            OR f='pqrstuvwx'
> -         OR (g='nmlkjih' AND f GLOB 'efghi*')
> +         OR (g='nmlkjih' AND f LIKE 'efghi%')
>            OR b=495
> -         OR (g='kjihgfe' AND f GLOB 'stuvw*')
> +         OR (g='kjihgfe' AND f LIKE 'stuvw%')
>            OR a=75
>     ]])
>       end, {
> @@ -20127,8 +20127,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR b=748
>            OR b=913
>            OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
> @@ -20145,8 +20145,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR b=748
>            OR b=913
>            OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
> @@ -20167,7 +20167,7 @@ test:do_test(
>            OR b=902
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
>            OR b=168
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR a=50
>            OR f='uvwxyzabc'
>            OR b=836
> @@ -20189,7 +20189,7 @@ test:do_test(
>            OR b=902
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
>            OR b=168
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR a=50
>            OR f='uvwxyzabc'
>            OR b=836
> @@ -20243,13 +20243,13 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=814
>            OR c=30030
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
>            OR a=16
>            OR b=1048
>            OR b=113
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'defgh*')
> +         OR (g='xwvutsr' AND f LIKE 'defgh%')
>            OR b=729
>            OR a=54
>     ]])
> @@ -20266,13 +20266,13 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=814
>            OR c=30030
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
>            OR a=16
>            OR b=1048
>            OR b=113
>            OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'defgh*')
> +         OR (g='xwvutsr' AND f LIKE 'defgh%')
>            OR b=729
>            OR a=54
>     ]])
> @@ -20288,15 +20288,15 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=399
> -         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
> +         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
>            OR b=814
>            OR c=22022
>            OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR a=1
>            OR b=311
>            OR b=121
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR b=198
>     ]])
>       end, {
> @@ -20311,15 +20311,15 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=399
> -         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
> +         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
>            OR b=814
>            OR c=22022
>            OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR a=1
>            OR b=311
>            OR b=121
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR b=198
>     ]])
>       end, {
> @@ -20403,7 +20403,7 @@ test:do_test(
>            OR a=22
>            OR b=594
>            OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>     ]])
>       end, {
>           -- <where7-2.545.1>
> @@ -20424,7 +20424,7 @@ test:do_test(
>            OR a=22
>            OR b=594
>            OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>     ]])
>       end, {
>           -- <where7-2.545.2>
> @@ -20443,7 +20443,7 @@ test:do_test(
>            OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
>            OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 3 AND 5) AND a!=4)
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR f='mnopqrstu'
>            OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
>            OR b=902
> @@ -20465,7 +20465,7 @@ test:do_test(
>            OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
>            OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 3 AND 5) AND a!=4)
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR f='mnopqrstu'
>            OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
>            OR b=902
> @@ -20481,8 +20481,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='onmlkji' AND f GLOB 'zabcd*')
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +      WHERE (g='onmlkji' AND f LIKE 'zabcd%')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>            OR a=13
>     ]])
>       end, {
> @@ -20496,8 +20496,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='onmlkji' AND f GLOB 'zabcd*')
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +      WHERE (g='onmlkji' AND f LIKE 'zabcd%')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>            OR a=13
>     ]])
>       end, {
> @@ -20511,11 +20511,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
> +      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
>            OR b=410
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR b=418
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -20529,11 +20529,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
> +      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
>            OR b=410
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR b=418
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -20552,8 +20552,8 @@ test:do_test(
>            OR a=56
>            OR a=46
>            OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR (d>=41.0 AND d<42.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -20572,8 +20572,8 @@ test:do_test(
>            OR a=56
>            OR a=46
>            OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR (d>=41.0 AND d<42.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -20633,7 +20633,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=539
>            OR b=418
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>            OR b=759
>     ]])
>       end, {
> @@ -20649,7 +20649,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=539
>            OR b=418
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>            OR b=759
>     ]])
>       end, {
> @@ -20664,8 +20664,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=1001
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>            OR c=34034
>            OR a=84
>     ]])
> @@ -20681,8 +20681,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=1001
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>            OR c=34034
>            OR a=84
>     ]])
> @@ -20702,7 +20702,7 @@ test:do_test(
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 71 AND 73) AND a!=72)
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>            OR b=322
>            OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
>            OR c=34034
> @@ -20724,7 +20724,7 @@ test:do_test(
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 71 AND 73) AND a!=72)
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>            OR b=322
>            OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
>            OR c=34034
> @@ -20742,12 +20742,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE c=13013
> -         OR (g='fedcbaz' AND f GLOB 'qrstu*')
> +         OR (g='fedcbaz' AND f LIKE 'qrstu%')
>            OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=47
>            OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR b=828
>     ]])
>       end, {
> @@ -20762,12 +20762,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE c=13013
> -         OR (g='fedcbaz' AND f GLOB 'qrstu*')
> +         OR (g='fedcbaz' AND f LIKE 'qrstu%')
>            OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=47
>            OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR b=828
>     ]])
>       end, {
> @@ -20783,7 +20783,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=451
>            OR b=836
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>     ]])
>       end, {
>           -- <where7-2.555.1>
> @@ -20798,7 +20798,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=451
>            OR b=836
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>     ]])
>       end, {
>           -- <where7-2.555.2>
> @@ -20848,7 +20848,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE f='tuvwxyzab'
> -         OR (g='nmlkjih' AND f GLOB 'efghi*')
> +         OR (g='nmlkjih' AND f LIKE 'efghi%')
>     ]])
>       end, {
>           -- <where7-2.557.1>
> @@ -20862,7 +20862,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE f='tuvwxyzab'
> -         OR (g='nmlkjih' AND f GLOB 'efghi*')
> +         OR (g='nmlkjih' AND f LIKE 'efghi%')
>     ]])
>       end, {
>           -- <where7-2.557.2>
> @@ -20881,7 +20881,7 @@ test:do_test(
>            OR d<0.0
>            OR b=982
>            OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'jklmn*')
> +         OR (g='hgfedcb' AND f LIKE 'jklmn%')
>            OR ((a BETWEEN 97 AND 99) AND a!=98)
>            OR e IS NULL
>            OR c=32032
> @@ -20904,7 +20904,7 @@ test:do_test(
>            OR d<0.0
>            OR b=982
>            OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'jklmn*')
> +         OR (g='hgfedcb' AND f LIKE 'jklmn%')
>            OR ((a BETWEEN 97 AND 99) AND a!=98)
>            OR e IS NULL
>            OR c=32032
> @@ -20922,9 +20922,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=62
> -         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
> +         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.559.1>
> @@ -20938,9 +20938,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=62
> -         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
> +         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.559.2>
> @@ -20994,8 +20994,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=44
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.561.1>
> @@ -21009,8 +21009,8 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=44
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.561.2>
> @@ -21026,7 +21026,7 @@ test:do_test(
>         WHERE b=883
>            OR b=311
>            OR b=880
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>            OR a=88
>            OR b=154
> @@ -21048,7 +21048,7 @@ test:do_test(
>         WHERE b=883
>            OR b=311
>            OR b=880
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>            OR a=88
>            OR b=154
> @@ -21067,12 +21067,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='onmlkji' AND f GLOB 'xyzab*')
> +      WHERE (g='onmlkji' AND f LIKE 'xyzab%')
>            OR a=10
>            OR b=190
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
>            OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 67 AND 69) AND a!=68)
>            OR b=385
>            OR a=82
> @@ -21090,12 +21090,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='onmlkji' AND f GLOB 'xyzab*')
> +      WHERE (g='onmlkji' AND f LIKE 'xyzab%')
>            OR a=10
>            OR b=190
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
>            OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 67 AND 69) AND a!=68)
>            OR b=385
>            OR a=82
> @@ -21151,7 +21151,7 @@ test:do_test(
>            OR a=49
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
>            OR c=33033
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
>            OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
>            OR g IS NULL
>            OR b=220
> @@ -21174,7 +21174,7 @@ test:do_test(
>            OR a=49
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
>            OR c=33033
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
>            OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
>            OR g IS NULL
>            OR b=220
> @@ -21191,7 +21191,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
> +      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
>            OR b=212
>            OR b=418
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> @@ -21207,7 +21207,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
> +      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
>            OR b=212
>            OR b=418
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> @@ -21283,8 +21283,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='hgfedcb' AND f GLOB 'jklmn*')
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +      WHERE (g='hgfedcb' AND f LIKE 'jklmn%')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>     ]])
>       end, {
>           -- <where7-2.569.1>
> @@ -21297,8 +21297,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='hgfedcb' AND f GLOB 'jklmn*')
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +      WHERE (g='hgfedcb' AND f LIKE 'jklmn%')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>     ]])
>       end, {
>           -- <where7-2.569.2>
> @@ -21356,7 +21356,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE c=18018
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
>            OR b=410
>            OR b=858
>            OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
> @@ -21373,7 +21373,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE c=18018
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
>            OR b=410
>            OR b=858
>            OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
> @@ -21389,7 +21389,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ponmlkj' AND f GLOB 'vwxyz*')
> +      WHERE (g='ponmlkj' AND f LIKE 'vwxyz%')
>            OR b=781
>     ]])
>       end, {
> @@ -21403,7 +21403,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ponmlkj' AND f GLOB 'vwxyz*')
> +      WHERE (g='ponmlkj' AND f LIKE 'vwxyz%')
>            OR b=781
>     ]])
>       end, {
> @@ -21420,10 +21420,10 @@ test:do_test(
>         WHERE b=1070
>            OR ((a BETWEEN 50 AND 52) AND a!=51)
>            OR a=54
> -         OR (g='tsrqpon' AND f GLOB 'zabcd*')
> +         OR (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR a=9
>            OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -21440,10 +21440,10 @@ test:do_test(
>         WHERE b=1070
>            OR ((a BETWEEN 50 AND 52) AND a!=51)
>            OR a=54
> -         OR (g='tsrqpon' AND f GLOB 'zabcd*')
> +         OR (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR a=9
>            OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -21460,8 +21460,8 @@ test:do_test(
>         WHERE a=55
>            OR a=62
>            OR a=63
> -         OR (g='onmlkji' AND f GLOB 'yzabc*')
> -         OR (g='rqponml' AND f GLOB 'ijklm*')
> +         OR (g='onmlkji' AND f LIKE 'yzabc%')
> +         OR (g='rqponml' AND f LIKE 'ijklm%')
>            OR ((a BETWEEN 99 AND 101) AND a!=100)
>     ]])
>       end, {
> @@ -21478,8 +21478,8 @@ test:do_test(
>         WHERE a=55
>            OR a=62
>            OR a=63
> -         OR (g='onmlkji' AND f GLOB 'yzabc*')
> -         OR (g='rqponml' AND f GLOB 'ijklm*')
> +         OR (g='onmlkji' AND f LIKE 'yzabc%')
> +         OR (g='rqponml' AND f LIKE 'ijklm%')
>            OR ((a BETWEEN 99 AND 101) AND a!=100)
>     ]])
>       end, {
> @@ -21527,9 +21527,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=553
>            OR ((a BETWEEN 21 AND 23) AND a!=22)
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=583
>            OR a=56
>     ]])
> @@ -21546,9 +21546,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=553
>            OR ((a BETWEEN 21 AND 23) AND a!=22)
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=583
>            OR a=56
>     ]])
> @@ -21565,7 +21565,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=83
>            OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR a=1
>            OR ((a BETWEEN 17 AND 19) AND a!=18)
>            OR ((a BETWEEN 49 AND 51) AND a!=50)
> @@ -21584,7 +21584,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=83
>            OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR a=1
>            OR ((a BETWEEN 17 AND 19) AND a!=18)
>            OR ((a BETWEEN 49 AND 51) AND a!=50)
> @@ -21635,7 +21635,7 @@ test:do_test(
>            OR a=92
>            OR a=63
>            OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
> -         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
> +         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
>     ]])
>       end, {
>           -- <where7-2.579.1>
> @@ -21652,7 +21652,7 @@ test:do_test(
>            OR a=92
>            OR a=63
>            OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
> -         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
> +         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
>     ]])
>       end, {
>           -- <where7-2.579.2>
> @@ -21668,7 +21668,7 @@ test:do_test(
>         WHERE b=440
>            OR f='vwxyzabcd'
>            OR b=190
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
>            OR b=88
>            OR b=58
> @@ -21687,7 +21687,7 @@ test:do_test(
>         WHERE b=440
>            OR f='vwxyzabcd'
>            OR b=190
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
>            OR b=88
>            OR b=58
> @@ -21707,7 +21707,7 @@ test:do_test(
>            OR c=24024
>            OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
>            OR b=1001
> -         OR (g='tsrqpon' AND f GLOB 'zabcd*')
> +         OR (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR d>1e10
>            OR b=531
>            OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
> @@ -21728,7 +21728,7 @@ test:do_test(
>            OR c=24024
>            OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
>            OR b=1001
> -         OR (g='tsrqpon' AND f GLOB 'zabcd*')
> +         OR (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR d>1e10
>            OR b=531
>            OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
> @@ -21774,7 +21774,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 71 AND 73) AND a!=72)
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
>            OR ((a BETWEEN 80 AND 82) AND a!=81)
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 91 AND 93) AND a!=92)
> @@ -21795,7 +21795,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 71 AND 73) AND a!=72)
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
>            OR ((a BETWEEN 80 AND 82) AND a!=81)
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 91 AND 93) AND a!=92)
> @@ -21820,8 +21820,8 @@ test:do_test(
>            OR b=806
>            OR b=605
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>     ]])
>       end, {
>           -- <where7-2.584.1>
> @@ -21839,8 +21839,8 @@ test:do_test(
>            OR b=806
>            OR b=605
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>     ]])
>       end, {
>           -- <where7-2.584.2>
> @@ -21856,9 +21856,9 @@ test:do_test(
>         WHERE ((a BETWEEN 84 AND 86) AND a!=85)
>            OR b=572
>            OR c=10010
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR a=29
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>     ]])
>       end, {
>           -- <where7-2.585.1>
> @@ -21874,9 +21874,9 @@ test:do_test(
>         WHERE ((a BETWEEN 84 AND 86) AND a!=85)
>            OR b=572
>            OR c=10010
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR a=29
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>     ]])
>       end, {
>           -- <where7-2.585.2>
> @@ -21962,9 +21962,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE c=5005
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR b=143
>            OR a=68
>            OR a=77
> @@ -21982,9 +21982,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE c=5005
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR b=143
>            OR a=68
>            OR a=77
> @@ -22002,10 +22002,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=5.0 AND d<6.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 76 AND 78) AND a!=77)
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR a=99
>            OR ((a BETWEEN 12 AND 14) AND a!=13)
>     ]])
> @@ -22021,10 +22021,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=5.0 AND d<6.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'ghijk*')
> +         OR (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 76 AND 78) AND a!=77)
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR a=99
>            OR ((a BETWEEN 12 AND 14) AND a!=13)
>     ]])
> @@ -22039,12 +22039,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='qponmlk' AND f GLOB 'opqrs*')
> +      WHERE (g='qponmlk' AND f LIKE 'opqrs%')
>            OR ((a BETWEEN 88 AND 90) AND a!=89)
>            OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>            OR b=971
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.590.1>
> @@ -22057,12 +22057,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='qponmlk' AND f GLOB 'opqrs*')
> +      WHERE (g='qponmlk' AND f LIKE 'opqrs%')
>            OR ((a BETWEEN 88 AND 90) AND a!=89)
>            OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>            OR b=971
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.590.2>
> @@ -22075,12 +22075,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?lmno*' AND f GLOB 'klmn*')
> +      WHERE (f LIKE '_lmno%' AND f LIKE 'klmn%')
>            OR b=806
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR b=1015
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>     ]])
>       end, {
>           -- <where7-2.591.1>
> @@ -22093,12 +22093,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?lmno*' AND f GLOB 'klmn*')
> +      WHERE (f LIKE '_lmno%' AND f LIKE 'klmn%')
>            OR b=806
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR b=1015
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>     ]])
>       end, {
>           -- <where7-2.591.2>
> @@ -22119,7 +22119,7 @@ test:do_test(
>            OR a=26
>            OR b=1048
>            OR b=561
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
>            OR ((a BETWEEN 55 AND 57) AND a!=56)
>            OR a=56
>     ]])
> @@ -22142,7 +22142,7 @@ test:do_test(
>            OR a=26
>            OR b=1048
>            OR b=561
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
>            OR ((a BETWEEN 55 AND 57) AND a!=56)
>            OR a=56
>     ]])
> @@ -22165,7 +22165,7 @@ test:do_test(
>            OR b=113
>            OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
>            OR b=385
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.593.1>
> @@ -22186,7 +22186,7 @@ test:do_test(
>            OR b=113
>            OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
>            OR b=385
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.593.2>
> @@ -22204,7 +22204,7 @@ test:do_test(
>            OR b=674
>            OR b=825
>            OR b=704
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 58 AND 60) AND a!=59)
>            OR a=76
> @@ -22227,7 +22227,7 @@ test:do_test(
>            OR b=674
>            OR b=825
>            OR b=704
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 58 AND 60) AND a!=59)
>            OR a=76
> @@ -22246,7 +22246,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=869
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>     ]])
>       end, {
>           -- <where7-2.595.1>
> @@ -22260,7 +22260,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=869
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>     ]])
>       end, {
>           -- <where7-2.595.2>
> @@ -22303,12 +22303,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='rqponml' AND f GLOB 'hijkl*')
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +      WHERE (g='rqponml' AND f LIKE 'hijkl%')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR a=8
>            OR a=72
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>     ]])
>       end, {
>           -- <where7-2.597.1>
> @@ -22321,12 +22321,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='rqponml' AND f GLOB 'hijkl*')
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +      WHERE (g='rqponml' AND f LIKE 'hijkl%')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR a=8
>            OR a=72
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>     ]])
>       end, {
>           -- <where7-2.597.2>
> @@ -22342,7 +22342,7 @@ test:do_test(
>         WHERE a=20
>            OR ((a BETWEEN 74 AND 76) AND a!=75)
>            OR b=341
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR b=814
>            OR b=1026
>            OR a=14
> @@ -22364,7 +22364,7 @@ test:do_test(
>         WHERE a=20
>            OR ((a BETWEEN 74 AND 76) AND a!=75)
>            OR b=341
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR b=814
>            OR b=1026
>            OR a=14
> @@ -22387,8 +22387,8 @@ test:do_test(
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>            OR b=839
>            OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
> -         OR (g='onmlkji' AND f GLOB 'xyzab*')
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='onmlkji' AND f LIKE 'xyzab%')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>            OR c=7007
>     ]])
>       end, {
> @@ -22406,8 +22406,8 @@ test:do_test(
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>            OR b=839
>            OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
> -         OR (g='onmlkji' AND f GLOB 'xyzab*')
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='onmlkji' AND f LIKE 'xyzab%')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>            OR c=7007
>     ]])
>       end, {
> @@ -22421,7 +22421,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR a=21
>            OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
>            OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
> @@ -22443,7 +22443,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR a=21
>            OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
>            OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
> @@ -22469,11 +22469,11 @@ test:do_test(
>            OR f='bcdefghij'
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=762
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
>     ]])
>       end, {
>           -- <where7-2.601.1>
> @@ -22490,11 +22490,11 @@ test:do_test(
>            OR f='bcdefghij'
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=762
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
>     ]])
>       end, {
>           -- <where7-2.601.2>
> @@ -22574,7 +22574,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=55.0 AND d<56.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>            OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
>            OR b=1067
>            OR b=231
> @@ -22595,7 +22595,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=55.0 AND d<56.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>            OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
>            OR b=1067
>            OR b=231
> @@ -22620,7 +22620,7 @@ test:do_test(
>            OR b=396
>            OR b=1059
>            OR a=69
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR b=440
>            OR b=825
>     ]])
> @@ -22640,7 +22640,7 @@ test:do_test(
>            OR b=396
>            OR b=1059
>            OR a=69
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR b=440
>            OR b=825
>     ]])
> @@ -22658,7 +22658,7 @@ test:do_test(
>         WHERE (d>=26.0 AND d<27.0 AND d IS NOT NULL)
>            OR b=308
>            OR c<=10
> -         OR (g='xwvutsr' AND f GLOB 'hijkl*')
> +         OR (g='xwvutsr' AND f LIKE 'hijkl%')
>            OR f='ghijklmno'
>            OR b=289
>            OR a=5
> @@ -22680,7 +22680,7 @@ test:do_test(
>         WHERE (d>=26.0 AND d<27.0 AND d IS NOT NULL)
>            OR b=308
>            OR c<=10
> -         OR (g='xwvutsr' AND f GLOB 'hijkl*')
> +         OR (g='xwvutsr' AND f LIKE 'hijkl%')
>            OR f='ghijklmno'
>            OR b=289
>            OR a=5
> @@ -22703,9 +22703,9 @@ test:do_test(
>            OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
>            OR b=993
>            OR ((a BETWEEN 43 AND 45) AND a!=44)
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>            OR b=663
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR b=869
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
>            OR b=121
> @@ -22725,9 +22725,9 @@ test:do_test(
>            OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
>            OR b=993
>            OR ((a BETWEEN 43 AND 45) AND a!=44)
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>            OR b=663
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR b=869
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
>            OR b=121
> @@ -22743,9 +22743,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> -         OR (g='hgfedcb' AND f GLOB 'jklmn*')
> +      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
> +         OR (g='hgfedcb' AND f LIKE 'jklmn%')
>            OR b=770
>     ]])
>       end, {
> @@ -22759,9 +22759,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> -         OR (g='hgfedcb' AND f GLOB 'jklmn*')
> +      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
> +         OR (g='hgfedcb' AND f LIKE 'jklmn%')
>            OR b=770
>     ]])
>       end, {
> @@ -22776,10 +22776,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 80 AND 82) AND a!=81)
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> -         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
> +         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>     ]])
>       end, {
>           -- <where7-2.609.1>
> @@ -22793,10 +22793,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 80 AND 82) AND a!=81)
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> -         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
> +         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>     ]])
>       end, {
>           -- <where7-2.609.2>
> @@ -22855,16 +22855,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='onmlkji' AND f GLOB 'zabcd*')
> +      WHERE (g='onmlkji' AND f LIKE 'zabcd%')
>            OR b=1092
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> -         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
> +         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR a=77
>            OR a=63
>            OR b=762
>            OR b=894
>            OR b=685
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.611.1>
> @@ -22877,16 +22877,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='onmlkji' AND f GLOB 'zabcd*')
> +      WHERE (g='onmlkji' AND f LIKE 'zabcd%')
>            OR b=1092
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> -         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
> +         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR a=77
>            OR a=63
>            OR b=762
>            OR b=894
>            OR b=685
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.611.2>
> @@ -22899,7 +22899,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='wvutsrq' AND f GLOB 'klmno*')
> +      WHERE (g='wvutsrq' AND f LIKE 'klmno%')
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
>            OR b=231
>     ]])
> @@ -22914,7 +22914,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='wvutsrq' AND f GLOB 'klmno*')
> +      WHERE (g='wvutsrq' AND f LIKE 'klmno%')
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
>            OR b=231
>     ]])
> @@ -22930,7 +22930,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=828
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
>     ]])
>       end, {
> @@ -22945,7 +22945,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=828
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
>     ]])
>       end, {
> @@ -22959,13 +22959,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +      WHERE (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
>            OR b=520
>            OR ((a BETWEEN 4 AND 6) AND a!=5)
>            OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR a=21
>     ]])
>       end, {
> @@ -22979,13 +22979,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +      WHERE (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
>            OR b=520
>            OR ((a BETWEEN 4 AND 6) AND a!=5)
>            OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR a=21
>     ]])
>       end, {
> @@ -23000,7 +23000,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=553
> -         OR (g='lkjihgf' AND f GLOB 'lmnop*')
> +         OR (g='lkjihgf' AND f LIKE 'lmnop%')
>            OR b=1034
>            OR b=418
>            OR a=57
> @@ -23019,7 +23019,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=553
> -         OR (g='lkjihgf' AND f GLOB 'lmnop*')
> +         OR (g='lkjihgf' AND f LIKE 'lmnop%')
>            OR b=1034
>            OR b=418
>            OR a=57
> @@ -23038,9 +23038,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=43
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
>            OR b=418
> -         OR (g='kjihgfe' AND f GLOB 'stuvw*')
> +         OR (g='kjihgfe' AND f LIKE 'stuvw%')
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
>            OR b=594
>            OR a=21
> @@ -23060,9 +23060,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=43
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
>            OR b=418
> -         OR (g='kjihgfe' AND f GLOB 'stuvw*')
> +         OR (g='kjihgfe' AND f LIKE 'stuvw%')
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
>            OR b=594
>            OR a=21
> @@ -23082,7 +23082,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=671
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
>     ]])
>       end, {
> @@ -23097,7 +23097,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=671
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
>     ]])
>       end, {
> @@ -23148,7 +23148,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=806
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 10 AND 12) AND a!=11)
>            OR b=275
> @@ -23166,7 +23166,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=806
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 10 AND 12) AND a!=11)
>            OR b=275
> @@ -23184,12 +23184,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE c=24024
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR b=429
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>            OR b=110
>            OR a=39
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>     ]])
>       end, {
>           -- <where7-2.620.1>
> @@ -23203,12 +23203,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE c=24024
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR b=429
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>            OR b=110
>            OR a=39
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>     ]])
>       end, {
>           -- <where7-2.620.2>
> @@ -23287,7 +23287,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=509
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>            OR b=718
>            OR a=4
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
> @@ -23307,7 +23307,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=509
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
> -         OR (g='vutsrqp' AND f GLOB 'nopqr*')
> +         OR (g='vutsrqp' AND f LIKE 'nopqr%')
>            OR b=718
>            OR a=4
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
> @@ -23325,7 +23325,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
> +      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
>            OR b=1026
>            OR a=93
>            OR c=18018
> @@ -23341,7 +23341,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
> +      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
>            OR b=1026
>            OR a=93
>            OR c=18018
> @@ -23422,11 +23422,11 @@ test:do_test(
>         WHERE b=990
>            OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 41 AND 43) AND a!=42)
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
>            OR b=531
>            OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR f='qrstuvwxy'
>     ]])
>       end, {
> @@ -23443,11 +23443,11 @@ test:do_test(
>         WHERE b=990
>            OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 41 AND 43) AND a!=42)
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
>            OR b=531
>            OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR f='qrstuvwxy'
>     ]])
>       end, {
> @@ -23462,9 +23462,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=60
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR b=627
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
>            OR b=883
> @@ -23484,9 +23484,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=60
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR b=627
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
>            OR b=883
> @@ -23572,13 +23572,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=28
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
>            OR b=69
>            OR ((a BETWEEN 85 AND 87) AND a!=86)
>            OR b=781
>            OR a=64
>            OR b=91
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR a=16
>            OR b=278
>            OR a=26
> @@ -23595,13 +23595,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=28
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
>            OR b=69
>            OR ((a BETWEEN 85 AND 87) AND a!=86)
>            OR b=781
>            OR a=64
>            OR b=91
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR a=16
>            OR b=278
>            OR a=26
> @@ -23710,7 +23710,7 @@ test:do_test(
>         WHERE f='yzabcdefg'
>            OR ((a BETWEEN 48 AND 50) AND a!=49)
>            OR a=100
> -         OR (g='rqponml' AND f GLOB 'ijklm*')
> +         OR (g='rqponml' AND f LIKE 'ijklm%')
>            OR a=62
>            OR a=67
>            OR b=605
> @@ -23733,7 +23733,7 @@ test:do_test(
>         WHERE f='yzabcdefg'
>            OR ((a BETWEEN 48 AND 50) AND a!=49)
>            OR a=100
> -         OR (g='rqponml' AND f GLOB 'ijklm*')
> +         OR (g='rqponml' AND f LIKE 'ijklm%')
>            OR a=62
>            OR a=67
>            OR b=605
> @@ -23787,9 +23787,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
>            OR b=751
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>            OR a=67
>            OR b=102
> @@ -23805,9 +23805,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
>            OR b=751
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>            OR a=67
>            OR b=102
> @@ -23862,14 +23862,14 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE c=2002
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>            OR ((a BETWEEN 41 AND 43) AND a!=42)
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR b=33
>            OR b=817
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -23884,14 +23884,14 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE c=2002
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>            OR ((a BETWEEN 41 AND 43) AND a!=42)
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR b=33
>            OR b=817
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -23905,8 +23905,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='srqponm' AND f GLOB 'cdefg*')
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +      WHERE (g='srqponm' AND f LIKE 'cdefg%')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR a=80
>            OR a=53
>            OR a=62
> @@ -23926,8 +23926,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='srqponm' AND f GLOB 'cdefg*')
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +      WHERE (g='srqponm' AND f LIKE 'cdefg%')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR a=80
>            OR a=53
>            OR a=62
> @@ -23951,7 +23951,7 @@ test:do_test(
>            OR b=652
>            OR a=72
>            OR b=209
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR a=38
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
>            OR d>1e10
> @@ -23971,7 +23971,7 @@ test:do_test(
>            OR b=652
>            OR a=72
>            OR b=209
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR a=38
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
>            OR d>1e10
> @@ -24016,11 +24016,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=179
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR b=509
>            OR ((a BETWEEN 58 AND 60) AND a!=59)
>            OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR f='bcdefghij'
>     ]])
>       end, {
> @@ -24035,11 +24035,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=179
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR b=509
>            OR ((a BETWEEN 58 AND 60) AND a!=59)
>            OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR f='bcdefghij'
>     ]])
>       end, {
> @@ -24149,13 +24149,13 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=28.0 AND d<29.0 AND d IS NOT NULL)
>            OR b=421
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>            OR b=704
>            OR a=90
>            OR a=78
>            OR 1000000<b
>            OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 53 AND 55) AND a!=54)
>     ]])
>       end, {
> @@ -24171,13 +24171,13 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=28.0 AND d<29.0 AND d IS NOT NULL)
>            OR b=421
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>            OR b=704
>            OR a=90
>            OR a=78
>            OR 1000000<b
>            OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR ((a BETWEEN 53 AND 55) AND a!=54)
>     ]])
>       end, {
> @@ -24191,7 +24191,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='fedcbaz' AND f GLOB 'pqrst*')
> +      WHERE (g='fedcbaz' AND f LIKE 'pqrst%')
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
>     ]])
>       end, {
> @@ -24205,7 +24205,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='fedcbaz' AND f GLOB 'pqrst*')
> +      WHERE (g='fedcbaz' AND f LIKE 'pqrst%')
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
>     ]])
>       end, {
> @@ -24226,7 +24226,7 @@ test:do_test(
>            OR ((a BETWEEN 25 AND 27) AND a!=26)
>            OR e IS NULL
>            OR a=48
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.649.1>
> @@ -24246,7 +24246,7 @@ test:do_test(
>            OR ((a BETWEEN 25 AND 27) AND a!=26)
>            OR e IS NULL
>            OR a=48
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.649.2>
> @@ -24292,7 +24292,7 @@ test:do_test(
>         WHERE b=275
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>            OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
>            OR f='ijklmnopq'
>     ]])
> @@ -24310,7 +24310,7 @@ test:do_test(
>         WHERE b=275
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
>            OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
>            OR f='ijklmnopq'
>     ]])
> @@ -24360,7 +24360,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE f='zabcdefgh'
> -         OR (g='xwvutsr' AND f GLOB 'defgh*')
> +         OR (g='xwvutsr' AND f LIKE 'defgh%')
>            OR a=54
>            OR b=770
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
> @@ -24380,7 +24380,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE f='zabcdefgh'
> -         OR (g='xwvutsr' AND f GLOB 'defgh*')
> +         OR (g='xwvutsr' AND f LIKE 'defgh%')
>            OR a=54
>            OR b=770
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
> @@ -24446,7 +24446,7 @@ test:do_test(
>         WHERE b=223
>            OR a=14
>            OR ((a BETWEEN 74 AND 76) AND a!=75)
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
>            OR b=539
>            OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
> @@ -24467,7 +24467,7 @@ test:do_test(
>         WHERE b=223
>            OR a=14
>            OR ((a BETWEEN 74 AND 76) AND a!=75)
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
>            OR b=539
>            OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
> @@ -24486,7 +24486,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=99
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>            OR a=73
>            OR a=56
>            OR b=253
> @@ -24504,7 +24504,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=99
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>            OR a=73
>            OR a=56
>            OR b=253
> @@ -24524,8 +24524,8 @@ test:do_test(
>         WHERE b=927
>            OR b=300
>            OR b=223
> -         OR (g='wvutsrq' AND f GLOB 'jklmn*')
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> +         OR (g='wvutsrq' AND f LIKE 'jklmn%')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=154
>            OR b=759
>     ]])
> @@ -24543,8 +24543,8 @@ test:do_test(
>         WHERE b=927
>            OR b=300
>            OR b=223
> -         OR (g='wvutsrq' AND f GLOB 'jklmn*')
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> +         OR (g='wvutsrq' AND f LIKE 'jklmn%')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=154
>            OR b=759
>     ]])
> @@ -24562,7 +24562,7 @@ test:do_test(
>         WHERE b=242
>            OR b=905
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
>            OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
>            OR a=24
>            OR ((a BETWEEN 67 AND 69) AND a!=68)
> @@ -24584,7 +24584,7 @@ test:do_test(
>         WHERE b=242
>            OR b=905
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'ijklm*')
> +         OR (g='hgfedcb' AND f LIKE 'ijklm%')
>            OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
>            OR a=24
>            OR ((a BETWEEN 67 AND 69) AND a!=68)
> @@ -24606,10 +24606,10 @@ test:do_test(
>         WHERE b=190
>            OR a=72
>            OR b=377
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
>            OR b=476
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>     ]])
>       end, {
>           -- <where7-2.659.1>
> @@ -24625,10 +24625,10 @@ test:do_test(
>         WHERE b=190
>            OR a=72
>            OR b=377
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
>            OR b=476
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>     ]])
>       end, {
>           -- <where7-2.659.2>
> @@ -24644,12 +24644,12 @@ test:do_test(
>         WHERE b=245
>            OR b=638
>            OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR f='opqrstuvw'
>            OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
>            OR b=817
>            OR a=85
> -         OR (g='lkjihgf' AND f GLOB 'mnopq*')
> +         OR (g='lkjihgf' AND f LIKE 'mnopq%')
>     ]])
>       end, {
>           -- <where7-2.660.1>
> @@ -24665,12 +24665,12 @@ test:do_test(
>         WHERE b=245
>            OR b=638
>            OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR f='opqrstuvw'
>            OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
>            OR b=817
>            OR a=85
> -         OR (g='lkjihgf' AND f GLOB 'mnopq*')
> +         OR (g='lkjihgf' AND f LIKE 'mnopq%')
>     ]])
>       end, {
>           -- <where7-2.660.2>
> @@ -24749,9 +24749,9 @@ test:do_test(
>            OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
>            OR c<=10
>            OR ((a BETWEEN 75 AND 77) AND a!=76)
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR b=553
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR b=1045
>     ]])
>       end, {
> @@ -24769,9 +24769,9 @@ test:do_test(
>            OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
>            OR c<=10
>            OR ((a BETWEEN 75 AND 77) AND a!=76)
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR b=553
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR b=1045
>     ]])
>       end, {
> @@ -24788,12 +24788,12 @@ test:do_test(
>         WHERE b=440
>            OR ((a BETWEEN 3 AND 5) AND a!=4)
>            OR ((a BETWEEN 44 AND 46) AND a!=45)
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>            OR a=89
>            OR c=18018
>            OR b=154
>            OR b=506
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR a=78
>            OR b=751
>     ]])
> @@ -24811,12 +24811,12 @@ test:do_test(
>         WHERE b=440
>            OR ((a BETWEEN 3 AND 5) AND a!=4)
>            OR ((a BETWEEN 44 AND 46) AND a!=45)
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>            OR a=89
>            OR c=18018
>            OR b=154
>            OR b=506
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR a=78
>            OR b=751
>     ]])
> @@ -24832,13 +24832,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=407
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
>            OR b=209
>            OR b=814
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR a=44
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
>            OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
>            OR b=1092
>     ]])
> @@ -24854,13 +24854,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=407
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
>            OR b=209
>            OR b=814
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR a=44
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
>            OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
>            OR b=1092
>     ]])
> @@ -25002,10 +25002,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=27
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR b=121
>            OR ((a BETWEEN 7 AND 9) AND a!=8)
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR a=67
>            OR ((a BETWEEN 30 AND 32) AND a!=31)
>            OR c=1001
> @@ -25024,10 +25024,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=27
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR b=121
>            OR ((a BETWEEN 7 AND 9) AND a!=8)
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR a=67
>            OR ((a BETWEEN 30 AND 32) AND a!=31)
>            OR c=1001
> @@ -25046,7 +25046,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=99
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
> @@ -25063,7 +25063,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=99
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
> @@ -25083,9 +25083,9 @@ test:do_test(
>            OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
>            OR b=355
>            OR b=814
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR a=81
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>            OR b=542
>            OR b=795
>     ]])
> @@ -25104,9 +25104,9 @@ test:do_test(
>            OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
>            OR b=355
>            OR b=814
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR a=81
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>            OR b=542
>            OR b=795
>     ]])
> @@ -25124,10 +25124,10 @@ test:do_test(
>         WHERE (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
>            OR b=363
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 64 AND 66) AND a!=65)
>            OR b=619
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>            OR a=73
>     ]])
>       end, {
> @@ -25144,10 +25144,10 @@ test:do_test(
>         WHERE (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
>            OR b=363
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 64 AND 66) AND a!=65)
>            OR b=619
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>            OR a=73
>     ]])
>       end, {
> @@ -25163,9 +25163,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=935
>            OR a=42
> -         OR (g='nmlkjih' AND f GLOB 'defgh*')
> +         OR (g='nmlkjih' AND f LIKE 'defgh%')
>            OR b=330
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>     ]])
>       end, {
>           -- <where7-2.673.1>
> @@ -25180,9 +25180,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=935
>            OR a=42
> -         OR (g='nmlkjih' AND f GLOB 'defgh*')
> +         OR (g='nmlkjih' AND f LIKE 'defgh%')
>            OR b=330
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>     ]])
>       end, {
>           -- <where7-2.673.2>
> @@ -25201,7 +25201,7 @@ test:do_test(
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
>            OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
>            OR a=64
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR a=89
>     ]])
>       end, {
> @@ -25221,7 +25221,7 @@ test:do_test(
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
>            OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
>            OR a=64
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR a=89
>     ]])
>       end, {
> @@ -25240,9 +25240,9 @@ test:do_test(
>            OR b=663
>            OR c=17017
>            OR b=561
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR b=495
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR b=352
>            OR ((a BETWEEN 39 AND 41) AND a!=40)
>     ]])
> @@ -25262,9 +25262,9 @@ test:do_test(
>            OR b=663
>            OR c=17017
>            OR b=561
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR b=495
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR b=352
>            OR ((a BETWEEN 39 AND 41) AND a!=40)
>     ]])
> @@ -25280,7 +25280,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=100.0 AND d<101.0 AND d IS NOT NULL)
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR f='klmnopqrs'
>            OR f='lmnopqrst'
>     ]])
> @@ -25296,7 +25296,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=100.0 AND d<101.0 AND d IS NOT NULL)
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>            OR f='klmnopqrs'
>            OR f='lmnopqrst'
>     ]])
> @@ -25342,16 +25342,16 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=36
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
>            OR b=682
>            OR ((a BETWEEN 53 AND 55) AND a!=54)
>            OR b=91
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
>            OR c=12012
>            OR b=267
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
>     ]])
>       end, {
>           -- <where7-2.678.1>
> @@ -25365,16 +25365,16 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=36
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
>            OR b=682
>            OR ((a BETWEEN 53 AND 55) AND a!=54)
>            OR b=91
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
>            OR c=12012
>            OR b=267
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
>     ]])
>       end, {
>           -- <where7-2.678.2>
> @@ -25390,12 +25390,12 @@ test:do_test(
>         WHERE b=594
>            OR f='hijklmnop'
>            OR ((a BETWEEN 65 AND 67) AND a!=66)
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR b=707
>            OR b=363
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>            OR b=157
> -         OR (g='tsrqpon' AND f GLOB 'yzabc*')
> +         OR (g='tsrqpon' AND f LIKE 'yzabc%')
>     ]])
>       end, {
>           -- <where7-2.679.1>
> @@ -25411,12 +25411,12 @@ test:do_test(
>         WHERE b=594
>            OR f='hijklmnop'
>            OR ((a BETWEEN 65 AND 67) AND a!=66)
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR b=707
>            OR b=363
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>            OR b=157
> -         OR (g='tsrqpon' AND f GLOB 'yzabc*')
> +         OR (g='tsrqpon' AND f LIKE 'yzabc%')
>     ]])
>       end, {
>           -- <where7-2.679.2>
> @@ -25473,7 +25473,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='nmlkjih' AND f GLOB 'defgh*')
> +      WHERE (g='nmlkjih' AND f LIKE 'defgh%')
>            OR b=674
>            OR ((a BETWEEN 38 AND 40) AND a!=39)
>            OR c=3003
> @@ -25492,7 +25492,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='nmlkjih' AND f GLOB 'defgh*')
> +      WHERE (g='nmlkjih' AND f LIKE 'defgh%')
>            OR b=674
>            OR ((a BETWEEN 38 AND 40) AND a!=39)
>            OR c=3003
> @@ -25554,7 +25554,7 @@ test:do_test(
>            OR b=707
>            OR f='vwxyzabcd'
>            OR b=286
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR b=693
>            OR ((a BETWEEN 6 AND 8) AND a!=7)
>     ]])
> @@ -25576,7 +25576,7 @@ test:do_test(
>            OR b=707
>            OR f='vwxyzabcd'
>            OR b=286
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR b=693
>            OR ((a BETWEEN 6 AND 8) AND a!=7)
>     ]])
> @@ -25596,8 +25596,8 @@ test:do_test(
>            OR a=52
>            OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
>            OR d<0.0
> -         OR (g='rqponml' AND f GLOB 'jklmn*')
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (g='rqponml' AND f LIKE 'jklmn%')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR b=168
>            OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
>            OR f='uvwxyzabc'
> @@ -25619,8 +25619,8 @@ test:do_test(
>            OR a=52
>            OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
>            OR d<0.0
> -         OR (g='rqponml' AND f GLOB 'jklmn*')
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +         OR (g='rqponml' AND f LIKE 'jklmn%')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR b=168
>            OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
>            OR f='uvwxyzabc'
> @@ -25638,12 +25638,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 4 AND 6) AND a!=5)
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>            OR f='rstuvwxyz'
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR a=14
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>     ]])
> @@ -25659,12 +25659,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 4 AND 6) AND a!=5)
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>            OR f='rstuvwxyz'
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR a=14
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>     ]])
> @@ -25681,9 +25681,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 13 AND 15) AND a!=14)
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR f='mnopqrstu'
> -         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
> +         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
>            OR a=38
>            OR c=26026
> @@ -25701,9 +25701,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 13 AND 15) AND a!=14)
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR f='mnopqrstu'
> -         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
> +         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
>            OR a=38
>            OR c=26026
> @@ -25719,11 +25719,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ponmlkj' AND f GLOB 'stuvw*')
> +      WHERE (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR ((a BETWEEN 71 AND 73) AND a!=72)
>            OR a=7
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> -         OR (g='srqponm' AND f GLOB 'ghijk*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
> +         OR (g='srqponm' AND f LIKE 'ghijk%')
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
>     ]])
>       end, {
> @@ -25737,11 +25737,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ponmlkj' AND f GLOB 'stuvw*')
> +      WHERE (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR ((a BETWEEN 71 AND 73) AND a!=72)
>            OR a=7
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> -         OR (g='srqponm' AND f GLOB 'ghijk*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
> +         OR (g='srqponm' AND f LIKE 'ghijk%')
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
>     ]])
>       end, {
> @@ -25759,8 +25759,8 @@ test:do_test(
>            OR b=938
>            OR b=484
>            OR b=652
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR f='opqrstuvw'
>     ]])
>       end, {
> @@ -25778,8 +25778,8 @@ test:do_test(
>            OR b=938
>            OR b=484
>            OR b=652
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR f='opqrstuvw'
>     ]])
>       end, {
> @@ -25835,12 +25835,12 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=25
>            OR ((a BETWEEN 43 AND 45) AND a!=44)
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>            OR b=443
>            OR b=564
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR b=531
>            OR b=1081
>            OR a=96
> @@ -25858,12 +25858,12 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=25
>            OR ((a BETWEEN 43 AND 45) AND a!=44)
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>            OR b=443
>            OR b=564
> -         OR (g='kjihgfe' AND f GLOB 'rstuv*')
> +         OR (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR b=531
>            OR b=1081
>            OR a=96
> @@ -25880,7 +25880,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=36
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>     ]])
>       end, {
>           -- <where7-2.691.1>
> @@ -25894,7 +25894,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=36
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>     ]])
>       end, {
>           -- <where7-2.691.2>
> @@ -25907,7 +25907,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'stuvw*')
> +      WHERE (g='kjihgfe' AND f LIKE 'stuvw%')
>            OR b=531
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
>            OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
> @@ -25923,7 +25923,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'stuvw*')
> +      WHERE (g='kjihgfe' AND f LIKE 'stuvw%')
>            OR b=531
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
>            OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
> @@ -25975,8 +25975,8 @@ test:do_test(
>            OR b=718
>            OR a=18
>            OR a=3
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR c=28028
>     ]])
>       end, {
> @@ -25998,8 +25998,8 @@ test:do_test(
>            OR b=718
>            OR a=18
>            OR a=3
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR c=28028
>     ]])
>       end, {
> @@ -26062,7 +26062,7 @@ test:do_test(
>            OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 30 AND 32) AND a!=31)
>            OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'ghijk*')
> +         OR (g='srqponm' AND f LIKE 'ghijk%')
>            OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -26081,7 +26081,7 @@ test:do_test(
>            OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 30 AND 32) AND a!=31)
>            OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'ghijk*')
> +         OR (g='srqponm' AND f LIKE 'ghijk%')
>            OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -26095,7 +26095,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='mlkjihg' AND f GLOB 'ijklm*')
> +      WHERE (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR b=883
>            OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
>            OR b=938
> @@ -26115,7 +26115,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='mlkjihg' AND f GLOB 'ijklm*')
> +      WHERE (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR b=883
>            OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
>            OR b=938
> @@ -26167,7 +26167,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='tsrqpon' AND f GLOB 'abcde*')
> +      WHERE (g='tsrqpon' AND f LIKE 'abcde%')
>            OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
>            OR ((a BETWEEN 74 AND 76) AND a!=75)
> @@ -26185,7 +26185,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='tsrqpon' AND f GLOB 'abcde*')
> +      WHERE (g='tsrqpon' AND f LIKE 'abcde%')
>            OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
>            OR ((a BETWEEN 74 AND 76) AND a!=75)
> @@ -26271,12 +26271,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?abcd*' AND f GLOB 'zabc*')
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> -         OR (g='srqponm' AND f GLOB 'cdefg*')
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> +      WHERE (f LIKE '_abcd%' AND f LIKE 'zabc%')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
> +         OR (g='srqponm' AND f LIKE 'cdefg%')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR f='lmnopqrst'
>            OR ((a BETWEEN 11 AND 13) AND a!=12)
>            OR b=872
> @@ -26294,12 +26294,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?abcd*' AND f GLOB 'zabc*')
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> -         OR (g='srqponm' AND f GLOB 'cdefg*')
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> +      WHERE (f LIKE '_abcd%' AND f LIKE 'zabc%')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
> +         OR (g='srqponm' AND f LIKE 'cdefg%')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR f='lmnopqrst'
>            OR ((a BETWEEN 11 AND 13) AND a!=12)
>            OR b=872
> @@ -26319,14 +26319,14 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 71 AND 73) AND a!=72)
>            OR a=20
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>            OR b=1004
>            OR b=77
>            OR b=927
>            OR a=99
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>     ]])
>       end, {
>           -- <where7-2.703.1>
> @@ -26341,14 +26341,14 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 71 AND 73) AND a!=72)
>            OR a=20
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>            OR b=1004
>            OR b=77
>            OR b=927
>            OR a=99
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>     ]])
>       end, {
>           -- <where7-2.703.2>
> @@ -26394,7 +26394,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=572
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.705.1>
> @@ -26408,7 +26408,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=572
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.705.2>
> @@ -26424,8 +26424,8 @@ test:do_test(
>         WHERE (d>=44.0 AND d<45.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 54 AND 56) AND a!=55)
>            OR f='lmnopqrst'
> -         OR (f GLOB '?lmno*' AND f GLOB 'klmn*')
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (f LIKE '_lmno%' AND f LIKE 'klmn%')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR a=23
>            OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
>     ]])
> @@ -26443,8 +26443,8 @@ test:do_test(
>         WHERE (d>=44.0 AND d<45.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 54 AND 56) AND a!=55)
>            OR f='lmnopqrst'
> -         OR (f GLOB '?lmno*' AND f GLOB 'klmn*')
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (f LIKE '_lmno%' AND f LIKE 'klmn%')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR a=23
>            OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
>     ]])
> @@ -26463,13 +26463,13 @@ test:do_test(
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>            OR b=605
>            OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'stuvw*')
> +         OR (g='kjihgfe' AND f LIKE 'stuvw%')
>            OR b=759
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>            OR ((a BETWEEN 38 AND 40) AND a!=39)
>            OR a=40
>            OR f='ghijklmno'
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>     ]])
>       end, {
>           -- <where7-2.707.1>
> @@ -26486,13 +26486,13 @@ test:do_test(
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>            OR b=605
>            OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'stuvw*')
> +         OR (g='kjihgfe' AND f LIKE 'stuvw%')
>            OR b=759
> -         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
> +         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
>            OR ((a BETWEEN 38 AND 40) AND a!=39)
>            OR a=40
>            OR f='ghijklmno'
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>     ]])
>       end, {
>           -- <where7-2.707.2>
> @@ -26601,7 +26601,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='nmlkjih' AND f GLOB 'efghi*')
> +      WHERE (g='nmlkjih' AND f LIKE 'efghi%')
>            OR a=34
>            OR ((a BETWEEN 6 AND 8) AND a!=7)
>            OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
> @@ -26619,7 +26619,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='nmlkjih' AND f GLOB 'efghi*')
> +      WHERE (g='nmlkjih' AND f LIKE 'efghi%')
>            OR a=34
>            OR ((a BETWEEN 6 AND 8) AND a!=7)
>            OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
> @@ -26637,16 +26637,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
> +      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
>            OR a=52
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
>            OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
>            OR f='ghijklmno'
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR b=319
>            OR a=34
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR f='hijklmnop'
>     ]])
>       end, {
> @@ -26660,16 +26660,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
> +      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
>            OR a=52
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
>            OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
>            OR f='ghijklmno'
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR b=319
>            OR a=34
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR f='hijklmnop'
>     ]])
>       end, {
> @@ -26683,7 +26683,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
> +      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
>            OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
>            OR a=47
> @@ -26699,7 +26699,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
> +      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
>            OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
>            OR a=47
> @@ -26781,11 +26781,11 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE c=31031
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
>            OR b=256
>            OR ((a BETWEEN 77 AND 79) AND a!=78)
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
>            OR b=715
>            OR b=212
>            OR b=99
> @@ -26804,11 +26804,11 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE c=31031
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
>            OR b=256
>            OR ((a BETWEEN 77 AND 79) AND a!=78)
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
>            OR b=715
>            OR b=212
>            OR b=99
> @@ -26899,7 +26899,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
> +      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR ((a BETWEEN 62 AND 64) AND a!=63)
>     ]])
>       end, {
> @@ -26913,7 +26913,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
> +      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR ((a BETWEEN 62 AND 64) AND a!=63)
>     ]])
>       end, {
> @@ -26929,11 +26929,11 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 43 AND 45) AND a!=44)
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>            OR a=43
>            OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
>            OR b=729
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.720.1>
> @@ -26948,11 +26948,11 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 43 AND 45) AND a!=44)
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>            OR a=43
>            OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
>            OR b=729
> -         OR (g='vutsrqp' AND f GLOB 'opqrs*')
> +         OR (g='vutsrqp' AND f LIKE 'opqrs%')
>     ]])
>       end, {
>           -- <where7-2.720.2>
> @@ -26972,7 +26972,7 @@ test:do_test(
>            OR c=8008
>            OR f='opqrstuvw'
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.721.1>
> @@ -26992,7 +26992,7 @@ test:do_test(
>            OR c=8008
>            OR f='opqrstuvw'
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.721.2>
> @@ -27008,9 +27008,9 @@ test:do_test(
>         WHERE ((a BETWEEN 40 AND 42) AND a!=41)
>            OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
>            OR c<=10
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>            OR a=35
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR b=1089
>            OR a=73
>            OR b=737
> @@ -27031,9 +27031,9 @@ test:do_test(
>         WHERE ((a BETWEEN 40 AND 42) AND a!=41)
>            OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
>            OR c<=10
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>            OR a=35
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR b=1089
>            OR a=73
>            OR b=737
> @@ -27053,7 +27053,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 0 AND 2) AND a!=1)
>            OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=762
>            OR ((a BETWEEN 39 AND 41) AND a!=40)
>            OR a=80
> @@ -27071,7 +27071,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 0 AND 2) AND a!=1)
>            OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=762
>            OR ((a BETWEEN 39 AND 41) AND a!=40)
>            OR a=80
> @@ -27092,10 +27092,10 @@ test:do_test(
>            OR ((a BETWEEN 80 AND 82) AND a!=81)
>            OR b=979
>            OR a=36
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>            OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
>            OR a=55
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
>     ]])
>       end, {
>           -- <where7-2.724.1>
> @@ -27113,10 +27113,10 @@ test:do_test(
>            OR ((a BETWEEN 80 AND 82) AND a!=81)
>            OR b=979
>            OR a=36
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>            OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
>            OR a=55
> -         OR (g='fedcbaz' AND f GLOB 'rstuv*')
> +         OR (g='fedcbaz' AND f LIKE 'rstuv%')
>     ]])
>       end, {
>           -- <where7-2.724.2>
> @@ -27131,8 +27131,8 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=75
>            OR a=61
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.725.1>
> @@ -27147,8 +27147,8 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=75
>            OR a=61
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.725.2>
> @@ -27162,7 +27162,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=1004
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
>            OR a=56
>     ]])
> @@ -27178,7 +27178,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=1004
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
>            OR a=56
>     ]])
> @@ -27194,13 +27194,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=93
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR a=83
>            OR b=828
>            OR b=454
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>            OR b=924
> -         OR (g='lkjihgf' AND f GLOB 'opqrs*')
> +         OR (g='lkjihgf' AND f LIKE 'opqrs%')
>            OR a=50
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>     ]])
> @@ -27216,13 +27216,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=93
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR a=83
>            OR b=828
>            OR b=454
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>            OR b=924
> -         OR (g='lkjihgf' AND f GLOB 'opqrs*')
> +         OR (g='lkjihgf' AND f LIKE 'opqrs%')
>            OR a=50
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>     ]])
> @@ -27269,7 +27269,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=55
>            OR a=65
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>     ]])
>       end, {
>           -- <where7-2.729.1>
> @@ -27284,7 +27284,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=55
>            OR a=65
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>     ]])
>       end, {
>           -- <where7-2.729.2>
> @@ -27300,7 +27300,7 @@ test:do_test(
>         WHERE ((a BETWEEN 72 AND 74) AND a!=73)
>            OR b=605
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 72 AND 74) AND a!=73)
>            OR f='ijklmnopq'
>            OR ((a BETWEEN 86 AND 88) AND a!=87)
> @@ -27322,7 +27322,7 @@ test:do_test(
>         WHERE ((a BETWEEN 72 AND 74) AND a!=73)
>            OR b=605
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 72 AND 74) AND a!=73)
>            OR f='ijklmnopq'
>            OR ((a BETWEEN 86 AND 88) AND a!=87)
> @@ -27342,7 +27342,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=476
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR b=982
>            OR a=43
>            OR b=355
> @@ -27359,7 +27359,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=476
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR b=982
>            OR a=43
>            OR b=355
> @@ -27377,8 +27377,8 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=85
>            OR b=718
> -         OR (g='fedcbaz' AND f GLOB 'pqrst*')
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (g='fedcbaz' AND f LIKE 'pqrst%')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -27394,8 +27394,8 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=85
>            OR b=718
> -         OR (g='fedcbaz' AND f GLOB 'pqrst*')
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (g='fedcbaz' AND f LIKE 'pqrst%')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -27515,12 +27515,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR b=465
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
>            OR a=37
>            OR b=1056
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR (d>=4.0 AND d<5.0 AND d IS NOT NULL)
>            OR b=1023
>     ]])
> @@ -27535,12 +27535,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR b=465
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
>            OR a=37
>            OR b=1056
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR (d>=4.0 AND d<5.0 AND d IS NOT NULL)
>            OR b=1023
>     ]])
> @@ -27557,7 +27557,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=76
>            OR a=8
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
>            OR b=495
>            OR b=663
>            OR a=98
> @@ -27576,7 +27576,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=76
>            OR a=8
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
>            OR b=495
>            OR b=663
>            OR a=98
> @@ -27595,7 +27595,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=1081
>            OR b=542
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
>            OR b=828
>            OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
> @@ -27615,7 +27615,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=1081
>            OR b=542
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
>            OR b=828
>            OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
> @@ -27745,9 +27745,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=880
>            OR b=696
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>            OR b=308
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
>     ]])
>       end, {
> @@ -27763,9 +27763,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=880
>            OR b=696
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>            OR b=308
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
>     ]])
>       end, {
> @@ -27779,7 +27779,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
> +      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR a=24
>            OR f IS NULL
>            OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
> @@ -27798,7 +27798,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
> +      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR a=24
>            OR f IS NULL
>            OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
> @@ -27819,7 +27819,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=94
>            OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR b=792
>            OR a=77
>            OR a=26
> @@ -27839,7 +27839,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=94
>            OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR b=792
>            OR a=77
>            OR a=26
> @@ -27935,11 +27935,11 @@ test:do_test(
>            OR c=19019
>            OR a=42
>            OR b=938
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>     ]])
>       end, {
>           -- <where7-2.747.1>
> @@ -27958,11 +27958,11 @@ test:do_test(
>            OR c=19019
>            OR a=42
>            OR b=938
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>     ]])
>       end, {
>           -- <where7-2.747.2>
> @@ -27977,7 +27977,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=179
>            OR a=50
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>     ]])
>       end, {
>           -- <where7-2.748.1>
> @@ -27992,7 +27992,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=179
>            OR a=50
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>     ]])
>       end, {
>           -- <where7-2.748.2>
> @@ -28005,12 +28005,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='vutsrqp' AND f GLOB 'rstuv*')
> +      WHERE (g='vutsrqp' AND f LIKE 'rstuv%')
>            OR f='xyzabcdef'
>            OR ((a BETWEEN 49 AND 51) AND a!=50)
>            OR b=575
>            OR b=385
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
>            OR a=46
>            OR b=220
> @@ -28027,12 +28027,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='vutsrqp' AND f GLOB 'rstuv*')
> +      WHERE (g='vutsrqp' AND f LIKE 'rstuv%')
>            OR f='xyzabcdef'
>            OR ((a BETWEEN 49 AND 51) AND a!=50)
>            OR b=575
>            OR b=385
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
>            OR a=46
>            OR b=220
> @@ -28055,7 +28055,7 @@ test:do_test(
>            OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
>            OR c=31031
>            OR b=869
> -         OR (g='jihgfed' AND f GLOB 'zabcd*')
> +         OR (g='jihgfed' AND f LIKE 'zabcd%')
>            OR b=245
>            OR a=92
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> @@ -28078,7 +28078,7 @@ test:do_test(
>            OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
>            OR c=31031
>            OR b=869
> -         OR (g='jihgfed' AND f GLOB 'zabcd*')
> +         OR (g='jihgfed' AND f LIKE 'zabcd%')
>            OR b=245
>            OR a=92
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> @@ -28099,8 +28099,8 @@ test:do_test(
>            OR c=28028
>            OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR ((a BETWEEN 17 AND 19) AND a!=18)
>            OR c=9009
>            OR a=17
> @@ -28121,8 +28121,8 @@ test:do_test(
>            OR c=28028
>            OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> -         OR (g='mlkjihg' AND f GLOB 'jklmn*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
> +         OR (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR ((a BETWEEN 17 AND 19) AND a!=18)
>            OR c=9009
>            OR a=17
> @@ -28141,7 +28141,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=57.0 AND d<58.0 AND d IS NOT NULL)
>            OR b=762
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR f='tuvwxyzab'
>            OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> @@ -28161,7 +28161,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=57.0 AND d<58.0 AND d IS NOT NULL)
>            OR b=762
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR f='tuvwxyzab'
>            OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> @@ -28219,7 +28219,7 @@ test:do_test(
>            OR a=14
>            OR c=16016
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>            OR f='jklmnopqr'
>            OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
>            OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
> @@ -28240,7 +28240,7 @@ test:do_test(
>            OR a=14
>            OR c=16016
>            OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>            OR f='jklmnopqr'
>            OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
>            OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
> @@ -28258,12 +28258,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=949
> -         OR (g='srqponm' AND f GLOB 'cdefg*')
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='srqponm' AND f LIKE 'cdefg%')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>            OR c<=10
>            OR a=14
>            OR b=608
> -         OR (g='edcbazy' AND f GLOB 'uvwxy*')
> +         OR (g='edcbazy' AND f LIKE 'uvwxy%')
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
>            OR b=121
>            OR b=333
> @@ -28281,12 +28281,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=949
> -         OR (g='srqponm' AND f GLOB 'cdefg*')
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='srqponm' AND f LIKE 'cdefg%')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>            OR c<=10
>            OR a=14
>            OR b=608
> -         OR (g='edcbazy' AND f GLOB 'uvwxy*')
> +         OR (g='edcbazy' AND f LIKE 'uvwxy%')
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
>            OR b=121
>            OR b=333
> @@ -28303,7 +28303,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
> +      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR b=355
>            OR b=627
>            OR b=1001
> @@ -28321,7 +28321,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
> +      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
>            OR b=355
>            OR b=627
>            OR b=1001
> @@ -28339,7 +28339,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
> +      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
>            OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -28353,7 +28353,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
> +      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
>            OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -28370,11 +28370,11 @@ test:do_test(
>         WHERE b=685
>            OR a=14
>            OR b=990
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR f='efghijklm'
>            OR c=1001
>            OR b=784
> -         OR (g='srqponm' AND f GLOB 'ghijk*')
> +         OR (g='srqponm' AND f LIKE 'ghijk%')
>            OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -28391,11 +28391,11 @@ test:do_test(
>         WHERE b=685
>            OR a=14
>            OR b=990
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR f='efghijklm'
>            OR c=1001
>            OR b=784
> -         OR (g='srqponm' AND f GLOB 'ghijk*')
> +         OR (g='srqponm' AND f LIKE 'ghijk%')
>            OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -28410,7 +28410,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=54
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>            OR c=26026
>            OR ((a BETWEEN 97 AND 99) AND a!=98)
>     ]])
> @@ -28426,7 +28426,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=54
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>            OR c=26026
>            OR ((a BETWEEN 97 AND 99) AND a!=98)
>     ]])
> @@ -28441,13 +28441,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='hgfedcb' AND f GLOB 'ghijk*')
> +      WHERE (g='hgfedcb' AND f LIKE 'ghijk%')
>            OR c=24024
>            OR a=98
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR a=5
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
>            OR f='pqrstuvwx'
>            OR f='bcdefghij'
>            OR b=1001
> @@ -28464,13 +28464,13 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='hgfedcb' AND f GLOB 'ghijk*')
> +      WHERE (g='hgfedcb' AND f LIKE 'ghijk%')
>            OR c=24024
>            OR a=98
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR a=5
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
>            OR f='pqrstuvwx'
>            OR f='bcdefghij'
>            OR b=1001
> @@ -28488,11 +28488,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=781
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
>            OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>            OR f='lmnopqrst'
>            OR a=39
>            OR a=100
> @@ -28510,11 +28510,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=781
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
>            OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>            OR f='lmnopqrst'
>            OR a=39
>            OR a=100
> @@ -28533,11 +28533,11 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE c=4004
>            OR b=718
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR a=50
>            OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
>            OR b=363
> -         OR (g='rqponml' AND f GLOB 'ijklm*')
> +         OR (g='rqponml' AND f LIKE 'ijklm%')
>            OR b=1023
>     ]])
>       end, {
> @@ -28553,11 +28553,11 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE c=4004
>            OR b=718
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR a=50
>            OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
>            OR b=363
> -         OR (g='rqponml' AND f GLOB 'ijklm*')
> +         OR (g='rqponml' AND f LIKE 'ijklm%')
>            OR b=1023
>     ]])
>       end, {
> @@ -28576,8 +28576,8 @@ test:do_test(
>            OR b=473
>            OR ((a BETWEEN 43 AND 45) AND a!=44)
>            OR b=586
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>     ]])
>       end, {
>           -- <where7-2.763.1>
> @@ -28595,8 +28595,8 @@ test:do_test(
>            OR b=473
>            OR ((a BETWEEN 43 AND 45) AND a!=44)
>            OR b=586
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> -         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
> +         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
>     ]])
>       end, {
>           -- <where7-2.763.2>
> @@ -28609,7 +28609,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +      WHERE (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
>            OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
>     ]])
> @@ -28624,7 +28624,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +      WHERE (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
>            OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
>     ]])
> @@ -28639,11 +28639,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
> +      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR ((a BETWEEN 76 AND 78) AND a!=77)
>            OR a=47
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> -         OR (g='lkjihgf' AND f GLOB 'lmnop*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
> +         OR (g='lkjihgf' AND f LIKE 'lmnop%')
>            OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
>            OR f='lmnopqrst'
>     ]])
> @@ -28658,11 +28658,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
> +      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR ((a BETWEEN 76 AND 78) AND a!=77)
>            OR a=47
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> -         OR (g='lkjihgf' AND f GLOB 'lmnop*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
> +         OR (g='lkjihgf' AND f LIKE 'lmnop%')
>            OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
>            OR f='lmnopqrst'
>     ]])
> @@ -28680,7 +28680,7 @@ test:do_test(
>         WHERE c>=34035
>            OR a=29
>            OR ((a BETWEEN 19 AND 21) AND a!=20)
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR f='abcdefghi'
>            OR b=993
>            OR ((a BETWEEN 52 AND 54) AND a!=53)
> @@ -28700,7 +28700,7 @@ test:do_test(
>         WHERE c>=34035
>            OR a=29
>            OR ((a BETWEEN 19 AND 21) AND a!=20)
> -         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
> +         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
>            OR f='abcdefghi'
>            OR b=993
>            OR ((a BETWEEN 52 AND 54) AND a!=53)
> @@ -28878,7 +28878,7 @@ test:do_test(
>         WHERE ((a BETWEEN 32 AND 34) AND a!=33)
>            OR b=1045
>            OR c=27027
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>     ]])
>       end, {
>           -- <where7-2.771.1>
> @@ -28894,7 +28894,7 @@ test:do_test(
>         WHERE ((a BETWEEN 32 AND 34) AND a!=33)
>            OR b=1045
>            OR c=27027
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>     ]])
>       end, {
>           -- <where7-2.771.2>
> @@ -28910,7 +28910,7 @@ test:do_test(
>         WHERE a=87
>            OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
>            OR b=487
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>     ]])
>       end, {
>           -- <where7-2.772.1>
> @@ -28926,7 +28926,7 @@ test:do_test(
>         WHERE a=87
>            OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
>            OR b=487
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>     ]])
>       end, {
>           -- <where7-2.772.2>
> @@ -29018,10 +29018,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=220
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>            OR b=363
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> -         OR (g='nmlkjih' AND f GLOB 'defgh*')
> +         OR (g='nmlkjih' AND f LIKE 'defgh%')
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 10 AND 12) AND a!=11)
>     ]])
> @@ -29037,10 +29037,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=220
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>            OR b=363
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> -         OR (g='nmlkjih' AND f GLOB 'defgh*')
> +         OR (g='nmlkjih' AND f LIKE 'defgh%')
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 10 AND 12) AND a!=11)
>     ]])
> @@ -29096,8 +29096,8 @@ test:do_test(
>         WHERE b=1059
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
>            OR b=960
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR b=894
>            OR c=2002
>     ]])
> @@ -29115,8 +29115,8 @@ test:do_test(
>         WHERE b=1059
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
>            OR b=960
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR b=894
>            OR c=2002
>     ]])
> @@ -29132,7 +29132,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=14
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>     ]])
>       end, {
>           -- <where7-2.778.1>
> @@ -29146,7 +29146,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=14
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>     ]])
>       end, {
>           -- <where7-2.778.2>
> @@ -29160,7 +29160,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=806
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>            OR b=795
>            OR ((a BETWEEN 99 AND 101) AND a!=100)
>            OR ((a BETWEEN 21 AND 23) AND a!=22)
> @@ -29180,7 +29180,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=806
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>            OR b=795
>            OR ((a BETWEEN 99 AND 101) AND a!=100)
>            OR ((a BETWEEN 21 AND 23) AND a!=22)
> @@ -29200,7 +29200,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=726
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
>            OR f='abcdefghi'
>            OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
> @@ -29218,7 +29218,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=726
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
>            OR f='abcdefghi'
>            OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
> @@ -29238,7 +29238,7 @@ test:do_test(
>         WHERE a=59
>            OR ((a BETWEEN 5 AND 7) AND a!=6)
>            OR b=1081
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>     ]])
>       end, {
>           -- <where7-2.781.1>
> @@ -29254,7 +29254,7 @@ test:do_test(
>         WHERE a=59
>            OR ((a BETWEEN 5 AND 7) AND a!=6)
>            OR b=1081
> -         OR (g='fedcbaz' AND f GLOB 'stuvw*')
> +         OR (g='fedcbaz' AND f LIKE 'stuvw%')
>     ]])
>       end, {
>           -- <where7-2.781.2>
> @@ -29267,15 +29267,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='qponmlk' AND f GLOB 'nopqr*')
> +      WHERE (g='qponmlk' AND f LIKE 'nopqr%')
>            OR b=1037
>            OR b=132
>            OR c=1001
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
>            OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR a=32
>     ]])
>       end, {
> @@ -29289,15 +29289,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='qponmlk' AND f GLOB 'nopqr*')
> +      WHERE (g='qponmlk' AND f LIKE 'nopqr%')
>            OR b=1037
>            OR b=132
>            OR c=1001
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
>            OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR a=32
>     ]])
>       end, {
> @@ -29355,7 +29355,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
> +      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=1001
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
>            OR a=83
> @@ -29371,7 +29371,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
> +      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=1001
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
>            OR a=83
> @@ -29389,13 +29389,13 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=60.0 AND d<61.0 AND d IS NOT NULL)
>            OR b=36
> -         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> +         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
>            OR ((a BETWEEN 46 AND 48) AND a!=47)
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
>            OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 26 AND 28) AND a!=27)
>     ]])
> @@ -29412,13 +29412,13 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=60.0 AND d<61.0 AND d IS NOT NULL)
>            OR b=36
> -         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> +         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
>            OR ((a BETWEEN 46 AND 48) AND a!=47)
>            OR ((a BETWEEN 31 AND 33) AND a!=32)
>            OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 26 AND 28) AND a!=27)
>     ]])
> @@ -29434,7 +29434,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=69
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>            OR ((a BETWEEN 58 AND 60) AND a!=59)
>            OR a=98
>            OR b=300
> @@ -29456,7 +29456,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=69
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>            OR ((a BETWEEN 58 AND 60) AND a!=59)
>            OR a=98
>            OR b=300
> @@ -29480,8 +29480,8 @@ test:do_test(
>         WHERE ((a BETWEEN 68 AND 70) AND a!=69)
>            OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 94 AND 96) AND a!=95)
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
>            OR b=619
>            OR c=6006
> @@ -29503,8 +29503,8 @@ test:do_test(
>         WHERE ((a BETWEEN 68 AND 70) AND a!=69)
>            OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 94 AND 96) AND a!=95)
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
>            OR b=619
>            OR c=6006
> @@ -29525,7 +29525,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 9 AND 11) AND a!=10)
>            OR a=55
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>     ]])
>       end, {
>           -- <where7-2.788.1>
> @@ -29540,7 +29540,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 9 AND 11) AND a!=10)
>            OR a=55
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>     ]])
>       end, {
>           -- <where7-2.788.2>
> @@ -29558,7 +29558,7 @@ test:do_test(
>            OR b=201
>            OR a=7
>            OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR b=957
>     ]])
>       end, {
> @@ -29577,7 +29577,7 @@ test:do_test(
>            OR b=201
>            OR a=7
>            OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
> -         OR (g='yxwvuts' AND f GLOB 'cdefg*')
> +         OR (g='yxwvuts' AND f LIKE 'cdefg%')
>            OR b=957
>     ]])
>       end, {
> @@ -29593,10 +29593,10 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 90 AND 92) AND a!=91)
>            OR a=74
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> -         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
> +         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
>            OR a=89
>     ]])
>       end, {
> @@ -29612,10 +29612,10 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 90 AND 92) AND a!=91)
>            OR a=74
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> -         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
> +         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
>            OR a=89
>     ]])
>       end, {
> @@ -29636,7 +29636,7 @@ test:do_test(
>            OR b=495
>            OR b=564
>            OR b=289
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.791.1>
> @@ -29656,7 +29656,7 @@ test:do_test(
>            OR b=495
>            OR b=564
>            OR b=289
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>     ]])
>       end, {
>           -- <where7-2.791.2>
> @@ -29669,7 +29669,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
> +      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR a=69
>            OR a=12
>            OR b=718
> @@ -29686,7 +29686,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
> +      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR a=69
>            OR a=12
>            OR b=718
> @@ -29703,7 +29703,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
> +      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR f='klmnopqrs'
>            OR b=674
>            OR a=96
> @@ -29712,7 +29712,7 @@ test:do_test(
>            OR b=707
>            OR f='cdefghijk'
>            OR a=91
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>     ]])
>       end, {
>           -- <where7-2.793.1>
> @@ -29725,7 +29725,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
> +      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR f='klmnopqrs'
>            OR b=674
>            OR a=96
> @@ -29734,7 +29734,7 @@ test:do_test(
>            OR b=707
>            OR f='cdefghijk'
>            OR a=91
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>     ]])
>       end, {
>           -- <where7-2.793.2>
> @@ -29747,12 +29747,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR b=564
>            OR b=784
>            OR b=418
>            OR b=275
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR a=58
>            OR c=11011
>            OR b=660
> @@ -29768,12 +29768,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR b=564
>            OR b=784
>            OR b=418
>            OR b=275
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>            OR a=58
>            OR c=11011
>            OR b=660
> @@ -29794,7 +29794,7 @@ test:do_test(
>            OR b=1004
>            OR ((a BETWEEN 28 AND 30) AND a!=29)
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
> -         OR (g='mlkjihg' AND f GLOB 'hijkl*')
> +         OR (g='mlkjihg' AND f LIKE 'hijkl%')
>            OR f='pqrstuvwx'
>     ]])
>       end, {
> @@ -29813,7 +29813,7 @@ test:do_test(
>            OR b=1004
>            OR ((a BETWEEN 28 AND 30) AND a!=29)
>            OR ((a BETWEEN 57 AND 59) AND a!=58)
> -         OR (g='mlkjihg' AND f GLOB 'hijkl*')
> +         OR (g='mlkjihg' AND f LIKE 'hijkl%')
>            OR f='pqrstuvwx'
>     ]])
>       end, {
> @@ -29886,7 +29886,7 @@ test:do_test(
>         WHERE a=19
>            OR a=29
>            OR b=476
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR b=91
>     ]])
>       end, {
> @@ -29903,7 +29903,7 @@ test:do_test(
>         WHERE a=19
>            OR a=29
>            OR b=476
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR b=91
>     ]])
>       end, {
> @@ -29954,8 +29954,8 @@ test:do_test(
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
>            OR b=44
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> -         OR (g='onmlkji' AND f GLOB 'xyzab*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
> +         OR (g='onmlkji' AND f LIKE 'xyzab%')
>            OR b=707
>            OR b=322
>     ]])
> @@ -29975,8 +29975,8 @@ test:do_test(
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
>            OR ((a BETWEEN 32 AND 34) AND a!=33)
>            OR b=44
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> -         OR (g='onmlkji' AND f GLOB 'xyzab*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
> +         OR (g='onmlkji' AND f LIKE 'xyzab%')
>            OR b=707
>            OR b=322
>     ]])
> @@ -29991,8 +29991,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
>            OR f='jklmnopqr'
>     ]])
> @@ -30007,8 +30007,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
>            OR f='jklmnopqr'
>     ]])
> @@ -30024,14 +30024,14 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=946
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
>            OR a=47
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>            OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR b=80
>            OR ((a BETWEEN 60 AND 62) AND a!=61)
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>     ]])
>       end, {
>           -- <where7-2.802.1>
> @@ -30045,14 +30045,14 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=946
> -         OR (g='ihgfedc' AND f GLOB 'abcde*')
> +         OR (g='ihgfedc' AND f LIKE 'abcde%')
>            OR a=47
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>            OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
>            OR b=80
>            OR ((a BETWEEN 60 AND 62) AND a!=61)
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>     ]])
>       end, {
>           -- <where7-2.802.2>
> @@ -30069,10 +30069,10 @@ test:do_test(
>            OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
>            OR b=1015
>            OR a=57
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR ((a BETWEEN 47 AND 49) AND a!=48)
>            OR ((a BETWEEN 98 AND 100) AND a!=99)
> -         OR (g='onmlkji' AND f GLOB 'yzabc*')
> +         OR (g='onmlkji' AND f LIKE 'yzabc%')
>            OR (d>=4.0 AND d<5.0 AND d IS NOT NULL)
>            OR b=165
>     ]])
> @@ -30091,10 +30091,10 @@ test:do_test(
>            OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
>            OR b=1015
>            OR a=57
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR ((a BETWEEN 47 AND 49) AND a!=48)
>            OR ((a BETWEEN 98 AND 100) AND a!=99)
> -         OR (g='onmlkji' AND f GLOB 'yzabc*')
> +         OR (g='onmlkji' AND f LIKE 'yzabc%')
>            OR (d>=4.0 AND d<5.0 AND d IS NOT NULL)
>            OR b=165
>     ]])
> @@ -30113,7 +30113,7 @@ test:do_test(
>            OR a=73
>            OR b=1048
>            OR c>=34035
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
>            OR a=72
>            OR ((a BETWEEN 91 AND 93) AND a!=92)
>            OR b=638
> @@ -30133,7 +30133,7 @@ test:do_test(
>            OR a=73
>            OR b=1048
>            OR c>=34035
> -         OR (g='ihgfedc' AND f GLOB 'cdefg*')
> +         OR (g='ihgfedc' AND f LIKE 'cdefg%')
>            OR a=72
>            OR ((a BETWEEN 91 AND 93) AND a!=92)
>            OR b=638
> @@ -30181,10 +30181,10 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=50
>            OR ((a BETWEEN 61 AND 63) AND a!=62)
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>            OR a=32
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
>            OR a=14
>            OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>            OR b=946
> @@ -30204,10 +30204,10 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=50
>            OR ((a BETWEEN 61 AND 63) AND a!=62)
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>            OR a=32
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
>            OR a=14
>            OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>            OR b=946
> @@ -30228,7 +30228,7 @@ test:do_test(
>         WHERE ((a BETWEEN 88 AND 90) AND a!=89)
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.807.1>
> @@ -30244,7 +30244,7 @@ test:do_test(
>         WHERE ((a BETWEEN 88 AND 90) AND a!=89)
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.807.2>
> @@ -30259,7 +30259,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=6
>            OR f='tuvwxyzab'
> -         OR (g='mlkjihg' AND f GLOB 'hijkl*')
> +         OR (g='mlkjihg' AND f LIKE 'hijkl%')
>            OR b=286
>            OR b=781
>     ]])
> @@ -30276,7 +30276,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=6
>            OR f='tuvwxyzab'
> -         OR (g='mlkjihg' AND f GLOB 'hijkl*')
> +         OR (g='mlkjihg' AND f LIKE 'hijkl%')
>            OR b=286
>            OR b=781
>     ]])
> @@ -30291,12 +30291,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 79 AND 81) AND a!=80)
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR f='vwxyzabcd'
>            OR b=275
>     ]])
> @@ -30311,12 +30311,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 79 AND 81) AND a!=80)
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR f='vwxyzabcd'
>            OR b=275
>     ]])
> @@ -30332,10 +30332,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>            OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR a=59
>     ]])
>       end, {
> @@ -30350,10 +30350,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
> -         OR (g='xwvutsr' AND f GLOB 'efghi*')
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='xwvutsr' AND f LIKE 'efghi%')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>            OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'nopqr*')
> +         OR (g='gfedcba' AND f LIKE 'nopqr%')
>            OR a=59
>     ]])
>       end, {
> @@ -30367,10 +30367,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> +      WHERE (f LIKE '_xyza%' AND f LIKE 'wxyz%')
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
> -         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR b=663
>            OR f='ghijklmno'
>            OR ((a BETWEEN 14 AND 16) AND a!=15)
> @@ -30390,10 +30390,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> +      WHERE (f LIKE '_xyza%' AND f LIKE 'wxyz%')
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
> -         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR b=663
>            OR f='ghijklmno'
>            OR ((a BETWEEN 14 AND 16) AND a!=15)
> @@ -30420,9 +30420,9 @@ test:do_test(
>            OR b=597
>            OR ((a BETWEEN 92 AND 94) AND a!=93)
>            OR (d>=88.0 AND d<89.0 AND d IS NOT NULL)
> -         OR (f GLOB '?lmno*' AND f GLOB 'klmn*')
> +         OR (f LIKE '_lmno%' AND f LIKE 'klmn%')
>            OR b=168
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>     ]])
>       end, {
>           -- <where7-2.812.1>
> @@ -30442,9 +30442,9 @@ test:do_test(
>            OR b=597
>            OR ((a BETWEEN 92 AND 94) AND a!=93)
>            OR (d>=88.0 AND d<89.0 AND d IS NOT NULL)
> -         OR (f GLOB '?lmno*' AND f GLOB 'klmn*')
> +         OR (f LIKE '_lmno%' AND f LIKE 'klmn%')
>            OR b=168
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>     ]])
>       end, {
>           -- <where7-2.812.2>
> @@ -30498,7 +30498,7 @@ test:do_test(
>            OR a=75
>            OR b=179
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
>            OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
>            OR b=850
>            OR a=62
> @@ -30519,7 +30519,7 @@ test:do_test(
>            OR a=75
>            OR b=179
>            OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
> -         OR (g='utsrqpo' AND f GLOB 'stuvw*')
> +         OR (g='utsrqpo' AND f LIKE 'stuvw%')
>            OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
>            OR b=850
>            OR a=62
> @@ -30583,7 +30583,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=176
>            OR b=297
> -         OR (g='tsrqpon' AND f GLOB 'zabcd*')
> +         OR (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR f='ijklmnopq'
>     ]])
>       end, {
> @@ -30599,7 +30599,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=176
>            OR b=297
> -         OR (g='tsrqpon' AND f GLOB 'zabcd*')
> +         OR (g='tsrqpon' AND f LIKE 'zabcd%')
>            OR f='ijklmnopq'
>     ]])
>       end, {
> @@ -30653,9 +30653,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=22.0 AND d<23.0 AND d IS NOT NULL)
>            OR b=396
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR b=1012
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR b=784
>            OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
>            OR b=979
> @@ -30676,9 +30676,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=22.0 AND d<23.0 AND d IS NOT NULL)
>            OR b=396
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR b=1012
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR b=784
>            OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
>            OR b=979
> @@ -30726,9 +30726,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 79 AND 81) AND a!=80)
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>     ]])
>       end, {
>           -- <where7-2.820.1>
> @@ -30742,9 +30742,9 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 79 AND 81) AND a!=80)
> -         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
> +         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
>            OR ((a BETWEEN 23 AND 25) AND a!=24)
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>     ]])
>       end, {
>           -- <where7-2.820.2>
> @@ -30830,7 +30830,7 @@ test:do_test(
>            OR c=19019
>            OR b=245
>            OR ((a BETWEEN 97 AND 99) AND a!=98)
> -         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
> +         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
>            OR b=572
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
> @@ -30853,7 +30853,7 @@ test:do_test(
>            OR c=19019
>            OR b=245
>            OR ((a BETWEEN 97 AND 99) AND a!=98)
> -         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
> +         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
>            OR b=572
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
> @@ -30915,7 +30915,7 @@ test:do_test(
>            OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
>            OR b=828
>            OR b=363
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>     ]])
>       end, {
>           -- <where7-2.825.1>
> @@ -30934,7 +30934,7 @@ test:do_test(
>            OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
>            OR b=828
>            OR b=363
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>     ]])
>       end, {
>           -- <where7-2.825.2>
> @@ -30947,7 +30947,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='gfedcba' AND f GLOB 'lmnop*')
> +      WHERE (g='gfedcba' AND f LIKE 'lmnop%')
>            OR a=41
>            OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
>            OR b=825
> @@ -30963,7 +30963,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='gfedcba' AND f GLOB 'lmnop*')
> +      WHERE (g='gfedcba' AND f LIKE 'lmnop%')
>            OR a=41
>            OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
>            OR b=825
> @@ -30986,7 +30986,7 @@ test:do_test(
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>            OR b=561
>            OR c=8008
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>            OR b=935
>            OR c=1001
>     ]])
> @@ -31008,7 +31008,7 @@ test:do_test(
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>            OR b=561
>            OR c=8008
> -         OR (g='hgfedcb' AND f GLOB 'ghijk*')
> +         OR (g='hgfedcb' AND f LIKE 'ghijk%')
>            OR b=935
>            OR c=1001
>     ]])
> @@ -31024,7 +31024,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 75 AND 77) AND a!=76)
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.828.1>
> @@ -31038,7 +31038,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 75 AND 77) AND a!=76)
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.828.2>
> @@ -31114,9 +31114,9 @@ test:do_test(
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
>            OR f='zabcdefgh'
>            OR b=861
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>            OR a=28
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR b=311
>     ]])
>       end, {
> @@ -31137,9 +31137,9 @@ test:do_test(
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
>            OR f='zabcdefgh'
>            OR b=861
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>            OR a=28
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR b=311
>     ]])
>       end, {
> @@ -31154,10 +31154,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=575
> -         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
> +         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
>            OR b=418
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>            OR b=792
>            OR b=861
>            OR b=220
> @@ -31175,10 +31175,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=575
> -         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
> +         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
>            OR b=418
> -         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
> +         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
>            OR b=792
>            OR b=861
>            OR b=220
> @@ -31233,7 +31233,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='qponmlk' AND f GLOB 'qrstu*')
> +      WHERE (g='qponmlk' AND f LIKE 'qrstu%')
>            OR b=693
>            OR a=73
>            OR b=627
> @@ -31243,7 +31243,7 @@ test:do_test(
>            OR b=267
>            OR b=872
>            OR a=27
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.834.1>
> @@ -31256,7 +31256,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='qponmlk' AND f GLOB 'qrstu*')
> +      WHERE (g='qponmlk' AND f LIKE 'qrstu%')
>            OR b=693
>            OR a=73
>            OR b=627
> @@ -31266,7 +31266,7 @@ test:do_test(
>            OR b=267
>            OR b=872
>            OR a=27
> -         OR (g='gfedcba' AND f GLOB 'klmno*')
> +         OR (g='gfedcba' AND f LIKE 'klmno%')
>     ]])
>       end, {
>           -- <where7-2.834.2>
> @@ -31351,15 +31351,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
> +      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR b=66
>            OR b=322
>            OR b=465
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 77 AND 79) AND a!=78)
> -         OR (g='lkjihgf' AND f GLOB 'mnopq*')
> +         OR (g='lkjihgf' AND f LIKE 'mnopq%')
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR b=454
>     ]])
> @@ -31374,15 +31374,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
> +      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR b=66
>            OR b=322
>            OR b=465
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 77 AND 79) AND a!=78)
> -         OR (g='lkjihgf' AND f GLOB 'mnopq*')
> +         OR (g='lkjihgf' AND f LIKE 'mnopq%')
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR b=454
>     ]])
> @@ -31402,7 +31402,7 @@ test:do_test(
>            OR c=15015
>            OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 3 AND 5) AND a!=4)
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>            OR b=803
>     ]])
>       end, {
> @@ -31421,7 +31421,7 @@ test:do_test(
>            OR c=15015
>            OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 3 AND 5) AND a!=4)
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>            OR b=803
>     ]])
>       end, {
> @@ -31436,12 +31436,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=1100
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 72 AND 74) AND a!=73)
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
>            OR a=75
>            OR a=45
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR a=27
>            OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
>            OR b=850
> @@ -31459,12 +31459,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=1100
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 72 AND 74) AND a!=73)
>            OR ((a BETWEEN 68 AND 70) AND a!=69)
>            OR a=75
>            OR a=45
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR a=27
>            OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
>            OR b=850
> @@ -31484,7 +31484,7 @@ test:do_test(
>         WHERE b=751
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
>            OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>            OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
>            OR a=89
>            OR ((a BETWEEN 36 AND 38) AND a!=37)
> @@ -31503,7 +31503,7 @@ test:do_test(
>         WHERE b=751
>            OR ((a BETWEEN 96 AND 98) AND a!=97)
>            OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>            OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
>            OR a=89
>            OR ((a BETWEEN 36 AND 38) AND a!=37)
> @@ -31519,10 +31519,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='wvutsrq' AND f GLOB 'jklmn*')
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> +      WHERE (g='wvutsrq' AND f LIKE 'jklmn%')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
>            OR a=1
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>     ]])
>       end, {
>           -- <where7-2.841.1>
> @@ -31535,10 +31535,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='wvutsrq' AND f GLOB 'jklmn*')
> -         OR (g='yxwvuts' AND f GLOB 'bcdef*')
> +      WHERE (g='wvutsrq' AND f LIKE 'jklmn%')
> +         OR (g='yxwvuts' AND f LIKE 'bcdef%')
>            OR a=1
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
>     ]])
>       end, {
>           -- <where7-2.841.2>
> @@ -31557,9 +31557,9 @@ test:do_test(
>            OR c=8008
>            OR ((a BETWEEN 41 AND 43) AND a!=42)
>            OR b=960
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
>            OR b=443
> -         OR (g='rqponml' AND f GLOB 'ijklm*')
> +         OR (g='rqponml' AND f LIKE 'ijklm%')
>     ]])
>       end, {
>           -- <where7-2.842.1>
> @@ -31578,9 +31578,9 @@ test:do_test(
>            OR c=8008
>            OR ((a BETWEEN 41 AND 43) AND a!=42)
>            OR b=960
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
>            OR b=443
> -         OR (g='rqponml' AND f GLOB 'ijklm*')
> +         OR (g='rqponml' AND f LIKE 'ijklm%')
>     ]])
>       end, {
>           -- <where7-2.842.2>
> @@ -31624,14 +31624,14 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=685
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
>            OR b=520
>            OR (d>=76.0 AND d<77.0 AND d IS NOT NULL)
>            OR a=53
>            OR ((a BETWEEN 91 AND 93) AND a!=92)
>            OR b=938
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR c=25025
>     ]])
>       end, {
> @@ -31646,14 +31646,14 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=685
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
>            OR b=520
>            OR (d>=76.0 AND d<77.0 AND d IS NOT NULL)
>            OR a=53
>            OR ((a BETWEEN 91 AND 93) AND a!=92)
>            OR b=938
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR c=25025
>     ]])
>       end, {
> @@ -31700,7 +31700,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE f='abcdefghi'
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>     ]])
>       end, {
>           -- <where7-2.846.1>
> @@ -31714,7 +31714,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE f='abcdefghi'
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>     ]])
>       end, {
>           -- <where7-2.846.2>
> @@ -31802,7 +31802,7 @@ test:do_test(
>         WHERE b=209
>            OR b=806
>            OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>     ]])
>       end, {
>           -- <where7-2.849.1>
> @@ -31818,7 +31818,7 @@ test:do_test(
>         WHERE b=209
>            OR b=806
>            OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'rstuv*')
> +         OR (g='vutsrqp' AND f LIKE 'rstuv%')
>     ]])
>       end, {
>           -- <where7-2.849.2>
> @@ -31863,10 +31863,10 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=4.0 AND d<5.0 AND d IS NOT NULL)
>            OR a=45
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR a=69
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.851.1>
> @@ -31881,10 +31881,10 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=4.0 AND d<5.0 AND d IS NOT NULL)
>            OR a=45
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR a=69
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.851.2>
> @@ -31899,9 +31899,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE c=9009
>            OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
>     ]])
>       end, {
>           -- <where7-2.852.1>
> @@ -31916,9 +31916,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE c=9009
>            OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'pqrst*')
> +         OR (g='lkjihgf' AND f LIKE 'pqrst%')
>     ]])
>       end, {
>           -- <where7-2.852.2>
> @@ -31937,7 +31937,7 @@ test:do_test(
>            OR a=47
>            OR c=24024
>            OR a=27
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -31957,7 +31957,7 @@ test:do_test(
>            OR a=47
>            OR c=24024
>            OR a=27
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -31971,9 +31971,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR a=19
>     ]])
>       end, {
> @@ -31987,9 +31987,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR a=19
>     ]])
>       end, {
> @@ -32006,7 +32006,7 @@ test:do_test(
>         WHERE c=12012
>            OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 16 AND 18) AND a!=17)
> -         OR (g='edcbazy' AND f GLOB 'uvwxy*')
> +         OR (g='edcbazy' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.855.1>
> @@ -32022,7 +32022,7 @@ test:do_test(
>         WHERE c=12012
>            OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 16 AND 18) AND a!=17)
> -         OR (g='edcbazy' AND f GLOB 'uvwxy*')
> +         OR (g='edcbazy' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.855.2>
> @@ -32036,7 +32036,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 38 AND 40) AND a!=39)
> -         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
> +         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
>            OR b=429
>            OR f='jklmnopqr'
>            OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
> @@ -32054,7 +32054,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 38 AND 40) AND a!=39)
> -         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
> +         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
>            OR b=429
>            OR f='jklmnopqr'
>            OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
> @@ -32071,7 +32071,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='lkjihgf' AND f GLOB 'mnopq*')
> +      WHERE (g='lkjihgf' AND f LIKE 'mnopq%')
>            OR b=190
>     ]])
>       end, {
> @@ -32085,7 +32085,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='lkjihgf' AND f GLOB 'mnopq*')
> +      WHERE (g='lkjihgf' AND f LIKE 'mnopq%')
>            OR b=190
>     ]])
>       end, {
> @@ -32099,7 +32099,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='jihgfed' AND f GLOB 'yzabc*')
> +      WHERE (g='jihgfed' AND f LIKE 'yzabc%')
>            OR b=674
>            OR b=289
>     ]])
> @@ -32114,7 +32114,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='jihgfed' AND f GLOB 'yzabc*')
> +      WHERE (g='jihgfed' AND f LIKE 'yzabc%')
>            OR b=674
>            OR b=289
>     ]])
> @@ -32131,8 +32131,8 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=17
>            OR b=539
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.859.1>
> @@ -32147,8 +32147,8 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=17
>            OR b=539
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> -         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
> +         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.859.2>
> @@ -32259,12 +32259,12 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE f='ghijklmno'
>            OR a=26
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR a=81
>            OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 28 AND 30) AND a!=29)
>            OR b=275
> -         OR (g='hgfedcb' AND f GLOB 'jklmn*')
> +         OR (g='hgfedcb' AND f LIKE 'jklmn%')
>            OR b=311
>            OR b=894
>            OR b=872
> @@ -32282,12 +32282,12 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE f='ghijklmno'
>            OR a=26
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR a=81
>            OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 28 AND 30) AND a!=29)
>            OR b=275
> -         OR (g='hgfedcb' AND f GLOB 'jklmn*')
> +         OR (g='hgfedcb' AND f LIKE 'jklmn%')
>            OR b=311
>            OR b=894
>            OR b=872
> @@ -32376,12 +32376,12 @@ test:do_test(
>         WHERE a=44
>            OR b=55
>            OR a=30
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR 1000000<b
>            OR a=24
>            OR b=1089
>            OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>     ]])
>       end, {
>           -- <where7-2.866.1>
> @@ -32397,12 +32397,12 @@ test:do_test(
>         WHERE a=44
>            OR b=55
>            OR a=30
> -         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR 1000000<b
>            OR a=24
>            OR b=1089
>            OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>     ]])
>       end, {
>           -- <where7-2.866.2>
> @@ -32487,14 +32487,14 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='edcbazy' AND f GLOB 'uvwxy*')
> +      WHERE (g='edcbazy' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 25 AND 27) AND a!=26)
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>            OR f='xyzabcdef'
>            OR b=517
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.869.1>
> @@ -32507,14 +32507,14 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='edcbazy' AND f GLOB 'uvwxy*')
> +      WHERE (g='edcbazy' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 25 AND 27) AND a!=26)
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>            OR ((a BETWEEN 89 AND 91) AND a!=90)
>            OR f='xyzabcdef'
>            OR b=517
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.869.2>
> @@ -32555,9 +32555,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='tsrqpon' AND f GLOB 'yzabc*')
> +      WHERE (g='tsrqpon' AND f LIKE 'yzabc%')
>            OR b=762
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR a=25
>            OR ((a BETWEEN 65 AND 67) AND a!=66)
>     ]])
> @@ -32572,9 +32572,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='tsrqpon' AND f GLOB 'yzabc*')
> +      WHERE (g='tsrqpon' AND f LIKE 'yzabc%')
>            OR b=762
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR a=25
>            OR ((a BETWEEN 65 AND 67) AND a!=66)
>     ]])
> @@ -32594,9 +32594,9 @@ test:do_test(
>            OR b=839
>            OR f='defghijkl'
>            OR (d>=95.0 AND d<96.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR b=498
>     ]])
>       end, {
> @@ -32615,9 +32615,9 @@ test:do_test(
>            OR b=839
>            OR f='defghijkl'
>            OR (d>=95.0 AND d<96.0 AND d IS NOT NULL)
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR b=498
>     ]])
>       end, {
> @@ -32667,7 +32667,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
> +      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=256
>            OR b=586
>            OR a=74
> @@ -32686,7 +32686,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
> +      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
>            OR b=256
>            OR b=586
>            OR a=74
> @@ -32739,14 +32739,14 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=308
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>            OR a=83
>            OR c=23023
>            OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR a=58
>            OR ((a BETWEEN 17 AND 19) AND a!=18)
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>            OR c=4004
>     ]])
>       end, {
> @@ -32762,14 +32762,14 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=308
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
>            OR a=83
>            OR c=23023
>            OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
> -         OR (g='lkjihgf' AND f GLOB 'nopqr*')
> +         OR (g='lkjihgf' AND f LIKE 'nopqr%')
>            OR a=58
>            OR ((a BETWEEN 17 AND 19) AND a!=18)
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>            OR c=4004
>     ]])
>       end, {
> @@ -32789,7 +32789,7 @@ test:do_test(
>            OR b=762
>            OR b=157
>            OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>     ]])
>       end, {
>           -- <where7-2.877.1>
> @@ -32808,7 +32808,7 @@ test:do_test(
>            OR b=762
>            OR b=157
>            OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>     ]])
>       end, {
>           -- <where7-2.877.2>
> @@ -32825,12 +32825,12 @@ test:do_test(
>            OR a=1
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
>            OR b=278
> -         OR (g='xwvutsr' AND f GLOB 'defgh*')
> +         OR (g='xwvutsr' AND f LIKE 'defgh%')
>            OR f='qrstuvwxy'
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>            OR ((a BETWEEN 82 AND 84) AND a!=83)
> -         OR (g='edcbazy' AND f GLOB 'uvwxy*')
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'uvwxy%')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -32848,12 +32848,12 @@ test:do_test(
>            OR a=1
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
>            OR b=278
> -         OR (g='xwvutsr' AND f GLOB 'defgh*')
> +         OR (g='xwvutsr' AND f LIKE 'defgh%')
>            OR f='qrstuvwxy'
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>            OR ((a BETWEEN 82 AND 84) AND a!=83)
> -         OR (g='edcbazy' AND f GLOB 'uvwxy*')
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'uvwxy%')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -32872,9 +32872,9 @@ test:do_test(
>            OR ((a BETWEEN 41 AND 43) AND a!=42)
>            OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
>            OR b=759
> -         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
> +         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
>            OR ((a BETWEEN 45 AND 47) AND a!=46)
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.879.1>
> @@ -32892,9 +32892,9 @@ test:do_test(
>            OR ((a BETWEEN 41 AND 43) AND a!=42)
>            OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
>            OR b=759
> -         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
> +         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
>            OR ((a BETWEEN 45 AND 47) AND a!=46)
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>     ]])
>       end, {
>           -- <where7-2.879.2>
> @@ -32916,7 +32916,7 @@ test:do_test(
>            OR b=44
>            OR f='zabcdefgh'
>            OR b=979
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>     ]])
>       end, {
>           -- <where7-2.880.1>
> @@ -32938,7 +32938,7 @@ test:do_test(
>            OR b=44
>            OR f='zabcdefgh'
>            OR b=979
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>     ]])
>       end, {
>           -- <where7-2.880.2>
> @@ -32988,7 +32988,7 @@ test:do_test(
>            OR ((a BETWEEN 24 AND 26) AND a!=25)
>            OR a=90
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'jklmn*')
> +         OR (g='hgfedcb' AND f LIKE 'jklmn%')
>            OR f='nopqrstuv'
>     ]])
>       end, {
> @@ -33011,7 +33011,7 @@ test:do_test(
>            OR ((a BETWEEN 24 AND 26) AND a!=25)
>            OR a=90
>            OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
> -         OR (g='hgfedcb' AND f GLOB 'jklmn*')
> +         OR (g='hgfedcb' AND f LIKE 'jklmn%')
>            OR f='nopqrstuv'
>     ]])
>       end, {
> @@ -33061,7 +33061,7 @@ test:do_test(
>            OR ((a BETWEEN 4 AND 6) AND a!=5)
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
>            OR d<0.0
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR c=9009
>     ]])
>       end, {
> @@ -33083,7 +33083,7 @@ test:do_test(
>            OR ((a BETWEEN 4 AND 6) AND a!=5)
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
>            OR d<0.0
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR c=9009
>     ]])
>       end, {
> @@ -33097,7 +33097,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR b=814
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>     ]])
> @@ -33112,7 +33112,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
> +      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
>            OR b=814
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>     ]])
> @@ -33127,7 +33127,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='lkjihgf' AND f GLOB 'mnopq*')
> +      WHERE (g='lkjihgf' AND f LIKE 'mnopq%')
>            OR b=333
>            OR b=275
>     ]])
> @@ -33142,7 +33142,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='lkjihgf' AND f GLOB 'mnopq*')
> +      WHERE (g='lkjihgf' AND f LIKE 'mnopq%')
>            OR b=333
>            OR b=275
>     ]])
> @@ -33157,7 +33157,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
> +      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
>     ]])
>       end, {
> @@ -33171,7 +33171,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
> +      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
>     ]])
>       end, {
> @@ -33187,7 +33187,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 11 AND 13) AND a!=12)
>            OR b=253
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR b=286
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>     ]])
> @@ -33204,7 +33204,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 11 AND 13) AND a!=12)
>            OR b=253
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR b=286
>            OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
>     ]])
> @@ -33220,10 +33220,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=15.0 AND d<16.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 26 AND 28) AND a!=27)
>            OR b=421
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>            OR f='ijklmnopq'
>            OR b=891
>            OR b=1056
> @@ -33240,10 +33240,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=15.0 AND d<16.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 26 AND 28) AND a!=27)
>            OR b=421
> -         OR (g='xwvutsr' AND f GLOB 'fghij*')
> +         OR (g='xwvutsr' AND f LIKE 'fghij%')
>            OR f='ijklmnopq'
>            OR b=891
>            OR b=1056
> @@ -33260,10 +33260,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE f='fghijklmn'
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR b=671
> -         OR (g='xwvutsr' AND f GLOB 'hijkl*')
> +         OR (g='xwvutsr' AND f LIKE 'hijkl%')
>     ]])
>       end, {
>           -- <where7-2.890.1>
> @@ -33277,10 +33277,10 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE f='fghijklmn'
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> -         OR (g='edcbazy' AND f GLOB 'vwxyz*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
> +         OR (g='edcbazy' AND f LIKE 'vwxyz%')
>            OR b=671
> -         OR (g='xwvutsr' AND f GLOB 'hijkl*')
> +         OR (g='xwvutsr' AND f LIKE 'hijkl%')
>     ]])
>       end, {
>           -- <where7-2.890.2>
> @@ -33293,10 +33293,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='lkjihgf' AND f GLOB 'lmnop*')
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +      WHERE (g='lkjihgf' AND f LIKE 'lmnop%')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 4 AND 6) AND a!=5)
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -33310,10 +33310,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='lkjihgf' AND f GLOB 'lmnop*')
> -         OR (g='srqponm' AND f GLOB 'fghij*')
> +      WHERE (g='lkjihgf' AND f LIKE 'lmnop%')
> +         OR (g='srqponm' AND f LIKE 'fghij%')
>            OR ((a BETWEEN 4 AND 6) AND a!=5)
> -         OR (g='kjihgfe' AND f GLOB 'qrstu*')
> +         OR (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -33439,11 +33439,11 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 67 AND 69) AND a!=68)
>            OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR a=46
>            OR b=187
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
> -         OR (g='onmlkji' AND f GLOB 'yzabc*')
> +         OR (g='onmlkji' AND f LIKE 'yzabc%')
>     ]])
>       end, {
>           -- <where7-2.895.1>
> @@ -33458,11 +33458,11 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 67 AND 69) AND a!=68)
>            OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR a=46
>            OR b=187
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
> -         OR (g='onmlkji' AND f GLOB 'yzabc*')
> +         OR (g='onmlkji' AND f LIKE 'yzabc%')
>     ]])
>       end, {
>           -- <where7-2.895.2>
> @@ -33522,7 +33522,7 @@ test:do_test(
>            OR b=729
>            OR ((a BETWEEN 81 AND 83) AND a!=82)
>            OR a=58
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR b=608
>     ]])
>       end, {
> @@ -33543,7 +33543,7 @@ test:do_test(
>            OR b=729
>            OR ((a BETWEEN 81 AND 83) AND a!=82)
>            OR a=58
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR b=608
>     ]])
>       end, {
> @@ -33561,7 +33561,7 @@ test:do_test(
>            OR f='efghijklm'
>            OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
>            OR a=26
> -         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
> +         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
>     ]])
>       end, {
>           -- <where7-2.898.1>
> @@ -33578,7 +33578,7 @@ test:do_test(
>            OR f='efghijklm'
>            OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
>            OR a=26
> -         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
> +         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
>     ]])
>       end, {
>           -- <where7-2.898.2>
> @@ -33592,11 +33592,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE a=59
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR a=7
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR b=762
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>     ]])
>       end, {
>           -- <where7-2.899.1>
> @@ -33610,11 +33610,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE a=59
> -         OR (g='wvutsrq' AND f GLOB 'mnopq*')
> +         OR (g='wvutsrq' AND f LIKE 'mnopq%')
>            OR a=7
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR b=762
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>     ]])
>       end, {
>           -- <where7-2.899.2>
> @@ -33627,7 +33627,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
> +      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
>            OR b=539
>            OR b=399
>     ]])
> @@ -33642,7 +33642,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
> +      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
>            OR b=539
>            OR b=399
>     ]])
> @@ -33687,10 +33687,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> +      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
>            OR f='lmnopqrst'
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.902.1>
> @@ -33703,10 +33703,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
> -         OR (g='rqponml' AND f GLOB 'klmno*')
> +      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
> +         OR (g='rqponml' AND f LIKE 'klmno%')
>            OR f='lmnopqrst'
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.902.2>
> @@ -33751,14 +33751,14 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=1067
>            OR ((a BETWEEN 53 AND 55) AND a!=54)
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>            OR b=520
>            OR b=399
>            OR b=209
>            OR a=68
> -         OR (g='fedcbaz' AND f GLOB 'qrstu*')
> +         OR (g='fedcbaz' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.904.1>
> @@ -33773,14 +33773,14 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=1067
>            OR ((a BETWEEN 53 AND 55) AND a!=54)
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>            OR b=520
>            OR b=399
>            OR b=209
>            OR a=68
> -         OR (g='fedcbaz' AND f GLOB 'qrstu*')
> +         OR (g='fedcbaz' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.904.2>
> @@ -33798,7 +33798,7 @@ test:do_test(
>            OR b=55
>            OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 20 AND 22) AND a!=21)
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR ((a BETWEEN 0 AND 2) AND a!=1)
>            OR ((a BETWEEN 21 AND 23) AND a!=22)
>     ]])
> @@ -33818,7 +33818,7 @@ test:do_test(
>            OR b=55
>            OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 20 AND 22) AND a!=21)
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR ((a BETWEEN 0 AND 2) AND a!=1)
>            OR ((a BETWEEN 21 AND 23) AND a!=22)
>     ]])
> @@ -33837,7 +33837,7 @@ test:do_test(
>            OR a=2
>            OR b=784
>            OR ((a BETWEEN 21 AND 23) AND a!=22)
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR b=850
>     ]])
>       end, {
> @@ -33855,7 +33855,7 @@ test:do_test(
>            OR a=2
>            OR b=784
>            OR ((a BETWEEN 21 AND 23) AND a!=22)
> -         OR (g='ihgfedc' AND f GLOB 'defgh*')
> +         OR (g='ihgfedc' AND f LIKE 'defgh%')
>            OR b=850
>     ]])
>       end, {
> @@ -33903,17 +33903,17 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
> +      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
>            OR a=18
>            OR a=30
>            OR ((a BETWEEN 9 AND 11) AND a!=10)
>            OR ((a BETWEEN 84 AND 86) AND a!=85)
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
>            OR b=792
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR ((a BETWEEN 19 AND 21) AND a!=20)
>            OR c=26026
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>     ]])
>       end, {
>           -- <where7-2.908.1>
> @@ -33926,17 +33926,17 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
> +      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
>            OR a=18
>            OR a=30
>            OR ((a BETWEEN 9 AND 11) AND a!=10)
>            OR ((a BETWEEN 84 AND 86) AND a!=85)
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
>            OR b=792
> -         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
> +         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
>            OR ((a BETWEEN 19 AND 21) AND a!=20)
>            OR c=26026
> -         OR (g='rqponml' AND f GLOB 'hijkl*')
> +         OR (g='rqponml' AND f LIKE 'hijkl%')
>     ]])
>       end, {
>           -- <where7-2.908.2>
> @@ -33949,11 +33949,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='vutsrqp' AND f GLOB 'qrstu*')
> +      WHERE (g='vutsrqp' AND f LIKE 'qrstu%')
>            OR b=968
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
> -         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
>            OR a=78
>            OR ((a BETWEEN 90 AND 92) AND a!=91)
> @@ -33969,11 +33969,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='vutsrqp' AND f GLOB 'qrstu*')
> +      WHERE (g='vutsrqp' AND f LIKE 'qrstu%')
>            OR b=968
>            OR ((a BETWEEN 63 AND 65) AND a!=64)
> -         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
>            OR a=78
>            OR ((a BETWEEN 90 AND 92) AND a!=91)
> @@ -34096,7 +34096,7 @@ test:do_test(
>            OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
>            OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
>            OR a=81
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
>            OR f='mnopqrstu'
>     ]])
>       end, {
> @@ -34117,7 +34117,7 @@ test:do_test(
>            OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
>            OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
>            OR a=81
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
>            OR f='mnopqrstu'
>     ]])
>       end, {
> @@ -34177,7 +34177,7 @@ test:do_test(
>            OR ((a BETWEEN 20 AND 22) AND a!=21)
>            OR ((a BETWEEN 27 AND 29) AND a!=28)
>            OR b=319
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR ((a BETWEEN 14 AND 16) AND a!=15)
>     ]])
>       end, {
> @@ -34197,7 +34197,7 @@ test:do_test(
>            OR ((a BETWEEN 20 AND 22) AND a!=21)
>            OR ((a BETWEEN 27 AND 29) AND a!=28)
>            OR b=319
> -         OR (g='qponmlk' AND f GLOB 'opqrs*')
> +         OR (g='qponmlk' AND f LIKE 'opqrs%')
>            OR ((a BETWEEN 14 AND 16) AND a!=15)
>     ]])
>       end, {
> @@ -34214,7 +34214,7 @@ test:do_test(
>         WHERE b=179
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
>            OR a=46
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 53 AND 55) AND a!=54)
>            OR a=25
>            OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
> @@ -34237,7 +34237,7 @@ test:do_test(
>         WHERE b=179
>            OR ((a BETWEEN 95 AND 97) AND a!=96)
>            OR a=46
> -         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
> +         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 53 AND 55) AND a!=54)
>            OR a=25
>            OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
> @@ -34257,7 +34257,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='nmlkjih' AND f GLOB 'fghij*')
> +      WHERE (g='nmlkjih' AND f LIKE 'fghij%')
>            OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -34271,7 +34271,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='nmlkjih' AND f GLOB 'fghij*')
> +      WHERE (g='nmlkjih' AND f LIKE 'fghij%')
>            OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -34286,7 +34286,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=748
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR a=32
>            OR b=110
>            OR b=297
> @@ -34308,7 +34308,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=748
> -         OR (g='utsrqpo' AND f GLOB 'wxyza*')
> +         OR (g='utsrqpo' AND f LIKE 'wxyza%')
>            OR a=32
>            OR b=110
>            OR b=297
> @@ -34332,13 +34332,13 @@ test:do_test(
>         WHERE (d>=33.0 AND d<34.0 AND d IS NOT NULL)
>            OR b=905
>            OR a=97
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR c=27027
>            OR f='bcdefghij'
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>            OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 38 AND 40) AND a!=39)
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
>     ]])
>       end, {
>           -- <where7-2.919.1>
> @@ -34354,13 +34354,13 @@ test:do_test(
>         WHERE (d>=33.0 AND d<34.0 AND d IS NOT NULL)
>            OR b=905
>            OR a=97
> -         OR (g='hgfedcb' AND f GLOB 'hijkl*')
> +         OR (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR c=27027
>            OR f='bcdefghij'
>            OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
>            OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 38 AND 40) AND a!=39)
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
>     ]])
>       end, {
>           -- <where7-2.919.2>
> @@ -34403,13 +34403,13 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=594
>            OR b=80
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
>            OR b=421
>            OR b=418
>            OR b=828
>            OR a=88
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -34425,13 +34425,13 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=594
>            OR b=80
> -         OR (g='tsrqpon' AND f GLOB 'bcdef*')
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> +         OR (g='tsrqpon' AND f LIKE 'bcdef%')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
>            OR b=421
>            OR b=418
>            OR b=828
>            OR a=88
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -34446,11 +34446,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=17.0 AND d<18.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>            OR b=366
>            OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
>            OR c=16016
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR c=9009
>     ]])
>       end, {
> @@ -34465,11 +34465,11 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=17.0 AND d<18.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'xyzab*')
> +         OR (g='jihgfed' AND f LIKE 'xyzab%')
>            OR b=366
>            OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
>            OR c=16016
> -         OR (g='edcbazy' AND f GLOB 'wxyza*')
> +         OR (g='edcbazy' AND f LIKE 'wxyza%')
>            OR c=9009
>     ]])
>       end, {
> @@ -34485,7 +34485,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=33
>            OR f='qrstuvwxy'
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR b=858
>     ]])
>       end, {
> @@ -34501,7 +34501,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=33
>            OR f='qrstuvwxy'
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR b=858
>     ]])
>       end, {
> @@ -34516,7 +34516,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=861
> -         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> +         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
>            OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
>            OR b=682
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
> @@ -34534,7 +34534,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=861
> -         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
> +         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
>            OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
>            OR b=682
>            OR ((a BETWEEN 93 AND 95) AND a!=94)
> @@ -34584,7 +34584,7 @@ test:do_test(
>         WHERE f='abcdefghi'
>            OR c=9009
>            OR b=663
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR b=91
>     ]])
>       end, {
> @@ -34601,7 +34601,7 @@ test:do_test(
>         WHERE f='abcdefghi'
>            OR c=9009
>            OR b=663
> -         OR (g='wvutsrq' AND f GLOB 'klmno*')
> +         OR (g='wvutsrq' AND f LIKE 'klmno%')
>            OR b=91
>     ]])
>       end, {
> @@ -34615,15 +34615,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='kjihgfe' AND f GLOB 'qrstu*')
> +      WHERE (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR ((a BETWEEN 29 AND 31) AND a!=30)
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR b=1015
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>            OR b=916
>            OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
>            OR b=69
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.927.1>
> @@ -34636,15 +34636,15 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='kjihgfe' AND f GLOB 'qrstu*')
> +      WHERE (g='kjihgfe' AND f LIKE 'qrstu%')
>            OR ((a BETWEEN 29 AND 31) AND a!=30)
> -         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
> +         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
>            OR b=1015
> -         OR (g='qponmlk' AND f GLOB 'qrstu*')
> +         OR (g='qponmlk' AND f LIKE 'qrstu%')
>            OR b=916
>            OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
>            OR b=69
> -         OR (g='hgfedcb' AND f GLOB 'fghij*')
> +         OR (g='hgfedcb' AND f LIKE 'fghij%')
>     ]])
>       end, {
>           -- <where7-2.927.2>
> @@ -34664,7 +34664,7 @@ test:do_test(
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
>            OR a=63
>            OR f='mnopqrstu'
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR b=495
>            OR a=35
>            OR a=22
> @@ -34687,7 +34687,7 @@ test:do_test(
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
>            OR a=63
>            OR f='mnopqrstu'
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR b=495
>            OR a=35
>            OR a=22
> @@ -34704,7 +34704,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=869
> -         OR (g='rqponml' AND f GLOB 'jklmn*')
> +         OR (g='rqponml' AND f LIKE 'jklmn%')
>            OR b=289
>            OR a=62
>            OR ((a BETWEEN 9 AND 11) AND a!=10)
> @@ -34721,7 +34721,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=869
> -         OR (g='rqponml' AND f GLOB 'jklmn*')
> +         OR (g='rqponml' AND f LIKE 'jklmn%')
>            OR b=289
>            OR a=62
>            OR ((a BETWEEN 9 AND 11) AND a!=10)
> @@ -34774,7 +34774,7 @@ test:do_test(
>         WHERE ((a BETWEEN 57 AND 59) AND a!=58)
>            OR b=1078
>            OR ((a BETWEEN 21 AND 23) AND a!=22)
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
>            OR b=429
>     ]])
> @@ -34792,7 +34792,7 @@ test:do_test(
>         WHERE ((a BETWEEN 57 AND 59) AND a!=58)
>            OR b=1078
>            OR ((a BETWEEN 21 AND 23) AND a!=22)
> -         OR (g='mlkjihg' AND f GLOB 'ijklm*')
> +         OR (g='mlkjihg' AND f LIKE 'ijklm%')
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
>            OR b=429
>     ]])
> @@ -34876,7 +34876,7 @@ test:do_test(
>         WHERE (d>=56.0 AND d<57.0 AND d IS NOT NULL)
>            OR b=858
>            OR a=58
> -         OR (g='onmlkji' AND f GLOB 'xyzab*')
> +         OR (g='onmlkji' AND f LIKE 'xyzab%')
>            OR c=21021
>            OR ((a BETWEEN 45 AND 47) AND a!=46)
>            OR b=616
> @@ -34897,7 +34897,7 @@ test:do_test(
>         WHERE (d>=56.0 AND d<57.0 AND d IS NOT NULL)
>            OR b=858
>            OR a=58
> -         OR (g='onmlkji' AND f GLOB 'xyzab*')
> +         OR (g='onmlkji' AND f LIKE 'xyzab%')
>            OR c=21021
>            OR ((a BETWEEN 45 AND 47) AND a!=46)
>            OR b=616
> @@ -34917,7 +34917,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=682
>            OR b=99
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>            OR b=531
>     ]])
>       end, {
> @@ -34933,7 +34933,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=682
>            OR b=99
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>            OR b=531
>     ]])
>       end, {
> @@ -34948,13 +34948,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 56 AND 58) AND a!=57)
> -         OR (g='kjihgfe' AND f GLOB 'stuvw*')
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +         OR (g='kjihgfe' AND f LIKE 'stuvw%')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>            OR b=726
>            OR a=79
>            OR a=47
>            OR b=212
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR c=8008
>     ]])
>       end, {
> @@ -34969,13 +34969,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 56 AND 58) AND a!=57)
> -         OR (g='kjihgfe' AND f GLOB 'stuvw*')
> -         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
> +         OR (g='kjihgfe' AND f LIKE 'stuvw%')
> +         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
>            OR b=726
>            OR a=79
>            OR a=47
>            OR b=212
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>            OR c=8008
>     ]])
>       end, {
> @@ -34993,7 +34993,7 @@ test:do_test(
>            OR ((a BETWEEN 60 AND 62) AND a!=61)
>            OR a=5
>            OR b=33
> -         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
> +         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
>            OR a=59
>            OR b=44
>            OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
> @@ -35014,7 +35014,7 @@ test:do_test(
>            OR ((a BETWEEN 60 AND 62) AND a!=61)
>            OR a=5
>            OR b=33
> -         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
> +         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
>            OR a=59
>            OR b=44
>            OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
> @@ -35213,8 +35213,8 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE a=96
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
>            OR ((a BETWEEN 37 AND 39) AND a!=38)
>            OR a=85
>            OR ((a BETWEEN 10 AND 12) AND a!=11)
> @@ -35236,8 +35236,8 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE a=96
>            OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
> -         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
> +         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
> +         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
>            OR ((a BETWEEN 37 AND 39) AND a!=38)
>            OR a=85
>            OR ((a BETWEEN 10 AND 12) AND a!=11)
> @@ -35299,17 +35299,17 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
> +      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
>            OR a=60
>            OR a=4
>            OR b=520
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR a=44
>            OR a=36
>            OR (d>=76.0 AND d<77.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'qrstu*')
> +         OR (g='vutsrqp' AND f LIKE 'qrstu%')
>            OR b=715
> -         OR (g='vutsrqp' AND f GLOB 'qrstu*')
> +         OR (g='vutsrqp' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.945.1>
> @@ -35322,17 +35322,17 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
> +      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
>            OR a=60
>            OR a=4
>            OR b=520
> -         OR (g='ihgfedc' AND f GLOB 'bcdef*')
> +         OR (g='ihgfedc' AND f LIKE 'bcdef%')
>            OR a=44
>            OR a=36
>            OR (d>=76.0 AND d<77.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'qrstu*')
> +         OR (g='vutsrqp' AND f LIKE 'qrstu%')
>            OR b=715
> -         OR (g='vutsrqp' AND f GLOB 'qrstu*')
> +         OR (g='vutsrqp' AND f LIKE 'qrstu%')
>     ]])
>       end, {
>           -- <where7-2.945.2>
> @@ -35349,10 +35349,10 @@ test:do_test(
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
>            OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
>            OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
>            OR a=24
>            OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>     ]])
>       end, {
>           -- <where7-2.946.1>
> @@ -35369,10 +35369,10 @@ test:do_test(
>            OR ((a BETWEEN 56 AND 58) AND a!=57)
>            OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
>            OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'yzabc*')
> +         OR (g='jihgfed' AND f LIKE 'yzabc%')
>            OR a=24
>            OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
> -         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
> +         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
>     ]])
>       end, {
>           -- <where7-2.946.2>
> @@ -35385,12 +35385,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='utsrqpo' AND f GLOB 'vwxyz*')
> +      WHERE (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR b=132
>            OR f='ghijklmno'
>            OR b=740
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR b=1059
>     ]])
>       end, {
> @@ -35404,12 +35404,12 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='utsrqpo' AND f GLOB 'vwxyz*')
> +      WHERE (g='utsrqpo' AND f LIKE 'vwxyz%')
>            OR b=132
>            OR f='ghijklmno'
>            OR b=740
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR b=1059
>     ]])
>       end, {
> @@ -35459,10 +35459,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='nmlkjih' AND f GLOB 'cdefg*')
> +      WHERE (g='nmlkjih' AND f LIKE 'cdefg%')
>            OR b=1026
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'lmnop*')
> +         OR (g='wvutsrq' AND f LIKE 'lmnop%')
>            OR b=355
>            OR b=641
>            OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
> @@ -35478,10 +35478,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='nmlkjih' AND f GLOB 'cdefg*')
> +      WHERE (g='nmlkjih' AND f LIKE 'cdefg%')
>            OR b=1026
>            OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
> -         OR (g='wvutsrq' AND f GLOB 'lmnop*')
> +         OR (g='wvutsrq' AND f LIKE 'lmnop%')
>            OR b=355
>            OR b=641
>            OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
> @@ -35506,7 +35506,7 @@ test:do_test(
>            OR f='opqrstuvw'
>            OR a=41
>            OR a=83
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>            OR b=751
>     ]])
>       end, {
> @@ -35529,7 +35529,7 @@ test:do_test(
>            OR f='opqrstuvw'
>            OR a=41
>            OR a=83
> -         OR (g='nmlkjih' AND f GLOB 'cdefg*')
> +         OR (g='nmlkjih' AND f LIKE 'cdefg%')
>            OR b=751
>     ]])
>       end, {
> @@ -35579,7 +35579,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='qponmlk' AND f GLOB 'qrstu*')
> +      WHERE (g='qponmlk' AND f LIKE 'qrstu%')
>            OR f='bcdefghij'
>            OR f='hijklmnop'
>            OR a=65
> @@ -35602,7 +35602,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='qponmlk' AND f GLOB 'qrstu*')
> +      WHERE (g='qponmlk' AND f LIKE 'qrstu%')
>            OR f='bcdefghij'
>            OR f='hijklmnop'
>            OR a=65
> @@ -35625,11 +35625,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='jihgfed' AND f GLOB 'vwxyz*')
> +      WHERE (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 10 AND 12) AND a!=11)
>            OR ((a BETWEEN 79 AND 81) AND a!=80)
> -         OR (g='kjihgfe' AND f GLOB 'stuvw*')
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='kjihgfe' AND f LIKE 'stuvw%')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR b=1100
>            OR c=6006
>            OR c=4004
> @@ -35647,11 +35647,11 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='jihgfed' AND f GLOB 'vwxyz*')
> +      WHERE (g='jihgfed' AND f LIKE 'vwxyz%')
>            OR ((a BETWEEN 10 AND 12) AND a!=11)
>            OR ((a BETWEEN 79 AND 81) AND a!=80)
> -         OR (g='kjihgfe' AND f GLOB 'stuvw*')
> -         OR (g='qponmlk' AND f GLOB 'pqrst*')
> +         OR (g='kjihgfe' AND f LIKE 'stuvw%')
> +         OR (g='qponmlk' AND f LIKE 'pqrst%')
>            OR b=1100
>            OR c=6006
>            OR c=4004
> @@ -35728,7 +35728,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE (d>=42.0 AND d<43.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR ((a BETWEEN 21 AND 23) AND a!=22)
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>            OR b=737
> @@ -35745,7 +35745,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE (d>=42.0 AND d<43.0 AND d IS NOT NULL)
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR ((a BETWEEN 21 AND 23) AND a!=22)
>            OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
>            OR b=737
> @@ -35761,7 +35761,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='rqponml' AND f GLOB 'klmno*')
> +      WHERE (g='rqponml' AND f LIKE 'klmno%')
>            OR ((a BETWEEN 5 AND 7) AND a!=6)
>     ]])
>       end, {
> @@ -35775,7 +35775,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='rqponml' AND f GLOB 'klmno*')
> +      WHERE (g='rqponml' AND f LIKE 'klmno%')
>            OR ((a BETWEEN 5 AND 7) AND a!=6)
>     ]])
>       end, {
> @@ -35789,7 +35789,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
> +      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR c=32032
>            OR f='opqrstuvw'
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
> @@ -35807,7 +35807,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
> +      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
>            OR c=32032
>            OR f='opqrstuvw'
>            OR ((a BETWEEN 66 AND 68) AND a!=67)
> @@ -35875,11 +35875,11 @@ test:do_test(
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
>            OR ((a BETWEEN 86 AND 88) AND a!=87)
>            OR b=146
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR ((a BETWEEN 73 AND 75) AND a!=74)
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 60 AND 62) AND a!=61)
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR b=704
>     ]])
>       end, {
> @@ -35897,11 +35897,11 @@ test:do_test(
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
>            OR ((a BETWEEN 86 AND 88) AND a!=87)
>            OR b=146
> -         OR (g='ponmlkj' AND f GLOB 'rstuv*')
> +         OR (g='ponmlkj' AND f LIKE 'rstuv%')
>            OR ((a BETWEEN 73 AND 75) AND a!=74)
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
>            OR ((a BETWEEN 60 AND 62) AND a!=61)
> -         OR (g='ihgfedc' AND f GLOB 'efghi*')
> +         OR (g='ihgfedc' AND f LIKE 'efghi%')
>            OR b=704
>     ]])
>       end, {
> @@ -35950,7 +35950,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE c=17017
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
>            OR b=971
>            OR a=37
>            OR a=7
> @@ -35970,7 +35970,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE c=17017
> -         OR (g='qponmlk' AND f GLOB 'mnopq*')
> +         OR (g='qponmlk' AND f LIKE 'mnopq%')
>            OR b=971
>            OR a=37
>            OR a=7
> @@ -35990,7 +35990,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE f='tuvwxyzab'
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>     ]])
>       end, {
>           -- <where7-2.963.1>
> @@ -36004,7 +36004,7 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE f='tuvwxyzab'
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>     ]])
>       end, {
>           -- <where7-2.963.2>
> @@ -36019,7 +36019,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=638
>            OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>            OR b=165
>            OR ((a BETWEEN 10 AND 12) AND a!=11)
>            OR f='stuvwxyza'
> @@ -36041,7 +36041,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=638
>            OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
> -         OR (g='gfedcba' AND f GLOB 'lmnop*')
> +         OR (g='gfedcba' AND f LIKE 'lmnop%')
>            OR b=165
>            OR ((a BETWEEN 10 AND 12) AND a!=11)
>            OR f='stuvwxyza'
> @@ -36067,7 +36067,7 @@ test:do_test(
>            OR a=93
>            OR b=858
>            OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.965.1>
> @@ -36086,7 +36086,7 @@ test:do_test(
>            OR a=93
>            OR b=858
>            OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
> -         OR (g='jihgfed' AND f GLOB 'vwxyz*')
> +         OR (g='jihgfed' AND f LIKE 'vwxyz%')
>     ]])
>       end, {
>           -- <where7-2.965.2>
> @@ -36157,7 +36157,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='qponmlk' AND f GLOB 'mnopq*')
> +      WHERE (g='qponmlk' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 24 AND 26) AND a!=25)
>            OR a=5
>            OR b=396
> @@ -36174,7 +36174,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='qponmlk' AND f GLOB 'mnopq*')
> +      WHERE (g='qponmlk' AND f LIKE 'mnopq%')
>            OR ((a BETWEEN 24 AND 26) AND a!=25)
>            OR a=5
>            OR b=396
> @@ -36191,7 +36191,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
> +      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=748
>            OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
> @@ -36210,7 +36210,7 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
> +      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
>            OR b=748
>            OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 69 AND 71) AND a!=70)
> @@ -36231,7 +36231,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR a=50
>            OR a=46
>            OR ((a BETWEEN 38 AND 40) AND a!=39)
> @@ -36249,7 +36249,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 8 AND 10) AND a!=9)
> -         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
> +         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
>            OR a=50
>            OR a=46
>            OR ((a BETWEEN 38 AND 40) AND a!=39)
> @@ -36312,7 +36312,7 @@ test:do_test(
>            OR c=16016
>            OR b=1078
>            OR b=960
> -         OR (g='hgfedcb' AND f GLOB 'jklmn*')
> +         OR (g='hgfedcb' AND f LIKE 'jklmn%')
>     ]])
>       end, {
>           -- <where7-2.972.1>
> @@ -36330,7 +36330,7 @@ test:do_test(
>            OR c=16016
>            OR b=1078
>            OR b=960
> -         OR (g='hgfedcb' AND f GLOB 'jklmn*')
> +         OR (g='hgfedcb' AND f LIKE 'jklmn%')
>     ]])
>       end, {
>           -- <where7-2.972.2>
> @@ -36345,7 +36345,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=1081
>            OR ((a BETWEEN 19 AND 21) AND a!=20)
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
>            OR ((a BETWEEN 73 AND 75) AND a!=74)
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR a=6
> @@ -36363,7 +36363,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=1081
>            OR ((a BETWEEN 19 AND 21) AND a!=20)
> -         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
> +         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
>            OR ((a BETWEEN 73 AND 75) AND a!=74)
>            OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
>            OR a=6
> @@ -36379,10 +36379,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR a=92
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR f='fghijklmn'
>            OR a=100
>            OR b=209
> @@ -36402,10 +36402,10 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
> -         OR (g='rqponml' AND f GLOB 'lmnop*')
> +      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
> +         OR (g='rqponml' AND f LIKE 'lmnop%')
>            OR a=92
> -         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
> +         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
>            OR f='fghijklmn'
>            OR a=100
>            OR b=209
> @@ -36458,13 +36458,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 51 AND 53) AND a!=52)
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR b=91
>            OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
>            OR b=77
> -         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>     ]])
>       end, {
>           -- <where7-2.976.1>
> @@ -36478,13 +36478,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 51 AND 53) AND a!=52)
> -         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
> -         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
> +         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR b=91
>            OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
>            OR b=77
> -         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
> -         OR (g='vutsrqp' AND f GLOB 'pqrst*')
> +         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
> +         OR (g='vutsrqp' AND f LIKE 'pqrst%')
>     ]])
>       end, {
>           -- <where7-2.976.2>
> @@ -36582,13 +36582,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=737
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>            OR a=40
>            OR f='uvwxyzabc'
>            OR b=311
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR b=927
>            OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
>     ]])
> @@ -36604,13 +36604,13 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=737
> -         OR (g='wvutsrq' AND f GLOB 'ijklm*')
> -         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
> +         OR (g='wvutsrq' AND f LIKE 'ijklm%')
> +         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
>            OR a=40
>            OR f='uvwxyzabc'
>            OR b=311
> -         OR (g='nmlkjih' AND f GLOB 'bcdef*')
> -         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
> +         OR (g='nmlkjih' AND f LIKE 'bcdef%')
> +         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
>            OR b=927
>            OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
>     ]])
> @@ -36657,16 +36657,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
> +      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR b=487
>            OR f='tuvwxyzab'
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR b=971
>            OR c=19019
>            OR a=39
> -         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
> +         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
>            OR b=550
> -         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
> +         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
>            OR b=660
>     ]])
>       end, {
> @@ -36680,16 +36680,16 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
> +      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
>            OR b=487
>            OR f='tuvwxyzab'
> -         OR (g='onmlkji' AND f GLOB 'wxyza*')
> +         OR (g='onmlkji' AND f LIKE 'wxyza%')
>            OR b=971
>            OR c=19019
>            OR a=39
> -         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
> +         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
>            OR b=550
> -         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
> +         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
>            OR b=660
>     ]])
>       end, {
> @@ -36735,7 +36735,7 @@ test:do_test(
>            OR b=630
>            OR b=935
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR f='yzabcdefg'
>            OR ((a BETWEEN 37 AND 39) AND a!=38)
>     ]])
> @@ -36754,7 +36754,7 @@ test:do_test(
>            OR b=630
>            OR b=935
>            OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
> -         OR (g='srqponm' AND f GLOB 'defgh*')
> +         OR (g='srqponm' AND f LIKE 'defgh%')
>            OR f='yzabcdefg'
>            OR ((a BETWEEN 37 AND 39) AND a!=38)
>     ]])
> @@ -36774,7 +36774,7 @@ test:do_test(
>            OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
>            OR f='abcdefghi'
>            OR b=696
> -         OR (g='vutsrqp' AND f GLOB 'qrstu*')
> +         OR (g='vutsrqp' AND f LIKE 'qrstu%')
>            OR b=682
>            OR a=32
>            OR ((a BETWEEN 34 AND 36) AND a!=35)
> @@ -36797,7 +36797,7 @@ test:do_test(
>            OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
>            OR f='abcdefghi'
>            OR b=696
> -         OR (g='vutsrqp' AND f GLOB 'qrstu*')
> +         OR (g='vutsrqp' AND f LIKE 'qrstu%')
>            OR b=682
>            OR a=32
>            OR ((a BETWEEN 34 AND 36) AND a!=35)
> @@ -36815,8 +36815,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (g='gfedcba' AND f GLOB 'lmnop*')
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +      WHERE (g='gfedcba' AND f LIKE 'lmnop%')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR b=311
>     ]])
>       end, {
> @@ -36830,8 +36830,8 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (g='gfedcba' AND f GLOB 'lmnop*')
> -         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
> +      WHERE (g='gfedcba' AND f LIKE 'lmnop%')
> +         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
>            OR b=311
>     ]])
>       end, {
> @@ -36884,7 +36884,7 @@ test:do_test(
>         WHERE ((a BETWEEN 98 AND 100) AND a!=99)
>            OR b=110
>            OR ((a BETWEEN 38 AND 40) AND a!=39)
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR b=484
>            OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
>     ]])
> @@ -36902,7 +36902,7 @@ test:do_test(
>         WHERE ((a BETWEEN 98 AND 100) AND a!=99)
>            OR b=110
>            OR ((a BETWEEN 38 AND 40) AND a!=39)
> -         OR (g='tsrqpon' AND f GLOB 'xyzab*')
> +         OR (g='tsrqpon' AND f LIKE 'xyzab%')
>            OR b=484
>            OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
>     ]])
> @@ -36925,7 +36925,7 @@ test:do_test(
>            OR c=27027
>            OR b=1026
>            OR c=6006
> -         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
> +         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -36947,7 +36947,7 @@ test:do_test(
>            OR c=27027
>            OR b=1026
>            OR c=6006
> -         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
> +         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
>            OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
>     ]])
>       end, {
> @@ -36963,11 +36963,11 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE (d>=79.0 AND d<80.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>            OR a=97
>            OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR b=674
>            OR c=14014
>            OR b=69
> @@ -36985,11 +36985,11 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE (d>=79.0 AND d<80.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 18 AND 20) AND a!=19)
> -         OR (g='qponmlk' AND f GLOB 'nopqr*')
> +         OR (g='qponmlk' AND f LIKE 'nopqr%')
>            OR a=97
>            OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
>            OR ((a BETWEEN 22 AND 24) AND a!=23)
> -         OR (g='mlkjihg' AND f GLOB 'ghijk*')
> +         OR (g='mlkjihg' AND f LIKE 'ghijk%')
>            OR b=674
>            OR c=14014
>            OR b=69
> @@ -37039,12 +37039,12 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=451
>            OR ((a BETWEEN 11 AND 13) AND a!=12)
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR b=539
>            OR a=26
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>            OR b=465
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>     ]])
>       end, {
>           -- <where7-2.991.1>
> @@ -37059,12 +37059,12 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=451
>            OR ((a BETWEEN 11 AND 13) AND a!=12)
> -         OR (g='tsrqpon' AND f GLOB 'abcde*')
> +         OR (g='tsrqpon' AND f LIKE 'abcde%')
>            OR b=539
>            OR a=26
> -         OR (g='srqponm' AND f GLOB 'efghi*')
> +         OR (g='srqponm' AND f LIKE 'efghi%')
>            OR b=465
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>     ]])
>       end, {
>           -- <where7-2.991.2>
> @@ -37135,9 +37135,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t2
> -      WHERE (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +      WHERE (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR a=13
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>            OR b=322
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
>            OR b=377
> @@ -37156,9 +37156,9 @@ test:do_test(
>       function()
>           return count_steps_sort([[
>        SELECT a FROM t3
> -      WHERE (f GLOB '?cdef*' AND f GLOB 'bcde*')
> +      WHERE (f LIKE '_cdef%' AND f LIKE 'bcde%')
>            OR a=13
> -         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
> +         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
>            OR b=322
>            OR ((a BETWEEN 33 AND 35) AND a!=34)
>            OR b=377
> @@ -37181,9 +37181,9 @@ test:do_test(
>            OR b=990
>            OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
>            OR b=605
> -         OR (g='srqponm' AND f GLOB 'cdefg*')
> +         OR (g='srqponm' AND f LIKE 'cdefg%')
>            OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'qrstu*')
> +         OR (g='vutsrqp' AND f LIKE 'qrstu%')
>            OR b=968
>            OR a=66
>     ]])
> @@ -37202,9 +37202,9 @@ test:do_test(
>            OR b=990
>            OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
>            OR b=605
> -         OR (g='srqponm' AND f GLOB 'cdefg*')
> +         OR (g='srqponm' AND f LIKE 'cdefg%')
>            OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
> -         OR (g='vutsrqp' AND f GLOB 'qrstu*')
> +         OR (g='vutsrqp' AND f LIKE 'qrstu%')
>            OR b=968
>            OR a=66
>     ]])
> @@ -37220,12 +37220,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t2
>         WHERE b=1059
> -         OR (g='srqponm' AND f GLOB 'ghijk*')
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='srqponm' AND f LIKE 'ghijk%')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
>            OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>            OR ((a BETWEEN 39 AND 41) AND a!=40)
>     ]])
>       end, {
> @@ -37240,12 +37240,12 @@ test:do_test(
>           return count_steps_sort([[
>        SELECT a FROM t3
>         WHERE b=1059
> -         OR (g='srqponm' AND f GLOB 'ghijk*')
> -         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
> -         OR (g='nmlkjih' AND f GLOB 'fghij*')
> +         OR (g='srqponm' AND f LIKE 'ghijk%')
> +         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
> +         OR (g='nmlkjih' AND f LIKE 'fghij%')
>            OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
>            OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
> -         OR (g='onmlkji' AND f GLOB 'abcde*')
> +         OR (g='onmlkji' AND f LIKE 'abcde%')
>            OR ((a BETWEEN 39 AND 41) AND a!=40)
>     ]])
>       end, {
> @@ -37261,7 +37261,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE ((a BETWEEN 41 AND 43) AND a!=42)
>            OR f='nopqrstuv'
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR a=42
>            OR b=729
>            OR b=297
> @@ -37282,7 +37282,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE ((a BETWEEN 41 AND 43) AND a!=42)
>            OR f='nopqrstuv'
> -         OR (g='ponmlkj' AND f GLOB 'stuvw*')
> +         OR (g='ponmlkj' AND f LIKE 'stuvw%')
>            OR a=42
>            OR b=729
>            OR b=297
> @@ -37337,9 +37337,9 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=451
>            OR b=660
> -         OR (g='onmlkji' AND f GLOB 'yzabc*')
> +         OR (g='onmlkji' AND f LIKE 'yzabc%')
>            OR b=781
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR b=198
>            OR b=1023
>            OR a=98
> @@ -37359,9 +37359,9 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=451
>            OR b=660
> -         OR (g='onmlkji' AND f GLOB 'yzabc*')
> +         OR (g='onmlkji' AND f LIKE 'yzabc%')
>            OR b=781
> -         OR (g='jihgfed' AND f GLOB 'wxyza*')
> +         OR (g='jihgfed' AND f LIKE 'wxyza%')
>            OR b=198
>            OR b=1023
>            OR a=98
> @@ -37383,7 +37383,7 @@ test:do_test(
>            OR a=86
>            OR c=17017
>            OR ((a BETWEEN 85 AND 87) AND a!=86)
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR a=80
>            OR b=773
>     ]])
> @@ -37402,7 +37402,7 @@ test:do_test(
>            OR a=86
>            OR c=17017
>            OR ((a BETWEEN 85 AND 87) AND a!=86)
> -         OR (g='gfedcba' AND f GLOB 'mnopq*')
> +         OR (g='gfedcba' AND f LIKE 'mnopq%')
>            OR a=80
>            OR b=773
>     ]])
> @@ -37419,7 +37419,7 @@ test:do_test(
>        SELECT a FROM t2
>         WHERE b=1092
>            OR a=23
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>            OR d<0.0
>            OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
>            OR a=91
> @@ -37437,7 +37437,7 @@ test:do_test(
>        SELECT a FROM t3
>         WHERE b=1092
>            OR a=23
> -         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
> +         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
>            OR d<0.0
>            OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
>            OR a=91

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-08-17  8:25   ` [tarantool-patches] " Alex Khatskevich
@ 2018-08-17  8:49     ` n.pettik
  2018-08-17  9:01       ` Alex Khatskevich
       [not found]     ` <04D02794-07A5-4146-9144-84EE720C8656@corp.mail.ru>
                       ` (3 subsequent siblings)
  4 siblings, 1 reply; 46+ messages in thread
From: n.pettik @ 2018-08-17  8:49 UTC (permalink / raw)
  To: tarantool-patches; +Cc: AKhatskevich, N. Tatunov, Alexander Turenko


> On 17 Aug 2018, at 11:25, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
> 
> Do not split error messages at the middle of a sentence. It makes errors ungreppable.
> Make it <80 somehow different.

I guess this is extremely specific nitpicking: look at src/box/alter.cc: 
through the code there are a lot of breaks of error messages like:

alter.c : 405

tnt_raise(ClientError, errcode, tt_cstr(space_name, name_len),
         tt_sprintf("field %d has conflicting nullability and "
                   "nullable action properties", fieldno +
                   TUPLE_INDEX_BASE));

alter.cc : 524

if (exact_field_count != 0 &&
    exact_field_count < field_count) {
       tnt_raise(ClientError, errcode, tt_cstr(name, name_len),
                "exact_field_count must be either 0 or >= "\
                "formatted field count”);

etc

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
       [not found]     ` <04D02794-07A5-4146-9144-84EE720C8656@corp.mail.ru>
@ 2018-08-17  8:53       ` Alex Khatskevich
  0 siblings, 0 replies; 46+ messages in thread
From: Alex Khatskevich @ 2018-08-17  8:53 UTC (permalink / raw)
  To: n.pettik, tarantool-patches; +Cc: N. Tatunov, Alexander Turenko

[-- Attachment #1: Type: text/plain, Size: 1149 bytes --]

Accepted.


On 17.08.2018 11:37, n.pettik@corp.mail.ru wrote:
>
>> On 17 Aug 2018, at 11:25, Alex Khatskevich 
>> <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> wrote:
>>
>>> GLOB is a legacy extension for LIKE from SQLite. As we want our SQL to
>>> be close to ANSI SQL & LIKE to depend on collations, we do not want to
>>> support it. This patch totally removes it from Tarantool along with any
>>> mentions of it.
>> 1.We delete it because it is not working properly, and instead of 
>> fixing it we
>> want to replace it with more general regexp. Delete other unnecessary 
>> thoughts
>> from this message.
>> 2. Do not use "we", "our" in commit messages.
>
> Why? Ofс it would sound more like documentation, but AFAIK we don’t
> force this restriction. You can check out commit messages from other
> contributors who use ‘we’ and ‘I':
>
> https://github.com/tarantool/tarantool/commit/f4625e64eb99c17910d3f0bcd323e5d82b6d5b31
> https://github.com/tarantool/tarantool/commit/46f50aadedfa87a16e2618da55924b185376b58a
> https://github.com/tarantool/tarantool/commit/1331d232476f17b9ec5be45175233d1b5454d1fd
>
> etc
>


[-- Attachment #2: Type: text/html, Size: 6624 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-08-17  8:49     ` n.pettik
@ 2018-08-17  9:01       ` Alex Khatskevich
  2018-08-17  9:20         ` n.pettik
  0 siblings, 1 reply; 46+ messages in thread
From: Alex Khatskevich @ 2018-08-17  9:01 UTC (permalink / raw)
  To: n.pettik, tarantool-patches; +Cc: N. Tatunov, Alexander Turenko



On 17.08.2018 11:49, n.pettik wrote:
>> On 17 Aug 2018, at 11:25, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
>>
>> Do not split error messages at the middle of a sentence. It makes errors ungreppable.
>> Make it <80 somehow different.
> I guess this is extremely specific nitpicking: look at src/box/alter.cc:
> through the code there are a lot of breaks of error messages like:
>
> alter.c : 405
>
> tnt_raise(ClientError, errcode, tt_cstr(space_name, name_len),
>           tt_sprintf("field %d has conflicting nullability and "
>                     "nullable action properties", fieldno +
>                     TUPLE_INDEX_BASE));
>
> alter.cc : 524
>
> if (exact_field_count != 0 &&
>      exact_field_count < field_count) {
>         tnt_raise(ClientError, errcode, tt_cstr(name, name_len),
>                  "exact_field_count must be either 0 or >= "\
>                  "formatted field count”);
>
> etc
That is not a good example of code.
If possible, error message should not be broken at the middle.
In my opinion, even if it is not possible, it should better be > 80.

Linus is for this 
https://www.kernel.org/doc/html/v4.10/process/coding-style.html

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-08-17  9:01       ` Alex Khatskevich
@ 2018-08-17  9:20         ` n.pettik
  2018-08-17  9:28           ` Alex Khatskevich
  0 siblings, 1 reply; 46+ messages in thread
From: n.pettik @ 2018-08-17  9:20 UTC (permalink / raw)
  To: tarantool-patches; +Cc: Alexander Turenko, Alex Khatskevich, N. Tatunov


> On 17 Aug 2018, at 12:01, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
> 
> On 17.08.2018 11:49, n.pettik wrote:
>>> On 17 Aug 2018, at 11:25, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
>>> 
>>> Do not split error messages at the middle of a sentence. It makes errors ungreppable.
>>> Make it <80 somehow different.
>> I guess this is extremely specific nitpicking: look at src/box/alter.cc:
>> through the code there are a lot of breaks of error messages like:
>> 
>> alter.c : 405
>> 
>> tnt_raise(ClientError, errcode, tt_cstr(space_name, name_len),
>>          tt_sprintf("field %d has conflicting nullability and "
>>                    "nullable action properties", fieldno +
>>                    TUPLE_INDEX_BASE));
>> 
>> alter.cc : 524
>> 
>> if (exact_field_count != 0 &&
>>     exact_field_count < field_count) {
>>        tnt_raise(ClientError, errcode, tt_cstr(name, name_len),
>>                 "exact_field_count must be either 0 or >= "\
>>                 "formatted field count”);
>> 
>> etc
> That is not a good example of code.

Okay, then look at key_def.c and other source files. I can’t find example of breaking
80 chars border with error string message. Thus, I guess this rule is unlikely to be
supported within our codestyle.

> If possible, error message should not be broken at the middle.
> In my opinion, even if it is not possible, it should better be > 80.
> 
> Linus is for this https://www.kernel.org/doc/html/v4.10/process/coding-style.html

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-08-16 17:00 ` [tarantool-patches] [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue N.Tatunov
@ 2018-08-17  9:23   ` Alex Khatskevich
  2018-08-17 11:17     ` Alexander Turenko
  0 siblings, 1 reply; 46+ messages in thread
From: Alex Khatskevich @ 2018-08-17  9:23 UTC (permalink / raw)
  To: N.Tatunov, tarantool-patches; +Cc: N.Tatunov

The code seems relatively normal, except for one thing below.


On 16.08.2018 20:00, N.Tatunov wrote:
> From: "N.Tatunov" <hollow653@gmail.com>
>
> Currently function that compares pattern and string for GLOB & LIKE
> operators doesn't work properly. It uses ICU reading function which
> was assumed having other return codes and the implementation for the
> comparison ending isn't paying attention to some special cases, hence
> in those cases it works improperly.
>
> With the patch applied an error will be returned in case there's an
> invalid UTF-8 symbol in pattern & pattern containing only valid UTF-8
> symbols will not be matched with the string that contains invalid
> symbol.
>
> Сloses #3251
> Сloses #3334
> Part of #3572
> ---
>   src/box/sql/func.c                                 | 272 +++++++++++++--------
>   test/sql-tap/e_expr.test.lua                       |  16 +-
>   .../gh-3251-string-pattern-comparison.test.lua     | 213 ++++++++++++++++
>   3 files changed, 396 insertions(+), 105 deletions(-)
>   create mode 100755 test/sql-tap/gh-3251-string-pattern-comparison.test.lua
>
> diff --git a/src/box/sql/func.c b/src/box/sql/func.c
> index c06e3bd..66cae17 100644
> --- a/src/box/sql/func.c
> +++ b/src/box/sql/func.c
> @@ -617,13 +617,16 @@ struct compareInfo {
>   	u8 noCase;		/* true to ignore case differences */
>   };
>   
> -/*
> - * For LIKE and GLOB matching on EBCDIC machines, assume that every
> - * character is exactly one byte in size.  Also, provde the Utf8Read()
> - * macro for fast reading of the next character in the common case where
> - * the next character is ASCII.
> +/**
> + * Providing there are symbols in string s this
> + * macro returns UTF-8 code of character and
> + * promotes pointer to the next symbol in the string.
> + * Otherwise return code is SQL_END_OF_STRING.
>    */
> -#define Utf8Read(s, e)    ucnv_getNextUChar(pUtf8conv, &s, e, &status)
> +#define Utf8Read(s, e) ucnv_getNextUChar(pUtf8conv, &(s), (e), &(status))
> +
> +#define SQL_END_OF_STRING        0xffff
I have a look at icu code and It seems like 0xffff is an error, and it 
is more similar to
invalid symbol that to "end of string". Check it, and fix the code, so 
that it is treated as
an error.
For example it is not handled in the main pattern loop:

+	while (pattern < pattern_end) {
  		c = Utf8Read(pattern, pattern_end);
+		if (c == SQL_INVALID_UTF8_SYMBOL)
+			return SQL_INVALID_PATTERN;

It seems like the 0xffff should be checked there too.

If I am right and 0xffff is just an error and can be treated like 0xfffd, then just
```
#define INVALID_SYMBOL(C) ((C) > Oxfffd)
or
#define INVALID_SYMBOL(C) ((C) == Oxfffd || (C) == 0xffff)

```
and use it instead of
```
if (c == SQL_INVALID_UTF8_SYMBOL)
		return SQL_INVALID_PATTERN;
```

Please investigate this issue.

> +#define SQL_INVALID_UTF8_SYMBOL  0xfffd
>   
>   static const struct compareInfo globInfo = { '*', '?', '[', 0 };
>   
> @@ -638,19 +641,16 @@ static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
>   static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
>   
>   /*
> - * Possible error returns from patternMatch()
> + * Possible error returns from sql_utf8_pattern_compare()
>    */
> -#define SQLITE_MATCH             0
> -#define SQLITE_NOMATCH           1
> -#define SQLITE_NOWILDCARDMATCH   2
> -
> -/*
> - * Compare two UTF-8 strings for equality where the first string is
> - * a GLOB or LIKE expression.  Return values:
> - *
> - *    SQLITE_MATCH:            Match
> - *    SQLITE_NOMATCH:          No match
> - *    SQLITE_NOWILDCARDMATCH:  No match in spite of having * or % wildcards.
> +#define SQL_MATCH                0
> +#define SQL_NOMATCH              1
> +#define SQL_NOWILDCARDMATCH      2
> +#define SQL_INVALID_PATTERN      3
> +
> +/**
> + * Compare two UTF-8 strings for equality where the first string
> + * is a GLOB or LIKE expression.
>    *
>    * Globbing rules:
>    *
> @@ -663,92 +663,133 @@ static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
>    *
>    *     [^...]     Matches one character not in the enclosed list.
>    *
> - * With the [...] and [^...] matching, a ']' character can be included
> - * in the list by making it the first character after '[' or '^'.  A
> - * range of characters can be specified using '-'.  Example:
> - * "[a-z]" matches any single lower-case letter.  To match a '-', make
> - * it the last character in the list.
> + * With the [...] and [^...] matching, a ']' character can be
> + * included in the list by making it the first character after
> + * '[' or '^'. A range of characters can be specified using '-'.
> + * Example: "[a-z]" matches any single lower-case letter.
> + * To match a '-', make it the last character in the list.
>    *
>    * Like matching rules:
>    *
> - *      '%'       Matches any sequence of zero or more characters
> + *      '%'       Matches any sequence of zero or more characters.
>    *
> - **     '_'       Matches any one character
> + *      '_'       Matches any one character.
>    *
>    *      Ec        Where E is the "esc" character and c is any other
> - *                character, including '%', '_', and esc, match exactly c.
> + *                character, including '%', '_', and esc, match
> + *                exactly c.
>    *
>    * The comments within this routine usually assume glob matching.
>    *
> - * This routine is usually quick, but can be N**2 in the worst case.
> + * This routine is usually quick, but can be N**2 in the worst
> + * case.
> + *
> + * @param pattern String containing comparison pattern.
> + * @param string String being compared.
> + * @param compareInfo Information about how to compare.
> + * @param matchOther The escape char (LIKE) or '[' (GLOB).
> + *
> + * @retval SQL_MATCH:               Match.
> + *	   SQL_NOMATCH:             No match.
> + *	   SQL_NOWILDCARDMATCH:     No match in spite of having *
> + *				    or % wildcards.
> + *	   SQL_INVALID_PATTERN:     Pattern contains invalid
> + *				    symbol.
>    */
>   static int
> -patternCompare(const char * pattern,	/* The glob pattern */
> -	       const char * string,	/* The string to compare against the glob */
> -	       const struct compareInfo *pInfo,	/* Information about how to do the compare */
> -	       UChar32 matchOther	/* The escape char (LIKE) or '[' (GLOB) */
> -    )
> +sql_utf8_pattern_compare(const char *pattern,
> +			 const char *string,
> +			 const struct compareInfo *pInfo,
> +			 UChar32 matchOther)
>   {
> -	UChar32 c, c2;		/* Next pattern and input string chars */
> -	UChar32 matchOne = pInfo->matchOne;	/* "?" or "_" */
> -	UChar32 matchAll = pInfo->matchAll;	/* "*" or "%" */
> -	UChar32 noCase = pInfo->noCase;	/* True if uppercase==lowercase */
> -	const char *zEscaped = 0;	/* One past the last escaped input char */
> +	/* Next pattern and input string chars */
> +	UChar32 c, c2;
> +	/* "?" or "_" */
> +	UChar32 matchOne = pInfo->matchOne;
> +	/* "*" or "%" */
> +	UChar32 matchAll = pInfo->matchAll;
> +	/* True if uppercase==lowercase */
> +	UChar32 noCase = pInfo->noCase;
> +	/* One past the last escaped input char */
> +	const char *zEscaped = 0;
>   	const char * pattern_end = pattern + strlen(pattern);
>   	const char * string_end = string + strlen(string);
>   	UErrorCode status = U_ZERO_ERROR;
>   
> -	while (pattern < pattern_end){
> +	while (pattern < pattern_end) {
>   		c = Utf8Read(pattern, pattern_end);
> +		if (c == SQL_INVALID_UTF8_SYMBOL)
> +			return SQL_INVALID_PATTERN;
>   		if (c == matchAll) {	/* Match "*" */
> -			/* Skip over multiple "*" characters in the pattern.  If there
> -			 * are also "?" characters, skip those as well, but consume a
> -			 * single character of the input string for each "?" skipped
> +			/* Skip over multiple "*" characters in
> +			 * the pattern. If there are also "?"
> +			 * characters, skip those as well, but
> +			 * consume a single character of the
> +			 * input string for each "?" skipped.
>   			 */
> -			while (pattern < pattern_end){
> -				c = Utf8Read(pattern, pattern_end);
> +			while ((c = Utf8Read(pattern, pattern_end)) !=
> +			       SQL_END_OF_STRING) {
> +				if (c == SQL_INVALID_UTF8_SYMBOL)
> +					return SQL_INVALID_PATTERN;
>   				if (c != matchAll && c != matchOne)
>   					break;
> -				if (c == matchOne
> -				    && Utf8Read(string, string_end) == 0) {
> -					return SQLITE_NOWILDCARDMATCH;
> -				}
> +				if (c == matchOne &&
> +				    (c2 = Utf8Read(string, string_end)) ==
> +				    SQL_END_OF_STRING)
> +					return SQL_NOWILDCARDMATCH;
> +				if (c2 == SQL_INVALID_UTF8_SYMBOL)
> +					return SQL_NOMATCH;
> +			}
> +			/*
> +			 * "*" at the end of the pattern matches.
> +			 */
> +			if (c == SQL_END_OF_STRING) {
> +				return SQL_MATCH;
>   			}
> -			/* "*" at the end of the pattern matches */
> -			if (pattern == pattern_end)
> -				return SQLITE_MATCH;
>   			if (c == matchOther) {
>   				if (pInfo->matchSet == 0) {
>   					c = Utf8Read(pattern, pattern_end);
> -					if (c == 0)
> -						return SQLITE_NOWILDCARDMATCH;
> +					if (c == SQL_INVALID_UTF8_SYMBOL)
> +						return SQL_INVALID_PATTERN;
> +					if (c == SQL_END_OF_STRING)
> +						return SQL_NOWILDCARDMATCH;
>   				} else {
> -					/* "[...]" immediately follows the "*".  We have to do a slow
> -					 * recursive search in this case, but it is an unusual case.
> +					/* "[...]" immediately
> +					 * follows the "*". We
> +					 * have to do a slow
> +					 * recursive search in
> +					 * this case, but it is
> +					 * an unusual case.
>   					 */
> -					assert(matchOther < 0x80);	/* '[' is a single-byte character */
> +					assert(matchOther < 0x80);
>   					while (string < string_end) {
>   						int bMatch =
> -						    patternCompare(&pattern[-1],
> -								   string,
> -								   pInfo,
> -								   matchOther);
> -						if (bMatch != SQLITE_NOMATCH)
> +						    sql_utf8_pattern_compare(
> +								&pattern[-1],
> +								string,
> +								pInfo,
> +								matchOther);
> +						if (bMatch != SQL_NOMATCH)
>   							return bMatch;
> -						Utf8Read(string, string_end);
> +						c = Utf8Read(string, string_end);
> +						if (c == SQL_INVALID_UTF8_SYMBOL)
> +							return SQL_NOMATCH;
>   					}
> -					return SQLITE_NOWILDCARDMATCH;
> +					return SQL_NOWILDCARDMATCH;
>   				}
>   			}
>   
> -			/* At this point variable c contains the first character of the
> -			 * pattern string past the "*".  Search in the input string for the
> -			 * first matching character and recursively continue the match from
> -			 * that point.
> +			/* At this point variable c contains the
> +			 * first character of the pattern string
> +			 * past the "*". Search in the input
> +			 * string for the first matching
> +			 * character and recursively continue the
> +			 * match from that point.
>   			 *
> -			 * For a case-insensitive search, set variable cx to be the same as
> -			 * c but in the other case and search the input string for either
> -			 * c or cx.
> +			 * For a case-insensitive search, set
> +			 * variable cx to be the same as c but in
> +			 * the other case and search the input
> +			 * string for either c or cx.
>   			 */
>   
>   			int bMatch;
> @@ -756,14 +797,18 @@ patternCompare(const char * pattern,	/* The glob pattern */
>   				c = u_tolower(c);
>   			while (string < string_end){
>   				/**
> -				 * This loop could have been implemented
> -				 * without if converting c2 to lower case
> -				 * (by holding c_upper and c_lower), however
> -				 * it is implemented this way because lower
> -				 * works better with German and Turkish
> -				 * languages.
> +				 * This loop could have been
> +				 * implemented without if
> +				 * converting c2 to lower case
> +				 * by holding c_upper and
> +				 * c_lower,however it is
> +				 * implemented this way because
> +				 * lower works better with German
> +				 * and Turkish languages.
>   				 */
>   				c2 = Utf8Read(string, string_end);
> +				if (c2 == SQL_INVALID_UTF8_SYMBOL)
> +					return SQL_NOMATCH;
>   				if (!noCase) {
>   					if (c2 != c)
>   						continue;
> @@ -771,42 +816,55 @@ patternCompare(const char * pattern,	/* The glob pattern */
>   					if (c2 != c && u_tolower(c2) != c)
>   						continue;
>   				}
> -				bMatch =
> -				    patternCompare(pattern, string,
> -						   pInfo, matchOther);
> -				if (bMatch != SQLITE_NOMATCH)
> +				bMatch = sql_utf8_pattern_compare(pattern,
> +								  string,
> +								  pInfo,
> +								  matchOther);
> +				if (bMatch != SQL_NOMATCH)
>   					return bMatch;
>   			}
> -			return SQLITE_NOWILDCARDMATCH;
> +			return SQL_NOWILDCARDMATCH;
>   		}
>   		if (c == matchOther) {
>   			if (pInfo->matchSet == 0) {
>   				c = Utf8Read(pattern, pattern_end);
> -				if (c == 0)
> -					return SQLITE_NOMATCH;
> +				if (c == SQL_INVALID_UTF8_SYMBOL)
> +					return SQL_INVALID_PATTERN;
> +				if (c == SQL_END_OF_STRING)
> +					return SQL_NOMATCH;
>   				zEscaped = pattern;
>   			} else {
>   				UChar32 prior_c = 0;
>   				int seen = 0;
>   				int invert = 0;
>   				c = Utf8Read(string, string_end);
> +				if (c == SQL_INVALID_UTF8_SYMBOL)
> +					return SQL_NOMATCH;
>   				if (string == string_end)
> -					return SQLITE_NOMATCH;
> +					return SQL_NOMATCH;
>   				c2 = Utf8Read(pattern, pattern_end);
> +				if (c2 == SQL_INVALID_UTF8_SYMBOL)
> +					return SQL_INVALID_PATTERN;
>   				if (c2 == '^') {
>   					invert = 1;
>   					c2 = Utf8Read(pattern, pattern_end);
> +					if (c2 == SQL_INVALID_UTF8_SYMBOL)
> +						return SQL_INVALID_PATTERN;
>   				}
>   				if (c2 == ']') {
>   					if (c == ']')
>   						seen = 1;
>   					c2 = Utf8Read(pattern, pattern_end);
> +					if (c2 == SQL_INVALID_UTF8_SYMBOL)
> +						return SQL_INVALID_PATTERN;
>   				}
> -				while (c2 && c2 != ']') {
> +				while (c2 != SQL_END_OF_STRING && c2 != ']') {
>   					if (c2 == '-' && pattern[0] != ']'
>   					    && pattern < pattern_end
>   					    && prior_c > 0) {
>   						c2 = Utf8Read(pattern, pattern_end);
> +						if (c2 == SQL_INVALID_UTF8_SYMBOL)
> +							return SQL_INVALID_PATTERN;
>   						if (c >= prior_c && c <= c2)
>   							seen = 1;
>   						prior_c = 0;
> @@ -817,33 +875,40 @@ patternCompare(const char * pattern,	/* The glob pattern */
>   						prior_c = c2;
>   					}
>   					c2 = Utf8Read(pattern, pattern_end);
> +					if (c2 == SQL_INVALID_UTF8_SYMBOL)
> +						return SQL_INVALID_PATTERN;
>   				}
> -				if (pattern == pattern_end || (seen ^ invert) == 0) {
> -					return SQLITE_NOMATCH;
> +				if (pattern == pattern_end ||
> +				    (seen ^ invert) == 0) {
> +					return SQL_NOMATCH;
>   				}
>   				continue;
>   			}
>   		}
>   		c2 = Utf8Read(string, string_end);
> +		if (c2 == SQL_INVALID_UTF8_SYMBOL)
> +			return SQL_NOMATCH;
>   		if (c == c2)
>   			continue;
>   		if (noCase){
>   			/**
> -			 * Small optimisation. Reduce number of calls
> -			 * to u_tolower function.
> -			 * SQL standards suggest use to_upper for symbol
> -			 * normalisation. However, using to_lower allows to
> -			 * respect Turkish 'İ' in default locale.
> +			 * Small optimisation. Reduce number of
> +			 * calls to u_tolower function. SQL
> +			 * standards suggest use to_upper for
> +			 * symbol normalisation. However, using
> +			 * to_lower allows to respect Turkish 'İ'
> +			 * in default locale.
>   			 */
>   			if (u_tolower(c) == c2 ||
>   			    c == u_tolower(c2))
>   				continue;
>   		}
> -		if (c == matchOne && pattern != zEscaped && c2 != 0)
> +		if (c == matchOne && pattern != zEscaped &&
> +		    c2 != SQL_END_OF_STRING)
>   			continue;
> -		return SQLITE_NOMATCH;
> +		return SQL_NOMATCH;
>   	}
> -	return string == string_end ? SQLITE_MATCH : SQLITE_NOMATCH;
> +	return string == string_end ? SQL_MATCH : SQL_NOMATCH;
>   }

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-08-17  9:20         ` n.pettik
@ 2018-08-17  9:28           ` Alex Khatskevich
  0 siblings, 0 replies; 46+ messages in thread
From: Alex Khatskevich @ 2018-08-17  9:28 UTC (permalink / raw)
  To: n.pettik, tarantool-patches; +Cc: Alexander Turenko, N. Tatunov



On 17.08.2018 12:20, n.pettik wrote:
>> On 17 Aug 2018, at 12:01, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
>>
>> On 17.08.2018 11:49, n.pettik wrote:
>>>> On 17 Aug 2018, at 11:25, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
>>>>
>>>> Do not split error messages at the middle of a sentence. It makes errors ungreppable.
>>>> Make it <80 somehow different.
>>> I guess this is extremely specific nitpicking: look at src/box/alter.cc:
>>> through the code there are a lot of breaks of error messages like:
>>>
>>> alter.c : 405
>>>
>>> tnt_raise(ClientError, errcode, tt_cstr(space_name, name_len),
>>>           tt_sprintf("field %d has conflicting nullability and "
>>>                     "nullable action properties", fieldno +
>>>                     TUPLE_INDEX_BASE));
>>>
>>> alter.cc : 524
>>>
>>> if (exact_field_count != 0 &&
>>>      exact_field_count < field_count) {
>>>         tnt_raise(ClientError, errcode, tt_cstr(name, name_len),
>>>                  "exact_field_count must be either 0 or >= "\
>>>                  "formatted field count”);
>>>
>>> etc
>> That is not a good example of code.
> Okay, then look at key_def.c and other source files. I can’t find example of breaking
> 80 chars border with error string message. Thus, I guess this rule is unlikely to be
> supported within our codestyle.
>
>> If possible, error message should not be broken at the middle.
>> In my opinion, even if it is not possible, it should better be > 80.
>>
>> Linus is for this https://www.kernel.org/doc/html/v4.10/process/coding-style.html
>
>
As I said, I do not ask anyone to break the 80 rule. I ask to do not 
split the error message.
it can be done that way for example:
```
         const char * const err_msg =
             "ESCAPE expression must be a single character";
         if (sqlite3Utf8CharLen((char *)zEsc, -1) != 1) {
             sqlite3_result_error(context,
                          err_msg,
                          -1);
             return;
```

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-08-17  9:23   ` [tarantool-patches] " Alex Khatskevich
@ 2018-08-17 11:17     ` Alexander Turenko
  2018-08-17 11:42       ` Alex Khatskevich
  0 siblings, 1 reply; 46+ messages in thread
From: Alexander Turenko @ 2018-08-17 11:17 UTC (permalink / raw)
  To: Alex Khatskevich; +Cc: N.Tatunov, tarantool-patches, N.Tatunov

Hi!

I have one note here.

Please, cite only relavant parts of a message you reply, because some
clients (say, mutt) don't wrap long cites automatically.

WBR, Alexander Turenko.

On Fri, Aug 17, 2018 at 12:23:16PM +0300, Alex Khatskevich wrote:
> The code seems relatively normal, except for one thing below.
> 
> 
> On 16.08.2018 20:00, N.Tatunov wrote:
> > From: "N.Tatunov" <hollow653@gmail.com>
> > 
> > +#define SQL_END_OF_STRING        0xffff
> I have a look at icu code and It seems like 0xffff is an error, and it is
> more similar to
> invalid symbol that to "end of string". Check it, and fix the code, so that
> it is treated as
> an error.

0xffff is the result of 'end of a string' check as well as internal buffer
overflow error. I have the relevant code pasted in the first review of
the patch (July, 18).

// source/common/ucnv.c::ucnv_getNextUChar
1860     s=*source;
1861     if(sourceLimit<s) {
1862         *err=U_ILLEGAL_ARGUMENT_ERROR;
1863         return 0xffff;
1864     }

We should not handle the buffer overflow case as an invalid symbol. Of
course we should not handle it as the 'end of the string' situation.
Ideally we should perform pointer myself and raise an error in case of
0xffff. I had thought that a buffer overflow error is unlikely to meet,
but you are right: we should differentiate these situations.

In one of the previous version of a patch we perform this check like so:

#define Utf8Read(s, e) (((s) < (e)) ?\
	ucnv_getNextUChar(pUtf8conv, &s, e, &status) : 0)

Don't sure why it was changed. Maybe it is try to correctly handle '\0'
symbol (it is valid unicode character)?

So I see two ways to proceed:

1. Lean on icu's check and ignore possibility of the buffer overflow.
2. Use our own check and possibly meet '\0' problems.
3. Check for U_ILLEGAL_ARGUMENT_ERROR to treat as end of a string, raise
   the error for other 0xffff.

Alex, what do you suggests here?

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-08-17  8:25   ` [tarantool-patches] " Alex Khatskevich
  2018-08-17  8:49     ` n.pettik
       [not found]     ` <04D02794-07A5-4146-9144-84EE720C8656@corp.mail.ru>
@ 2018-08-17 11:26     ` Alexander Turenko
  2018-08-17 11:34       ` Alexander Turenko
  2018-08-17 13:46     ` Nikita Tatunov
  2018-09-09 14:57     ` Nikita Tatunov
  4 siblings, 1 reply; 46+ messages in thread
From: Alexander Turenko @ 2018-08-17 11:26 UTC (permalink / raw)
  To: Alex Khatskevich; +Cc: N.Tatunov, tarantool-patches

Hi!

I have one note.

WBR, Alexander Turenko.

On Fri, Aug 17, 2018 at 11:25:14AM +0300, Alex Khatskevich wrote:
> 
> 
> >   		if (sqlite3Utf8CharLen((char *)zEsc, -1) != 1) {
> >   			sqlite3_result_error(context,
> > -					     "ESCAPE expression must be a single character",
> > +					     "ESCAPE expression must be a"
> > +					     " single character",
> Do not split error messages at the middle of a sentence. It makes errors
> ungreppable.
> Make it <80 somehow different.
> 

It was my thought that such rule should be enforced. But I asks Vladimir
D. and he says that kernel developers don't care about that and show me
examples.

Anyway, how you would propose to avoid the string splitting here?

> > -		sqlite3_result_error(context, "LIKE or GLOB pattern can only"
> > -				     " contain UTF-8 characters", -1);
> > +		sqlite3_result_error(context, "LIKE pattern can only contain"
> > +				     " UTF-8 characters", -1);
> Do not split error messages at the middle of a sentence. Make it <80 somehow
> different.

Same here.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-08-17 11:26     ` Alexander Turenko
@ 2018-08-17 11:34       ` Alexander Turenko
  0 siblings, 0 replies; 46+ messages in thread
From: Alexander Turenko @ 2018-08-17 11:34 UTC (permalink / raw)
  To: Alex Khatskevich; +Cc: N.Tatunov, tarantool-patches

On Fri, Aug 17, 2018 at 02:26:19PM +0300, Alexander Turenko wrote:
> Hi!
> 
> I have one note.
> 
> WBR, Alexander Turenko.
> 
> On Fri, Aug 17, 2018 at 11:25:14AM +0300, Alex Khatskevich wrote:
> > 
> > 
> > >   		if (sqlite3Utf8CharLen((char *)zEsc, -1) != 1) {
> > >   			sqlite3_result_error(context,
> > > -					     "ESCAPE expression must be a single character",
> > > +					     "ESCAPE expression must be a"
> > > +					     " single character",
> > Do not split error messages at the middle of a sentence. It makes errors
> > ungreppable.
> > Make it <80 somehow different.
> > 
> 
> It was my thought that such rule should be enforced. But I asks Vladimir
> D. and he says that kernel developers don't care about that and show me
> examples.
> 
> Anyway, how you would propose to avoid the string splitting here?
> 
> > > -		sqlite3_result_error(context, "LIKE or GLOB pattern can only"
> > > -				     " contain UTF-8 characters", -1);
> > > +		sqlite3_result_error(context, "LIKE pattern can only contain"
> > > +				     " UTF-8 characters", -1);
> > Do not split error messages at the middle of a sentence. Make it <80 somehow
> > different.
> 
> Same here.
> 

Sorry, missed the following discussion.

If you think we should change our code style, please review it with
mantainers first. But as I said above we already have this point
discussed.

WBR, Alexander Turenko.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-08-17 11:17     ` Alexander Turenko
@ 2018-08-17 11:42       ` Alex Khatskevich
  2018-09-09 13:33         ` Nikita Tatunov
  0 siblings, 1 reply; 46+ messages in thread
From: Alex Khatskevich @ 2018-08-17 11:42 UTC (permalink / raw)
  To: Alexander Turenko; +Cc: N.Tatunov, tarantool-patches, N.Tatunov


On 17.08.2018 14:17, Alexander Turenko wrote:
> 0xffff is the result of 'end of a string' check as well as internal buffer
> overflow error. I have the relevant code pasted in the first review of
> the patch (July, 18).
>
> // source/common/ucnv.c::ucnv_getNextUChar
> 1860     s=*source;
> 1861     if(sourceLimit<s) {
> 1862         *err=U_ILLEGAL_ARGUMENT_ERROR;
> 1863         return 0xffff;
> 1864     }
>
> We should not handle the buffer overflow case as an invalid symbol. Of
> course we should not handle it as the 'end of the string' situation.
> Ideally we should perform pointer myself and raise an error in case of
> 0xffff. I had thought that a buffer overflow error is unlikely to meet,
> but you are right: we should differentiate these situations.
>
> In one of the previous version of a patch we perform this check like so:
>
> #define Utf8Read(s, e) (((s) < (e)) ?\
> 	ucnv_getNextUChar(pUtf8conv, &s, e, &status) : 0)
>
> Don't sure why it was changed. Maybe it is try to correctly handle '\0'
> symbol (it is valid unicode character)?
The define you have pasted can return 0xffff.
The reasons to change it back are described in the previous patchset.
In short:
1. It is equivalent to
    a. check s < e in a while loop
    b. read next character inside of where loop body.
2. In some usages of the code this check (s<e) was redundant (it was 
performed a couple lines above)
3. There is no reason to rewrite the old version of this function. (So, 
we decided to use old version of the function)
> So I see two ways to proceed:
>
> 1. Lean on icu's check and ignore possibility of the buffer overflow.
> 2. Use our own check and possibly meet '\0' problems.
> 3. Check for U_ILLEGAL_ARGUMENT_ERROR to treat as end of a string, raise
>     the error for other 0xffff.
>
> Alex, what do you suggests here?
As I understand, by now the 0xffff is used ONLY to handle the case of 
unexpectedly ended symbol.
E.g. some symbol consists of 2 characters, but the length of the input 
buffer is 1.
In my opinion this is the same as an invalid symbol.

I guess that internal buffer overflow cannot occur in the 
`ucnv_getNextChar` function.

I suppose that it is Nikitas duty to investigate this problem and 
explain it to us all. I just have noticed a strange usage.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-08-17  8:25   ` [tarantool-patches] " Alex Khatskevich
                       ` (2 preceding siblings ...)
  2018-08-17 11:26     ` Alexander Turenko
@ 2018-08-17 13:46     ` Nikita Tatunov
  2018-09-09 14:57     ` Nikita Tatunov
  4 siblings, 0 replies; 46+ messages in thread
From: Nikita Tatunov @ 2018-08-17 13:46 UTC (permalink / raw)
  To: tarantool-patches; +Cc: Alexander Turenko, avkhatskevich, korablev

Hello! Please, consider my note.

> On 17 Aug 2018, at 11:25, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
> 
> 
> 
> On 16.08.2018 20:00, N.Tatunov wrote:
>> GLOB is a legacy extension for LIKE from SQLite. As we want our SQL to
>> be close to ANSI SQL & LIKE to depend on collations, we do not want to
>> support it. This patch totally removes it from Tarantool along with any
>> mentions of it.
> 1.We delete it because it is not working properly, and instead of fixing it we
> want to replace it with more general regexp. Delete other unnecessary thoughts
> from this message.
> 2. Do not use "we", "our" in commit messages.

I can’t agree with the first note. I’m not sure if we can call it a “replacement”.
Firstly we have long been having a ticket for REGEXP implementation and
this fact is not concerned with GLOB removal somehow. Secondly the idea
of removing GLOB appeared in light of collations in LIKE & in light of absence
of GLOB in most of other DBMSs.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-08-17 11:42       ` Alex Khatskevich
@ 2018-09-09 13:33         ` Nikita Tatunov
  2018-09-10 22:20           ` Alex Khatskevich
  0 siblings, 1 reply; 46+ messages in thread
From: Nikita Tatunov @ 2018-09-09 13:33 UTC (permalink / raw)
  To: tarantool-patches; +Cc: Alexander Turenko, N.Tatunov

[-- Attachment #1: Type: text/plain, Size: 3832 bytes --]



> On 17 Aug 2018, at 14:42, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
> 
> 
> On 17.08.2018 14:17, Alexander Turenko wrote:
>> 0xffff is the result of 'end of a string' check as well as internal buffer
>> overflow error. I have the relevant code pasted in the first review of
>> the patch (July, 18).
>> 
>> // source/common/ucnv.c::ucnv_getNextUChar
>> 1860     s=*source;
>> 1861     if(sourceLimit<s) {
>> 1862         *err=U_ILLEGAL_ARGUMENT_ERROR;
>> 1863         return 0xffff;
>> 1864     }
>> 
>> We should not handle the buffer overflow case as an invalid symbol. Of
>> course we should not handle it as the 'end of the string' situation.
>> Ideally we should perform pointer myself and raise an error in case of
>> 0xffff. I had thought that a buffer overflow error is unlikely to meet,
>> but you are right: we should differentiate these situations.
>> 
>> In one of the previous version of a patch we perform this check like so:
>> 
>> #define Utf8Read(s, e) (((s) < (e)) ?\
>> 	ucnv_getNextUChar(pUtf8conv, &s, e, &status) : 0)
>> 
>> Don't sure why it was changed. Maybe it is try to correctly handle '\0'
>> symbol (it is valid unicode character)?
> The define you have pasted can return 0xffff.
> The reasons to change it back are described in the previous patchset.
> In short:
> 1. It is equivalent to
>    a. check s < e in a while loop
>    b. read next character inside of where loop body.
> 2. In some usages of the code this check (s<e) was redundant (it was performed a couple lines above)
> 3. There is no reason to rewrite the old version of this function. (So, we decided to use old version of the function)
>> So I see two ways to proceed:
>> 
>> 1. Lean on icu's check and ignore possibility of the buffer overflow.
>> 2. Use our own check and possibly meet '\0' problems.
>> 3. Check for U_ILLEGAL_ARGUMENT_ERROR to treat as end of a string, raise
>>    the error for other 0xffff.
>> 
>> Alex, what do you suggests here?
> As I understand, by now the 0xffff is used ONLY to handle the case of unexpectedly ended symbol.
> E.g. some symbol consists of 2 characters, but the length of the input buffer is 1.
> In my opinion this is the same as an invalid symbol.
> 
> I guess that internal buffer overflow cannot occur in the `ucnv_getNextChar` function.
> 
> I suppose that it is Nikitas duty to investigate this problem and explain it to us all. I just have noticed a strange usage.


Hello, please consider my comments.

There are some cases when 0xffff can occur, but:
	1) Cannot trigger in our context.
	2) Cannot trigger in our context.
	3) Only triggers if end < start. (Cannot happen in sql_utf8_pattern_compare, i guess)
	4) Only triggers if string length > (size_t) 0x7ffffffff (can it actually happen? I don’t think so).
	5) Occurs when trying to access to not unindexed data.
	6) Cannot occur in our context.
	7) Cannot occur in our context.

0xfffd only means that symbol cannot be treated as a unicode symbol.

Shall I change it somehow then?


> On 17 Aug 2018, at 12:23, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
> 
> I have a look at icu code and It seems like 0xffff is an error, and it is more similar to
> invalid symbol that to "end of string". Check it, and fix the code, so that it is treated as
> an error.
> For example it is not handled in the main pattern loop:
> 
> +	while (pattern < pattern_end) {
> 		c = Utf8Read(pattern, pattern_end);
> +		if (c == SQL_INVALID_UTF8_SYMBOL)
> +			return SQL_INVALID_PATTERN;
> 
> It seems like the 0xffff should be checked there too.

No, it should not. This way it will only cause a bug when, for example ’select “” like “”’
will be treated as an error.

--
WBR, Nikita Tatunov.
n.tatunov@tarantool.org


[-- Attachment #2: Type: text/html, Size: 20896 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-08-17  8:25   ` [tarantool-patches] " Alex Khatskevich
                       ` (3 preceding siblings ...)
  2018-08-17 13:46     ` Nikita Tatunov
@ 2018-09-09 14:57     ` Nikita Tatunov
  2018-09-10 22:06       ` Alex Khatskevich
  4 siblings, 1 reply; 46+ messages in thread
From: Nikita Tatunov @ 2018-09-09 14:57 UTC (permalink / raw)
  To: tarantool-patches; +Cc: avkhatskevich, Alexander Turenko, korablev

[-- Attachment #1: Type: text/plain, Size: 26491 bytes --]

Hello, please consider corrected version of the patch.
Diff with the previous version at the end.

> On 17 Aug 2018, at 11:25, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
> 
> 
> 
> On 16.08.2018 20:00, N.Tatunov wrote:
>> GLOB is a legacy extension for LIKE from SQLite. As we want our SQL to
>> be close to ANSI SQL & LIKE to depend on collations, we do not want to
>> support it. This patch totally removes it from Tarantool along with any
>> mentions of it.
> 1.We delete it because it is not working properly, and instead of fixing it we
> want to replace it with more general regexp. Delete other unnecessary thoughts
> from this message.
> 2. Do not use "we", "our" in commit messages.

As discussed above it’s not going to be changed.

>>  static int
>>  sql_utf8_pattern_compare(const char *pattern,
>>  			 const char *string,
>> -			 const struct compareInfo *pInfo,
>> -			 UChar32 matchOther)
>> +			 const int *is_like_ci,
> Pass this parameter by value.

Fixed.

>> +			 UChar32 match_other)
>>  {
>>  	/* Next pattern and input string chars */
>>  	UChar32 c, c2;
>> -	/* "?" or "_" */
>> -	UChar32 matchOne = pInfo->matchOne;
>> -	/* "*" or "%" */
>> -	UChar32 matchAll = pInfo->matchAll;
>> -	/* True if uppercase==lowercase */
>> -	UChar32 noCase = pInfo->noCase;
>> +	/* "_" */
>> +	UChar32 match_one = '_';
>> +	/* "%" */
>> +	UChar32 match_all = '%';
> This variables consumes stack. Can they be moved to defines?
> If it will break smth, make them const.

moved them to defines.

>> 
>>  int
>> -sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc)
>> +sql_strlike_ci(const char *zPattern, const char *zStr, unsigned int esc)
>>  {
>> -	return sql_utf8_pattern_compare(zPattern, zStr, &likeInfoNorm, esc);
>> +	return sql_utf8_pattern_compare(zPattern, zStr, &case_insensitive_like, esc);
> Hardcode `case_insensitive_like` value here.

Done.

>> +	/**
>> +	 * Limit the length of the LIKE pattern to avoid problems
>> +	 * of deep recursion and N*N behavior in
> I thought that only globe could require N*N time. Check delete the comment.

The reason is the recursion in sql_utf8_pattern_compare() which is still
there.

>> 
>> -					     "ESCAPE expression must be a single character",
>> +					     "ESCAPE expression must be a"
>> +					     " single character",
> Do not split error messages at the middle of a sentence. It makes errors ungreppable.
> Make it <80 somehow different.
> 

Have already been discussed in this thread.

>> -		sqlite3_result_error(context, "LIKE or GLOB pattern can only"
>> -				     " contain UTF-8 characters", -1);
>> +		sqlite3_result_error(context, "LIKE pattern can only contain"
>> +				     " UTF-8 characters", -1);
> Do not split error messages at the middle of a sentence. Make it <80 somehow different.

Have already been discussed in this thread.

>> +	int *is_like_ci;
>> +	if (is_case_sensitive)
>> +		is_like_ci = (int *)&case_sensitive_like;
> pass this var by value.

We need (void *) in sqlite3CreateFunc(), i don’t think it’s relevant to pass
variable by value.

>> diff --git a/test/sql-tap/alter.test.lua b/test/sql-tap/alter.test.lua
>> index cfe2801..773bdeb 100755
>> --- a/test/sql-tap/alter.test.lua
>> +++ b/test/sql-tap/alter.test.lua
>> @@ -230,9 +230,10 @@ test:do_execsql_test(
>>  test:do_execsql_test(
>>      "alter-5.1",
>>      [[
>> +        PRAGMA case_sensitive_like = true;
>>          CREATE TABLE xyz(x PRIMARY KEY);
>>          ALTER TABLE xyz RENAME TO "xyz1234abc";
>> -        SELECT "name" FROM "_space" WHERE "name" GLOB 'xyz*';
>> +        SELECT "name" FROM "_space" WHERE "name" LIKE 'xyz%';
> This test become unreasonably complex.
> Do just "select where name = 'xyz1234abc'
> Or at least delete case_sensitive…

Done.

>>      ]], {
>>          -- <alter-5.1>
>>          "xyz1234abc"
>> @@ -243,7 +244,8 @@ test:do_execsql_test(
>>      "alter-5.2",
>>      [[
>>          ALTER TABLE "xyz1234abc" RENAME TO xyzabc;
>> -        SELECT "name" FROM "_space" WHERE "name" GLOB 'XYZ*';
>> +        SELECT "name" FROM "_space" WHERE "name" LIKE 'XYZ%';
>> +        PRAGMA case_sensitive_like = false;
> This test become unreasonably complex.
> Do just "select where name = ‘xyz1234abc'

Done.

>> --- NOTE: This test needs refactoring after deletion of GLOB &
>> ---	 type restrictions for LIKE. (See #3572)
>> ---    {"LIKE", "like"},
>> ---    {"GLOB", "glob"},
>> +    {"LIKE", "like"},
>>      {"AND", "and"},
>>      {"OR", "or"},
>>      {"MATCH", "match"},
>> @@ -98,12 +95,9 @@ operations = {
>>      {"+", "-"},
>>      {"<<", ">>", "&", "|"},
>>      {"<", "<=", ">", ">="},
>> --- NOTE: This test needs refactoring after deletion of GLOB &
>> ---	 type restrictions for LIKE. (See #3572)
>>  -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
>> --- 		 are waiting for their hour, don't confuse them
>> ---		 being commented with ticket above.
>> -    {"=", "==", "!=", "<>"}, --"LIKE", "GLOB"}, --"MATCH", "REGEXP"},
>> +-- 		 are waiting for their hour.
>> +    {"=", "==", "!=", "<>", "LIKE"}, --"MATCH", "REGEXP"},
>>      {"AND"},
>>      {"OR"},
>>  }
>> @@ -128,7 +122,7 @@ end
>>  -- EVIDENCE-OF: R-15514-65163 SQLite understands the following binary
>>  -- operators, in order from highest to lowest precedence: || * / % + -
>>  -- << >> & | < <= > >= = == != <> IS IS
>> --- NOT IN LIKE GLOB MATCH REGEXP AND OR
>> +-- NOT IN LIKE MATCH REGEXP AND OR
>>  --
>>  -- EVIDENCE-OF: R-38759-38789 Operators IS and IS NOT have the same
>>  -- precedence as =.
>> @@ -467,18 +461,63 @@ literals = {
>>  for _, op in ipairs(oplist) do
>>      for n1, rhs in ipairs(literals) do
>>          for n2, lhs in ipairs(literals) do
>> -            local t = test:execsql(string.format(" SELECT typeof(%s %s %s) ", lhs, op, rhs))[1]
>> -            test:do_test(
>> -                string.format("e_expr-7.%s.%s.%s", opname[op], n1, n2),
>> -                function()
>> -                    --print("\n op "..op.." t "..t)
>> -                    return (((op == "||") and ((t == "text") or
>> -                            (t == "null"))) or
>> -                            ((op ~= "||") and (((t == "integer") or
>> -                                    (t == "real")) or
>> -                                    (t == "null")))) and 1 or 0
>> -                end, 1)
>> +            if op ~= "LIKE" then
> 1. Why do not just delete like from `oplist`?
> 2. We were discussing this place with you and Georgy, and decided that you do
> not touch this for loop at all.

Ok. Commented LIKE in `oplist` (it’s still a binary operator who knows, maybe we will revive it).

>> -local function glob(args)
>> -    return 1
>> -end
>>  -box.internal.sql_create_function("GLOB", glob)
>> -box.internal.sql_create_function("MATCH", glob)
>> -box.internal.sql_create_function("REGEXP", glob)
>> +-- NOTE: GLOB is removed from Tarantool, thus it'll be needed to
>> +--       refactor these calls. They don't work right now since
>> +--          we don't support MATHC & REGEXP.
>> +-- local function glob(args)
>> +--     return 1
>> +-- end
> This test do not test the glob function. Delete this comment.

Done.

>> +
>> +-- box.internal.sql_create_function("MATCH", glob)
>> +-- box.internal.sql_create_function("REGEXP", glob)
> You was lucky that commenting those lines do not break the tests. (because there is a similar
> code above)
> Return it back.

Done.

>> @@ -2274,15 +2312,23 @@ test:do_execsql_test(
>>          -- </e_expr-16.1.7>
>>      })
>>  --- EVIDENCE-OF: R-52087-12043 The GLOB operator is similar to LIKE but
>> --- uses the Unix file globbing syntax for its wildcards.
>> ---
>> --- EVIDENCE-OF: R-09813-17279 Also, GLOB is case sensitive, unlike LIKE.
>> +-- EVIDENCE-OF: R-52087-12043 LIKE doesn't use Unix file globbing
>> +-- syntax for its wildcards.
> Those test was designed especially for the glob function.
> There are similar tests for like above.
> You should delete it instead of renaming.

Ok, Deleted.

>>  --- EVIDENCE-OF: R-39616-20555 Both GLOB and LIKE may be preceded by the
>> +-- EVIDENCE-OF: R-39616-20555 LIKE may be preceded by the
>>  -- NOT keyword to invert the sense of the test.
>>  --
>>  test:do_execsql_test(
>> +    "e_expr-17.2.0",
>> +    [[
>> +        SELECT 'abcxyz' NOT LIKE 'ABC%'
>> +    ]], {
>> +        -- <e_expr-17.2.0>
>> +        1
>> +        -- </e_expr-17.2.0>
>> +    })
>> +
>> +test:do_execsql_test(
>>      "e_expr-17.2.1",
>>      [[
>> -        SELECT 'abcxyz' NOT GLOB 'ABC*'
>> +        SELECT 'abcxyz' NOT LIKE 'abc%'
>>      ]], {
>>          -- <e_expr-17.2.1>
>> -        1
>> +        0
>>          -- </e_expr-17.2.1>
>>      })
>>    test:do_execsql_test(
>>      "e_expr-17.2.2",
>>      [[
>> -        SELECT 'abcxyz' NOT GLOB 'abc*'
>> +        PRAGMA case_sensitive_like = 0
>>      ]], {
>>          -- <e_expr-17.2.2>
>> -        0
>> -        -- </e_expr-17.2.2>
>> +
>> +        -- <e_expr-17.2.2>
>>      })
>>    test:do_execsql_test(
>> @@ -2405,10 +2461,11 @@ test:do_execsql_test(
>>  -- MUST_WORK_TEST uses access to nullvalue... (sql parameters) and built in functions
>>  if 0>0 then
>>      db("nullvalue", "null")
> do not change tests which are not working.
> There is a chance chat you do it wrong and you do not know about it.
    
Made it back.

>> diff --git a/test/sql-tap/like3.test.lua b/test/sql-tap/like3.test.lua
>> index 505d2fa..0bc71a0 100755
>> --- a/test/sql-tap/like3.test.lua
>> +++ b/test/sql-tap/like3.test.lua
>> @@ -12,13 +12,13 @@ test:plan(7)
>>  --    May you find forgiveness for yourself and forgive others.
>>  --    May you share freely, never taking more than you give.
>>  --
>> --------------------------------------------------------------------------
>> +-----------------------------------------------------------------
>>  --
>> --- This file implements regression tests for SQLite library.  The
>> --- focus of this file is testing the LIKE and GLOB operators and
>> --- in particular the optimizations that occur to help those operators
>> --- run faster and that those optimizations work correctly when there
>> --- are both strings and blobs being tested.
>> +-- This file implements regression tests for SQLite library. The
>> +-- focus of this file is testing the LIKE operator and
>> +-- in particular the optimizations that occur to help this
>> +-- operator run faster and that those optimizations work
>> +-- correctly when there are both strings and blobs being tested.
>>  --
>>  -- Ticket 05f43be8fdda9fbd948d374319b99b054140bc36 shows that the following
>>  -- SQL was not working correctly:
>> @@ -70,10 +70,11 @@ test:do_execsql_test(
>>  test:do_execsql_test(
>>      "like3-2.0",
>>      [[
>> +        PRAGMA case_sensitive_like = 1;
>>          CREATE TABLE t2(a PRIMARY KEY, b TEXT);
>>          INSERT INTO t2 SELECT a, b FROM t1;
>>          CREATE INDEX t2ba ON t2(b,a);
>> -        SELECT a, b FROM t2 WHERE b GLOB 'ab*' ORDER BY +a;
>> +        SELECT a, b FROM t2 WHERE b LIKE 'ab%' ORDER BY +a;
> Those tests were especially created for glob. Delete it instead of renaming.

Done.

Diff with the prev version of the patch:

diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index 177193e94..28b435ae3 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -631,6 +631,12 @@ static const int case_insensitive_like = 1;
  */
 static const int case_sensitive_like = 0;
 
+/**
+ * Wildcards.
+ */
+#define match_one '_'
+#define match_all '%'
+
 /**
  * Possible error returns from sql_utf8_pattern_compare().
  */
@@ -672,15 +678,11 @@ static const int case_sensitive_like = 0;
 static int
 sql_utf8_pattern_compare(const char *pattern,
 			 const char *string,
-			 const int *is_like_ci,
+			 const int is_like_ci,
 			 UChar32 match_other)
 {
 	/* Next pattern and input string chars */
 	UChar32 c, c2;
-	/* "_" */
-	UChar32 match_one = '_';
-	/* "%" */
-	UChar32 match_all = '%';
 	/* One past the last escaped input char */
 	const char *zEscaped = 0;
 	const char *pattern_end = pattern + strlen(pattern);
@@ -741,7 +743,7 @@ sql_utf8_pattern_compare(const char *pattern,
 			 */
 
 			int bMatch;
-			if (*is_like_ci)
+			if (is_like_ci)
 				c = u_tolower(c);
 			while (string < string_end){
 				/**
@@ -757,7 +759,7 @@ sql_utf8_pattern_compare(const char *pattern,
 				c2 = Utf8Read(string, string_end);
 				if (c2 == SQL_INVALID_UTF8_SYMBOL)
 					return SQL_NOMATCH;
-				if (!(*is_like_ci)) {
+				if (!is_like_ci) {
 					if (c2 != c)
 						continue;
 				} else {
@@ -786,7 +788,7 @@ sql_utf8_pattern_compare(const char *pattern,
 			return SQL_NOMATCH;
 		if (c == c2)
 			continue;
-		if (*is_like_ci) {
+		if (is_like_ci) {
 			/**
 			 * Small optimisation. Reduce number of
 			 * calls to u_tolower function. SQL
@@ -814,7 +816,7 @@ sql_utf8_pattern_compare(const char *pattern,
 int
 sql_strlike_cs(const char *zPattern, const char *zStr, unsigned int esc)
 {
-	return sql_utf8_pattern_compare(zPattern, zStr, &case_sensitive_like, esc);
+	return sql_utf8_pattern_compare(zPattern, zStr, case_sensitive_like, esc);
 }
 
 /**
@@ -824,7 +826,7 @@ sql_strlike_cs(const char *zPattern, const char *zStr, unsigned int esc)
 int
 sql_strlike_ci(const char *zPattern, const char *zStr, unsigned int esc)
 {
-	return sql_utf8_pattern_compare(zPattern, zStr, &case_insensitive_like, esc);
+	return sql_utf8_pattern_compare(zPattern, zStr, case_insensitive_like, esc);
 }
 
 /**
@@ -907,7 +909,7 @@ likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
 	sqlite3_like_count++;
 #endif
 	int res;
-	res = sql_utf8_pattern_compare(zB, zA, is_like_ci, escape);
+	res = sql_utf8_pattern_compare(zB, zA, *is_like_ci, escape);
 	if (res == SQL_INVALID_PATTERN) {
 		sqlite3_result_error(context, "LIKE pattern can only contain"
 				     " UTF-8 characters", -1);
diff --git a/src/box/sql/whereexpr.c b/src/box/sql/whereexpr.c
index 947bd5d94..2d9fb6453 100644
--- a/src/box/sql/whereexpr.c
+++ b/src/box/sql/whereexpr.c
@@ -218,6 +218,12 @@ operatorMask(int op)
 	return c;
 }
 
+/**
+ * Wildcard characters.
+ */
+#define match_one '_'
+#define match_all '%'
+
 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
 /**
  * Check to see if the given expression is a LIKE operator that
@@ -258,9 +264,6 @@ is_like(Parse *pParse,
 	int c;
 	/* Number of non-wildcard prefix characters */
 	int cnt;
-	/* Wildcard characters */
-	char match_all = '%';
-	char match_one = '_';
 	/* Database connection */
 	sqlite3 *db = pParse->db;
 	sqlite3_value *pVal = 0;
diff --git a/test/sql-tap/alter.test.lua b/test/sql-tap/alter.test.lua
index 773bdebdb..98338c493 100755
--- a/test/sql-tap/alter.test.lua
+++ b/test/sql-tap/alter.test.lua
@@ -230,10 +230,9 @@ test:do_execsql_test(
 test:do_execsql_test(
     "alter-5.1",
     [[
-        PRAGMA case_sensitive_like = true;
         CREATE TABLE xyz(x PRIMARY KEY);
         ALTER TABLE xyz RENAME TO "xyz1234abc";
-        SELECT "name" FROM "_space" WHERE "name" LIKE 'xyz%';
+        SELECT "name" FROM "_space" WHERE "name" = 'xyz1234abc';
     ]], {
         -- <alter-5.1>
         "xyz1234abc"
@@ -244,8 +243,7 @@ test:do_execsql_test(
     "alter-5.2",
     [[
         ALTER TABLE "xyz1234abc" RENAME TO xyzabc;
-        SELECT "name" FROM "_space" WHERE "name" LIKE 'XYZ%';
-        PRAGMA case_sensitive_like = false;
+        SELECT "name" FROM "_space" WHERE "name" = 'XYZABC';
     ]], {
         -- <alter-5.2>
         "XYZABC"
diff --git a/test/sql-tap/e_expr.test.lua b/test/sql-tap/e_expr.test.lua
index 162026845..0d69e8535 100755
--- a/test/sql-tap/e_expr.test.lua
+++ b/test/sql-tap/e_expr.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(11521)
+test:plan(10647)
 
 --!./tcltestrunner.lua
 -- 2010 July 16
@@ -77,7 +77,7 @@ local operations = {
     {"<>", "ne1"},
     {"!=", "ne2"},
     {"IS", "is"},
-    {"LIKE", "like"},
+--    {"LIKE", "like"},
     {"AND", "and"},
     {"OR", "or"},
     {"MATCH", "match"},
@@ -96,8 +96,9 @@ operations = {
     {"<<", ">>", "&", "|"},
     {"<", "<=", ">", ">="},
 -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
--- 		 are waiting for their hour.
-    {"=", "==", "!=", "<>", "LIKE"}, --"MATCH", "REGEXP"},
+--               are waiting for their hour, don't confuse them
+--               being commented with commenting of "LIKE".
+    {"=", "==", "!=", "<>"}, --"LIKE"}, --"MATCH", "REGEXP"},
     {"AND"},
     {"OR"},
 }
@@ -461,67 +462,21 @@ literals = {
 for _, op in ipairs(oplist) do
     for n1, rhs in ipairs(literals) do
         for n2, lhs in ipairs(literals) do
-            if op ~= "LIKE" then
-                local t = test:execsql(string.format(" SELECT typeof(%s %s %s) ", lhs, op, rhs))[1]
-                test:do_test(
-                    string.format("e_expr-7.%s.%s.%s", opname[op], n1, n2),
-                    function()
-                        return (((op == "||") and ((t == "text") or
-                                (t == "null"))) or
-                                ((op ~= "||") and (((t == "integer") or
-                                 (t == "real")) or
-                                 (t == "null")))) and 1 or 0
-                    end, 1)
-            end
-        end
-    end
-end
-
-local valid_patterns =
-    {"'abc'", "'hexadecimal'", "''", 123, -123, 0,
-    123.4, 0.0, -123.4, "X''", "X'0000'", "NULL"}
-
-local invalid_patterns = {"X'ABCDEF'"}
-
-for n1, rhs in ipairs(valid_patterns) do
-    for n2, lhs in ipairs(literals) do
-        local t = test:execsql(string.format(" SELECT typeof(%s LIKE %s) ", lhs, rhs))[1]
-        test:do_test(
-            string.format("e_expr-7.%s.LIKE.%s", n1, n2),
-            function()
-                return (t == "integer" or
-                        t == "real" or
-                        t == "null") and 1 or 0
-            end, 1)
-    end
-end
+            local t = test:execsql(string.format(" SELECT typeof(%s %s %s) ", lhs, op, rhs))[1]
+            test:do_test(
+                string.format("e_expr-7.%s.%s.%s", opname[op], n1, n2),
+                function()
+                    --print("\n op "..op.." t "..t)
+                    return (((op == "||") and ((t == "text") or
+                            (t == "null"))) or
+                            ((op ~= "||") and (((t == "integer") or
+                                    (t == "real")) or
+                                    (t == "null")))) and 1 or 0
+                end, 1)
 
-for n1, rhs in ipairs(invalid_patterns) do
-    for n2, lhs in ipairs(literals) do
-        local t = string.format(" SELECT typeof(%s LIKE %s) ", lhs, rhs)
-        local test_name = string.format("e_expr-7.%s.LIKE.%s", n1 + 12, n2)
-        if n2 ~= 13 then
-            test:do_catchsql_test(
-                test_name,
-                t,
-                {
-                    -- <test_name>
-                    1, "LIKE pattern can only contain UTF-8 characters"
-                    -- <test_name>
-                })
-        else
-            test:do_catchsql_test(
-                test_name,
-                t,
-                {
-                    -- <test_name>
-                    0, {"null"}
-                    -- <test_name>
-                })
         end
     end
 end
-
 ---------------------------------------------------------------------------
 -- Test the IS and IS NOT operators.
 --
@@ -1343,15 +1298,12 @@ test:execsql [[
     CREATE TABLE tblname(cname PRIMARY KEY);
 ]]
 
--- NOTE: GLOB is removed from Tarantool, thus it'll be needed to
---       refactor these calls. They don't work right now since
---          we don't support MATHC & REGEXP.
--- local function glob(args)
---     return 1
--- end
+local function glob(args)
+    return 1
+end
 
--- box.internal.sql_create_function("MATCH", glob)
--- box.internal.sql_create_function("REGEXP", glob)
+box.internal.sql_create_function("MATCH", glob)
+box.internal.sql_create_function("REGEXP", glob)
 local test_cases12 ={
     {1, 123},
     {2, 123.4e05},
@@ -2312,96 +2264,14 @@ test:do_execsql_test(
         -- </e_expr-16.1.7>
     })
 
--- EVIDENCE-OF: R-52087-12043 LIKE doesn't use Unix file globbing
--- syntax for its wildcards.
---
-test:do_execsql_test(
-    "e_expr-17.1.0",
-    [[
-        PRAGMA case_sensitive_like = 1
-    ]], {
-        -- <e_expr-17.1.0>
-
-        -- <e_expr-17.1.0>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.1",
-    [[
-        SELECT 'abcxyz' LIKE 'abc*'
-    ]], {
-        -- <e_expr-17.1.1>
-        0
-        -- </e_expr-17.1.1>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.2",
-    [[
-        SELECT 'abcxyz' LIKE 'abc%'
-    ]], {
-        -- <e_expr-17.1.2>
-        1
-        -- </e_expr-17.1.2>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.3",
-    [[
-        SELECT 'abcxyz' LIKE 'abc???'
-    ]], {
-        -- <e_expr-17.1.3>
-        0
-        -- </e_expr-17.1.3>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.4",
-    [[
-        SELECT 'abcxyz' LIKE 'abc___'
-    ]], {
-        -- <e_expr-17.1.4>
-        1
-        -- </e_expr-17.1.4>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.5",
-    [[
-        SELECT 'abcxyz' LIKE 'abc%'
-    ]], {
-        -- <e_expr-17.1.5>
-        1
-        -- </e_expr-17.1.5>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.6",
-    [[
-        SELECT 'ABCxyz' LIKE 'abc%'
-    ]], {
-        -- <e_expr-17.1.6>
-        0
-        -- </e_expr-17.1.6>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.7",
-    [[
-        SELECT 'abcxyz' LIKE 'ABC%'
-    ]], {
-        -- <e_expr-17.1.7>
-        0
-        -- </e_expr-17.1.7>
-    })
-
 -- EVIDENCE-OF: R-39616-20555 LIKE may be preceded by the
 -- NOT keyword to invert the sense of the test.
 --
 test:do_execsql_test(
     "e_expr-17.2.0",
     [[
-        SELECT 'abcxyz' NOT LIKE 'ABC%'
+        PRAGMA case_sensitive_like = 1;
+        SELECT 'abcxyz' NOT LIKE 'ABC%';
     ]], {
         -- <e_expr-17.2.0>
         1
@@ -2461,11 +2331,10 @@ test:do_execsql_test(
 -- MUST_WORK_TEST uses access to nullvalue... (sql parameters) and built in functions
 if 0>0 then
     db("nullvalue", "null")
-
     test:do_execsql_test(
         "e_expr-17.2.6",
         [[
-            SELECT 'abcxyz' NOT LIKE NULL
+            SELECT 'abcxyz' NOT GLOB NULL
         ]], {
             -- <e_expr-17.2.6>
             "null"
@@ -2475,13 +2344,33 @@ if 0>0 then
     test:do_execsql_test(
         "e_expr-17.2.7",
         [[
-            SELECT NULL NOT LIKE 'ABC%'
+            SELECT 'abcxyz' NOT LIKE NULL
         ]], {
             -- <e_expr-17.2.7>
             "null"
             -- </e_expr-17.2.7>
         })
 
+    test:do_execsql_test(
+        "e_expr-17.2.8",
+        [[
+            SELECT NULL NOT GLOB 'abc*'
+        ]], {
+            -- <e_expr-17.2.8>
+            "null"
+            -- </e_expr-17.2.8>
+        })
+
+    test:do_execsql_test(
+        "e_expr-17.2.9",
+        [[
+            SELECT NULL NOT LIKE 'ABC%'
+        ]], {
+            -- <e_expr-17.2.9>
+            "null"
+            -- </e_expr-17.2.9>
+        })
+
     db("nullvalue", "")
 end
 
diff --git a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
index 55943345f..a6d822ccd 100755
--- a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
+++ b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
@@ -185,7 +185,7 @@ local valid_testcases = {
 
 -- Valid testcases.
 for i, tested_string in ipairs(valid_testcases) do
-    test_name = prefix .. "8." .. tostring(i)
+    local test_name = prefix .. "8." .. tostring(i)
     local test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "';"
     test:do_execsql_test(test_name, test_itself, {0})
 
diff --git a/test/sql-tap/like3.test.lua b/test/sql-tap/like3.test.lua
index 0bc71a09c..8f4f79422 100755
--- a/test/sql-tap/like3.test.lua
+++ b/test/sql-tap/like3.test.lua
@@ -67,70 +67,6 @@ test:do_execsql_test(
         -- </like3-1.2>
     })
 
-test:do_execsql_test(
-    "like3-2.0",
-    [[
-        PRAGMA case_sensitive_like = 1;
-        CREATE TABLE t2(a PRIMARY KEY, b TEXT);
-        INSERT INTO t2 SELECT a, b FROM t1;
-        CREATE INDEX t2ba ON t2(b,a);
-        SELECT a, b FROM t2 WHERE b LIKE 'ab%' ORDER BY +a;
-    ]], {
-        -- <like3-2.0>
-        1, "abc", 4, "abc"
-        -- </like3-2.0>
-    })
-
-test:do_execsql_test(
-    "like3-2.1",
-    [[
-        SELECT a, b FROM t2 WHERE +b LIKE 'ab%' ORDER BY +a;
-    ]], {
-        -- <like3-2.1>
-        1, "abc", 4, "abc"
-        -- </like3-2.1>
-    })
-
-test:do_execsql_test(
-    "like3-2.2",
-    [[
-        SELECT a, b FROM t2 WHERE b>=x'6162' AND b LIKE 'ab%'
-    ]], {
-        -- <like3-2.2>
-        4, "abc"
-        -- </like3-2.2>
-    })
-
-test:do_execsql_test(
-    "like3-2.3",
-    [[
-        SELECT a, b FROM t2 WHERE +b>=x'6162' AND +b LIKE 'ab%'
-    ]], {
-        -- <like3-2.3>
-        4, "abc"
-        -- </like3-2.3>
-    })
-
-test:do_execsql_test(
-    "like3-2.4",
-    [[
-        SELECT a, b FROM t2 WHERE b LIKE 'ab%' AND b>=x'6162'
-    ]], {
-        -- <like3-2.4>
-        4, "abc"
-        -- </like3-2.4>
-    })
-
-test:do_execsql_test(
-    "like3-2.5",
-    [[
-        SELECT a, b FROM t2 WHERE +b LIKE 'ab%' AND +b>=x'6162';
-        PRAGMA case_sensitive_like = 0;
-    ]], {
-        -- <like3-2.5>
-        4, "abc"
-        -- </like3-2.5>
-    })
 test:execsql([[
     CREATE TABLE t3(x TEXT PRIMARY KEY COLLATE "unicode_ci");
     INSERT INTO t3(x) VALUES('aaa'),('abc'),('abd'),('abe'),('acz');


--
WBR, Nikita Tatunov.
n.tatunov@tarantool.org


[-- Attachment #2: Type: text/html, Size: 141643 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-09-09 14:57     ` Nikita Tatunov
@ 2018-09-10 22:06       ` Alex Khatskevich
  2018-09-11  7:38         ` Nikita Tatunov
  0 siblings, 1 reply; 46+ messages in thread
From: Alex Khatskevich @ 2018-09-10 22:06 UTC (permalink / raw)
  To: Nikita Tatunov, tarantool-patches; +Cc: Alexander Turenko, korablev

[-- Attachment #1: Type: text/plain, Size: 29225 bytes --]

1. See some comments below.
2. Please, send the full patch diff when done (not just an incremental 
diff as you did).
Patch seems ok in overall.

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


[-- Attachment #2: Type: text/html, Size: 179721 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-09-09 13:33         ` Nikita Tatunov
@ 2018-09-10 22:20           ` Alex Khatskevich
  2018-09-11  6:06             ` Nikita Tatunov
  0 siblings, 1 reply; 46+ messages in thread
From: Alex Khatskevich @ 2018-09-10 22:20 UTC (permalink / raw)
  To: tarantool-patches

[-- Attachment #1: Type: text/plain, Size: 4139 bytes --]


>
>> On 17 Aug 2018, at 14:42, Alex Khatskevich 
>> <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> wrote:
>>
>>
>> On 17.08.2018 14:17, Alexander Turenko wrote:
>>> 0xffff is the result of 'end of a string' check as well as internal 
>>> buffer
>>> overflow error. I have the relevant code pasted in the first review of
>>> the patch (July, 18).
>>>
>>> // source/common/ucnv.c::ucnv_getNextUChar
>>> 1860     s=*source;
>>> 1861     if(sourceLimit<s) {
>>> 1862         *err=U_ILLEGAL_ARGUMENT_ERROR;
>>> 1863         return 0xffff;
>>> 1864     }
>>>
>>> We should not handle the buffer overflow case as an invalid symbol. Of
>>> course we should not handle it as the 'end of the string' situation.
>>> Ideally we should perform pointer myself and raise an error in case of
>>> 0xffff. I had thought that a buffer overflow error is unlikely to meet,
>>> but you are right: we should differentiate these situations.
>>>
>>> In one of the previous version of a patch we perform this check like so:
>>>
>>> #define Utf8Read(s, e) (((s) < (e)) ?\
>>> ucnv_getNextUChar(pUtf8conv, &s, e, &status) : 0)
>>>
>>> Don't sure why it was changed. Maybe it is try to correctly handle '\0'
>>> symbol (it is valid unicode character)?
>> The define you have pasted can return 0xffff.
>> The reasons to change it back are described in the previous patchset.
>> In short:
>> 1. It is equivalent to
>>    a. check s < e in a while loop
>>    b. read next character inside of where loop body.
>> 2. In some usages of the code this check (s<e) was redundant (it was 
>> performed a couple lines above)
>> 3. There is no reason to rewrite the old version of this function. 
>> (So, we decided to use old version of the function)
>>> So I see two ways to proceed:
>>>
>>> 1. Lean on icu's check and ignore possibility of the buffer overflow.
>>> 2. Use our own check and possibly meet '\0' problems.
>>> 3. Check for U_ILLEGAL_ARGUMENT_ERROR to treat as end of a string, raise
>>>    the error for other 0xffff.
>>>
>>> Alex, what do you suggests here?
>> As I understand, by now the 0xffff is used ONLY to handle the case of 
>> unexpectedly ended symbol.
>> E.g. some symbol consists of 2 characters, but the length of the 
>> input buffer is 1.
>> In my opinion this is the same as an invalid symbol.
>>
>> I guess that internal buffer overflow cannot occur in the 
>> `ucnv_getNextChar` function.
>>
>> I suppose that it is Nikitas duty to investigate this problem and 
>> explain it to us all. I just have noticed a strange usage.
>
> Hello, please consider my comments.
>
> There are some cases when 0xffff can occur, but:
> 1) Cannot trigger in our context.
> 2) Cannot trigger in our context.
> 3) Only triggers if end < start. (Cannot happen in 
> sql_utf8_pattern_compare, i guess)
> 4) Only triggers if string length > (size_t) 0x7ffffffff (can it 
> actually happen? I don’t think so).
> 5) Occurs when trying to access to not unindexed data.
> 6) Cannot occur in our context.
> 7) Cannot occur in our context.
I do not understand what are those numbers related to. Please, describe it.
>
> 0xfffd only means that symbol cannot be treated as a unicode symbol.
>
> Shall I change it somehow then?
>
>
>> On 17 Aug 2018, at 12:23, Alex Khatskevich 
>> <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> wrote:
>>
>> I have a look at icu code and It seems like 0xffff is an error, and 
>> it is more similar to
>> invalid symbol that to "end of string". Check it, and fix the code, 
>> so that it is treated as
>> an error.
>> For example it is not handled in the main pattern loop:
>>
>> +while (pattern < pattern_end) {
>> c = Utf8Read(pattern, pattern_end);
>> +if (c == SQL_INVALID_UTF8_SYMBOL)
>> +return SQL_INVALID_PATTERN;
>>
>> It seems like the 0xffff should be checked there too.
>
> No, it should not. This way it will only cause a bug when, for example 
> ’select “” like “”’
> will be treated as an error.
I do not understand.
’select “” like “”’ should not even trap inside of the while loop
(because `pattern < pattern_end` is false).

[-- Attachment #2: Type: text/html, Size: 25136 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-09-10 22:20           ` Alex Khatskevich
@ 2018-09-11  6:06             ` Nikita Tatunov
  2018-09-11 10:06               ` Alex Khatskevich
  0 siblings, 1 reply; 46+ messages in thread
From: Nikita Tatunov @ 2018-09-11  6:06 UTC (permalink / raw)
  To: tarantool-patches; +Cc: avkhatskevich, Alexander Turenko, korablev

[-- Attachment #1: Type: text/plain, Size: 4676 bytes --]



> On 11 Sep 2018, at 01:20, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
> 
>> 
>> 
>>> On 17 Aug 2018, at 14:42, Alex Khatskevich <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> wrote:
>>> 
>>> 
>>> On 17.08.2018 14:17, Alexander Turenko wrote:
>>>> 0xffff is the result of 'end of a string' check as well as internal buffer
>>>> overflow error. I have the relevant code pasted in the first review of
>>>> the patch (July, 18).
>>>> 
>>>> // source/common/ucnv.c::ucnv_getNextUChar
>>>> 1860     s=*source;
>>>> 1861     if(sourceLimit<s) {
>>>> 1862         *err=U_ILLEGAL_ARGUMENT_ERROR;
>>>> 1863         return 0xffff;
>>>> 1864     }
>>>> 
>>>> We should not handle the buffer overflow case as an invalid symbol. Of
>>>> course we should not handle it as the 'end of the string' situation.
>>>> Ideally we should perform pointer myself and raise an error in case of
>>>> 0xffff. I had thought that a buffer overflow error is unlikely to meet,
>>>> but you are right: we should differentiate these situations.
>>>> 
>>>> In one of the previous version of a patch we perform this check like so:
>>>> 
>>>> #define Utf8Read(s, e) (((s) < (e)) ?\
>>>> 	ucnv_getNextUChar(pUtf8conv, &s, e, &status) : 0)
>>>> 
>>>> Don't sure why it was changed. Maybe it is try to correctly handle '\0'
>>>> symbol (it is valid unicode character)?
>>> The define you have pasted can return 0xffff.
>>> The reasons to change it back are described in the previous patchset.
>>> In short:
>>> 1. It is equivalent to
>>>    a. check s < e in a while loop
>>>    b. read next character inside of where loop body.
>>> 2. In some usages of the code this check (s<e) was redundant (it was performed a couple lines above)
>>> 3. There is no reason to rewrite the old version of this function. (So, we decided to use old version of the function)
>>>> So I see two ways to proceed:
>>>> 
>>>> 1. Lean on icu's check and ignore possibility of the buffer overflow.
>>>> 2. Use our own check and possibly meet '\0' problems.
>>>> 3. Check for U_ILLEGAL_ARGUMENT_ERROR to treat as end of a string, raise
>>>>    the error for other 0xffff.
>>>> 
>>>> Alex, what do you suggests here?
>>> As I understand, by now the 0xffff is used ONLY to handle the case of unexpectedly ended symbol.
>>> E.g. some symbol consists of 2 characters, but the length of the input buffer is 1.
>>> In my opinion this is the same as an invalid symbol.
>>> 
>>> I guess that internal buffer overflow cannot occur in the `ucnv_getNextChar` function.
>>> 
>>> I suppose that it is Nikitas duty to investigate this problem and explain it to us all. I just have noticed a strange usage.
>> 
>> 
>> Hello, please consider my comments.
>> 
>> There are some cases when 0xffff can occur, but:
>> 	1) Cannot trigger in our context.
>> 	2) Cannot trigger in our context.
>> 	3) Only triggers if end < start. (Cannot happen in sql_utf8_pattern_compare, i guess)
>> 	4) Only triggers if string length > (size_t) 0x7ffffffff (can it actually happen? I don’t think so).
>> 	5) Occurs when trying to access to not unindexed data.
>> 	6) Cannot occur in our context.
>> 	7) Cannot occur in our context.
> I do not understand what are those numbers related to. Please, describe it.

They are related to possible cases returning 0xffff from icu source code (function ucnv_getNextUChar()).

>> 
>> 0xfffd only means that symbol cannot be treated as a unicode symbol.
>> 
>> Shall I change it somehow then?
>> 
>> 
>>> On 17 Aug 2018, at 12:23, Alex Khatskevich <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> wrote:
>>> 
>>> I have a look at icu code and It seems like 0xffff is an error, and it is more similar to
>>> invalid symbol that to "end of string". Check it, and fix the code, so that it is treated as
>>> an error.
>>> For example it is not handled in the main pattern loop:
>>> 
>>> +	while (pattern < pattern_end) {
>>> 		c = Utf8Read(pattern, pattern_end);
>>> +		if (c == SQL_INVALID_UTF8_SYMBOL)
>>> +			return SQL_INVALID_PATTERN;
>>> 
>>> It seems like the 0xffff should be checked there too.
>> 
>> No, it should not. This way it will only cause a bug when, for example ’select “” like “”’
>> will be treated as an error.
> I do not understand.
> ’select “” like “”’ should not even trap inside of the while loop
> (because `pattern < pattern_end` is false).

Ah, you’re right, sorry, then it just doesn’t matter, since pattern < pattern_end is equal
to 0xffff according to the comment above.

--
WBR, Nikita Tatunov.
n.tatunov@tarantool.org


[-- Attachment #2: Type: text/html, Size: 26599 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-09-10 22:06       ` Alex Khatskevich
@ 2018-09-11  7:38         ` Nikita Tatunov
  2018-09-11 10:11           ` Alexander Turenko
  2018-09-11 12:03           ` Alex Khatskevich
  0 siblings, 2 replies; 46+ messages in thread
From: Nikita Tatunov @ 2018-09-11  7:38 UTC (permalink / raw)
  To: Alex Khatskevich; +Cc: tarantool-patches, Alexander Turenko

[-- Attachment #1: Type: text/plain, Size: 626444 bytes --]

Hello, thank you for comments.
See full diff is at the end of the letter.

> On 11 Sep 2018, at 01:06, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
> 
> 1. See some comments below.
> 2. Please, send the full patch diff when done (not just an incremental diff as you did).
> Patch seems ok in overall.
> 
> On 09.09.2018 17:57, Nikita Tatunov wrote:
>> Hello, please consider corrected version of the patch.
>> Diff with the previous version at the end.
>> 
>>> On 17 Aug 2018, at 11:25, Alex Khatskevich <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> wrote:
>>> 
>>> 
>>> 
>>> On 16.08.2018 20:00, N.Tatunov wrote:
>>>> GLOB is a legacy extension for LIKE from SQLite. As we want our SQL to
>>>> be close to ANSI SQL & LIKE to depend on collations, we do not want to
>>>> support it. This patch totally removes it from Tarantool along with any
>>>> mentions of it.
>>> 1.We delete it because it is not working properly, and instead of fixing it we
>>> want to replace it with more general regexp. Delete other unnecessary thoughts
>>> from this message.
>>> 2. Do not use "we", "our" in commit messages.
>> 
>> As discussed above it’s not going to be changed.
> Ok.
>> 
>>>>  static int
>>>>  sql_utf8_pattern_compare(const char *pattern,
>>>>  			 const char *string,
>>>> -			 const struct compareInfo *pInfo,
>>>> -			 UChar32 matchOther)
>>>> +			 const int *is_like_ci,
>>> Pass this parameter by value.
>> 
>> Fixed.
>> 
>>>> +			 UChar32 match_other)
>>>>  {
>>>>  	/* Next pattern and input string chars */
>>>>  	UChar32 c, c2;
>>>> -	/* "?" or "_" */
>>>> -	UChar32 matchOne = pInfo->matchOne;
>>>> -	/* "*" or "%" */
>>>> -	UChar32 matchAll = pInfo->matchAll;
>>>> -	/* True if uppercase==lowercase */
>>>> -	UChar32 noCase = pInfo->noCase;
>>>> +	/* "_" */
>>>> +	UChar32 match_one = '_';
>>>> +	/* "%" */
>>>> +	UChar32 match_all = '%';
>>> This variables consumes stack. Can they be moved to defines?
>>> If it will break smth, make them const.
>> 
>> moved them to defines.
>> 
>>>> 
>>>>  int
>>>> -sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc)
>>>> +sql_strlike_ci(const char *zPattern, const char *zStr, unsigned int esc)
>>>>  {
>>>> -	return sql_utf8_pattern_compare(zPattern, zStr, &likeInfoNorm, esc);
>>>> +	return sql_utf8_pattern_compare(zPattern, zStr, &case_insensitive_like, esc);
>>> Hardcode `case_insensitive_like` value here.
>> 
>> Done.
>> 
>>>> +	/**
>>>> +	 * Limit the length of the LIKE pattern to avoid problems
>>>> +	 * of deep recursion and N*N behavior in
>>> I thought that only globe could require N*N time. Check delete the comment.
>> 
>> The reason is the recursion in sql_utf8_pattern_compare() which is still
>> there.
>> 
>>>> 
>>>> -					     "ESCAPE expression must be a single character",
>>>> +					     "ESCAPE expression must be a"
>>>> +					     " single character",
>>> Do not split error messages at the middle of a sentence. It makes errors ungreppable.
>>> Make it <80 somehow different.
>>> 
>> 
>> Have already been discussed in this thread.
> I suppose that we concluded to try to fit into 80 and split the string only
> in case it is impossible.

I don’t think so. Anyways, Alexander could you please give your thoughts?

>>>> -		sqlite3_result_error(context, "LIKE or GLOB pattern can only"
>>>> -				     " contain UTF-8 characters", -1);
>>>> +		sqlite3_result_error(context, "LIKE pattern can only contain"
>>>> +				     " UTF-8 characters", -1);
>>> Do not split error messages at the middle of a sentence. Make it <80 somehow different.
>> 
>> Have already been discussed in this thread.
> same
>> 
>>>> +	int *is_like_ci;
>>>> +	if (is_case_sensitive)
>>>> +		is_like_ci = (int *)&case_sensitive_like;
>>> pass this var by value.
>> 
>> We need (void *) in sqlite3CreateFunc(), i don’t think it’s relevant to pass
>> variable by value.
> Yes, sorry.
>> 
>>>> diff --git a/test/sql-tap/alter.test.lua b/test/sql-tap/alter.test.lua
>>>> index cfe2801..773bdeb 100755
>>>> --- a/test/sql-tap/alter.test.lua
>>>> +++ b/test/sql-tap/alter.test.lua
>>>> @@ -230,9 +230,10 @@ test:do_execsql_test(
>>>>  test:do_execsql_test(
>>>>      "alter-5.1",
>>>>      [[
>>>> +        PRAGMA case_sensitive_like = true;
>>>>          CREATE TABLE xyz(x PRIMARY KEY);
>>>>          ALTER TABLE xyz RENAME TO "xyz1234abc";
>>>> -        SELECT "name" FROM "_space" WHERE "name" GLOB 'xyz*';
>>>> +        SELECT "name" FROM "_space" WHERE "name" LIKE 'xyz%';
>>> This test become unreasonably complex.
>>> Do just "select where name = 'xyz1234abc'
>>> Or at least delete case_sensitive…
>> 
>> Done.
>> 
>>>>      ]], {
>>>>          -- <alter-5.1>
>>>>          "xyz1234abc"
>>>> @@ -243,7 +244,8 @@ test:do_execsql_test(
>>>>      "alter-5.2",
>>>>      [[
>>>>          ALTER TABLE "xyz1234abc" RENAME TO xyzabc;
>>>> -        SELECT "name" FROM "_space" WHERE "name" GLOB 'XYZ*';
>>>> +        SELECT "name" FROM "_space" WHERE "name" LIKE 'XYZ%';
>>>> +        PRAGMA case_sensitive_like = false;
>>> This test become unreasonably complex.
>>> Do just "select where name = ‘xyz1234abc'
>> 
>> Done.
>> 
>>>> --- NOTE: This test needs refactoring after deletion of GLOB &
>>>> ---	 type restrictions for LIKE. (See #3572)
>>>> ---    {"LIKE", "like"},
>>>> ---    {"GLOB", "glob"},
>>>> +    {"LIKE", "like"},
>>>>      {"AND", "and"},
>>>>      {"OR", "or"},
>>>>      {"MATCH", "match"},
>>>> @@ -98,12 +95,9 @@ operations = {
>>>>      {"+", "-"},
>>>>      {"<<", ">>", "&", "|"},
>>>>      {"<", "<=", ">", ">="},
>>>> --- NOTE: This test needs refactoring after deletion of GLOB &
>>>> ---	 type restrictions for LIKE. (See #3572)
>>>>  -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
>>>> --- 		 are waiting for their hour, don't confuse them
>>>> ---		 being commented with ticket above.
>>>> -    {"=", "==", "!=", "<>"}, --"LIKE", "GLOB"}, --"MATCH", "REGEXP"},
>>>> +-- 		 are waiting for their hour.
>>>> +    {"=", "==", "!=", "<>", "LIKE"}, --"MATCH", "REGEXP"},
>>>>      {"AND"},
>>>>      {"OR"},
>>>>  }
>>>> @@ -128,7 +122,7 @@ end
>>>>  -- EVIDENCE-OF: R-15514-65163 SQLite understands the following binary
>>>>  -- operators, in order from highest to lowest precedence: || * / % + -
>>>>  -- << >> & | < <= > >= = == != <> IS IS
>>>> --- NOT IN LIKE GLOB MATCH REGEXP AND OR
>>>> +-- NOT IN LIKE MATCH REGEXP AND OR
>>>>  --
>>>>  -- EVIDENCE-OF: R-38759-38789 Operators IS and IS NOT have the same
>>>>  -- precedence as =.
>>>> @@ -467,18 +461,63 @@ literals = {
>>>>  for _, op in ipairs(oplist) do
>>>>      for n1, rhs in ipairs(literals) do
>>>>          for n2, lhs in ipairs(literals) do
>>>> -            local t = test:execsql(string.format(" SELECT typeof(%s %s %s) ", lhs, op, rhs))[1]
>>>> -            test:do_test(
>>>> -                string.format("e_expr-7.%s.%s.%s", opname[op], n1, n2),
>>>> -                function()
>>>> -                    --print("\n op "..op.." t "..t)
>>>> -                    return (((op == "||") and ((t == "text") or
>>>> -                            (t == "null"))) or
>>>> -                            ((op ~= "||") and (((t == "integer") or
>>>> -                                    (t == "real")) or
>>>> -                                    (t == "null")))) and 1 or 0
>>>> -                end, 1)
>>>> +            if op ~= "LIKE" then
>>> 1. Why do not just delete like from `oplist`?
>>> 2. We were discussing this place with you and Georgy, and decided that you do
>>> not touch this for loop at all.
>> 
>> Ok. Commented LIKE in `oplist` (it’s still a binary operator who knows, maybe we will revive it).
>> 
>>>> -local function glob(args)
>>>> -    return 1
>>>> -end
>>>>  -box.internal.sql_create_function("GLOB", glob)
>>>> -box.internal.sql_create_function("MATCH", glob)
>>>> -box.internal.sql_create_function("REGEXP", glob)
>>>> +-- NOTE: GLOB is removed from Tarantool, thus it'll be needed to
>>>> +--       refactor these calls. They don't work right now since
>>>> +--          we don't support MATHC & REGEXP.
>>>> +-- local function glob(args)
>>>> +--     return 1
>>>> +-- end
>>> This test do not test the glob function. Delete this comment.
>> 
>> Done.
>> 
>>>> +
>>>> +-- box.internal.sql_create_function("MATCH", glob)
>>>> +-- box.internal.sql_create_function("REGEXP", glob)
>>> You was lucky that commenting those lines do not break the tests. (because there is a similar
>>> code above)
>>> Return it back.
>> 
>> Done.
>> 
>>>> @@ -2274,15 +2312,23 @@ test:do_execsql_test(
>>>>          -- </e_expr-16.1.7>
>>>>      })
>>>>  --- EVIDENCE-OF: R-52087-12043 The GLOB operator is similar to LIKE but
>>>> --- uses the Unix file globbing syntax for its wildcards.
>>>> ---
>>>> --- EVIDENCE-OF: R-09813-17279 Also, GLOB is case sensitive, unlike LIKE.
>>>> +-- EVIDENCE-OF: R-52087-12043 LIKE doesn't use Unix file globbing
>>>> +-- syntax for its wildcards.
>>> Those test was designed especially for the glob function.
>>> There are similar tests for like above.
>>> You should delete it instead of renaming.
>> 
>> Ok, Deleted.
>> 
>>>>  --- EVIDENCE-OF: R-39616-20555 Both GLOB and LIKE may be preceded by the
>>>> +-- EVIDENCE-OF: R-39616-20555 LIKE may be preceded by the
>>>>  -- NOT keyword to invert the sense of the test.
>>>>  --
>>>>  test:do_execsql_test(
>>>> +    "e_expr-17.2.0",
>>>> +    [[
>>>> +        SELECT 'abcxyz' NOT LIKE 'ABC%'
>>>> +    ]], {
>>>> +        -- <e_expr-17.2.0>
>>>> +        1
>>>> +        -- </e_expr-17.2.0>
>>>> +    })
>>>> +
>>>> +test:do_execsql_test(
>>>>      "e_expr-17.2.1",
>>>>      [[
>>>> -        SELECT 'abcxyz' NOT GLOB 'ABC*'
>>>> +        SELECT 'abcxyz' NOT LIKE 'abc%'
>>>>      ]], {
>>>>          -- <e_expr-17.2.1>
>>>> -        1
>>>> +        0
>>>>          -- </e_expr-17.2.1>
>>>>      })
>>>>    test:do_execsql_test(
>>>>      "e_expr-17.2.2",
>>>>      [[
>>>> -        SELECT 'abcxyz' NOT GLOB 'abc*'
>>>> +        PRAGMA case_sensitive_like = 0
>>>>      ]], {
>>>>          -- <e_expr-17.2.2>
>>>> -        0
>>>> -        -- </e_expr-17.2.2>
>>>> +
>>>> +        -- <e_expr-17.2.2>
>>>>      })
>>>>    test:do_execsql_test(
>>>> @@ -2405,10 +2461,11 @@ test:do_execsql_test(
>>>>  -- MUST_WORK_TEST uses access to nullvalue... (sql parameters) and built in functions
>>>>  if 0>0 then
>>>>      db("nullvalue", "null")
>>> do not change tests which are not working.
>>> There is a chance chat you do it wrong and you do not know about it.
>>     
>> Made it back.
>> 
>>>> diff --git a/test/sql-tap/like3.test.lua b/test/sql-tap/like3.test.lua
>>>> index 505d2fa..0bc71a0 100755
>>>> --- a/test/sql-tap/like3.test.lua
>>>> +++ b/test/sql-tap/like3.test.lua
>>>> @@ -12,13 +12,13 @@ test:plan(7)
>>>>  --    May you find forgiveness for yourself and forgive others.
>>>>  --    May you share freely, never taking more than you give.
>>>>  --
>>>> --------------------------------------------------------------------------
>>>> +-----------------------------------------------------------------
>>>>  --
>>>> --- This file implements regression tests for SQLite library.  The
>>>> --- focus of this file is testing the LIKE and GLOB operators and
>>>> --- in particular the optimizations that occur to help those operators
>>>> --- run faster and that those optimizations work correctly when there
>>>> --- are both strings and blobs being tested.
>>>> +-- This file implements regression tests for SQLite library. The
>>>> +-- focus of this file is testing the LIKE operator and
>>>> +-- in particular the optimizations that occur to help this
>>>> +-- operator run faster and that those optimizations work
>>>> +-- correctly when there are both strings and blobs being tested.
>>>>  --
>>>>  -- Ticket 05f43be8fdda9fbd948d374319b99b054140bc36 shows that the following
>>>>  -- SQL was not working correctly:
>>>> @@ -70,10 +70,11 @@ test:do_execsql_test(
>>>>  test:do_execsql_test(
>>>>      "like3-2.0",
>>>>      [[
>>>> +        PRAGMA case_sensitive_like = 1;
>>>>          CREATE TABLE t2(a PRIMARY KEY, b TEXT);
>>>>          INSERT INTO t2 SELECT a, b FROM t1;
>>>>          CREATE INDEX t2ba ON t2(b,a);
>>>> -        SELECT a, b FROM t2 WHERE b GLOB 'ab*' ORDER BY +a;
>>>> +        SELECT a, b FROM t2 WHERE b LIKE 'ab%' ORDER BY +a;
>>> Those tests were especially created for glob. Delete it instead of renaming.
>> 
>> Done.
>> 
>> Diff with the prev version of the patch:
>> 
>> diff --git a/src/box/sql/func.c b/src/box/sql/func.c
>> index 177193e94..28b435ae3 100644
>> --- a/src/box/sql/func.c
>> +++ b/src/box/sql/func.c
>> @@ -631,6 +631,12 @@ static const int case_insensitive_like = 1;
>>   */
>>  static const int case_sensitive_like = 0;
>>  
>> +/**
>> + * Wildcards.
>> + */
>> +#define match_one '_'
>> +#define match_all '%'
>> +
>>  /**
>>   * Possible error returns from sql_utf8_pattern_compare().
>>   */
>> @@ -672,15 +678,11 @@ static const int case_sensitive_like = 0;
>>  static int
>>  sql_utf8_pattern_compare(const char *pattern,
>>  			 const char *string,
>> -			 const int *is_like_ci,
>> +			 const int is_like_ci,
>>  			 UChar32 match_other)
>>  {
>>  	/* Next pattern and input string chars */
>>  	UChar32 c, c2;
>> -	/* "_" */
>> -	UChar32 match_one = '_';
>> -	/* "%" */
>> -	UChar32 match_all = '%';
>>  	/* One past the last escaped input char */
>>  	const char *zEscaped = 0;
>>  	const char *pattern_end = pattern + strlen(pattern);
>> @@ -741,7 +743,7 @@ sql_utf8_pattern_compare(const char *pattern,
>>  			 */
>>  
>>  			int bMatch;
>> -			if (*is_like_ci)
>> +			if (is_like_ci)
>>  				c = u_tolower(c);
>>  			while (string < string_end){
>>  				/**
>> @@ -757,7 +759,7 @@ sql_utf8_pattern_compare(const char *pattern,
>>  				c2 = Utf8Read(string, string_end);
>>  				if (c2 == SQL_INVALID_UTF8_SYMBOL)
>>  					return SQL_NOMATCH;
>> -				if (!(*is_like_ci)) {
>> +				if (!is_like_ci) {
>>  					if (c2 != c)
>>  						continue;
>>  				} else {
>> @@ -786,7 +788,7 @@ sql_utf8_pattern_compare(const char *pattern,
>>  			return SQL_NOMATCH;
>>  		if (c == c2)
>>  			continue;
>> -		if (*is_like_ci) {
>> +		if (is_like_ci) {
>>  			/**
>>  			 * Small optimisation. Reduce number of
>>  			 * calls to u_tolower function. SQL
>> @@ -814,7 +816,7 @@ sql_utf8_pattern_compare(const char *pattern,
>>  int
>>  sql_strlike_cs(const char *zPattern, const char *zStr, unsigned int esc)
>>  {
>> -	return sql_utf8_pattern_compare(zPattern, zStr, &case_sensitive_like, esc);
>> +	return sql_utf8_pattern_compare(zPattern, zStr, case_sensitive_like, esc);
>>  }
>>  
>>  /**
>> @@ -824,7 +826,7 @@ sql_strlike_cs(const char *zPattern, const char *zStr, unsigned int esc)
>>  int
>>  sql_strlike_ci(const char *zPattern, const char *zStr, unsigned int esc)
>>  {
>> -	return sql_utf8_pattern_compare(zPattern, zStr, &case_insensitive_like, esc);
>> +	return sql_utf8_pattern_compare(zPattern, zStr, case_insensitive_like, esc);
>>  }
>>  
>>  /**
>> @@ -907,7 +909,7 @@ likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
>>  	sqlite3_like_count++;
>>  #endif
>>  	int res;
>> -	res = sql_utf8_pattern_compare(zB, zA, is_like_ci, escape);
>> +	res = sql_utf8_pattern_compare(zB, zA, *is_like_ci, escape);
>>  	if (res == SQL_INVALID_PATTERN) {
>>  		sqlite3_result_error(context, "LIKE pattern can only contain"
>>  				     " UTF-8 characters", -1);
>> diff --git a/src/box/sql/whereexpr.c b/src/box/sql/whereexpr.c
>> index 947bd5d94..2d9fb6453 100644
>> --- a/src/box/sql/whereexpr.c
>> +++ b/src/box/sql/whereexpr.c
>> @@ -218,6 +218,12 @@ operatorMask(int op)
>>  	return c;
>>  }
>>  
>> +/**
>> + * Wildcard characters.
>> + */
>> +#define match_one '_'
>> +#define match_all '%'
>> +
>>  #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
>>  /**
>>   * Check to see if the given expression is a LIKE operator that
>> @@ -258,9 +264,6 @@ is_like(Parse *pParse,
>>  	int c;
>>  	/* Number of non-wildcard prefix characters */
>>  	int cnt;
>> -	/* Wildcard characters */
>> -	char match_all = '%';
>> -	char match_one = '_';
>>  	/* Database connection */
>>  	sqlite3 *db = pParse->db;
>>  	sqlite3_value *pVal = 0;
>> diff --git a/test/sql-tap/alter.test.lua b/test/sql-tap/alter.test.lua
>> index 773bdebdb..98338c493 100755
>> --- a/test/sql-tap/alter.test.lua
>> +++ b/test/sql-tap/alter.test.lua
>> @@ -230,10 +230,9 @@ test:do_execsql_test(
>>  test:do_execsql_test(
>>      "alter-5.1",
>>      [[
>> -        PRAGMA case_sensitive_like = true;
>>          CREATE TABLE xyz(x PRIMARY KEY);
>>          ALTER TABLE xyz RENAME TO "xyz1234abc";
>> -        SELECT "name" FROM "_space" WHERE "name" LIKE 'xyz%';
>> +        SELECT "name" FROM "_space" WHERE "name" = 'xyz1234abc';
>>      ]], {
>>          -- <alter-5.1>
>>          "xyz1234abc"
>> @@ -244,8 +243,7 @@ test:do_execsql_test(
>>      "alter-5.2",
>>      [[
>>          ALTER TABLE "xyz1234abc" RENAME TO xyzabc;
>> -        SELECT "name" FROM "_space" WHERE "name" LIKE 'XYZ%';
>> -        PRAGMA case_sensitive_like = false;
>> +        SELECT "name" FROM "_space" WHERE "name" = 'XYZABC';
>>      ]], {
>>          -- <alter-5.2>
>>          "XYZABC"
>> diff --git a/test/sql-tap/e_expr.test.lua b/test/sql-tap/e_expr.test.lua
>> index 162026845..0d69e8535 100755
>> --- a/test/sql-tap/e_expr.test.lua
>> +++ b/test/sql-tap/e_expr.test.lua
>> @@ -1,6 +1,6 @@
>>  #!/usr/bin/env tarantool
>>  test = require("sqltester")
>> -test:plan(11521)
>> +test:plan(10647)
>>  
>>  --!./tcltestrunner.lua
>>  -- 2010 July 16
>> @@ -77,7 +77,7 @@ local operations = {
>>      {"<>", "ne1"},
>>      {"!=", "ne2"},
>>      {"IS", "is"},
>> -    {"LIKE", "like"},
>> +--    {"LIKE", "like"},
>>      {"AND", "and"},
>>      {"OR", "or"},
>>      {"MATCH", "match"},
>> @@ -96,8 +96,9 @@ operations = {
>>      {"<<", ">>", "&", "|"},
>>      {"<", "<=", ">", ">="},
>>  -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
>> --- 		 are waiting for their hour.
>> -    {"=", "==", "!=", "<>", "LIKE"}, --"MATCH", "REGEXP"},
>> +--               are waiting for their hour, don't confuse them
>> +--               being commented with commenting of "LIKE".
>> +    {"=", "==", "!=", "<>"}, --"LIKE"}, --"MATCH", "REGEXP"},
> Delete Like. No one returns here.

It’s a table of all of the operators thus I think it still worth leaving it there.
Who knows, it may be that someone will revive tests for LIKE.

>>      {"AND"},
>>      {"OR"},
>>  }
>> @@ -461,67 +462,21 @@ literals = {
>>  for _, op in ipairs(oplist) do
>>      for n1, rhs in ipairs(literals) do
>>          for n2, lhs in ipairs(literals) do
>> -            if op ~= "LIKE" then
>> -                local t = test:execsql(string.format(" SELECT typeof(%s %s %s) ", lhs, op, rhs))[1]
>> -                test:do_test(
>> -                    string.format("e_expr-7.%s.%s.%s", opname[op], n1, n2),
>> -                    function()
>> -                        return (((op == "||") and ((t == "text") or
>> -                                (t == "null"))) or
>> -                                ((op ~= "||") and (((t == "integer") or
>> -                                 (t == "real")) or
>> -                                 (t == "null")))) and 1 or 0
>> -                    end, 1)
>> -            end
>> -        end
>> -    end
>> -end
>> -
>> -local valid_patterns =
>> -    {"'abc'", "'hexadecimal'", "''", 123, -123, 0,
>> -    123.4, 0.0, -123.4, "X''", "X'0000'", "NULL"}
>> -
>> -local invalid_patterns = {"X'ABCDEF'"}
>> -
>> -for n1, rhs in ipairs(valid_patterns) do
>> -    for n2, lhs in ipairs(literals) do
>> -        local t = test:execsql(string.format(" SELECT typeof(%s LIKE %s) ", lhs, rhs))[1]
>> -        test:do_test(
>> -            string.format("e_expr-7.%s.LIKE.%s", n1, n2),
>> -            function()
>> -                return (t == "integer" or
>> -                        t == "real" or
>> -                        t == "null") and 1 or 0
>> -            end, 1)
>> -    end
>> -end
>> +            local t = test:execsql(string.format(" SELECT typeof(%s %s %s) ", lhs, op, rhs))[1]
>> +            test:do_test(
>> +                string.format("e_expr-7.%s.%s.%s", opname[op], n1, n2),
>> +                function()
>> +                    --print("\n op "..op.." t "..t)
>> +                    return (((op == "||") and ((t == "text") or
>> +                            (t == "null"))) or
>> +                            ((op ~= "||") and (((t == "integer") or
>> +                                    (t == "real")) or
>> +                                    (t == "null")))) and 1 or 0
>> +                end, 1)
>>  
>> -for n1, rhs in ipairs(invalid_patterns) do
>> -    for n2, lhs in ipairs(literals) do
>> -        local t = string.format(" SELECT typeof(%s LIKE %s) ", lhs, rhs)
>> -        local test_name = string.format("e_expr-7.%s.LIKE.%s", n1 + 12, n2)
>> -        if n2 ~= 13 then
>> -            test:do_catchsql_test(
>> -                test_name,
>> -                t,
>> -                {
>> -                    -- <test_name>
>> -                    1, "LIKE pattern can only contain UTF-8 characters"
>> -                    -- <test_name>
>> -                })
>> -        else
>> -            test:do_catchsql_test(
>> -                test_name,
>> -                t,
>> -                {
>> -                    -- <test_name>
>> -                    0, {"null"}
>> -                    -- <test_name>
>> -                })
>>          end
>>      end
>>  end
>> -
>>  ---------------------------------------------------------------------------
>>  -- Test the IS and IS NOT operators.
>>  --
>> @@ -1343,15 +1298,12 @@ test:execsql [[
>>      CREATE TABLE tblname(cname PRIMARY KEY);
>>  ]]
>>  
>> --- NOTE: GLOB is removed from Tarantool, thus it'll be needed to
>> ---       refactor these calls. They don't work right now since
>> ---          we don't support MATHC & REGEXP.
>> --- local function glob(args)
>> ---     return 1
>> --- end
>> +local function glob(args)
>> +    return 1
>> +end
>>  
>> --- box.internal.sql_create_function("MATCH", glob)
>> --- box.internal.sql_create_function("REGEXP", glob)
>> +box.internal.sql_create_function("MATCH", glob)
>> +box.internal.sql_create_function("REGEXP", glob)
>>  local test_cases12 ={
>>      {1, 123},
>>      {2, 123.4e05},
>> @@ -2312,96 +2264,14 @@ test:do_execsql_test(
>>          -- </e_expr-16.1.7>
>>      })
>>  
>> --- EVIDENCE-OF: R-52087-12043 LIKE doesn't use Unix file globbing
>> --- syntax for its wildcards.
>> ---
>> -test:do_execsql_test(
>> -    "e_expr-17.1.0",
>> -    [[
>> -        PRAGMA case_sensitive_like = 1
>> -    ]], {
>> -        -- <e_expr-17.1.0>
>> -
>> -        -- <e_expr-17.1.0>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.1",
>> -    [[
>> -        SELECT 'abcxyz' LIKE 'abc*'
>> -    ]], {
>> -        -- <e_expr-17.1.1>
>> -        0
>> -        -- </e_expr-17.1.1>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.2",
>> -    [[
>> -        SELECT 'abcxyz' LIKE 'abc%'
>> -    ]], {
>> -        -- <e_expr-17.1.2>
>> -        1
>> -        -- </e_expr-17.1.2>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.3",
>> -    [[
>> -        SELECT 'abcxyz' LIKE 'abc???'
>> -    ]], {
>> -        -- <e_expr-17.1.3>
>> -        0
>> -        -- </e_expr-17.1.3>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.4",
>> -    [[
>> -        SELECT 'abcxyz' LIKE 'abc___'
>> -    ]], {
>> -        -- <e_expr-17.1.4>
>> -        1
>> -        -- </e_expr-17.1.4>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.5",
>> -    [[
>> -        SELECT 'abcxyz' LIKE 'abc%'
>> -    ]], {
>> -        -- <e_expr-17.1.5>
>> -        1
>> -        -- </e_expr-17.1.5>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.6",
>> -    [[
>> -        SELECT 'ABCxyz' LIKE 'abc%'
>> -    ]], {
>> -        -- <e_expr-17.1.6>
>> -        0
>> -        -- </e_expr-17.1.6>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.7",
>> -    [[
>> -        SELECT 'abcxyz' LIKE 'ABC%'
>> -    ]], {
>> -        -- <e_expr-17.1.7>
>> -        0
>> -        -- </e_expr-17.1.7>
>> -    })
>> -
>>  -- EVIDENCE-OF: R-39616-20555 LIKE may be preceded by the
>>  -- NOT keyword to invert the sense of the test.
>>  --
>>  test:do_execsql_test(
>>      "e_expr-17.2.0",
>>      [[
>> -        SELECT 'abcxyz' NOT LIKE 'ABC%'
>> +        PRAGMA case_sensitive_like = 1;
>> +        SELECT 'abcxyz' NOT LIKE 'ABC%';
>>      ]], {
>>          -- <e_expr-17.2.0>
>>          1
>> @@ -2461,11 +2331,10 @@ test:do_execsql_test(
>>  -- MUST_WORK_TEST uses access to nullvalue... (sql parameters) and built in functions
>>  if 0>0 then
>>      db("nullvalue", "null")
>> -
>>      test:do_execsql_test(
>>          "e_expr-17.2.6",
>>          [[
>> -            SELECT 'abcxyz' NOT LIKE NULL
>> +            SELECT 'abcxyz' NOT GLOB NULL
>>          ]], {
>>              -- <e_expr-17.2.6>
>>              "null"
>> @@ -2475,13 +2344,33 @@ if 0>0 then
>>      test:do_execsql_test(
>>          "e_expr-17.2.7",
>>          [[
>> -            SELECT NULL NOT LIKE 'ABC%'
>> +            SELECT 'abcxyz' NOT LIKE NULL
>>          ]], {
>>              -- <e_expr-17.2.7>
>>              "null"
>>              -- </e_expr-17.2.7>
>>          })
>>  
>> +    test:do_execsql_test(
>> +        "e_expr-17.2.8",
>> +        [[
>> +            SELECT NULL NOT GLOB 'abc*'
>> +        ]], {
>> +            -- <e_expr-17.2.8>
>> +            "null"
>> +            -- </e_expr-17.2.8>
>> +        })
>> +
>> +    test:do_execsql_test(
>> +        "e_expr-17.2.9",
>> +        [[
>> +            SELECT NULL NOT LIKE 'ABC%'
>> +        ]], {
>> +            -- <e_expr-17.2.9>
>> +            "null"
>> +            -- </e_expr-17.2.9>
>> +        })
>> +
>>      db("nullvalue", "")
>>  end
>>  
>> diff --git a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
>> index 55943345f..a6d822ccd 100755
>> --- a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
>> +++ b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
>> @@ -185,7 +185,7 @@ local valid_testcases = {
>>  
>>  -- Valid testcases.
>>  for i, tested_string in ipairs(valid_testcases) do
>> -    test_name = prefix .. "8." .. tostring(i)
>> +    local test_name = prefix .. "8." .. tostring(i)
>>      local test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "';"
>>      test:do_execsql_test(test_name, test_itself, {0})
>>  
>> diff --git a/test/sql-tap/like3.test.lua b/test/sql-tap/like3.test.lua
>> index 0bc71a09c..8f4f79422 100755
>> --- a/test/sql-tap/like3.test.lua
>> +++ b/test/sql-tap/like3.test.lua
>> @@ -67,70 +67,6 @@ test:do_execsql_test(
>>          -- </like3-1.2>
>>      })
>>  
>> -test:do_execsql_test(
>> -    "like3-2.0",
>> -    [[
>> -        PRAGMA case_sensitive_like = 1;
>> -        CREATE TABLE t2(a PRIMARY KEY, b TEXT);
>> -        INSERT INTO t2 SELECT a, b FROM t1;
>> -        CREATE INDEX t2ba ON t2(b,a);
>> -        SELECT a, b FROM t2 WHERE b LIKE 'ab%' ORDER BY +a;
>> -    ]], {
>> -        -- <like3-2.0>
>> -        1, "abc", 4, "abc"
>> -        -- </like3-2.0>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "like3-2.1",
>> -    [[
>> -        SELECT a, b FROM t2 WHERE +b LIKE 'ab%' ORDER BY +a;
>> -    ]], {
>> -        -- <like3-2.1>
>> -        1, "abc", 4, "abc"
>> -        -- </like3-2.1>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "like3-2.2",
>> -    [[
>> -        SELECT a, b FROM t2 WHERE b>=x'6162' AND b LIKE 'ab%'
>> -    ]], {
>> -        -- <like3-2.2>
>> -        4, "abc"
>> -        -- </like3-2.2>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "like3-2.3",
>> -    [[
>> -        SELECT a, b FROM t2 WHERE +b>=x'6162' AND +b LIKE 'ab%'
>> -    ]], {
>> -        -- <like3-2.3>
>> -        4, "abc"
>> -        -- </like3-2.3>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "like3-2.4",
>> -    [[
>> -        SELECT a, b FROM t2 WHERE b LIKE 'ab%' AND b>=x'6162'
>> -    ]], {
>> -        -- <like3-2.4>
>> -        4, "abc"
>> -        -- </like3-2.4>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "like3-2.5",
>> -    [[
>> -        SELECT a, b FROM t2 WHERE +b LIKE 'ab%' AND +b>=x'6162';
>> -        PRAGMA case_sensitive_like = 0;
>> -    ]], {
>> -        -- <like3-2.5>
>> -        4, "abc"
>> -        -- </like3-2.5>
>> -    })
>>  test:execsql([[
>>      CREATE TABLE t3(x TEXT PRIMARY KEY COLLATE "unicode_ci");
>>      INSERT INTO t3(x) VALUES('aaa'),('abc'),('abd'),('abe'),('acz');
>> 
>> 
>> --
>> WBR, Nikita Tatunov.
>> n.tatunov@tarantool.org <mailto:n.tatunov@tarantool.org>
> 

diff --git a/extra/mkkeywordhash.c b/extra/mkkeywordhash.c
index 990c4199f..1fee3a7f2 100644
--- a/extra/mkkeywordhash.c
+++ b/extra/mkkeywordhash.c
@@ -159,7 +159,6 @@ static Keyword aKeywordTable[] = {
   { "FOR",                    "TK_FOR",         TRIGGER,          true  },
   { "FOREIGN",                "TK_FOREIGN",     FKEY,             true  },
   { "FROM",                   "TK_FROM",        ALWAYS,           true  },
-  { "GLOB",                   "TK_LIKE_KW",     ALWAYS,           false },
   { "GROUP",                  "TK_GROUP",       ALWAYS,           true  },
   { "HAVING",                 "TK_HAVING",      ALWAYS,           true  },
   { "IF",                     "TK_IF",          ALWAYS,           true  },
diff --git a/src/box/sql/analyze.c b/src/box/sql/analyze.c
index 5f73f026e..fc7588c3f 100644
--- a/src/box/sql/analyze.c
+++ b/src/box/sql/analyze.c
@@ -829,7 +829,7 @@ analyzeOneTable(Parse * pParse,	/* Parser context */
 		return;
 	}
 	assert(pTab->tnum != 0);
-	if (sqlite3_strlike("\\_%", pTab->def->name, '\\') == 0) {
+	if (sql_strlike_ci("\\_%", pTab->def->name, '\\') == 0) {
 		/* Do not gather statistics on system tables */
 		return;
 	}
@@ -1333,11 +1333,10 @@ analysis_loader(void *data, int argc, char **argv, char **unused)
 	/* Position ptr at the end of stat string. */
 	for (; *z == ' ' || (*z >= '0' && *z <= '9'); ++z);
 	while (z[0]) {
-		if (sqlite3_strglob("unordered*", z) == 0) {
+		if (sql_strlike_cs("unordered%", z, '[') == 0)
 			index->def->opts.stat->is_unordered = true;
-		} else if (sqlite3_strglob("noskipscan*", z) == 0) {
+		else if (sql_strlike_cs("noskipscan%", z, '[') == 0)
 			index->def->opts.stat->skip_scan_enabled = false;
-		}
 		while (z[0] != 0 && z[0] != ' ')
 			z++;
 		while (z[0] == ' ')
diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index 66cae17b5..28b435ae3 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -607,41 +607,38 @@ total_changes(sqlite3_context * context, int NotUsed, sqlite3_value ** NotUsed2)
 	sqlite3_result_int(context, sqlite3_total_changes(db));
 }
 
-/*
- * A structure defining how to do GLOB-style comparisons.
- */
-struct compareInfo {
-	u8 matchAll;		/* "*" or "%" */
-	u8 matchOne;		/* "?" or "_" */
-	u8 matchSet;		/* "[" or 0 */
-	u8 noCase;		/* true to ignore case differences */
-};
-
 /**
- * Providing there are symbols in string s this
- * macro returns UTF-8 code of character and
- * promotes pointer to the next symbol in the string.
- * Otherwise return code is SQL_END_OF_STRING.
+ * Providing there are symbols in string s this macro returns
+ * UTF-8 code of character and promotes pointer to the next
+ * symbol in the string. If s points to an invalid UTF-8 symbol
+ * return code is SQL_INVALID_UTF8_SYMBOL. If there're no symbols
+ * left in string s return code is SQL_END_OF_STRING.
  */
 #define Utf8Read(s, e) ucnv_getNextUChar(pUtf8conv, &(s), (e), &(status))
 
 #define SQL_END_OF_STRING        0xffff
 #define SQL_INVALID_UTF8_SYMBOL  0xfffd
 
-static const struct compareInfo globInfo = { '*', '?', '[', 0 };
+/**
+ * If SQLITE_CASE_SENSITIVE_LIKE is not defined, then the LIKE
+ * operator is not case sensitive.
+ */
+static const int case_insensitive_like = 1;
 
-/* The correct SQL-92 behavior is for the LIKE operator to ignore
- * case.  Thus  'a' LIKE 'A' would be true.
+/**
+ * If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE
+ * operator is case sensitive causing 'a' LIKE 'A' to be false.
  */
-static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
+static const int case_sensitive_like = 0;
 
-/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
- * is case sensitive causing 'a' LIKE 'A' to be false
+/**
+ * Wildcards.
  */
-static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
+#define match_one '_'
+#define match_all '%'
 
-/*
- * Possible error returns from sql_utf8_pattern_compare()
+/**
+ * Possible error returns from sql_utf8_pattern_compare().
  */
 #define SQL_MATCH                0
 #define SQL_NOMATCH              1
@@ -650,138 +647,91 @@ static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
 
 /**
  * Compare two UTF-8 strings for equality where the first string
- * is a GLOB or LIKE expression.
- *
- * Globbing rules:
- *
- *      '*'       Matches any sequence of zero or more characters.
- *
- *      '?'       Matches exactly one character.
- *
- *     [...]      Matches one character from the enclosed list of
- *                characters.
- *
- *     [^...]     Matches one character not in the enclosed list.
- *
- * With the [...] and [^...] matching, a ']' character can be
- * included in the list by making it the first character after
- * '[' or '^'. A range of characters can be specified using '-'.
- * Example: "[a-z]" matches any single lower-case letter.
- * To match a '-', make it the last character in the list.
+ * is a LIKE expression.
  *
  * Like matching rules:
  *
- *      '%'       Matches any sequence of zero or more characters.
+ *      '%'       Matches any sequence of zero or more
+ *                characters.
  *
  *      '_'       Matches any one character.
  *
- *      Ec        Where E is the "esc" character and c is any other
- *                character, including '%', '_', and esc, match
- *                exactly c.
- *
- * The comments within this routine usually assume glob matching.
+ *      Ec        Where E is the "esc" character and c is any
+ *                other character, including '%', '_', and esc,
+ *                match exactly c.
  *
  * This routine is usually quick, but can be N**2 in the worst
  * case.
  *
  * @param pattern String containing comparison pattern.
  * @param string String being compared.
- * @param compareInfo Information about how to compare.
- * @param matchOther The escape char (LIKE) or '[' (GLOB).
+ * @param is_like_ci true if LIKE is case insensitive.
+ * @param match_other The escape char for LIKE.
  *
  * @retval SQL_MATCH:               Match.
  *	   SQL_NOMATCH:             No match.
- *	   SQL_NOWILDCARDMATCH:     No match in spite of having *
- *				    or % wildcards.
+ *	   SQL_NOWILDCARDMATCH:     No match in spite of having %
+ *				    wildcard.
  *	   SQL_INVALID_PATTERN:     Pattern contains invalid
  *				    symbol.
  */
 static int
 sql_utf8_pattern_compare(const char *pattern,
 			 const char *string,
-			 const struct compareInfo *pInfo,
-			 UChar32 matchOther)
+			 const int is_like_ci,
+			 UChar32 match_other)
 {
 	/* Next pattern and input string chars */
 	UChar32 c, c2;
-	/* "?" or "_" */
-	UChar32 matchOne = pInfo->matchOne;
-	/* "*" or "%" */
-	UChar32 matchAll = pInfo->matchAll;
-	/* True if uppercase==lowercase */
-	UChar32 noCase = pInfo->noCase;
 	/* One past the last escaped input char */
 	const char *zEscaped = 0;
-	const char * pattern_end = pattern + strlen(pattern);
-	const char * string_end = string + strlen(string);
+	const char *pattern_end = pattern + strlen(pattern);
+	const char *string_end = string + strlen(string);
 	UErrorCode status = U_ZERO_ERROR;
 
 	while (pattern < pattern_end) {
 		c = Utf8Read(pattern, pattern_end);
 		if (c == SQL_INVALID_UTF8_SYMBOL)
 			return SQL_INVALID_PATTERN;
-		if (c == matchAll) {	/* Match "*" */
-			/* Skip over multiple "*" characters in
-			 * the pattern. If there are also "?"
+		if (c == match_all) {
+			/**
+			 * Skip over multiple "%" characters in
+			 * the pattern. If there are also "_"
 			 * characters, skip those as well, but
 			 * consume a single character of the
-			 * input string for each "?" skipped.
+			 * input string for each "_" skipped.
 			 */
 			while ((c = Utf8Read(pattern, pattern_end)) !=
 			       SQL_END_OF_STRING) {
 				if (c == SQL_INVALID_UTF8_SYMBOL)
 					return SQL_INVALID_PATTERN;
-				if (c != matchAll && c != matchOne)
+				if (c != match_all && c != match_one)
 					break;
-				if (c == matchOne &&
+				if (c == match_one &&
 				    (c2 = Utf8Read(string, string_end)) ==
 				    SQL_END_OF_STRING)
 					return SQL_NOWILDCARDMATCH;
 				if (c2 == SQL_INVALID_UTF8_SYMBOL)
 					return SQL_NOMATCH;
 			}
-			/*
-			 * "*" at the end of the pattern matches.
+			/**
+			 * "%" at the end of the pattern matches.
 			 */
 			if (c == SQL_END_OF_STRING) {
 				return SQL_MATCH;
 			}
-			if (c == matchOther) {
-				if (pInfo->matchSet == 0) {
-					c = Utf8Read(pattern, pattern_end);
-					if (c == SQL_INVALID_UTF8_SYMBOL)
-						return SQL_INVALID_PATTERN;
-					if (c == SQL_END_OF_STRING)
-						return SQL_NOWILDCARDMATCH;
-				} else {
-					/* "[...]" immediately
-					 * follows the "*". We
-					 * have to do a slow
-					 * recursive search in
-					 * this case, but it is
-					 * an unusual case.
-					 */
-					assert(matchOther < 0x80);
-					while (string < string_end) {
-						int bMatch =
-						    sql_utf8_pattern_compare(
-								&pattern[-1],
-								string,
-								pInfo,
-								matchOther);
-						if (bMatch != SQL_NOMATCH)
-							return bMatch;
-						c = Utf8Read(string, string_end);
-						if (c == SQL_INVALID_UTF8_SYMBOL)
-							return SQL_NOMATCH;
-					}
+			if (c == match_other) {
+				c = Utf8Read(pattern, pattern_end);
+				if (c == SQL_INVALID_UTF8_SYMBOL)
+					return SQL_INVALID_PATTERN;
+				if (c == SQL_END_OF_STRING)
 					return SQL_NOWILDCARDMATCH;
-				}
 			}
 
-			/* At this point variable c contains the
+			/**
+			 * At this point variable c contains the
 			 * first character of the pattern string
-			 * past the "*". Search in the input
+			 * past the "%". Search in the input
 			 * string for the first matching
 			 * character and recursively continue the
 			 * match from that point.
@@ -793,7 +743,7 @@ sql_utf8_pattern_compare(const char *pattern,
 			 */
 
 			int bMatch;
-			if (noCase)
+			if (is_like_ci)
 				c = u_tolower(c);
 			while (string < string_end){
 				/**
@@ -809,7 +759,7 @@ sql_utf8_pattern_compare(const char *pattern,
 				c2 = Utf8Read(string, string_end);
 				if (c2 == SQL_INVALID_UTF8_SYMBOL)
 					return SQL_NOMATCH;
-				if (!noCase) {
+				if (!is_like_ci) {
 					if (c2 != c)
 						continue;
 				} else {
@@ -818,79 +768,27 @@ sql_utf8_pattern_compare(const char *pattern,
 				}
 				bMatch = sql_utf8_pattern_compare(pattern,
 								  string,
-								  pInfo,
-								  matchOther);
+								  is_like_ci,
+								  match_other);
 				if (bMatch != SQL_NOMATCH)
 					return bMatch;
 			}
 			return SQL_NOWILDCARDMATCH;
 		}
-		if (c == matchOther) {
-			if (pInfo->matchSet == 0) {
-				c = Utf8Read(pattern, pattern_end);
-				if (c == SQL_INVALID_UTF8_SYMBOL)
-					return SQL_INVALID_PATTERN;
-				if (c == SQL_END_OF_STRING)
-					return SQL_NOMATCH;
-				zEscaped = pattern;
-			} else {
-				UChar32 prior_c = 0;
-				int seen = 0;
-				int invert = 0;
-				c = Utf8Read(string, string_end);
-				if (c == SQL_INVALID_UTF8_SYMBOL)
-					return SQL_NOMATCH;
-				if (string == string_end)
-					return SQL_NOMATCH;
-				c2 = Utf8Read(pattern, pattern_end);
-				if (c2 == SQL_INVALID_UTF8_SYMBOL)
-					return SQL_INVALID_PATTERN;
-				if (c2 == '^') {
-					invert = 1;
-					c2 = Utf8Read(pattern, pattern_end);
-					if (c2 == SQL_INVALID_UTF8_SYMBOL)
-						return SQL_INVALID_PATTERN;
-				}
-				if (c2 == ']') {
-					if (c == ']')
-						seen = 1;
-					c2 = Utf8Read(pattern, pattern_end);
-					if (c2 == SQL_INVALID_UTF8_SYMBOL)
-						return SQL_INVALID_PATTERN;
-				}
-				while (c2 != SQL_END_OF_STRING && c2 != ']') {
-					if (c2 == '-' && pattern[0] != ']'
-					    && pattern < pattern_end
-					    && prior_c > 0) {
-						c2 = Utf8Read(pattern, pattern_end);
-						if (c2 == SQL_INVALID_UTF8_SYMBOL)
-							return SQL_INVALID_PATTERN;
-						if (c >= prior_c && c <= c2)
-							seen = 1;
-						prior_c = 0;
-					} else {
-						if (c == c2) {
-							seen = 1;
-						}
-						prior_c = c2;
-					}
-					c2 = Utf8Read(pattern, pattern_end);
-					if (c2 == SQL_INVALID_UTF8_SYMBOL)
-						return SQL_INVALID_PATTERN;
-				}
-				if (pattern == pattern_end ||
-				    (seen ^ invert) == 0) {
-					return SQL_NOMATCH;
-				}
-				continue;
-			}
+		if (c == match_other) {
+			c = Utf8Read(pattern, pattern_end);
+			if (c == SQL_INVALID_UTF8_SYMBOL)
+				return SQL_INVALID_PATTERN;
+			if (c == SQL_END_OF_STRING)
+				return SQL_NOMATCH;
+			zEscaped = pattern;
 		}
 		c2 = Utf8Read(string, string_end);
 		if (c2 == SQL_INVALID_UTF8_SYMBOL)
 			return SQL_NOMATCH;
 		if (c == c2)
 			continue;
-		if (noCase){
+		if (is_like_ci) {
 			/**
 			 * Small optimisation. Reduce number of
 			 * calls to u_tolower function. SQL
@@ -903,7 +801,7 @@ sql_utf8_pattern_compare(const char *pattern,
 			    c == u_tolower(c2))
 				continue;
 		}
-		if (c == matchOne && pattern != zEscaped &&
+		if (c == match_one && pattern != zEscaped &&
 		    c2 != SQL_END_OF_STRING)
 			continue;
 		return SQL_NOMATCH;
@@ -911,55 +809,52 @@ sql_utf8_pattern_compare(const char *pattern,
 	return string == string_end ? SQL_MATCH : SQL_NOMATCH;
 }
 
-/*
- * The sqlite3_strglob() interface.  Return 0 on a match (like strcmp()) and
- * non-zero if there is no match.
+/**
+ * Compare two UTF-8 strings for equality using case sensitive
+ * sql_utf8_pattern_compare.
  */
 int
-sqlite3_strglob(const char *zGlobPattern, const char *zString)
+sql_strlike_cs(const char *zPattern, const char *zStr, unsigned int esc)
 {
-	return sql_utf8_pattern_compare(zGlobPattern, zString, &globInfo, '[');
+	return sql_utf8_pattern_compare(zPattern, zStr, case_sensitive_like, esc);
 }
 
-/*
- * The sqlite3_strlike() interface.  Return 0 on a match and non-zero for
- * a miss - like strcmp().
+/**
+ * Compare two UTF-8 strings for equality using case insensitive
+ * sql_utf8_pattern_compare.
  */
 int
-sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc)
+sql_strlike_ci(const char *zPattern, const char *zStr, unsigned int esc)
 {
-	return sql_utf8_pattern_compare(zPattern, zStr, &likeInfoNorm, esc);
+	return sql_utf8_pattern_compare(zPattern, zStr, case_insensitive_like, esc);
 }
 
-/*
- * Count the number of times that the LIKE operator (or GLOB which is
- * just a variation of LIKE) gets called.  This is used for testing
- * only.
+/**
+ * Count the number of times that the LIKE operator gets called.
+ * This is used for testing only.
  */
 #ifdef SQLITE_TEST
 int sqlite3_like_count = 0;
 #endif
 
-/*
- * Implementation of the like() SQL function.  This function implements
- * the build-in LIKE operator.  The first argument to the function is the
- * pattern and the second argument is the string.  So, the SQL statements:
+/**
+ * Implementation of the like() SQL function. This function
+ * implements the built-in LIKE operator. The first argument to
+ * the function is the pattern and the second argument is the
+ * string. So, the SQL statements of the following type:
  *
  *       A LIKE B
  *
- * is implemented as like(B,A).
- *
- * This same function (with a different compareInfo structure) computes
- * the GLOB operator.
+ * are implemented as like(B,A).
  */
 static void
-likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
+likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
 {
 	const char *zA, *zB;
 	u32 escape;
 	int nPat;
 	sqlite3 *db = sqlite3_context_db_handle(context);
-	struct compareInfo *pInfo = sqlite3_user_data(context);
+	int *is_like_ci = sqlite3_user_data(context);
 
 #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
 	if (sqlite3_value_type(argv[0]) == SQLITE_BLOB
@@ -974,8 +869,9 @@ likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
 	zB = (const char *) sqlite3_value_text(argv[0]);
 	zA = (const char *) sqlite3_value_text(argv[1]);
 
-	/* Limit the length of the LIKE or GLOB pattern to avoid
-	 * problems of deep recursion and N*N behavior in
+	/**
+	 * Limit the length of the LIKE pattern to avoid problems
+	 * of deep recursion and N*N behavior in
 	 * sql_utf8_pattern_compare().
 	 */
 	nPat = sqlite3_value_bytes(argv[0]);
@@ -983,28 +879,29 @@ likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
 	testcase(nPat == db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] + 1);
 	if (nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]) {
 		sqlite3_result_error(context,
-				     "LIKE or GLOB pattern too complex", -1);
+				     "LIKE pattern is too complex", -1);
 		return;
 	}
 	/* Encoding did not change */
 	assert(zB == (const char *) sqlite3_value_text(argv[0]));
 
 	if (argc == 3) {
-		/* The escape character string must consist of a single UTF-8 character.
-		 * Otherwise, return an error.
+		/**
+		 * The escape character string must consist of a
+		 * single UTF-8 character. Otherwise, return an
+		 * error.
 		 */
 		const unsigned char *zEsc = sqlite3_value_text(argv[2]);
 		if (zEsc == 0)
 			return;
 		if (sqlite3Utf8CharLen((char *)zEsc, -1) != 1) {
 			sqlite3_result_error(context,
-					     "ESCAPE expression must be a single character",
+					     "ESCAPE expression must be a"
+					     " single character",
 					     -1);
 			return;
 		}
 		escape = sqlite3Utf8Read(&zEsc);
-	} else {
-		escape = pInfo->matchSet;
 	}
 	if (!zA || !zB)
 		return;
@@ -1012,10 +909,10 @@ likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
 	sqlite3_like_count++;
 #endif
 	int res;
-	res = sql_utf8_pattern_compare(zB, zA, pInfo, escape);
+	res = sql_utf8_pattern_compare(zB, zA, *is_like_ci, escape);
 	if (res == SQL_INVALID_PATTERN) {
-		sqlite3_result_error(context, "LIKE or GLOB pattern can only"
-				     " contain UTF-8 characters", -1);
+		sqlite3_result_error(context, "LIKE pattern can only contain"
+				     " UTF-8 characters", -1);
 		return;
 	}
 	sqlite3_result_int(context, res == SQL_MATCH);
@@ -1811,64 +1708,54 @@ setLikeOptFlag(sqlite3 * db, const char *zName, u8 flagVal)
 	}
 }
 
-/*
- * Register the built-in LIKE and GLOB functions.  The caseSensitive
- * parameter determines whether or not the LIKE operator is case
- * sensitive.  GLOB is always case sensitive.
+/**
+ * Register the built-in LIKE function.
+ *
+ * @param db database structure.
+ * @param is_case_sensitive whether like should be case sensitive
+ * 			 or not.
+ *
+ * @retval none.
  */
 void
-sqlite3RegisterLikeFunctions(sqlite3 * db, int caseSensitive)
+sqlite3RegisterLikeFunctions(sqlite3 *db, int is_case_sensitive)
 {
-	struct compareInfo *pInfo;
-	if (caseSensitive) {
-		pInfo = (struct compareInfo *)&likeInfoAlt;
-	} else {
-		pInfo = (struct compareInfo *)&likeInfoNorm;
-	}
-	sqlite3CreateFunc(db, "LIKE", 2, 0, pInfo, likeFunc, 0, 0, 0);
-	sqlite3CreateFunc(db, "LIKE", 3, 0, pInfo, likeFunc, 0, 0, 0);
-	sqlite3CreateFunc(db, "GLOB", 2, 0, (struct compareInfo *)&globInfo, likeFunc, 0, 0, 0);
-	setLikeOptFlag(db, "GLOB", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
+	int *is_like_ci;
+	if (is_case_sensitive)
+		is_like_ci = (int *)&case_sensitive_like;
+	else
+		is_like_ci = (int *)&case_insensitive_like;
+	sqlite3CreateFunc(db, "LIKE", 2, 0, is_like_ci, likeFunc, 0, 0, 0);
+	sqlite3CreateFunc(db, "LIKE", 3, 0, is_like_ci, likeFunc, 0, 0, 0);
 	setLikeOptFlag(db, "LIKE",
-		       caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) :
-		       SQLITE_FUNC_LIKE);
+		       is_case_sensitive ? (SQLITE_FUNC_LIKE |
+		       SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
 }
 
-/*
- * pExpr points to an expression which implements a function.  If
- * it is appropriate to apply the LIKE optimization to that function
- * then set aWc[0] through aWc[2] to the wildcard characters and
- * return TRUE.  If the function is not a LIKE-style function then
- * return FALSE.
+/**
+ * Check if the function implements LIKE-style comparison & if it
+ * is appropriate to apply a LIKE query optimization.
+ *
+ * @param db database structure.
+ * @param pExpr pointer to a function-implementing expression.
+ * @param is_like_ci true if LIKE is case insensitive.
  *
- * *pIsNocase is set to true if uppercase and lowercase are equivalent for
- * the function (default for LIKE).  If the function makes the distinction
- * between uppercase and lowercase (as does GLOB) then *pIsNocase is set to
- * false.
+ * @retval 0 if it's appropriate to apply optimization.
+ *         1 if it's not.
  */
 int
-sqlite3IsLikeFunction(sqlite3 * db, Expr * pExpr, int *pIsNocase, char *aWc)
+sql_is_like_func(sqlite3 *db, Expr *pExpr, int *is_like_ci)
 {
 	FuncDef *pDef;
-	if (pExpr->op != TK_FUNCTION
-	    || !pExpr->x.pList || pExpr->x.pList->nExpr != 2) {
+	if (pExpr->op != TK_FUNCTION || !pExpr->x.pList ||
+	    pExpr->x.pList->nExpr != 2)
 		return 0;
-	}
 	assert(!ExprHasProperty(pExpr, EP_xIsSelect));
 	pDef = sqlite3FindFunction(db, pExpr->u.zToken, 2, 0);
 	if (NEVER(pDef == 0) || (pDef->funcFlags & SQLITE_FUNC_LIKE) == 0) {
 		return 0;
 	}
-
-	/* The memcpy() statement assumes that the wildcard characters are
-	 * the first three statements in the compareInfo structure.  The
-	 * asserts() that follow verify that assumption
-	 */
-	memcpy(aWc, pDef->pUserData, 3);
-	assert((char *)&likeInfoAlt == (char *)&likeInfoAlt.matchAll);
-	assert(&((char *)&likeInfoAlt)[1] == (char *)&likeInfoAlt.matchOne);
-	assert(&((char *)&likeInfoAlt)[2] == (char *)&likeInfoAlt.matchSet);
-	*pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE) == 0;
+	*is_like_ci = (pDef->funcFlags & SQLITE_FUNC_CASE) == 0;
 	return 1;
 }
 
@@ -1962,16 +1849,14 @@ sqlite3RegisterBuiltinFunctions(void)
 		AGGREGATE(group_concat, 2, 0, 0, groupConcatStep,
 			  groupConcatFinalize),
 
-		LIKEFUNC(glob, 2, &globInfo,
-			 SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE),
 #ifdef SQLITE_CASE_SENSITIVE_LIKE
-		LIKEFUNC(like, 2, &likeInfoAlt,
+		LIKEFUNC(like, 2, &case_sensitive_like,
 			 SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE),
-		LIKEFUNC(like, 3, &likeInfoAlt,
+		LIKEFUNC(like, 3, &case_sensitive_like,
 			 SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE),
 #else
-		LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
-		LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
+		LIKEFUNC(like, 2, &case_insensitive_like, SQLITE_FUNC_LIKE),
+		LIKEFUNC(like, 3, &case_insensitive_like, SQLITE_FUNC_LIKE),
 #endif
 #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
 		FUNCTION(unknown, -1, 0, 0, unknownFunc),
diff --git a/src/box/sql/pragma.c b/src/box/sql/pragma.c
index 5fb29c75c..26a602b23 100644
--- a/src/box/sql/pragma.c
+++ b/src/box/sql/pragma.c
@@ -771,8 +771,10 @@ sqlite3Pragma(Parse * pParse, Token * pId,	/* First part of [schema.]id field */
 		}
 #endif
 
-		/* Reinstall the LIKE and GLOB functions.  The variant of LIKE *
-		 * used will be case sensitive or not depending on the RHS.
+		/**
+		 * Reinstall the LIKE and functions. The variant
+		 * of LIKE * used will be case sensitive or not
+		 * depending on the RHS.
 		 */
 	case PragTyp_CASE_SENSITIVE_LIKE:{
 			if (zRight) {
diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
index e7a02dc1d..a805adf22 100644
--- a/src/box/sql/sqliteInt.h
+++ b/src/box/sql/sqliteInt.h
@@ -565,16 +565,15 @@ char *
 sqlite3_vsnprintf(int, char *, const char *, va_list);
 
 int
-sqlite3_strlike(const char *zGlob, const char *zStr,
-		unsigned int cEsc);
+sql_strlike_cs(const char *zLike, const char *zStr, unsigned int cEsc);
+
+int
+sql_strlike_ci(const char *zLike, const char *zStr, unsigned int cEsc);
 
 typedef void (*sqlite3_destructor_type) (void *);
 #define SQLITE_STATIC      ((sqlite3_destructor_type)0)
 #define SQLITE_TRANSIENT   ((sqlite3_destructor_type)-1)
 
-int
-sqlite3_strglob(const char *zGlob, const char *zStr);
-
 int
 sqlite3_prepare(sqlite3 * db,	/* Database handle */
 		const char *zSql,	/* SQL statement, UTF-8 encoded */
@@ -701,9 +700,6 @@ struct on_conflict {
 	enum on_conflict_action optimized_action;
 };
 
-void *
-sqlite3_user_data(sqlite3_context *);
-
 void
 sqlite3_randomness(int N, void *P);
 
@@ -2355,7 +2351,7 @@ struct Expr {
 #define EP_Distinct  0x000010	/* Aggregate function with DISTINCT keyword */
 #define EP_VarSelect 0x000020	/* pSelect is correlated, not constant */
 #define EP_DblQuoted 0x000040	/* token.z was originally in "..." */
-#define EP_InfixFunc 0x000080	/* True for an infix function: LIKE, GLOB, etc */
+#define EP_InfixFunc 0x000080	/* True for an infix function: LIKE, etc */
 #define EP_Collate   0x000100	/* Tree contains a TK_COLLATE operator */
 #define EP_Generic   0x000200	/* Ignore COLLATE or affinity on this tree */
 #define EP_IntValue  0x000400	/* Integer value contained in u.iValue */
@@ -4378,7 +4374,7 @@ index_column_count(const Index *);
 bool
 index_is_unique_not_null(const Index *);
 void sqlite3RegisterLikeFunctions(sqlite3 *, int);
-int sqlite3IsLikeFunction(sqlite3 *, Expr *, int *, char *);
+int sql_is_like_func(sqlite3 *db, Expr *pExpr, int *is_case_insensitive);
 void sqlite3SchemaClear(sqlite3 *);
 Schema *sqlite3SchemaCreate(sqlite3 *);
 int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *,
diff --git a/src/box/sql/sqliteLimit.h b/src/box/sql/sqliteLimit.h
index b88c9c6d3..e76353aff 100644
--- a/src/box/sql/sqliteLimit.h
+++ b/src/box/sql/sqliteLimit.h
@@ -164,8 +164,7 @@ enum {
 #endif
 
 /*
- * Maximum length (in bytes) of the pattern in a LIKE or GLOB
- * operator.
+ * Maximum length (in bytes) of the pattern in a LIKE operator.
  */
 #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH
 #define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000
diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
index 0c978142d..3f10f4d68 100644
--- a/src/box/sql/vdbe.c
+++ b/src/box/sql/vdbe.c
@@ -5521,7 +5521,7 @@ vdbe_return:
 	testcase( nVmStep>0);
 	p->aCounter[SQLITE_STMTSTATUS_VM_STEP] += (int)nVmStep;
 	assert(rc!=SQLITE_OK || nExtraDelete==0
-		|| sqlite3_strlike("DELETE%",p->zSql,0)!=0
+		|| sql_strlike_ci("DELETE%", p->zSql, 0) != 0
 		);
 	return rc;
 
diff --git a/src/box/sql/wherecode.c b/src/box/sql/wherecode.c
index c35c25ac4..f864ea7fa 100644
--- a/src/box/sql/wherecode.c
+++ b/src/box/sql/wherecode.c
@@ -339,7 +339,7 @@ sqlite3WhereAddScanStatus(Vdbe * v,		/* Vdbe to add scanstatus entry to */
  * automatically disabled.  In this way, terms get disabled if derived
  * virtual terms are tested first.  For example:
  *
- *      x GLOB 'abc*' AND x>='abc' AND x<'acd'
+ *      x LIKE 'abc%' AND x>='abc' AND x<'acd'
  *      \___________/     \______/     \_____/
  *         parent          child1       child2
  *
diff --git a/src/box/sql/whereexpr.c b/src/box/sql/whereexpr.c
index 612868695..2d9fb6453 100644
--- a/src/box/sql/whereexpr.c
+++ b/src/box/sql/whereexpr.c
@@ -218,38 +218,61 @@ operatorMask(int op)
 	return c;
 }
 
+/**
+ * Wildcard characters.
+ */
+#define match_one '_'
+#define match_all '%'
+
 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
-/*
- * Check to see if the given expression is a LIKE or GLOB operator that
- * can be optimized using inequality constraints.  Return TRUE if it is
- * so and false if not.
+/**
+ * Check to see if the given expression is a LIKE operator that
+ * can be optimized using inequality constraints.
  *
- * In order for the operator to be optimizible, the RHS must be a string
- * literal that does not begin with a wildcard.  The LHS must be a column
- * that may only be NULL, a string, or a BLOB, never a number. The
- * collating sequence for the column on the LHS must be appropriate for
- * the operator.
+ * In order for the operator to be optimizible, the RHS must be a
+ * string literal that does not begin with a wildcard. The LHS
+ * must be a column that may only be NULL, a string, or a BLOB,
+ * never a number. The collating sequence for the column on the
+ * LHS must be appropriate for the operator.
+ *
+ * @param pParse      Parsing and code generating context.
+ * @param pExpr       Test this expression.
+ * @param ppPrefix    Pointer to TK_STRING expression with
+ *		      pattern prefix.
+ * @param pisComplete True if the only wildcard is '%' in the
+ * 		      last character.
+ * @param pnoCase     True if case insensitive.
+ *
+ * @retval True if the given expr is a LIKE operator & is
+ *	   optimizable using inequality constraints.
+ * 	   False if not.
  */
 static int
-isLikeOrGlob(Parse * pParse,	/* Parsing and code generating context */
-	     Expr * pExpr,	/* Test this expression */
-	     Expr ** ppPrefix,	/* Pointer to TK_STRING expression with pattern prefix */
-	     int *pisComplete,	/* True if the only wildcard is % in the last character */
-	     int *pnoCase	/* True if uppercase is equivalent to lowercase */
-    )
+is_like(Parse *pParse,
+	Expr *pExpr,
+	Expr **ppPrefix,
+	int *pisComplete,
+	int *pnoCase)
 {
-	const char *z = 0;	/* String on RHS of LIKE operator */
-	Expr *pRight, *pLeft;	/* Right and left size of LIKE operator */
-	ExprList *pList;	/* List of operands to the LIKE operator */
-	int c;			/* One character in z[] */
-	int cnt;		/* Number of non-wildcard prefix characters */
-	char wc[3];		/* Wildcard characters */
-	sqlite3 *db = pParse->db;	/* Database connection */
+	/* String on RHS of LIKE operator */
+	const char *z = 0;
+	/* Right and left size of LIKE operator */
+	Expr *pRight, *pLeft;
+	/* List of operands to the LIKE operator */
+	ExprList *pList;
+	/* One character in z[] */
+	int c;
+	/* Number of non-wildcard prefix characters */
+	int cnt;
+	/* Database connection */
+	sqlite3 *db = pParse->db;
 	sqlite3_value *pVal = 0;
-	int op;			/* Opcode of pRight */
-	int rc;			/* Result code to return */
+	/* Opcode of pRight */
+	int op;
+	/* Result code to return */
+	int rc;
 
-	if (!sqlite3IsLikeFunction(db, pExpr, pnoCase, wc)) {
+	if (!sql_is_like_func(db, pExpr, pnoCase)) {
 		return 0;
 	}
 	pList = pExpr->x.pList;
@@ -257,8 +280,9 @@ isLikeOrGlob(Parse * pParse,	/* Parsing and code generating context */
 	/* Value might be numeric */
 	if (pLeft->op != TK_COLUMN ||
 	    sqlite3ExprAffinity(pLeft) != AFFINITY_TEXT) {
-		/* IMP: R-02065-49465 The left-hand side of the LIKE or GLOB operator must
-		 * be the name of an indexed column with TEXT affinity.
+		/* IMP: R-02065-49465 The left-hand side of the
+		 * LIKE operator must be the name of an indexed
+		 * column with TEXT affinity.
 		 */
 		return 0;
 	}
@@ -281,13 +305,11 @@ isLikeOrGlob(Parse * pParse,	/* Parsing and code generating context */
 	}
 	if (z) {
 		cnt = 0;
-		while ((c = z[cnt]) != 0 && c != wc[0] && c != wc[1]
-		       && c != wc[2]) {
+		while ((c = z[cnt]) != 0 && c != match_one && c != match_all)
 			cnt++;
-		}
 		if (cnt != 0 && 255 != (u8) z[cnt - 1]) {
 			Expr *pPrefix;
-			*pisComplete = c == wc[0] && z[cnt + 1] == 0;
+			*pisComplete = c == match_all && z[cnt + 1] == 0;
 			pPrefix = sqlite3Expr(db, TK_STRING, z);
 			if (pPrefix)
 				pPrefix->u.zToken[cnt] = 0;
@@ -943,19 +965,32 @@ exprAnalyze(SrcList * pSrc,	/* the FROM clause */
 	    int idxTerm		/* Index of the term to be analyzed */
     )
 {
-	WhereInfo *pWInfo = pWC->pWInfo;	/* WHERE clause processing context */
-	WhereTerm *pTerm;	/* The term to be analyzed */
-	WhereMaskSet *pMaskSet;	/* Set of table index masks */
-	Expr *pExpr;		/* The expression to be analyzed */
-	Bitmask prereqLeft;	/* Prerequesites of the pExpr->pLeft */
-	Bitmask prereqAll;	/* Prerequesites of pExpr */
-	Bitmask extraRight = 0;	/* Extra dependencies on LEFT JOIN */
-	Expr *pStr1 = 0;	/* RHS of LIKE/GLOB operator */
-	int isComplete = 0;	/* RHS of LIKE/GLOB ends with wildcard */
-	int noCase = 0;		/* uppercase equivalent to lowercase */
-	int op;			/* Top-level operator.  pExpr->op */
-	Parse *pParse = pWInfo->pParse;	/* Parsing context */
-	sqlite3 *db = pParse->db;	/* Database connection */
+	/* WHERE clause processing context */
+	WhereInfo *pWInfo = pWC->pWInfo;
+	/* The term to be analyzed */
+	WhereTerm *pTerm;
+	/* Set of table index masks */
+	WhereMaskSet *pMaskSet;
+	/* The expression to be analyzed */
+	Expr *pExpr;
+	/* Prerequesites of the pExpr->pLeft */
+	Bitmask prereqLeft;
+	/* Prerequesites of pExpr */
+	Bitmask prereqAll;
+	/* Extra dependencies on LEFT JOIN */
+	Bitmask extraRight = 0;
+	/* RHS of LIKE operator */
+	Expr *pStr1 = 0;
+	/* RHS of LIKE ends with wildcard */
+	int isComplete = 0;
+	/* uppercase equivalent to lowercase */
+	int noCase = 0;
+	/* Top-level operator. pExpr->op */
+	int op;
+	/* Parsing context */
+	Parse *pParse = pWInfo->pParse;
+	/* Database connection */
+	sqlite3 *db = pParse->db;
 
 	if (db->mallocFailed) {
 		return;
@@ -1111,37 +1146,44 @@ exprAnalyze(SrcList * pSrc,	/* the FROM clause */
 #endif				/* SQLITE_OMIT_OR_OPTIMIZATION */
 
 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
-	/* Add constraints to reduce the search space on a LIKE or GLOB
+	/**
+	 * Add constraints to reduce the search space on a LIKE
 	 * operator.
 	 *
-	 * A like pattern of the form "x LIKE 'aBc%'" is changed into constraints
+	 * A like pattern of the form "x LIKE 'aBc%'" is changed
+	 * into constraints:
 	 *
 	 *          x>='ABC' AND x<'abd' AND x LIKE 'aBc%'
 	 *
-	 * The last character of the prefix "abc" is incremented to form the
-	 * termination condition "abd".  If case is not significant (the default
-	 * for LIKE) then the lower-bound is made all uppercase and the upper-
-	 * bound is made all lowercase so that the bounds also work when comparing
-	 * BLOBs.
+	 * The last character of the prefix "abc" is incremented
+	 * to form the termination condition "abd". If case is
+	 * not significant (the default for LIKE) then the
+	 * lower-bound is made all uppercase and the upper-bound
+	 * is made all lowercase so that the bounds also work
+	 * when comparing BLOBs.
 	 */
 	if (pWC->op == TK_AND
-	    && isLikeOrGlob(pParse, pExpr, &pStr1, &isComplete, &noCase)
-	    ) {
-		Expr *pLeft;	/* LHS of LIKE/GLOB operator */
-		Expr *pStr2;	/* Copy of pStr1 - RHS of LIKE/GLOB operator */
+	    && is_like(pParse, pExpr, &pStr1, &isComplete, &noCase)) {
+		/* LHS of LIKE operator */
+		Expr *pLeft;
+		/* Copy of pStr1 - RHS of LIKE operator */
+		Expr *pStr2;
 		Expr *pNewExpr1;
 		Expr *pNewExpr2;
 		int idxNew1;
 		int idxNew2;
-		const char *zCollSeqName;	/* Name of collating sequence */
+		/* Name of collating sequence */
+		const char *zCollSeqName;
 		const u16 wtFlags = TERM_LIKEOPT | TERM_VIRTUAL | TERM_DYNAMIC;
 
 		pLeft = pExpr->x.pList->a[1].pExpr;
 		pStr2 = sqlite3ExprDup(db, pStr1, 0);
 
-		/* Convert the lower bound to upper-case and the upper bound to
-		 * lower-case (upper-case is less than lower-case in ASCII) so that
-		 * the range constraints also work for BLOBs
+		/**
+		 * Convert the lower bound to upper-case and the
+		 * upper bound to lower-case (upper-case is less
+		 * than lower-case in ASCII) so that the range
+		 * constraints also work for BLOBs
 		 */
 		if (noCase && !pParse->db->mallocFailed) {
 			int i;
diff --git a/test/sql-tap/alter.test.lua b/test/sql-tap/alter.test.lua
index cfe280121..98338c493 100755
--- a/test/sql-tap/alter.test.lua
+++ b/test/sql-tap/alter.test.lua
@@ -232,7 +232,7 @@ test:do_execsql_test(
     [[
         CREATE TABLE xyz(x PRIMARY KEY);
         ALTER TABLE xyz RENAME TO "xyz1234abc";
-        SELECT "name" FROM "_space" WHERE "name" GLOB 'xyz*';
+        SELECT "name" FROM "_space" WHERE "name" = 'xyz1234abc';
     ]], {
         -- <alter-5.1>
         "xyz1234abc"
@@ -243,7 +243,7 @@ test:do_execsql_test(
     "alter-5.2",
     [[
         ALTER TABLE "xyz1234abc" RENAME TO xyzabc;
-        SELECT "name" FROM "_space" WHERE "name" GLOB 'XYZ*';
+        SELECT "name" FROM "_space" WHERE "name" = 'XYZABC';
     ]], {
         -- <alter-5.2>
         "XYZABC"
diff --git a/test/sql-tap/analyze9.test.lua b/test/sql-tap/analyze9.test.lua
index 3b3d52f67..ec3e545d8 100755
--- a/test/sql-tap/analyze9.test.lua
+++ b/test/sql-tap/analyze9.test.lua
@@ -206,10 +206,10 @@ test:do_execsql_test(
         INSERT INTO t1 VALUES(81, 1, 'one-i');
         INSERT INTO t1 VALUES(91, 1, 'one-j');
         INSERT INTO t1 SELECT a+1,2,'two' || substr(c,4) FROM t1;
-        INSERT INTO t1 SELECT a+2,3,'three'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
-        INSERT INTO t1 SELECT a+3,4,'four'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
-        INSERT INTO t1 SELECT a+4,5,'five'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';
-        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c GLOB 'one-*';	
+        INSERT INTO t1 SELECT a+2,3,'three'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';
+        INSERT INTO t1 SELECT a+3,4,'four'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';
+        INSERT INTO t1 SELECT a+4,5,'five'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';
+        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';	
         CREATE INDEX t1b ON t1(b);
         ANALYZE;
         SELECT c FROM t1 WHERE b=3 AND a BETWEEN 30 AND 60;
diff --git a/test/sql-tap/e_expr.test.lua b/test/sql-tap/e_expr.test.lua
index 9780d2cf9..0d69e8535 100755
--- a/test/sql-tap/e_expr.test.lua
+++ b/test/sql-tap/e_expr.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(10665)
+test:plan(10647)
 
 --!./tcltestrunner.lua
 -- 2010 July 16
@@ -77,10 +77,7 @@ local operations = {
     {"<>", "ne1"},
     {"!=", "ne2"},
     {"IS", "is"},
--- NOTE: This test needs refactoring after deletion of GLOB &
---	 type restrictions for LIKE. (See #3572)
 --    {"LIKE", "like"},
---    {"GLOB", "glob"},
     {"AND", "and"},
     {"OR", "or"},
     {"MATCH", "match"},
@@ -98,12 +95,10 @@ operations = {
     {"+", "-"},
     {"<<", ">>", "&", "|"},
     {"<", "<=", ">", ">="},
--- NOTE: This test needs refactoring after deletion of GLOB &
---	 type restrictions for LIKE. (See #3572)
 -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
--- 		 are waiting for their hour, don't confuse them
---		 being commented with ticket above.
-    {"=", "==", "!=", "<>"}, --"LIKE", "GLOB"}, --"MATCH", "REGEXP"},
+--               are waiting for their hour, don't confuse them
+--               being commented with commenting of "LIKE".
+    {"=", "==", "!=", "<>"}, --"LIKE"}, --"MATCH", "REGEXP"},
     {"AND"},
     {"OR"},
 }
@@ -128,7 +123,7 @@ end
 -- EVIDENCE-OF: R-15514-65163 SQLite understands the following binary
 -- operators, in order from highest to lowest precedence: || * / % + -
 -- << >> & | < <= > >= = == != <> IS IS
--- NOT IN LIKE GLOB MATCH REGEXP AND OR
+-- NOT IN LIKE MATCH REGEXP AND OR
 --
 -- EVIDENCE-OF: R-38759-38789 Operators IS and IS NOT have the same
 -- precedence as =.
@@ -482,7 +477,6 @@ for _, op in ipairs(oplist) do
         end
     end
 end
-
 ---------------------------------------------------------------------------
 -- Test the IS and IS NOT operators.
 --
@@ -1303,11 +1297,11 @@ end
 test:execsql [[
     CREATE TABLE tblname(cname PRIMARY KEY);
 ]]
+
 local function glob(args)
     return 1
 end
 
-box.internal.sql_create_function("GLOB", glob)
 box.internal.sql_create_function("MATCH", glob)
 box.internal.sql_create_function("REGEXP", glob)
 local test_cases12 ={
@@ -1369,47 +1363,43 @@ local test_cases12 ={
 
     {47, "EXPR1 LIKE EXPR2"},
     {48, "EXPR1 LIKE EXPR2 ESCAPE EXPR"},
-    {49, "EXPR1 GLOB EXPR2"},
-    {50, "EXPR1 GLOB EXPR2 ESCAPE EXPR"},
-    {51, "EXPR1 REGEXP EXPR2"},
-    {52, "EXPR1 REGEXP EXPR2 ESCAPE EXPR"},
-    {53, "EXPR1 MATCH EXPR2"},
-    {54, "EXPR1 MATCH EXPR2 ESCAPE EXPR"},
-    {55, "EXPR1 NOT LIKE EXPR2"},
-    {56, "EXPR1 NOT LIKE EXPR2 ESCAPE EXPR"},
-    {57, "EXPR1 NOT GLOB EXPR2"},
-    {58, "EXPR1 NOT GLOB EXPR2 ESCAPE EXPR"},
-    {59, "EXPR1 NOT REGEXP EXPR2"},
-    {60, "EXPR1 NOT REGEXP EXPR2 ESCAPE EXPR"},
-    {61, "EXPR1 NOT MATCH EXPR2"},
-    {62, "EXPR1 NOT MATCH EXPR2 ESCAPE EXPR"},
-
-    {63, "EXPR IS NULL"},
-    {64, "EXPR IS NOT NULL"},
-
-    {65, "EXPR NOT BETWEEN EXPR1 AND EXPR2"},
-    {66, "EXPR BETWEEN EXPR1 AND EXPR2"},
-
-    {67, "EXPR NOT IN (SELECT cname FROM tblname)"},
-    {68, "EXPR NOT IN (1)"},
-    {69, "EXPR NOT IN (1, 2, 3)"},
-    {70, "EXPR NOT IN tblname"},
-    {71, "EXPR IN (SELECT cname FROM tblname)"},
-    {72, "EXPR IN (1)"},
-    {73, "EXPR IN (1, 2, 3)"},
-    {74, "EXPR IN tblname"},
-
-    {75, "EXISTS (SELECT cname FROM tblname)"},
-    {76, "NOT EXISTS (SELECT cname FROM tblname)"},
-
-    {77, "CASE EXPR WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
-    {78, "CASE EXPR WHEN EXPR1 THEN EXPR2 END"},
-    {79, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"},
-    {80, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
-    {81, "CASE WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
-    {82, "CASE WHEN EXPR1 THEN EXPR2 END"},
-    {83, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"},
-    {84, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
+    {49, "EXPR1 REGEXP EXPR2"},
+    {50, "EXPR1 REGEXP EXPR2 ESCAPE EXPR"},
+    {51, "EXPR1 MATCH EXPR2"},
+    {52, "EXPR1 MATCH EXPR2 ESCAPE EXPR"},
+    {53, "EXPR1 NOT LIKE EXPR2"},
+    {54, "EXPR1 NOT LIKE EXPR2 ESCAPE EXPR"},
+    {55, "EXPR1 NOT REGEXP EXPR2"},
+    {56, "EXPR1 NOT REGEXP EXPR2 ESCAPE EXPR"},
+    {57, "EXPR1 NOT MATCH EXPR2"},
+    {58, "EXPR1 NOT MATCH EXPR2 ESCAPE EXPR"},
+
+    {59, "EXPR IS NULL"},
+    {60, "EXPR IS NOT NULL"},
+
+    {61, "EXPR NOT BETWEEN EXPR1 AND EXPR2"},
+    {62, "EXPR BETWEEN EXPR1 AND EXPR2"},
+
+    {63, "EXPR NOT IN (SELECT cname FROM tblname)"},
+    {64, "EXPR NOT IN (1)"},
+    {65, "EXPR NOT IN (1, 2, 3)"},
+    {66, "EXPR NOT IN tblname"},
+    {67, "EXPR IN (SELECT cname FROM tblname)"},
+    {68, "EXPR IN (1)"},
+    {69, "EXPR IN (1, 2, 3)"},
+    {70, "EXPR IN tblname"},
+
+    {71, "EXISTS (SELECT cname FROM tblname)"},
+    {72, "NOT EXISTS (SELECT cname FROM tblname)"},
+
+    {73, "CASE EXPR WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
+    {74, "CASE EXPR WHEN EXPR1 THEN EXPR2 END"},
+    {75, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"},
+    {76, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
+    {77, "CASE WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
+    {78, "CASE WHEN EXPR1 THEN EXPR2 END"},
+    {79, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 END"},
+    {80, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
 }
 
 for _, val in ipairs(test_cases12) do
@@ -1802,7 +1792,7 @@ test:do_execsql_test(
     })
 
 ---------------------------------------------------------------------------
--- Test the statements related to the LIKE and GLOB operators.
+-- Test the statements related to the LIKE operator.
 --
 -- EVIDENCE-OF: R-16584-60189 The LIKE operator does a pattern matching
 -- comparison.
@@ -2274,102 +2264,38 @@ test:do_execsql_test(
         -- </e_expr-16.1.7>
     })
 
--- EVIDENCE-OF: R-52087-12043 The GLOB operator is similar to LIKE but
--- uses the Unix file globbing syntax for its wildcards.
---
--- EVIDENCE-OF: R-09813-17279 Also, GLOB is case sensitive, unlike LIKE.
+-- EVIDENCE-OF: R-39616-20555 LIKE may be preceded by the
+-- NOT keyword to invert the sense of the test.
 --
 test:do_execsql_test(
-    "e_expr-17.1.1",
-    [[
-        SELECT 'abcxyz' GLOB 'abc%'
-    ]], {
-        -- <e_expr-17.1.1>
-        0
-        -- </e_expr-17.1.1>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.2",
-    [[
-        SELECT 'abcxyz' GLOB 'abc*'
-    ]], {
-        -- <e_expr-17.1.2>
-        1
-        -- </e_expr-17.1.2>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.3",
-    [[
-        SELECT 'abcxyz' GLOB 'abc___'
-    ]], {
-        -- <e_expr-17.1.3>
-        0
-        -- </e_expr-17.1.3>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.4",
-    [[
-        SELECT 'abcxyz' GLOB 'abc???'
-    ]], {
-        -- <e_expr-17.1.4>
-        1
-        -- </e_expr-17.1.4>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.5",
+    "e_expr-17.2.0",
     [[
-        SELECT 'abcxyz' GLOB 'abc*'
+        PRAGMA case_sensitive_like = 1;
+        SELECT 'abcxyz' NOT LIKE 'ABC%';
     ]], {
-        -- <e_expr-17.1.5>
+        -- <e_expr-17.2.0>
         1
-        -- </e_expr-17.1.5>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.6",
-    [[
-        SELECT 'ABCxyz' GLOB 'abc*'
-    ]], {
-        -- <e_expr-17.1.6>
-        0
-        -- </e_expr-17.1.6>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.1.7",
-    [[
-        SELECT 'abcxyz' GLOB 'ABC*'
-    ]], {
-        -- <e_expr-17.1.7>
-        0
-        -- </e_expr-17.1.7>
+        -- </e_expr-17.2.0>
     })
 
--- EVIDENCE-OF: R-39616-20555 Both GLOB and LIKE may be preceded by the
--- NOT keyword to invert the sense of the test.
---
 test:do_execsql_test(
     "e_expr-17.2.1",
     [[
-        SELECT 'abcxyz' NOT GLOB 'ABC*'
+        SELECT 'abcxyz' NOT LIKE 'abc%'
     ]], {
         -- <e_expr-17.2.1>
-        1
+        0
         -- </e_expr-17.2.1>
     })
 
 test:do_execsql_test(
     "e_expr-17.2.2",
     [[
-        SELECT 'abcxyz' NOT GLOB 'abc*'
+        PRAGMA case_sensitive_like = 0
     ]], {
         -- <e_expr-17.2.2>
-        0
-        -- </e_expr-17.2.2>
+
+        -- <e_expr-17.2.2>
     })
 
 test:do_execsql_test(
@@ -2448,62 +2374,6 @@ if 0>0 then
     db("nullvalue", "")
 end
 
--- EVIDENCE-OF: R-39414-35489 The infix GLOB operator is implemented by
--- calling the function glob(Y,X) and can be modified by overriding that
--- function.
-
-local globargs = {}
-local function globfunc(...)
-    local args = {...}
-    for i, v in ipairs(args) do
-        table.insert(globargs, v)
-    end
-    return 1
-end
-box.internal.sql_create_function("GLOB", globfunc, 2)
---db("func", "glob", "-argcount", 2, "globfunc")
-
-test:do_execsql_test(
-    "e_expr-17.3.1",
-    [[
-        SELECT 'abc' GLOB 'def'
-    ]], {
-        -- <e_expr-17.3.1>
-        1
-        -- </e_expr-17.3.1>
-    })
-
-test:do_test(
-    "e_expr-17.3.2",
-    function()
-        return globargs
-    end, {
-        -- <e_expr-17.3.2>
-        "def", "abc"
-        -- </e_expr-17.3.2>
-    })
-
-globargs = {  }
-test:do_execsql_test(
-    "e_expr-17.3.3",
-    [[
-        SELECT 'X' NOT GLOB 'Y'
-    ]], {
-        -- <e_expr-17.3.3>
-        0
-        -- </e_expr-17.3.3>
-    })
-
-test:do_test(
-    "e_expr-17.3.4",
-    function()
-        return globargs
-    end, {
-        -- <e_expr-17.3.4>
-        "Y", "X"
-        -- </e_expr-17.3.4>
-    })
-
 --sqlite3("db", "test.db")
 -- EVIDENCE-OF: R-41650-20872 No regexp() user function is defined by
 -- default and so use of the REGEXP operator will normally result in an
diff --git a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
index addf0e36d..a6d822ccd 100755
--- a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
+++ b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
@@ -142,17 +142,17 @@ for i, tested_string in ipairs(invalid_testcases) do
     local test_name = prefix .. "2." .. tostring(i)
     local test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "';"
     test:do_catchsql_test(test_name, test_itself,
-                          {1, "LIKE or GLOB pattern can only contain UTF-8 characters"})
+                          {1, "LIKE pattern can only contain UTF-8 characters"})
 
     test_name = prefix .. "3." .. tostring(i)
     test_itself = "SELECT 'abc' LIKE 'abc" .. tested_string .. "';"
     test:do_catchsql_test(test_name, test_itself,
-                          {1, "LIKE or GLOB pattern can only contain UTF-8 characters"})
+                          {1, "LIKE pattern can only contain UTF-8 characters"})
 
     test_name = prefix .. "4." .. tostring(i)
     test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "c';"
     test:do_catchsql_test(test_name, test_itself,
-                          {1, "LIKE or GLOB pattern can only contain UTF-8 characters"})
+                          {1, "LIKE pattern can only contain UTF-8 characters"})
 
     -- Just skipping if row value predicand contains invalid character.
 
@@ -185,7 +185,7 @@ local valid_testcases = {
 
 -- Valid testcases.
 for i, tested_string in ipairs(valid_testcases) do
-    test_name = prefix .. "8." .. tostring(i)
+    local test_name = prefix .. "8." .. tostring(i)
     local test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "';"
     test:do_execsql_test(test_name, test_itself, {0})
 
diff --git a/test/sql-tap/like2.test.lua b/test/sql-tap/like2.test.lua
index abcac39fb..c6c81cb4d 100755
--- a/test/sql-tap/like2.test.lua
+++ b/test/sql-tap/like2.test.lua
@@ -12,11 +12,11 @@ test:plan(282)
 --    May you find forgiveness for yourself and forgive others.
 --    May you share freely, never taking more than you give.
 --
--------------------------------------------------------------------------
--- This file implements regression tests for SQLite library.  The
--- focus of this file is testing the LIKE and GLOB operators and
--- in particular the optimizations that occur to help those operators
--- run faster.
+-----------------------------------------------------------------
+-- This file implements regression tests for SQLite library. The
+-- focus of this file is testing the LIKE operator and
+-- in particular the optimizations that occur to help this
+-- operator run faster.
 --
 -- $Id: like2.test,v 1.1 2008/05/26 18:33:41 drh Exp $
 -- ["set","testdir",[["file","dirname",["argv0"]]]]
diff --git a/test/sql-tap/like3.test.lua b/test/sql-tap/like3.test.lua
index 505d2fabb..f5e517121 100755
--- a/test/sql-tap/like3.test.lua
+++ b/test/sql-tap/like3.test.lua
@@ -1,6 +1,6 @@
 #!/usr/bin/env tarantool
 test = require("sqltester")
-test:plan(7)
+test:plan(1)
 
 --!./tcltestrunner.lua
 -- 2015-03-06
@@ -12,13 +12,13 @@ test:plan(7)
 --    May you find forgiveness for yourself and forgive others.
 --    May you share freely, never taking more than you give.
 --
--------------------------------------------------------------------------
+-----------------------------------------------------------------
 --
--- This file implements regression tests for SQLite library.  The
--- focus of this file is testing the LIKE and GLOB operators and
--- in particular the optimizations that occur to help those operators
--- run faster and that those optimizations work correctly when there
--- are both strings and blobs being tested.
+-- This file implements regression tests for SQLite library. The
+-- focus of this file is testing the LIKE operator and
+-- in particular the optimizations that occur to help this
+-- operator run faster and that those optimizations work
+-- correctly when there are both strings and blobs being tested.
 --
 -- Ticket 05f43be8fdda9fbd948d374319b99b054140bc36 shows that the following
 -- SQL was not working correctly:
@@ -67,68 +67,6 @@ test:do_execsql_test(
         -- </like3-1.2>
     })
 
-test:do_execsql_test(
-    "like3-2.0",
-    [[
-        CREATE TABLE t2(a PRIMARY KEY, b TEXT);
-        INSERT INTO t2 SELECT a, b FROM t1;
-        CREATE INDEX t2ba ON t2(b,a);
-        SELECT a, b FROM t2 WHERE b GLOB 'ab*' ORDER BY +a;
-    ]], {
-        -- <like3-2.0>
-        1, "abc", 4, "abc"
-        -- </like3-2.0>
-    })
-
-test:do_execsql_test(
-    "like3-2.1",
-    [[
-        SELECT a, b FROM t2 WHERE +b GLOB 'ab*' ORDER BY +a;
-    ]], {
-        -- <like3-2.1>
-        1, "abc", 4, "abc"
-        -- </like3-2.1>
-    })
-
-test:do_execsql_test(
-    "like3-2.2",
-    [[
-        SELECT a, b FROM t2 WHERE b>=x'6162' AND b GLOB 'ab*'
-    ]], {
-        -- <like3-2.2>
-        4, "abc"
-        -- </like3-2.2>
-    })
-
-test:do_execsql_test(
-    "like3-2.3",
-    [[
-        SELECT a, b FROM t2 WHERE +b>=x'6162' AND +b GLOB 'ab*'
-    ]], {
-        -- <like3-2.3>
-        4, "abc"
-        -- </like3-2.3>
-    })
-
-test:do_execsql_test(
-    "like3-2.4",
-    [[
-        SELECT a, b FROM t2 WHERE b GLOB 'ab*' AND b>=x'6162'
-    ]], {
-        -- <like3-2.4>
-        4, "abc"
-        -- </like3-2.4>
-    })
-
-test:do_execsql_test(
-    "like3-2.5",
-    [[
-        SELECT a, b FROM t2 WHERE +b GLOB 'ab*' AND +b>=x'6162'
-    ]], {
-        -- <like3-2.5>
-        4, "abc"
-        -- </like3-2.5>
-    })
 test:execsql([[
     CREATE TABLE t3(x TEXT PRIMARY KEY COLLATE "unicode_ci");
     INSERT INTO t3(x) VALUES('aaa'),('abc'),('abd'),('abe'),('acz');
diff --git a/test/sql-tap/tkt1537.test.lua b/test/sql-tap/tkt1537.test.lua
index caa428409..4b2d78c18 100755
--- a/test/sql-tap/tkt1537.test.lua
+++ b/test/sql-tap/tkt1537.test.lua
@@ -185,7 +185,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "tkt1537-3.1",
     [[
-        SELECT * FROM t1 LEFT JOIN t2 ON b GLOB 'abc*' WHERE t1.id=1;
+        SELECT * FROM t1 LEFT JOIN t2 ON b LIKE 'abc%' WHERE t1.id=1;
     ]], {
         -- <tkt1537-3.1>
         1, "", "", "", ""
@@ -195,7 +195,7 @@ test:do_execsql_test(
 test:do_execsql_test(
     "tkt1537-3.2",
     [[
-        SELECT * FROM t2 LEFT JOIN t1 ON a1 GLOB 'abc*' WHERE t2.id=3;
+        SELECT * FROM t2 LEFT JOIN t1 ON a1 LIKE 'abc%' WHERE t2.id=3;
     ]], {
         -- <tkt1537-3.2>
         3, 1, "", "", ""
diff --git a/test/sql-tap/triggerA.test.lua b/test/sql-tap/triggerA.test.lua
index da1add8e2..530e48830 100755
--- a/test/sql-tap/triggerA.test.lua
+++ b/test/sql-tap/triggerA.test.lua
@@ -76,7 +76,7 @@ test:do_test(
     "triggerA-1.3",
     function()
         return test:execsql [[
-            CREATE VIEW v2 AS SELECT x, y FROM t1 WHERE y GLOB '*e*';
+            CREATE VIEW v2 AS SELECT x, y FROM t1 WHERE y LIKE '%e%';
             SELECT * FROM v2 ORDER BY 1;
         ]]
     end, {
diff --git a/test/sql-tap/where3.test.lua b/test/sql-tap/where3.test.lua
index 45827373f..96761310c 100755
--- a/test/sql-tap/where3.test.lua
+++ b/test/sql-tap/where3.test.lua
@@ -404,7 +404,7 @@ if 0
             CREATE TABLE t401(p INTEGER PRIMARY KEY, q, r);
             CREATE TABLE t402(x INTEGER PRIMARY KEY, y, z);
             EXPLAIN QUERY PLAN
-            SELECT * FROM t400, t401, t402 WHERE t402.z GLOB 'abc*';
+            SELECT * FROM t400, t401, t402 WHERE t402.z LIKE 'abc%';
         ]], {
             -- <where3-4.0>
             0, 0, 2, "SCAN TABLE T402", 0, 1, 0, "SCAN TABLE T400", 0, 2, 1, "SCAN TABLE T401"
@@ -415,7 +415,7 @@ if 0
         "where3-4.1",
         [[
             EXPLAIN QUERY PLAN
-            SELECT * FROM t400, t401, t402 WHERE t401.r GLOB 'abc*';
+            SELECT * FROM t400, t401, t402 WHERE t401.r LIKE 'abc%';
         ]], {
             -- <where3-4.1>
             0, 0, 1, "SCAN TABLE T401", 0, 1, 0, "SCAN TABLE T400", 0, 2, 2, "SCAN TABLE T402"
@@ -426,7 +426,7 @@ if 0
         "where3-4.2",
         [[
             EXPLAIN QUERY PLAN
-            SELECT * FROM t400, t401, t402 WHERE t400.c GLOB 'abc*';
+            SELECT * FROM t400, t401, t402 WHERE t400.c LIKE 'abc%';
         ]], {
             -- <where3-4.2>
             0, 0, 0, "SCAN TABLE T400", 0, 1, 1, "SCAN TABLE T401", 0, 2, 2, "SCAN TABLE T402"
diff --git a/test/sql-tap/where7.test.lua b/test/sql-tap/where7.test.lua
index 6691dd03b..27d25e671 100755
--- a/test/sql-tap/where7.test.lua
+++ b/test/sql-tap/where7.test.lua
@@ -448,12 +448,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1070
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
   ]])
     end, {
         -- <where7-2.2.1>
@@ -467,12 +467,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1070
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
   ]])
     end, {
         -- <where7-2.2.2>
@@ -487,11 +487,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR ((a BETWEEN 33 AND 35) AND a!=34)
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR b=220
          OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
          OR ((a BETWEEN 67 AND 69) AND a!=68)
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.3.1>
@@ -506,11 +506,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR ((a BETWEEN 33 AND 35) AND a!=34)
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR b=220
          OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
          OR ((a BETWEEN 67 AND 69) AND a!=68)
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.3.2>
@@ -525,7 +525,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=190
          OR ((a BETWEEN 49 AND 51) AND a!=50)
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR b=407
   ]])
     end, {
@@ -541,7 +541,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=190
          OR ((a BETWEEN 49 AND 51) AND a!=50)
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR b=407
   ]])
     end, {
@@ -555,7 +555,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?opqr*' AND f GLOB 'nopq*')
+      WHERE (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=795
          OR b=1103
          OR b=583
@@ -571,7 +571,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?opqr*' AND f GLOB 'nopq*')
+      WHERE (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=795
          OR b=1103
          OR b=583
@@ -589,7 +589,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=74
          OR a=50
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR ((a BETWEEN 16 AND 18) AND a!=17)
          OR c=21021
          OR ((a BETWEEN 82 AND 84) AND a!=83)
@@ -607,7 +607,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=74
          OR a=50
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR ((a BETWEEN 16 AND 18) AND a!=17)
          OR c=21021
          OR ((a BETWEEN 82 AND 84) AND a!=83)
@@ -746,7 +746,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=72.0 AND d<73.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR c=11011
          OR c=20020
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
@@ -763,7 +763,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=72.0 AND d<73.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR c=11011
          OR c=20020
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
@@ -781,7 +781,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR b=792
          OR a=97
          OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
@@ -804,7 +804,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR b=792
          OR a=97
          OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
@@ -827,11 +827,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 50 AND 52) AND a!=51)
          OR c=9009
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=539
          OR b=297
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR b=957
          OR f='xyzabcdef'
          OR b=619
@@ -849,11 +849,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 50 AND 52) AND a!=51)
          OR c=9009
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=539
          OR b=297
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR b=957
          OR f='xyzabcdef'
          OR b=619
@@ -931,7 +931,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=938
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.16.1>
@@ -946,7 +946,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=938
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.16.2>
@@ -963,12 +963,12 @@ test:do_test(
          OR f='zabcdefgh'
          OR b=308
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR ((a BETWEEN 15 AND 17) AND a!=16)
          OR b=443
          OR ((a BETWEEN 12 AND 14) AND a!=13)
          OR f='uvwxyzabc'
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
   ]])
     end, {
         -- <where7-2.17.1>
@@ -985,12 +985,12 @@ test:do_test(
          OR f='zabcdefgh'
          OR b=308
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR ((a BETWEEN 15 AND 17) AND a!=16)
          OR b=443
          OR ((a BETWEEN 12 AND 14) AND a!=13)
          OR f='uvwxyzabc'
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
   ]])
     end, {
         -- <where7-2.17.2>
@@ -1037,13 +1037,13 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR a=46
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR a=73
          OR c=20020
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR b=267
          OR ((a BETWEEN 68 AND 70) AND a!=69)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.19.1>
@@ -1058,13 +1058,13 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR a=46
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR a=73
          OR c=20020
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR b=267
          OR ((a BETWEEN 68 AND 70) AND a!=69)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.19.2>
@@ -1078,7 +1078,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 27 AND 29) AND a!=28)
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.20.1>
@@ -1092,7 +1092,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 27 AND 29) AND a!=28)
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.20.2>
@@ -1111,9 +1111,9 @@ test:do_test(
          OR ((a BETWEEN 87 AND 89) AND a!=88)
          OR f='bcdefghij'
          OR b=586
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR (d>=6.0 AND d<7.0 AND d IS NOT NULL)
          OR a=9
   ]])
@@ -1134,9 +1134,9 @@ test:do_test(
          OR ((a BETWEEN 87 AND 89) AND a!=88)
          OR f='bcdefghij'
          OR b=586
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR (d>=6.0 AND d<7.0 AND d IS NOT NULL)
          OR a=9
   ]])
@@ -1154,7 +1154,7 @@ test:do_test(
       WHERE b=399
          OR c=28028
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -1171,7 +1171,7 @@ test:do_test(
       WHERE b=399
          OR c=28028
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -1185,15 +1185,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR ((a BETWEEN 96 AND 98) AND a!=97)
          OR c=14014
          OR c=33033
          OR a=89
          OR b=770
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR a=35
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR b=253
          OR c=14014
   ]])
@@ -1208,15 +1208,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR ((a BETWEEN 96 AND 98) AND a!=97)
          OR c=14014
          OR c=33033
          OR a=89
          OR b=770
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR a=35
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR b=253
          OR c=14014
   ]])
@@ -1231,10 +1231,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'vwxyz*')
+      WHERE (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=330
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR a=16
   ]])
     end, {
@@ -1248,10 +1248,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'vwxyz*')
+      WHERE (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=330
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR a=16
   ]])
     end, {
@@ -1268,7 +1268,7 @@ test:do_test(
       WHERE c=5005
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
          OR ((a BETWEEN 36 AND 38) AND a!=37)
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.25.1>
@@ -1284,7 +1284,7 @@ test:do_test(
       WHERE c=5005
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
          OR ((a BETWEEN 36 AND 38) AND a!=37)
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.25.2>
@@ -1298,9 +1298,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=33
   ]])
     end, {
@@ -1315,9 +1315,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=33
   ]])
     end, {
@@ -1361,8 +1361,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE c=18018
          OR a=94
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=1012
          OR a=3
          OR d>1e10
@@ -1382,8 +1382,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE c=18018
          OR a=94
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=1012
          OR a=3
          OR d>1e10
@@ -1405,11 +1405,11 @@ test:do_test(
          OR c=11011
          OR b=297
          OR a=63
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR a=76
          OR b=1026
          OR a=26
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR c=30030
   ]])
     end, {
@@ -1427,11 +1427,11 @@ test:do_test(
          OR c=11011
          OR b=297
          OR a=63
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR a=76
          OR b=1026
          OR a=26
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR c=30030
   ]])
     end, {
@@ -1449,7 +1449,7 @@ test:do_test(
          OR b=1070
          OR a=59
          OR b=715
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
   ]])
     end, {
         -- <where7-2.30.1>
@@ -1466,7 +1466,7 @@ test:do_test(
          OR b=1070
          OR a=59
          OR b=715
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
   ]])
     end, {
         -- <where7-2.30.2>
@@ -1479,13 +1479,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=1056
          OR b=1012
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR ((a BETWEEN 67 AND 69) AND a!=68)
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
   ]])
     end, {
         -- <where7-2.31.1>
@@ -1498,13 +1498,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=1056
          OR b=1012
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR ((a BETWEEN 67 AND 69) AND a!=68)
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
   ]])
     end, {
         -- <where7-2.31.2>
@@ -1518,7 +1518,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='rstuvwxyz'
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 90 AND 92) AND a!=91)
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
   ]])
@@ -1534,7 +1534,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='rstuvwxyz'
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 90 AND 92) AND a!=91)
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
   ]])
@@ -1549,13 +1549,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
+      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR c=12012
          OR a=18
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
   ]])
     end, {
         -- <where7-2.33.1>
@@ -1568,13 +1568,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
+      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR c=12012
          OR a=18
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
   ]])
     end, {
         -- <where7-2.33.2>
@@ -1622,7 +1622,7 @@ test:do_test(
          OR ((a BETWEEN 67 AND 69) AND a!=68)
          OR c=33033
          OR b=11
-         OR (g='wvutsrq' AND f GLOB 'lmnop*')
+         OR (g='wvutsrq' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 7 AND 9) AND a!=8)
   ]])
     end, {
@@ -1643,7 +1643,7 @@ test:do_test(
          OR ((a BETWEEN 67 AND 69) AND a!=68)
          OR c=33033
          OR b=11
-         OR (g='wvutsrq' AND f GLOB 'lmnop*')
+         OR (g='wvutsrq' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 7 AND 9) AND a!=8)
   ]])
     end, {
@@ -1719,7 +1719,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=165
          OR b=201
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR a=32
   ]])
     end, {
@@ -1735,7 +1735,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=165
          OR b=201
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR a=32
   ]])
     end, {
@@ -1749,8 +1749,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
   ]])
     end, {
         -- <where7-2.39.1>
@@ -1763,8 +1763,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
   ]])
     end, {
         -- <where7-2.39.2>
@@ -1785,8 +1785,8 @@ test:do_test(
          OR a=18
          OR a=34
          OR b=132
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR c=18018
   ]])
     end, {
@@ -1808,8 +1808,8 @@ test:do_test(
          OR a=18
          OR a=34
          OR b=132
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR c=18018
   ]])
     end, {
@@ -1851,13 +1851,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR b=297
          OR b=113
          OR b=176
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
          OR a=67
          OR c=26026
@@ -1873,13 +1873,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR b=297
          OR b=113
          OR b=176
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
          OR a=67
          OR c=26026
@@ -1940,8 +1940,8 @@ test:do_test(
          OR ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=487
          OR b=619
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.44.1>
@@ -1959,8 +1959,8 @@ test:do_test(
          OR ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=487
          OR b=619
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.44.2>
@@ -1980,7 +1980,7 @@ test:do_test(
          OR c=17017
          OR a=82
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR (d>=39.0 AND d<40.0 AND d IS NOT NULL)
   ]])
@@ -2002,7 +2002,7 @@ test:do_test(
          OR c=17017
          OR a=82
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR (d>=39.0 AND d<40.0 AND d IS NOT NULL)
   ]])
@@ -2017,7 +2017,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'bcdef*')
+      WHERE (g='ihgfedc' AND f LIKE 'bcdef%')
          OR c=22022
   ]])
     end, {
@@ -2031,7 +2031,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'bcdef*')
+      WHERE (g='ihgfedc' AND f LIKE 'bcdef%')
          OR c=22022
   ]])
     end, {
@@ -2048,7 +2048,7 @@ test:do_test(
       WHERE c=7007
          OR b=91
          OR b=212
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR c=28028
          OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
   ]])
@@ -2066,7 +2066,7 @@ test:do_test(
       WHERE c=7007
          OR b=91
          OR b=212
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR c=28028
          OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
   ]])
@@ -2111,9 +2111,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR ((a BETWEEN 0 AND 2) AND a!=1)
          OR c=4004
          OR b=322
@@ -2131,9 +2131,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR ((a BETWEEN 0 AND 2) AND a!=1)
          OR c=4004
          OR b=322
@@ -2156,8 +2156,8 @@ test:do_test(
          OR a=46
          OR b=660
          OR (d>=41.0 AND d<42.0 AND d IS NOT NULL)
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR b=355
          OR a=93
          OR b=297
@@ -2178,8 +2178,8 @@ test:do_test(
          OR a=46
          OR b=660
          OR (d>=41.0 AND d<42.0 AND d IS NOT NULL)
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR b=355
          OR a=93
          OR b=297
@@ -2197,7 +2197,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=190
          OR a=62
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.51.1>
@@ -2212,7 +2212,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=190
          OR a=62
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.51.2>
@@ -2306,7 +2306,7 @@ test:do_test(
          OR b=256
          OR a=72
          OR c>=34035
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=674
          OR a=22
   ]])
@@ -2328,7 +2328,7 @@ test:do_test(
          OR b=256
          OR a=72
          OR c>=34035
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=674
          OR a=22
   ]])
@@ -2381,9 +2381,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 96 AND 98) AND a!=97)
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.56.1>
@@ -2396,9 +2396,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 96 AND 98) AND a!=97)
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.56.2>
@@ -2413,7 +2413,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=748
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
          OR b=630
   ]])
@@ -2430,7 +2430,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=748
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
          OR b=630
   ]])
@@ -2521,7 +2521,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=979
          OR ((a BETWEEN 3 AND 5) AND a!=4)
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.60.1>
@@ -2536,7 +2536,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=979
          OR ((a BETWEEN 3 AND 5) AND a!=4)
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.60.2>
@@ -2555,7 +2555,7 @@ test:do_test(
          OR b=726
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR ((a BETWEEN 50 AND 52) AND a!=51)
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
   ]])
     end, {
@@ -2575,7 +2575,7 @@ test:do_test(
          OR b=726
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR ((a BETWEEN 50 AND 52) AND a!=51)
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
   ]])
     end, {
@@ -2593,10 +2593,10 @@ test:do_test(
          OR ((a BETWEEN 18 AND 20) AND a!=19)
          OR b=924
          OR c=11011
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR b=231
          OR b=872
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.62.1>
@@ -2613,10 +2613,10 @@ test:do_test(
          OR ((a BETWEEN 18 AND 20) AND a!=19)
          OR b=924
          OR c=11011
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR b=231
          OR b=872
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.62.2>
@@ -2631,8 +2631,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=24
          OR b=473
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR b=509
          OR b=924
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
@@ -2650,8 +2650,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=24
          OR b=473
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR b=509
          OR b=924
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
@@ -2668,11 +2668,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=93.0 AND d<94.0 AND d IS NOT NULL)
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=363
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR ((a BETWEEN 56 AND 58) AND a!=57)
   ]])
@@ -2688,11 +2688,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=93.0 AND d<94.0 AND d IS NOT NULL)
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=363
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR ((a BETWEEN 56 AND 58) AND a!=57)
   ]])
@@ -2711,9 +2711,9 @@ test:do_test(
          OR e IS NULL
          OR b=495
          OR 1000000<b
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR a=45
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR a=85
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
   ]])
@@ -2732,9 +2732,9 @@ test:do_test(
          OR e IS NULL
          OR b=495
          OR 1000000<b
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR a=45
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR a=85
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
   ]])
@@ -2781,9 +2781,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE c>=34035
          OR ((a BETWEEN 96 AND 98) AND a!=97)
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR (d>=27.0 AND d<28.0 AND d IS NOT NULL)
          OR a=91
   ]])
@@ -2800,9 +2800,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE c>=34035
          OR ((a BETWEEN 96 AND 98) AND a!=97)
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR (d>=27.0 AND d<28.0 AND d IS NOT NULL)
          OR a=91
   ]])
@@ -2817,9 +2817,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
+      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR b=649
          OR b=231
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
@@ -2837,9 +2837,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
+      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR b=649
          OR b=231
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
@@ -2918,11 +2918,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=65
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR c=22022
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR b=671
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR a=91
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
          OR ((a BETWEEN 47 AND 49) AND a!=48)
@@ -2941,11 +2941,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=65
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR c=22022
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR b=671
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR a=91
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
          OR ((a BETWEEN 47 AND 49) AND a!=48)
@@ -2995,7 +2995,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=11.0 AND d<12.0 AND d IS NOT NULL)
          OR a=14
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
          OR b=212
@@ -3014,7 +3014,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=11.0 AND d<12.0 AND d IS NOT NULL)
          OR a=14
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
          OR b=212
@@ -3031,11 +3031,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'bcdef*')
+      WHERE (g='ihgfedc' AND f LIKE 'bcdef%')
          OR b=168
          OR b=25
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.74.1>
@@ -3048,11 +3048,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'bcdef*')
+      WHERE (g='ihgfedc' AND f LIKE 'bcdef%')
          OR b=168
          OR b=25
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.74.2>
@@ -3098,10 +3098,10 @@ test:do_test(
       WHERE c=31031
          OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
          OR ((a BETWEEN 87 AND 89) AND a!=88)
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR a=49
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.76.1>
@@ -3117,10 +3117,10 @@ test:do_test(
       WHERE c=31031
          OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
          OR ((a BETWEEN 87 AND 89) AND a!=88)
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR a=49
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.76.2>
@@ -3170,7 +3170,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=85.0 AND d<86.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 30 AND 32) AND a!=31)
          OR b=1089
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
@@ -3187,7 +3187,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=85.0 AND d<86.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 30 AND 32) AND a!=31)
          OR b=1089
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
@@ -3205,8 +3205,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=399
          OR ((a BETWEEN 9 AND 11) AND a!=10)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR a=10
          OR b=1026
   ]])
@@ -3223,8 +3223,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=399
          OR ((a BETWEEN 9 AND 11) AND a!=10)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR a=10
          OR b=1026
   ]])
@@ -3239,11 +3239,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'yzabc*')
+      WHERE (g='jihgfed' AND f LIKE 'yzabc%')
          OR b=465
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.80.1>
@@ -3256,11 +3256,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'yzabc*')
+      WHERE (g='jihgfed' AND f LIKE 'yzabc%')
          OR b=465
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.80.2>
@@ -3275,7 +3275,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=25
          OR b=792
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
   ]])
     end, {
         -- <where7-2.81.1>
@@ -3290,7 +3290,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=25
          OR b=792
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
   ]])
     end, {
         -- <where7-2.81.2>
@@ -3308,10 +3308,10 @@ test:do_test(
          OR a=13
          OR a=15
          OR ((a BETWEEN 6 AND 8) AND a!=7)
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR a=27
          OR ((a BETWEEN 98 AND 100) AND a!=99)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR a=32
          OR a=39
   ]])
@@ -3331,10 +3331,10 @@ test:do_test(
          OR a=13
          OR a=15
          OR ((a BETWEEN 6 AND 8) AND a!=7)
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR a=27
          OR ((a BETWEEN 98 AND 100) AND a!=99)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR a=32
          OR a=39
   ]])
@@ -3350,14 +3350,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='hijklmnop'
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR ((a BETWEEN 77 AND 79) AND a!=78)
          OR b=528
          OR c=30030
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.83.1>
@@ -3371,14 +3371,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='hijklmnop'
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR ((a BETWEEN 77 AND 79) AND a!=78)
          OR b=528
          OR c=30030
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.83.2>
@@ -3425,11 +3425,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'pqrst*')
+      WHERE (g='lkjihgf' AND f LIKE 'pqrst%')
          OR b=748
          OR b=696
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
   ]])
     end, {
         -- <where7-2.85.1>
@@ -3442,11 +3442,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'pqrst*')
+      WHERE (g='lkjihgf' AND f LIKE 'pqrst%')
          OR b=748
          OR b=696
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
   ]])
     end, {
         -- <where7-2.85.2>
@@ -3460,10 +3460,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 71 AND 73) AND a!=72)
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR a=87
          OR a=80
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=784
          OR a=49
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -3480,10 +3480,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 71 AND 73) AND a!=72)
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR a=87
          OR a=80
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=784
          OR a=49
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -3500,13 +3500,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 14 AND 16) AND a!=15)
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR c=1001
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR c=33033
   ]])
     end, {
@@ -3521,13 +3521,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 14 AND 16) AND a!=15)
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR c=1001
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR c=33033
   ]])
     end, {
@@ -3611,13 +3611,13 @@ test:do_test(
          OR b=553
          OR a=64
          OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR a=62
          OR b=1081
          OR b=770
          OR b=762
          OR b=803
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.90.1>
@@ -3634,13 +3634,13 @@ test:do_test(
          OR b=553
          OR a=64
          OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR a=62
          OR b=1081
          OR b=770
          OR b=762
          OR b=803
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.90.2>
@@ -3653,8 +3653,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'klmno*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (g='wvutsrq' AND f LIKE 'klmno%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR c=17017
          OR b=168
          OR ((a BETWEEN 77 AND 79) AND a!=78)
@@ -3670,8 +3670,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'klmno*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (g='wvutsrq' AND f LIKE 'klmno%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR c=17017
          OR b=168
          OR ((a BETWEEN 77 AND 79) AND a!=78)
@@ -3690,12 +3690,12 @@ test:do_test(
       WHERE c=34034
          OR (d>=68.0 AND d<69.0 AND d IS NOT NULL)
          OR a=44
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR c=31031
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR b=619
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR ((a BETWEEN 29 AND 31) AND a!=30)
   ]])
     end, {
@@ -3712,12 +3712,12 @@ test:do_test(
       WHERE c=34034
          OR (d>=68.0 AND d<69.0 AND d IS NOT NULL)
          OR a=44
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR c=31031
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR b=619
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR ((a BETWEEN 29 AND 31) AND a!=30)
   ]])
     end, {
@@ -3738,10 +3738,10 @@ test:do_test(
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR b=110
          OR f='klmnopqrs'
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR b=674
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.93.1>
@@ -3761,10 +3761,10 @@ test:do_test(
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR b=110
          OR f='klmnopqrs'
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR b=674
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.93.2>
@@ -3882,7 +3882,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=231
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.97.1>
@@ -3896,7 +3896,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=231
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.97.2>
@@ -4057,7 +4057,7 @@ test:do_test(
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR b=630
          OR c=19019
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR a=24
          OR (d>=95.0 AND d<96.0 AND d IS NOT NULL)
          OR ((a BETWEEN 51 AND 53) AND a!=52)
@@ -4077,7 +4077,7 @@ test:do_test(
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR b=630
          OR c=19019
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR a=24
          OR (d>=95.0 AND d<96.0 AND d IS NOT NULL)
          OR ((a BETWEEN 51 AND 53) AND a!=52)
@@ -4128,11 +4128,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='stuvwxyza'
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR ((a BETWEEN 1 AND 3) AND a!=2)
          OR b=1037
          OR f='zabcdefgh'
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.104.1>
@@ -4146,11 +4146,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='stuvwxyza'
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR ((a BETWEEN 1 AND 3) AND a!=2)
          OR b=1037
          OR f='zabcdefgh'
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.104.2>
@@ -4163,7 +4163,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR ((a BETWEEN 30 AND 32) AND a!=31)
   ]])
@@ -4178,7 +4178,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR ((a BETWEEN 30 AND 32) AND a!=31)
   ]])
@@ -4197,8 +4197,8 @@ test:do_test(
          OR b=190
          OR ((a BETWEEN 38 AND 40) AND a!=39)
          OR ((a BETWEEN 70 AND 72) AND a!=71)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR b=704
   ]])
     end, {
@@ -4216,8 +4216,8 @@ test:do_test(
          OR b=190
          OR ((a BETWEEN 38 AND 40) AND a!=39)
          OR ((a BETWEEN 70 AND 72) AND a!=71)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR b=704
   ]])
     end, {
@@ -4234,7 +4234,7 @@ test:do_test(
       WHERE b=88
          OR f='vwxyzabcd'
          OR f='fghijklmn'
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.107.1>
@@ -4250,7 +4250,7 @@ test:do_test(
       WHERE b=88
          OR f='vwxyzabcd'
          OR f='fghijklmn'
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.107.2>
@@ -4296,7 +4296,7 @@ test:do_test(
       WHERE ((a BETWEEN 47 AND 49) AND a!=48)
          OR a=5
          OR b=179
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR a=69
   ]])
     end, {
@@ -4313,7 +4313,7 @@ test:do_test(
       WHERE ((a BETWEEN 47 AND 49) AND a!=48)
          OR a=5
          OR b=179
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR a=69
   ]])
     end, {
@@ -4328,8 +4328,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=971
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR b=828
          OR a=81
          OR ((a BETWEEN 23 AND 25) AND a!=24)
@@ -4350,8 +4350,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=971
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR b=828
          OR a=81
          OR ((a BETWEEN 23 AND 25) AND a!=24)
@@ -4399,8 +4399,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'opqrs*')
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+      WHERE (g='lkjihgf' AND f LIKE 'opqrs%')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
   ]])
     end, {
         -- <where7-2.112.1>
@@ -4413,8 +4413,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'opqrs*')
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+      WHERE (g='lkjihgf' AND f LIKE 'opqrs%')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
   ]])
     end, {
         -- <where7-2.112.2>
@@ -4463,8 +4463,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='vutsrqp' AND f GLOB 'rstuv*')
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='vutsrqp' AND f LIKE 'rstuv%')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=396
   ]])
     end, {
@@ -4478,8 +4478,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='vutsrqp' AND f GLOB 'rstuv*')
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='vutsrqp' AND f LIKE 'rstuv%')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=396
   ]])
     end, {
@@ -4531,7 +4531,7 @@ test:do_test(
          OR ((a BETWEEN 20 AND 22) AND a!=21)
          OR b=396
          OR b=630
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR c=3003
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
   ]])
@@ -4552,7 +4552,7 @@ test:do_test(
          OR ((a BETWEEN 20 AND 22) AND a!=21)
          OR b=396
          OR b=630
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR c=3003
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
   ]])
@@ -4573,8 +4573,8 @@ test:do_test(
          OR b=957
          OR b=311
          OR b=143
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -4594,8 +4594,8 @@ test:do_test(
          OR b=957
          OR b=311
          OR b=143
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -4612,7 +4612,7 @@ test:do_test(
       WHERE ((a BETWEEN 74 AND 76) AND a!=75)
          OR ((a BETWEEN 94 AND 96) AND a!=95)
          OR b=451
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.118.1>
@@ -4628,7 +4628,7 @@ test:do_test(
       WHERE ((a BETWEEN 74 AND 76) AND a!=75)
          OR ((a BETWEEN 94 AND 96) AND a!=95)
          OR b=451
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.118.2>
@@ -4645,11 +4645,11 @@ test:do_test(
          OR b=451
          OR b=363
          OR b=330
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR ((a BETWEEN 52 AND 54) AND a!=53)
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR ((a BETWEEN 81 AND 83) AND a!=82)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.119.1>
@@ -4666,11 +4666,11 @@ test:do_test(
          OR b=451
          OR b=363
          OR b=330
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR ((a BETWEEN 52 AND 54) AND a!=53)
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR ((a BETWEEN 81 AND 83) AND a!=82)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.119.2>
@@ -4683,9 +4683,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR (d>=68.0 AND d<69.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR e IS NULL
          OR b=759
   ]])
@@ -4700,9 +4700,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR (d>=68.0 AND d<69.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR e IS NULL
          OR b=759
   ]])
@@ -4717,9 +4717,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR ((a BETWEEN 19 AND 21) AND a!=20)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.121.1>
@@ -4732,9 +4732,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR ((a BETWEEN 19 AND 21) AND a!=20)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.121.2>
@@ -4815,14 +4815,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'tuvwx*')
+      WHERE (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR b=421
          OR b=429
          OR b=498
          OR b=33
          OR b=198
          OR c=14014
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
   ]])
     end, {
         -- <where7-2.124.1>
@@ -4835,14 +4835,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'tuvwx*')
+      WHERE (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR b=421
          OR b=429
          OR b=498
          OR b=33
          OR b=198
          OR c=14014
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
   ]])
     end, {
         -- <where7-2.124.2>
@@ -4858,13 +4858,13 @@ test:do_test(
       WHERE b=47
          OR c=31031
          OR a=38
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR b=242
          OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
          OR b=352
          OR a=49
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.125.1>
@@ -4880,13 +4880,13 @@ test:do_test(
       WHERE b=47
          OR c=31031
          OR a=38
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR b=242
          OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
          OR b=352
          OR a=49
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.125.2>
@@ -4969,9 +4969,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=528
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.128.1>
@@ -4984,9 +4984,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=528
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.128.2>
@@ -5031,7 +5031,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=71.0 AND d<72.0 AND d IS NOT NULL)
          OR 1000000<b
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR a=24
   ]])
@@ -5048,7 +5048,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=71.0 AND d<72.0 AND d IS NOT NULL)
          OR 1000000<b
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR a=24
   ]])
@@ -5071,8 +5071,8 @@ test:do_test(
          OR a=14
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR b=440
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
   ]])
     end, {
         -- <where7-2.131.1>
@@ -5093,8 +5093,8 @@ test:do_test(
          OR a=14
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR b=440
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
   ]])
     end, {
         -- <where7-2.131.2>
@@ -5226,9 +5226,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=27
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=1045
          OR a=84
          OR f='qrstuvwxy'
@@ -5245,9 +5245,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=27
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=1045
          OR a=84
          OR f='qrstuvwxy'
@@ -5266,7 +5266,7 @@ test:do_test(
       WHERE b=704
          OR b=949
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR c=24024
          OR b=553
          OR a=18
@@ -5286,7 +5286,7 @@ test:do_test(
       WHERE b=704
          OR b=949
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR c=24024
          OR b=553
          OR a=18
@@ -5303,8 +5303,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?cdef*' AND f GLOB 'bcde*')
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (f LIKE '_cdef%' AND f LIKE 'bcde%')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=902
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR b=25
@@ -5323,8 +5323,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?cdef*' AND f GLOB 'bcde*')
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (f LIKE '_cdef%' AND f LIKE 'bcde%')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=902
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR b=25
@@ -5405,8 +5405,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?qrst*' AND f GLOB 'pqrs*')
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+      WHERE (f LIKE '_qrst%' AND f LIKE 'pqrs%')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=641
          OR ((a BETWEEN 36 AND 38) AND a!=37)
   ]])
@@ -5421,8 +5421,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?qrst*' AND f GLOB 'pqrs*')
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+      WHERE (f LIKE '_qrst%' AND f LIKE 'pqrs%')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=641
          OR ((a BETWEEN 36 AND 38) AND a!=37)
   ]])
@@ -5442,9 +5442,9 @@ test:do_test(
          OR ((a BETWEEN 44 AND 46) AND a!=45)
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR b=11
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR a=52
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR a=13
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
   ]])
@@ -5464,9 +5464,9 @@ test:do_test(
          OR ((a BETWEEN 44 AND 46) AND a!=45)
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR b=11
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR a=52
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR a=13
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
   ]])
@@ -5487,7 +5487,7 @@ test:do_test(
          OR b=1045
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR f='uvwxyzabc'
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
   ]])
     end, {
         -- <where7-2.143.1>
@@ -5506,7 +5506,7 @@ test:do_test(
          OR b=1045
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR f='uvwxyzabc'
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
   ]])
     end, {
         -- <where7-2.143.2>
@@ -5562,9 +5562,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=91
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
          OR b=102
@@ -5584,9 +5584,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=91
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
          OR b=102
@@ -5605,8 +5605,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='vutsrqp' AND f GLOB 'opqrs*')
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+      WHERE (g='vutsrqp' AND f LIKE 'opqrs%')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR b=990
          OR a=52
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
@@ -5622,8 +5622,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='vutsrqp' AND f GLOB 'opqrs*')
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+      WHERE (g='vutsrqp' AND f LIKE 'opqrs%')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR b=990
          OR a=52
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
@@ -5683,13 +5683,13 @@ test:do_test(
          OR b=421
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR c=22022
          OR b=825
          OR ((a BETWEEN 17 AND 19) AND a!=18)
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
   ]])
     end, {
         -- <where7-2.148.1>
@@ -5706,13 +5706,13 @@ test:do_test(
          OR b=421
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR c=22022
          OR b=825
          OR ((a BETWEEN 17 AND 19) AND a!=18)
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
   ]])
     end, {
         -- <where7-2.148.2>
@@ -5729,7 +5729,7 @@ test:do_test(
          OR b=484
          OR b=1026
          OR a=90
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=608
          OR a=32
   ]])
@@ -5748,7 +5748,7 @@ test:do_test(
          OR b=484
          OR b=1026
          OR a=90
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=608
          OR a=32
   ]])
@@ -5771,7 +5771,7 @@ test:do_test(
          OR a=55
          OR b=773
          OR b=319
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.150.1>
@@ -5792,7 +5792,7 @@ test:do_test(
          OR a=55
          OR b=773
          OR b=319
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.150.2>
@@ -5805,7 +5805,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'ijklm*')
+      WHERE (g='wvutsrq' AND f LIKE 'ijklm%')
          OR f='mnopqrstu'
          OR a=62
   ]])
@@ -5820,7 +5820,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'ijklm*')
+      WHERE (g='wvutsrq' AND f LIKE 'ijklm%')
          OR f='mnopqrstu'
          OR a=62
   ]])
@@ -5839,9 +5839,9 @@ test:do_test(
          OR b=1045
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR c=13013
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR b=124
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.152.1>
@@ -5858,9 +5858,9 @@ test:do_test(
          OR b=1045
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR c=13013
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR b=124
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.152.2>
@@ -5880,7 +5880,7 @@ test:do_test(
          OR b=421
          OR b=803
          OR c=4004
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
   ]])
     end, {
         -- <where7-2.153.1>
@@ -5900,7 +5900,7 @@ test:do_test(
          OR b=421
          OR b=803
          OR c=4004
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
   ]])
     end, {
         -- <where7-2.153.2>
@@ -5913,9 +5913,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
+      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR b=99
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.154.1>
@@ -5928,9 +5928,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
+      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR b=99
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.154.2>
@@ -5972,9 +5972,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=795
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR f='jklmnopqr'
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR b=1056
   ]])
@@ -5990,9 +5990,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=795
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR f='jklmnopqr'
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR b=1056
   ]])
@@ -6146,7 +6146,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=23
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=641
          OR b=352
          OR b=179
@@ -6166,7 +6166,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=23
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=641
          OR b=352
          OR b=179
@@ -6189,7 +6189,7 @@ test:do_test(
          OR b=1078
          OR ((a BETWEEN 11 AND 13) AND a!=12)
          OR c=12012
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR b=319
          OR c=5005
          OR 1000000<b
@@ -6211,7 +6211,7 @@ test:do_test(
          OR b=1078
          OR ((a BETWEEN 11 AND 13) AND a!=12)
          OR c=12012
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR b=319
          OR c=5005
          OR 1000000<b
@@ -6230,8 +6230,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='cdefghijk'
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -6246,8 +6246,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='cdefghijk'
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -6297,13 +6297,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=891
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR b=484
          OR a=62
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.165.1>
@@ -6316,13 +6316,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=891
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR b=484
          OR a=62
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.165.2>
@@ -6336,11 +6336,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=363
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR a=39
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
   ]])
@@ -6356,11 +6356,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=363
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR a=39
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
   ]])
@@ -6378,7 +6378,7 @@ test:do_test(
       WHERE c=30030
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR b=850
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
   ]])
     end, {
         -- <where7-2.167.1>
@@ -6394,7 +6394,7 @@ test:do_test(
       WHERE c=30030
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR b=850
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
   ]])
     end, {
         -- <where7-2.167.2>
@@ -6540,7 +6540,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=333
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
          OR b=407
          OR a=5
@@ -6559,7 +6559,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=333
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
          OR b=407
          OR a=5
@@ -6580,7 +6580,7 @@ test:do_test(
       WHERE b<0
          OR b=352
          OR b=517
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 12 AND 14) AND a!=13)
          OR b=1012
          OR ((a BETWEEN 11 AND 13) AND a!=12)
@@ -6599,7 +6599,7 @@ test:do_test(
       WHERE b<0
          OR b=352
          OR b=517
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 12 AND 14) AND a!=13)
          OR b=1012
          OR ((a BETWEEN 11 AND 13) AND a!=12)
@@ -6615,11 +6615,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
          OR c<=10
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR a=32
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR d<0.0
   ]])
     end, {
@@ -6633,11 +6633,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
          OR c<=10
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR a=32
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR d<0.0
   ]])
     end, {
@@ -6653,9 +6653,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 20 AND 22) AND a!=21)
          OR b=1045
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR a=26
-         OR (g='gfedcba' AND f GLOB 'opqrs*')
+         OR (g='gfedcba' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.175.1>
@@ -6670,9 +6670,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 20 AND 22) AND a!=21)
          OR b=1045
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR a=26
-         OR (g='gfedcba' AND f GLOB 'opqrs*')
+         OR (g='gfedcba' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.175.2>
@@ -6714,7 +6714,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=3.0 AND d<4.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR c=32032
          OR b=289
          OR ((a BETWEEN 17 AND 19) AND a!=18)
@@ -6732,7 +6732,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=3.0 AND d<4.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR c=32032
          OR b=289
          OR ((a BETWEEN 17 AND 19) AND a!=18)
@@ -6752,7 +6752,7 @@ test:do_test(
       WHERE ((a BETWEEN 15 AND 17) AND a!=16)
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR b=33
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
   ]])
     end, {
         -- <where7-2.178.1>
@@ -6768,7 +6768,7 @@ test:do_test(
       WHERE ((a BETWEEN 15 AND 17) AND a!=16)
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR b=33
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
   ]])
     end, {
         -- <where7-2.178.2>
@@ -6783,15 +6783,15 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=828
          OR b=341
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR b=902
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=242
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.179.1>
@@ -6806,15 +6806,15 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=828
          OR b=341
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR b=902
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=242
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.179.2>
@@ -6827,7 +6827,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'efghi*')
+      WHERE (g='nmlkjih' AND f LIKE 'efghi%')
          OR b=982
          OR b=781
          OR ((a BETWEEN 66 AND 68) AND a!=67)
@@ -6845,7 +6845,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'efghi*')
+      WHERE (g='nmlkjih' AND f LIKE 'efghi%')
          OR b=982
          OR b=781
          OR ((a BETWEEN 66 AND 68) AND a!=67)
@@ -6863,13 +6863,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
          OR a=31
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR a=76
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=176
   ]])
     end, {
@@ -6883,13 +6883,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
          OR a=31
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR a=76
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=176
   ]])
     end, {
@@ -6903,11 +6903,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ponmlkj' AND f GLOB 'vwxyz*')
+      WHERE (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=14
          OR ((a BETWEEN 88 AND 90) AND a!=89)
          OR f='zabcdefgh'
@@ -6923,11 +6923,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ponmlkj' AND f GLOB 'vwxyz*')
+      WHERE (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=14
          OR ((a BETWEEN 88 AND 90) AND a!=89)
          OR f='zabcdefgh'
@@ -6943,7 +6943,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR b=286
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
          OR b=91
@@ -6960,7 +6960,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR b=286
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
          OR b=91
@@ -6977,9 +6977,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'nopqr*')
+      WHERE (g='lkjihgf' AND f LIKE 'nopqr%')
          OR c=19019
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR b=374
   ]])
     end, {
@@ -6993,9 +6993,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'nopqr*')
+      WHERE (g='lkjihgf' AND f LIKE 'nopqr%')
          OR c=19019
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR b=374
   ]])
     end, {
@@ -7010,7 +7010,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE g IS NULL
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.185.1>
@@ -7024,7 +7024,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE g IS NULL
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.185.2>
@@ -7067,10 +7067,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=564
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=234
          OR b=641
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
          OR a=98
@@ -7088,10 +7088,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=564
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=234
          OR b=641
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
          OR a=98
@@ -7111,12 +7111,12 @@ test:do_test(
          OR b=44
          OR b=539
          OR c=11011
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=69
          OR b=1001
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR ((a BETWEEN 32 AND 34) AND a!=33)
   ]])
     end, {
@@ -7134,12 +7134,12 @@ test:do_test(
          OR b=44
          OR b=539
          OR c=11011
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=69
          OR b=1001
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR ((a BETWEEN 32 AND 34) AND a!=33)
   ]])
     end, {
@@ -7224,7 +7224,7 @@ test:do_test(
       WHERE c=23023
          OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
          OR a=66
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR a=51
          OR a=23
          OR c=4004
@@ -7243,7 +7243,7 @@ test:do_test(
       WHERE c=23023
          OR (d>=83.0 AND d<84.0 AND d IS NOT NULL)
          OR a=66
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR a=51
          OR a=23
          OR c=4004
@@ -7260,7 +7260,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=36
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR a=80
   ]])
     end, {
@@ -7275,7 +7275,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=36
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR a=80
   ]])
     end, {
@@ -7289,7 +7289,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+      WHERE (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR ((a BETWEEN 37 AND 39) AND a!=38)
          OR a=55
          OR f='efghijklm'
@@ -7310,7 +7310,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+      WHERE (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR ((a BETWEEN 37 AND 39) AND a!=38)
          OR a=55
          OR f='efghijklm'
@@ -7333,11 +7333,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=87.0 AND d<88.0 AND d IS NOT NULL)
          OR b=836
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=91
          OR b=594
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.194.1>
@@ -7352,11 +7352,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=87.0 AND d<88.0 AND d IS NOT NULL)
          OR b=836
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=91
          OR b=594
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.194.2>
@@ -7369,8 +7369,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'yzabc*')
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+      WHERE (g='tsrqpon' AND f LIKE 'yzabc%')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 62 AND 64) AND a!=63)
          OR c=6006
          OR ((a BETWEEN 50 AND 52) AND a!=51)
@@ -7389,8 +7389,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'yzabc*')
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+      WHERE (g='tsrqpon' AND f LIKE 'yzabc%')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 62 AND 64) AND a!=63)
          OR c=6006
          OR ((a BETWEEN 50 AND 52) AND a!=51)
@@ -7415,10 +7415,10 @@ test:do_test(
          OR b=121
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR ((a BETWEEN 12 AND 14) AND a!=13)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR b=660
          OR b=792
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.196.1>
@@ -7437,10 +7437,10 @@ test:do_test(
          OR b=121
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR ((a BETWEEN 12 AND 14) AND a!=13)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR b=660
          OR b=792
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.196.2>
@@ -7456,10 +7456,10 @@ test:do_test(
       WHERE b=1089
          OR b=495
          OR b=157
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR f='wxyzabcde'
   ]])
@@ -7477,10 +7477,10 @@ test:do_test(
       WHERE b=1089
          OR b=495
          OR b=157
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR f='wxyzabcde'
   ]])
@@ -7497,7 +7497,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE f='bcdefghij'
          OR ((a BETWEEN 40 AND 42) AND a!=41)
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR b=157
          OR b=267
          OR c=34034
@@ -7515,7 +7515,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE f='bcdefghij'
          OR ((a BETWEEN 40 AND 42) AND a!=41)
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR b=157
          OR b=267
          OR c=34034
@@ -7534,7 +7534,7 @@ test:do_test(
       WHERE a=19
          OR a=23
          OR c<=10
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.199.1>
@@ -7550,7 +7550,7 @@ test:do_test(
       WHERE a=19
          OR a=23
          OR c<=10
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.199.2>
@@ -7567,7 +7567,7 @@ test:do_test(
          OR b=792
          OR b=803
          OR b=36
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
   ]])
     end, {
         -- <where7-2.200.1>
@@ -7584,7 +7584,7 @@ test:do_test(
          OR b=792
          OR b=803
          OR b=36
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
   ]])
     end, {
         -- <where7-2.200.2>
@@ -7597,11 +7597,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'uvwxy*')
+      WHERE (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR ((a BETWEEN 76 AND 78) AND a!=77)
          OR f='jklmnopqr'
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
          OR b=891
          OR a=40
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
@@ -7617,11 +7617,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'uvwxy*')
+      WHERE (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR ((a BETWEEN 76 AND 78) AND a!=77)
          OR f='jklmnopqr'
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
          OR b=891
          OR a=40
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
@@ -7644,7 +7644,7 @@ test:do_test(
          OR d>1e10
          OR b=429
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
          OR c=10010
          OR ((a BETWEEN 83 AND 85) AND a!=84)
   ]])
@@ -7666,7 +7666,7 @@ test:do_test(
          OR d>1e10
          OR b=429
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
          OR c=10010
          OR ((a BETWEEN 83 AND 85) AND a!=84)
   ]])
@@ -7681,14 +7681,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'defgh*')
+      WHERE (g='xwvutsr' AND f LIKE 'defgh%')
          OR a=22
          OR a=26
          OR a=81
          OR a=53
          OR ((a BETWEEN 92 AND 94) AND a!=93)
          OR c=30030
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=82
          OR b=594
   ]])
@@ -7703,14 +7703,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'defgh*')
+      WHERE (g='xwvutsr' AND f LIKE 'defgh%')
          OR a=22
          OR a=26
          OR a=81
          OR a=53
          OR ((a BETWEEN 92 AND 94) AND a!=93)
          OR c=30030
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=82
          OR b=594
   ]])
@@ -7727,14 +7727,14 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 34 AND 36) AND a!=35)
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR a=83
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR ((a BETWEEN 99 AND 101) AND a!=100)
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=1092
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR b=25
   ]])
     end, {
@@ -7750,14 +7750,14 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 34 AND 36) AND a!=35)
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR a=83
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR ((a BETWEEN 99 AND 101) AND a!=100)
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=1092
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR b=25
   ]])
     end, {
@@ -7773,9 +7773,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=20
          OR b=421
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR a=50
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -7791,9 +7791,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=20
          OR b=421
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR a=50
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -7808,7 +7808,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=960
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
   ]])
     end, {
         -- <where7-2.206.1>
@@ -7822,7 +7822,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=960
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
   ]])
     end, {
         -- <where7-2.206.2>
@@ -7899,7 +7899,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
+      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=957
          OR ((a BETWEEN 48 AND 50) AND a!=49)
   ]])
@@ -7914,7 +7914,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
+      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=957
          OR ((a BETWEEN 48 AND 50) AND a!=49)
   ]])
@@ -7961,7 +7961,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=66.0 AND d<67.0 AND d IS NOT NULL)
          OR b=11
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 14 AND 16) AND a!=15)
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR a=99
@@ -7979,7 +7979,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=66.0 AND d<67.0 AND d IS NOT NULL)
          OR b=11
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 14 AND 16) AND a!=15)
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR a=99
@@ -7997,12 +7997,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE f='fghijklmn'
          OR a=16
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR ((a BETWEEN 60 AND 62) AND a!=61)
          OR ((a BETWEEN 90 AND 92) AND a!=91)
          OR ((a BETWEEN 9 AND 11) AND a!=10)
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=80
   ]])
     end, {
@@ -8018,12 +8018,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE f='fghijklmn'
          OR a=16
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR ((a BETWEEN 60 AND 62) AND a!=61)
          OR ((a BETWEEN 90 AND 92) AND a!=91)
          OR ((a BETWEEN 9 AND 11) AND a!=10)
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=80
   ]])
     end, {
@@ -8037,10 +8037,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
+      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
          OR a=44
          OR a=43
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
          OR b=25
   ]])
     end, {
@@ -8054,10 +8054,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
+      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
          OR a=44
          OR a=43
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
          OR b=25
   ]])
     end, {
@@ -8134,10 +8134,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=3.0 AND d<4.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'opqrs*')
+         OR (g='gfedcba' AND f LIKE 'opqrs%')
          OR b=1015
          OR c=16016
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR f='abcdefghi'
          OR b=605
          OR a=63
@@ -8154,10 +8154,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=3.0 AND d<4.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'opqrs*')
+         OR (g='gfedcba' AND f LIKE 'opqrs%')
          OR b=1015
          OR c=16016
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR f='abcdefghi'
          OR b=605
          OR a=63
@@ -8173,7 +8173,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='yxwvuts' AND f GLOB 'bcdef*')
+      WHERE (g='yxwvuts' AND f LIKE 'bcdef%')
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR b=641
          OR b=795
@@ -8189,7 +8189,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='yxwvuts' AND f GLOB 'bcdef*')
+      WHERE (g='yxwvuts' AND f LIKE 'bcdef%')
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR b=641
          OR b=795
@@ -8281,7 +8281,7 @@ test:do_test(
          OR b=1089
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR f IS NULL
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
   ]])
     end, {
         -- <where7-2.220.1>
@@ -8302,7 +8302,7 @@ test:do_test(
          OR b=1089
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR f IS NULL
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
   ]])
     end, {
         -- <where7-2.220.2>
@@ -8317,15 +8317,15 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1026
          OR b=407
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR b=564
          OR c=23023
          OR b=891
          OR c=22022
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR ((a BETWEEN 9 AND 11) AND a!=10)
-         OR (g='rqponml' AND f GLOB 'ijklm*')
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.221.1>
@@ -8340,15 +8340,15 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1026
          OR b=407
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR b=564
          OR c=23023
          OR b=891
          OR c=22022
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR ((a BETWEEN 9 AND 11) AND a!=10)
-         OR (g='rqponml' AND f GLOB 'ijklm*')
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.221.2>
@@ -8395,7 +8395,7 @@ test:do_test(
          OR ((a BETWEEN 79 AND 81) AND a!=80)
          OR c=18018
          OR b=792
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
@@ -8417,7 +8417,7 @@ test:do_test(
          OR ((a BETWEEN 79 AND 81) AND a!=80)
          OR c=18018
          OR b=792
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
@@ -8437,10 +8437,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=429
          OR (d>=33.0 AND d<34.0 AND d IS NOT NULL)
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR b=1070
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.224.1>
@@ -8455,10 +8455,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=429
          OR (d>=33.0 AND d<34.0 AND d IS NOT NULL)
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR b=1070
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.224.2>
@@ -8471,7 +8471,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
+      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=572
   ]])
     end, {
@@ -8485,7 +8485,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
+      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=572
   ]])
     end, {
@@ -8501,7 +8501,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 62 AND 64) AND a!=63)
          OR f='abcdefghi'
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.226.1>
@@ -8516,7 +8516,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 62 AND 64) AND a!=63)
          OR f='abcdefghi'
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.226.2>
@@ -8562,7 +8562,7 @@ test:do_test(
          OR a=1
          OR ((a BETWEEN 75 AND 77) AND a!=76)
          OR a=75
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
   ]])
     end, {
@@ -8581,7 +8581,7 @@ test:do_test(
          OR a=1
          OR ((a BETWEEN 75 AND 77) AND a!=76)
          OR a=75
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
   ]])
     end, {
@@ -8595,9 +8595,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR b=231
          OR a=87
   ]])
@@ -8612,9 +8612,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR b=231
          OR a=87
   ]])
@@ -8630,8 +8630,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=77
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR c=24024
          OR c=5005
   ]])
@@ -8647,8 +8647,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=77
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR c=24024
          OR c=5005
   ]])
@@ -8663,13 +8663,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='mlkjihg' AND f GLOB 'ijklm*')
+      WHERE (g='mlkjihg' AND f LIKE 'ijklm%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR b=682
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -8683,13 +8683,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='mlkjihg' AND f GLOB 'ijklm*')
+      WHERE (g='mlkjihg' AND f LIKE 'ijklm%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR b=682
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -8707,7 +8707,7 @@ test:do_test(
          OR b=121
          OR c=2002
          OR ((a BETWEEN 84 AND 86) AND a!=85)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.232.1>
@@ -8724,7 +8724,7 @@ test:do_test(
          OR b=121
          OR c=2002
          OR ((a BETWEEN 84 AND 86) AND a!=85)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.232.2>
@@ -8740,8 +8740,8 @@ test:do_test(
       WHERE (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR f='abcdefghi'
          OR b=267
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR a=82
          OR a=54
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
@@ -8761,8 +8761,8 @@ test:do_test(
       WHERE (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR f='abcdefghi'
          OR b=267
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR a=82
          OR a=54
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
@@ -8815,9 +8815,9 @@ test:do_test(
          OR ((a BETWEEN 31 AND 33) AND a!=32)
          OR (d>=94.0 AND d<95.0 AND d IS NOT NULL)
          OR 1000000<b
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
   ]])
     end, {
         -- <where7-2.235.1>
@@ -8836,9 +8836,9 @@ test:do_test(
          OR ((a BETWEEN 31 AND 33) AND a!=32)
          OR (d>=94.0 AND d<95.0 AND d IS NOT NULL)
          OR 1000000<b
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
   ]])
     end, {
         -- <where7-2.235.2>
@@ -8853,7 +8853,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1001
          OR b=168
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -8869,7 +8869,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1001
          OR b=168
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -8884,8 +8884,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=51
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR b=330
   ]])
     end, {
@@ -8900,8 +8900,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=51
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR b=330
   ]])
     end, {
@@ -8915,13 +8915,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
+      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=704
          OR a=62
          OR f='pqrstuvwx'
          OR b=495
          OR c=26026
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b<0
          OR b=597
   ]])
@@ -8936,13 +8936,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
+      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=704
          OR a=62
          OR f='pqrstuvwx'
          OR b=495
          OR c=26026
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b<0
          OR b=597
   ]])
@@ -8992,7 +8992,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=14014
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=572
          OR c=15015
   ]])
@@ -9008,7 +9008,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=14014
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=572
          OR c=15015
   ]])
@@ -9023,9 +9023,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR b=850
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 15 AND 17) AND a!=16)
          OR b=88
          OR f='hijklmnop'
@@ -9044,9 +9044,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR b=850
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 15 AND 17) AND a!=16)
          OR b=88
          OR f='hijklmnop'
@@ -9073,8 +9073,8 @@ test:do_test(
          OR b=374
          OR b=938
          OR b=773
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.242.1>
@@ -9095,8 +9095,8 @@ test:do_test(
          OR b=374
          OR b=938
          OR b=773
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.242.2>
@@ -9109,7 +9109,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=146
   ]])
     end, {
@@ -9123,7 +9123,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=146
   ]])
     end, {
@@ -9171,7 +9171,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR b=399
          OR b=1004
          OR c=16016
@@ -9193,7 +9193,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR b=399
          OR b=1004
          OR c=16016
@@ -9222,8 +9222,8 @@ test:do_test(
          OR b=861
          OR (d>=90.0 AND d<91.0 AND d IS NOT NULL)
          OR b=949
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.246.1>
@@ -9243,8 +9243,8 @@ test:do_test(
          OR b=861
          OR (d>=90.0 AND d<91.0 AND d IS NOT NULL)
          OR b=949
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.246.2>
@@ -9257,7 +9257,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
+      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
          OR a=83
          OR c=26026
          OR a=49
@@ -9276,7 +9276,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
+      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
          OR a=83
          OR c=26026
          OR a=49
@@ -9328,7 +9328,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=451
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
   ]])
     end, {
         -- <where7-2.249.1>
@@ -9342,7 +9342,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=451
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
   ]])
     end, {
         -- <where7-2.249.2>
@@ -9356,7 +9356,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=47
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
   ]])
     end, {
         -- <where7-2.250.1>
@@ -9370,7 +9370,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=47
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
   ]])
     end, {
         -- <where7-2.250.2>
@@ -9384,7 +9384,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1037
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=344
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
@@ -9401,7 +9401,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1037
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=344
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
@@ -9419,7 +9419,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=506
          OR ((a BETWEEN 20 AND 22) AND a!=21)
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR b=429
          OR b=275
   ]])
@@ -9436,7 +9436,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=506
          OR ((a BETWEEN 20 AND 22) AND a!=21)
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR b=429
          OR b=275
   ]])
@@ -9458,7 +9458,7 @@ test:do_test(
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR a=60
          OR b=80
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR b=616
   ]])
     end, {
@@ -9479,7 +9479,7 @@ test:do_test(
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR a=60
          OR b=80
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR b=616
   ]])
     end, {
@@ -9521,13 +9521,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
+      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
          OR a=43
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR b=586
          OR c=17017
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR a=87
          OR b=968
   ]])
@@ -9542,13 +9542,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
+      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
          OR a=43
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR b=586
          OR c=17017
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR a=87
          OR b=968
   ]])
@@ -9597,8 +9597,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='rqponml' AND f GLOB 'jklmn*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+      WHERE (g='rqponml' AND f LIKE 'jklmn%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR c>=34035
          OR b=850
          OR ((a BETWEEN 32 AND 34) AND a!=33)
@@ -9620,8 +9620,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='rqponml' AND f GLOB 'jklmn*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+      WHERE (g='rqponml' AND f LIKE 'jklmn%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR c>=34035
          OR b=850
          OR ((a BETWEEN 32 AND 34) AND a!=33)
@@ -9705,7 +9705,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'nopqr*')
+      WHERE (g='qponmlk' AND f LIKE 'nopqr%')
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=993
   ]])
@@ -9720,7 +9720,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'nopqr*')
+      WHERE (g='qponmlk' AND f LIKE 'nopqr%')
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=993
   ]])
@@ -9739,7 +9739,7 @@ test:do_test(
          OR a=22
          OR b=289
          OR b=795
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR b=242
          OR a=59
          OR b=1045
@@ -9760,7 +9760,7 @@ test:do_test(
          OR a=22
          OR b=289
          OR b=795
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR b=242
          OR a=59
          OR b=1045
@@ -9778,9 +9778,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=245
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR c=3003
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR (d>=33.0 AND d<34.0 AND d IS NOT NULL)
@@ -9798,9 +9798,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=245
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR c=3003
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR (d>=33.0 AND d<34.0 AND d IS NOT NULL)
@@ -9817,15 +9817,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'jklmn*')
+      WHERE (g='hgfedcb' AND f LIKE 'jklmn%')
          OR b=220
          OR b=443
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR a=62
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR b=1023
          OR a=100
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -9839,15 +9839,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'jklmn*')
+      WHERE (g='hgfedcb' AND f LIKE 'jklmn%')
          OR b=220
          OR b=443
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR a=62
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR b=1023
          OR a=100
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -9863,8 +9863,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE c=11011
          OR f='tuvwxyzab'
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.264.1>
@@ -9879,8 +9879,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE c=11011
          OR f='tuvwxyzab'
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.264.2>
@@ -10005,15 +10005,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=443
          OR b=33
          OR b=762
          OR b=575
          OR c=16016
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 41 AND 43) AND a!=42)
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR b=1092
   ]])
     end, {
@@ -10027,15 +10027,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=443
          OR b=33
          OR b=762
          OR b=575
          OR c=16016
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 41 AND 43) AND a!=42)
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR b=1092
   ]])
     end, {
@@ -10051,14 +10051,14 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=806
          OR b=872
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR f='uvwxyzabc'
          OR b=748
          OR b=586
          OR ((a BETWEEN 15 AND 17) AND a!=16)
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR ((a BETWEEN 32 AND 34) AND a!=33)
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR b=891
   ]])
     end, {
@@ -10074,14 +10074,14 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=806
          OR b=872
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR f='uvwxyzabc'
          OR b=748
          OR b=586
          OR ((a BETWEEN 15 AND 17) AND a!=16)
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR ((a BETWEEN 32 AND 34) AND a!=33)
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR b=891
   ]])
     end, {
@@ -10097,8 +10097,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=693
          OR f='fghijklmn'
-         OR (g='rqponml' AND f GLOB 'hijkl*')
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR a=96
   ]])
@@ -10115,8 +10115,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=693
          OR f='fghijklmn'
-         OR (g='rqponml' AND f GLOB 'hijkl*')
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR a=96
   ]])
@@ -10131,7 +10131,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
+      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
          OR b=451
          OR ((a BETWEEN 96 AND 98) AND a!=97)
          OR ((a BETWEEN 97 AND 99) AND a!=98)
@@ -10148,7 +10148,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
+      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
          OR b=451
          OR ((a BETWEEN 96 AND 98) AND a!=97)
          OR ((a BETWEEN 97 AND 99) AND a!=98)
@@ -10165,16 +10165,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'bcdef*')
+      WHERE (g='nmlkjih' AND f LIKE 'bcdef%')
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR a=75
          OR b=960
-         OR (g='tsrqpon' AND f GLOB 'yzabc*')
+         OR (g='tsrqpon' AND f LIKE 'yzabc%')
          OR b=616
          OR b=330
          OR ((a BETWEEN 16 AND 18) AND a!=17)
          OR a=26
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.272.1>
@@ -10187,16 +10187,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'bcdef*')
+      WHERE (g='nmlkjih' AND f LIKE 'bcdef%')
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR a=75
          OR b=960
-         OR (g='tsrqpon' AND f GLOB 'yzabc*')
+         OR (g='tsrqpon' AND f LIKE 'yzabc%')
          OR b=616
          OR b=330
          OR ((a BETWEEN 16 AND 18) AND a!=17)
          OR a=26
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.272.2>
@@ -10210,7 +10210,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=762
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.273.1>
@@ -10224,7 +10224,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=762
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.273.2>
@@ -10310,7 +10310,7 @@ test:do_test(
          OR b=176
          OR ((a BETWEEN 34 AND 36) AND a!=35)
          OR b=220
-         OR (g='tsrqpon' AND f GLOB 'yzabc*')
+         OR (g='tsrqpon' AND f LIKE 'yzabc%')
          OR a=4
   ]])
     end, {
@@ -10329,7 +10329,7 @@ test:do_test(
          OR b=176
          OR ((a BETWEEN 34 AND 36) AND a!=35)
          OR b=220
-         OR (g='tsrqpon' AND f GLOB 'yzabc*')
+         OR (g='tsrqpon' AND f LIKE 'yzabc%')
          OR a=4
   ]])
     end, {
@@ -10344,7 +10344,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=29
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=979
          OR b=275
          OR ((a BETWEEN 56 AND 58) AND a!=57)
@@ -10364,7 +10364,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=29
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=979
          OR b=275
          OR ((a BETWEEN 56 AND 58) AND a!=57)
@@ -10384,11 +10384,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 43 AND 45) AND a!=44)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR f='fghijklmn'
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR a=74
          OR ((a BETWEEN 7 AND 9) AND a!=8)
@@ -10405,11 +10405,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 43 AND 45) AND a!=44)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR f='fghijklmn'
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR a=74
          OR ((a BETWEEN 7 AND 9) AND a!=8)
@@ -10426,10 +10426,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 80 AND 82) AND a!=81)
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
          OR ((a BETWEEN 49 AND 51) AND a!=50)
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.279.1>
@@ -10443,10 +10443,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 80 AND 82) AND a!=81)
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
          OR ((a BETWEEN 49 AND 51) AND a!=50)
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.279.2>
@@ -10495,11 +10495,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR c=23023
          OR b=377
          OR b=858
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.281.1>
@@ -10512,11 +10512,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR c=23023
          OR b=377
          OR b=858
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.281.2>
@@ -10532,13 +10532,13 @@ test:do_test(
       WHERE (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR b=322
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'pqrst*')
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='fedcbaz' AND f LIKE 'pqrst%')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR b=432
          OR b=55
          OR a=53
          OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR b=25
   ]])
     end, {
@@ -10555,13 +10555,13 @@ test:do_test(
       WHERE (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR b=322
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'pqrst*')
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='fedcbaz' AND f LIKE 'pqrst%')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR b=432
          OR b=55
          OR a=53
          OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR b=25
   ]])
     end, {
@@ -10576,7 +10576,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=484
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=616
          OR c=5005
          OR ((a BETWEEN 27 AND 29) AND a!=28)
@@ -10593,7 +10593,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=484
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=616
          OR c=5005
          OR ((a BETWEEN 27 AND 29) AND a!=28)
@@ -10610,11 +10610,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=916
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=1048
          OR c=6006
          OR b=762
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
          OR b=751
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
@@ -10631,11 +10631,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=916
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=1048
          OR c=6006
          OR b=762
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
          OR b=751
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
@@ -10656,7 +10656,7 @@ test:do_test(
          OR b=275
          OR b=396
          OR c=4004
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR b=319
          OR ((a BETWEEN 83 AND 85) AND a!=84)
          OR a=3
@@ -10678,7 +10678,7 @@ test:do_test(
          OR b=275
          OR b=396
          OR c=4004
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR b=319
          OR ((a BETWEEN 83 AND 85) AND a!=84)
          OR a=3
@@ -10695,16 +10695,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'lmnop*')
+      WHERE (g='wvutsrq' AND f LIKE 'lmnop%')
          OR b=718
          OR f='vwxyzabcd'
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR ((a BETWEEN 66 AND 68) AND a!=67)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -10718,16 +10718,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'lmnop*')
+      WHERE (g='wvutsrq' AND f LIKE 'lmnop%')
          OR b=718
          OR f='vwxyzabcd'
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR ((a BETWEEN 66 AND 68) AND a!=67)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -10920,9 +10920,9 @@ test:do_test(
          OR b=231
          OR b=212
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR c=30030
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
   ]])
     end, {
         -- <where7-2.292.1>
@@ -10940,9 +10940,9 @@ test:do_test(
          OR b=231
          OR b=212
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR c=30030
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
   ]])
     end, {
         -- <where7-2.292.2>
@@ -10996,8 +10996,8 @@ test:do_test(
          OR f='vwxyzabcd'
          OR b=762
          OR a=60
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.294.1>
@@ -11015,8 +11015,8 @@ test:do_test(
          OR f='vwxyzabcd'
          OR b=762
          OR a=60
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.294.2>
@@ -11029,14 +11029,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='mlkjihg' AND f GLOB 'ghijk*')
+      WHERE (g='mlkjihg' AND f LIKE 'ghijk%')
          OR a=3
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=498
          OR a=100
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR a=69
   ]])
     end, {
@@ -11050,14 +11050,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='mlkjihg' AND f GLOB 'ghijk*')
+      WHERE (g='mlkjihg' AND f LIKE 'ghijk%')
          OR a=3
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=498
          OR a=100
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR a=69
   ]])
     end, {
@@ -11071,12 +11071,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=300
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
          OR b=58
          OR ((a BETWEEN 55 AND 57) AND a!=56)
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR b=286
          OR b=234
          OR ((a BETWEEN 43 AND 45) AND a!=44)
@@ -11094,12 +11094,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=300
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
          OR b=58
          OR ((a BETWEEN 55 AND 57) AND a!=56)
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR b=286
          OR b=234
          OR ((a BETWEEN 43 AND 45) AND a!=44)
@@ -11121,12 +11121,12 @@ test:do_test(
          OR ((a BETWEEN 72 AND 74) AND a!=73)
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR b=594
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR ((a BETWEEN 37 AND 39) AND a!=38)
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
   ]])
     end, {
@@ -11144,12 +11144,12 @@ test:do_test(
          OR ((a BETWEEN 72 AND 74) AND a!=73)
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR b=594
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR ((a BETWEEN 37 AND 39) AND a!=38)
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
   ]])
     end, {
@@ -11164,8 +11164,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=949
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.298.1>
@@ -11179,8 +11179,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=949
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.298.2>
@@ -11195,13 +11195,13 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=960
          OR a=44
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR a=39
          OR b=828
          OR ((a BETWEEN 3 AND 5) AND a!=4)
          OR d<0.0
          OR b=770
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR b=594
          OR ((a BETWEEN 89 AND 91) AND a!=90)
   ]])
@@ -11218,13 +11218,13 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=960
          OR a=44
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR a=39
          OR b=828
          OR ((a BETWEEN 3 AND 5) AND a!=4)
          OR d<0.0
          OR b=770
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR b=594
          OR ((a BETWEEN 89 AND 91) AND a!=90)
   ]])
@@ -11278,7 +11278,7 @@ test:do_test(
       WHERE b=1081
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=1004
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 29 AND 31) AND a!=30)
          OR b=660
          OR b=957
@@ -11298,7 +11298,7 @@ test:do_test(
       WHERE b=1081
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=1004
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 29 AND 31) AND a!=30)
          OR b=660
          OR b=957
@@ -11320,9 +11320,9 @@ test:do_test(
          OR f='yzabcdefg'
          OR b=880
          OR a=63
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.302.1>
@@ -11340,9 +11340,9 @@ test:do_test(
          OR f='yzabcdefg'
          OR b=880
          OR a=63
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.302.2>
@@ -11357,12 +11357,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=69
          OR b=1103
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR f='wxyzabcde'
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR f='pqrstuvwx'
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR a=59
          OR b=946
   ]])
@@ -11379,12 +11379,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=69
          OR b=1103
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR f='wxyzabcde'
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR f='pqrstuvwx'
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR a=59
          OR b=946
   ]])
@@ -11400,7 +11400,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=47.0 AND d<48.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR a=68
          OR ((a BETWEEN 14 AND 16) AND a!=15)
   ]])
@@ -11416,7 +11416,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=47.0 AND d<48.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR a=68
          OR ((a BETWEEN 14 AND 16) AND a!=15)
   ]])
@@ -11432,7 +11432,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=10.0 AND d<11.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.305.1>
@@ -11446,7 +11446,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=10.0 AND d<11.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.305.2>
@@ -11526,12 +11526,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR c=14014
          OR b=990
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
          OR c=14014
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR b=740
          OR c=3003
   ]])
@@ -11547,12 +11547,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR c=14014
          OR b=990
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
          OR c=14014
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR b=740
          OR c=3003
   ]])
@@ -11640,7 +11640,7 @@ test:do_test(
          OR a=4
          OR b=311
          OR ((a BETWEEN 97 AND 99) AND a!=98)
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR b=396
   ]])
     end, {
@@ -11663,7 +11663,7 @@ test:do_test(
          OR a=4
          OR b=311
          OR ((a BETWEEN 97 AND 99) AND a!=98)
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR b=396
   ]])
     end, {
@@ -11679,7 +11679,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=82
          OR b=333
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR b=99
          OR a=63
          OR a=35
@@ -11698,7 +11698,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=82
          OR b=333
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR b=99
          OR a=63
          OR a=35
@@ -11803,9 +11803,9 @@ test:do_test(
          OR f='hijklmnop'
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR b=817
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
   ]])
@@ -11824,9 +11824,9 @@ test:do_test(
          OR f='hijklmnop'
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR b=817
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
   ]])
@@ -11841,12 +11841,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR b=311
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR a=48
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR c=32032
          OR f='opqrstuvw'
          OR b=300
@@ -11864,12 +11864,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR b=311
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR a=48
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR c=32032
          OR f='opqrstuvw'
          OR b=300
@@ -11889,7 +11889,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=95.0 AND d<96.0 AND d IS NOT NULL)
          OR b=1070
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR a=22
@@ -11912,7 +11912,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=95.0 AND d<96.0 AND d IS NOT NULL)
          OR b=1070
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR a=22
@@ -11934,7 +11934,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=8.0 AND d<9.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR a=21
          OR b=1026
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -11952,7 +11952,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=8.0 AND d<9.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR a=21
          OR b=1026
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -11975,7 +11975,7 @@ test:do_test(
          OR a=29
          OR c=15015
          OR a=87
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.319.1>
@@ -11994,7 +11994,7 @@ test:do_test(
          OR a=29
          OR c=15015
          OR a=87
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.319.2>
@@ -12042,7 +12042,7 @@ test:do_test(
          OR a=91
          OR b=1015
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR ((a BETWEEN 91 AND 93) AND a!=92)
   ]])
     end, {
@@ -12061,7 +12061,7 @@ test:do_test(
          OR a=91
          OR b=1015
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR ((a BETWEEN 91 AND 93) AND a!=92)
   ]])
     end, {
@@ -12076,12 +12076,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=7
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR b=1015
          OR b=839
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR b=410
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR a=71
   ]])
     end, {
@@ -12096,12 +12096,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=7
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR b=1015
          OR b=839
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR b=410
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR a=71
   ]])
     end, {
@@ -12118,12 +12118,12 @@ test:do_test(
       WHERE b=880
          OR b=982
          OR a=52
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR a=24
          OR ((a BETWEEN 47 AND 49) AND a!=48)
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
   ]])
     end, {
         -- <where7-2.323.1>
@@ -12139,12 +12139,12 @@ test:do_test(
       WHERE b=880
          OR b=982
          OR a=52
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR a=24
          OR ((a BETWEEN 47 AND 49) AND a!=48)
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
   ]])
     end, {
         -- <where7-2.323.2>
@@ -12158,9 +12158,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 67 AND 69) AND a!=68)
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
   ]])
     end, {
         -- <where7-2.324.1>
@@ -12174,9 +12174,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 67 AND 69) AND a!=68)
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
   ]])
     end, {
         -- <where7-2.324.2>
@@ -12192,7 +12192,7 @@ test:do_test(
       WHERE f='abcdefghi'
          OR a=5
          OR b=124
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=432
          OR 1000000<b
          OR a=58
@@ -12214,7 +12214,7 @@ test:do_test(
       WHERE f='abcdefghi'
          OR a=5
          OR b=124
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=432
          OR 1000000<b
          OR a=58
@@ -12271,7 +12271,7 @@ test:do_test(
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR ((a BETWEEN 63 AND 65) AND a!=64)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR f='uvwxyzabc'
   ]])
     end, {
@@ -12293,7 +12293,7 @@ test:do_test(
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR ((a BETWEEN 63 AND 65) AND a!=64)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR f='uvwxyzabc'
   ]])
     end, {
@@ -12308,16 +12308,16 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 57 AND 59) AND a!=58)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=564
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR b=77
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
          OR b=968
          OR b=847
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.328.1>
@@ -12331,16 +12331,16 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 57 AND 59) AND a!=58)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=564
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR b=77
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
          OR b=968
          OR b=847
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.328.2>
@@ -12421,7 +12421,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=72.0 AND d<73.0 AND d IS NOT NULL)
          OR b=693
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR b=968
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR b=132
@@ -12441,7 +12441,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=72.0 AND d<73.0 AND d IS NOT NULL)
          OR b=693
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR b=968
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR b=132
@@ -12496,11 +12496,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=190
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR b=924
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR b=759
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.333.1>
@@ -12514,11 +12514,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=190
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR b=924
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR b=759
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.333.2>
@@ -12576,12 +12576,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=26026
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR c=17017
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='srqponm' AND f GLOB 'ghijk*')
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
   ]])
@@ -12597,12 +12597,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=26026
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR c=17017
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='srqponm' AND f GLOB 'ghijk*')
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
   ]])
@@ -12662,9 +12662,9 @@ test:do_test(
          OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR b=300
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR a=41
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR b=135
          OR b=605
   ]])
@@ -12684,9 +12684,9 @@ test:do_test(
          OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR b=300
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR a=41
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR b=135
          OR b=605
   ]])
@@ -12701,16 +12701,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR b=762
          OR b=484
          OR b=190
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=1023
   ]])
     end, {
@@ -12724,16 +12724,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR b=762
          OR b=484
          OR b=190
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=1023
   ]])
     end, {
@@ -12747,7 +12747,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
          OR a=34
          OR f='rstuvwxyz'
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
@@ -12764,7 +12764,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
          OR a=34
          OR f='rstuvwxyz'
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
@@ -12783,7 +12783,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=37.0 AND d<38.0 AND d IS NOT NULL)
          OR b=1004
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR g IS NULL
   ]])
     end, {
@@ -12799,7 +12799,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=37.0 AND d<38.0 AND d IS NOT NULL)
          OR b=1004
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR g IS NULL
   ]])
     end, {
@@ -12822,8 +12822,8 @@ test:do_test(
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR a=44
          OR a=23
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.341.1>
@@ -12845,8 +12845,8 @@ test:do_test(
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR a=44
          OR a=23
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.341.2>
@@ -12864,8 +12864,8 @@ test:do_test(
          OR a=11
          OR ((a BETWEEN 12 AND 14) AND a!=13)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR a=13
          OR a=15
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
@@ -12887,8 +12887,8 @@ test:do_test(
          OR a=11
          OR ((a BETWEEN 12 AND 14) AND a!=13)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR a=13
          OR a=15
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
@@ -13019,16 +13019,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='gfedcba' AND f GLOB 'klmno*')
+      WHERE (g='gfedcba' AND f LIKE 'klmno%')
          OR ((a BETWEEN 9 AND 11) AND a!=10)
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR a=48
          OR b=113
          OR ((a BETWEEN 20 AND 22) AND a!=21)
          OR b=880
          OR ((a BETWEEN 85 AND 87) AND a!=86)
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.346.1>
@@ -13041,16 +13041,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='gfedcba' AND f GLOB 'klmno*')
+      WHERE (g='gfedcba' AND f LIKE 'klmno%')
          OR ((a BETWEEN 9 AND 11) AND a!=10)
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR a=48
          OR b=113
          OR ((a BETWEEN 20 AND 22) AND a!=21)
          OR b=880
          OR ((a BETWEEN 85 AND 87) AND a!=86)
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.346.2>
@@ -13065,10 +13065,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=517
          OR b=187
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR b=1092
          OR ((a BETWEEN 84 AND 86) AND a!=85)
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.347.1>
@@ -13083,10 +13083,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=517
          OR b=187
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR b=1092
          OR ((a BETWEEN 84 AND 86) AND a!=85)
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.347.2>
@@ -13259,7 +13259,7 @@ test:do_test(
          OR a=30
          OR c=3003
          OR (d>=88.0 AND d<89.0 AND d IS NOT NULL)
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
          OR b=564
          OR b=55
          OR a=38
@@ -13281,7 +13281,7 @@ test:do_test(
          OR a=30
          OR c=3003
          OR (d>=88.0 AND d<89.0 AND d IS NOT NULL)
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
          OR b=564
          OR b=55
          OR a=38
@@ -13328,7 +13328,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=792
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
   ]])
     end, {
         -- <where7-2.354.1>
@@ -13342,7 +13342,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=792
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
   ]])
     end, {
         -- <where7-2.354.2>
@@ -13357,9 +13357,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=73.0 AND d<74.0 AND d IS NOT NULL)
          OR c=21021
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR f='zabcdefgh'
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR b=781
          OR a=64
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
@@ -13377,9 +13377,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=73.0 AND d<74.0 AND d IS NOT NULL)
          OR c=21021
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR f='zabcdefgh'
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR b=781
          OR a=64
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
@@ -13395,12 +13395,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'pqrst*')
+      WHERE (g='lkjihgf' AND f LIKE 'pqrst%')
          OR (d>=90.0 AND d<91.0 AND d IS NOT NULL)
          OR a=34
-         OR (g='rqponml' AND f GLOB 'ijklm*')
-         OR (g='rqponml' AND f GLOB 'klmno*')
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
+         OR (g='rqponml' AND f LIKE 'klmno%')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR b=319
          OR b=330
          OR ((a BETWEEN 28 AND 30) AND a!=29)
@@ -13416,12 +13416,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'pqrst*')
+      WHERE (g='lkjihgf' AND f LIKE 'pqrst%')
          OR (d>=90.0 AND d<91.0 AND d IS NOT NULL)
          OR a=34
-         OR (g='rqponml' AND f GLOB 'ijklm*')
-         OR (g='rqponml' AND f GLOB 'klmno*')
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
+         OR (g='rqponml' AND f LIKE 'klmno%')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR b=319
          OR b=330
          OR ((a BETWEEN 28 AND 30) AND a!=29)
@@ -13437,8 +13437,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR a=45
          OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
   ]])
@@ -13453,8 +13453,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR a=45
          OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
   ]])
@@ -13470,7 +13470,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=53.0 AND d<54.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=165
          OR b=836
   ]])
@@ -13486,7 +13486,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=53.0 AND d<54.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=165
          OR b=836
   ]])
@@ -13503,7 +13503,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1034
          OR f='vwxyzabcd'
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
   ]])
     end, {
@@ -13519,7 +13519,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1034
          OR f='vwxyzabcd'
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
   ]])
     end, {
@@ -13575,12 +13575,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=37
          OR b=88
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR c=23023
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
          OR a=56
          OR ((a BETWEEN 13 AND 15) AND a!=14)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR f='ijklmnopq'
          OR ((a BETWEEN 85 AND 87) AND a!=86)
   ]])
@@ -13597,12 +13597,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=37
          OR b=88
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR c=23023
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
          OR a=56
          OR ((a BETWEEN 13 AND 15) AND a!=14)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR f='ijklmnopq'
          OR ((a BETWEEN 85 AND 87) AND a!=86)
   ]])
@@ -13620,7 +13620,7 @@ test:do_test(
       WHERE (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR a=74
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 42 AND 44) AND a!=43)
   ]])
     end, {
@@ -13637,7 +13637,7 @@ test:do_test(
       WHERE (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR a=74
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 42 AND 44) AND a!=43)
   ]])
     end, {
@@ -13747,13 +13747,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'vwxyz*')
+      WHERE (g='jihgfed' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR b=212
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR a=20
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=627
   ]])
     end, {
@@ -13767,13 +13767,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'vwxyz*')
+      WHERE (g='jihgfed' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR b=212
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR a=20
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=627
   ]])
     end, {
@@ -13787,7 +13787,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+      WHERE (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR b=157
          OR b=1026
@@ -13803,7 +13803,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+      WHERE (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR b=157
          OR b=1026
@@ -13823,10 +13823,10 @@ test:do_test(
          OR a=16
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='wvutsrq' AND f GLOB 'lmnop*')
+         OR (g='wvutsrq' AND f LIKE 'lmnop%')
          OR f='zabcdefgh'
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.368.1>
@@ -13843,10 +13843,10 @@ test:do_test(
          OR a=16
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='wvutsrq' AND f GLOB 'lmnop*')
+         OR (g='wvutsrq' AND f LIKE 'lmnop%')
          OR f='zabcdefgh'
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.368.2>
@@ -13895,11 +13895,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE f IS NULL
          OR a=37
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 55 AND 57) AND a!=56)
          OR b=168
          OR b=22
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=506
   ]])
     end, {
@@ -13915,11 +13915,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE f IS NULL
          OR a=37
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 55 AND 57) AND a!=56)
          OR b=168
          OR b=22
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=506
   ]])
     end, {
@@ -13935,11 +13935,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=29
          OR ((a BETWEEN 26 AND 28) AND a!=27)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR b=209
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
          OR b=146
   ]])
     end, {
@@ -13955,11 +13955,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=29
          OR ((a BETWEEN 26 AND 28) AND a!=27)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR b=209
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
          OR b=146
   ]])
     end, {
@@ -14017,7 +14017,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
+      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR b=113
          OR ((a BETWEEN 40 AND 42) AND a!=41)
@@ -14035,7 +14035,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
+      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR b=113
          OR ((a BETWEEN 40 AND 42) AND a!=41)
@@ -14081,7 +14081,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='rqponml' AND f GLOB 'ijklm*')
+      WHERE (g='rqponml' AND f LIKE 'ijklm%')
          OR a=99
          OR a=100
          OR b=429
@@ -14104,7 +14104,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='rqponml' AND f GLOB 'ijklm*')
+      WHERE (g='rqponml' AND f LIKE 'ijklm%')
          OR a=99
          OR a=100
          OR b=429
@@ -14164,9 +14164,9 @@ test:do_test(
          OR c=6006
          OR a=18
          OR c=24024
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR c=19019
          OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
          OR ((a BETWEEN 44 AND 46) AND a!=45)
@@ -14187,9 +14187,9 @@ test:do_test(
          OR c=6006
          OR a=18
          OR c=24024
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR c=19019
          OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
          OR ((a BETWEEN 44 AND 46) AND a!=45)
@@ -14243,7 +14243,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=99
          OR ((a BETWEEN 85 AND 87) AND a!=86)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
   ]])
     end, {
         -- <where7-2.379.1>
@@ -14258,7 +14258,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=99
          OR ((a BETWEEN 85 AND 87) AND a!=86)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
   ]])
     end, {
         -- <where7-2.379.2>
@@ -14271,7 +14271,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?hijk*' AND f GLOB 'ghij*')
+      WHERE (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR ((a BETWEEN 79 AND 81) AND a!=80)
          OR b=715
          OR ((a BETWEEN 23 AND 25) AND a!=24)
@@ -14287,7 +14287,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?hijk*' AND f GLOB 'ghij*')
+      WHERE (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR ((a BETWEEN 79 AND 81) AND a!=80)
          OR b=715
          OR ((a BETWEEN 23 AND 25) AND a!=24)
@@ -14304,7 +14304,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=97.0 AND d<98.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR a=46
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
   ]])
@@ -14320,7 +14320,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=97.0 AND d<98.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR a=46
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
   ]])
@@ -14335,7 +14335,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'defgh*')
+      WHERE (g='ihgfedc' AND f LIKE 'defgh%')
          OR ((a BETWEEN 97 AND 99) AND a!=98)
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
          OR b=1056
@@ -14352,7 +14352,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'defgh*')
+      WHERE (g='ihgfedc' AND f LIKE 'defgh%')
          OR ((a BETWEEN 97 AND 99) AND a!=98)
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
          OR b=1056
@@ -14453,7 +14453,7 @@ test:do_test(
          OR ((a BETWEEN 39 AND 41) AND a!=40)
          OR b=242
          OR ((a BETWEEN 32 AND 34) AND a!=33)
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=300
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
@@ -14476,7 +14476,7 @@ test:do_test(
          OR ((a BETWEEN 39 AND 41) AND a!=40)
          OR b=242
          OR ((a BETWEEN 32 AND 34) AND a!=33)
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=300
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
@@ -14502,7 +14502,7 @@ test:do_test(
          OR b=1048
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR c=19019
   ]])
     end, {
@@ -14525,7 +14525,7 @@ test:do_test(
          OR b=1048
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR c=19019
   ]])
     end, {
@@ -14608,10 +14608,10 @@ test:do_test(
          OR a=58
          OR b=333
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR b=572
          OR ((a BETWEEN 50 AND 52) AND a!=51)
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
   ]])
     end, {
         -- <where7-2.389.1>
@@ -14631,10 +14631,10 @@ test:do_test(
          OR a=58
          OR b=333
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR b=572
          OR ((a BETWEEN 50 AND 52) AND a!=51)
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
   ]])
     end, {
         -- <where7-2.389.2>
@@ -14649,7 +14649,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1034
          OR f='lmnopqrst'
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.390.1>
@@ -14664,7 +14664,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1034
          OR f='lmnopqrst'
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.390.2>
@@ -14679,7 +14679,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE c=15015
          OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR b=58
          OR b=674
          OR b=979
@@ -14697,7 +14697,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE c=15015
          OR (d>=87.0 AND d<88.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR b=58
          OR b=674
          OR b=979
@@ -14747,9 +14747,9 @@ test:do_test(
          OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
          OR b=630
          OR a=19
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR f='wxyzabcde'
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR b=377
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
          OR a=77
@@ -14770,9 +14770,9 @@ test:do_test(
          OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
          OR b=630
          OR a=19
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR f='wxyzabcde'
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR b=377
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
          OR a=77
@@ -14818,14 +14818,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=64
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'cdefg*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
          OR c=14014
          OR b=586
          OR c=27027
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.395.1>
@@ -14839,14 +14839,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=64
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'cdefg*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
          OR c=14014
          OR b=586
          OR c=27027
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.395.2>
@@ -14903,11 +14903,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR a=23
          OR b=737
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
@@ -14926,11 +14926,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR a=23
          OR b=737
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
@@ -14983,10 +14983,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=18
          OR b=1059
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=795
   ]])
     end, {
@@ -15002,10 +15002,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=18
          OR b=1059
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=795
   ]])
     end, {
@@ -15019,7 +15019,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?mnop*' AND f GLOB 'lmno*')
+      WHERE (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR a=93
          OR a=11
          OR f='nopqrstuv'
@@ -15039,7 +15039,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?mnop*' AND f GLOB 'lmno*')
+      WHERE (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR a=93
          OR a=11
          OR f='nopqrstuv'
@@ -15062,8 +15062,8 @@ test:do_test(
       WHERE b=685
          OR a=33
          OR ((a BETWEEN 40 AND 42) AND a!=41)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 39 AND 41) AND a!=40)
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR b=715
@@ -15085,8 +15085,8 @@ test:do_test(
       WHERE b=685
          OR a=33
          OR ((a BETWEEN 40 AND 42) AND a!=41)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 39 AND 41) AND a!=40)
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR b=715
@@ -15107,7 +15107,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=89
          OR b=1037
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.402.1>
@@ -15122,7 +15122,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=89
          OR b=1037
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.402.2>
@@ -15179,9 +15179,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (g='rqponml' AND f GLOB 'jklmn*')
-         OR (g='lkjihgf' AND f GLOB 'mnopq*')
+      WHERE (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
+         OR (g='lkjihgf' AND f LIKE 'mnopq%')
          OR b=726
          OR ((a BETWEEN 73 AND 75) AND a!=74)
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
@@ -15201,9 +15201,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (g='rqponml' AND f GLOB 'jklmn*')
-         OR (g='lkjihgf' AND f GLOB 'mnopq*')
+      WHERE (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
+         OR (g='lkjihgf' AND f LIKE 'mnopq%')
          OR b=726
          OR ((a BETWEEN 73 AND 75) AND a!=74)
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
@@ -15223,7 +15223,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=924
          OR f='lmnopqrst'
          OR b=1048
@@ -15239,7 +15239,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=924
          OR f='lmnopqrst'
          OR b=1048
@@ -15256,7 +15256,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=198
          OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
          OR ((a BETWEEN 12 AND 14) AND a!=13)
@@ -15276,7 +15276,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=198
          OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
          OR ((a BETWEEN 12 AND 14) AND a!=13)
@@ -15341,7 +15341,7 @@ test:do_test(
          OR b=630
          OR a=55
          OR c=26026
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -15359,7 +15359,7 @@ test:do_test(
          OR b=630
          OR a=55
          OR c=26026
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -15375,12 +15375,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE f='uvwxyzabc'
          OR f='xyzabcdef'
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
          OR ((a BETWEEN 51 AND 53) AND a!=52)
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
          OR b=69
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
   ]])
     end, {
         -- <where7-2.409.1>
@@ -15395,12 +15395,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE f='uvwxyzabc'
          OR f='xyzabcdef'
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR (d>=70.0 AND d<71.0 AND d IS NOT NULL)
          OR ((a BETWEEN 51 AND 53) AND a!=52)
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
          OR b=69
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
   ]])
     end, {
         -- <where7-2.409.2>
@@ -15417,7 +15417,7 @@ test:do_test(
          OR b=454
          OR ((a BETWEEN 92 AND 94) AND a!=93)
          OR b=179
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR f='qrstuvwxy'
   ]])
     end, {
@@ -15435,7 +15435,7 @@ test:do_test(
          OR b=454
          OR ((a BETWEEN 92 AND 94) AND a!=93)
          OR b=179
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR f='qrstuvwxy'
   ]])
     end, {
@@ -15452,7 +15452,7 @@ test:do_test(
       WHERE ((a BETWEEN 6 AND 8) AND a!=7)
          OR b=619
          OR a=20
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR b=946
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR a=64
@@ -15474,7 +15474,7 @@ test:do_test(
       WHERE ((a BETWEEN 6 AND 8) AND a!=7)
          OR b=619
          OR a=20
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR b=946
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
          OR a=64
@@ -15527,8 +15527,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR a=32
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR c=32032
   ]])
     end, {
@@ -15544,8 +15544,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR a=32
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR c=32032
   ]])
     end, {
@@ -15654,7 +15654,7 @@ test:do_test(
       WHERE (d>=32.0 AND d<33.0 AND d IS NOT NULL)
          OR a=27
          OR ((a BETWEEN 55 AND 57) AND a!=56)
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.417.1>
@@ -15670,7 +15670,7 @@ test:do_test(
       WHERE (d>=32.0 AND d<33.0 AND d IS NOT NULL)
          OR a=27
          OR ((a BETWEEN 55 AND 57) AND a!=56)
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.417.2>
@@ -15720,7 +15720,7 @@ test:do_test(
          OR b=561
          OR b=352
          OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR a=95
   ]])
     end, {
@@ -15743,7 +15743,7 @@ test:do_test(
          OR b=561
          OR b=352
          OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR a=95
   ]])
     end, {
@@ -15761,7 +15761,7 @@ test:do_test(
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR f='ghijklmno'
          OR b=619
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR b=476
          OR a=83
@@ -15782,7 +15782,7 @@ test:do_test(
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR f='ghijklmno'
          OR b=619
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR b=476
          OR a=83
@@ -15868,8 +15868,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1059
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=47
          OR b=660
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -15887,8 +15887,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1059
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=47
          OR b=660
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -15936,13 +15936,13 @@ test:do_test(
       WHERE b=597
          OR f='lmnopqrst'
          OR a=24
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 31 AND 33) AND a!=32)
          OR b=1023
          OR a=53
          OR a=78
          OR f='efghijklm'
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -15959,13 +15959,13 @@ test:do_test(
       WHERE b=597
          OR f='lmnopqrst'
          OR a=24
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 31 AND 33) AND a!=32)
          OR b=1023
          OR a=53
          OR a=78
          OR f='efghijklm'
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -16012,11 +16012,11 @@ test:do_test(
       WHERE f='tuvwxyzab'
          OR b=388
          OR ((a BETWEEN 84 AND 86) AND a!=85)
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR b=957
          OR b=663
          OR b=847
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.427.1>
@@ -16032,11 +16032,11 @@ test:do_test(
       WHERE f='tuvwxyzab'
          OR b=388
          OR ((a BETWEEN 84 AND 86) AND a!=85)
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR b=957
          OR b=663
          OR b=847
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.427.2>
@@ -16051,7 +16051,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=81.0 AND d<82.0 AND d IS NOT NULL)
          OR a=56
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.428.1>
@@ -16066,7 +16066,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=81.0 AND d<82.0 AND d IS NOT NULL)
          OR a=56
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
   ]])
     end, {
         -- <where7-2.428.2>
@@ -16082,7 +16082,7 @@ test:do_test(
       WHERE c>=34035
          OR b=168
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
   ]])
     end, {
         -- <where7-2.429.1>
@@ -16098,7 +16098,7 @@ test:do_test(
       WHERE c>=34035
          OR b=168
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
   ]])
     end, {
         -- <where7-2.429.2>
@@ -16144,9 +16144,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=29.0 AND d<30.0 AND d IS NOT NULL)
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR f='rstuvwxyz'
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.431.1>
@@ -16160,9 +16160,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=29.0 AND d<30.0 AND d IS NOT NULL)
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR f='rstuvwxyz'
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.431.2>
@@ -16246,7 +16246,7 @@ test:do_test(
       WHERE b=113
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR b=113
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR ((a BETWEEN 62 AND 64) AND a!=63)
          OR c=6006
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
@@ -16267,7 +16267,7 @@ test:do_test(
       WHERE b=113
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR b=113
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR ((a BETWEEN 62 AND 64) AND a!=63)
          OR c=6006
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
@@ -16285,7 +16285,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR c=22022
          OR ((a BETWEEN 79 AND 81) AND a!=80)
@@ -16303,7 +16303,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR c=22022
          OR ((a BETWEEN 79 AND 81) AND a!=80)
@@ -16322,7 +16322,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 74 AND 76) AND a!=75)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=47
          OR ((a BETWEEN 44 AND 46) AND a!=45)
          OR a=92
@@ -16331,7 +16331,7 @@ test:do_test(
          OR c=7007
          OR a=93
          OR ((a BETWEEN 93 AND 95) AND a!=94)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.436.1>
@@ -16345,7 +16345,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 74 AND 76) AND a!=75)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=47
          OR ((a BETWEEN 44 AND 46) AND a!=45)
          OR a=92
@@ -16354,7 +16354,7 @@ test:do_test(
          OR c=7007
          OR a=93
          OR ((a BETWEEN 93 AND 95) AND a!=94)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.436.2>
@@ -16367,11 +16367,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR a=13
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR c=29029
          OR b=311
          OR b=366
@@ -16389,11 +16389,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR a=13
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR c=29029
          OR b=311
          OR b=366
@@ -16453,12 +16453,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=82.0 AND d<83.0 AND d IS NOT NULL)
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR a=41
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR b=913
   ]])
     end, {
@@ -16474,12 +16474,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=82.0 AND d<83.0 AND d IS NOT NULL)
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR a=41
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR b=913
   ]])
     end, {
@@ -16593,12 +16593,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=102
          OR b=212
          OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
          OR b=487
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.443.1>
@@ -16611,12 +16611,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=102
          OR b=212
          OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
          OR b=487
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.443.2>
@@ -16661,7 +16661,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=872
          OR ((a BETWEEN 58 AND 60) AND a!=59)
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR b=957
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
          OR a=67
@@ -16680,7 +16680,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=872
          OR ((a BETWEEN 58 AND 60) AND a!=59)
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR b=957
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
          OR a=67
@@ -16700,12 +16700,12 @@ test:do_test(
       WHERE b=66
          OR b=102
          OR b=396
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 7 AND 9) AND a!=8)
          OR b=759
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR f='ghijklmno'
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 90 AND 92) AND a!=91)
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
   ]])
@@ -16723,12 +16723,12 @@ test:do_test(
       WHERE b=66
          OR b=102
          OR b=396
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 7 AND 9) AND a!=8)
          OR b=759
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR f='ghijklmno'
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 90 AND 92) AND a!=91)
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
   ]])
@@ -16744,8 +16744,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR a=72
          OR b=1100
          OR b=102
@@ -16763,8 +16763,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR a=72
          OR b=1100
          OR b=102
@@ -16878,7 +16878,7 @@ test:do_test(
       WHERE b=47
          OR a=91
          OR d>1e10
-         OR (g='srqponm' AND f GLOB 'cdefg*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.451.1>
@@ -16894,7 +16894,7 @@ test:do_test(
       WHERE b=47
          OR a=91
          OR d>1e10
-         OR (g='srqponm' AND f GLOB 'cdefg*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.451.2>
@@ -16975,13 +16975,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR b=619
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR c=11011
          OR b=550
          OR b=1059
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
@@ -16998,13 +16998,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR b=619
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR c=11011
          OR b=550
          OR b=1059
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
@@ -17021,16 +17021,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='edcbazy' AND f GLOB 'vwxyz*')
+      WHERE (g='edcbazy' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR a=78
          OR a=27
          OR b=792
          OR b=946
          OR c=22022
          OR a=23
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=388
   ]])
     end, {
@@ -17044,16 +17044,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='edcbazy' AND f GLOB 'vwxyz*')
+      WHERE (g='edcbazy' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 59 AND 61) AND a!=60)
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR a=78
          OR a=27
          OR b=792
          OR b=946
          OR c=22022
          OR a=23
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=388
   ]])
     end, {
@@ -17070,8 +17070,8 @@ test:do_test(
       WHERE c=32032
          OR f IS NULL
          OR ((a BETWEEN 37 AND 39) AND a!=38)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR b=825
   ]])
     end, {
@@ -17088,8 +17088,8 @@ test:do_test(
       WHERE c=32032
          OR f IS NULL
          OR ((a BETWEEN 37 AND 39) AND a!=38)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR b=825
   ]])
     end, {
@@ -17104,7 +17104,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=84.0 AND d<85.0 AND d IS NOT NULL)
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR b=1078
@@ -17126,7 +17126,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=84.0 AND d<85.0 AND d IS NOT NULL)
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR b=1078
@@ -17147,11 +17147,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'ijklm*')
+      WHERE (g='wvutsrq' AND f LIKE 'ijklm%')
          OR c=25025
          OR b=550
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.458.1>
@@ -17164,11 +17164,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'ijklm*')
+      WHERE (g='wvutsrq' AND f LIKE 'ijklm%')
          OR c=25025
          OR b=550
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.458.2>
@@ -17183,7 +17183,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=432
          OR f='opqrstuvw'
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.459.1>
@@ -17198,7 +17198,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=432
          OR f='opqrstuvw'
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.459.2>
@@ -17213,7 +17213,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 14 AND 16) AND a!=15)
          OR b=847
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR b=583
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
@@ -17234,7 +17234,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 14 AND 16) AND a!=15)
          OR b=847
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR b=583
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
@@ -17299,7 +17299,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=586
          OR d<0.0
          OR c=9009
@@ -17315,7 +17315,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=586
          OR d<0.0
          OR c=9009
@@ -17378,7 +17378,7 @@ test:do_test(
       WHERE ((a BETWEEN 44 AND 46) AND a!=45)
          OR a=53
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=594
          OR b=80
          OR ((a BETWEEN 18 AND 20) AND a!=19)
@@ -17399,7 +17399,7 @@ test:do_test(
       WHERE ((a BETWEEN 44 AND 46) AND a!=45)
          OR a=53
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=594
          OR b=80
          OR ((a BETWEEN 18 AND 20) AND a!=19)
@@ -17482,9 +17482,9 @@ test:do_test(
       WHERE a=59
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR f='wxyzabcde'
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
          OR a=70
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR ((a BETWEEN 14 AND 16) AND a!=15)
@@ -17503,9 +17503,9 @@ test:do_test(
       WHERE a=59
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR f='wxyzabcde'
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
          OR a=70
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR ((a BETWEEN 14 AND 16) AND a!=15)
@@ -17522,7 +17522,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=69
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.468.1>
@@ -17536,7 +17536,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=69
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.468.2>
@@ -17552,8 +17552,8 @@ test:do_test(
       WHERE a=41
          OR a=43
          OR a=92
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.469.1>
@@ -17569,8 +17569,8 @@ test:do_test(
       WHERE a=41
          OR a=43
          OR a=92
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.469.2>
@@ -17617,7 +17617,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE f='fghijklmn'
          OR f='fghijklmn'
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR b=465
          OR b=586
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
@@ -17639,7 +17639,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE f='fghijklmn'
          OR f='fghijklmn'
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR b=465
          OR b=586
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
@@ -17660,10 +17660,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=34.0 AND d<35.0 AND d IS NOT NULL)
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=814
          OR a=20
          OR 1000000<b
@@ -17681,10 +17681,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=34.0 AND d<35.0 AND d IS NOT NULL)
-         OR (f GLOB '?abcd*' AND f GLOB 'zabc*')
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (f LIKE '_abcd%' AND f LIKE 'zabc%')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=814
          OR a=20
          OR 1000000<b
@@ -17701,14 +17701,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
          OR c=1001
          OR b=484
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
          OR c<=10
          OR a=92
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 0 AND 2) AND a!=1)
          OR b=1026
   ]])
@@ -17723,14 +17723,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'uvwxy*')
+      WHERE (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
          OR c=1001
          OR b=484
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
          OR c<=10
          OR a=92
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 0 AND 2) AND a!=1)
          OR b=1026
   ]])
@@ -17746,13 +17746,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=54
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR b=993
          OR c=22022
          OR a=68
          OR ((a BETWEEN 99 AND 101) AND a!=100)
          OR a=62
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR b=1015
   ]])
     end, {
@@ -17767,13 +17767,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=54
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR b=993
          OR c=22022
          OR a=68
          OR ((a BETWEEN 99 AND 101) AND a!=100)
          OR a=62
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
          OR b=1015
   ]])
     end, {
@@ -17789,7 +17789,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=319
          OR a=50
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
@@ -17808,7 +17808,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=319
          OR a=50
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
@@ -17889,14 +17889,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
          OR b=407
          OR b=454
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
          OR b=627
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
   ]])
     end, {
         -- <where7-2.478.1>
@@ -17909,14 +17909,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
          OR b=407
          OR b=454
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
          OR b=627
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
   ]])
     end, {
         -- <where7-2.478.2>
@@ -17933,7 +17933,7 @@ test:do_test(
          OR c=34034
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR a=67
   ]])
     end, {
@@ -17951,7 +17951,7 @@ test:do_test(
          OR c=34034
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR a=67
   ]])
     end, {
@@ -17970,7 +17970,7 @@ test:do_test(
          OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
   ]])
     end, {
         -- <where7-2.480.1>
@@ -17988,7 +17988,7 @@ test:do_test(
          OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
   ]])
     end, {
         -- <where7-2.480.2>
@@ -18006,12 +18006,12 @@ test:do_test(
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
          OR b=201
          OR a=99
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 36 AND 38) AND a!=37)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
          OR b=946
          OR b=993
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.481.1>
@@ -18029,12 +18029,12 @@ test:do_test(
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
          OR b=201
          OR a=99
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 36 AND 38) AND a!=37)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
          OR b=946
          OR b=993
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.481.2>
@@ -18048,7 +18048,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=806
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR b=916
          OR b<0
@@ -18070,7 +18070,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=806
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR b=916
          OR b<0
@@ -18093,11 +18093,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=836
          OR d>1e10
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR f='pqrstuvwx'
          OR ((a BETWEEN 3 AND 5) AND a!=4)
          OR f='abcdefghi'
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR a=33
          OR ((a BETWEEN 19 AND 21) AND a!=20)
          OR ((a BETWEEN 88 AND 90) AND a!=89)
@@ -18116,11 +18116,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=836
          OR d>1e10
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR f='pqrstuvwx'
          OR ((a BETWEEN 3 AND 5) AND a!=4)
          OR f='abcdefghi'
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR a=33
          OR ((a BETWEEN 19 AND 21) AND a!=20)
          OR ((a BETWEEN 88 AND 90) AND a!=89)
@@ -18140,10 +18140,10 @@ test:do_test(
       WHERE a=48
          OR a=92
          OR a=1
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR b=905
          OR ((a BETWEEN 51 AND 53) AND a!=52)
   ]])
@@ -18161,10 +18161,10 @@ test:do_test(
       WHERE a=48
          OR a=92
          OR a=1
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR b=905
          OR ((a BETWEEN 51 AND 53) AND a!=52)
   ]])
@@ -18215,12 +18215,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=740
          OR b=564
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR a=11
          OR ((a BETWEEN 44 AND 46) AND a!=45)
          OR b=322
          OR (d>=6.0 AND d<7.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR b=902
          OR c>=34035
   ]])
@@ -18237,12 +18237,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=740
          OR b=564
-         OR (g='onmlkji' AND f GLOB 'zabcd*')
+         OR (g='onmlkji' AND f LIKE 'zabcd%')
          OR a=11
          OR ((a BETWEEN 44 AND 46) AND a!=45)
          OR b=322
          OR (d>=6.0 AND d<7.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR b=902
          OR c>=34035
   ]])
@@ -18264,7 +18264,7 @@ test:do_test(
          OR a=48
          OR b=927
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR f='abcdefghi'
          OR b=91
          OR b=55
@@ -18287,7 +18287,7 @@ test:do_test(
          OR a=48
          OR b=927
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
          OR f='abcdefghi'
          OR b=91
          OR b=55
@@ -18303,7 +18303,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='srqponm' AND f GLOB 'efghi*')
+      WHERE (g='srqponm' AND f LIKE 'efghi%')
          OR ((a BETWEEN 88 AND 90) AND a!=89)
          OR a=20
          OR b=11
@@ -18319,7 +18319,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='srqponm' AND f GLOB 'efghi*')
+      WHERE (g='srqponm' AND f LIKE 'efghi%')
          OR ((a BETWEEN 88 AND 90) AND a!=89)
          OR a=20
          OR b=11
@@ -18338,7 +18338,7 @@ test:do_test(
       WHERE (d>=27.0 AND d<28.0 AND d IS NOT NULL)
          OR b=55
          OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR a=50
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
@@ -18358,7 +18358,7 @@ test:do_test(
       WHERE (d>=27.0 AND d<28.0 AND d IS NOT NULL)
          OR b=55
          OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR a=50
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
@@ -18375,8 +18375,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='rqponml' AND f GLOB 'ijklm*')
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+      WHERE (g='rqponml' AND f LIKE 'ijklm%')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
   ]])
     end, {
         -- <where7-2.490.1>
@@ -18389,8 +18389,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='rqponml' AND f GLOB 'ijklm*')
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+      WHERE (g='rqponml' AND f LIKE 'ijklm%')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
   ]])
     end, {
         -- <where7-2.490.2>
@@ -18405,7 +18405,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=704
          OR b=924
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR b=113
   ]])
     end, {
@@ -18421,7 +18421,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=704
          OR b=924
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR b=113
   ]])
     end, {
@@ -18503,11 +18503,11 @@ test:do_test(
          OR b=726
          OR f='abcdefghi'
          OR b=179
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=539
          OR b=66
          OR ((a BETWEEN 86 AND 88) AND a!=87)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.494.1>
@@ -18524,11 +18524,11 @@ test:do_test(
          OR b=726
          OR f='abcdefghi'
          OR b=179
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=539
          OR b=66
          OR ((a BETWEEN 86 AND 88) AND a!=87)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.494.2>
@@ -18573,11 +18573,11 @@ test:do_test(
          OR b=682
          OR b=443
          OR b=836
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
          OR ((a BETWEEN 51 AND 53) AND a!=52)
          OR b=110
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
   ]])
     end, {
         -- <where7-2.496.1>
@@ -18594,11 +18594,11 @@ test:do_test(
          OR b=682
          OR b=443
          OR b=836
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
          OR ((a BETWEEN 51 AND 53) AND a!=52)
          OR b=110
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
   ]])
     end, {
         -- <where7-2.496.2>
@@ -18611,15 +18611,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?zabc*' AND f GLOB 'yzab*')
+      WHERE (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR b=462
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR a=22
          OR b=594
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
   ]])
     end, {
         -- <where7-2.497.1>
@@ -18632,15 +18632,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?zabc*' AND f GLOB 'yzab*')
+      WHERE (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR b=462
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR a=22
          OR b=594
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
   ]])
     end, {
         -- <where7-2.497.2>
@@ -18653,11 +18653,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
+      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR f='vwxyzabcd'
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR a=37
          OR a=50
   ]])
@@ -18672,11 +18672,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
+      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR f='vwxyzabcd'
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR a=37
          OR a=50
   ]])
@@ -18693,10 +18693,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 83 AND 85) AND a!=84)
          OR b=784
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR b=825
          OR a=80
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR b=531
          OR a=100
@@ -18714,10 +18714,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 83 AND 85) AND a!=84)
          OR b=784
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR b=825
          OR a=80
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR b=531
          OR a=100
@@ -18733,7 +18733,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=220
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
   ]])
@@ -18748,7 +18748,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'tuvwx*')
+      WHERE (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR b=220
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
   ]])
@@ -18797,9 +18797,9 @@ test:do_test(
          OR b=894
          OR c=28028
          OR b=905
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR b=1037
   ]])
     end, {
@@ -18817,9 +18817,9 @@ test:do_test(
          OR b=894
          OR c=28028
          OR b=905
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR b=1037
   ]])
     end, {
@@ -18863,9 +18863,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
+      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=861
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.504.1>
@@ -18878,9 +18878,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'mnopq*')
+      WHERE (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=861
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.504.2>
@@ -18894,13 +18894,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=704
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR b=25
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=487
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR ((a BETWEEN 77 AND 79) AND a!=78)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
          OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
@@ -18917,13 +18917,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=704
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR b=25
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=487
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR ((a BETWEEN 77 AND 79) AND a!=78)
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
          OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
@@ -18940,16 +18940,16 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=19
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR b=674
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR b=355
          OR ((a BETWEEN 72 AND 74) AND a!=73)
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR c=28028
          OR b=649
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
+         OR (g='srqponm' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.506.1>
@@ -18963,16 +18963,16 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=19
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR b=674
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR b=355
          OR ((a BETWEEN 72 AND 74) AND a!=73)
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR c=28028
          OR b=649
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
+         OR (g='srqponm' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.506.2>
@@ -19020,7 +19020,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=135
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 39 AND 41) AND a!=40)
   ]])
     end, {
@@ -19035,7 +19035,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=135
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 39 AND 41) AND a!=40)
   ]])
     end, {
@@ -19049,8 +19049,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.509.1>
@@ -19063,8 +19063,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'ijklm*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+      WHERE (g='hgfedcb' AND f LIKE 'ijklm%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.509.2>
@@ -19077,7 +19077,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'wxyza*')
+      WHERE (g='jihgfed' AND f LIKE 'wxyza%')
          OR f='ghijklmno'
   ]])
     end, {
@@ -19091,7 +19091,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'wxyza*')
+      WHERE (g='jihgfed' AND f LIKE 'wxyza%')
          OR f='ghijklmno'
   ]])
     end, {
@@ -19187,7 +19187,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?lmno*' AND f GLOB 'klmn*')
+      WHERE (f LIKE '_lmno%' AND f LIKE 'klmn%')
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR b=99
          OR a=54
@@ -19203,7 +19203,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?lmno*' AND f GLOB 'klmn*')
+      WHERE (f LIKE '_lmno%' AND f LIKE 'klmn%')
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR b=99
          OR a=54
@@ -19220,7 +19220,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=300
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
          OR b=319
          OR f='fghijklmn'
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
@@ -19238,7 +19238,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=300
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
          OR b=319
          OR f='fghijklmn'
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
@@ -19263,7 +19263,7 @@ test:do_test(
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
          OR b=748
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.515.1>
@@ -19284,7 +19284,7 @@ test:do_test(
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
          OR b=748
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.515.2>
@@ -19333,10 +19333,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'wxyza*')
+      WHERE (g='jihgfed' AND f LIKE 'wxyza%')
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
          OR b=110
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR c=26026
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
          OR b=850
@@ -19353,10 +19353,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'wxyza*')
+      WHERE (g='jihgfed' AND f LIKE 'wxyza%')
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
          OR b=110
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR c=26026
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
          OR b=850
@@ -19375,9 +19375,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 74 AND 76) AND a!=75)
          OR ((a BETWEEN 1 AND 3) AND a!=2)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
          OR b=135
          OR a=28
          OR ((a BETWEEN 1 AND 3) AND a!=2)
@@ -19396,9 +19396,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 74 AND 76) AND a!=75)
          OR ((a BETWEEN 1 AND 3) AND a!=2)
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
-         OR (g='mlkjihg' AND f GLOB 'klmno*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
+         OR (g='mlkjihg' AND f LIKE 'klmno%')
          OR b=135
          OR a=28
          OR ((a BETWEEN 1 AND 3) AND a!=2)
@@ -19485,9 +19485,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR a=52
   ]])
     end, {
@@ -19501,9 +19501,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR a=52
   ]])
     end, {
@@ -19517,7 +19517,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'abcde*')
+      WHERE (g='ihgfedc' AND f LIKE 'abcde%')
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR a=86
          OR c=33033
@@ -19535,7 +19535,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'abcde*')
+      WHERE (g='ihgfedc' AND f LIKE 'abcde%')
          OR ((a BETWEEN 2 AND 4) AND a!=3)
          OR a=86
          OR c=33033
@@ -19557,7 +19557,7 @@ test:do_test(
          OR b=517
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR ((a BETWEEN 67 AND 69) AND a!=68)
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR f='defghijkl'
          OR b=707
          OR c>=34035
@@ -19580,7 +19580,7 @@ test:do_test(
          OR b=517
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR ((a BETWEEN 67 AND 69) AND a!=68)
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR f='defghijkl'
          OR b=707
          OR c>=34035
@@ -19602,7 +19602,7 @@ test:do_test(
       WHERE (d>=96.0 AND d<97.0 AND d IS NOT NULL)
          OR b=209
          OR b=399
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.524.1>
@@ -19618,7 +19618,7 @@ test:do_test(
       WHERE (d>=96.0 AND d<97.0 AND d IS NOT NULL)
          OR b=209
          OR b=399
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.524.2>
@@ -19632,11 +19632,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=597
          OR a=95
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR b=432
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
   ]])
@@ -19652,11 +19652,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=597
          OR a=95
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR b=432
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
   ]])
@@ -19680,7 +19680,7 @@ test:do_test(
          OR c=21021
          OR b=330
          OR b=231
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.526.1>
@@ -19702,7 +19702,7 @@ test:do_test(
          OR c=21021
          OR b=330
          OR b=231
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
   ]])
     end, {
         -- <where7-2.526.2>
@@ -19715,7 +19715,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'fghij*')
+      WHERE (g='hgfedcb' AND f LIKE 'fghij%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR f IS NULL
   ]])
@@ -19730,7 +19730,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'fghij*')
+      WHERE (g='hgfedcb' AND f LIKE 'fghij%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR f IS NULL
   ]])
@@ -19746,9 +19746,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 99 AND 101) AND a!=100)
-         OR (g='fedcbaz' AND f GLOB 'pqrst*')
+         OR (g='fedcbaz' AND f LIKE 'pqrst%')
          OR 1000000<b
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR b=990
   ]])
     end, {
@@ -19763,9 +19763,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 99 AND 101) AND a!=100)
-         OR (g='fedcbaz' AND f GLOB 'pqrst*')
+         OR (g='fedcbaz' AND f LIKE 'pqrst%')
          OR 1000000<b
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR b=990
   ]])
     end, {
@@ -19781,7 +19781,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=165
          OR a=69
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.529.1>
@@ -19796,7 +19796,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=165
          OR a=69
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.529.2>
@@ -19809,13 +19809,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'defgh*')
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='nmlkjih' AND f LIKE 'defgh%')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=784
          OR b=583
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR b=814
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR b=619
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
   ]])
@@ -19830,13 +19830,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'defgh*')
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='nmlkjih' AND f LIKE 'defgh%')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=784
          OR b=583
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR b=814
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR b=619
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
   ]])
@@ -19853,7 +19853,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=86
          OR b=484
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR b=418
          OR b=509
          OR a=42
@@ -19876,7 +19876,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=86
          OR b=484
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR b=418
          OR b=509
          OR a=42
@@ -20007,7 +20007,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
+      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR c=5005
          OR ((a BETWEEN 50 AND 52) AND a!=51)
          OR a=93
@@ -20015,7 +20015,7 @@ test:do_test(
          OR b=619
          OR b=234
          OR b=55
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -20029,7 +20029,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
+      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR c=5005
          OR ((a BETWEEN 50 AND 52) AND a!=51)
          OR a=93
@@ -20037,7 +20037,7 @@ test:do_test(
          OR b=619
          OR b=234
          OR b=55
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -20053,11 +20053,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=355
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=806
          OR b=462
          OR b=531
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
          OR f='mnopqrstu'
   ]])
     end, {
@@ -20073,11 +20073,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=355
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=806
          OR b=462
          OR b=531
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
          OR f='mnopqrstu'
   ]])
     end, {
@@ -20093,9 +20093,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 60 AND 62) AND a!=61)
          OR f='pqrstuvwx'
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
          OR b=495
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
          OR a=75
   ]])
     end, {
@@ -20111,9 +20111,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 60 AND 62) AND a!=61)
          OR f='pqrstuvwx'
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
          OR b=495
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
          OR a=75
   ]])
     end, {
@@ -20127,8 +20127,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=748
          OR b=913
          OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
@@ -20145,8 +20145,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=748
          OR b=913
          OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
@@ -20167,7 +20167,7 @@ test:do_test(
          OR b=902
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR b=168
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR a=50
          OR f='uvwxyzabc'
          OR b=836
@@ -20189,7 +20189,7 @@ test:do_test(
          OR b=902
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR b=168
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR a=50
          OR f='uvwxyzabc'
          OR b=836
@@ -20243,13 +20243,13 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=814
          OR c=30030
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
          OR a=16
          OR b=1048
          OR b=113
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR b=729
          OR a=54
   ]])
@@ -20266,13 +20266,13 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=814
          OR c=30030
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
          OR a=16
          OR b=1048
          OR b=113
          OR (d>=61.0 AND d<62.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR b=729
          OR a=54
   ]])
@@ -20288,15 +20288,15 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=399
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=814
          OR c=22022
          OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR a=1
          OR b=311
          OR b=121
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=198
   ]])
     end, {
@@ -20311,15 +20311,15 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=399
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=814
          OR c=22022
          OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR a=1
          OR b=311
          OR b=121
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=198
   ]])
     end, {
@@ -20403,7 +20403,7 @@ test:do_test(
          OR a=22
          OR b=594
          OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
   ]])
     end, {
         -- <where7-2.545.1>
@@ -20424,7 +20424,7 @@ test:do_test(
          OR a=22
          OR b=594
          OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
   ]])
     end, {
         -- <where7-2.545.2>
@@ -20443,7 +20443,7 @@ test:do_test(
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
          OR ((a BETWEEN 3 AND 5) AND a!=4)
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR f='mnopqrstu'
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
          OR b=902
@@ -20465,7 +20465,7 @@ test:do_test(
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
          OR ((a BETWEEN 3 AND 5) AND a!=4)
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR f='mnopqrstu'
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
          OR b=902
@@ -20481,8 +20481,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='onmlkji' AND f GLOB 'zabcd*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+      WHERE (g='onmlkji' AND f LIKE 'zabcd%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR a=13
   ]])
     end, {
@@ -20496,8 +20496,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='onmlkji' AND f GLOB 'zabcd*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+      WHERE (g='onmlkji' AND f LIKE 'zabcd%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR a=13
   ]])
     end, {
@@ -20511,11 +20511,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
+      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=410
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=418
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -20529,11 +20529,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='edcbazy' AND f GLOB 'wxyza*')
+      WHERE (g='edcbazy' AND f LIKE 'wxyza%')
          OR b=410
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=418
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -20552,8 +20552,8 @@ test:do_test(
          OR a=56
          OR a=46
          OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR (d>=41.0 AND d<42.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -20572,8 +20572,8 @@ test:do_test(
          OR a=56
          OR a=46
          OR (d>=100.0 AND d<101.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR (d>=41.0 AND d<42.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -20633,7 +20633,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=539
          OR b=418
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR b=759
   ]])
     end, {
@@ -20649,7 +20649,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=539
          OR b=418
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR b=759
   ]])
     end, {
@@ -20664,8 +20664,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1001
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR c=34034
          OR a=84
   ]])
@@ -20681,8 +20681,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1001
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR c=34034
          OR a=84
   ]])
@@ -20702,7 +20702,7 @@ test:do_test(
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR b=322
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR c=34034
@@ -20724,7 +20724,7 @@ test:do_test(
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR b=322
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR c=34034
@@ -20742,12 +20742,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=13013
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=47
          OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=828
   ]])
     end, {
@@ -20762,12 +20762,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=13013
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=47
          OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=828
   ]])
     end, {
@@ -20783,7 +20783,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=451
          OR b=836
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.555.1>
@@ -20798,7 +20798,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=451
          OR b=836
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.555.2>
@@ -20848,7 +20848,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='tuvwxyzab'
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.557.1>
@@ -20862,7 +20862,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='tuvwxyzab'
-         OR (g='nmlkjih' AND f GLOB 'efghi*')
+         OR (g='nmlkjih' AND f LIKE 'efghi%')
   ]])
     end, {
         -- <where7-2.557.2>
@@ -20881,7 +20881,7 @@ test:do_test(
          OR d<0.0
          OR b=982
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR ((a BETWEEN 97 AND 99) AND a!=98)
          OR e IS NULL
          OR c=32032
@@ -20904,7 +20904,7 @@ test:do_test(
          OR d<0.0
          OR b=982
          OR (d>=2.0 AND d<3.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR ((a BETWEEN 97 AND 99) AND a!=98)
          OR e IS NULL
          OR c=32032
@@ -20922,9 +20922,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=62
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.559.1>
@@ -20938,9 +20938,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=62
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.559.2>
@@ -20994,8 +20994,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=44
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.561.1>
@@ -21009,8 +21009,8 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=44
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.561.2>
@@ -21026,7 +21026,7 @@ test:do_test(
       WHERE b=883
          OR b=311
          OR b=880
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR a=88
          OR b=154
@@ -21048,7 +21048,7 @@ test:do_test(
       WHERE b=883
          OR b=311
          OR b=880
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR a=88
          OR b=154
@@ -21067,12 +21067,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='onmlkji' AND f GLOB 'xyzab*')
+      WHERE (g='onmlkji' AND f LIKE 'xyzab%')
          OR a=10
          OR b=190
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 67 AND 69) AND a!=68)
          OR b=385
          OR a=82
@@ -21090,12 +21090,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='onmlkji' AND f GLOB 'xyzab*')
+      WHERE (g='onmlkji' AND f LIKE 'xyzab%')
          OR a=10
          OR b=190
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 67 AND 69) AND a!=68)
          OR b=385
          OR a=82
@@ -21151,7 +21151,7 @@ test:do_test(
          OR a=49
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR c=33033
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
          OR g IS NULL
          OR b=220
@@ -21174,7 +21174,7 @@ test:do_test(
          OR a=49
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR c=33033
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR (d>=81.0 AND d<82.0 AND d IS NOT NULL)
          OR g IS NULL
          OR b=220
@@ -21191,7 +21191,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
+      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=212
          OR b=418
          OR ((a BETWEEN 31 AND 33) AND a!=32)
@@ -21207,7 +21207,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'tuvwx*')
+      WHERE (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=212
          OR b=418
          OR ((a BETWEEN 31 AND 33) AND a!=32)
@@ -21283,8 +21283,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'jklmn*')
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+      WHERE (g='hgfedcb' AND f LIKE 'jklmn%')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
   ]])
     end, {
         -- <where7-2.569.1>
@@ -21297,8 +21297,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'jklmn*')
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+      WHERE (g='hgfedcb' AND f LIKE 'jklmn%')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
   ]])
     end, {
         -- <where7-2.569.2>
@@ -21356,7 +21356,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=18018
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR b=410
          OR b=858
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
@@ -21373,7 +21373,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=18018
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR b=410
          OR b=858
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
@@ -21389,7 +21389,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ponmlkj' AND f GLOB 'vwxyz*')
+      WHERE (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR b=781
   ]])
     end, {
@@ -21403,7 +21403,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ponmlkj' AND f GLOB 'vwxyz*')
+      WHERE (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR b=781
   ]])
     end, {
@@ -21420,10 +21420,10 @@ test:do_test(
       WHERE b=1070
          OR ((a BETWEEN 50 AND 52) AND a!=51)
          OR a=54
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR a=9
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -21440,10 +21440,10 @@ test:do_test(
       WHERE b=1070
          OR ((a BETWEEN 50 AND 52) AND a!=51)
          OR a=54
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR a=9
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -21460,8 +21460,8 @@ test:do_test(
       WHERE a=55
          OR a=62
          OR a=63
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
          OR ((a BETWEEN 99 AND 101) AND a!=100)
   ]])
     end, {
@@ -21478,8 +21478,8 @@ test:do_test(
       WHERE a=55
          OR a=62
          OR a=63
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
          OR ((a BETWEEN 99 AND 101) AND a!=100)
   ]])
     end, {
@@ -21527,9 +21527,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=553
          OR ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=583
          OR a=56
   ]])
@@ -21546,9 +21546,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=553
          OR ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR (d>=59.0 AND d<60.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=583
          OR a=56
   ]])
@@ -21565,7 +21565,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=83
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR a=1
          OR ((a BETWEEN 17 AND 19) AND a!=18)
          OR ((a BETWEEN 49 AND 51) AND a!=50)
@@ -21584,7 +21584,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=83
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR a=1
          OR ((a BETWEEN 17 AND 19) AND a!=18)
          OR ((a BETWEEN 49 AND 51) AND a!=50)
@@ -21635,7 +21635,7 @@ test:do_test(
          OR a=92
          OR a=63
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.579.1>
@@ -21652,7 +21652,7 @@ test:do_test(
          OR a=92
          OR a=63
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.579.2>
@@ -21668,7 +21668,7 @@ test:do_test(
       WHERE b=440
          OR f='vwxyzabcd'
          OR b=190
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
          OR b=88
          OR b=58
@@ -21687,7 +21687,7 @@ test:do_test(
       WHERE b=440
          OR f='vwxyzabcd'
          OR b=190
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR (d>=42.0 AND d<43.0 AND d IS NOT NULL)
          OR b=88
          OR b=58
@@ -21707,7 +21707,7 @@ test:do_test(
          OR c=24024
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
          OR b=1001
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR d>1e10
          OR b=531
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
@@ -21728,7 +21728,7 @@ test:do_test(
          OR c=24024
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
          OR b=1001
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR d>1e10
          OR b=531
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
@@ -21774,7 +21774,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 71 AND 73) AND a!=72)
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR ((a BETWEEN 91 AND 93) AND a!=92)
@@ -21795,7 +21795,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 71 AND 73) AND a!=72)
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR ((a BETWEEN 91 AND 93) AND a!=92)
@@ -21820,8 +21820,8 @@ test:do_test(
          OR b=806
          OR b=605
          OR ((a BETWEEN 23 AND 25) AND a!=24)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
   ]])
     end, {
         -- <where7-2.584.1>
@@ -21839,8 +21839,8 @@ test:do_test(
          OR b=806
          OR b=605
          OR ((a BETWEEN 23 AND 25) AND a!=24)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
   ]])
     end, {
         -- <where7-2.584.2>
@@ -21856,9 +21856,9 @@ test:do_test(
       WHERE ((a BETWEEN 84 AND 86) AND a!=85)
          OR b=572
          OR c=10010
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=29
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
   ]])
     end, {
         -- <where7-2.585.1>
@@ -21874,9 +21874,9 @@ test:do_test(
       WHERE ((a BETWEEN 84 AND 86) AND a!=85)
          OR b=572
          OR c=10010
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=29
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
   ]])
     end, {
         -- <where7-2.585.2>
@@ -21962,9 +21962,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=5005
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR b=143
          OR a=68
          OR a=77
@@ -21982,9 +21982,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=5005
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR b=143
          OR a=68
          OR a=77
@@ -22002,10 +22002,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=5.0 AND d<6.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
          OR ((a BETWEEN 76 AND 78) AND a!=77)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=99
          OR ((a BETWEEN 12 AND 14) AND a!=13)
   ]])
@@ -22021,10 +22021,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=5.0 AND d<6.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'ghijk*')
+         OR (g='xwvutsr' AND f LIKE 'ghijk%')
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
          OR ((a BETWEEN 76 AND 78) AND a!=77)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=99
          OR ((a BETWEEN 12 AND 14) AND a!=13)
   ]])
@@ -22039,12 +22039,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'opqrs*')
+      WHERE (g='qponmlk' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 88 AND 90) AND a!=89)
          OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR b=971
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.590.1>
@@ -22057,12 +22057,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'opqrs*')
+      WHERE (g='qponmlk' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 88 AND 90) AND a!=89)
          OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR b=971
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.590.2>
@@ -22075,12 +22075,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?lmno*' AND f GLOB 'klmn*')
+      WHERE (f LIKE '_lmno%' AND f LIKE 'klmn%')
          OR b=806
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR b=1015
          OR ((a BETWEEN 68 AND 70) AND a!=69)
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
   ]])
     end, {
         -- <where7-2.591.1>
@@ -22093,12 +22093,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?lmno*' AND f GLOB 'klmn*')
+      WHERE (f LIKE '_lmno%' AND f LIKE 'klmn%')
          OR b=806
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR b=1015
          OR ((a BETWEEN 68 AND 70) AND a!=69)
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
   ]])
     end, {
         -- <where7-2.591.2>
@@ -22119,7 +22119,7 @@ test:do_test(
          OR a=26
          OR b=1048
          OR b=561
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR ((a BETWEEN 55 AND 57) AND a!=56)
          OR a=56
   ]])
@@ -22142,7 +22142,7 @@ test:do_test(
          OR a=26
          OR b=1048
          OR b=561
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR ((a BETWEEN 55 AND 57) AND a!=56)
          OR a=56
   ]])
@@ -22165,7 +22165,7 @@ test:do_test(
          OR b=113
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
          OR b=385
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.593.1>
@@ -22186,7 +22186,7 @@ test:do_test(
          OR b=113
          OR (d>=16.0 AND d<17.0 AND d IS NOT NULL)
          OR b=385
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.593.2>
@@ -22204,7 +22204,7 @@ test:do_test(
          OR b=674
          OR b=825
          OR b=704
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR a=76
@@ -22227,7 +22227,7 @@ test:do_test(
          OR b=674
          OR b=825
          OR b=704
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR a=76
@@ -22246,7 +22246,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=869
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.595.1>
@@ -22260,7 +22260,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=869
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.595.2>
@@ -22303,12 +22303,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='rqponml' AND f GLOB 'hijkl*')
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+      WHERE (g='rqponml' AND f LIKE 'hijkl%')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR a=8
          OR a=72
          OR ((a BETWEEN 95 AND 97) AND a!=96)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.597.1>
@@ -22321,12 +22321,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='rqponml' AND f GLOB 'hijkl*')
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+      WHERE (g='rqponml' AND f LIKE 'hijkl%')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR a=8
          OR a=72
          OR ((a BETWEEN 95 AND 97) AND a!=96)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.597.2>
@@ -22342,7 +22342,7 @@ test:do_test(
       WHERE a=20
          OR ((a BETWEEN 74 AND 76) AND a!=75)
          OR b=341
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=814
          OR b=1026
          OR a=14
@@ -22364,7 +22364,7 @@ test:do_test(
       WHERE a=20
          OR ((a BETWEEN 74 AND 76) AND a!=75)
          OR b=341
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=814
          OR b=1026
          OR a=14
@@ -22387,8 +22387,8 @@ test:do_test(
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR b=839
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR c=7007
   ]])
     end, {
@@ -22406,8 +22406,8 @@ test:do_test(
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR b=839
          OR (d>=51.0 AND d<52.0 AND d IS NOT NULL)
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR c=7007
   ]])
     end, {
@@ -22421,7 +22421,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
+      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR a=21
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
          OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
@@ -22443,7 +22443,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
+      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR a=21
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
          OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
@@ -22469,11 +22469,11 @@ test:do_test(
          OR f='bcdefghij'
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=762
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.601.1>
@@ -22490,11 +22490,11 @@ test:do_test(
          OR f='bcdefghij'
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=762
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.601.2>
@@ -22574,7 +22574,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=55.0 AND d<56.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR b=1067
          OR b=231
@@ -22595,7 +22595,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=55.0 AND d<56.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR b=1067
          OR b=231
@@ -22620,7 +22620,7 @@ test:do_test(
          OR b=396
          OR b=1059
          OR a=69
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR b=440
          OR b=825
   ]])
@@ -22640,7 +22640,7 @@ test:do_test(
          OR b=396
          OR b=1059
          OR a=69
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR b=440
          OR b=825
   ]])
@@ -22658,7 +22658,7 @@ test:do_test(
       WHERE (d>=26.0 AND d<27.0 AND d IS NOT NULL)
          OR b=308
          OR c<=10
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
          OR f='ghijklmno'
          OR b=289
          OR a=5
@@ -22680,7 +22680,7 @@ test:do_test(
       WHERE (d>=26.0 AND d<27.0 AND d IS NOT NULL)
          OR b=308
          OR c<=10
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
          OR f='ghijklmno'
          OR b=289
          OR a=5
@@ -22703,9 +22703,9 @@ test:do_test(
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
          OR b=993
          OR ((a BETWEEN 43 AND 45) AND a!=44)
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR b=663
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR b=869
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
          OR b=121
@@ -22725,9 +22725,9 @@ test:do_test(
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
          OR b=993
          OR ((a BETWEEN 43 AND 45) AND a!=44)
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR b=663
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR b=869
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
          OR b=121
@@ -22743,9 +22743,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR b=770
   ]])
     end, {
@@ -22759,9 +22759,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR b=770
   ]])
     end, {
@@ -22776,10 +22776,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 80 AND 82) AND a!=81)
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.609.1>
@@ -22793,10 +22793,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 80 AND 82) AND a!=81)
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.609.2>
@@ -22855,16 +22855,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='onmlkji' AND f GLOB 'zabcd*')
+      WHERE (g='onmlkji' AND f LIKE 'zabcd%')
          OR b=1092
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR a=77
          OR a=63
          OR b=762
          OR b=894
          OR b=685
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.611.1>
@@ -22877,16 +22877,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='onmlkji' AND f GLOB 'zabcd*')
+      WHERE (g='onmlkji' AND f LIKE 'zabcd%')
          OR b=1092
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR a=77
          OR a=63
          OR b=762
          OR b=894
          OR b=685
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.611.2>
@@ -22899,7 +22899,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'klmno*')
+      WHERE (g='wvutsrq' AND f LIKE 'klmno%')
          OR ((a BETWEEN 93 AND 95) AND a!=94)
          OR b=231
   ]])
@@ -22914,7 +22914,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'klmno*')
+      WHERE (g='wvutsrq' AND f LIKE 'klmno%')
          OR ((a BETWEEN 93 AND 95) AND a!=94)
          OR b=231
   ]])
@@ -22930,7 +22930,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=828
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
   ]])
     end, {
@@ -22945,7 +22945,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=828
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
   ]])
     end, {
@@ -22959,13 +22959,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?opqr*' AND f GLOB 'nopq*')
+      WHERE (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR b=520
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR a=21
   ]])
     end, {
@@ -22979,13 +22979,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?opqr*' AND f GLOB 'nopq*')
+      WHERE (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR b=520
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR a=21
   ]])
     end, {
@@ -23000,7 +23000,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=553
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
          OR b=1034
          OR b=418
          OR a=57
@@ -23019,7 +23019,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=553
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
          OR b=1034
          OR b=418
          OR a=57
@@ -23038,9 +23038,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=43
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR b=418
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
          OR b=594
          OR a=21
@@ -23060,9 +23060,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=43
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
          OR b=418
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
          OR b=594
          OR a=21
@@ -23082,7 +23082,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=671
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 95 AND 97) AND a!=96)
   ]])
     end, {
@@ -23097,7 +23097,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=671
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR ((a BETWEEN 95 AND 97) AND a!=96)
   ]])
     end, {
@@ -23148,7 +23148,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=806
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR b=275
@@ -23166,7 +23166,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=806
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR b=275
@@ -23184,12 +23184,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=24024
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR b=429
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR b=110
          OR a=39
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.620.1>
@@ -23203,12 +23203,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=24024
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR b=429
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR b=110
          OR a=39
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.620.2>
@@ -23287,7 +23287,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=509
          OR ((a BETWEEN 22 AND 24) AND a!=23)
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR b=718
          OR a=4
          OR ((a BETWEEN 56 AND 58) AND a!=57)
@@ -23307,7 +23307,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=509
          OR ((a BETWEEN 22 AND 24) AND a!=23)
-         OR (g='vutsrqp' AND f GLOB 'nopqr*')
+         OR (g='vutsrqp' AND f LIKE 'nopqr%')
          OR b=718
          OR a=4
          OR ((a BETWEEN 56 AND 58) AND a!=57)
@@ -23325,7 +23325,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=1026
          OR a=93
          OR c=18018
@@ -23341,7 +23341,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=1026
          OR a=93
          OR c=18018
@@ -23422,11 +23422,11 @@ test:do_test(
       WHERE b=990
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR ((a BETWEEN 41 AND 43) AND a!=42)
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
          OR b=531
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR f='qrstuvwxy'
   ]])
     end, {
@@ -23443,11 +23443,11 @@ test:do_test(
       WHERE b=990
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR ((a BETWEEN 41 AND 43) AND a!=42)
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
          OR b=531
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR f='qrstuvwxy'
   ]])
     end, {
@@ -23462,9 +23462,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=60
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR b=627
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
          OR b=883
@@ -23484,9 +23484,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=60
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR b=627
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
          OR b=883
@@ -23572,13 +23572,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=28
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR b=69
          OR ((a BETWEEN 85 AND 87) AND a!=86)
          OR b=781
          OR a=64
          OR b=91
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR a=16
          OR b=278
          OR a=26
@@ -23595,13 +23595,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=28
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR b=69
          OR ((a BETWEEN 85 AND 87) AND a!=86)
          OR b=781
          OR a=64
          OR b=91
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR a=16
          OR b=278
          OR a=26
@@ -23710,7 +23710,7 @@ test:do_test(
       WHERE f='yzabcdefg'
          OR ((a BETWEEN 48 AND 50) AND a!=49)
          OR a=100
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
          OR a=62
          OR a=67
          OR b=605
@@ -23733,7 +23733,7 @@ test:do_test(
       WHERE f='yzabcdefg'
          OR ((a BETWEEN 48 AND 50) AND a!=49)
          OR a=100
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
          OR a=62
          OR a=67
          OR b=605
@@ -23787,9 +23787,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
+      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR b=751
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR a=67
          OR b=102
@@ -23805,9 +23805,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?stuv*' AND f GLOB 'rstu*')
+      WHERE (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR b=751
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR a=67
          OR b=102
@@ -23862,14 +23862,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=2002
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR ((a BETWEEN 41 AND 43) AND a!=42)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR b=33
          OR b=817
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -23884,14 +23884,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=2002
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR ((a BETWEEN 41 AND 43) AND a!=42)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR b=33
          OR b=817
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -23905,8 +23905,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='srqponm' AND f GLOB 'cdefg*')
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+      WHERE (g='srqponm' AND f LIKE 'cdefg%')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR a=80
          OR a=53
          OR a=62
@@ -23926,8 +23926,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='srqponm' AND f GLOB 'cdefg*')
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+      WHERE (g='srqponm' AND f LIKE 'cdefg%')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR a=80
          OR a=53
          OR a=62
@@ -23951,7 +23951,7 @@ test:do_test(
          OR b=652
          OR a=72
          OR b=209
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR a=38
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR d>1e10
@@ -23971,7 +23971,7 @@ test:do_test(
          OR b=652
          OR a=72
          OR b=209
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR a=38
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR d>1e10
@@ -24016,11 +24016,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=179
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR b=509
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR f='bcdefghij'
   ]])
     end, {
@@ -24035,11 +24035,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=179
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR b=509
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR (d>=49.0 AND d<50.0 AND d IS NOT NULL)
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR f='bcdefghij'
   ]])
     end, {
@@ -24149,13 +24149,13 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR b=421
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=704
          OR a=90
          OR a=78
          OR 1000000<b
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
   ]])
     end, {
@@ -24171,13 +24171,13 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR b=421
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=704
          OR a=90
          OR a=78
          OR 1000000<b
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
   ]])
     end, {
@@ -24191,7 +24191,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'pqrst*')
+      WHERE (g='fedcbaz' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 93 AND 95) AND a!=94)
   ]])
     end, {
@@ -24205,7 +24205,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'pqrst*')
+      WHERE (g='fedcbaz' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 93 AND 95) AND a!=94)
   ]])
     end, {
@@ -24226,7 +24226,7 @@ test:do_test(
          OR ((a BETWEEN 25 AND 27) AND a!=26)
          OR e IS NULL
          OR a=48
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.649.1>
@@ -24246,7 +24246,7 @@ test:do_test(
          OR ((a BETWEEN 25 AND 27) AND a!=26)
          OR e IS NULL
          OR a=48
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.649.2>
@@ -24292,7 +24292,7 @@ test:do_test(
       WHERE b=275
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
          OR f='ijklmnopq'
   ]])
@@ -24310,7 +24310,7 @@ test:do_test(
       WHERE b=275
          OR ((a BETWEEN 57 AND 59) AND a!=58)
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
          OR f='ijklmnopq'
   ]])
@@ -24360,7 +24360,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='zabcdefgh'
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR a=54
          OR b=770
          OR ((a BETWEEN 96 AND 98) AND a!=97)
@@ -24380,7 +24380,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='zabcdefgh'
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR a=54
          OR b=770
          OR ((a BETWEEN 96 AND 98) AND a!=97)
@@ -24446,7 +24446,7 @@ test:do_test(
       WHERE b=223
          OR a=14
          OR ((a BETWEEN 74 AND 76) AND a!=75)
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR b=539
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
@@ -24467,7 +24467,7 @@ test:do_test(
       WHERE b=223
          OR a=14
          OR ((a BETWEEN 74 AND 76) AND a!=75)
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR b=539
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
@@ -24486,7 +24486,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=99
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR a=73
          OR a=56
          OR b=253
@@ -24504,7 +24504,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=99
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR a=73
          OR a=56
          OR b=253
@@ -24524,8 +24524,8 @@ test:do_test(
       WHERE b=927
          OR b=300
          OR b=223
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=154
          OR b=759
   ]])
@@ -24543,8 +24543,8 @@ test:do_test(
       WHERE b=927
          OR b=300
          OR b=223
-         OR (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=154
          OR b=759
   ]])
@@ -24562,7 +24562,7 @@ test:do_test(
       WHERE b=242
          OR b=905
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
          OR a=24
          OR ((a BETWEEN 67 AND 69) AND a!=68)
@@ -24584,7 +24584,7 @@ test:do_test(
       WHERE b=242
          OR b=905
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'ijklm*')
+         OR (g='hgfedcb' AND f LIKE 'ijklm%')
          OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
          OR a=24
          OR ((a BETWEEN 67 AND 69) AND a!=68)
@@ -24606,10 +24606,10 @@ test:do_test(
       WHERE b=190
          OR a=72
          OR b=377
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
          OR b=476
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.659.1>
@@ -24625,10 +24625,10 @@ test:do_test(
       WHERE b=190
          OR a=72
          OR b=377
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
          OR b=476
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.659.2>
@@ -24644,12 +24644,12 @@ test:do_test(
       WHERE b=245
          OR b=638
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR f='opqrstuvw'
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
          OR b=817
          OR a=85
-         OR (g='lkjihgf' AND f GLOB 'mnopq*')
+         OR (g='lkjihgf' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.660.1>
@@ -24665,12 +24665,12 @@ test:do_test(
       WHERE b=245
          OR b=638
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR f='opqrstuvw'
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
          OR b=817
          OR a=85
-         OR (g='lkjihgf' AND f GLOB 'mnopq*')
+         OR (g='lkjihgf' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.660.2>
@@ -24749,9 +24749,9 @@ test:do_test(
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
          OR c<=10
          OR ((a BETWEEN 75 AND 77) AND a!=76)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=553
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR b=1045
   ]])
     end, {
@@ -24769,9 +24769,9 @@ test:do_test(
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
          OR c<=10
          OR ((a BETWEEN 75 AND 77) AND a!=76)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=553
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR b=1045
   ]])
     end, {
@@ -24788,12 +24788,12 @@ test:do_test(
       WHERE b=440
          OR ((a BETWEEN 3 AND 5) AND a!=4)
          OR ((a BETWEEN 44 AND 46) AND a!=45)
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR a=89
          OR c=18018
          OR b=154
          OR b=506
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR a=78
          OR b=751
   ]])
@@ -24811,12 +24811,12 @@ test:do_test(
       WHERE b=440
          OR ((a BETWEEN 3 AND 5) AND a!=4)
          OR ((a BETWEEN 44 AND 46) AND a!=45)
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR a=89
          OR c=18018
          OR b=154
          OR b=506
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR a=78
          OR b=751
   ]])
@@ -24832,13 +24832,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=407
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR b=209
          OR b=814
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR a=44
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
          OR b=1092
   ]])
@@ -24854,13 +24854,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=407
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR b=209
          OR b=814
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR a=44
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
          OR b=1092
   ]])
@@ -25002,10 +25002,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=27
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR b=121
          OR ((a BETWEEN 7 AND 9) AND a!=8)
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=67
          OR ((a BETWEEN 30 AND 32) AND a!=31)
          OR c=1001
@@ -25024,10 +25024,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=27
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR b=121
          OR ((a BETWEEN 7 AND 9) AND a!=8)
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=67
          OR ((a BETWEEN 30 AND 32) AND a!=31)
          OR c=1001
@@ -25046,7 +25046,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=99
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
@@ -25063,7 +25063,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=99
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=98.0 AND d<99.0 AND d IS NOT NULL)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
@@ -25083,9 +25083,9 @@ test:do_test(
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
          OR b=355
          OR b=814
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR a=81
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=542
          OR b=795
   ]])
@@ -25104,9 +25104,9 @@ test:do_test(
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
          OR b=355
          OR b=814
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR a=81
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=542
          OR b=795
   ]])
@@ -25124,10 +25124,10 @@ test:do_test(
       WHERE (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR b=363
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR b=619
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR a=73
   ]])
     end, {
@@ -25144,10 +25144,10 @@ test:do_test(
       WHERE (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR b=363
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR ((a BETWEEN 64 AND 66) AND a!=65)
          OR b=619
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
          OR a=73
   ]])
     end, {
@@ -25163,9 +25163,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=935
          OR a=42
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR b=330
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.673.1>
@@ -25180,9 +25180,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=935
          OR a=42
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR b=330
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.673.2>
@@ -25201,7 +25201,7 @@ test:do_test(
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
          OR a=64
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR a=89
   ]])
     end, {
@@ -25221,7 +25221,7 @@ test:do_test(
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
          OR a=64
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR a=89
   ]])
     end, {
@@ -25240,9 +25240,9 @@ test:do_test(
          OR b=663
          OR c=17017
          OR b=561
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=495
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR b=352
          OR ((a BETWEEN 39 AND 41) AND a!=40)
   ]])
@@ -25262,9 +25262,9 @@ test:do_test(
          OR b=663
          OR c=17017
          OR b=561
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR b=495
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR b=352
          OR ((a BETWEEN 39 AND 41) AND a!=40)
   ]])
@@ -25280,7 +25280,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=100.0 AND d<101.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR f='klmnopqrs'
          OR f='lmnopqrst'
   ]])
@@ -25296,7 +25296,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=100.0 AND d<101.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
          OR f='klmnopqrs'
          OR f='lmnopqrst'
   ]])
@@ -25342,16 +25342,16 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=36
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 18 AND 20) AND a!=19)
          OR b=682
          OR ((a BETWEEN 53 AND 55) AND a!=54)
          OR b=91
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR c=12012
          OR b=267
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.678.1>
@@ -25365,16 +25365,16 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=36
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 18 AND 20) AND a!=19)
          OR b=682
          OR ((a BETWEEN 53 AND 55) AND a!=54)
          OR b=91
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR c=12012
          OR b=267
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.678.2>
@@ -25390,12 +25390,12 @@ test:do_test(
       WHERE b=594
          OR f='hijklmnop'
          OR ((a BETWEEN 65 AND 67) AND a!=66)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR b=707
          OR b=363
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=157
-         OR (g='tsrqpon' AND f GLOB 'yzabc*')
+         OR (g='tsrqpon' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.679.1>
@@ -25411,12 +25411,12 @@ test:do_test(
       WHERE b=594
          OR f='hijklmnop'
          OR ((a BETWEEN 65 AND 67) AND a!=66)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR b=707
          OR b=363
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=157
-         OR (g='tsrqpon' AND f GLOB 'yzabc*')
+         OR (g='tsrqpon' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.679.2>
@@ -25473,7 +25473,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'defgh*')
+      WHERE (g='nmlkjih' AND f LIKE 'defgh%')
          OR b=674
          OR ((a BETWEEN 38 AND 40) AND a!=39)
          OR c=3003
@@ -25492,7 +25492,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'defgh*')
+      WHERE (g='nmlkjih' AND f LIKE 'defgh%')
          OR b=674
          OR ((a BETWEEN 38 AND 40) AND a!=39)
          OR c=3003
@@ -25554,7 +25554,7 @@ test:do_test(
          OR b=707
          OR f='vwxyzabcd'
          OR b=286
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=693
          OR ((a BETWEEN 6 AND 8) AND a!=7)
   ]])
@@ -25576,7 +25576,7 @@ test:do_test(
          OR b=707
          OR f='vwxyzabcd'
          OR b=286
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=693
          OR ((a BETWEEN 6 AND 8) AND a!=7)
   ]])
@@ -25596,8 +25596,8 @@ test:do_test(
          OR a=52
          OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
          OR d<0.0
-         OR (g='rqponml' AND f GLOB 'jklmn*')
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR b=168
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR f='uvwxyzabc'
@@ -25619,8 +25619,8 @@ test:do_test(
          OR a=52
          OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
          OR d<0.0
-         OR (g='rqponml' AND f GLOB 'jklmn*')
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR b=168
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR f='uvwxyzabc'
@@ -25638,12 +25638,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 4 AND 6) AND a!=5)
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR f='rstuvwxyz'
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=14
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
   ]])
@@ -25659,12 +25659,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 4 AND 6) AND a!=5)
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR f='rstuvwxyz'
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR a=14
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
   ]])
@@ -25681,9 +25681,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 13 AND 15) AND a!=14)
          OR ((a BETWEEN 93 AND 95) AND a!=94)
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR f='mnopqrstu'
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR a=38
          OR c=26026
@@ -25701,9 +25701,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 13 AND 15) AND a!=14)
          OR ((a BETWEEN 93 AND 95) AND a!=94)
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR f='mnopqrstu'
-         OR (g='fedcbaz' AND f GLOB 'tuvwx*')
+         OR (g='fedcbaz' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR a=38
          OR c=26026
@@ -25719,11 +25719,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ponmlkj' AND f GLOB 'stuvw*')
+      WHERE (g='ponmlkj' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR a=7
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
   ]])
     end, {
@@ -25737,11 +25737,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ponmlkj' AND f GLOB 'stuvw*')
+      WHERE (g='ponmlkj' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 71 AND 73) AND a!=72)
          OR a=7
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
   ]])
     end, {
@@ -25759,8 +25759,8 @@ test:do_test(
          OR b=938
          OR b=484
          OR b=652
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR f='opqrstuvw'
   ]])
     end, {
@@ -25778,8 +25778,8 @@ test:do_test(
          OR b=938
          OR b=484
          OR b=652
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR f='opqrstuvw'
   ]])
     end, {
@@ -25835,12 +25835,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=25
          OR ((a BETWEEN 43 AND 45) AND a!=44)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR b=443
          OR b=564
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=531
          OR b=1081
          OR a=96
@@ -25858,12 +25858,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=25
          OR ((a BETWEEN 43 AND 45) AND a!=44)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
          OR b=443
          OR b=564
-         OR (g='kjihgfe' AND f GLOB 'rstuv*')
+         OR (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=531
          OR b=1081
          OR a=96
@@ -25880,7 +25880,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=36
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.691.1>
@@ -25894,7 +25894,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=36
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.691.2>
@@ -25907,7 +25907,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'stuvw*')
+      WHERE (g='kjihgfe' AND f LIKE 'stuvw%')
          OR b=531
          OR ((a BETWEEN 93 AND 95) AND a!=94)
          OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
@@ -25923,7 +25923,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'stuvw*')
+      WHERE (g='kjihgfe' AND f LIKE 'stuvw%')
          OR b=531
          OR ((a BETWEEN 93 AND 95) AND a!=94)
          OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
@@ -25975,8 +25975,8 @@ test:do_test(
          OR b=718
          OR a=18
          OR a=3
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR c=28028
   ]])
     end, {
@@ -25998,8 +25998,8 @@ test:do_test(
          OR b=718
          OR a=18
          OR a=3
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR c=28028
   ]])
     end, {
@@ -26062,7 +26062,7 @@ test:do_test(
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
          OR ((a BETWEEN 30 AND 32) AND a!=31)
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -26081,7 +26081,7 @@ test:do_test(
          OR (d>=19.0 AND d<20.0 AND d IS NOT NULL)
          OR ((a BETWEEN 30 AND 32) AND a!=31)
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -26095,7 +26095,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='mlkjihg' AND f GLOB 'ijklm*')
+      WHERE (g='mlkjihg' AND f LIKE 'ijklm%')
          OR b=883
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR b=938
@@ -26115,7 +26115,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='mlkjihg' AND f GLOB 'ijklm*')
+      WHERE (g='mlkjihg' AND f LIKE 'ijklm%')
          OR b=883
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR b=938
@@ -26167,7 +26167,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'abcde*')
+      WHERE (g='tsrqpon' AND f LIKE 'abcde%')
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR ((a BETWEEN 74 AND 76) AND a!=75)
@@ -26185,7 +26185,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'abcde*')
+      WHERE (g='tsrqpon' AND f LIKE 'abcde%')
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR ((a BETWEEN 74 AND 76) AND a!=75)
@@ -26271,12 +26271,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?abcd*' AND f GLOB 'zabc*')
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
-         OR (g='srqponm' AND f GLOB 'cdefg*')
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+      WHERE (f LIKE '_abcd%' AND f LIKE 'zabc%')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR f='lmnopqrst'
          OR ((a BETWEEN 11 AND 13) AND a!=12)
          OR b=872
@@ -26294,12 +26294,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?abcd*' AND f GLOB 'zabc*')
-         OR (g='srqponm' AND f GLOB 'efghi*')
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
-         OR (g='srqponm' AND f GLOB 'cdefg*')
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+      WHERE (f LIKE '_abcd%' AND f LIKE 'zabc%')
+         OR (g='srqponm' AND f LIKE 'efghi%')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR f='lmnopqrst'
          OR ((a BETWEEN 11 AND 13) AND a!=12)
          OR b=872
@@ -26319,14 +26319,14 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 71 AND 73) AND a!=72)
          OR a=20
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR b=1004
          OR b=77
          OR b=927
          OR a=99
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
   ]])
     end, {
         -- <where7-2.703.1>
@@ -26341,14 +26341,14 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 71 AND 73) AND a!=72)
          OR a=20
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR b=1004
          OR b=77
          OR b=927
          OR a=99
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
   ]])
     end, {
         -- <where7-2.703.2>
@@ -26394,7 +26394,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=572
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.705.1>
@@ -26408,7 +26408,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=572
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.705.2>
@@ -26424,8 +26424,8 @@ test:do_test(
       WHERE (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR ((a BETWEEN 54 AND 56) AND a!=55)
          OR f='lmnopqrst'
-         OR (f GLOB '?lmno*' AND f GLOB 'klmn*')
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (f LIKE '_lmno%' AND f LIKE 'klmn%')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR a=23
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
   ]])
@@ -26443,8 +26443,8 @@ test:do_test(
       WHERE (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR ((a BETWEEN 54 AND 56) AND a!=55)
          OR f='lmnopqrst'
-         OR (f GLOB '?lmno*' AND f GLOB 'klmn*')
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (f LIKE '_lmno%' AND f LIKE 'klmn%')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR a=23
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
   ]])
@@ -26463,13 +26463,13 @@ test:do_test(
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR b=605
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
          OR b=759
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR ((a BETWEEN 38 AND 40) AND a!=39)
          OR a=40
          OR f='ghijklmno'
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.707.1>
@@ -26486,13 +26486,13 @@ test:do_test(
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR b=605
          OR (d>=46.0 AND d<47.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
          OR b=759
-         OR (f GLOB '?zabc*' AND f GLOB 'yzab*')
+         OR (f LIKE '_zabc%' AND f LIKE 'yzab%')
          OR ((a BETWEEN 38 AND 40) AND a!=39)
          OR a=40
          OR f='ghijklmno'
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.707.2>
@@ -26601,7 +26601,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'efghi*')
+      WHERE (g='nmlkjih' AND f LIKE 'efghi%')
          OR a=34
          OR ((a BETWEEN 6 AND 8) AND a!=7)
          OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
@@ -26619,7 +26619,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'efghi*')
+      WHERE (g='nmlkjih' AND f LIKE 'efghi%')
          OR a=34
          OR ((a BETWEEN 6 AND 8) AND a!=7)
          OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
@@ -26637,16 +26637,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
          OR a=52
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR f='ghijklmno'
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=319
          OR a=34
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR f='hijklmnop'
   ]])
     end, {
@@ -26660,16 +26660,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
          OR a=52
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=24.0 AND d<25.0 AND d IS NOT NULL)
          OR f='ghijklmno'
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=319
          OR a=34
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR f='hijklmnop'
   ]])
     end, {
@@ -26683,7 +26683,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
          OR a=47
@@ -26699,7 +26699,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'pqrst*')
+      WHERE (g='qponmlk' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
          OR a=47
@@ -26781,11 +26781,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE c=31031
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=256
          OR ((a BETWEEN 77 AND 79) AND a!=78)
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=715
          OR b=212
          OR b=99
@@ -26804,11 +26804,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE c=31031
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 66 AND 68) AND a!=67)
          OR b=256
          OR ((a BETWEEN 77 AND 79) AND a!=78)
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=715
          OR b=212
          OR b=99
@@ -26899,7 +26899,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 62 AND 64) AND a!=63)
   ]])
     end, {
@@ -26913,7 +26913,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR ((a BETWEEN 62 AND 64) AND a!=63)
   ]])
     end, {
@@ -26929,11 +26929,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 43 AND 45) AND a!=44)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR a=43
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
          OR b=729
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.720.1>
@@ -26948,11 +26948,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 43 AND 45) AND a!=44)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR a=43
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
          OR b=729
-         OR (g='vutsrqp' AND f GLOB 'opqrs*')
+         OR (g='vutsrqp' AND f LIKE 'opqrs%')
   ]])
     end, {
         -- <where7-2.720.2>
@@ -26972,7 +26972,7 @@ test:do_test(
          OR c=8008
          OR f='opqrstuvw'
          OR ((a BETWEEN 23 AND 25) AND a!=24)
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.721.1>
@@ -26992,7 +26992,7 @@ test:do_test(
          OR c=8008
          OR f='opqrstuvw'
          OR ((a BETWEEN 23 AND 25) AND a!=24)
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.721.2>
@@ -27008,9 +27008,9 @@ test:do_test(
       WHERE ((a BETWEEN 40 AND 42) AND a!=41)
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
          OR c<=10
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR a=35
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=1089
          OR a=73
          OR b=737
@@ -27031,9 +27031,9 @@ test:do_test(
       WHERE ((a BETWEEN 40 AND 42) AND a!=41)
          OR (d>=62.0 AND d<63.0 AND d IS NOT NULL)
          OR c<=10
-         OR (g='srqponm' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR a=35
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=1089
          OR a=73
          OR b=737
@@ -27053,7 +27053,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 0 AND 2) AND a!=1)
          OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=762
          OR ((a BETWEEN 39 AND 41) AND a!=40)
          OR a=80
@@ -27071,7 +27071,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 0 AND 2) AND a!=1)
          OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=762
          OR ((a BETWEEN 39 AND 41) AND a!=40)
          OR a=80
@@ -27092,10 +27092,10 @@ test:do_test(
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR b=979
          OR a=36
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR a=55
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.724.1>
@@ -27113,10 +27113,10 @@ test:do_test(
          OR ((a BETWEEN 80 AND 82) AND a!=81)
          OR b=979
          OR a=36
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
          OR a=55
-         OR (g='fedcbaz' AND f GLOB 'rstuv*')
+         OR (g='fedcbaz' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.724.2>
@@ -27131,8 +27131,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=75
          OR a=61
-         OR (g='onmlkji' AND f GLOB 'abcde*')
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.725.1>
@@ -27147,8 +27147,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=75
          OR a=61
-         OR (g='onmlkji' AND f GLOB 'abcde*')
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.725.2>
@@ -27162,7 +27162,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1004
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
          OR a=56
   ]])
@@ -27178,7 +27178,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1004
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
          OR a=56
   ]])
@@ -27194,13 +27194,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=93
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR a=83
          OR b=828
          OR b=454
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR b=924
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
          OR a=50
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
   ]])
@@ -27216,13 +27216,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=93
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR a=83
          OR b=828
          OR b=454
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR b=924
-         OR (g='lkjihgf' AND f GLOB 'opqrs*')
+         OR (g='lkjihgf' AND f LIKE 'opqrs%')
          OR a=50
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
   ]])
@@ -27269,7 +27269,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=55
          OR a=65
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
   ]])
     end, {
         -- <where7-2.729.1>
@@ -27284,7 +27284,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=55
          OR a=65
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
   ]])
     end, {
         -- <where7-2.729.2>
@@ -27300,7 +27300,7 @@ test:do_test(
       WHERE ((a BETWEEN 72 AND 74) AND a!=73)
          OR b=605
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 72 AND 74) AND a!=73)
          OR f='ijklmnopq'
          OR ((a BETWEEN 86 AND 88) AND a!=87)
@@ -27322,7 +27322,7 @@ test:do_test(
       WHERE ((a BETWEEN 72 AND 74) AND a!=73)
          OR b=605
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 72 AND 74) AND a!=73)
          OR f='ijklmnopq'
          OR ((a BETWEEN 86 AND 88) AND a!=87)
@@ -27342,7 +27342,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=476
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR b=982
          OR a=43
          OR b=355
@@ -27359,7 +27359,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=476
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR b=982
          OR a=43
          OR b=355
@@ -27377,8 +27377,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=85
          OR b=718
-         OR (g='fedcbaz' AND f GLOB 'pqrst*')
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (g='fedcbaz' AND f LIKE 'pqrst%')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -27394,8 +27394,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=85
          OR b=718
-         OR (g='fedcbaz' AND f GLOB 'pqrst*')
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (g='fedcbaz' AND f LIKE 'pqrst%')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -27515,12 +27515,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
+      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR b=465
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR a=37
          OR b=1056
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR (d>=4.0 AND d<5.0 AND d IS NOT NULL)
          OR b=1023
   ]])
@@ -27535,12 +27535,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?rstu*' AND f GLOB 'qrst*')
+      WHERE (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR b=465
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR a=37
          OR b=1056
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR (d>=4.0 AND d<5.0 AND d IS NOT NULL)
          OR b=1023
   ]])
@@ -27557,7 +27557,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=76
          OR a=8
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR b=495
          OR b=663
          OR a=98
@@ -27576,7 +27576,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=76
          OR a=8
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
          OR b=495
          OR b=663
          OR a=98
@@ -27595,7 +27595,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1081
          OR b=542
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR b=828
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
@@ -27615,7 +27615,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1081
          OR b=542
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR b=828
          OR (d>=67.0 AND d<68.0 AND d IS NOT NULL)
@@ -27745,9 +27745,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=880
          OR b=696
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR b=308
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 96 AND 98) AND a!=97)
   ]])
     end, {
@@ -27763,9 +27763,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=880
          OR b=696
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR b=308
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 96 AND 98) AND a!=97)
   ]])
     end, {
@@ -27779,7 +27779,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR a=24
          OR f IS NULL
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
@@ -27798,7 +27798,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR a=24
          OR f IS NULL
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
@@ -27819,7 +27819,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=94
          OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR b=792
          OR a=77
          OR a=26
@@ -27839,7 +27839,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=94
          OR (d>=74.0 AND d<75.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR b=792
          OR a=77
          OR a=26
@@ -27935,11 +27935,11 @@ test:do_test(
          OR c=19019
          OR a=42
          OR b=938
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR ((a BETWEEN 22 AND 24) AND a!=23)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.747.1>
@@ -27958,11 +27958,11 @@ test:do_test(
          OR c=19019
          OR a=42
          OR b=938
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
          OR ((a BETWEEN 22 AND 24) AND a!=23)
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
   ]])
     end, {
         -- <where7-2.747.2>
@@ -27977,7 +27977,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=179
          OR a=50
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.748.1>
@@ -27992,7 +27992,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=179
          OR a=50
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
   ]])
     end, {
         -- <where7-2.748.2>
@@ -28005,12 +28005,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='vutsrqp' AND f GLOB 'rstuv*')
+      WHERE (g='vutsrqp' AND f LIKE 'rstuv%')
          OR f='xyzabcdef'
          OR ((a BETWEEN 49 AND 51) AND a!=50)
          OR b=575
          OR b=385
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR a=46
          OR b=220
@@ -28027,12 +28027,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='vutsrqp' AND f GLOB 'rstuv*')
+      WHERE (g='vutsrqp' AND f LIKE 'rstuv%')
          OR f='xyzabcdef'
          OR ((a BETWEEN 49 AND 51) AND a!=50)
          OR b=575
          OR b=385
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 63 AND 65) AND a!=64)
          OR a=46
          OR b=220
@@ -28055,7 +28055,7 @@ test:do_test(
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
          OR c=31031
          OR b=869
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=245
          OR a=92
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
@@ -28078,7 +28078,7 @@ test:do_test(
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
          OR c=31031
          OR b=869
-         OR (g='jihgfed' AND f GLOB 'zabcd*')
+         OR (g='jihgfed' AND f LIKE 'zabcd%')
          OR b=245
          OR a=92
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
@@ -28099,8 +28099,8 @@ test:do_test(
          OR c=28028
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR ((a BETWEEN 17 AND 19) AND a!=18)
          OR c=9009
          OR a=17
@@ -28121,8 +28121,8 @@ test:do_test(
          OR c=28028
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
-         OR (g='mlkjihg' AND f GLOB 'jklmn*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
+         OR (g='mlkjihg' AND f LIKE 'jklmn%')
          OR ((a BETWEEN 17 AND 19) AND a!=18)
          OR c=9009
          OR a=17
@@ -28141,7 +28141,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=57.0 AND d<58.0 AND d IS NOT NULL)
          OR b=762
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR f='tuvwxyzab'
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
@@ -28161,7 +28161,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=57.0 AND d<58.0 AND d IS NOT NULL)
          OR b=762
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR f='tuvwxyzab'
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
@@ -28219,7 +28219,7 @@ test:do_test(
          OR a=14
          OR c=16016
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR f='jklmnopqr'
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
          OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
@@ -28240,7 +28240,7 @@ test:do_test(
          OR a=14
          OR c=16016
          OR (d>=21.0 AND d<22.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR f='jklmnopqr'
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
          OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
@@ -28258,12 +28258,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=949
-         OR (g='srqponm' AND f GLOB 'cdefg*')
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR c<=10
          OR a=14
          OR b=608
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
          OR b=121
          OR b=333
@@ -28281,12 +28281,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=949
-         OR (g='srqponm' AND f GLOB 'cdefg*')
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
          OR c<=10
          OR a=14
          OR b=608
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
          OR b=121
          OR b=333
@@ -28303,7 +28303,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=355
          OR b=627
          OR b=1001
@@ -28321,7 +28321,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'rstuv*')
+      WHERE (g='kjihgfe' AND f LIKE 'rstuv%')
          OR b=355
          OR b=627
          OR b=1001
@@ -28339,7 +28339,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
+      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
          OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -28353,7 +28353,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'efghi*')
+      WHERE (g='xwvutsr' AND f LIKE 'efghi%')
          OR (d>=79.0 AND d<80.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -28370,11 +28370,11 @@ test:do_test(
       WHERE b=685
          OR a=14
          OR b=990
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR f='efghijklm'
          OR c=1001
          OR b=784
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -28391,11 +28391,11 @@ test:do_test(
       WHERE b=685
          OR a=14
          OR b=990
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR f='efghijklm'
          OR c=1001
          OR b=784
-         OR (g='srqponm' AND f GLOB 'ghijk*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -28410,7 +28410,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=54
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR c=26026
          OR ((a BETWEEN 97 AND 99) AND a!=98)
   ]])
@@ -28426,7 +28426,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=54
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR c=26026
          OR ((a BETWEEN 97 AND 99) AND a!=98)
   ]])
@@ -28441,13 +28441,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'ghijk*')
+      WHERE (g='hgfedcb' AND f LIKE 'ghijk%')
          OR c=24024
          OR a=98
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR a=5
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR f='pqrstuvwx'
          OR f='bcdefghij'
          OR b=1001
@@ -28464,13 +28464,13 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'ghijk*')
+      WHERE (g='hgfedcb' AND f LIKE 'ghijk%')
          OR c=24024
          OR a=98
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR a=5
          OR ((a BETWEEN 31 AND 33) AND a!=32)
-         OR (g='rqponml' AND f GLOB 'klmno*')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR f='pqrstuvwx'
          OR f='bcdefghij'
          OR b=1001
@@ -28488,11 +28488,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=781
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR f='lmnopqrst'
          OR a=39
          OR a=100
@@ -28510,11 +28510,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=781
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR f='lmnopqrst'
          OR a=39
          OR a=100
@@ -28533,11 +28533,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE c=4004
          OR b=718
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR a=50
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
          OR b=363
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
          OR b=1023
   ]])
     end, {
@@ -28553,11 +28553,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE c=4004
          OR b=718
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR a=50
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
          OR b=363
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
          OR b=1023
   ]])
     end, {
@@ -28576,8 +28576,8 @@ test:do_test(
          OR b=473
          OR ((a BETWEEN 43 AND 45) AND a!=44)
          OR b=586
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
   ]])
     end, {
         -- <where7-2.763.1>
@@ -28595,8 +28595,8 @@ test:do_test(
          OR b=473
          OR ((a BETWEEN 43 AND 45) AND a!=44)
          OR b=586
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
-         OR (f GLOB '?vwxy*' AND f GLOB 'uvwx*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
+         OR (f LIKE '_vwxy%' AND f LIKE 'uvwx%')
   ]])
     end, {
         -- <where7-2.763.2>
@@ -28609,7 +28609,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+      WHERE (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
          OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
   ]])
@@ -28624,7 +28624,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+      WHERE (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
          OR (d>=13.0 AND d<14.0 AND d IS NOT NULL)
   ]])
@@ -28639,11 +28639,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR ((a BETWEEN 76 AND 78) AND a!=77)
          OR a=47
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
          OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
          OR f='lmnopqrst'
   ]])
@@ -28658,11 +28658,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR ((a BETWEEN 76 AND 78) AND a!=77)
          OR a=47
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
-         OR (g='lkjihgf' AND f GLOB 'lmnop*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
+         OR (g='lkjihgf' AND f LIKE 'lmnop%')
          OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
          OR f='lmnopqrst'
   ]])
@@ -28680,7 +28680,7 @@ test:do_test(
       WHERE c>=34035
          OR a=29
          OR ((a BETWEEN 19 AND 21) AND a!=20)
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR f='abcdefghi'
          OR b=993
          OR ((a BETWEEN 52 AND 54) AND a!=53)
@@ -28700,7 +28700,7 @@ test:do_test(
       WHERE c>=34035
          OR a=29
          OR ((a BETWEEN 19 AND 21) AND a!=20)
-         OR (f GLOB '?wxyz*' AND f GLOB 'vwxy*')
+         OR (f LIKE '_wxyz%' AND f LIKE 'vwxy%')
          OR f='abcdefghi'
          OR b=993
          OR ((a BETWEEN 52 AND 54) AND a!=53)
@@ -28878,7 +28878,7 @@ test:do_test(
       WHERE ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=1045
          OR c=27027
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
   ]])
     end, {
         -- <where7-2.771.1>
@@ -28894,7 +28894,7 @@ test:do_test(
       WHERE ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=1045
          OR c=27027
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
   ]])
     end, {
         -- <where7-2.771.2>
@@ -28910,7 +28910,7 @@ test:do_test(
       WHERE a=87
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR b=487
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.772.1>
@@ -28926,7 +28926,7 @@ test:do_test(
       WHERE a=87
          OR (d>=47.0 AND d<48.0 AND d IS NOT NULL)
          OR b=487
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
   ]])
     end, {
         -- <where7-2.772.2>
@@ -29018,10 +29018,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=220
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=363
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR ((a BETWEEN 10 AND 12) AND a!=11)
   ]])
@@ -29037,10 +29037,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=220
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=363
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'defgh*')
+         OR (g='nmlkjih' AND f LIKE 'defgh%')
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR ((a BETWEEN 10 AND 12) AND a!=11)
   ]])
@@ -29096,8 +29096,8 @@ test:do_test(
       WHERE b=1059
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR b=960
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=894
          OR c=2002
   ]])
@@ -29115,8 +29115,8 @@ test:do_test(
       WHERE b=1059
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR b=960
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR b=894
          OR c=2002
   ]])
@@ -29132,7 +29132,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=14
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.778.1>
@@ -29146,7 +29146,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=14
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.778.2>
@@ -29160,7 +29160,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=806
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR b=795
          OR ((a BETWEEN 99 AND 101) AND a!=100)
          OR ((a BETWEEN 21 AND 23) AND a!=22)
@@ -29180,7 +29180,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=806
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
          OR b=795
          OR ((a BETWEEN 99 AND 101) AND a!=100)
          OR ((a BETWEEN 21 AND 23) AND a!=22)
@@ -29200,7 +29200,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=726
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR f='abcdefghi'
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
@@ -29218,7 +29218,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=726
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR f='abcdefghi'
          OR (d>=92.0 AND d<93.0 AND d IS NOT NULL)
@@ -29238,7 +29238,7 @@ test:do_test(
       WHERE a=59
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR b=1081
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.781.1>
@@ -29254,7 +29254,7 @@ test:do_test(
       WHERE a=59
          OR ((a BETWEEN 5 AND 7) AND a!=6)
          OR b=1081
-         OR (g='fedcbaz' AND f GLOB 'stuvw*')
+         OR (g='fedcbaz' AND f LIKE 'stuvw%')
   ]])
     end, {
         -- <where7-2.781.2>
@@ -29267,15 +29267,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'nopqr*')
+      WHERE (g='qponmlk' AND f LIKE 'nopqr%')
          OR b=1037
          OR b=132
          OR c=1001
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=32
   ]])
     end, {
@@ -29289,15 +29289,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'nopqr*')
+      WHERE (g='qponmlk' AND f LIKE 'nopqr%')
          OR b=1037
          OR b=132
          OR c=1001
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR (d>=58.0 AND d<59.0 AND d IS NOT NULL)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=32
   ]])
     end, {
@@ -29355,7 +29355,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
+      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=1001
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR a=83
@@ -29371,7 +29371,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
+      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=1001
          OR ((a BETWEEN 23 AND 25) AND a!=24)
          OR a=83
@@ -29389,13 +29389,13 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR b=36
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR ((a BETWEEN 46 AND 48) AND a!=47)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR ((a BETWEEN 26 AND 28) AND a!=27)
   ]])
@@ -29412,13 +29412,13 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR b=36
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR ((a BETWEEN 46 AND 48) AND a!=47)
          OR ((a BETWEEN 31 AND 33) AND a!=32)
          OR (d>=91.0 AND d<92.0 AND d IS NOT NULL)
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR ((a BETWEEN 26 AND 28) AND a!=27)
   ]])
@@ -29434,7 +29434,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=69
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR a=98
          OR b=300
@@ -29456,7 +29456,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=69
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR ((a BETWEEN 58 AND 60) AND a!=59)
          OR a=98
          OR b=300
@@ -29480,8 +29480,8 @@ test:do_test(
       WHERE ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
          OR ((a BETWEEN 94 AND 96) AND a!=95)
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR b=619
          OR c=6006
@@ -29503,8 +29503,8 @@ test:do_test(
       WHERE ((a BETWEEN 68 AND 70) AND a!=69)
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
          OR ((a BETWEEN 94 AND 96) AND a!=95)
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 22 AND 24) AND a!=23)
          OR b=619
          OR c=6006
@@ -29525,7 +29525,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 9 AND 11) AND a!=10)
          OR a=55
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.788.1>
@@ -29540,7 +29540,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 9 AND 11) AND a!=10)
          OR a=55
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.788.2>
@@ -29558,7 +29558,7 @@ test:do_test(
          OR b=201
          OR a=7
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR b=957
   ]])
     end, {
@@ -29577,7 +29577,7 @@ test:do_test(
          OR b=201
          OR a=7
          OR (d>=26.0 AND d<27.0 AND d IS NOT NULL)
-         OR (g='yxwvuts' AND f GLOB 'cdefg*')
+         OR (g='yxwvuts' AND f LIKE 'cdefg%')
          OR b=957
   ]])
     end, {
@@ -29593,10 +29593,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 90 AND 92) AND a!=91)
          OR a=74
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 95 AND 97) AND a!=96)
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR a=89
   ]])
     end, {
@@ -29612,10 +29612,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 90 AND 92) AND a!=91)
          OR a=74
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
          OR ((a BETWEEN 95 AND 97) AND a!=96)
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
-         OR (f GLOB '?tuvw*' AND f GLOB 'stuv*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
+         OR (f LIKE '_tuvw%' AND f LIKE 'stuv%')
          OR a=89
   ]])
     end, {
@@ -29636,7 +29636,7 @@ test:do_test(
          OR b=495
          OR b=564
          OR b=289
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.791.1>
@@ -29656,7 +29656,7 @@ test:do_test(
          OR b=495
          OR b=564
          OR b=289
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
   ]])
     end, {
         -- <where7-2.791.2>
@@ -29669,7 +29669,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
+      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
          OR a=69
          OR a=12
          OR b=718
@@ -29686,7 +29686,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
+      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
          OR a=69
          OR a=12
          OR b=718
@@ -29703,7 +29703,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR f='klmnopqrs'
          OR b=674
          OR a=96
@@ -29712,7 +29712,7 @@ test:do_test(
          OR b=707
          OR f='cdefghijk'
          OR a=91
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.793.1>
@@ -29725,7 +29725,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'zabcd*')
+      WHERE (g='tsrqpon' AND f LIKE 'zabcd%')
          OR f='klmnopqrs'
          OR b=674
          OR a=96
@@ -29734,7 +29734,7 @@ test:do_test(
          OR b=707
          OR f='cdefghijk'
          OR a=91
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.793.2>
@@ -29747,12 +29747,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
+      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR b=564
          OR b=784
          OR b=418
          OR b=275
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR a=58
          OR c=11011
          OR b=660
@@ -29768,12 +29768,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
+      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR b=564
          OR b=784
          OR b=418
          OR b=275
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
          OR a=58
          OR c=11011
          OR b=660
@@ -29794,7 +29794,7 @@ test:do_test(
          OR b=1004
          OR ((a BETWEEN 28 AND 30) AND a!=29)
          OR ((a BETWEEN 57 AND 59) AND a!=58)
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR f='pqrstuvwx'
   ]])
     end, {
@@ -29813,7 +29813,7 @@ test:do_test(
          OR b=1004
          OR ((a BETWEEN 28 AND 30) AND a!=29)
          OR ((a BETWEEN 57 AND 59) AND a!=58)
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR f='pqrstuvwx'
   ]])
     end, {
@@ -29886,7 +29886,7 @@ test:do_test(
       WHERE a=19
          OR a=29
          OR b=476
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR b=91
   ]])
     end, {
@@ -29903,7 +29903,7 @@ test:do_test(
       WHERE a=19
          OR a=29
          OR b=476
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR b=91
   ]])
     end, {
@@ -29954,8 +29954,8 @@ test:do_test(
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=44
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR b=707
          OR b=322
   ]])
@@ -29975,8 +29975,8 @@ test:do_test(
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR ((a BETWEEN 32 AND 34) AND a!=33)
          OR b=44
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR b=707
          OR b=322
   ]])
@@ -29991,8 +29991,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR f='jklmnopqr'
   ]])
@@ -30007,8 +30007,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?efgh*' AND f GLOB 'defg*')
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (f LIKE '_efgh%' AND f LIKE 'defg%')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR (d>=89.0 AND d<90.0 AND d IS NOT NULL)
          OR f='jklmnopqr'
   ]])
@@ -30024,14 +30024,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=946
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR a=47
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR b=80
          OR ((a BETWEEN 60 AND 62) AND a!=61)
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.802.1>
@@ -30045,14 +30045,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=946
-         OR (g='ihgfedc' AND f GLOB 'abcde*')
+         OR (g='ihgfedc' AND f LIKE 'abcde%')
          OR a=47
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR (d>=93.0 AND d<94.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
          OR b=80
          OR ((a BETWEEN 60 AND 62) AND a!=61)
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
   ]])
     end, {
         -- <where7-2.802.2>
@@ -30069,10 +30069,10 @@ test:do_test(
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR b=1015
          OR a=57
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR ((a BETWEEN 47 AND 49) AND a!=48)
          OR ((a BETWEEN 98 AND 100) AND a!=99)
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
          OR (d>=4.0 AND d<5.0 AND d IS NOT NULL)
          OR b=165
   ]])
@@ -30091,10 +30091,10 @@ test:do_test(
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
          OR b=1015
          OR a=57
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR ((a BETWEEN 47 AND 49) AND a!=48)
          OR ((a BETWEEN 98 AND 100) AND a!=99)
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
          OR (d>=4.0 AND d<5.0 AND d IS NOT NULL)
          OR b=165
   ]])
@@ -30113,7 +30113,7 @@ test:do_test(
          OR a=73
          OR b=1048
          OR c>=34035
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR a=72
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR b=638
@@ -30133,7 +30133,7 @@ test:do_test(
          OR a=73
          OR b=1048
          OR c>=34035
-         OR (g='ihgfedc' AND f GLOB 'cdefg*')
+         OR (g='ihgfedc' AND f LIKE 'cdefg%')
          OR a=72
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR b=638
@@ -30181,10 +30181,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=50
          OR ((a BETWEEN 61 AND 63) AND a!=62)
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR a=32
          OR ((a BETWEEN 93 AND 95) AND a!=94)
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR a=14
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR b=946
@@ -30204,10 +30204,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=50
          OR ((a BETWEEN 61 AND 63) AND a!=62)
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR a=32
          OR ((a BETWEEN 93 AND 95) AND a!=94)
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR a=14
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR b=946
@@ -30228,7 +30228,7 @@ test:do_test(
       WHERE ((a BETWEEN 88 AND 90) AND a!=89)
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.807.1>
@@ -30244,7 +30244,7 @@ test:do_test(
       WHERE ((a BETWEEN 88 AND 90) AND a!=89)
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.807.2>
@@ -30259,7 +30259,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=6
          OR f='tuvwxyzab'
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR b=286
          OR b=781
   ]])
@@ -30276,7 +30276,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=6
          OR f='tuvwxyzab'
-         OR (g='mlkjihg' AND f GLOB 'hijkl*')
+         OR (g='mlkjihg' AND f LIKE 'hijkl%')
          OR b=286
          OR b=781
   ]])
@@ -30291,12 +30291,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
          OR ((a BETWEEN 79 AND 81) AND a!=80)
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR f='vwxyzabcd'
          OR b=275
   ]])
@@ -30311,12 +30311,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
          OR ((a BETWEEN 79 AND 81) AND a!=80)
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR f='vwxyzabcd'
          OR b=275
   ]])
@@ -30332,10 +30332,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR a=59
   ]])
     end, {
@@ -30350,10 +30350,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
-         OR (g='xwvutsr' AND f GLOB 'efghi*')
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='xwvutsr' AND f LIKE 'efghi%')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR (d>=64.0 AND d<65.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'nopqr*')
+         OR (g='gfedcba' AND f LIKE 'nopqr%')
          OR a=59
   ]])
     end, {
@@ -30367,10 +30367,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+      WHERE (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR b=663
          OR f='ghijklmno'
          OR ((a BETWEEN 14 AND 16) AND a!=15)
@@ -30390,10 +30390,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+      WHERE (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR ((a BETWEEN 8 AND 10) AND a!=9)
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR b=663
          OR f='ghijklmno'
          OR ((a BETWEEN 14 AND 16) AND a!=15)
@@ -30420,9 +30420,9 @@ test:do_test(
          OR b=597
          OR ((a BETWEEN 92 AND 94) AND a!=93)
          OR (d>=88.0 AND d<89.0 AND d IS NOT NULL)
-         OR (f GLOB '?lmno*' AND f GLOB 'klmn*')
+         OR (f LIKE '_lmno%' AND f LIKE 'klmn%')
          OR b=168
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.812.1>
@@ -30442,9 +30442,9 @@ test:do_test(
          OR b=597
          OR ((a BETWEEN 92 AND 94) AND a!=93)
          OR (d>=88.0 AND d<89.0 AND d IS NOT NULL)
-         OR (f GLOB '?lmno*' AND f GLOB 'klmn*')
+         OR (f LIKE '_lmno%' AND f LIKE 'klmn%')
          OR b=168
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.812.2>
@@ -30498,7 +30498,7 @@ test:do_test(
          OR a=75
          OR b=179
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
          OR b=850
          OR a=62
@@ -30519,7 +30519,7 @@ test:do_test(
          OR a=75
          OR b=179
          OR (d>=43.0 AND d<44.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'stuvw*')
+         OR (g='utsrqpo' AND f LIKE 'stuvw%')
          OR (d>=65.0 AND d<66.0 AND d IS NOT NULL)
          OR b=850
          OR a=62
@@ -30583,7 +30583,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=176
          OR b=297
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR f='ijklmnopq'
   ]])
     end, {
@@ -30599,7 +30599,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=176
          OR b=297
-         OR (g='tsrqpon' AND f GLOB 'zabcd*')
+         OR (g='tsrqpon' AND f LIKE 'zabcd%')
          OR f='ijklmnopq'
   ]])
     end, {
@@ -30653,9 +30653,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR b=396
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=1012
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR b=784
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR b=979
@@ -30676,9 +30676,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR b=396
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR b=1012
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR b=784
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
          OR b=979
@@ -30726,9 +30726,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 79 AND 81) AND a!=80)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR ((a BETWEEN 23 AND 25) AND a!=24)
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
   ]])
     end, {
         -- <where7-2.820.1>
@@ -30742,9 +30742,9 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 79 AND 81) AND a!=80)
-         OR (f GLOB '?rstu*' AND f GLOB 'qrst*')
+         OR (f LIKE '_rstu%' AND f LIKE 'qrst%')
          OR ((a BETWEEN 23 AND 25) AND a!=24)
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
   ]])
     end, {
         -- <where7-2.820.2>
@@ -30830,7 +30830,7 @@ test:do_test(
          OR c=19019
          OR b=245
          OR ((a BETWEEN 97 AND 99) AND a!=98)
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR b=572
          OR ((a BETWEEN 22 AND 24) AND a!=23)
@@ -30853,7 +30853,7 @@ test:do_test(
          OR c=19019
          OR b=245
          OR ((a BETWEEN 97 AND 99) AND a!=98)
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR b=572
          OR ((a BETWEEN 22 AND 24) AND a!=23)
@@ -30915,7 +30915,7 @@ test:do_test(
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR b=828
          OR b=363
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.825.1>
@@ -30934,7 +30934,7 @@ test:do_test(
          OR (d>=40.0 AND d<41.0 AND d IS NOT NULL)
          OR b=828
          OR b=363
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
   ]])
     end, {
         -- <where7-2.825.2>
@@ -30947,7 +30947,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='gfedcba' AND f GLOB 'lmnop*')
+      WHERE (g='gfedcba' AND f LIKE 'lmnop%')
          OR a=41
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
          OR b=825
@@ -30963,7 +30963,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='gfedcba' AND f GLOB 'lmnop*')
+      WHERE (g='gfedcba' AND f LIKE 'lmnop%')
          OR a=41
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
          OR b=825
@@ -30986,7 +30986,7 @@ test:do_test(
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR b=561
          OR c=8008
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR b=935
          OR c=1001
   ]])
@@ -31008,7 +31008,7 @@ test:do_test(
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR b=561
          OR c=8008
-         OR (g='hgfedcb' AND f GLOB 'ghijk*')
+         OR (g='hgfedcb' AND f LIKE 'ghijk%')
          OR b=935
          OR c=1001
   ]])
@@ -31024,7 +31024,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 75 AND 77) AND a!=76)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.828.1>
@@ -31038,7 +31038,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 75 AND 77) AND a!=76)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.828.2>
@@ -31114,9 +31114,9 @@ test:do_test(
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR f='zabcdefgh'
          OR b=861
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR a=28
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=311
   ]])
     end, {
@@ -31137,9 +31137,9 @@ test:do_test(
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR f='zabcdefgh'
          OR b=861
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
          OR a=28
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=311
   ]])
     end, {
@@ -31154,10 +31154,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=575
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
          OR b=418
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR b=792
          OR b=861
          OR b=220
@@ -31175,10 +31175,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=575
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
          OR b=418
-         OR (f GLOB '?qrst*' AND f GLOB 'pqrs*')
+         OR (f LIKE '_qrst%' AND f LIKE 'pqrs%')
          OR b=792
          OR b=861
          OR b=220
@@ -31233,7 +31233,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'qrstu*')
+      WHERE (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=693
          OR a=73
          OR b=627
@@ -31243,7 +31243,7 @@ test:do_test(
          OR b=267
          OR b=872
          OR a=27
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.834.1>
@@ -31256,7 +31256,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'qrstu*')
+      WHERE (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=693
          OR a=73
          OR b=627
@@ -31266,7 +31266,7 @@ test:do_test(
          OR b=267
          OR b=872
          OR a=27
-         OR (g='gfedcba' AND f GLOB 'klmno*')
+         OR (g='gfedcba' AND f LIKE 'klmno%')
   ]])
     end, {
         -- <where7-2.834.2>
@@ -31351,15 +31351,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=66
          OR b=322
          OR b=465
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
          OR ((a BETWEEN 77 AND 79) AND a!=78)
-         OR (g='lkjihgf' AND f GLOB 'mnopq*')
+         OR (g='lkjihgf' AND f LIKE 'mnopq%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR b=454
   ]])
@@ -31374,15 +31374,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ponmlkj' AND f GLOB 'uvwxy*')
+      WHERE (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR b=66
          OR b=322
          OR b=465
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR (d>=7.0 AND d<8.0 AND d IS NOT NULL)
          OR ((a BETWEEN 77 AND 79) AND a!=78)
-         OR (g='lkjihgf' AND f GLOB 'mnopq*')
+         OR (g='lkjihgf' AND f LIKE 'mnopq%')
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR b=454
   ]])
@@ -31402,7 +31402,7 @@ test:do_test(
          OR c=15015
          OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
          OR ((a BETWEEN 3 AND 5) AND a!=4)
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR b=803
   ]])
     end, {
@@ -31421,7 +31421,7 @@ test:do_test(
          OR c=15015
          OR (d>=84.0 AND d<85.0 AND d IS NOT NULL)
          OR ((a BETWEEN 3 AND 5) AND a!=4)
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR b=803
   ]])
     end, {
@@ -31436,12 +31436,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1100
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 72 AND 74) AND a!=73)
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR a=75
          OR a=45
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR a=27
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR b=850
@@ -31459,12 +31459,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1100
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 72 AND 74) AND a!=73)
          OR ((a BETWEEN 68 AND 70) AND a!=69)
          OR a=75
          OR a=45
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR a=27
          OR (d>=77.0 AND d<78.0 AND d IS NOT NULL)
          OR b=850
@@ -31484,7 +31484,7 @@ test:do_test(
       WHERE b=751
          OR ((a BETWEEN 96 AND 98) AND a!=97)
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR a=89
          OR ((a BETWEEN 36 AND 38) AND a!=37)
@@ -31503,7 +31503,7 @@ test:do_test(
       WHERE b=751
          OR ((a BETWEEN 96 AND 98) AND a!=97)
          OR (d>=71.0 AND d<72.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR a=89
          OR ((a BETWEEN 36 AND 38) AND a!=37)
@@ -31519,10 +31519,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+      WHERE (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR a=1
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.841.1>
@@ -31535,10 +31535,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='wvutsrq' AND f GLOB 'jklmn*')
-         OR (g='yxwvuts' AND f GLOB 'bcdef*')
+      WHERE (g='wvutsrq' AND f LIKE 'jklmn%')
+         OR (g='yxwvuts' AND f LIKE 'bcdef%')
          OR a=1
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
   ]])
     end, {
         -- <where7-2.841.2>
@@ -31557,9 +31557,9 @@ test:do_test(
          OR c=8008
          OR ((a BETWEEN 41 AND 43) AND a!=42)
          OR b=960
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
          OR b=443
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.842.1>
@@ -31578,9 +31578,9 @@ test:do_test(
          OR c=8008
          OR ((a BETWEEN 41 AND 43) AND a!=42)
          OR b=960
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
          OR b=443
-         OR (g='rqponml' AND f GLOB 'ijklm*')
+         OR (g='rqponml' AND f LIKE 'ijklm%')
   ]])
     end, {
         -- <where7-2.842.2>
@@ -31624,14 +31624,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=685
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR b=520
          OR (d>=76.0 AND d<77.0 AND d IS NOT NULL)
          OR a=53
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR b=938
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR c=25025
   ]])
     end, {
@@ -31646,14 +31646,14 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=685
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR (d>=63.0 AND d<64.0 AND d IS NOT NULL)
          OR b=520
          OR (d>=76.0 AND d<77.0 AND d IS NOT NULL)
          OR a=53
          OR ((a BETWEEN 91 AND 93) AND a!=92)
          OR b=938
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR c=25025
   ]])
     end, {
@@ -31700,7 +31700,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='abcdefghi'
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.846.1>
@@ -31714,7 +31714,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='abcdefghi'
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.846.2>
@@ -31802,7 +31802,7 @@ test:do_test(
       WHERE b=209
          OR b=806
          OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.849.1>
@@ -31818,7 +31818,7 @@ test:do_test(
       WHERE b=209
          OR b=806
          OR (d>=8.0 AND d<9.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'rstuv*')
+         OR (g='vutsrqp' AND f LIKE 'rstuv%')
   ]])
     end, {
         -- <where7-2.849.2>
@@ -31863,10 +31863,10 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=4.0 AND d<5.0 AND d IS NOT NULL)
          OR a=45
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR a=69
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.851.1>
@@ -31881,10 +31881,10 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=4.0 AND d<5.0 AND d IS NOT NULL)
          OR a=45
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR a=69
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.851.2>
@@ -31899,9 +31899,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE c=9009
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.852.1>
@@ -31916,9 +31916,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE c=9009
          OR (d>=85.0 AND d<86.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR (d>=9.0 AND d<10.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'pqrst*')
+         OR (g='lkjihgf' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.852.2>
@@ -31937,7 +31937,7 @@ test:do_test(
          OR a=47
          OR c=24024
          OR a=27
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -31957,7 +31957,7 @@ test:do_test(
          OR a=47
          OR c=24024
          OR a=27
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -31971,9 +31971,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR a=19
   ]])
     end, {
@@ -31987,9 +31987,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+      WHERE (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR a=19
   ]])
     end, {
@@ -32006,7 +32006,7 @@ test:do_test(
       WHERE c=12012
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
          OR ((a BETWEEN 16 AND 18) AND a!=17)
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.855.1>
@@ -32022,7 +32022,7 @@ test:do_test(
       WHERE c=12012
          OR (d>=80.0 AND d<81.0 AND d IS NOT NULL)
          OR ((a BETWEEN 16 AND 18) AND a!=17)
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.855.2>
@@ -32036,7 +32036,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 38 AND 40) AND a!=39)
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR b=429
          OR f='jklmnopqr'
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
@@ -32054,7 +32054,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 38 AND 40) AND a!=39)
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR b=429
          OR f='jklmnopqr'
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
@@ -32071,7 +32071,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'mnopq*')
+      WHERE (g='lkjihgf' AND f LIKE 'mnopq%')
          OR b=190
   ]])
     end, {
@@ -32085,7 +32085,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'mnopq*')
+      WHERE (g='lkjihgf' AND f LIKE 'mnopq%')
          OR b=190
   ]])
     end, {
@@ -32099,7 +32099,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'yzabc*')
+      WHERE (g='jihgfed' AND f LIKE 'yzabc%')
          OR b=674
          OR b=289
   ]])
@@ -32114,7 +32114,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'yzabc*')
+      WHERE (g='jihgfed' AND f LIKE 'yzabc%')
          OR b=674
          OR b=289
   ]])
@@ -32131,8 +32131,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=17
          OR b=539
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.859.1>
@@ -32147,8 +32147,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=17
          OR b=539
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
-         OR (g='utsrqpo' AND f GLOB 'vwxyz*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
+         OR (g='utsrqpo' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.859.2>
@@ -32259,12 +32259,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE f='ghijklmno'
          OR a=26
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=81
          OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
          OR ((a BETWEEN 28 AND 30) AND a!=29)
          OR b=275
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR b=311
          OR b=894
          OR b=872
@@ -32282,12 +32282,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE f='ghijklmno'
          OR a=26
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR a=81
          OR (d>=3.0 AND d<4.0 AND d IS NOT NULL)
          OR ((a BETWEEN 28 AND 30) AND a!=29)
          OR b=275
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR b=311
          OR b=894
          OR b=872
@@ -32376,12 +32376,12 @@ test:do_test(
       WHERE a=44
          OR b=55
          OR a=30
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR 1000000<b
          OR a=24
          OR b=1089
          OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.866.1>
@@ -32397,12 +32397,12 @@ test:do_test(
       WHERE a=44
          OR b=55
          OR a=30
-         OR (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+         OR (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR 1000000<b
          OR a=24
          OR b=1089
          OR (d>=75.0 AND d<76.0 AND d IS NOT NULL)
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.866.2>
@@ -32487,14 +32487,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='edcbazy' AND f GLOB 'uvwxy*')
+      WHERE (g='edcbazy' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 25 AND 27) AND a!=26)
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR f='xyzabcdef'
          OR b=517
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.869.1>
@@ -32507,14 +32507,14 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='edcbazy' AND f GLOB 'uvwxy*')
+      WHERE (g='edcbazy' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 25 AND 27) AND a!=26)
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR ((a BETWEEN 89 AND 91) AND a!=90)
          OR f='xyzabcdef'
          OR b=517
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.869.2>
@@ -32555,9 +32555,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='tsrqpon' AND f GLOB 'yzabc*')
+      WHERE (g='tsrqpon' AND f LIKE 'yzabc%')
          OR b=762
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR a=25
          OR ((a BETWEEN 65 AND 67) AND a!=66)
   ]])
@@ -32572,9 +32572,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='tsrqpon' AND f GLOB 'yzabc*')
+      WHERE (g='tsrqpon' AND f LIKE 'yzabc%')
          OR b=762
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR a=25
          OR ((a BETWEEN 65 AND 67) AND a!=66)
   ]])
@@ -32594,9 +32594,9 @@ test:do_test(
          OR b=839
          OR f='defghijkl'
          OR (d>=95.0 AND d<96.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR b=498
   ]])
     end, {
@@ -32615,9 +32615,9 @@ test:do_test(
          OR b=839
          OR f='defghijkl'
          OR (d>=95.0 AND d<96.0 AND d IS NOT NULL)
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR (d>=52.0 AND d<53.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR b=498
   ]])
     end, {
@@ -32667,7 +32667,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
+      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=256
          OR b=586
          OR a=74
@@ -32686,7 +32686,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='mlkjihg' AND f GLOB 'jklmn*')
+      WHERE (g='mlkjihg' AND f LIKE 'jklmn%')
          OR b=256
          OR b=586
          OR a=74
@@ -32739,14 +32739,14 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=308
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR a=83
          OR c=23023
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR a=58
          OR ((a BETWEEN 17 AND 19) AND a!=18)
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR c=4004
   ]])
     end, {
@@ -32762,14 +32762,14 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=308
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
          OR a=83
          OR c=23023
          OR (d>=57.0 AND d<58.0 AND d IS NOT NULL)
-         OR (g='lkjihgf' AND f GLOB 'nopqr*')
+         OR (g='lkjihgf' AND f LIKE 'nopqr%')
          OR a=58
          OR ((a BETWEEN 17 AND 19) AND a!=18)
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR c=4004
   ]])
     end, {
@@ -32789,7 +32789,7 @@ test:do_test(
          OR b=762
          OR b=157
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.877.1>
@@ -32808,7 +32808,7 @@ test:do_test(
          OR b=762
          OR b=157
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
   ]])
     end, {
         -- <where7-2.877.2>
@@ -32825,12 +32825,12 @@ test:do_test(
          OR a=1
          OR ((a BETWEEN 93 AND 95) AND a!=94)
          OR b=278
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR f='qrstuvwxy'
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR ((a BETWEEN 82 AND 84) AND a!=83)
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -32848,12 +32848,12 @@ test:do_test(
          OR a=1
          OR ((a BETWEEN 93 AND 95) AND a!=94)
          OR b=278
-         OR (g='xwvutsr' AND f GLOB 'defgh*')
+         OR (g='xwvutsr' AND f LIKE 'defgh%')
          OR f='qrstuvwxy'
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR ((a BETWEEN 82 AND 84) AND a!=83)
-         OR (g='edcbazy' AND f GLOB 'uvwxy*')
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'uvwxy%')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -32872,9 +32872,9 @@ test:do_test(
          OR ((a BETWEEN 41 AND 43) AND a!=42)
          OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
          OR b=759
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR ((a BETWEEN 45 AND 47) AND a!=46)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.879.1>
@@ -32892,9 +32892,9 @@ test:do_test(
          OR ((a BETWEEN 41 AND 43) AND a!=42)
          OR (d>=96.0 AND d<97.0 AND d IS NOT NULL)
          OR b=759
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR ((a BETWEEN 45 AND 47) AND a!=46)
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
   ]])
     end, {
         -- <where7-2.879.2>
@@ -32916,7 +32916,7 @@ test:do_test(
          OR b=44
          OR f='zabcdefgh'
          OR b=979
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.880.1>
@@ -32938,7 +32938,7 @@ test:do_test(
          OR b=44
          OR f='zabcdefgh'
          OR b=979
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.880.2>
@@ -32988,7 +32988,7 @@ test:do_test(
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR a=90
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR f='nopqrstuv'
   ]])
     end, {
@@ -33011,7 +33011,7 @@ test:do_test(
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR a=90
          OR (d>=66.0 AND d<67.0 AND d IS NOT NULL)
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
          OR f='nopqrstuv'
   ]])
     end, {
@@ -33061,7 +33061,7 @@ test:do_test(
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR d<0.0
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR c=9009
   ]])
     end, {
@@ -33083,7 +33083,7 @@ test:do_test(
          OR ((a BETWEEN 4 AND 6) AND a!=5)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
          OR d<0.0
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR c=9009
   ]])
     end, {
@@ -33097,7 +33097,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR b=814
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
   ]])
@@ -33112,7 +33112,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?uvwx*' AND f GLOB 'tuvw*')
+      WHERE (f LIKE '_uvwx%' AND f LIKE 'tuvw%')
          OR b=814
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
   ]])
@@ -33127,7 +33127,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'mnopq*')
+      WHERE (g='lkjihgf' AND f LIKE 'mnopq%')
          OR b=333
          OR b=275
   ]])
@@ -33142,7 +33142,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'mnopq*')
+      WHERE (g='lkjihgf' AND f LIKE 'mnopq%')
          OR b=333
          OR b=275
   ]])
@@ -33157,7 +33157,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
   ]])
     end, {
@@ -33171,7 +33171,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='ihgfedc' AND f GLOB 'efghi*')
+      WHERE (g='ihgfedc' AND f LIKE 'efghi%')
          OR ((a BETWEEN 33 AND 35) AND a!=34)
   ]])
     end, {
@@ -33187,7 +33187,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 11 AND 13) AND a!=12)
          OR b=253
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=286
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
   ]])
@@ -33204,7 +33204,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 11 AND 13) AND a!=12)
          OR b=253
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=286
          OR (d>=10.0 AND d<11.0 AND d IS NOT NULL)
   ]])
@@ -33220,10 +33220,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=15.0 AND d<16.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 26 AND 28) AND a!=27)
          OR b=421
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR f='ijklmnopq'
          OR b=891
          OR b=1056
@@ -33240,10 +33240,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=15.0 AND d<16.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 26 AND 28) AND a!=27)
          OR b=421
-         OR (g='xwvutsr' AND f GLOB 'fghij*')
+         OR (g='xwvutsr' AND f LIKE 'fghij%')
          OR f='ijklmnopq'
          OR b=891
          OR b=1056
@@ -33260,10 +33260,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='fghijklmn'
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR b=671
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.890.1>
@@ -33277,10 +33277,10 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='fghijklmn'
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
-         OR (g='edcbazy' AND f GLOB 'vwxyz*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
+         OR (g='edcbazy' AND f LIKE 'vwxyz%')
          OR b=671
-         OR (g='xwvutsr' AND f GLOB 'hijkl*')
+         OR (g='xwvutsr' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.890.2>
@@ -33293,10 +33293,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='lkjihgf' AND f GLOB 'lmnop*')
-         OR (g='srqponm' AND f GLOB 'fghij*')
+      WHERE (g='lkjihgf' AND f LIKE 'lmnop%')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR ((a BETWEEN 4 AND 6) AND a!=5)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -33310,10 +33310,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='lkjihgf' AND f GLOB 'lmnop*')
-         OR (g='srqponm' AND f GLOB 'fghij*')
+      WHERE (g='lkjihgf' AND f LIKE 'lmnop%')
+         OR (g='srqponm' AND f LIKE 'fghij%')
          OR ((a BETWEEN 4 AND 6) AND a!=5)
-         OR (g='kjihgfe' AND f GLOB 'qrstu*')
+         OR (g='kjihgfe' AND f LIKE 'qrstu%')
          OR (d>=11.0 AND d<12.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -33439,11 +33439,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 67 AND 69) AND a!=68)
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR a=46
          OR b=187
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.895.1>
@@ -33458,11 +33458,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 67 AND 69) AND a!=68)
          OR (d>=69.0 AND d<70.0 AND d IS NOT NULL)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR a=46
          OR b=187
          OR ((a BETWEEN 69 AND 71) AND a!=70)
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
   ]])
     end, {
         -- <where7-2.895.2>
@@ -33522,7 +33522,7 @@ test:do_test(
          OR b=729
          OR ((a BETWEEN 81 AND 83) AND a!=82)
          OR a=58
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=608
   ]])
     end, {
@@ -33543,7 +33543,7 @@ test:do_test(
          OR b=729
          OR ((a BETWEEN 81 AND 83) AND a!=82)
          OR a=58
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR b=608
   ]])
     end, {
@@ -33561,7 +33561,7 @@ test:do_test(
          OR f='efghijklm'
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
          OR a=26
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
   ]])
     end, {
         -- <where7-2.898.1>
@@ -33578,7 +33578,7 @@ test:do_test(
          OR f='efghijklm'
          OR (d>=48.0 AND d<49.0 AND d IS NOT NULL)
          OR a=26
-         OR (f GLOB '?efgh*' AND f GLOB 'defg*')
+         OR (f LIKE '_efgh%' AND f LIKE 'defg%')
   ]])
     end, {
         -- <where7-2.898.2>
@@ -33592,11 +33592,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE a=59
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR a=7
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=762
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
   ]])
     end, {
         -- <where7-2.899.1>
@@ -33610,11 +33610,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE a=59
-         OR (g='wvutsrq' AND f GLOB 'mnopq*')
+         OR (g='wvutsrq' AND f LIKE 'mnopq%')
          OR a=7
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=762
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
   ]])
     end, {
         -- <where7-2.899.2>
@@ -33627,7 +33627,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
+      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
          OR b=539
          OR b=399
   ]])
@@ -33642,7 +33642,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='gfedcba' AND f GLOB 'nopqr*')
+      WHERE (g='gfedcba' AND f LIKE 'nopqr%')
          OR b=539
          OR b=399
   ]])
@@ -33687,10 +33687,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (g='rqponml' AND f GLOB 'klmno*')
+      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR f='lmnopqrst'
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.902.1>
@@ -33703,10 +33703,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?klmn*' AND f GLOB 'jklm*')
-         OR (g='rqponml' AND f GLOB 'klmno*')
+      WHERE (f LIKE '_klmn%' AND f LIKE 'jklm%')
+         OR (g='rqponml' AND f LIKE 'klmno%')
          OR f='lmnopqrst'
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.902.2>
@@ -33751,14 +33751,14 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1067
          OR ((a BETWEEN 53 AND 55) AND a!=54)
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR b=520
          OR b=399
          OR b=209
          OR a=68
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.904.1>
@@ -33773,14 +33773,14 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1067
          OR ((a BETWEEN 53 AND 55) AND a!=54)
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR b=520
          OR b=399
          OR b=209
          OR a=68
-         OR (g='fedcbaz' AND f GLOB 'qrstu*')
+         OR (g='fedcbaz' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.904.2>
@@ -33798,7 +33798,7 @@ test:do_test(
          OR b=55
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
          OR ((a BETWEEN 20 AND 22) AND a!=21)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 0 AND 2) AND a!=1)
          OR ((a BETWEEN 21 AND 23) AND a!=22)
   ]])
@@ -33818,7 +33818,7 @@ test:do_test(
          OR b=55
          OR (d>=34.0 AND d<35.0 AND d IS NOT NULL)
          OR ((a BETWEEN 20 AND 22) AND a!=21)
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR ((a BETWEEN 0 AND 2) AND a!=1)
          OR ((a BETWEEN 21 AND 23) AND a!=22)
   ]])
@@ -33837,7 +33837,7 @@ test:do_test(
          OR a=2
          OR b=784
          OR ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR b=850
   ]])
     end, {
@@ -33855,7 +33855,7 @@ test:do_test(
          OR a=2
          OR b=784
          OR ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='ihgfedc' AND f GLOB 'defgh*')
+         OR (g='ihgfedc' AND f LIKE 'defgh%')
          OR b=850
   ]])
     end, {
@@ -33903,17 +33903,17 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
          OR a=18
          OR a=30
          OR ((a BETWEEN 9 AND 11) AND a!=10)
          OR ((a BETWEEN 84 AND 86) AND a!=85)
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR b=792
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR ((a BETWEEN 19 AND 21) AND a!=20)
          OR c=26026
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.908.1>
@@ -33926,17 +33926,17 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'zabcd*')
+      WHERE (g='jihgfed' AND f LIKE 'zabcd%')
          OR a=18
          OR a=30
          OR ((a BETWEEN 9 AND 11) AND a!=10)
          OR ((a BETWEEN 84 AND 86) AND a!=85)
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR b=792
-         OR (f GLOB '?mnop*' AND f GLOB 'lmno*')
+         OR (f LIKE '_mnop%' AND f LIKE 'lmno%')
          OR ((a BETWEEN 19 AND 21) AND a!=20)
          OR c=26026
-         OR (g='rqponml' AND f GLOB 'hijkl*')
+         OR (g='rqponml' AND f LIKE 'hijkl%')
   ]])
     end, {
         -- <where7-2.908.2>
@@ -33949,11 +33949,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='vutsrqp' AND f GLOB 'qrstu*')
+      WHERE (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=968
          OR ((a BETWEEN 63 AND 65) AND a!=64)
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
          OR a=78
          OR ((a BETWEEN 90 AND 92) AND a!=91)
@@ -33969,11 +33969,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='vutsrqp' AND f GLOB 'qrstu*')
+      WHERE (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=968
          OR ((a BETWEEN 63 AND 65) AND a!=64)
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR (d>=72.0 AND d<73.0 AND d IS NOT NULL)
          OR a=78
          OR ((a BETWEEN 90 AND 92) AND a!=91)
@@ -34096,7 +34096,7 @@ test:do_test(
          OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR a=81
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR f='mnopqrstu'
   ]])
     end, {
@@ -34117,7 +34117,7 @@ test:do_test(
          OR (d>=78.0 AND d<79.0 AND d IS NOT NULL)
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR a=81
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR f='mnopqrstu'
   ]])
     end, {
@@ -34177,7 +34177,7 @@ test:do_test(
          OR ((a BETWEEN 20 AND 22) AND a!=21)
          OR ((a BETWEEN 27 AND 29) AND a!=28)
          OR b=319
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 14 AND 16) AND a!=15)
   ]])
     end, {
@@ -34197,7 +34197,7 @@ test:do_test(
          OR ((a BETWEEN 20 AND 22) AND a!=21)
          OR ((a BETWEEN 27 AND 29) AND a!=28)
          OR b=319
-         OR (g='qponmlk' AND f GLOB 'opqrs*')
+         OR (g='qponmlk' AND f LIKE 'opqrs%')
          OR ((a BETWEEN 14 AND 16) AND a!=15)
   ]])
     end, {
@@ -34214,7 +34214,7 @@ test:do_test(
       WHERE b=179
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR a=46
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
          OR a=25
          OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
@@ -34237,7 +34237,7 @@ test:do_test(
       WHERE b=179
          OR ((a BETWEEN 95 AND 97) AND a!=96)
          OR a=46
-         OR (g='kjihgfe' AND f GLOB 'uvwxy*')
+         OR (g='kjihgfe' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 53 AND 55) AND a!=54)
          OR a=25
          OR (d>=5.0 AND d<6.0 AND d IS NOT NULL)
@@ -34257,7 +34257,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'fghij*')
+      WHERE (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -34271,7 +34271,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'fghij*')
+      WHERE (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -34286,7 +34286,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=748
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR a=32
          OR b=110
          OR b=297
@@ -34308,7 +34308,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=748
-         OR (g='utsrqpo' AND f GLOB 'wxyza*')
+         OR (g='utsrqpo' AND f LIKE 'wxyza%')
          OR a=32
          OR b=110
          OR b=297
@@ -34332,13 +34332,13 @@ test:do_test(
       WHERE (d>=33.0 AND d<34.0 AND d IS NOT NULL)
          OR b=905
          OR a=97
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR c=27027
          OR f='bcdefghij'
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
          OR ((a BETWEEN 38 AND 40) AND a!=39)
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
   ]])
     end, {
         -- <where7-2.919.1>
@@ -34354,13 +34354,13 @@ test:do_test(
       WHERE (d>=33.0 AND d<34.0 AND d IS NOT NULL)
          OR b=905
          OR a=97
-         OR (g='hgfedcb' AND f GLOB 'hijkl*')
+         OR (g='hgfedcb' AND f LIKE 'hijkl%')
          OR c=27027
          OR f='bcdefghij'
          OR (d>=54.0 AND d<55.0 AND d IS NOT NULL)
          OR (d>=25.0 AND d<26.0 AND d IS NOT NULL)
          OR ((a BETWEEN 38 AND 40) AND a!=39)
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
   ]])
     end, {
         -- <where7-2.919.2>
@@ -34403,13 +34403,13 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=594
          OR b=80
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=421
          OR b=418
          OR b=828
          OR a=88
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -34425,13 +34425,13 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=594
          OR b=80
-         OR (g='tsrqpon' AND f GLOB 'bcdef*')
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='tsrqpon' AND f LIKE 'bcdef%')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=421
          OR b=418
          OR b=828
          OR a=88
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR (d>=60.0 AND d<61.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -34446,11 +34446,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=17.0 AND d<18.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR b=366
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR c=16016
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR c=9009
   ]])
     end, {
@@ -34465,11 +34465,11 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=17.0 AND d<18.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'xyzab*')
+         OR (g='jihgfed' AND f LIKE 'xyzab%')
          OR b=366
          OR (d>=28.0 AND d<29.0 AND d IS NOT NULL)
          OR c=16016
-         OR (g='edcbazy' AND f GLOB 'wxyza*')
+         OR (g='edcbazy' AND f LIKE 'wxyza%')
          OR c=9009
   ]])
     end, {
@@ -34485,7 +34485,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=33
          OR f='qrstuvwxy'
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR b=858
   ]])
     end, {
@@ -34501,7 +34501,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=33
          OR f='qrstuvwxy'
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR b=858
   ]])
     end, {
@@ -34516,7 +34516,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=861
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
          OR b=682
          OR ((a BETWEEN 93 AND 95) AND a!=94)
@@ -34534,7 +34534,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=861
-         OR (f GLOB '?xyza*' AND f GLOB 'wxyz*')
+         OR (f LIKE '_xyza%' AND f LIKE 'wxyz%')
          OR (d>=29.0 AND d<30.0 AND d IS NOT NULL)
          OR b=682
          OR ((a BETWEEN 93 AND 95) AND a!=94)
@@ -34584,7 +34584,7 @@ test:do_test(
       WHERE f='abcdefghi'
          OR c=9009
          OR b=663
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR b=91
   ]])
     end, {
@@ -34601,7 +34601,7 @@ test:do_test(
       WHERE f='abcdefghi'
          OR c=9009
          OR b=663
-         OR (g='wvutsrq' AND f GLOB 'klmno*')
+         OR (g='wvutsrq' AND f LIKE 'klmno%')
          OR b=91
   ]])
     end, {
@@ -34615,15 +34615,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='kjihgfe' AND f GLOB 'qrstu*')
+      WHERE (g='kjihgfe' AND f LIKE 'qrstu%')
          OR ((a BETWEEN 29 AND 31) AND a!=30)
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=1015
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=916
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
          OR b=69
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.927.1>
@@ -34636,15 +34636,15 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='kjihgfe' AND f GLOB 'qrstu*')
+      WHERE (g='kjihgfe' AND f LIKE 'qrstu%')
          OR ((a BETWEEN 29 AND 31) AND a!=30)
-         OR (f GLOB '?opqr*' AND f GLOB 'nopq*')
+         OR (f LIKE '_opqr%' AND f LIKE 'nopq%')
          OR b=1015
-         OR (g='qponmlk' AND f GLOB 'qrstu*')
+         OR (g='qponmlk' AND f LIKE 'qrstu%')
          OR b=916
          OR (d>=31.0 AND d<32.0 AND d IS NOT NULL)
          OR b=69
-         OR (g='hgfedcb' AND f GLOB 'fghij*')
+         OR (g='hgfedcb' AND f LIKE 'fghij%')
   ]])
     end, {
         -- <where7-2.927.2>
@@ -34664,7 +34664,7 @@ test:do_test(
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR a=63
          OR f='mnopqrstu'
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR b=495
          OR a=35
          OR a=22
@@ -34687,7 +34687,7 @@ test:do_test(
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR a=63
          OR f='mnopqrstu'
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR b=495
          OR a=35
          OR a=22
@@ -34704,7 +34704,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=869
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=289
          OR a=62
          OR ((a BETWEEN 9 AND 11) AND a!=10)
@@ -34721,7 +34721,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=869
-         OR (g='rqponml' AND f GLOB 'jklmn*')
+         OR (g='rqponml' AND f LIKE 'jklmn%')
          OR b=289
          OR a=62
          OR ((a BETWEEN 9 AND 11) AND a!=10)
@@ -34774,7 +34774,7 @@ test:do_test(
       WHERE ((a BETWEEN 57 AND 59) AND a!=58)
          OR b=1078
          OR ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR b=429
   ]])
@@ -34792,7 +34792,7 @@ test:do_test(
       WHERE ((a BETWEEN 57 AND 59) AND a!=58)
          OR b=1078
          OR ((a BETWEEN 21 AND 23) AND a!=22)
-         OR (g='mlkjihg' AND f GLOB 'ijklm*')
+         OR (g='mlkjihg' AND f LIKE 'ijklm%')
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
          OR b=429
   ]])
@@ -34876,7 +34876,7 @@ test:do_test(
       WHERE (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR b=858
          OR a=58
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR c=21021
          OR ((a BETWEEN 45 AND 47) AND a!=46)
          OR b=616
@@ -34897,7 +34897,7 @@ test:do_test(
       WHERE (d>=56.0 AND d<57.0 AND d IS NOT NULL)
          OR b=858
          OR a=58
-         OR (g='onmlkji' AND f GLOB 'xyzab*')
+         OR (g='onmlkji' AND f LIKE 'xyzab%')
          OR c=21021
          OR ((a BETWEEN 45 AND 47) AND a!=46)
          OR b=616
@@ -34917,7 +34917,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=682
          OR b=99
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR b=531
   ]])
     end, {
@@ -34933,7 +34933,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=682
          OR b=99
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR b=531
   ]])
     end, {
@@ -34948,13 +34948,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 56 AND 58) AND a!=57)
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR b=726
          OR a=79
          OR a=47
          OR b=212
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR c=8008
   ]])
     end, {
@@ -34969,13 +34969,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 56 AND 58) AND a!=57)
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (f GLOB '?jklm*' AND f GLOB 'ijkl*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (f LIKE '_jklm%' AND f LIKE 'ijkl%')
          OR b=726
          OR a=79
          OR a=47
          OR b=212
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
          OR c=8008
   ]])
     end, {
@@ -34993,7 +34993,7 @@ test:do_test(
          OR ((a BETWEEN 60 AND 62) AND a!=61)
          OR a=5
          OR b=33
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
          OR a=59
          OR b=44
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
@@ -35014,7 +35014,7 @@ test:do_test(
          OR ((a BETWEEN 60 AND 62) AND a!=61)
          OR a=5
          OR b=33
-         OR (f GLOB '?yzab*' AND f GLOB 'xyza*')
+         OR (f LIKE '_yzab%' AND f LIKE 'xyza%')
          OR a=59
          OR b=44
          OR (d>=14.0 AND d<15.0 AND d IS NOT NULL)
@@ -35213,8 +35213,8 @@ test:do_test(
      SELECT a FROM t2
       WHERE a=96
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR ((a BETWEEN 37 AND 39) AND a!=38)
          OR a=85
          OR ((a BETWEEN 10 AND 12) AND a!=11)
@@ -35236,8 +35236,8 @@ test:do_test(
      SELECT a FROM t3
       WHERE a=96
          OR (d>=23.0 AND d<24.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'vwxyz*')
-         OR (f GLOB '?fghi*' AND f GLOB 'efgh*')
+         OR (g='ponmlkj' AND f LIKE 'vwxyz%')
+         OR (f LIKE '_fghi%' AND f LIKE 'efgh%')
          OR ((a BETWEEN 37 AND 39) AND a!=38)
          OR a=85
          OR ((a BETWEEN 10 AND 12) AND a!=11)
@@ -35299,17 +35299,17 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
+      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
          OR a=60
          OR a=4
          OR b=520
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR a=44
          OR a=36
          OR (d>=76.0 AND d<77.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=715
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.945.1>
@@ -35322,17 +35322,17 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'hijkl*')
+      WHERE (g='xwvutsr' AND f LIKE 'hijkl%')
          OR a=60
          OR a=4
          OR b=520
-         OR (g='ihgfedc' AND f GLOB 'bcdef*')
+         OR (g='ihgfedc' AND f LIKE 'bcdef%')
          OR a=44
          OR a=36
          OR (d>=76.0 AND d<77.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=715
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
   ]])
     end, {
         -- <where7-2.945.2>
@@ -35349,10 +35349,10 @@ test:do_test(
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
          OR a=24
          OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
   ]])
     end, {
         -- <where7-2.946.1>
@@ -35369,10 +35369,10 @@ test:do_test(
          OR ((a BETWEEN 56 AND 58) AND a!=57)
          OR (d>=15.0 AND d<16.0 AND d IS NOT NULL)
          OR (d>=55.0 AND d<56.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'yzabc*')
+         OR (g='jihgfed' AND f LIKE 'yzabc%')
          OR a=24
          OR (d>=99.0 AND d<100.0 AND d IS NOT NULL)
-         OR (f GLOB '?bcde*' AND f GLOB 'abcd*')
+         OR (f LIKE '_bcde%' AND f LIKE 'abcd%')
   ]])
     end, {
         -- <where7-2.946.2>
@@ -35385,12 +35385,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='utsrqpo' AND f GLOB 'vwxyz*')
+      WHERE (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=132
          OR f='ghijklmno'
          OR b=740
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=1059
   ]])
     end, {
@@ -35404,12 +35404,12 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='utsrqpo' AND f GLOB 'vwxyz*')
+      WHERE (g='utsrqpo' AND f LIKE 'vwxyz%')
          OR b=132
          OR f='ghijklmno'
          OR b=740
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=1059
   ]])
     end, {
@@ -35459,10 +35459,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='nmlkjih' AND f GLOB 'cdefg*')
+      WHERE (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=1026
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'lmnop*')
+         OR (g='wvutsrq' AND f LIKE 'lmnop%')
          OR b=355
          OR b=641
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
@@ -35478,10 +35478,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='nmlkjih' AND f GLOB 'cdefg*')
+      WHERE (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=1026
          OR (d>=1.0 AND d<2.0 AND d IS NOT NULL)
-         OR (g='wvutsrq' AND f GLOB 'lmnop*')
+         OR (g='wvutsrq' AND f LIKE 'lmnop%')
          OR b=355
          OR b=641
          OR (d>=53.0 AND d<54.0 AND d IS NOT NULL)
@@ -35506,7 +35506,7 @@ test:do_test(
          OR f='opqrstuvw'
          OR a=41
          OR a=83
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=751
   ]])
     end, {
@@ -35529,7 +35529,7 @@ test:do_test(
          OR f='opqrstuvw'
          OR a=41
          OR a=83
-         OR (g='nmlkjih' AND f GLOB 'cdefg*')
+         OR (g='nmlkjih' AND f LIKE 'cdefg%')
          OR b=751
   ]])
     end, {
@@ -35579,7 +35579,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'qrstu*')
+      WHERE (g='qponmlk' AND f LIKE 'qrstu%')
          OR f='bcdefghij'
          OR f='hijklmnop'
          OR a=65
@@ -35602,7 +35602,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'qrstu*')
+      WHERE (g='qponmlk' AND f LIKE 'qrstu%')
          OR f='bcdefghij'
          OR f='hijklmnop'
          OR a=65
@@ -35625,11 +35625,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='jihgfed' AND f GLOB 'vwxyz*')
+      WHERE (g='jihgfed' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR ((a BETWEEN 79 AND 81) AND a!=80)
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR b=1100
          OR c=6006
          OR c=4004
@@ -35647,11 +35647,11 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='jihgfed' AND f GLOB 'vwxyz*')
+      WHERE (g='jihgfed' AND f LIKE 'vwxyz%')
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR ((a BETWEEN 79 AND 81) AND a!=80)
-         OR (g='kjihgfe' AND f GLOB 'stuvw*')
-         OR (g='qponmlk' AND f GLOB 'pqrst*')
+         OR (g='kjihgfe' AND f LIKE 'stuvw%')
+         OR (g='qponmlk' AND f LIKE 'pqrst%')
          OR b=1100
          OR c=6006
          OR c=4004
@@ -35728,7 +35728,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE (d>=42.0 AND d<43.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 21 AND 23) AND a!=22)
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=737
@@ -35745,7 +35745,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE (d>=42.0 AND d<43.0 AND d IS NOT NULL)
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR ((a BETWEEN 21 AND 23) AND a!=22)
          OR (d>=12.0 AND d<13.0 AND d IS NOT NULL)
          OR b=737
@@ -35761,7 +35761,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='rqponml' AND f GLOB 'klmno*')
+      WHERE (g='rqponml' AND f LIKE 'klmno%')
          OR ((a BETWEEN 5 AND 7) AND a!=6)
   ]])
     end, {
@@ -35775,7 +35775,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='rqponml' AND f GLOB 'klmno*')
+      WHERE (g='rqponml' AND f LIKE 'klmno%')
          OR ((a BETWEEN 5 AND 7) AND a!=6)
   ]])
     end, {
@@ -35789,7 +35789,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR c=32032
          OR f='opqrstuvw'
          OR ((a BETWEEN 66 AND 68) AND a!=67)
@@ -35807,7 +35807,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='hgfedcb' AND f GLOB 'hijkl*')
+      WHERE (g='hgfedcb' AND f LIKE 'hijkl%')
          OR c=32032
          OR f='opqrstuvw'
          OR ((a BETWEEN 66 AND 68) AND a!=67)
@@ -35875,11 +35875,11 @@ test:do_test(
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR ((a BETWEEN 86 AND 88) AND a!=87)
          OR b=146
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR ((a BETWEEN 73 AND 75) AND a!=74)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 60 AND 62) AND a!=61)
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=704
   ]])
     end, {
@@ -35897,11 +35897,11 @@ test:do_test(
          OR ((a BETWEEN 8 AND 10) AND a!=9)
          OR ((a BETWEEN 86 AND 88) AND a!=87)
          OR b=146
-         OR (g='ponmlkj' AND f GLOB 'rstuv*')
+         OR (g='ponmlkj' AND f LIKE 'rstuv%')
          OR ((a BETWEEN 73 AND 75) AND a!=74)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
          OR ((a BETWEEN 60 AND 62) AND a!=61)
-         OR (g='ihgfedc' AND f GLOB 'efghi*')
+         OR (g='ihgfedc' AND f LIKE 'efghi%')
          OR b=704
   ]])
     end, {
@@ -35950,7 +35950,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE c=17017
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=971
          OR a=37
          OR a=7
@@ -35970,7 +35970,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE c=17017
-         OR (g='qponmlk' AND f GLOB 'mnopq*')
+         OR (g='qponmlk' AND f LIKE 'mnopq%')
          OR b=971
          OR a=37
          OR a=7
@@ -35990,7 +35990,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE f='tuvwxyzab'
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
   ]])
     end, {
         -- <where7-2.963.1>
@@ -36004,7 +36004,7 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE f='tuvwxyzab'
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
   ]])
     end, {
         -- <where7-2.963.2>
@@ -36019,7 +36019,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=638
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR b=165
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR f='stuvwxyza'
@@ -36041,7 +36041,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=638
          OR (d>=44.0 AND d<45.0 AND d IS NOT NULL)
-         OR (g='gfedcba' AND f GLOB 'lmnop*')
+         OR (g='gfedcba' AND f LIKE 'lmnop%')
          OR b=165
          OR ((a BETWEEN 10 AND 12) AND a!=11)
          OR f='stuvwxyza'
@@ -36067,7 +36067,7 @@ test:do_test(
          OR a=93
          OR b=858
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.965.1>
@@ -36086,7 +36086,7 @@ test:do_test(
          OR a=93
          OR b=858
          OR (d>=18.0 AND d<19.0 AND d IS NOT NULL)
-         OR (g='jihgfed' AND f GLOB 'vwxyz*')
+         OR (g='jihgfed' AND f LIKE 'vwxyz%')
   ]])
     end, {
         -- <where7-2.965.2>
@@ -36157,7 +36157,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='qponmlk' AND f GLOB 'mnopq*')
+      WHERE (g='qponmlk' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR a=5
          OR b=396
@@ -36174,7 +36174,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='qponmlk' AND f GLOB 'mnopq*')
+      WHERE (g='qponmlk' AND f LIKE 'mnopq%')
          OR ((a BETWEEN 24 AND 26) AND a!=25)
          OR a=5
          OR b=396
@@ -36191,7 +36191,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=748
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
@@ -36210,7 +36210,7 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
          OR b=748
          OR (d>=97.0 AND d<98.0 AND d IS NOT NULL)
          OR ((a BETWEEN 69 AND 71) AND a!=70)
@@ -36231,7 +36231,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
          OR ((a BETWEEN 8 AND 10) AND a!=9)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR a=50
          OR a=46
          OR ((a BETWEEN 38 AND 40) AND a!=39)
@@ -36249,7 +36249,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=30.0 AND d<31.0 AND d IS NOT NULL)
          OR ((a BETWEEN 8 AND 10) AND a!=9)
-         OR (f GLOB '?pqrs*' AND f GLOB 'opqr*')
+         OR (f LIKE '_pqrs%' AND f LIKE 'opqr%')
          OR a=50
          OR a=46
          OR ((a BETWEEN 38 AND 40) AND a!=39)
@@ -36312,7 +36312,7 @@ test:do_test(
          OR c=16016
          OR b=1078
          OR b=960
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
   ]])
     end, {
         -- <where7-2.972.1>
@@ -36330,7 +36330,7 @@ test:do_test(
          OR c=16016
          OR b=1078
          OR b=960
-         OR (g='hgfedcb' AND f GLOB 'jklmn*')
+         OR (g='hgfedcb' AND f LIKE 'jklmn%')
   ]])
     end, {
         -- <where7-2.972.2>
@@ -36345,7 +36345,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1081
          OR ((a BETWEEN 19 AND 21) AND a!=20)
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 73 AND 75) AND a!=74)
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR a=6
@@ -36363,7 +36363,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1081
          OR ((a BETWEEN 19 AND 21) AND a!=20)
-         OR (g='ponmlkj' AND f GLOB 'tuvwx*')
+         OR (g='ponmlkj' AND f LIKE 'tuvwx%')
          OR ((a BETWEEN 73 AND 75) AND a!=74)
          OR (d>=38.0 AND d<39.0 AND d IS NOT NULL)
          OR a=6
@@ -36379,10 +36379,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR a=92
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR f='fghijklmn'
          OR a=100
          OR b=209
@@ -36402,10 +36402,10 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='fedcbaz' AND f GLOB 'rstuv*')
-         OR (g='rqponml' AND f GLOB 'lmnop*')
+      WHERE (g='fedcbaz' AND f LIKE 'rstuv%')
+         OR (g='rqponml' AND f LIKE 'lmnop%')
          OR a=92
-         OR (f GLOB '?klmn*' AND f GLOB 'jklm*')
+         OR (f LIKE '_klmn%' AND f LIKE 'jklm%')
          OR f='fghijklmn'
          OR a=100
          OR b=209
@@ -36458,13 +36458,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE ((a BETWEEN 51 AND 53) AND a!=52)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=91
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR b=77
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.976.1>
@@ -36478,13 +36478,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE ((a BETWEEN 51 AND 53) AND a!=52)
-         OR (g='utsrqpo' AND f GLOB 'uvwxy*')
-         OR (f GLOB '?cdef*' AND f GLOB 'bcde*')
+         OR (g='utsrqpo' AND f LIKE 'uvwxy%')
+         OR (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR b=91
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR b=77
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
-         OR (g='vutsrqp' AND f GLOB 'pqrst*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
+         OR (g='vutsrqp' AND f LIKE 'pqrst%')
   ]])
     end, {
         -- <where7-2.976.2>
@@ -36582,13 +36582,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=737
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR a=40
          OR f='uvwxyzabc'
          OR b=311
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=927
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
   ]])
@@ -36604,13 +36604,13 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=737
-         OR (g='wvutsrq' AND f GLOB 'ijklm*')
-         OR (f GLOB '?ghij*' AND f GLOB 'fghi*')
+         OR (g='wvutsrq' AND f LIKE 'ijklm%')
+         OR (f LIKE '_ghij%' AND f LIKE 'fghi%')
          OR a=40
          OR f='uvwxyzabc'
          OR b=311
-         OR (g='nmlkjih' AND f GLOB 'bcdef*')
-         OR (f GLOB '?hijk*' AND f GLOB 'ghij*')
+         OR (g='nmlkjih' AND f LIKE 'bcdef%')
+         OR (f LIKE '_hijk%' AND f LIKE 'ghij%')
          OR b=927
          OR (d>=50.0 AND d<51.0 AND d IS NOT NULL)
   ]])
@@ -36657,16 +36657,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR b=487
          OR f='tuvwxyzab'
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR b=971
          OR c=19019
          OR a=39
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR b=550
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=660
   ]])
     end, {
@@ -36680,16 +36680,16 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='xwvutsr' AND f GLOB 'ghijk*')
+      WHERE (g='xwvutsr' AND f LIKE 'ghijk%')
          OR b=487
          OR f='tuvwxyzab'
-         OR (g='onmlkji' AND f GLOB 'wxyza*')
+         OR (g='onmlkji' AND f LIKE 'wxyza%')
          OR b=971
          OR c=19019
          OR a=39
-         OR (f GLOB '?nopq*' AND f GLOB 'mnop*')
+         OR (f LIKE '_nopq%' AND f LIKE 'mnop%')
          OR b=550
-         OR (g='kjihgfe' AND f GLOB 'tuvwx*')
+         OR (g='kjihgfe' AND f LIKE 'tuvwx%')
          OR b=660
   ]])
     end, {
@@ -36735,7 +36735,7 @@ test:do_test(
          OR b=630
          OR b=935
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR f='yzabcdefg'
          OR ((a BETWEEN 37 AND 39) AND a!=38)
   ]])
@@ -36754,7 +36754,7 @@ test:do_test(
          OR b=630
          OR b=935
          OR (d>=20.0 AND d<21.0 AND d IS NOT NULL)
-         OR (g='srqponm' AND f GLOB 'defgh*')
+         OR (g='srqponm' AND f LIKE 'defgh%')
          OR f='yzabcdefg'
          OR ((a BETWEEN 37 AND 39) AND a!=38)
   ]])
@@ -36774,7 +36774,7 @@ test:do_test(
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
          OR f='abcdefghi'
          OR b=696
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=682
          OR a=32
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -36797,7 +36797,7 @@ test:do_test(
          OR (d>=86.0 AND d<87.0 AND d IS NOT NULL)
          OR f='abcdefghi'
          OR b=696
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=682
          OR a=32
          OR ((a BETWEEN 34 AND 36) AND a!=35)
@@ -36815,8 +36815,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (g='gfedcba' AND f GLOB 'lmnop*')
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+      WHERE (g='gfedcba' AND f LIKE 'lmnop%')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR b=311
   ]])
     end, {
@@ -36830,8 +36830,8 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (g='gfedcba' AND f GLOB 'lmnop*')
-         OR (f GLOB '?ijkl*' AND f GLOB 'hijk*')
+      WHERE (g='gfedcba' AND f LIKE 'lmnop%')
+         OR (f LIKE '_ijkl%' AND f LIKE 'hijk%')
          OR b=311
   ]])
     end, {
@@ -36884,7 +36884,7 @@ test:do_test(
       WHERE ((a BETWEEN 98 AND 100) AND a!=99)
          OR b=110
          OR ((a BETWEEN 38 AND 40) AND a!=39)
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR b=484
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
   ]])
@@ -36902,7 +36902,7 @@ test:do_test(
       WHERE ((a BETWEEN 98 AND 100) AND a!=99)
          OR b=110
          OR ((a BETWEEN 38 AND 40) AND a!=39)
-         OR (g='tsrqpon' AND f GLOB 'xyzab*')
+         OR (g='tsrqpon' AND f LIKE 'xyzab%')
          OR b=484
          OR (d>=82.0 AND d<83.0 AND d IS NOT NULL)
   ]])
@@ -36925,7 +36925,7 @@ test:do_test(
          OR c=27027
          OR b=1026
          OR c=6006
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -36947,7 +36947,7 @@ test:do_test(
          OR c=27027
          OR b=1026
          OR c=6006
-         OR (g='ponmlkj' AND f GLOB 'uvwxy*')
+         OR (g='ponmlkj' AND f LIKE 'uvwxy%')
          OR (d>=73.0 AND d<74.0 AND d IS NOT NULL)
   ]])
     end, {
@@ -36963,11 +36963,11 @@ test:do_test(
      SELECT a FROM t2
       WHERE (d>=79.0 AND d<80.0 AND d IS NOT NULL)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR a=97
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR ((a BETWEEN 22 AND 24) AND a!=23)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR b=674
          OR c=14014
          OR b=69
@@ -36985,11 +36985,11 @@ test:do_test(
      SELECT a FROM t3
       WHERE (d>=79.0 AND d<80.0 AND d IS NOT NULL)
          OR ((a BETWEEN 18 AND 20) AND a!=19)
-         OR (g='qponmlk' AND f GLOB 'nopqr*')
+         OR (g='qponmlk' AND f LIKE 'nopqr%')
          OR a=97
          OR (d>=45.0 AND d<46.0 AND d IS NOT NULL)
          OR ((a BETWEEN 22 AND 24) AND a!=23)
-         OR (g='mlkjihg' AND f GLOB 'ghijk*')
+         OR (g='mlkjihg' AND f LIKE 'ghijk%')
          OR b=674
          OR c=14014
          OR b=69
@@ -37039,12 +37039,12 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=451
          OR ((a BETWEEN 11 AND 13) AND a!=12)
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=539
          OR a=26
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR b=465
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.991.1>
@@ -37059,12 +37059,12 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=451
          OR ((a BETWEEN 11 AND 13) AND a!=12)
-         OR (g='tsrqpon' AND f GLOB 'abcde*')
+         OR (g='tsrqpon' AND f LIKE 'abcde%')
          OR b=539
          OR a=26
-         OR (g='srqponm' AND f GLOB 'efghi*')
+         OR (g='srqponm' AND f LIKE 'efghi%')
          OR b=465
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
   ]])
     end, {
         -- <where7-2.991.2>
@@ -37135,9 +37135,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t2
-      WHERE (f GLOB '?cdef*' AND f GLOB 'bcde*')
+      WHERE (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR a=13
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR b=322
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR b=377
@@ -37156,9 +37156,9 @@ test:do_test(
     function()
         return count_steps_sort([[
      SELECT a FROM t3
-      WHERE (f GLOB '?cdef*' AND f GLOB 'bcde*')
+      WHERE (f LIKE '_cdef%' AND f LIKE 'bcde%')
          OR a=13
-         OR (f GLOB '?stuv*' AND f GLOB 'rstu*')
+         OR (f LIKE '_stuv%' AND f LIKE 'rstu%')
          OR b=322
          OR ((a BETWEEN 33 AND 35) AND a!=34)
          OR b=377
@@ -37181,9 +37181,9 @@ test:do_test(
          OR b=990
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
          OR b=605
-         OR (g='srqponm' AND f GLOB 'cdefg*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=968
          OR a=66
   ]])
@@ -37202,9 +37202,9 @@ test:do_test(
          OR b=990
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
          OR b=605
-         OR (g='srqponm' AND f GLOB 'cdefg*')
+         OR (g='srqponm' AND f LIKE 'cdefg%')
          OR (d>=36.0 AND d<37.0 AND d IS NOT NULL)
-         OR (g='vutsrqp' AND f GLOB 'qrstu*')
+         OR (g='vutsrqp' AND f LIKE 'qrstu%')
          OR b=968
          OR a=66
   ]])
@@ -37220,12 +37220,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t2
       WHERE b=1059
-         OR (g='srqponm' AND f GLOB 'ghijk*')
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
          OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR ((a BETWEEN 39 AND 41) AND a!=40)
   ]])
     end, {
@@ -37240,12 +37240,12 @@ test:do_test(
         return count_steps_sort([[
      SELECT a FROM t3
       WHERE b=1059
-         OR (g='srqponm' AND f GLOB 'ghijk*')
-         OR (g='utsrqpo' AND f GLOB 'tuvwx*')
-         OR (g='nmlkjih' AND f GLOB 'fghij*')
+         OR (g='srqponm' AND f LIKE 'ghijk%')
+         OR (g='utsrqpo' AND f LIKE 'tuvwx%')
+         OR (g='nmlkjih' AND f LIKE 'fghij%')
          OR (d>=17.0 AND d<18.0 AND d IS NOT NULL)
          OR (d>=37.0 AND d<38.0 AND d IS NOT NULL)
-         OR (g='onmlkji' AND f GLOB 'abcde*')
+         OR (g='onmlkji' AND f LIKE 'abcde%')
          OR ((a BETWEEN 39 AND 41) AND a!=40)
   ]])
     end, {
@@ -37261,7 +37261,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE ((a BETWEEN 41 AND 43) AND a!=42)
          OR f='nopqrstuv'
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR a=42
          OR b=729
          OR b=297
@@ -37282,7 +37282,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE ((a BETWEEN 41 AND 43) AND a!=42)
          OR f='nopqrstuv'
-         OR (g='ponmlkj' AND f GLOB 'stuvw*')
+         OR (g='ponmlkj' AND f LIKE 'stuvw%')
          OR a=42
          OR b=729
          OR b=297
@@ -37337,9 +37337,9 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=451
          OR b=660
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
          OR b=781
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=198
          OR b=1023
          OR a=98
@@ -37359,9 +37359,9 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=451
          OR b=660
-         OR (g='onmlkji' AND f GLOB 'yzabc*')
+         OR (g='onmlkji' AND f LIKE 'yzabc%')
          OR b=781
-         OR (g='jihgfed' AND f GLOB 'wxyza*')
+         OR (g='jihgfed' AND f LIKE 'wxyza%')
          OR b=198
          OR b=1023
          OR a=98
@@ -37383,7 +37383,7 @@ test:do_test(
          OR a=86
          OR c=17017
          OR ((a BETWEEN 85 AND 87) AND a!=86)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR a=80
          OR b=773
   ]])
@@ -37402,7 +37402,7 @@ test:do_test(
          OR a=86
          OR c=17017
          OR ((a BETWEEN 85 AND 87) AND a!=86)
-         OR (g='gfedcba' AND f GLOB 'mnopq*')
+         OR (g='gfedcba' AND f LIKE 'mnopq%')
          OR a=80
          OR b=773
   ]])
@@ -37419,7 +37419,7 @@ test:do_test(
      SELECT a FROM t2
       WHERE b=1092
          OR a=23
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR d<0.0
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR a=91
@@ -37437,7 +37437,7 @@ test:do_test(
      SELECT a FROM t3
       WHERE b=1092
          OR a=23
-         OR (f GLOB '?defg*' AND f GLOB 'cdef*')
+         OR (f LIKE '_defg%' AND f LIKE 'cdef%')
          OR d<0.0
          OR (d>=22.0 AND d<23.0 AND d IS NOT NULL)
          OR a=91


--
WBR, Nikita Tatunov.
n.tatunov@tarantool.org


[-- Attachment #2: Type: text/html, Size: 1291048 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-09-11  6:06             ` Nikita Tatunov
@ 2018-09-11 10:06               ` Alex Khatskevich
  2018-09-11 13:31                 ` Nikita Tatunov
  0 siblings, 1 reply; 46+ messages in thread
From: Alex Khatskevich @ 2018-09-11 10:06 UTC (permalink / raw)
  To: Nikita Tatunov, tarantool-patches; +Cc: Alexander Turenko, korablev

[-- Attachment #1: Type: text/plain, Size: 5037 bytes --]



On 11.09.2018 09:06, Nikita Tatunov wrote:
>
>
>> On 11 Sep 2018, at 01:20, Alex Khatskevich 
>> <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> wrote:
>>
>>>
>>>
>>>> On 17 Aug 2018, at 14:42, Alex Khatskevich 
>>>> <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> 
>>>> wrote:
>>>>
>>>>
>>>> On 17.08.2018 14:17, Alexander Turenko wrote:
>>>>> 0xffff is the result of 'end of a string' check as well as 
>>>>> internal buffer
>>>>> overflow error. I have the relevant code pasted in the first review of
>>>>> the patch (July, 18).
>>>>>
>>>>> // source/common/ucnv.c::ucnv_getNextUChar
>>>>> 1860     s=*source;
>>>>> 1861     if(sourceLimit<s) {
>>>>> 1862         *err=U_ILLEGAL_ARGUMENT_ERROR;
>>>>> 1863         return 0xffff;
>>>>> 1864     }
>>>>>
>>>>> We should not handle the buffer overflow case as an invalid symbol. Of
>>>>> course we should not handle it as the 'end of the string' situation.
>>>>> Ideally we should perform pointer myself and raise an error in case of
>>>>> 0xffff. I had thought that a buffer overflow error is unlikely to 
>>>>> meet,
>>>>> but you are right: we should differentiate these situations.
>>>>>
>>>>> In one of the previous version of a patch we perform this check 
>>>>> like so:
>>>>>
>>>>> #define Utf8Read(s, e) (((s) < (e)) ?\
>>>>> ucnv_getNextUChar(pUtf8conv, &s, e, &status) : 0)
>>>>>
>>>>> Don't sure why it was changed. Maybe it is try to correctly handle 
>>>>> '\0'
>>>>> symbol (it is valid unicode character)?
>>>> The define you have pasted can return 0xffff.
>>>> The reasons to change it back are described in the previous patchset.
>>>> In short:
>>>> 1. It is equivalent to
>>>> a. check s < e in a while loop
>>>> b. read next character inside of where loop body.
>>>> 2. In some usages of the code this check (s<e) was redundant (it 
>>>> was performed a couple lines above)
>>>> 3. There is no reason to rewrite the old version of this function. 
>>>> (So, we decided to use old version of the function)
>>>>> So I see two ways to proceed:
>>>>>
>>>>> 1. Lean on icu's check and ignore possibility of the buffer overflow.
>>>>> 2. Use our own check and possibly meet '\0' problems.
>>>>> 3. Check for U_ILLEGAL_ARGUMENT_ERROR to treat as end of a string, 
>>>>> raise
>>>>>    the error for other 0xffff.
>>>>>
>>>>> Alex, what do you suggests here?
>>>> As I understand, by now the 0xffff is used ONLY to handle the case 
>>>> of unexpectedly ended symbol.
>>>> E.g. some symbol consists of 2 characters, but the length of the 
>>>> input buffer is 1.
>>>> In my opinion this is the same as an invalid symbol.
>>>>
>>>> I guess that internal buffer overflow cannot occur in the 
>>>> `ucnv_getNextChar` function.
>>>>
>>>> I suppose that it is Nikitas duty to investigate this problem and 
>>>> explain it to us all. I just have noticed a strange usage.
>>>
>>> Hello, please consider my comments.
>>>
>>> There are some cases when 0xffff can occur, but:
>>> 1) Cannot trigger in our context.
>>> 2) Cannot trigger in our context.
>>> 3) Only triggers if end < start. (Cannot happen in 
>>> sql_utf8_pattern_compare, i guess)
>>> 4) Only triggers if string length > (size_t) 0x7ffffffff (can it 
>>> actually happen? I don’t think so).
>>> 5) Occurs when trying to access to not unindexed data.
>>> 6) Cannot occur in our context.
>>> 7) Cannot occur in our context.
>> I do not understand what are those numbers related to. Please, 
>> describe it.
>
> They are related to possible cases returning 0xffff from icu source 
> code (function ucnv_getNextUChar()).
Can you just copy it here, so that anyone interested in that 
conversation can
analyze it without looking for source files?
>
>>>
>>> 0xfffd only means that symbol cannot be treated as a unicode symbol.
>>>
>>> Shall I change it somehow then?
>>>
>>>
>>>> On 17 Aug 2018, at 12:23, Alex Khatskevich 
>>>> <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> 
>>>> wrote:
>>>>
>>>> I have a look at icu code and It seems like 0xffff is an error, and 
>>>> it is more similar to
>>>> invalid symbol that to "end of string". Check it, and fix the code, 
>>>> so that it is treated as
>>>> an error.
>>>> For example it is not handled in the main pattern loop:
>>>>
>>>> +while (pattern < pattern_end) {
>>>> c = Utf8Read(pattern, pattern_end);
>>>> +if (c == SQL_INVALID_UTF8_SYMBOL)
>>>> +return SQL_INVALID_PATTERN;
>>>>
>>>> It seems like the 0xffff should be checked there too.
>>>
>>> No, it should not. This way it will only cause a bug when, for 
>>> example ’select “” like “”’
>>> will be treated as an error.
>> I do not understand.
>> ’select “” like “”’ should not even trap inside of the while loop
>> (because`pattern < pattern_end` is false).
>
> Ah, you’re right, sorry, then it just doesn’t matter, since pattern < 
> pattern_end is equal
> to 0xffff according to the comment above.
>
> --
> WBR, Nikita Tatunov.
> n.tatunov@tarantool.org <mailto:n.tatunov@tarantool.org>
>


[-- Attachment #2: Type: text/html, Size: 38461 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-09-11  7:38         ` Nikita Tatunov
@ 2018-09-11 10:11           ` Alexander Turenko
  2018-09-11 10:22             ` Alex Khatskevich
  2018-09-11 12:03           ` Alex Khatskevich
  1 sibling, 1 reply; 46+ messages in thread
From: Alexander Turenko @ 2018-09-11 10:11 UTC (permalink / raw)
  To: Nikita Tatunov; +Cc: Alex Khatskevich, Nikita Pettik, tarantool-patches

Hi!

See below.

WBR, Alexandr Turenko.

On Tue, Sep 11, 2018 at 10:38:38AM +0300, Nikita Tatunov wrote:
> Hello, thank you for comments.
> See full diff is at the end of the letter.
> 
> >>>> 
> >>>> -					     "ESCAPE expression must be a single character",
> >>>> +					     "ESCAPE expression must be a"
> >>>> +					     " single character",
> >>> Do not split error messages at the middle of a sentence. It makes errors ungreppable.
> >>> Make it <80 somehow different.
> >>> 
> >> 
> >> Have already been discussed in this thread.
> > I suppose that we concluded to try to fit into 80 and split the string only
> > in case it is impossible.
> 
> I don’t think so. Anyways, Alexander could you please give your thoughts?

Nikita P. gives key_def.c as the example where we don't create constant
variables in the case. We shouldn't here too I think. At least it should
not be enforced.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-09-11 10:11           ` Alexander Turenko
@ 2018-09-11 10:22             ` Alex Khatskevich
  0 siblings, 0 replies; 46+ messages in thread
From: Alex Khatskevich @ 2018-09-11 10:22 UTC (permalink / raw)
  To: Alexander Turenko, Nikita Tatunov; +Cc: Nikita Pettik, tarantool-patches



On 11.09.2018 13:11, Alexander Turenko wrote:
> Hi!
>
> See below.
>
> WBR, Alexandr Turenko.
>
> On Tue, Sep 11, 2018 at 10:38:38AM +0300, Nikita Tatunov wrote:
>> Hello, thank you for comments.
>> See full diff is at the end of the letter.
>>
>>>>>> -					     "ESCAPE expression must be a single character",
>>>>>> +					     "ESCAPE expression must be a"
>>>>>> +					     " single character",
>>>>> Do not split error messages at the middle of a sentence. It makes errors ungreppable.
>>>>> Make it <80 somehow different.
>>>>>
>>>> Have already been discussed in this thread.
>>> I suppose that we concluded to try to fit into 80 and split the string only
>>> in case it is impossible.
>> I don’t think so. Anyways, Alexander could you please give your thoughts?
> Nikita P. gives key_def.c as the example where we don't create constant
> variables in the case. We shouldn't here too I think. At least it should
> not be enforced.
Actually, Nikita gave it as an example of file where 80 symbols rule is 
not broken
(it is not about using constants to avoid this).

If you can provide any arguments on why we should broke the line, while 
it is possible to
keep it as a whole by just creating constant variable in the same scope 
- I will accept it.

Otherwise, arguments for keeping all error messages non-broken which I 
have mentioned are very
important in my opinion and I insist that message is not broken.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-09-11  7:38         ` Nikita Tatunov
  2018-09-11 10:11           ` Alexander Turenko
@ 2018-09-11 12:03           ` Alex Khatskevich
  2018-10-18 20:28             ` Nikita Tatunov
  1 sibling, 1 reply; 46+ messages in thread
From: Alex Khatskevich @ 2018-09-11 12:03 UTC (permalink / raw)
  To: Nikita Tatunov; +Cc: tarantool-patches, Alexander Turenko

[-- Attachment #1: Type: text/plain, Size: 54451 bytes --]


>>>>>
>>>>> -    "ESCAPE expression must be a single character",
>>>>> +    "ESCAPE expression must be a"
>>>>> +    " single character",
>>>> Do not split error messages at the middle of a sentence. It makes 
>>>> errors ungreppable.
>>>> Make it <80 somehow different.
>>>>
>>>
>>> Have already been discussed in this thread.
>> I suppose that we concluded to try to fit into 80 and split the 
>> string only
>> in case it is impossible.
>
> I don’t think so. Anyways, Alexander could you please give your thoughts?
Discussed with Nikita, Alexander, Vladimir, Kirill... Conclusion: use 
`const char temp variable` if possible.
like this:
```
         const char *const err_msg =
             "ESCAPE expression must be a single character";
         if (sqlite3Utf8CharLen((char *)zEsc, -1) != 1) {
             sqlite3_result_error(context,
                          err_msg,
                          -1);
             return;
```

If it does not help (but it is) split the message.
>>> diff --git a/test/sql-tap/e_expr.test.lua b/test/sql-tap/e_expr.test.lua
>>> index 162026845..0d69e8535 100755
>>> --- a/test/sql-tap/e_expr.test.lua
>>> +++ b/test/sql-tap/e_expr.test.lua
>>> @@ -1,6 +1,6 @@
>>>  #!/usr/bin/env tarantool
>>>  test = require("sqltester")
>>> -test:plan(11521)
>>> +test:plan(10647)
>>>  --!./tcltestrunner.lua
>>>  -- 2010 July 16
>>> @@ -77,7 +77,7 @@ local operations = {
>>>      {"<>", "ne1"},
>>>      {"!=", "ne2"},
>>>      {"IS", "is"},
>>> -    {"LIKE", "like"},
>>> +--    {"LIKE", "like"},
>>>      {"AND", "and"},
>>>      {"OR", "or"},
>>>      {"MATCH", "match"},
>>> @@ -96,8 +96,9 @@ operations = {
>>>      {"<<", ">>", "&", "|"},
>>>      {"<", "<=", ">", ">="},
>>>  -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
>>> --- are waiting for their hour.
>>> -    {"=", "==", "!=", "<>", "LIKE"}, --"MATCH", "REGEXP"},
>>> +-- are waiting for their hour, don't confuse them
>>> +-- being commented with commenting of "LIKE".
>>> +    {"=", "==", "!=", "<>"}, --"LIKE"}, --"MATCH", "REGEXP"},
>> Delete Like. No one returns here.
>
> It’s a table of all of the operators thus I think it still worth 
> leaving it there.
> Who knows, it may be that someone will revive tests for LIKE.
Delete Like. No one returns here.
We do not need a garbage. Like is not relevant anymore for this test.
>
> diff --git a/extra/mkkeywordhash.c b/extra/mkkeywordhash.c
> index 990c4199f..1fee3a7f2 100644
> --- a/extra/mkkeywordhash.c
> +++ b/extra/mkkeywordhash.c
> @@ -159,7 +159,6 @@ static Keyword aKeywordTable[] = {
>    { "FOR",                    "TK_FOR",         TRIGGER,         
>  true  },
>    { "FOREIGN",                "TK_FOREIGN",     FKEY,           true  },
>    { "FROM",                   "TK_FROM",        ALWAYS,           
> true  },
> -  { "GLOB",                   "TK_LIKE_KW",     ALWAYS,           
> false },
>    { "GROUP",                  "TK_GROUP",       ALWAYS,           
> true  },
>    { "HAVING",                 "TK_HAVING",      ALWAYS,           
> true  },
>    { "IF",                     "TK_IF",          ALWAYS,           
> true  },
> diff --git a/src/box/sql/analyze.c b/src/box/sql/analyze.c
> index 5f73f026e..fc7588c3f 100644
> --- a/src/box/sql/analyze.c
> +++ b/src/box/sql/analyze.c
> @@ -829,7 +829,7 @@ analyzeOneTable(Parse * pParse,/* Parser context */
> return;
> }
> assert(pTab->tnum != 0);
> -if (sqlite3_strlike("\\_%", pTab->def->name, '\\') == 0) {
> +if (sql_strlike_ci("\\_%", pTab->def->name, '\\') == 0) {
> /* Do not gather statistics on system tables */
> return;
> }
> @@ -1333,11 +1333,10 @@ analysis_loader(void *data, int argc, char 
> **argv, char **unused)
> /* Position ptr at the end of stat string. */
> for (; *z == ' ' || (*z >= '0' && *z <= '9'); ++z);
> while (z[0]) {
> -if (sqlite3_strglob("unordered*", z) == 0) {
> +if (sql_strlike_cs("unordered%", z, '[') == 0)
> index->def->opts.stat->is_unordered = true;
> -} else if (sqlite3_strglob("noskipscan*", z) == 0) {
> +else if (sql_strlike_cs("noskipscan%", z, '[') == 0)
> index->def->opts.stat->skip_scan_enabled = false;
> -}
> while (z[0] != 0 && z[0] != ' ')
> z++;
> while (z[0] == ' ')
> diff --git a/src/box/sql/func.c b/src/box/sql/func.c
> index 66cae17b5..28b435ae3 100644
> --- a/src/box/sql/func.c
> +++ b/src/box/sql/func.c
> @@ -607,41 +607,38 @@ total_changes(sqlite3_context * context, int 
> NotUsed, sqlite3_value ** NotUsed2)
> sqlite3_result_int(context, sqlite3_total_changes(db));
>  }
> -/*
> - * A structure defining how to do GLOB-style comparisons.
> - */
> -struct compareInfo {
> -u8 matchAll;/* "*" or "%" */
> -u8 matchOne;/* "?" or "_" */
> -u8 matchSet;/* "[" or 0 */
> -u8 noCase;/* true to ignore case differences */
> -};
> -
>  /**
> - * Providing there are symbols in string s this
> - * macro returns UTF-8 code of character and
> - * promotes pointer to the next symbol in the string.
> - * Otherwise return code is SQL_END_OF_STRING.
> + * Providing there are symbols in string s this macro returns
> + * UTF-8 code of character and promotes pointer to the next
> + * symbol in the string. If s points to an invalid UTF-8 symbol
> + * return code is SQL_INVALID_UTF8_SYMBOL. If there're no symbols
> + * left in string s return code is SQL_END_OF_STRING.
>   */
>  #define Utf8Read(s, e) ucnv_getNextUChar(pUtf8conv, &(s), (e), &(status))
>  #define SQL_END_OF_STRING        0xffff
>  #define SQL_INVALID_UTF8_SYMBOL  0xfffd
> -static const struct compareInfo globInfo = { '*', '?', '[', 0 };
> +/**
> + * If SQLITE_CASE_SENSITIVE_LIKE is not defined, then the LIKE
> + * operator is not case sensitive.
> + */
> +static const int case_insensitive_like = 1;
> -/* The correct SQL-92 behavior is for the LIKE operator to ignore
> - * case.  Thus  'a' LIKE 'A' would be true.
> +/**
> + * If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE
> + * operator is case sensitive causing 'a' LIKE 'A' to be false.
>   */
> -static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
> +static const int case_sensitive_like = 0;
> -/* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
> - * is case sensitive causing 'a' LIKE 'A' to be false
> +/**
> + * Wildcards.
>   */
> -static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
> +#define match_one '_'
> +#define match_all '%'
> -/*
> - * Possible error returns from sql_utf8_pattern_compare()
> +/**
> + * Possible error returns from sql_utf8_pattern_compare().
>   */
>  #define SQL_MATCH                0
>  #define SQL_NOMATCH              1
> @@ -650,138 +647,91 @@ static const struct compareInfo likeInfoAlt = { 
> '%', '_', 0, 0 };
>  /**
>   * Compare two UTF-8 strings for equality where the first string
> - * is a GLOB or LIKE expression.
> - *
> - * Globbing rules:
> - *
> - *      '*'       Matches any sequence of zero or more characters.
> - *
> - *      '?'       Matches exactly one character.
> - *
> - *     [...]      Matches one character from the enclosed list of
> - *                characters.
> - *
> - *     [^...]     Matches one character not in the enclosed list.
> - *
> - * With the [...] and [^...] matching, a ']' character can be
> - * included in the list by making it the first character after
> - * '[' or '^'. A range of characters can be specified using '-'.
> - * Example: "[a-z]" matches any single lower-case letter.
> - * To match a '-', make it the last character in the list.
> + * is a LIKE expression.
>   *
>   * Like matching rules:
>   *
> - *      '%'       Matches any sequence of zero or more characters.
> + *      '%'       Matches any sequence of zero or more
> + *                characters.
>   *
>   *      '_'       Matches any one character.
>   *
> - *      Ec        Where E is the "esc" character and c is any other
> - *                character, including '%', '_', and esc, match
> - *                exactly c.
> - *
> - * The comments within this routine usually assume glob matching.
> + *      Ec        Where E is the "esc" character and c is any
> + *                other character, including '%', '_', and esc,
> + *                match exactly c.
>   *
>   * This routine is usually quick, but can be N**2 in the worst
>   * case.
>   *
>   * @param pattern String containing comparison pattern.
>   * @param string String being compared.
> - * @param compareInfo Information about how to compare.
> - * @param matchOther The escape char (LIKE) or '[' (GLOB).
> + * @param is_like_ci true if LIKE is case insensitive.
> + * @param match_other The escape char for LIKE.
>   *
>   * @retval SQL_MATCH:               Match.
>   *  SQL_NOMATCH:             No match.
> - *  SQL_NOWILDCARDMATCH:     No match in spite of having *
> - *   or % wildcards.
> + *  SQL_NOWILDCARDMATCH:     No match in spite of having %
> + *   wildcard.
>   *  SQL_INVALID_PATTERN:     Pattern contains invalid
>   *   symbol.
>   */
>  static int
>  sql_utf8_pattern_compare(const char *pattern,
> const char *string,
> -const struct compareInfo *pInfo,
> -UChar32 matchOther)
> +const int is_like_ci,
> +UChar32 match_other)
>  {
> /* Next pattern and input string chars */
> UChar32 c, c2;
> -/* "?" or "_" */
> -UChar32 matchOne = pInfo->matchOne;
> -/* "*" or "%" */
> -UChar32 matchAll = pInfo->matchAll;
> -/* True if uppercase==lowercase */
> -UChar32 noCase = pInfo->noCase;
> /* One past the last escaped input char */
> const char *zEscaped = 0;
> -const char * pattern_end = pattern + strlen(pattern);
> -const char * string_end = string + strlen(string);
> +const char *pattern_end = pattern + strlen(pattern);
> +const char *string_end = string + strlen(string);
> UErrorCode status = U_ZERO_ERROR;
> while (pattern < pattern_end) {
> c = Utf8Read(pattern, pattern_end);
> if (c == SQL_INVALID_UTF8_SYMBOL)
> return SQL_INVALID_PATTERN;
> -if (c == matchAll) {/* Match "*" */
> -/* Skip over multiple "*" characters in
> -* the pattern. If there are also "?"
> +if (c == match_all) {
> +/**
> +* Skip over multiple "%" characters in
> +* the pattern. If there are also "_"
> * characters, skip those as well, but
> * consume a single character of the
> -* input string for each "?" skipped.
> +* input string for each "_" skipped.
> */
> while ((c = Utf8Read(pattern, pattern_end)) !=
>       SQL_END_OF_STRING) {
> if (c == SQL_INVALID_UTF8_SYMBOL)
> return SQL_INVALID_PATTERN;
> -if (c != matchAll && c != matchOne)
> +if (c != match_all && c != match_one)
> break;
> -if (c == matchOne &&
> +if (c == match_one &&
>    (c2 = Utf8Read(string, string_end)) ==
>    SQL_END_OF_STRING)
> return SQL_NOWILDCARDMATCH;
> if (c2 == SQL_INVALID_UTF8_SYMBOL)
> return SQL_NOMATCH;
> }
> -/*
> -* "*" at the end of the pattern matches.
> +/**
> +* "%" at the end of the pattern matches.
> */
> if (c == SQL_END_OF_STRING) {
> return SQL_MATCH;
> }
> -if (c == matchOther) {
> -if (pInfo->matchSet == 0) {
> -c = Utf8Read(pattern, pattern_end);
> -if (c == SQL_INVALID_UTF8_SYMBOL)
> -return SQL_INVALID_PATTERN;
> -if (c == SQL_END_OF_STRING)
> -return SQL_NOWILDCARDMATCH;
> -} else {
> -/* "[...]" immediately
> -* follows the "*". We
> -* have to do a slow
> -* recursive search in
> -* this case, but it is
> -* an unusual case.
> -*/
> -assert(matchOther < 0x80);
> -while (string < string_end) {
> -int bMatch =
> -   sql_utf8_pattern_compare(
> -&pattern[-1],
> -string,
> -pInfo,
> -matchOther);
> -if (bMatch != SQL_NOMATCH)
> -return bMatch;
> -c = Utf8Read(string, string_end);
> -if (c == SQL_INVALID_UTF8_SYMBOL)
> -return SQL_NOMATCH;
> -}
> +if (c == match_other) {
> +c = Utf8Read(pattern, pattern_end);
> +if (c == SQL_INVALID_UTF8_SYMBOL)
> +return SQL_INVALID_PATTERN;
> +if (c == SQL_END_OF_STRING)
> return SQL_NOWILDCARDMATCH;
> -}
> }
> -/* At this point variable c contains the
> +/**
> +* At this point variable c contains the
> * first character of the pattern string
> -* past the "*". Search in the input
> +* past the "%". Search in the input
> * string for the first matching
> * character and recursively continue the
> * match from that point.
> @@ -793,7 +743,7 @@ sql_utf8_pattern_compare(const char *pattern,
> */
> int bMatch;
> -if (noCase)
> +if (is_like_ci)
> c = u_tolower(c);
> while (string < string_end){
> /**
> @@ -809,7 +759,7 @@ sql_utf8_pattern_compare(const char *pattern,
> c2 = Utf8Read(string, string_end);
> if (c2 == SQL_INVALID_UTF8_SYMBOL)
> return SQL_NOMATCH;
> -if (!noCase) {
> +if (!is_like_ci) {
> if (c2 != c)
> continue;
> } else {
> @@ -818,79 +768,27 @@ sql_utf8_pattern_compare(const char *pattern,
> }
> bMatch = sql_utf8_pattern_compare(pattern,
>  string,
> - pInfo,
> - matchOther);
> + is_like_ci,
> + match_other);
> if (bMatch != SQL_NOMATCH)
> return bMatch;
> }
> return SQL_NOWILDCARDMATCH;
> }
> -if (c == matchOther) {
> -if (pInfo->matchSet == 0) {
> -c = Utf8Read(pattern, pattern_end);
> -if (c == SQL_INVALID_UTF8_SYMBOL)
> -return SQL_INVALID_PATTERN;
> -if (c == SQL_END_OF_STRING)
> -return SQL_NOMATCH;
> -zEscaped = pattern;
> -} else {
> -UChar32 prior_c = 0;
> -int seen = 0;
> -int invert = 0;
> -c = Utf8Read(string, string_end);
> -if (c == SQL_INVALID_UTF8_SYMBOL)
> -return SQL_NOMATCH;
> -if (string == string_end)
> -return SQL_NOMATCH;
> -c2 = Utf8Read(pattern, pattern_end);
> -if (c2 == SQL_INVALID_UTF8_SYMBOL)
> -return SQL_INVALID_PATTERN;
> -if (c2 == '^') {
> -invert = 1;
> -c2 = Utf8Read(pattern, pattern_end);
> -if (c2 == SQL_INVALID_UTF8_SYMBOL)
> -return SQL_INVALID_PATTERN;
> -}
> -if (c2 == ']') {
> -if (c == ']')
> -seen = 1;
> -c2 = Utf8Read(pattern, pattern_end);
> -if (c2 == SQL_INVALID_UTF8_SYMBOL)
> -return SQL_INVALID_PATTERN;
> -}
> -while (c2 != SQL_END_OF_STRING && c2 != ']') {
> -if (c2 == '-' && pattern[0] != ']'
> -   && pattern < pattern_end
> -   && prior_c > 0) {
> -c2 = Utf8Read(pattern, pattern_end);
> -if (c2 == SQL_INVALID_UTF8_SYMBOL)
> -return SQL_INVALID_PATTERN;
> -if (c >= prior_c && c <= c2)
> -seen = 1;
> -prior_c = 0;
> -} else {
> -if (c == c2) {
> -seen = 1;
> -}
> -prior_c = c2;
> -}
> -c2 = Utf8Read(pattern, pattern_end);
> -if (c2 == SQL_INVALID_UTF8_SYMBOL)
> -return SQL_INVALID_PATTERN;
> -}
> -if (pattern == pattern_end ||
> -   (seen ^ invert) == 0) {
> -return SQL_NOMATCH;
> -}
> -continue;
> -}
> +if (c == match_other) {
> +c = Utf8Read(pattern, pattern_end);
> +if (c == SQL_INVALID_UTF8_SYMBOL)
> +return SQL_INVALID_PATTERN;
> +if (c == SQL_END_OF_STRING)
> +return SQL_NOMATCH;
> +zEscaped = pattern;
> }
> c2 = Utf8Read(string, string_end);
> if (c2 == SQL_INVALID_UTF8_SYMBOL)
> return SQL_NOMATCH;
> if (c == c2)
> continue;
> -if (noCase){
> +if (is_like_ci) {
> /**
> * Small optimisation. Reduce number of
> * calls to u_tolower function. SQL
> @@ -903,7 +801,7 @@ sql_utf8_pattern_compare(const char *pattern,
>    c == u_tolower(c2))
> continue;
> }
> -if (c == matchOne && pattern != zEscaped &&
> +if (c == match_one && pattern != zEscaped &&
>    c2 != SQL_END_OF_STRING)
> continue;
> return SQL_NOMATCH;
> @@ -911,55 +809,52 @@ sql_utf8_pattern_compare(const char *pattern,
> return string == string_end ? SQL_MATCH : SQL_NOMATCH;
>  }
> -/*
> - * The sqlite3_strglob() interface.  Return 0 on a match (like 
> strcmp()) and
> - * non-zero if there is no match.
> +/**
> + * Compare two UTF-8 strings for equality using case sensitive
> + * sql_utf8_pattern_compare.
>   */
>  int
> -sqlite3_strglob(const char *zGlobPattern, const char *zString)
> +sql_strlike_cs(const char *zPattern, const char *zStr, unsigned int esc)
>  {
> -return sql_utf8_pattern_compare(zGlobPattern, zString, &globInfo, '[');
> +return sql_utf8_pattern_compare(zPattern, zStr, case_sensitive_like, 
> esc);
>  }
> -/*
> - * The sqlite3_strlike() interface.  Return 0 on a match and non-zero for
> - * a miss - like strcmp().
> +/**
> + * Compare two UTF-8 strings for equality using case insensitive
> + * sql_utf8_pattern_compare.
>   */
>  int
> -sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc)
> +sql_strlike_ci(const char *zPattern, const char *zStr, unsigned int esc)
>  {
> -return sql_utf8_pattern_compare(zPattern, zStr, &likeInfoNorm, esc);
> +return sql_utf8_pattern_compare(zPattern, zStr, 
> case_insensitive_like, esc);
>  }
> -/*
> - * Count the number of times that the LIKE operator (or GLOB which is
> - * just a variation of LIKE) gets called.  This is used for testing
> - * only.
> +/**
> + * Count the number of times that the LIKE operator gets called.
> + * This is used for testing only.
>   */
>  #ifdef SQLITE_TEST
>  int sqlite3_like_count = 0;
>  #endif
> -/*
> - * Implementation of the like() SQL function.  This function implements
> - * the build-in LIKE operator.  The first argument to the function is the
> - * pattern and the second argument is the string.  So, the SQL 
> statements:
> +/**
> + * Implementation of the like() SQL function. This function
> + * implements the built-in LIKE operator. The first argument to
> + * the function is the pattern and the second argument is the
> + * string. So, the SQL statements of the following type:
>   *
>   *       A LIKE B
>   *
> - * is implemented as like(B,A).
> - *
> - * This same function (with a different compareInfo structure) computes
> - * the GLOB operator.
> + * are implemented as like(B,A).
>   */
>  static void
> -likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
> +likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
>  {
> const char *zA, *zB;
> u32 escape;
> int nPat;
> sqlite3 *db = sqlite3_context_db_handle(context);
> -struct compareInfo *pInfo = sqlite3_user_data(context);
> +int *is_like_ci = sqlite3_user_data(context);
>  #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
> if (sqlite3_value_type(argv[0]) == SQLITE_BLOB
> @@ -974,8 +869,9 @@ likeFunc(sqlite3_context * context, int argc, 
> sqlite3_value ** argv)
> zB = (const char *) sqlite3_value_text(argv[0]);
> zA = (const char *) sqlite3_value_text(argv[1]);
> -/* Limit the length of the LIKE or GLOB pattern to avoid
> -* problems of deep recursion and N*N behavior in
> +/**
> +* Limit the length of the LIKE pattern to avoid problems
> +* of deep recursion and N*N behavior in
> * sql_utf8_pattern_compare().
> */
> nPat = sqlite3_value_bytes(argv[0]);
> @@ -983,28 +879,29 @@ likeFunc(sqlite3_context * context, int argc, 
> sqlite3_value ** argv)
> testcase(nPat == db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] + 1);
> if (nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]) {
> sqlite3_result_error(context,
> -    "LIKE or GLOB pattern too complex", -1);
> +    "LIKE pattern is too complex", -1);
> return;
> }
> /* Encoding did not change */
> assert(zB == (const char *) sqlite3_value_text(argv[0]));
> if (argc == 3) {
> -/* The escape character string must consist of a single UTF-8 character.
> -* Otherwise, return an error.
> +/**
> +* The escape character string must consist of a
> +* single UTF-8 character. Otherwise, return an
> +* error.
> */
> const unsigned char *zEsc = sqlite3_value_text(argv[2]);
> if (zEsc == 0)
> return;
> if (sqlite3Utf8CharLen((char *)zEsc, -1) != 1) {
> sqlite3_result_error(context,
> -    "ESCAPE expression must be a single character",
> +    "ESCAPE expression must be a"
> +    " single character",
>     -1);
> return;
> }
> escape = sqlite3Utf8Read(&zEsc);
> -} else {
> -escape = pInfo->matchSet;
> }
> if (!zA || !zB)
> return;
> @@ -1012,10 +909,10 @@ likeFunc(sqlite3_context * context, int argc, 
> sqlite3_value ** argv)
> sqlite3_like_count++;
>  #endif
> int res;
> -res = sql_utf8_pattern_compare(zB, zA, pInfo, escape);
> +res = sql_utf8_pattern_compare(zB, zA, *is_like_ci, escape);
> if (res == SQL_INVALID_PATTERN) {
> -sqlite3_result_error(context, "LIKE or GLOB pattern can only"
> -    " contain UTF-8 characters", -1);
> +sqlite3_result_error(context, "LIKE pattern can only contain"
> +    " UTF-8 characters", -1);
> return;
> }
> sqlite3_result_int(context, res == SQL_MATCH);
> @@ -1811,64 +1708,54 @@ setLikeOptFlag(sqlite3 * db, const char 
> *zName, u8 flagVal)
> }
>  }
> -/*
> - * Register the built-in LIKE and GLOB functions.  The caseSensitive
> - * parameter determines whether or not the LIKE operator is case
> - * sensitive.  GLOB is always case sensitive.
> +/**
> + * Register the built-in LIKE function.
> + *
> + * @param db database structure.
> + * @param is_case_sensitive whether like should be case sensitive
> + * or not.
> + *
> + * @retval none.
>   */
>  void
> -sqlite3RegisterLikeFunctions(sqlite3 * db, int caseSensitive)
> +sqlite3RegisterLikeFunctions(sqlite3 *db, int is_case_sensitive)
>  {
> -struct compareInfo *pInfo;
> -if (caseSensitive) {
> -pInfo = (struct compareInfo *)&likeInfoAlt;
> -} else {
> -pInfo = (struct compareInfo *)&likeInfoNorm;
> -}
> -sqlite3CreateFunc(db, "LIKE", 2, 0, pInfo, likeFunc, 0, 0, 0);
> -sqlite3CreateFunc(db, "LIKE", 3, 0, pInfo, likeFunc, 0, 0, 0);
> -sqlite3CreateFunc(db, "GLOB", 2, 0, (struct compareInfo *)&globInfo, 
> likeFunc, 0, 0, 0);
> -setLikeOptFlag(db, "GLOB", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
> +int *is_like_ci;
> +if (is_case_sensitive)
> +is_like_ci = (int *)&case_sensitive_like;
> +else
> +is_like_ci = (int *)&case_insensitive_like;
> +sqlite3CreateFunc(db, "LIKE", 2, 0, is_like_ci, likeFunc, 0, 0, 0);
> +sqlite3CreateFunc(db, "LIKE", 3, 0, is_like_ci, likeFunc, 0, 0, 0);
> setLikeOptFlag(db, "LIKE",
> -      caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) :
> -      SQLITE_FUNC_LIKE);
> +      is_case_sensitive ? (SQLITE_FUNC_LIKE |
> +      SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
>  }
> -/*
> - * pExpr points to an expression which implements a function.  If
> - * it is appropriate to apply the LIKE optimization to that function
> - * then set aWc[0] through aWc[2] to the wildcard characters and
> - * return TRUE.  If the function is not a LIKE-style function then
> - * return FALSE.
> +/**
> + * Check if the function implements LIKE-style comparison & if it
> + * is appropriate to apply a LIKE query optimization.
> + *
> + * @param db database structure.
> + * @param pExpr pointer to a function-implementing expression.
> + * @param is_like_ci true if LIKE is case insensitive.
>   *
> - * *pIsNocase is set to true if uppercase and lowercase are 
> equivalent for
> - * the function (default for LIKE).  If the function makes the 
> distinction
> - * between uppercase and lowercase (as does GLOB) then *pIsNocase is 
> set to
> - * false.
> + * @retval 0 if it's appropriate to apply optimization.
> + *         1 if it's not.
>   */
>  int
> -sqlite3IsLikeFunction(sqlite3 * db, Expr * pExpr, int *pIsNocase, 
> char *aWc)
> +sql_is_like_func(sqlite3 *db, Expr *pExpr, int *is_like_ci)
>  {
> FuncDef *pDef;
> -if (pExpr->op != TK_FUNCTION
> -   || !pExpr->x.pList || pExpr->x.pList->nExpr != 2) {
> +if (pExpr->op != TK_FUNCTION || !pExpr->x.pList ||
> +   pExpr->x.pList->nExpr != 2)
> return 0;
> -}
> assert(!ExprHasProperty(pExpr, EP_xIsSelect));
> pDef = sqlite3FindFunction(db, pExpr->u.zToken, 2, 0);
> if (NEVER(pDef == 0) || (pDef->funcFlags & SQLITE_FUNC_LIKE) == 0) {
> return 0;
> }
> -
> -/* The memcpy() statement assumes that the wildcard characters are
> -* the first three statements in the compareInfo structure.  The
> -* asserts() that follow verify that assumption
> -*/
> -memcpy(aWc, pDef->pUserData, 3);
> -assert((char *)&likeInfoAlt == (char *)&likeInfoAlt.matchAll);
> -assert(&((char *)&likeInfoAlt)[1] == (char *)&likeInfoAlt.matchOne);
> -assert(&((char *)&likeInfoAlt)[2] == (char *)&likeInfoAlt.matchSet);
> -*pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE) == 0;
> +*is_like_ci = (pDef->funcFlags & SQLITE_FUNC_CASE) == 0;
> return 1;
>  }
> @@ -1962,16 +1849,14 @@ sqlite3RegisterBuiltinFunctions(void)
> AGGREGATE(group_concat, 2, 0, 0, groupConcatStep,
>  groupConcatFinalize),
> -LIKEFUNC(glob, 2, &globInfo,
> -SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE),
>  #ifdef SQLITE_CASE_SENSITIVE_LIKE
> -LIKEFUNC(like, 2, &likeInfoAlt,
> +LIKEFUNC(like, 2, &case_sensitive_like,
> SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE),
> -LIKEFUNC(like, 3, &likeInfoAlt,
> +LIKEFUNC(like, 3, &case_sensitive_like,
> SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE),
>  #else
> -LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
> -LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
> +LIKEFUNC(like, 2, &case_insensitive_like, SQLITE_FUNC_LIKE),
> +LIKEFUNC(like, 3, &case_insensitive_like, SQLITE_FUNC_LIKE),
>  #endif
>  #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
> FUNCTION(unknown, -1, 0, 0, unknownFunc),
> diff --git a/src/box/sql/pragma.c b/src/box/sql/pragma.c
> index 5fb29c75c..26a602b23 100644
> --- a/src/box/sql/pragma.c
> +++ b/src/box/sql/pragma.c
> @@ -771,8 +771,10 @@ sqlite3Pragma(Parse * pParse, Token * pId,/* 
> First part of [schema.]id field */
> }
>  #endif
> -/* Reinstall the LIKE and GLOB functions.  The variant of LIKE *
> -* used will be case sensitive or not depending on the RHS.
> +/**
> +* Reinstall the LIKE and functions. The variant
> +* of LIKE * used will be case sensitive or not
> +* depending on the RHS.
> */
> case PragTyp_CASE_SENSITIVE_LIKE:{
> if (zRight) {
> diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
> index e7a02dc1d..a805adf22 100644
> --- a/src/box/sql/sqliteInt.h
> +++ b/src/box/sql/sqliteInt.h
> @@ -565,16 +565,15 @@ char *
>  sqlite3_vsnprintf(int, char *, const char *, va_list);
>  int
> -sqlite3_strlike(const char *zGlob, const char *zStr,
> -unsigned int cEsc);
> +sql_strlike_cs(const char *zLike, const char *zStr, unsigned int cEsc);
> +
> +int
> +sql_strlike_ci(const char *zLike, const char *zStr, unsigned int cEsc);
>  typedef void (*sqlite3_destructor_type) (void *);
>  #define SQLITE_STATIC      ((sqlite3_destructor_type)0)
>  #define SQLITE_TRANSIENT   ((sqlite3_destructor_type)-1)
> -int
> -sqlite3_strglob(const char *zGlob, const char *zStr);
> -
>  int
>  sqlite3_prepare(sqlite3 * db,/* Database handle */
> const char *zSql,/* SQL statement, UTF-8 encoded */
> @@ -701,9 +700,6 @@ struct on_conflict {
> enum on_conflict_action optimized_action;
>  };
> -void *
> -sqlite3_user_data(sqlite3_context *);
> -
>  void
>  sqlite3_randomness(int N, void *P);
> @@ -2355,7 +2351,7 @@ struct Expr {
>  #define EP_Distinct  0x000010/* Aggregate function with DISTINCT 
> keyword */
>  #define EP_VarSelect 0x000020/* pSelect is correlated, not constant */
>  #define EP_DblQuoted 0x000040/* token.z was originally in "..." */
> -#define EP_InfixFunc 0x000080/* True for an infix function: LIKE, 
> GLOB, etc */
> +#define EP_InfixFunc 0x000080/* True for an infix function: LIKE, etc */
>  #define EP_Collate   0x000100/* Tree contains a TK_COLLATE operator */
>  #define EP_Generic   0x000200/* Ignore COLLATE or affinity on this 
> tree */
>  #define EP_IntValue  0x000400/* Integer value contained in u.iValue */
> @@ -4378,7 +4374,7 @@ index_column_count(const Index *);
>  bool
>  index_is_unique_not_null(const Index *);
>  void sqlite3RegisterLikeFunctions(sqlite3 *, int);
> -int sqlite3IsLikeFunction(sqlite3 *, Expr *, int *, char *);
> +int sql_is_like_func(sqlite3 *db, Expr *pExpr, int *is_case_insensitive);
>  void sqlite3SchemaClear(sqlite3 *);
>  Schema *sqlite3SchemaCreate(sqlite3 *);
>  int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *,
> diff --git a/src/box/sql/sqliteLimit.h b/src/box/sql/sqliteLimit.h
> index b88c9c6d3..e76353aff 100644
> --- a/src/box/sql/sqliteLimit.h
> +++ b/src/box/sql/sqliteLimit.h
> @@ -164,8 +164,7 @@ enum {
>  #endif
>  /*
> - * Maximum length (in bytes) of the pattern in a LIKE or GLOB
> - * operator.
> + * Maximum length (in bytes) of the pattern in a LIKE operator.
>   */
>  #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH
>  #define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000
> diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
> index 0c978142d..3f10f4d68 100644
> --- a/src/box/sql/vdbe.c
> +++ b/src/box/sql/vdbe.c
> @@ -5521,7 +5521,7 @@ vdbe_return:
> testcase( nVmStep>0);
> p->aCounter[SQLITE_STMTSTATUS_VM_STEP] += (int)nVmStep;
> assert(rc!=SQLITE_OK || nExtraDelete==0
> -|| sqlite3_strlike("DELETE%",p->zSql,0)!=0
> +|| sql_strlike_ci("DELETE%", p->zSql, 0) != 0
> );
> return rc;
> diff --git a/src/box/sql/wherecode.c b/src/box/sql/wherecode.c
> index c35c25ac4..f864ea7fa 100644
> --- a/src/box/sql/wherecode.c
> +++ b/src/box/sql/wherecode.c
> @@ -339,7 +339,7 @@ sqlite3WhereAddScanStatus(Vdbe * v,/* Vdbe to add 
> scanstatus entry to */
>   * automatically disabled.  In this way, terms get disabled if derived
>   * virtual terms are tested first.  For example:
>   *
> - *      x GLOB 'abc*' AND x>='abc' AND x<'acd'
> + *      x LIKE 'abc%' AND x>='abc' AND x<'acd'
>   *      \___________/     \______/     \_____/
>   *         parent          child1       child2
>   *
> diff --git a/src/box/sql/whereexpr.c b/src/box/sql/whereexpr.c
> index 612868695..2d9fb6453 100644
> --- a/src/box/sql/whereexpr.c
> +++ b/src/box/sql/whereexpr.c
> @@ -218,38 +218,61 @@ operatorMask(int op)
> return c;
>  }
> +/**
> + * Wildcard characters.
> + */
> +#define match_one '_'
> +#define match_all '%'
If possible - move the define to a header which both (whereexpr and 
func) file include.
This also require to give more descriptive name, e.g. LIKE_MATCH_ONE.
> +
>  #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
> -/*
> - * Check to see if the given expression is a LIKE or GLOB operator that
> - * can be optimized using inequality constraints.  Return TRUE if it is
> - * so and false if not.
> +/**
> + * Check to see if the given expression is a LIKE operator that
> + * can be optimized using inequality constraints.
>   *
> - * In order for the operator to be optimizible, the RHS must be a string
> - * literal that does not begin with a wildcard.  The LHS must be a column
> - * that may only be NULL, a string, or a BLOB, never a number. The
> - * collating sequence for the column on the LHS must be appropriate for
> - * the operator.
> + * In order for the operator to be optimizible, the RHS must be a
> + * string literal that does not begin with a wildcard. The LHS
> + * must be a column that may only be NULL, a string, or a BLOB,
> + * never a number. The collating sequence for the column on the
> + * LHS must be appropriate for the operator.
> + *
> + * @param pParse      Parsing and code generating context.
> + * @param pExpr       Test this expression.
> + * @param ppPrefix    Pointer to TK_STRING expression with
> + *     pattern prefix.
> + * @param pisComplete True if the only wildcard is '%' in the
> + *      last character.
> + * @param pnoCase     True if case insensitive.
> + *
> + * @retval True if the given expr is a LIKE operator & is
> + *  optimizable using inequality constraints.
> + *   False if not.
>   */
>  static int
> -isLikeOrGlob(Parse * pParse,/* Parsing and code generating context */
> -    Expr * pExpr,/* Test this expression */
> -    Expr ** ppPrefix,/* Pointer to TK_STRING expression with pattern 
> prefix */
> -    int *pisComplete,/* True if the only wildcard is % in the last 
> character */
> -    int *pnoCase/* True if uppercase is equivalent to lowercase */
> -    )
> +is_like(Parse *pParse,
> +Expr *pExpr,
> +Expr **ppPrefix,
> +int *pisComplete,
> +int *pnoCase)
>  {
> -const char *z = 0;/* String on RHS of LIKE operator */
> -Expr *pRight, *pLeft;/* Right and left size of LIKE operator */
> -ExprList *pList;/* List of operands to the LIKE operator */
> -int c;/* One character in z[] */
> -int cnt;/* Number of non-wildcard prefix characters */
> -char wc[3];/* Wildcard characters */
> -sqlite3 *db = pParse->db;/* Database connection */
> +/* String on RHS of LIKE operator */
> +const char *z = 0;
> +/* Right and left size of LIKE operator */
> +Expr *pRight, *pLeft;
> +/* List of operands to the LIKE operator */
> +ExprList *pList;
> +/* One character in z[] */
> +int c;
> +/* Number of non-wildcard prefix characters */
> +int cnt;
> +/* Database connection */
> +sqlite3 *db = pParse->db;
> sqlite3_value *pVal = 0;
> -int op;/* Opcode of pRight */
> -int rc;/* Result code to return */
> +/* Opcode of pRight */
> +int op;
> +/* Result code to return */
> +int rc;
> -if (!sqlite3IsLikeFunction(db, pExpr, pnoCase, wc)) {
> +if (!sql_is_like_func(db, pExpr, pnoCase)) {
> return 0;
> }
> pList = pExpr->x.pList;
> @@ -257,8 +280,9 @@ isLikeOrGlob(Parse * pParse,/* Parsing and code 
> generating context */
> /* Value might be numeric */
> if (pLeft->op != TK_COLUMN ||
>    sqlite3ExprAffinity(pLeft) != AFFINITY_TEXT) {
> -/* IMP: R-02065-49465 The left-hand side of the LIKE or GLOB operator 
> must
> -* be the name of an indexed column with TEXT affinity.
> +/* IMP: R-02065-49465 The left-hand side of the
> +* LIKE operator must be the name of an indexed
> +* column with TEXT affinity.
> */
> return 0;
> }
> @@ -281,13 +305,11 @@ isLikeOrGlob(Parse * pParse,/* Parsing and code 
> generating context */
> }
> if (z) {
> cnt = 0;
> -while ((c = z[cnt]) != 0 && c != wc[0] && c != wc[1]
> -      && c != wc[2]) {
> +while ((c = z[cnt]) != 0 && c != match_one && c != match_all)
> cnt++;
> -}
> if (cnt != 0 && 255 != (u8) z[cnt - 1]) {
> Expr *pPrefix;
> -*pisComplete = c == wc[0] && z[cnt + 1] == 0;
> +*pisComplete = c == match_all && z[cnt + 1] == 0;
> pPrefix = sqlite3Expr(db, TK_STRING, z);
> if (pPrefix)
> pPrefix->u.zToken[cnt] = 0;
> @@ -943,19 +965,32 @@ exprAnalyze(SrcList * pSrc,/* the FROM clause */
>    int idxTerm/* Index of the term to be analyzed */
>      )
>  {
> -WhereInfo *pWInfo = pWC->pWInfo;/* WHERE clause processing context */
> -WhereTerm *pTerm;/* The term to be analyzed */
> -WhereMaskSet *pMaskSet;/* Set of table index masks */
> -Expr *pExpr;/* The expression to be analyzed */
> -Bitmask prereqLeft;/* Prerequesites of the pExpr->pLeft */
> -Bitmask prereqAll;/* Prerequesites of pExpr */
> -Bitmask extraRight = 0;/* Extra dependencies on LEFT JOIN */
> -Expr *pStr1 = 0;/* RHS of LIKE/GLOB operator */
> -int isComplete = 0;/* RHS of LIKE/GLOB ends with wildcard */
> -int noCase = 0;/* uppercase equivalent to lowercase */
> -int op;/* Top-level operator.  pExpr->op */
> -Parse *pParse = pWInfo->pParse;/* Parsing context */
> -sqlite3 *db = pParse->db;/* Database connection */
> +/* WHERE clause processing context */
> +WhereInfo *pWInfo = pWC->pWInfo;
> +/* The term to be analyzed */
> +WhereTerm *pTerm;
> +/* Set of table index masks */
> +WhereMaskSet *pMaskSet;
> +/* The expression to be analyzed */
> +Expr *pExpr;
> +/* Prerequesites of the pExpr->pLeft */
> +Bitmask prereqLeft;
> +/* Prerequesites of pExpr */
> +Bitmask prereqAll;
> +/* Extra dependencies on LEFT JOIN */
> +Bitmask extraRight = 0;
> +/* RHS of LIKE operator */
> +Expr *pStr1 = 0;
> +/* RHS of LIKE ends with wildcard */
> +int isComplete = 0;
> +/* uppercase equivalent to lowercase */
> +int noCase = 0;
> +/* Top-level operator. pExpr->op */
> +int op;
> +/* Parsing context */
> +Parse *pParse = pWInfo->pParse;
> +/* Database connection */
> +sqlite3 *db = pParse->db;
> if (db->mallocFailed) {
> return;
> @@ -1111,37 +1146,44 @@ exprAnalyze(SrcList * pSrc,/* the FROM clause */
>  #endif/* SQLITE_OMIT_OR_OPTIMIZATION */
>  #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
> -/* Add constraints to reduce the search space on a LIKE or GLOB
> +/**
> +* Add constraints to reduce the search space on a LIKE
> * operator.
> *
> -* A like pattern of the form "x LIKE 'aBc%'" is changed into constraints
> +* A like pattern of the form "x LIKE 'aBc%'" is changed
> +* into constraints:
> *
> *          x>='ABC' AND x<'abd' AND x LIKE 'aBc%'
> *
> -* The last character of the prefix "abc" is incremented to form the
> -* termination condition "abd".  If case is not significant (the default
> -* for LIKE) then the lower-bound is made all uppercase and the upper-
> -* bound is made all lowercase so that the bounds also work when comparing
> -* BLOBs.
> +* The last character of the prefix "abc" is incremented
> +* to form the termination condition "abd". If case is
> +* not significant (the default for LIKE) then the
> +* lower-bound is made all uppercase and the upper-bound
> +* is made all lowercase so that the bounds also work
> +* when comparing BLOBs.
> */
> if (pWC->op == TK_AND
> -   && isLikeOrGlob(pParse, pExpr, &pStr1, &isComplete, &noCase)
> -   ) {
> -Expr *pLeft;/* LHS of LIKE/GLOB operator */
> -Expr *pStr2;/* Copy of pStr1 - RHS of LIKE/GLOB operator */
> +   && is_like(pParse, pExpr, &pStr1, &isComplete, &noCase)) {
> +/* LHS of LIKE operator */
> +Expr *pLeft;
> +/* Copy of pStr1 - RHS of LIKE operator */
> +Expr *pStr2;
> Expr *pNewExpr1;
> Expr *pNewExpr2;
> int idxNew1;
> int idxNew2;
> -const char *zCollSeqName;/* Name of collating sequence */
> +/* Name of collating sequence */
> +const char *zCollSeqName;
> const u16 wtFlags = TERM_LIKEOPT | TERM_VIRTUAL | TERM_DYNAMIC;
> pLeft = pExpr->x.pList->a[1].pExpr;
> pStr2 = sqlite3ExprDup(db, pStr1, 0);
> -/* Convert the lower bound to upper-case and the upper bound to
> -* lower-case (upper-case is less than lower-case in ASCII) so that
> -* the range constraints also work for BLOBs
> +/**
> +* Convert the lower bound to upper-case and the
> +* upper bound to lower-case (upper-case is less
> +* than lower-case in ASCII) so that the range
> +* constraints also work for BLOBs
> */
> if (noCase && !pParse->db->mallocFailed) {
> int i;
> diff --git a/test/sql-tap/alter.test.lua b/test/sql-tap/alter.test.lua
> index cfe280121..98338c493 100755
> --- a/test/sql-tap/alter.test.lua
> +++ b/test/sql-tap/alter.test.lua
> @@ -232,7 +232,7 @@ test:do_execsql_test(
>      [[
>          CREATE TABLE xyz(x PRIMARY KEY);
>          ALTER TABLE xyz RENAME TO "xyz1234abc";
> -        SELECT "name" FROM "_space" WHERE "name" GLOB 'xyz*';
> +        SELECT "name" FROM "_space" WHERE "name" = 'xyz1234abc';
>      ]], {
>          -- <alter-5.1>
>          "xyz1234abc"
> @@ -243,7 +243,7 @@ test:do_execsql_test(
>      "alter-5.2",
>      [[
>          ALTER TABLE "xyz1234abc" RENAME TO xyzabc;
> -        SELECT "name" FROM "_space" WHERE "name" GLOB 'XYZ*';
> +        SELECT "name" FROM "_space" WHERE "name" = 'XYZABC';
>      ]], {
>          -- <alter-5.2>
>          "XYZABC"
> diff --git a/test/sql-tap/analyze9.test.lua 
> b/test/sql-tap/analyze9.test.lua
> index 3b3d52f67..ec3e545d8 100755
> --- a/test/sql-tap/analyze9.test.lua
> +++ b/test/sql-tap/analyze9.test.lua
> @@ -206,10 +206,10 @@ test:do_execsql_test(
>          INSERT INTO t1 VALUES(81, 1, 'one-i');
>          INSERT INTO t1 VALUES(91, 1, 'one-j');
>          INSERT INTO t1 SELECT a+1,2,'two' || substr(c,4) FROM t1;
> -        INSERT INTO t1 SELECT a+2,3,'three'||substr(c,4) FROM t1 
> WHERE c GLOB 'one-*';
> -        INSERT INTO t1 SELECT a+3,4,'four'||substr(c,4) FROM t1 WHERE 
> c GLOB 'one-*';
> -        INSERT INTO t1 SELECT a+4,5,'five'||substr(c,4) FROM t1 WHERE 
> c GLOB 'one-*';
> -        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE 
> c GLOB 'one-*';
> +        INSERT INTO t1 SELECT a+2,3,'three'||substr(c,4) FROM t1 
> WHERE c LIKE 'one-%';
> +        INSERT INTO t1 SELECT a+3,4,'four'||substr(c,4) FROM t1 WHERE 
> c LIKE 'one-%';
> +        INSERT INTO t1 SELECT a+4,5,'five'||substr(c,4) FROM t1 WHERE 
> c LIKE 'one-%';
> +        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE 
> c LIKE 'one-%';
>          CREATE INDEX t1b ON t1(b);
>          ANALYZE;
>          SELECT c FROM t1 WHERE b=3 AND a BETWEEN 30 AND 60;
> diff --git a/test/sql-tap/e_expr.test.lua b/test/sql-tap/e_expr.test.lua
> index 9780d2cf9..0d69e8535 100755
> --- a/test/sql-tap/e_expr.test.lua
> +++ b/test/sql-tap/e_expr.test.lua
> @@ -1,6 +1,6 @@
>  #!/usr/bin/env tarantool
>  test = require("sqltester")
> -test:plan(10665)
> +test:plan(10647)
>  --!./tcltestrunner.lua
>  -- 2010 July 16
> @@ -77,10 +77,7 @@ local operations = {
>      {"<>", "ne1"},
>      {"!=", "ne2"},
>      {"IS", "is"},
> --- NOTE: This test needs refactoring after deletion of GLOB &
> ---type restrictions for LIKE. (See #3572)
>  --    {"LIKE", "like"},
> ---    {"GLOB", "glob"},
>      {"AND", "and"},
>      {"OR", "or"},
>      {"MATCH", "match"},
> @@ -98,12 +95,10 @@ operations = {
>      {"+", "-"},
>      {"<<", ">>", "&", "|"},
>      {"<", "<=", ">", ">="},
> --- NOTE: This test needs refactoring after deletion of GLOB &
> ---type restrictions for LIKE. (See #3572)
>  -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
> --- are waiting for their hour, don't confuse them
> ---being commented with ticket above.
> -    {"=", "==", "!=", "<>"}, --"LIKE", "GLOB"}, --"MATCH", "REGEXP"},
> +--               are waiting for their hour, don't confuse them
> +--               being commented with commenting of "LIKE".
> +    {"=", "==", "!=", "<>"}, --"LIKE"}, --"MATCH", "REGEXP"},
>      {"AND"},
>      {"OR"},
>  }
> @@ -128,7 +123,7 @@ end
>  -- EVIDENCE-OF: R-15514-65163 SQLite understands the following binary
>  -- operators, in order from highest to lowest precedence: || * / % + -
>  -- << >> & | < <= > >= = == != <> IS IS
> --- NOT IN LIKE GLOB MATCH REGEXP AND OR
> +-- NOT IN LIKE MATCH REGEXP AND OR
>  --
>  -- EVIDENCE-OF: R-38759-38789 Operators IS and IS NOT have the same
>  -- precedence as =.
> @@ -482,7 +477,6 @@ for _, op in ipairs(oplist) do
>          end
>      end
>  end
> -
>  ---------------------------------------------------------------------------
>  -- Test the IS and IS NOT operators.
>  --
> @@ -1303,11 +1297,11 @@ end
>  test:execsql [[
>      CREATE TABLE tblname(cname PRIMARY KEY);
>  ]]
> +
>  local function glob(args)
>      return 1
>  end
> -box.internal.sql_create_function("GLOB", glob)
>  box.internal.sql_create_function("MATCH", glob)
>  box.internal.sql_create_function("REGEXP", glob)
>  local test_cases12 ={
> @@ -1369,47 +1363,43 @@ local test_cases12 ={
>      {47, "EXPR1 LIKE EXPR2"},
>      {48, "EXPR1 LIKE EXPR2 ESCAPE EXPR"},
> -    {49, "EXPR1 GLOB EXPR2"},
> -    {50, "EXPR1 GLOB EXPR2 ESCAPE EXPR"},
> -    {51, "EXPR1 REGEXP EXPR2"},
> -    {52, "EXPR1 REGEXP EXPR2 ESCAPE EXPR"},
> -    {53, "EXPR1 MATCH EXPR2"},
> -    {54, "EXPR1 MATCH EXPR2 ESCAPE EXPR"},
> -    {55, "EXPR1 NOT LIKE EXPR2"},
> -    {56, "EXPR1 NOT LIKE EXPR2 ESCAPE EXPR"},
> -    {57, "EXPR1 NOT GLOB EXPR2"},
> -    {58, "EXPR1 NOT GLOB EXPR2 ESCAPE EXPR"},
> -    {59, "EXPR1 NOT REGEXP EXPR2"},
> -    {60, "EXPR1 NOT REGEXP EXPR2 ESCAPE EXPR"},
> -    {61, "EXPR1 NOT MATCH EXPR2"},
> -    {62, "EXPR1 NOT MATCH EXPR2 ESCAPE EXPR"},
> -
> -    {63, "EXPR IS NULL"},
> -    {64, "EXPR IS NOT NULL"},
> -
> -    {65, "EXPR NOT BETWEEN EXPR1 AND EXPR2"},
> -    {66, "EXPR BETWEEN EXPR1 AND EXPR2"},
> -
> -    {67, "EXPR NOT IN (SELECT cname FROM tblname)"},
> -    {68, "EXPR NOT IN (1)"},
> -    {69, "EXPR NOT IN (1, 2, 3)"},
> -    {70, "EXPR NOT IN tblname"},
> -    {71, "EXPR IN (SELECT cname FROM tblname)"},
> -    {72, "EXPR IN (1)"},
> -    {73, "EXPR IN (1, 2, 3)"},
> -    {74, "EXPR IN tblname"},
> -
> -    {75, "EXISTS (SELECT cname FROM tblname)"},
> -    {76, "NOT EXISTS (SELECT cname FROM tblname)"},
> -
> -    {77, "CASE EXPR WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
> -    {78, "CASE EXPR WHEN EXPR1 THEN EXPR2 END"},
> -    {79, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE 
> EXPR2 END"},
> -    {80, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
> -    {81, "CASE WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
> -    {82, "CASE WHEN EXPR1 THEN EXPR2 END"},
> -    {83, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 
> END"},
> -    {84, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
> +    {49, "EXPR1 REGEXP EXPR2"},
> +    {50, "EXPR1 REGEXP EXPR2 ESCAPE EXPR"},
> +    {51, "EXPR1 MATCH EXPR2"},
> +    {52, "EXPR1 MATCH EXPR2 ESCAPE EXPR"},
> +    {53, "EXPR1 NOT LIKE EXPR2"},
> +    {54, "EXPR1 NOT LIKE EXPR2 ESCAPE EXPR"},
> +    {55, "EXPR1 NOT REGEXP EXPR2"},
> +    {56, "EXPR1 NOT REGEXP EXPR2 ESCAPE EXPR"},
> +    {57, "EXPR1 NOT MATCH EXPR2"},
> +    {58, "EXPR1 NOT MATCH EXPR2 ESCAPE EXPR"},
> +
> +    {59, "EXPR IS NULL"},
> +    {60, "EXPR IS NOT NULL"},
> +
> +    {61, "EXPR NOT BETWEEN EXPR1 AND EXPR2"},
> +    {62, "EXPR BETWEEN EXPR1 AND EXPR2"},
> +
> +    {63, "EXPR NOT IN (SELECT cname FROM tblname)"},
> +    {64, "EXPR NOT IN (1)"},
> +    {65, "EXPR NOT IN (1, 2, 3)"},
> +    {66, "EXPR NOT IN tblname"},
> +    {67, "EXPR IN (SELECT cname FROM tblname)"},
> +    {68, "EXPR IN (1)"},
> +    {69, "EXPR IN (1, 2, 3)"},
> +    {70, "EXPR IN tblname"},
> +
> +    {71, "EXISTS (SELECT cname FROM tblname)"},
> +    {72, "NOT EXISTS (SELECT cname FROM tblname)"},
> +
> +    {73, "CASE EXPR WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
> +    {74, "CASE EXPR WHEN EXPR1 THEN EXPR2 END"},
> +    {75, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE 
> EXPR2 END"},
> +    {76, "CASE EXPR WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
> +    {77, "CASE WHEN EXPR1 THEN EXPR2 ELSE EXPR END"},
> +    {78, "CASE WHEN EXPR1 THEN EXPR2 END"},
> +    {79, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 ELSE EXPR2 
> END"},
> +    {80, "CASE WHEN EXPR1 THEN EXPR2 WHEN EXPR THEN EXPR1 END"},
>  }
>  for _, val in ipairs(test_cases12) do
> @@ -1802,7 +1792,7 @@ test:do_execsql_test(
>      })
>  ---------------------------------------------------------------------------
> --- Test the statements related to the LIKE and GLOB operators.
> +-- Test the statements related to the LIKE operator.
>  --
>  -- EVIDENCE-OF: R-16584-60189 The LIKE operator does a pattern matching
>  -- comparison.
> @@ -2274,102 +2264,38 @@ test:do_execsql_test(
>          -- </e_expr-16.1.7>
>      })
> --- EVIDENCE-OF: R-52087-12043 The GLOB operator is similar to LIKE but
> --- uses the Unix file globbing syntax for its wildcards.
> ---
> --- EVIDENCE-OF: R-09813-17279 Also, GLOB is case sensitive, unlike LIKE.
> +-- EVIDENCE-OF: R-39616-20555 LIKE may be preceded by the
> +-- NOT keyword to invert the sense of the test.
>  --
>  test:do_execsql_test(
> -    "e_expr-17.1.1",
> -    [[
> -        SELECT 'abcxyz' GLOB 'abc%'
> -    ]], {
> -        -- <e_expr-17.1.1>
> -        0
> -        -- </e_expr-17.1.1>
> -    })
> -
> -test:do_execsql_test(
> -    "e_expr-17.1.2",
> -    [[
> -        SELECT 'abcxyz' GLOB 'abc*'
> -    ]], {
> -        -- <e_expr-17.1.2>
> -        1
> -        -- </e_expr-17.1.2>
> -    })
> -
> -test:do_execsql_test(
> -    "e_expr-17.1.3",
> -    [[
> -        SELECT 'abcxyz' GLOB 'abc___'
> -    ]], {
> -        -- <e_expr-17.1.3>
> -        0
> -        -- </e_expr-17.1.3>
> -    })
> -
> -test:do_execsql_test(
> -    "e_expr-17.1.4",
> -    [[
> -        SELECT 'abcxyz' GLOB 'abc???'
> -    ]], {
> -        -- <e_expr-17.1.4>
> -        1
> -        -- </e_expr-17.1.4>
> -    })
> -
> -test:do_execsql_test(
> -    "e_expr-17.1.5",
> +    "e_expr-17.2.0",
>      [[
> -        SELECT 'abcxyz' GLOB 'abc*'
> +        PRAGMA case_sensitive_like = 1;
> +        SELECT 'abcxyz' NOT LIKE 'ABC%';
>      ]], {
> -        -- <e_expr-17.1.5>
> +        -- <e_expr-17.2.0>
>          1
> -        -- </e_expr-17.1.5>
> -    })
> -
> -test:do_execsql_test(
> -    "e_expr-17.1.6",
> -    [[
> -        SELECT 'ABCxyz' GLOB 'abc*'
> -    ]], {
> -        -- <e_expr-17.1.6>
> -        0
> -        -- </e_expr-17.1.6>
> -    })
> -
> -test:do_execsql_test(
> -    "e_expr-17.1.7",
> -    [[
> -        SELECT 'abcxyz' GLOB 'ABC*'
> -    ]], {
> -        -- <e_expr-17.1.7>
> -        0
> -        -- </e_expr-17.1.7>
> +        -- </e_expr-17.2.0>
>      })
> --- EVIDENCE-OF: R-39616-20555 Both GLOB and LIKE may be preceded by the
> --- NOT keyword to invert the sense of the test.
> ---
>  test:do_execsql_test(
>      "e_expr-17.2.1",
>      [[
> -        SELECT 'abcxyz' NOT GLOB 'ABC*'
> +        SELECT 'abcxyz' NOT LIKE 'abc%'
>      ]], {
>          -- <e_expr-17.2.1>
> -        1
> +        0
>          -- </e_expr-17.2.1>
>      })
>  test:do_execsql_test(
>      "e_expr-17.2.2",
>      [[
> -        SELECT 'abcxyz' NOT GLOB 'abc*'
> +        PRAGMA case_sensitive_like = 0
>      ]], {
delete 17.2.1 17.2.2 (it was creaget for glob, like tested below), and move
`PRAGMA case_sensitive_like = 0` out of the test (it is not a test) (use 
just test:execsql or box.exequte)
>          -- <e_expr-17.2.2>
> -        0
> -        -- </e_expr-17.2.2>
> +
> +        -- <e_expr-17.2.2>
>      })
>  test:do_execsql_test(
> @@ -2448,62 +2374,6 @@ if 0>0 then
>      db("nullvalue", "")
>  end
> --- EVIDENCE-OF: R-39414-35489 The infix GLOB operator is implemented by
> --- calling the function glob(Y,X) and can be modified by overriding that
> --- function.
> -
> -local globargs = {}
> -local function globfunc(...)
> -    local args = {...}
> -    for i, v in ipairs(args) do
> -        table.insert(globargs, v)
> -    end
> -    return 1
> -end
> -box.internal.sql_create_function("GLOB", globfunc, 2)
> ---db("func", "glob", "-argcount", 2, "globfunc")
Do not delete this test. Rewrite it for like.
> -
> -test:do_execsql_test(
> -    "e_expr-17.3.1",
> -    [[
> -        SELECT 'abc' GLOB 'def'
> -    ]], {
> -        -- <e_expr-17.3.1>
> -        1
> -        -- </e_expr-17.3.1>
> -    })
> -
> -test:do_test(
> -    "e_expr-17.3.2",
> -    function()
> -        return globargs
> -    end, {
> -        -- <e_expr-17.3.2>
> -        "def", "abc"
> -        -- </e_expr-17.3.2>
> -    })
> -
> -globargs = {  }
> -test:do_execsql_test(
> -    "e_expr-17.3.3",
> -    [[
> -        SELECT 'X' NOT GLOB 'Y'
> -    ]], {
> -        -- <e_expr-17.3.3>
> -        0
> -        -- </e_expr-17.3.3>
> -    })
> -
> -test:do_test(
> -    "e_expr-17.3.4",
> -    function()
> -        return globargs
> -    end, {
> -        -- <e_expr-17.3.4>
> -        "Y", "X"
> -        -- </e_expr-17.3.4>
> -    })
> -
>  --sqlite3("db", "test.db")
>  -- EVIDENCE-OF: R-41650-20872 No regexp() user function is defined by
>  -- default and so use of the REGEXP operator will normally result in an
> diff --git a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua 
> b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
> index addf0e36d..a6d822ccd 100755
> --- a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
> +++ b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
> @@ -142,17 +142,17 @@ for i, tested_string in ipairs(invalid_testcases) do
>      local test_name = prefix .. "2." .. tostring(i)
>      local test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "';"
>      test:do_catchsql_test(test_name, test_itself,
> -                          {1, "LIKE or GLOB pattern can only contain 
> UTF-8 characters"})
> +                          {1, "LIKE pattern can only contain UTF-8 
> characters"})
>      test_name = prefix .. "3." .. tostring(i)
>      test_itself = "SELECT 'abc' LIKE 'abc" .. tested_string .. "';"
>      test:do_catchsql_test(test_name, test_itself,
> -                          {1, "LIKE or GLOB pattern can only contain 
> UTF-8 characters"})
> +                          {1, "LIKE pattern can only contain UTF-8 
> characters"})
>      test_name = prefix .. "4." .. tostring(i)
>      test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "c';"
>      test:do_catchsql_test(test_name, test_itself,
> -                          {1, "LIKE or GLOB pattern can only contain 
> UTF-8 characters"})
> +                          {1, "LIKE pattern can only contain UTF-8 
> characters"})
>      -- Just skipping if row value predicand contains invalid character.
> @@ -185,7 +185,7 @@ local valid_testcases = {
>  -- Valid testcases.
>  for i, tested_string in ipairs(valid_testcases) do
> -    test_name = prefix .. "8." .. tostring(i)
> +    local test_name = prefix .. "8." .. tostring(i)
>      local test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "';"
>      test:do_execsql_test(test_name, test_itself, {0})
> diff --git a/test/sql-tap/like2.test.lua b/test/sql-tap/like2.test.lua
> index abcac39fb..c6c81cb4d 100755
> --- a/test/sql-tap/like2.test.lua
> +++ b/test/sql-tap/like2.test.lua
> @@ -12,11 +12,11 @@ test:plan(282)
>  --    May you find forgiveness for yourself and forgive others.
>  --    May you share freely, never taking more than you give.
>  --
> --------------------------------------------------------------------------
> --- This file implements regression tests for SQLite library.  The
> --- focus of this file is testing the LIKE and GLOB operators and
> --- in particular the optimizations that occur to help those operators
> --- run faster.
> +-----------------------------------------------------------------
> +-- This file implements regression tests for SQLite library. The
> +-- focus of this file is testing the LIKE operator and
> +-- in particular the optimizations that occur to help this
> +-- operator run faster.
>  --
>  -- $Id: like2.test,v 1.1 2008/05/26 18:33:41 drh Exp $
>  -- ["set","testdir",[["file","dirname",["argv0"]]]]

[-- Attachment #2: Type: text/html, Size: 147246 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-09-11 10:06               ` Alex Khatskevich
@ 2018-09-11 13:31                 ` Nikita Tatunov
  2018-10-18 18:02                   ` Nikita Tatunov
  0 siblings, 1 reply; 46+ messages in thread
From: Nikita Tatunov @ 2018-09-11 13:31 UTC (permalink / raw)
  To: Alex Khatskevich; +Cc: tarantool-patches, Alexander Turenko, korablev

[-- Attachment #1: Type: text/plain, Size: 10935 bytes --]



> On 11 Sep 2018, at 13:06, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
> 
> 
> 
> On 11.09.2018 09:06, Nikita Tatunov wrote:
>> 
>> 
>>> On 11 Sep 2018, at 01:20, Alex Khatskevich <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> wrote:
>>> 
>>>> 
>>>> 
>>>>> On 17 Aug 2018, at 14:42, Alex Khatskevich <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> wrote:
>>>>> 
>>>>> 
>>>>> On 17.08.2018 14:17, Alexander Turenko wrote:
>>>>>> 0xffff is the result of 'end of a string' check as well as internal buffer
>>>>>> overflow error. I have the relevant code pasted in the first review of
>>>>>> the patch (July, 18).
>>>>>> 
>>>>>> // source/common/ucnv.c::ucnv_getNextUChar
>>>>>> 1860     s=*source;
>>>>>> 1861     if(sourceLimit<s) {
>>>>>> 1862         *err=U_ILLEGAL_ARGUMENT_ERROR;
>>>>>> 1863         return 0xffff;
>>>>>> 1864     }
>>>>>> 
>>>>>> We should not handle the buffer overflow case as an invalid symbol. Of
>>>>>> course we should not handle it as the 'end of the string' situation.
>>>>>> Ideally we should perform pointer myself and raise an error in case of
>>>>>> 0xffff. I had thought that a buffer overflow error is unlikely to meet,
>>>>>> but you are right: we should differentiate these situations.
>>>>>> 
>>>>>> In one of the previous version of a patch we perform this check like so:
>>>>>> 
>>>>>> #define Utf8Read(s, e) (((s) < (e)) ?\
>>>>>> 	ucnv_getNextUChar(pUtf8conv, &s, e, &status) : 0)
>>>>>> 
>>>>>> Don't sure why it was changed. Maybe it is try to correctly handle '\0'
>>>>>> symbol (it is valid unicode character)?
>>>>> The define you have pasted can return 0xffff.
>>>>> The reasons to change it back are described in the previous patchset.
>>>>> In short:
>>>>> 1. It is equivalent to
>>>>>    a. check s < e in a while loop
>>>>>    b. read next character inside of where loop body.
>>>>> 2. In some usages of the code this check (s<e) was redundant (it was performed a couple lines above)
>>>>> 3. There is no reason to rewrite the old version of this function. (So, we decided to use old version of the function)
>>>>>> So I see two ways to proceed:
>>>>>> 
>>>>>> 1. Lean on icu's check and ignore possibility of the buffer overflow.
>>>>>> 2. Use our own check and possibly meet '\0' problems.
>>>>>> 3. Check for U_ILLEGAL_ARGUMENT_ERROR to treat as end of a string, raise
>>>>>>    the error for other 0xffff.
>>>>>> 
>>>>>> Alex, what do you suggests here?
>>>>> As I understand, by now the 0xffff is used ONLY to handle the case of unexpectedly ended symbol.
>>>>> E.g. some symbol consists of 2 characters, but the length of the input buffer is 1.
>>>>> In my opinion this is the same as an invalid symbol.
>>>>> 
>>>>> I guess that internal buffer overflow cannot occur in the `ucnv_getNextChar` function.
>>>>> 
>>>>> I suppose that it is Nikitas duty to investigate this problem and explain it to us all. I just have noticed a strange usage.
>>>> 
>>>> 
>>>> Hello, please consider my comments.
>>>> 
>>>> There are some cases when 0xffff can occur, but:
>>>> 	1) Cannot trigger in our context.
>>>> 	2) Cannot trigger in our context.
>>>> 	3) Only triggers if end < start. (Cannot happen in sql_utf8_pattern_compare, i guess)
>>>> 	4) Only triggers if string length > (size_t) 0x7ffffffff (can it actually happen? I don’t think so).
>>>> 	5) Occurs when trying to access to not unindexed data.
>>>> 	6) Cannot occur in our context.
>>>> 	7) Cannot occur in our context.
>>> I do not understand what are those numbers related to. Please, describe it.
>> 
>> They are related to possible cases returning 0xffff from icu source code (function ucnv_getNextUChar()).
> Can you just copy it here, so that anyone interested in that conversation can
> analyze it without looking for source files?

Ok then:

U_CAPI UChar32 U_EXPORT2
ucnv_getNextUChar(UConverter *cnv,
                  const char **source, const char *sourceLimit,
                  UErrorCode *err) {
    UConverterToUnicodeArgs args;
    UChar buffer[U16_MAX_LENGTH];
    const char *s;
    UChar32 c;
    int32_t i, length;

    /* check parameters */
    if(err==NULL || U_FAILURE(*err)) {
        return 0xffff;
    }

    if(cnv==NULL || source==NULL) {
        *err=U_ILLEGAL_ARGUMENT_ERROR;
        return 0xffff;
    }

    s=*source;
    if(sourceLimit<s) {
        *err=U_ILLEGAL_ARGUMENT_ERROR;
        return 0xffff;
    }

    /*
     * Make sure that the buffer sizes do not exceed the number range for
     * int32_t because some functions use the size (in units or bytes)
     * rather than comparing pointers, and because offsets are int32_t values.
     *
     * size_t is guaranteed to be unsigned and large enough for the job.
     *
     * Return with an error instead of adjusting the limits because we would
     * not be able to maintain the semantics that either the source must be
     * consumed or the target filled (unless an error occurs).
     * An adjustment would be sourceLimit=t+0x7fffffff; for example.
     */
    if(((size_t)(sourceLimit-s)>(size_t)0x7fffffff && sourceLimit>s)) {
        *err=U_ILLEGAL_ARGUMENT_ERROR;
        return 0xffff;
    }

    c=U_SENTINEL;

    /* flush the target overflow buffer */
    if(cnv->UCharErrorBufferLength>0) {
        UChar *overflow;

        overflow=cnv->UCharErrorBuffer;
        i=0;
        length=cnv->UCharErrorBufferLength;
        U16_NEXT(overflow, i, length, c);

        /* move the remaining overflow contents up to the beginning */
        if((cnv->UCharErrorBufferLength=(int8_t)(length-i))>0) {
            uprv_memmove(cnv->UCharErrorBuffer, cnv->UCharErrorBuffer+i,
                         cnv->UCharErrorBufferLength*U_SIZEOF_UCHAR);
        }

        if(!U16_IS_LEAD(c) || i<length) {
            return c;
        }
        /*
         * Continue if the overflow buffer contained only a lead surrogate,
         * in case the converter outputs single surrogates from complete
         * input sequences.
         */
    }

    /*
     * flush==TRUE is implied for ucnv_getNextUChar()
     *
     * do not simply return even if s==sourceLimit because the converter may
     * not have seen flush==TRUE before
     */

    /* prepare the converter arguments */
    args.converter=cnv;
    args.flush=TRUE;
    args.offsets=NULL;
    args.source=s;
    args.sourceLimit=sourceLimit;
    args.target=buffer;
    args.targetLimit=buffer+1;
    args.size=sizeof(args);

    if(c<0) {
        /*
         * call the native getNextUChar() implementation if we are
         * at a character boundary (toULength==0)
         *
         * unlike with _toUnicode(), getNextUChar() implementations must set
         * U_TRUNCATED_CHAR_FOUND for truncated input,
         * in addition to setting toULength/toUBytes[]
         */
        if(cnv->toULength==0 && cnv->sharedData->impl->getNextUChar!=NULL) {
            c=cnv->sharedData->impl->getNextUChar(&args, err);
            *source=s=args.source;
            if(*err==U_INDEX_OUTOFBOUNDS_ERROR) {
                /* reset the converter without calling the callback function */
                _reset(cnv, UCNV_RESET_TO_UNICODE, FALSE);
                return 0xffff; /* no output */
            } else if(U_SUCCESS(*err) && c>=0) {
                return c;
            /*
             * else fall through to use _toUnicode() because
             *   UCNV_GET_NEXT_UCHAR_USE_TO_U: the native function did not want to handle it after all
             *   U_FAILURE: call _toUnicode() for callback handling (do not output c)
             */
            }
        }

        /* convert to one UChar in buffer[0], or handle getNextUChar() errors */
        _toUnicodeWithCallback(&args, err);

        if(*err==U_BUFFER_OVERFLOW_ERROR) {
            *err=U_ZERO_ERROR;
        }

        i=0;
        length=(int32_t)(args.target-buffer);
    } else {
        /* write the lead surrogate from the overflow buffer */
        buffer[0]=(UChar)c;
        args.target=buffer+1;
        i=0;
        length=1;
    }

    /* buffer contents starts at i and ends before length */

    if(U_FAILURE(*err)) {
        c=0xffff; /* no output */
    } else if(length==0) {
        /* no input or only state changes */
        *err=U_INDEX_OUTOFBOUNDS_ERROR;
        /* no need to reset explicitly because _toUnicodeWithCallback() did it */
        c=0xffff; /* no output */
    } else {
        c=buffer[0];
        i=1;
        if(!U16_IS_LEAD(c)) {
            /* consume c=buffer[0], done */
        } else {
            /* got a lead surrogate, see if a trail surrogate follows */
            UChar c2;

            if(cnv->UCharErrorBufferLength>0) {
                /* got overflow output from the conversion */
                if(U16_IS_TRAIL(c2=cnv->UCharErrorBuffer[0])) {
                    /* got a trail surrogate, too */
                    c=U16_GET_SUPPLEMENTARY(c, c2);

                    /* move the remaining overflow contents up to the beginning */
                    if((--cnv->UCharErrorBufferLength)>0) {
                        uprv_memmove(cnv->UCharErrorBuffer, cnv->UCharErrorBuffer+1,
                                     cnv->UCharErrorBufferLength*U_SIZEOF_UCHAR);
                    }
                } else {
                    /* c is an unpaired lead surrogate, just return it */
                }
            } else if(args.source<sourceLimit) {
                /* convert once more, to buffer[1] */
                args.targetLimit=buffer+2;
                _toUnicodeWithCallback(&args, err);
                if(*err==U_BUFFER_OVERFLOW_ERROR) {
                    *err=U_ZERO_ERROR;
                }

                length=(int32_t)(args.target-buffer);
                if(U_SUCCESS(*err) && length==2 && U16_IS_TRAIL(c2=buffer[1])) {
                    /* got a trail surrogate, too */
                    c=U16_GET_SUPPLEMENTARY(c, c2);
                    i=2;
                }
            }
        }
    }

    /*
     * move leftover output from buffer[i..length[
     * into the beginning of the overflow buffer
     */
    if(i<length) {
        /* move further overflow back */
        int32_t delta=length-i;
        if((length=cnv->UCharErrorBufferLength)>0) {
            uprv_memmove(cnv->UCharErrorBuffer+delta, cnv->UCharErrorBuffer,
                         length*U_SIZEOF_UCHAR);
        }
        cnv->UCharErrorBufferLength=(int8_t)(length+delta);

        cnv->UCharErrorBuffer[0]=buffer[i++];
        if(delta>1) {
            cnv->UCharErrorBuffer[1]=buffer[i];
        }
    }

    *source=args.source;
    return c;
}

--
WBR, Nikita Tatunov.
n.tatunov@tarantool.org


[-- Attachment #2: Type: text/html, Size: 43163 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-09-11 13:31                 ` Nikita Tatunov
@ 2018-10-18 18:02                   ` Nikita Tatunov
  2018-10-21  3:51                     ` Alexander Turenko
  0 siblings, 1 reply; 46+ messages in thread
From: Nikita Tatunov @ 2018-10-18 18:02 UTC (permalink / raw)
  To: tarantool-patches; +Cc: Alexander Turenko, korablev

[-- Attachment #1: Type: text/plain, Size: 12725 bytes --]



> On 11 Sep 2018, at 16:31, Nikita Tatunov <n.tatunov@tarantool.org> wrote:
> 
> 
> 
>> On 11 Sep 2018, at 13:06, Alex Khatskevich <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> wrote:
>> 
>> 
>> 
>> 
>> On 11.09.2018 09:06, Nikita Tatunov wrote:
>>> 
>>> 
>>>> On 11 Sep 2018, at 01:20, Alex Khatskevich <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> wrote:
>>>> 
>>>>> 
>>>>> 
>>>>>> On 17 Aug 2018, at 14:42, Alex Khatskevich <avkhatskevich@tarantool.org <mailto:avkhatskevich@tarantool.org>> wrote:
>>>>>> 
>>>>>> 
>>>>>> On 17.08.2018 14:17, Alexander Turenko wrote:
>>>>>>> 0xffff is the result of 'end of a string' check as well as internal buffer
>>>>>>> overflow error. I have the relevant code pasted in the first review of
>>>>>>> the patch (July, 18).
>>>>>>> 
>>>>>>> // source/common/ucnv.c::ucnv_getNextUChar
>>>>>>> 1860     s=*source;
>>>>>>> 1861     if(sourceLimit<s) {
>>>>>>> 1862         *err=U_ILLEGAL_ARGUMENT_ERROR;
>>>>>>> 1863         return 0xffff;
>>>>>>> 1864     }
>>>>>>> 
>>>>>>> We should not handle the buffer overflow case as an invalid symbol. Of
>>>>>>> course we should not handle it as the 'end of the string' situation.
>>>>>>> Ideally we should perform pointer myself and raise an error in case of
>>>>>>> 0xffff. I had thought that a buffer overflow error is unlikely to meet,
>>>>>>> but you are right: we should differentiate these situations.
>>>>>>> 
>>>>>>> In one of the previous version of a patch we perform this check like so:
>>>>>>> 
>>>>>>> #define Utf8Read(s, e) (((s) < (e)) ?\
>>>>>>> 	ucnv_getNextUChar(pUtf8conv, &s, e, &status) : 0)
>>>>>>> 
>>>>>>> Don't sure why it was changed. Maybe it is try to correctly handle '\0'
>>>>>>> symbol (it is valid unicode character)?
>>>>>> The define you have pasted can return 0xffff.
>>>>>> The reasons to change it back are described in the previous patchset.
>>>>>> In short:
>>>>>> 1. It is equivalent to
>>>>>>    a. check s < e in a while loop
>>>>>>    b. read next character inside of where loop body.
>>>>>> 2. In some usages of the code this check (s<e) was redundant (it was performed a couple lines above)
>>>>>> 3. There is no reason to rewrite the old version of this function. (So, we decided to use old version of the function)
>>>>>>> So I see two ways to proceed:
>>>>>>> 
>>>>>>> 1. Lean on icu's check and ignore possibility of the buffer overflow.
>>>>>>> 2. Use our own check and possibly meet '\0' problems.
>>>>>>> 3. Check for U_ILLEGAL_ARGUMENT_ERROR to treat as end of a string, raise
>>>>>>>    the error for other 0xffff.
>>>>>>> 
>>>>>>> Alex, what do you suggests here?
>>>>>> As I understand, by now the 0xffff is used ONLY to handle the case of unexpectedly ended symbol.
>>>>>> E.g. some symbol consists of 2 characters, but the length of the input buffer is 1.
>>>>>> In my opinion this is the same as an invalid symbol.
>>>>>> 
>>>>>> I guess that internal buffer overflow cannot occur in the `ucnv_getNextChar` function.
>>>>>> 
>>>>>> I suppose that it is Nikitas duty to investigate this problem and explain it to us all. I just have noticed a strange usage.
>>>>> 
>>>>> 
>>>>> Hello, please consider my comments.
>>>>> 
>>>>> There are some cases when 0xffff can occur, but:
>>>>> 	1) Cannot trigger in our context.
>>>>> 	2) Cannot trigger in our context.
>>>>> 	3) Only triggers if end < start. (Cannot happen in sql_utf8_pattern_compare, i guess)
>>>>> 	4) Only triggers if string length > (size_t) 0x7ffffffff (can it actually happen? I don’t think so).
>>>>> 	5) Occurs when trying to access to not unindexed data.
>>>>> 	6) Cannot occur in our context.
>>>>> 	7) Cannot occur in our context.
>>>> I do not understand what are those numbers related to. Please, describe it.
>>> 
>>> They are related to possible cases returning 0xffff from icu source code (function ucnv_getNextUChar()).
>> Can you just copy it here, so that anyone interested in that conversation can
>> analyze it without looking for source files?
> 

Hello Alexander! Could you please consider some following explanations?
I think we can treat 0xffff as a string end in sql_utf8_pattern_compare.
Though we can use `status` for differentiating different errors from
`ucnv_getNextUChar(pUtf8conv, &s, e, &status)`. I would like to know your opinion.

> Ok then:
> 
> U_CAPI UChar32 U_EXPORT2
> ucnv_getNextUChar(UConverter *cnv,
>                   const char **source, const char *sourceLimit,
>                   UErrorCode *err) {
>     UConverterToUnicodeArgs args;
>     UChar buffer[U16_MAX_LENGTH];
>     const char *s;
>     UChar32 c;
>     int32_t i, length;
> 
>     /* check parameters */
>     if(err==NULL || U_FAILURE(*err)) {
>         return 0xffff;
>     }
> 

1. This one cannot trigger in sql_utf8_pattern_compare():
	1) err == &status
	2) *err == U_ZERO_ERROR

>     if(cnv==NULL || source==NULL) {
>         *err=U_ILLEGAL_ARGUMENT_ERROR;
>         return 0xffff;
>     }
> 

2. This one cannot trigger in sql_utf8_pattern_compare():
	1) cnv != NULL
	2) source != NULL

>     s=*source;
>     if(sourceLimit<s) {
>         *err=U_ILLEGAL_ARGUMENT_ERROR;
>         return 0xffff;

3. This one cannot trigger in sql_utf8_pattern_compare():
	1) ucnv_getNextUChar is only called when !(sourceLimit<s).

>     }
> 
>     /*
>      * Make sure that the buffer sizes do not exceed the number range for
>      * int32_t because some functions use the size (in units or bytes)
>      * rather than comparing pointers, and because offsets are int32_t values.
>      *
>      * size_t is guaranteed to be unsigned and large enough for the job.
>      *
>      * Return with an error instead of adjusting the limits because we would
>      * not be able to maintain the semantics that either the source must be
>      * consumed or the target filled (unless an error occurs).
>      * An adjustment would be sourceLimit=t+0x7fffffff; for example.
>      */
>     if(((size_t)(sourceLimit-s)>(size_t)0x7fffffff && sourceLimit>s)) {
>         *err=U_ILLEGAL_ARGUMENT_ERROR;
>         return 0xffff;

4. I’m not sure if string data can be this long in our context. 
    (string length > (size_t) 0x7ffffffff)

>     }
> 
>     c=U_SENTINEL;
> 
>     /* flush the target overflow buffer */
>     if(cnv->UCharErrorBufferLength>0) {
>         UChar *overflow;
> 
>         overflow=cnv->UCharErrorBuffer;
>         i=0;
>         length=cnv->UCharErrorBufferLength;
>         U16_NEXT(overflow, i, length, c);
> 
>         /* move the remaining overflow contents up to the beginning */
>         if((cnv->UCharErrorBufferLength=(int8_t)(length-i))>0) {
>             uprv_memmove(cnv->UCharErrorBuffer, cnv->UCharErrorBuffer+i,
>                          cnv->UCharErrorBufferLength*U_SIZEOF_UCHAR);
>         }
> 
>         if(!U16_IS_LEAD(c) || i<length) {
>             return c;
>         }
>         /*
>          * Continue if the overflow buffer contained only a lead surrogate,
>          * in case the converter outputs single surrogates from complete
>          * input sequences.
>          */
>     }
> 
>     /*
>      * flush==TRUE is implied for ucnv_getNextUChar()
>      *
>      * do not simply return even if s==sourceLimit because the converter may
>      * not have seen flush==TRUE before
>      */
> 
>     /* prepare the converter arguments */
>     args.converter=cnv;
>     args.flush=TRUE;
>     args.offsets=NULL;
>     args.source=s;
>     args.sourceLimit=sourceLimit;
>     args.target=buffer;
>     args.targetLimit=buffer+1;
>     args.size=sizeof(args);
> 

c == U_SENTINEL == -1

>     if(c<0) {
>         /*
>          * call the native getNextUChar() implementation if we are
>          * at a character boundary (toULength==0)
>          *
>          * unlike with _toUnicode(), getNextUChar() implementations must set
>          * U_TRUNCATED_CHAR_FOUND for truncated input,
>          * in addition to setting toULength/toUBytes[]
>          */
>         if(cnv->toULength==0 && cnv->sharedData->impl->getNextUChar!=NULL) {
>             c=cnv->sharedData->impl->getNextUChar(&args, err);
>             *source=s=args.source;
>             if(*err==U_INDEX_OUTOFBOUNDS_ERROR) {
>                 /* reset the converter without calling the callback function */
>                 _reset(cnv, UCNV_RESET_TO_UNICODE, FALSE);
>                 return 0xffff; /* no output */

5. Occurs when trying to access unindexed data.

>             } else if(U_SUCCESS(*err) && c>=0) {
>                 return c;

6. Returns symbol (can also be 0xfffd, as it is not treated as an actual error).

So if I’m not mistaken we will get results in our function either from
‘return’ number 5 or number 6 and the following code will not be executed.


>             /*
>              * else fall through to use _toUnicode() because
>              *   UCNV_GET_NEXT_UCHAR_USE_TO_U: the native function did not want to handle it after all
>              *   U_FAILURE: call _toUnicode() for callback handling (do not output c)
>              */
>             }
>         }
> 
>         /* convert to one UChar in buffer[0], or handle getNextUChar() errors */
>         _toUnicodeWithCallback(&args, err);
> 
>         if(*err==U_BUFFER_OVERFLOW_ERROR) {
>             *err=U_ZERO_ERROR;
>         }
> 
>         i=0;
>         length=(int32_t)(args.target-buffer);
>     } else {
>         /* write the lead surrogate from the overflow buffer */
>         buffer[0]=(UChar)c;
>         args.target=buffer+1;
>         i=0;
>         length=1;
>     }
> 
>     /* buffer contents starts at i and ends before length */
> 
>     if(U_FAILURE(*err)) {
>         c=0xffff; /* no output */
>     } else if(length==0) {
>         /* no input or only state changes */
>         *err=U_INDEX_OUTOFBOUNDS_ERROR;
>         /* no need to reset explicitly because _toUnicodeWithCallback() did it */
>         c=0xffff; /* no output */
>     } else {
>         c=buffer[0];
>         i=1;
>         if(!U16_IS_LEAD(c)) {
>             /* consume c=buffer[0], done */
>         } else {
>             /* got a lead surrogate, see if a trail surrogate follows */
>             UChar c2;
> 
>             if(cnv->UCharErrorBufferLength>0) {
>                 /* got overflow output from the conversion */
>                 if(U16_IS_TRAIL(c2=cnv->UCharErrorBuffer[0])) {
>                     /* got a trail surrogate, too */
>                     c=U16_GET_SUPPLEMENTARY(c, c2);
> 
>                     /* move the remaining overflow contents up to the beginning */
>                     if((--cnv->UCharErrorBufferLength)>0) {
>                         uprv_memmove(cnv->UCharErrorBuffer, cnv->UCharErrorBuffer+1,
>                                      cnv->UCharErrorBufferLength*U_SIZEOF_UCHAR);
>                     }
>                 } else {
>                     /* c is an unpaired lead surrogate, just return it */
>                 }
>             } else if(args.source<sourceLimit) {
>                 /* convert once more, to buffer[1] */
>                 args.targetLimit=buffer+2;
>                 _toUnicodeWithCallback(&args, err);
>                 if(*err==U_BUFFER_OVERFLOW_ERROR) {
>                     *err=U_ZERO_ERROR;
>                 }
> 
>                 length=(int32_t)(args.target-buffer);
>                 if(U_SUCCESS(*err) && length==2 && U16_IS_TRAIL(c2=buffer[1])) {
>                     /* got a trail surrogate, too */
>                     c=U16_GET_SUPPLEMENTARY(c, c2);
>                     i=2;
>                 }
>             }
>         }
>     }
> 
>     /*
>      * move leftover output from buffer[i..length[
>      * into the beginning of the overflow buffer
>      */
>     if(i<length) {
>         /* move further overflow back */
>         int32_t delta=length-i;
>         if((length=cnv->UCharErrorBufferLength)>0) {
>             uprv_memmove(cnv->UCharErrorBuffer+delta, cnv->UCharErrorBuffer,
>                          length*U_SIZEOF_UCHAR);
>         }
>         cnv->UCharErrorBufferLength=(int8_t)(length+delta);
> 
>         cnv->UCharErrorBuffer[0]=buffer[i++];
>         if(delta>1) {
>             cnv->UCharErrorBuffer[1]=buffer[i];
>         }
>     }
> 
>     *source=args.source;
>     return c;
> }
> 
> --
> WBR, Nikita Tatunov.
> n.tatunov@tarantool.org <mailto:n.tatunov@tarantool.org>
--
WBR, Nikita Tatunov.
n.tatunov@tarantool.org


[-- Attachment #2: Type: text/html, Size: 44583 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-09-11 12:03           ` Alex Khatskevich
@ 2018-10-18 20:28             ` Nikita Tatunov
  2018-10-21  3:48               ` Alexander Turenko
  0 siblings, 1 reply; 46+ messages in thread
From: Nikita Tatunov @ 2018-10-18 20:28 UTC (permalink / raw)
  To: Alexander Turenko; +Cc: tarantool-patches, korablev

[-- Attachment #1: Type: text/plain, Size: 17820 bytes --]

Hello! Consider some comments please.
Diff with previous version will be at the end.

> On Sep 11, 2018, at 15:03, Alex Khatskevich <avkhatskevich@tarantool.org> wrote:
> 
> 
>>>>>> 
>>>>>> -					     "ESCAPE expression must be a single character",
>>>>>> +					     "ESCAPE expression must be a"
>>>>>> +					     " single character",
>>>>> Do not split error messages at the middle of a sentence. It makes errors ungreppable.
>>>>> Make it <80 somehow different.
>>>>> 
>>>> 
>>>> Have already been discussed in this thread.
>>> I suppose that we concluded to try to fit into 80 and split the string only
>>> in case it is impossible.
>> 
>> I don’t think so. Anyways, Alexander could you please give your thoughts?
> Discussed with Nikita, Alexander, Vladimir, Kirill... Conclusion: use `const char temp variable` if possible.
> like this:
> ``` 
>         const char *const err_msg = 
>             "ESCAPE expression must be a single character"; 
>         if (sqlite3Utf8CharLen((char *)zEsc, -1) != 1) { 
>             sqlite3_result_error(context, 
>                          err_msg, 
>                          -1); 
>             return; 
> ``` 
> 
> If it does not help (but it is) split the message.

Splitted both error messages.

>>>> diff --git a/test/sql-tap/e_expr.test.lua b/test/sql-tap/e_expr.test.lua
>>>> index 162026845..0d69e8535 100755
>>>> --- a/test/sql-tap/e_expr.test.lua
>>>> +++ b/test/sql-tap/e_expr.test.lua
>>>> @@ -1,6 +1,6 @@
>>>>  #!/usr/bin/env tarantool
>>>>  test = require("sqltester")
>>>> -test:plan(11521)
>>>> +test:plan(10647)
>>>>  
>>>>  --!./tcltestrunner.lua
>>>>  -- 2010 July 16
>>>> @@ -77,7 +77,7 @@ local operations = {
>>>>      {"<>", "ne1"},
>>>>      {"!=", "ne2"},
>>>>      {"IS", "is"},
>>>> -    {"LIKE", "like"},
>>>> +--    {"LIKE", "like"},
>>>>      {"AND", "and"},
>>>>      {"OR", "or"},
>>>>      {"MATCH", "match"},
>>>> @@ -96,8 +96,9 @@ operations = {
>>>>      {"<<", ">>", "&", "|"},
>>>>      {"<", "<=", ">", ">="},
>>>>  -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
>>>> --- 		 are waiting for their hour.
>>>> -    {"=", "==", "!=", "<>", "LIKE"}, --"MATCH", "REGEXP"},
>>>> +--               are waiting for their hour, don't confuse them
>>>> +--               being commented with commenting of "LIKE".
>>>> +    {"=", "==", "!=", "<>"}, --"LIKE"}, --"MATCH", "REGEXP"},
>>> Delete Like. No one returns here.
>> 
>> It’s a table of all of the operators thus I think it still worth leaving it there.
>> Who knows, it may be that someone will revive tests for LIKE.
> Delete Like. No one returns here.
> We do not need a garbage. Like is not relevant anymore for this test.

Deleted.

>> 
>>  /*
>> - * Maximum length (in bytes) of the pattern in a LIKE or GLOB
>> - * operator.
>> + * Maximum length (in bytes) of the pattern in a LIKE operator.
>>   */
>>  #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH
>>  #define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000
>> diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c
>> index 0c978142d..3f10f4d68 100644
>> --- a/src/box/sql/vdbe.c
>> +++ b/src/box/sql/vdbe.c
>> @@ -5521,7 +5521,7 @@ vdbe_return:
>>  	testcase( nVmStep>0);
>>  	p->aCounter[SQLITE_STMTSTATUS_VM_STEP] += (int)nVmStep;
>>  	assert(rc!=SQLITE_OK || nExtraDelete==0
>> -		|| sqlite3_strlike("DELETE%",p->zSql,0)!=0
>> +		|| sql_strlike_ci("DELETE%", p->zSql, 0) != 0
>>  		);
>>  	return rc;
>>  
>> diff --git a/src/box/sql/wherecode.c b/src/box/sql/wherecode.c
>> index c35c25ac4..f864ea7fa 100644
>> --- a/src/box/sql/wherecode.c
>> +++ b/src/box/sql/wherecode.c
>> @@ -339,7 +339,7 @@ sqlite3WhereAddScanStatus(Vdbe * v,		/* Vdbe to add scanstatus entry to */
>>   * automatically disabled.  In this way, terms get disabled if derived
>>   * virtual terms are tested first.  For example:
>>   *
>> - *      x GLOB 'abc*' AND x>='abc' AND x<'acd'
>> + *      x LIKE 'abc%' AND x>='abc' AND x<'acd'
>>   *      \___________/     \______/     \_____/
>>   *         parent          child1       child2
>>   *
>> diff --git a/src/box/sql/whereexpr.c b/src/box/sql/whereexpr.c
>> index 612868695..2d9fb6453 100644
>> --- a/src/box/sql/whereexpr.c
>> +++ b/src/box/sql/whereexpr.c
>> @@ -218,38 +218,61 @@ operatorMask(int op)
>>  	return c;
>>  }
>>  
>> +/**
>> + * Wildcard characters.
>> + */
>> +#define match_one '_'
>> +#define match_all '%'
> If possible - move the define to a header which both (whereexpr and func) file include.
> This also require to give more descriptive name, e.g. LIKE_MATCH_ONE.

Moved them to sqliteInt.h and renamed to:
    1) `MATCH_ALL_WILDCARD`.
    2) `MATCH_ONE_WILDCARD`.
 
>>  for _, val in ipairs(test_cases12) do
>> @@ -1802,7 +1792,7 @@ test:do_execsql_test(
>>      })
>>  
>>  ---------------------------------------------------------------------------
>> --- Test the statements related to the LIKE and GLOB operators.
>> +-- Test the statements related to the LIKE operator.
>>  --
>>  -- EVIDENCE-OF: R-16584-60189 The LIKE operator does a pattern matching
>>  -- comparison.
>> @@ -2274,102 +2264,38 @@ test:do_execsql_test(
>>          -- </e_expr-16.1.7>
>>      })
>>  
>> --- EVIDENCE-OF: R-52087-12043 The GLOB operator is similar to LIKE but
>> --- uses the Unix file globbing syntax for its wildcards.
>> ---
>> --- EVIDENCE-OF: R-09813-17279 Also, GLOB is case sensitive, unlike LIKE.
>> +-- EVIDENCE-OF: R-39616-20555 LIKE may be preceded by the
>> +-- NOT keyword to invert the sense of the test.
>>  --
>>  test:do_execsql_test(
>> -    "e_expr-17.1.1",
>> -    [[
>> -        SELECT 'abcxyz' GLOB 'abc%'
>> -    ]], {
>> -        -- <e_expr-17.1.1>
>> -        0
>> -        -- </e_expr-17.1.1>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.2",
>> -    [[
>> -        SELECT 'abcxyz' GLOB 'abc*'
>> -    ]], {
>> -        -- <e_expr-17.1.2>
>> -        1
>> -        -- </e_expr-17.1.2>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.3",
>> -    [[
>> -        SELECT 'abcxyz' GLOB 'abc___'
>> -    ]], {
>> -        -- <e_expr-17.1.3>
>> -        0
>> -        -- </e_expr-17.1.3>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.4",
>> -    [[
>> -        SELECT 'abcxyz' GLOB 'abc???'
>> -    ]], {
>> -        -- <e_expr-17.1.4>
>> -        1
>> -        -- </e_expr-17.1.4>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.5",
>> +    "e_expr-17.2.0",
>>      [[
>> -        SELECT 'abcxyz' GLOB 'abc*'
>> +        PRAGMA case_sensitive_like = 1;
>> +        SELECT 'abcxyz' NOT LIKE 'ABC%';
>>      ]], {
>> -        -- <e_expr-17.1.5>
>> +        -- <e_expr-17.2.0>
>>          1
>> -        -- </e_expr-17.1.5>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.6",
>> -    [[
>> -        SELECT 'ABCxyz' GLOB 'abc*'
>> -    ]], {
>> -        -- <e_expr-17.1.6>
>> -        0
>> -        -- </e_expr-17.1.6>
>> -    })
>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.1.7",
>> -    [[
>> -        SELECT 'abcxyz' GLOB 'ABC*'
>> -    ]], {
>> -        -- <e_expr-17.1.7>
>> -        0
>> -        -- </e_expr-17.1.7>
>> +        -- </e_expr-17.2.0>
>>      })
>>  
>> --- EVIDENCE-OF: R-39616-20555 Both GLOB and LIKE may be preceded by the
>> --- NOT keyword to invert the sense of the test.
>> ---
>>  test:do_execsql_test(
>>      "e_expr-17.2.1",
>>      [[
>> -        SELECT 'abcxyz' NOT GLOB 'ABC*'
>> +        SELECT 'abcxyz' NOT LIKE 'abc%'
>>      ]], {
>>          -- <e_expr-17.2.1>
>> -        1
>> +        0
>>          -- </e_expr-17.2.1>
>>      })
>>  
>>  test:do_execsql_test(
>>      "e_expr-17.2.2",
>>      [[
>> -        SELECT 'abcxyz' NOT GLOB 'abc*'
>> +        PRAGMA case_sensitive_like = 0
>>      ]], {
> delete 17.2.1 17.2.2 (it was creaget for glob, like tested below), and move 
> `PRAGMA case_sensitive_like = 0` out of the test (it is not a test) (use just test:execsql or box.exequte)

Done.

>>          -- <e_expr-17.2.2>
>> -        0
>> -        -- </e_expr-17.2.2>
>> +
>> +        -- <e_expr-17.2.2>
>>      })
>>  
>>  test:do_execsql_test(
>> @@ -2448,62 +2374,6 @@ if 0>0 then
>>      db("nullvalue", "")
>>  end
>>  
>> --- EVIDENCE-OF: R-39414-35489 The infix GLOB operator is implemented by
>> --- calling the function glob(Y,X) and can be modified by overriding that
>> --- function.
>> -
>> -local globargs = {}
>> -local function globfunc(...)
>> -    local args = {...}
>> -    for i, v in ipairs(args) do
>> -        table.insert(globargs, v)
>> -    end
>> -    return 1
>> -end
>> -box.internal.sql_create_function("GLOB", globfunc, 2)
>> ---db("func", "glob", "-argcount", 2, "globfunc")
> Do not delete this test. Rewrite it for like.

There’re literally almost the same tests for like (15.1.x).

>> -
>> -test:do_execsql_test(
>> -    "e_expr-17.3.1",
>> -    [[
>> -        SELECT 'abc' GLOB 'def'
>> -    ]], {
>> -        -- <e_expr-17.3.1>
>> -        1
>> -        -- </e_expr-17.3.1>
>> -    })
>> -
>> -test:do_test(
>> -    "e_expr-17.3.2",
>> -    function()
>> -        return globargs
>> -    end, {
>> -        -- <e_expr-17.3.2>
>> -        "def", "abc"
>> -        -- </e_expr-17.3.2>
>> -    })
>> -
>> -globargs = {  }
>> -test:do_execsql_test(
>> -    "e_expr-17.3.3",
>> -    [[
>> -        SELECT 'X' NOT GLOB 'Y'
>> -    ]], {
>> -        -- <e_expr-17.3.3>
>> -        0
>> -        -- </e_expr-17.3.3>
>> -    })
>> -
>> -test:do_test(
>> -    "e_expr-17.3.4",
>> -    function()
>> -        return globargs
>> -    end, {
>> -        -- <e_expr-17.3.4>
>> -        "Y", "X"
>> -        -- </e_expr-17.3.4>
>> -    })
>> -
>>  --sqlite3("db", "test.db")
>>  -- EVIDENCE-OF: R-41650-20872 No regexp() user function is defined by
>>  -- default and so use of the REGEXP operator will normally result in an
>> diff --git a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
>> index addf0e36d..a6d822ccd 100755

diff:

diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index 28b435ae3..f57967bd8 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -631,12 +631,6 @@ static const int case_insensitive_like = 1;
  */
 static const int case_sensitive_like = 0;
 
-/**
- * Wildcards.
- */
-#define match_one '_'
-#define match_all '%'
-
 /**
  * Possible error returns from sql_utf8_pattern_compare().
  */
@@ -693,7 +687,7 @@ sql_utf8_pattern_compare(const char *pattern,
 		c = Utf8Read(pattern, pattern_end);
 		if (c == SQL_INVALID_UTF8_SYMBOL)
 			return SQL_INVALID_PATTERN;
-		if (c == match_all) {
+		if (c == MATCH_ALL_WILDCARD) {
 			/**
 			 * Skip over multiple "%" characters in
 			 * the pattern. If there are also "_"
@@ -705,9 +699,10 @@ sql_utf8_pattern_compare(const char *pattern,
 			       SQL_END_OF_STRING) {
 				if (c == SQL_INVALID_UTF8_SYMBOL)
 					return SQL_INVALID_PATTERN;
-				if (c != match_all && c != match_one)
+				if (c != MATCH_ALL_WILDCARD &&
+				    c != MATCH_ONE_WILDCARD)
 					break;
-				if (c == match_one &&
+				if (c == MATCH_ONE_WILDCARD &&
 				    (c2 = Utf8Read(string, string_end)) ==
 				    SQL_END_OF_STRING)
 					return SQL_NOWILDCARDMATCH;
@@ -801,7 +796,7 @@ sql_utf8_pattern_compare(const char *pattern,
 			    c == u_tolower(c2))
 				continue;
 		}
-		if (c == match_one && pattern != zEscaped &&
+		if (c == MATCH_ONE_WILDCARD && pattern != zEscaped &&
 		    c2 != SQL_END_OF_STRING)
 			continue;
 		return SQL_NOMATCH;
@@ -894,11 +889,10 @@ likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
 		const unsigned char *zEsc = sqlite3_value_text(argv[2]);
 		if (zEsc == 0)
 			return;
+		const char *const err_msg =
+			"ESCAPE expression must be a single character";
 		if (sqlite3Utf8CharLen((char *)zEsc, -1) != 1) {
-			sqlite3_result_error(context,
-					     "ESCAPE expression must be a"
-					     " single character",
-					     -1);
+			sqlite3_result_error(context, err_msg, -1);
 			return;
 		}
 		escape = sqlite3Utf8Read(&zEsc);
@@ -911,8 +905,9 @@ likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
 	int res;
 	res = sql_utf8_pattern_compare(zB, zA, *is_like_ci, escape);
 	if (res == SQL_INVALID_PATTERN) {
-		sqlite3_result_error(context, "LIKE pattern can only contain"
-				     " UTF-8 characters", -1);
+		const char *const err_msg =
+			"LIKE pattern can only contain UTF-8 characters";
+		sqlite3_result_error(context, err_msg, -1);
 		return;
 	}
 	sqlite3_result_int(context, res == SQL_MATCH);
diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
index a805adf22..420c76bfe 100644
--- a/src/box/sql/sqliteInt.h
+++ b/src/box/sql/sqliteInt.h
@@ -564,6 +564,12 @@ sqlite3_snprintf(int, char *, const char *, ...);
 char *
 sqlite3_vsnprintf(int, char *, const char *, va_list);
 
+/**
+ * Wildcard characters used in REGEXP-like operators.
+ */
+#define MATCH_ONE_WILDCARD '_'
+#define MATCH_ALL_WILDCARD '%'
+
 int
 sql_strlike_cs(const char *zLike, const char *zStr, unsigned int cEsc);
 
diff --git a/src/box/sql/whereexpr.c b/src/box/sql/whereexpr.c
index 2d9fb6453..616acc640 100644
--- a/src/box/sql/whereexpr.c
+++ b/src/box/sql/whereexpr.c
@@ -218,12 +218,6 @@ operatorMask(int op)
 	return c;
 }
 
-/**
- * Wildcard characters.
- */
-#define match_one '_'
-#define match_all '%'
-
 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
 /**
  * Check to see if the given expression is a LIKE operator that
@@ -305,11 +299,13 @@ is_like(Parse *pParse,
 	}
 	if (z) {
 		cnt = 0;
-		while ((c = z[cnt]) != 0 && c != match_one && c != match_all)
+		while ((c = z[cnt]) != 0 && c != MATCH_ONE_WILDCARD &&
+		       c != MATCH_ALL_WILDCARD)
 			cnt++;
 		if (cnt != 0 && 255 != (u8) z[cnt - 1]) {
 			Expr *pPrefix;
-			*pisComplete = c == match_all && z[cnt + 1] == 0;
+			*pisComplete = c == MATCH_ALL_WILDCARD &&
+				       z[cnt + 1] == 0;
 			pPrefix = sqlite3Expr(db, TK_STRING, z);
 			if (pPrefix)
 				pPrefix->u.zToken[cnt] = 0;
diff --git a/test/sql-tap/e_expr.test.lua b/test/sql-tap/e_expr.test.lua
index 0d69e8535..6d1edcfd0 100755
--- a/test/sql-tap/e_expr.test.lua
+++ b/test/sql-tap/e_expr.test.lua
@@ -77,7 +77,6 @@ local operations = {
     {"<>", "ne1"},
     {"!=", "ne2"},
     {"IS", "is"},
---    {"LIKE", "like"},
     {"AND", "and"},
     {"OR", "or"},
     {"MATCH", "match"},
@@ -98,7 +97,7 @@ operations = {
 -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
 --               are waiting for their hour, don't confuse them
 --               being commented with commenting of "LIKE".
-    {"=", "==", "!=", "<>"}, --"LIKE"}, --"MATCH", "REGEXP"},
+    {"=", "==", "!=", "<>"}, --"MATCH", "REGEXP"},
     {"AND"},
     {"OR"},
 }
@@ -2278,10 +2277,12 @@ test:do_execsql_test(
         -- </e_expr-17.2.0>
     })
 
+test:execsql("PRAGMA case_sensitive_like = 0;")
+
 test:do_execsql_test(
     "e_expr-17.2.1",
     [[
-        SELECT 'abcxyz' NOT LIKE 'abc%'
+        SELECT 'abcxyz' NOT LIKE 'ABC%'
     ]], {
         -- <e_expr-17.2.1>
         0
@@ -2290,85 +2291,65 @@ test:do_execsql_test(
 
 test:do_execsql_test(
     "e_expr-17.2.2",
-    [[
-        PRAGMA case_sensitive_like = 0
-    ]], {
-        -- <e_expr-17.2.2>
-
-        -- <e_expr-17.2.2>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.2.3",
-    [[
-        SELECT 'abcxyz' NOT LIKE 'ABC%'
-    ]], {
-        -- <e_expr-17.2.3>
-        0
-        -- </e_expr-17.2.3>
-    })
-
-test:do_execsql_test(
-    "e_expr-17.2.4",
     [[
         SELECT 'abcxyz' NOT LIKE 'abc%'
     ]], {
-        -- <e_expr-17.2.4>
+        -- <e_expr-17.2.2>
         0
-        -- </e_expr-17.2.4>
+        -- </e_expr-17.2.2>
     })
 
 test:do_execsql_test(
-    "e_expr-17.2.5",
+    "e_expr-17.2.3",
     [[
         SELECT 'abdxyz' NOT LIKE 'abc%'
     ]], {
-        -- <e_expr-17.2.5>
+        -- <e_expr-17.2.3>
         1
-        -- </e_expr-17.2.5>
+        -- </e_expr-17.2.3>
     })
 
 -- MUST_WORK_TEST uses access to nullvalue... (sql parameters) and built in functions
 if 0>0 then
     db("nullvalue", "null")
     test:do_execsql_test(
-        "e_expr-17.2.6",
+        "e_expr-17.2.4",
         [[
             SELECT 'abcxyz' NOT GLOB NULL
         ]], {
-            -- <e_expr-17.2.6>
+            -- <e_expr-17.2.4>
             "null"
-            -- </e_expr-17.2.6>
+            -- </e_expr-17.2.4>
         })
 
     test:do_execsql_test(
-        "e_expr-17.2.7",
+        "e_expr-17.2.5",
         [[
             SELECT 'abcxyz' NOT LIKE NULL
         ]], {
-            -- <e_expr-17.2.7>
+            -- <e_expr-17.2.5>
             "null"
-            -- </e_expr-17.2.7>
+            -- </e_expr-17.2.5>
         })
 
     test:do_execsql_test(
-        "e_expr-17.2.8",
+        "e_expr-17.2.6",
         [[
             SELECT NULL NOT GLOB 'abc*'
         ]], {
-            -- <e_expr-17.2.8>
+            -- <e_expr-17.2.6>
             "null"
-            -- </e_expr-17.2.8>
+            -- </e_expr-17.2.6>
         })
 
     test:do_execsql_test(
-        "e_expr-17.2.9",
+        "e_expr-17.2.7",
         [[
             SELECT NULL NOT LIKE 'ABC%'
         ]], {
-            -- <e_expr-17.2.9>
+            -- <e_expr-17.2.7>
             "null"
-            -- </e_expr-17.2.9>
+            -- </e_expr-17.2.7>
         })
 
     db("nullvalue", "")


[-- Attachment #2: Type: text/html, Size: 57703 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-10-18 20:28             ` Nikita Tatunov
@ 2018-10-21  3:48               ` Alexander Turenko
  2018-10-26 15:21                 ` Nikita Tatunov
  0 siblings, 1 reply; 46+ messages in thread
From: Alexander Turenko @ 2018-10-21  3:48 UTC (permalink / raw)
  To: Nikita Tatunov; +Cc: tarantool-patches, korablev

I don't have objections re this commit in general. Please, fix minor
comments below and proceed with Nikita P.

WBR, Alexander Turenko.

> - * Providing there are symbols in string s this
> - * macro returns UTF-8 code of character and
> - * promotes pointer to the next symbol in the string.
> - * Otherwise return code is SQL_END_OF_STRING.
> + * Providing there are symbols in string s this macro returns
> + * UTF-8 code of character and promotes pointer to the next
> + * symbol in the string. If s points to an invalid UTF-8 symbol
> + * return code is SQL_INVALID_UTF8_SYMBOL. If there're no symbols
> + * left in string s return code is SQL_END_OF_STRING.

> -/*
> - * Possible error returns from sql_utf8_pattern_compare()
> +/**
> + * Possible error returns from sql_utf8_pattern_compare().
>   */

> - *      '%'       Matches any sequence of zero or more characters.
> + *      '%'       Matches any sequence of zero or more
> + *                characters.

> - *      Ec        Where E is the "esc" character and c is any other
> - *                character, including '%', '_', and esc, match
> - *                exactly c.
> + *      Ec        Where E is the "esc" character and c is any
> + *                other character, including '%', '_', and esc,
> + *                match exactly c.

> -       const char * pattern_end = pattern + strlen(pattern);
> -       const char * string_end = string + strlen(string);
> +       const char *pattern_end = pattern + strlen(pattern);
> +       const char *string_end = string + strlen(string);

Please, amend these hunks into the first patch. The first patch includes
code style fixes, so it would look more appropriate in it, eps. when you
already touch the code in it.

> +static const int case_insensitive_like = 1;
> +static const int case_sensitive_like = 0;

Are not they are mutually exclusive? Can we leave just one?

Why they are not defines?

/** .. */ inside functions should be /* */ (they are just comments and
they aren't documentation comments). It appears here ans there, so,
please, grep the intire patch for such things.

> -       return sql_utf8_pattern_compare(zGlobPattern, zString, &globInfo, '[');
> +       return sql_utf8_pattern_compare(zPattern, zStr, case_sensitive_like, esc);

> -       return sql_utf8_pattern_compare(zPattern, zStr, &likeInfoNorm, esc);
> +       return sql_utf8_pattern_compare(zPattern, zStr, case_insensitive_like, esc);

Exceeds 80 symbols

> + * @param is_case_sensitive whether like should be case sensitive
> + *                      or not.

Indent is strange.

> +       int *is_like_ci;
> +       if (is_case_sensitive)
> +               is_like_ci = (int *)&case_sensitive_like;
> +       else
> +               is_like_ci = (int *)&case_insensitive_like;

Discarding const qualifier? It seems not being right thing to do. It is
better to define is_like_ci pointer as const.

> -int sqlite3IsLikeFunction(sqlite3 *, Expr *, int *, char *);
> +int sql_is_like_func(sqlite3 *db, Expr *pExpr, int *is_case_insensitive);

The code around does not have parameter names, so here they are looks
strange.

> +       /* String on RHS of LIKE operator */
> +       const char *z = 0;
> +       /* Right and left size of LIKE operator */
> +       Expr *pRight, *pLeft;
> +       /* List of operands to the LIKE operator */
> +       ExprList *pList;
> +       /* One character in z[] */
> +       int c;
> +       /* Number of non-wildcard prefix characters */
> +       int cnt;
> +       /* Database connection */
> +       sqlite3 *db = pParse->db;
>         sqlite3_value *pVal = 0;
> -       int op;                 /* Opcode of pRight */
> -       int rc;                 /* Result code to return */
> +       /* Opcode of pRight */
> +       int op;
> +       /* Result code to return */
> +       int rc;

Our code style suggests to add a period at end of the comment. The same
in exprAnalyze() below.

> +        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';

Trailing whitespaces.

> --- NOTE: This test needs refactoring after deletion of GLOB &
> ---      type restrictions for LIKE. (See #3572)
>  -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
> ---              are waiting for their hour, don't confuse them
> ---              being commented with ticket above.
> -    {"=", "==", "!=", "<>"}, --"LIKE", "GLOB"}, --"MATCH", "REGEXP"},
> +--               are waiting for their hour, don't confuse them
> +--               being commented with commenting of "LIKE".
> +    {"=", "==", "!=", "<>"}, --"MATCH", "REGEXP"},

Another NOTE -> NOTE.

'don't confuse them being commented with commenting of "LIKE"' -- can be
removed.

test/sql-tap/like3.test.lua cases can be rewritten with LIKE instead of
removing, right? I think it worth to do if it is so.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-10-18 18:02                   ` Nikita Tatunov
@ 2018-10-21  3:51                     ` Alexander Turenko
  2018-10-26 15:19                       ` Nikita Tatunov
  0 siblings, 1 reply; 46+ messages in thread
From: Alexander Turenko @ 2018-10-21  3:51 UTC (permalink / raw)
  To: Nikita Tatunov; +Cc: tarantool-patches, korablev

Hi!

Thanks for your work.

The email is big, but don't afraid. I don't push you to rewrite the
whole things again :)

The patch is generally okay for me. Minor comments are added on this.

Below I answered to your investigation about the libicu code. I found
that you was not right in some assumptions, but propose to postpone
refactoring out of this task.

Then I found some possible corner cases. They are out of the scope of
your task too, so I proposed to check and file issues.

WBR, Alexander Turenko.

1, 2 - ok.

> >        s=*source;
> >        if(sourceLimit<s) {
> >            *err=U_ILLEGAL_ARGUMENT_ERROR;
> >            return 0xffff;
> 
>    3. This one cannot trigger in sql_utf8_pattern_compare():
>    1) ucnv_getNextUChar is only called when !(sourceLimit<s).

The discussion is about that the patch lean on the check, but here you
say it cannot be triggered. Mistake? It seems it can be triggered and it
the case we check in our code. So, ok.

> >     /*
> >      * Make sure that the buffer sizes do not exceed the number range for
> >      * int32_t because some functions use the size (in units or bytes)
> >      * rather than comparing pointers, and because offsets are int32_t values.
> >      *
> >      * size_t is guaranteed to be unsigned and large enough for the job.
> >      *
> >      * Return with an error instead of adjusting the limits because we would
> >      * not be able to maintain the semantics that either the source must be
> >      * consumed or the target filled (unless an error occurs).
> >      * An adjustment would be sourceLimit=t+0x7fffffff; for example.
> >      */
> >     if(((size_t)(sourceLimit-s)>(size_t)0x7fffffff && sourceLimit>s)) {
> >         *err=U_ILLEGAL_ARGUMENT_ERROR;
> >         return 0xffff;
>
> 4. I’m not sure if string data can be this long in our context. 
>    (string length > (size_t) 0x7ffffffff)

Note: not 0x7ffffffff, but 0x7fffffff.

This limit seems to be some weird internal thing related to using
ucnv_getNextUChar inside libicu.

I propose to lie libicu about the buffer size in case when it exceeds
this limit. A UTF-8 encoded symbol is 4 bytes long at max, so we can
pass the following instead of pattern_end:

((size_t) (pattern_end - pattern) > (size_t) 0x7fffffff ? pattern + 0x7fffffff : pattern_end

I think this trick need to be covered with a unit test (because it is unclear
how to create a string of size >1GiB from lua). Don't sure whether it is
okay to allocate such amount of memory in the test, though...

Please, don't do that within this patch, because it is about the another bug.
File an issue with all needed information instead (you can provide a link to
this message for example).

> >     if(c<0) {
> >         /*
> >          * call the native getNextUChar() implementation if we are
> >          * at a character boundary (toULength==0)
> >          *
> >          * unlike with _toUnicode(), getNextUChar() implementations must set
> >          * U_TRUNCATED_CHAR_FOUND for truncated input,
> >          * in addition to setting toULength/toUBytes[]
> >          */
> >         if(cnv->toULength==0 && cnv->sharedData->impl->getNextUChar!=NULL) {
> >             c=cnv->sharedData->impl->getNextUChar(&args, err);
> >             *source=s=args.source;
> >             if(*err==U_INDEX_OUTOFBOUNDS_ERROR) {
> >                 /* reset the converter without calling the callback function */
> >                 _reset(cnv, UCNV_RESET_TO_UNICODE, FALSE);
> >                 return 0xffff; /* no output */
>
> 5. Occurs when trying to access unindexed data.

Don't got your note here. It seems we call ucnv_getNextUChar_UTF8 from
ucnv_u8.c here (because of the "utf8" type of the converter in pUtf8conv
in func.c). U_INDEX_OUTOFBOUNDS_ERROR is returned when (s >
sourceLimit), so it cannot occur here. In case of an other error
(U_ILLEGAL_CHAR_FOUND or U_TRUNCATED_CHAR_FOUND) we fall through to
_toUnicode() as the comment (below the code pasted above) suggests.
Don't investigated further.

> >             } else if(U_SUCCESS(*err) && c>=0) {
> >                 return c;
>
> 6. Returns symbol (can also be 0xfffd, as it is not treated as an actual error).
>
> So if I’m not mistaken we will get results in our function either from
> ‘return’ number 5 or number 6 and the following code will not be executed.

It is not so. We'll fall through in case of U_ILLEGAL_CHAR_FOUND or
U_TRUNCATED_CHAR_FOUND error.

To be honest I don't want to continue. It seems we should not lean on
the fact that 0xffff always means end of the buffer, because it does not
guaranteed by the API and is not clear from the code.

AFAIR, the problem was to choose appropriate symbol to mark end of the
buffer situation and distinguish it from a real error. It seems we have
not one. So we should fairly (and always) check for the buffer before a
call to ucnv_getNextUChar() or check the status it provide after the
call. I would prefer to check it in our code. It seems that it is how
the API works.

I propose to use the same code pattern for all Utf8Read calls, e.g.:

if (pattern < pattern_end)
	c = Utf8Read(pattern, pattern_end)
else
	return SQL_...;
if (c == SQL_INVALID_UTF8_SYMBOL)
	return SQL_...;
assert(U_SUCCESS(status));

Note: I have added the assert, because it is not clear what we can do
with, say, U_INVALID_TABLE_FORMAT (improper libicu build /
installation). Hope Nikita P. suggests right way, but now I think we
should at least assert on that.

It seems the code above can be even wrapped into a macro that will get
two pointers (pattern and pattern_end / string and string_end) and two
SQL_...  error code to handle two possible errors. Yep, it is generally
discouraged to return from a macro, but if it'll greatly improves the
code readability, so it is appropriate, I think. Just define the macro
right before the function and undefne it after to show a reader it is
some pure internal thing.

Note: If you will going that way, don't wrap Utf8Read macro into another
macro. Use one with ucnv_getNextUChar call.

It is refactoring of the code and our of the scope of your issue.
Please, file an issue and link this message into it (but please ask
Nikita P. opinion before).

It is not good IMHO, but it seems now it worth to leave the code with
assumption 0xffff is the end of buffer. This is kind of splitting the
problem into parts and allow us to proceed with this patch re parsing
bug.

About the patch
---------------

Please, post an issue and a branch links if you don't cite them.
Sometimes it is hard to find them in a mail client history, esp. after
some significant delay in a discussion.

I'll consider the patch as bugfix + code style fix and will not push you
to rewrite things in significant way. But I'll ask you to formalize
found problems as issues.

It rebased on 2.1 with conflicts. Need to be fixed.

> -#define Utf8Read(s, e)    ucnv_getNextUChar(pUtf8conv, &s, e, &status)
> +#define Utf8Read(s, e) ucnv_getNextUChar(pUtf8conv, &(s), (e), &(status))

'status' is not a parameter of the macro, no need to enclose it into
parentheses.

I would prefer to have it as the parameter, but it seems that the code has many
indent levels and will look even more ugly then now if we'll increase lines
lengths. So, just remove the parentheses.

> + * @param matchOther The escape char (LIKE) or '[' (GLOB).

It is a symbol from ESCAPE parameter or a garbage from the likeFunc
stack frame. It seems it worth to initialize 'u32 escape' in likeFunc to
some symbol you cannot hit within 'c' variable in
sql_utf8_pattern_compare. I think it is SQL_END_OF_STRING. Please, fix
it here if it is related to your changes or file an issue if it was
already here.

> +       /* Next pattern and input string chars */
> +       UChar32 c, c2;
> +       /* "?" or "_" */
> +       UChar32 matchOne = pInfo->matchOne;
> +       /* "*" or "%" */
> +       UChar32 matchAll = pInfo->matchAll;
> +       /* True if uppercase==lowercase */
> +       UChar32 noCase = pInfo->noCase;
> +       /* One past the last escaped input char */

Our code style suggests to have a period at end of a comment.

> -                                       assert(matchOther < 0x80);      /* '[' is a single-byte character */
> +                                       assert(matchOther < 0x80);

The comment was helpful, IMHO.

What if we'll use LIKE with ESCAPE with symbol, say, 'ё'? We have not
such tests cases as I see.

Again, it does not seems to be the problem you solve here. Please, write
a test case and file an issue if this does not work correctly (it seems
we can hit the assert above).

Ouch, now I see, it will be removed in the 2nd commit of the patchset.
So, please, comment it in the commit message of the 1st commit to don't
confuse a reviewer. However the case with non-ASCII ESCAPE character is
worth to be checked anyway.

The code of the sql_utf8_pattern_compare function looks okay for me
(except things I suggested to handle separately).

> test/sql-tap/gh-3251-string-pattern-comparison.test.lua
>
> -    test_name = prefix .. "8." .. tostring(i)
> +    local test_name = prefix .. "8." .. tostring(i)

It is from the 2nd patch, but I think should be here.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-10-21  3:51                     ` Alexander Turenko
@ 2018-10-26 15:19                       ` Nikita Tatunov
  2018-10-29 13:01                         ` Alexander Turenko
  0 siblings, 1 reply; 46+ messages in thread
From: Nikita Tatunov @ 2018-10-26 15:19 UTC (permalink / raw)
  To: tarantool-patches; +Cc: korablev, Alexander Turenko

Hello, Alexander! please consider this answer to the review!

Issues:
https://github.com/tarantool/tarantool/issues/3251
https://github.com/tarantool/tarantool/issues/3334

Branch:
https://github.com/tarantool/tarantool/tree/N_Tatunov/gh-3251-where-like-hangs

> On Oct 21, 2018, at 06:51, Alexander Turenko <alexander.turenko@tarantool.org> wrote:
> 
> Hi!
> 
> Thanks for your work.
> 
> The email is big, but don't afraid. I don't push you to rewrite the
> whole things again :)
> 
> The patch is generally okay for me. Minor comments are added on this.
> 
> Below I answered to your investigation about the libicu code. I found
> that you was not right in some assumptions, but propose to postpone
> refactoring out of this task.
> 
> Then I found some possible corner cases. They are out of the scope of
> your task too, so I proposed to check and file issues.
> 
> WBR, Alexander Turenko.
> 
> 1, 2 - ok.
> 
>>>       s=*source;
>>>       if(sourceLimit<s) {
>>>           *err=U_ILLEGAL_ARGUMENT_ERROR;
>>>           return 0xffff;
>> 
>>   3. This one cannot trigger in sql_utf8_pattern_compare():
>>   1) ucnv_getNextUChar is only called when !(sourceLimit<s).
> 
> The discussion is about that the patch lean on the check, but here you
> say it cannot be triggered. Mistake? It seems it can be triggered and it
> the case we check in our code. So, ok.

Yes I’ve mistaken. I forgot that I changed the macro, thank you.

> 
>>>    /*
>>>     * Make sure that the buffer sizes do not exceed the number range for
>>>     * int32_t because some functions use the size (in units or bytes)
>>>     * rather than comparing pointers, and because offsets are int32_t values.
>>>     *
>>>     * size_t is guaranteed to be unsigned and large enough for the job.
>>>     *
>>>     * Return with an error instead of adjusting the limits because we would
>>>     * not be able to maintain the semantics that either the source must be
>>>     * consumed or the target filled (unless an error occurs).
>>>     * An adjustment would be sourceLimit=t+0x7fffffff; for example.
>>>     */
>>>    if(((size_t)(sourceLimit-s)>(size_t)0x7fffffff && sourceLimit>s)) {
>>>        *err=U_ILLEGAL_ARGUMENT_ERROR;
>>>        return 0xffff;
>> 
>> 4. I’m not sure if string data can be this long in our context. 
>>   (string length > (size_t) 0x7ffffffff)
> 
> Note: not 0x7ffffffff, but 0x7fffffff.
> 
> This limit seems to be some weird internal thing related to using
> ucnv_getNextUChar inside libicu.
> 
> I propose to lie libicu about the buffer size in case when it exceeds
> this limit. A UTF-8 encoded symbol is 4 bytes long at max, so we can
> pass the following instead of pattern_end:
> 
> ((size_t) (pattern_end - pattern) > (size_t) 0x7fffffff ? pattern + 0x7fffffff : pattern_end
> 
> I think this trick need to be covered with a unit test (because it is unclear
> how to create a string of size >1GiB from lua). Don't sure whether it is
> okay to allocate such amount of memory in the test, though...
> 
> Please, don't do that within this patch, because it is about the another bug.
> File an issue with all needed information instead (you can provide a link to
> this message for example).

Ok, thank you for advice. I think that’s a good idea, but there’s one thing
I’m getting concerned about: it will cause a lot of operations especially
in case we’re using LIKE for scanning a lot of data (). I guess even if it’s
relevant it’s a discussion inside of an issue that’s going to be filed.

> 
>>>    if(c<0) {
>>>        /*
>>>         * call the native getNextUChar() implementation if we are
>>>         * at a character boundary (toULength==0)
>>>         *
>>>         * unlike with _toUnicode(), getNextUChar() implementations must set
>>>         * U_TRUNCATED_CHAR_FOUND for truncated input,
>>>         * in addition to setting toULength/toUBytes[]
>>>         */
>>>        if(cnv->toULength==0 && cnv->sharedData->impl->getNextUChar!=NULL) {
>>>            c=cnv->sharedData->impl->getNextUChar(&args, err);
>>>            *source=s=args.source;
>>>            if(*err==U_INDEX_OUTOFBOUNDS_ERROR) {
>>>                /* reset the converter without calling the callback function */
>>>                _reset(cnv, UCNV_RESET_TO_UNICODE, FALSE);
>>>                return 0xffff; /* no output */
>> 
>> 5. Occurs when trying to access unindexed data.
> 
> Don't got your note here. It seems we call ucnv_getNextUChar_UTF8 from
> ucnv_u8.c here (because of the "utf8" type of the converter in pUtf8conv
> in func.c). U_INDEX_OUTOFBOUNDS_ERROR is returned when (s >
> sourceLimit), so it cannot occur here. In case of an other error
> (U_ILLEGAL_CHAR_FOUND or U_TRUNCATED_CHAR_FOUND) we fall through to
> _toUnicode() as the comment (below the code pasted above) suggests.
> Don't investigated further.
> 
>>>            } else if(U_SUCCESS(*err) && c>=0) {
>>>                return c;
>> 
>> 6. Returns symbol (can also be 0xfffd, as it is not treated as an actual error).
>> 
>> So if I’m not mistaken we will get results in our function either from
>> ‘return’ number 5 or number 6 and the following code will not be executed.
> 
> It is not so. We'll fall through in case of U_ILLEGAL_CHAR_FOUND or
> U_TRUNCATED_CHAR_FOUND error.
> 
> To be honest I don't want to continue. It seems we should not lean on
> the fact that 0xffff always means end of the buffer, because it does not
> guaranteed by the API and is not clear from the code.
> 
> AFAIR, the problem was to choose appropriate symbol to mark end of the
> buffer situation and distinguish it from a real error. It seems we have
> not one. So we should fairly (and always) check for the buffer before a
> call to ucnv_getNextUChar() or check the status it provide after the
> call. I would prefer to check it in our code. It seems that it is how
> the API works.
> 
> I propose to use the same code pattern for all Utf8Read calls, e.g.:
> 
> if (pattern < pattern_end)
> 	c = Utf8Read(pattern, pattern_end)
> else
> 	return SQL_...;
> if (c == SQL_INVALID_UTF8_SYMBOL)
> 	return SQL_...;
> assert(U_SUCCESS(status));
> 
> Note: I have added the assert, because it is not clear what we can do
> with, say, U_INVALID_TABLE_FORMAT (improper libicu build /
> installation). Hope Nikita P. suggests right way, but now I think we
> should at least assert on that.
> 
> It seems the code above can be even wrapped into a macro that will get
> two pointers (pattern and pattern_end / string and string_end) and two
> SQL_...  error code to handle two possible errors. Yep, it is generally
> discouraged to return from a macro, but if it'll greatly improves the
> code readability, so it is appropriate, I think. Just define the macro
> right before the function and undefne it after to show a reader it is
> some pure internal thing.
> 
> Note: If you will going that way, don't wrap Utf8Read macro into another
> macro. Use one with ucnv_getNextUChar call.
> 
> It is refactoring of the code and our of the scope of your issue.
> Please, file an issue and link this message into it (but please ask
> Nikita P. opinion before).
> 
> It is not good IMHO, but it seems now it worth to leave the code with
> assumption 0xffff is the end of buffer. This is kind of splitting the
> problem into parts and allow us to proceed with this patch re parsing
> bug.
> 
> About the patch
> ---------------
> 
> Please, post an issue and a branch links if you don't cite them.
> Sometimes it is hard to find them in a mail client history, esp. after
> some significant delay in a discussion.
> 
> I'll consider the patch as bugfix + code style fix and will not push you
> to rewrite things in significant way. But I'll ask you to formalize
> found problems as issues.
> 
> It rebased on 2.1 with conflicts. Need to be fixed.
> 
>> -#define Utf8Read(s, e)    ucnv_getNextUChar(pUtf8conv, &s, e, &status)
>> +#define Utf8Read(s, e) ucnv_getNextUChar(pUtf8conv, &(s), (e), &(status))
> 
> 'status' is not a parameter of the macro, no need to enclose it into
> parentheses.
> 
> I would prefer to have it as the parameter, but it seems that the code has many
> indent levels and will look even more ugly then now if we'll increase lines
> lengths. So, just remove the parentheses.

Removed.

> 
>> + * @param matchOther The escape char (LIKE) or '[' (GLOB).
> 
> It is a symbol from ESCAPE parameter or a garbage from the likeFunc
> stack frame. It seems it worth to initialize 'u32 escape' in likeFunc to
> some symbol you cannot hit within 'c' variable in
> sql_utf8_pattern_compare. I think it is SQL_END_OF_STRING. Please, fix
> it here if it is related to your changes or file an issue if it was
> already here.

Changed to SQL_END_OF_STRING.

>> +       /* Next pattern and input string chars */
>> +       UChar32 c, c2;
>> +       /* "?" or "_" */
>> +       UChar32 matchOne = pInfo->matchOne;
>> +       /* "*" or "%" */
>> +       UChar32 matchAll = pInfo->matchAll;
>> +       /* True if uppercase==lowercase */
>> +       UChar32 noCase = pInfo->noCase;
>> +       /* One past the last escaped input char */
> 
> Our code style suggests to have a period at end of a comment.

Fixed.

> 
>> -                                       assert(matchOther < 0x80);      /* '[' is a single-byte character */
>> +                                       assert(matchOther < 0x80);
> 
> The comment was helpful, IMHO.
> 
> What if we'll use LIKE with ESCAPE with symbol, say, 'ё'? We have not
> such tests cases as I see.
> 
> Again, it does not seems to be the problem you solve here. Please, write
> a test case and file an issue if this does not work correctly (it seems
> we can hit the assert above).
> 
> Ouch, now I see, it will be removed in the 2nd commit of the patchset.
> So, please, comment it in the commit message of the 1st commit to don't
> confuse a reviewer. However the case with non-ASCII ESCAPE character is
> worth to be checked anyway.

I think I will just return the fixed comment to the first commit as anyways
it’s going to be deleted in next commit.

Wrote tests for non-ASCII chars in e_expr.test.lua.

> 
> The code of the sql_utf8_pattern_compare function looks okay for me
> (except things I suggested to handle separately).
> 
>> test/sql-tap/gh-3251-string-pattern-comparison.test.lua
>> 
>> -    test_name = prefix .. "8." .. tostring(i)
>> +    local test_name = prefix .. "8." .. tostring(i)
> 
> It is from the 2nd patch, but I think should be here.
> 


Moved to the first patch.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-10-21  3:48               ` Alexander Turenko
@ 2018-10-26 15:21                 ` Nikita Tatunov
  2018-10-29 12:15                   ` Alexander Turenko
  0 siblings, 1 reply; 46+ messages in thread
From: Nikita Tatunov @ 2018-10-26 15:21 UTC (permalink / raw)
  To: Alexander Turenko; +Cc: tarantool-patches, korablev

Hello again, Alexander!
Here are some comments / fixes to the review.

Issues:
https://github.com/tarantool/tarantool/issues/3334
https://github.com/tarantool/tarantool/issues/3251
https://github.com/tarantool/tarantool/issues/3572

Branch
https://github.com/tarantool/tarantool/tree/N_Tatunov/gh-3251-where-like-hangs

> On Oct 21, 2018, at 06:48, Alexander Turenko <alexander.turenko@tarantool.org> wrote:
> 
> I don't have objections re this commit in general. Please, fix minor
> comments below and proceed with Nikita P.
> 
> WBR, Alexander Turenko.
> 
>> - * Providing there are symbols in string s this
>> - * macro returns UTF-8 code of character and
>> - * promotes pointer to the next symbol in the string.
>> - * Otherwise return code is SQL_END_OF_STRING.
>> + * Providing there are symbols in string s this macro returns
>> + * UTF-8 code of character and promotes pointer to the next
>> + * symbol in the string. If s points to an invalid UTF-8 symbol
>> + * return code is SQL_INVALID_UTF8_SYMBOL. If there're no symbols
>> + * left in string s return code is SQL_END_OF_STRING.
> 
>> -/*
>> - * Possible error returns from sql_utf8_pattern_compare()
>> +/**
>> + * Possible error returns from sql_utf8_pattern_compare().
>>  */
> 
>> - *      '%'       Matches any sequence of zero or more characters.
>> + *      '%'       Matches any sequence of zero or more
>> + *                characters.
> 
>> - *      Ec        Where E is the "esc" character and c is any other
>> - *                character, including '%', '_', and esc, match
>> - *                exactly c.
>> + *      Ec        Where E is the "esc" character and c is any
>> + *                other character, including '%', '_', and esc,
>> + *                match exactly c.
> 
>> -       const char * pattern_end = pattern + strlen(pattern);
>> -       const char * string_end = string + strlen(string);
>> +       const char *pattern_end = pattern + strlen(pattern);
>> +       const char *string_end = string + strlen(string);
> 
> Please, amend these hunks into the first patch. The first patch includes
> code style fixes, so it would look more appropriate in it, eps. when you
> already touch the code in it.

Done.

> 
>> +static const int case_insensitive_like = 1;
>> +static const int case_sensitive_like = 0;
> 
> Are not they are mutually exclusive? Can we leave just one?
> 
> Why they are not defines?

I guess it’s a bad idea since we need pointers to them in some functions.
e.g:

	int *is_like_ci;
	if (is_case_sensitive)
		is_like_ci = (void *)&case_sensitive_like;
	else
		is_like_ci = (void *)&case_insensitive_like;
	sqlite3CreateFunc(db, "LIKE", 2, 0, is_like_ci, likeFunc, 0, 0, 0);
	sqlite3CreateFunc(db, "LIKE", 3, 0, is_like_ci, likeFunc, 0, 0, 0);


> 
> /** .. */ inside functions should be /* */ (they are just comments and
> they aren't documentation comments). It appears here ans there, so,
> please, grep the intire patch for such things.

Fixed.

> 
>> -       return sql_utf8_pattern_compare(zGlobPattern, zString, &globInfo, '[');
>> +       return sql_utf8_pattern_compare(zPattern, zStr, case_sensitive_like, esc);
> 
>> -       return sql_utf8_pattern_compare(zPattern, zStr, &likeInfoNorm, esc);
>> +       return sql_utf8_pattern_compare(zPattern, zStr, case_insensitive_like, esc);
> 
> Exceeds 80 symbols

thank you, didn’t notice.

> 
>> + * @param is_case_sensitive whether like should be case sensitive
>> + *                      or not.
> 
> Indent is strange.

fixed.

> 
>> +       int *is_like_ci;
>> +       if (is_case_sensitive)
>> +               is_like_ci = (int *)&case_sensitive_like;
>> +       else
>> +               is_like_ci = (int *)&case_insensitive_like;
> 
> Discarding const qualifier? It seems not being right thing to do. It is
> better to define is_like_ci pointer as const.

It’s not possible due to so-called “down qualification” and will cause
compiler warnings.

> 
>> -int sqlite3IsLikeFunction(sqlite3 *, Expr *, int *, char *);
>> +int sql_is_like_func(sqlite3 *db, Expr *pExpr, int *is_case_insensitive);
> 
> The code around does not have parameter names, so here they are looks
> strange.

fixed.

> 
>> +       /* String on RHS of LIKE operator */
>> +       const char *z = 0;
>> +       /* Right and left size of LIKE operator */
>> +       Expr *pRight, *pLeft;
>> +       /* List of operands to the LIKE operator */
>> +       ExprList *pList;
>> +       /* One character in z[] */
>> +       int c;
>> +       /* Number of non-wildcard prefix characters */
>> +       int cnt;
>> +       /* Database connection */
>> +       sqlite3 *db = pParse->db;
>>        sqlite3_value *pVal = 0;
>> -       int op;                 /* Opcode of pRight */
>> -       int rc;                 /* Result code to return */
>> +       /* Opcode of pRight */
>> +       int op;
>> +       /* Result code to return */
>> +       int rc;
> 
> Our code style suggests to add a period at end of the comment. The same
> in exprAnalyze() below.

Thank you, fixed.

> 
>> +        INSERT INTO t1 SELECT a+5,6,'six'||substr(c,4) FROM t1 WHERE c LIKE 'one-%';
> 
> Trailing whitespaces.

deleted.

> 
>> --- NOTE: This test needs refactoring after deletion of GLOB &
>> ---      type restrictions for LIKE. (See #3572)
>> -- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
>> ---              are waiting for their hour, don't confuse them
>> ---              being commented with ticket above.
>> -    {"=", "==", "!=", "<>"}, --"LIKE", "GLOB"}, --"MATCH", "REGEXP"},
>> +--               are waiting for their hour, don't confuse them
>> +--               being commented with commenting of "LIKE".
>> +    {"=", "==", "!=", "<>"}, --"MATCH", "REGEXP"},
> 
> Another NOTE -> NOTE.
> 
> 'don't confuse them being commented with commenting of "LIKE"' -- can be
> removed.

Fixed.

> 
> test/sql-tap/like3.test.lua cases can be rewritten with LIKE instead of
> removing, right? I think it worth to do if it is so.

Ok, sure.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-10-26 15:21                 ` Nikita Tatunov
@ 2018-10-29 12:15                   ` Alexander Turenko
  2018-11-08 15:09                     ` Nikita Tatunov
  0 siblings, 1 reply; 46+ messages in thread
From: Alexander Turenko @ 2018-10-29 12:15 UTC (permalink / raw)
  To: Nikita Tatunov; +Cc: tarantool-patches, korablev

Hi!

See remaining comments below.

WBR, Alexander Turenko.

> >> +static const int case_insensitive_like = 1;
> >> +static const int case_sensitive_like = 0;
> > 
> > Are not they are mutually exclusive? Can we leave just one?
> > 
> > Why they are not defines?
> 
> I guess it’s a bad idea since we need pointers to them in some functions.
> e.g:
> 
> 	int *is_like_ci;
> 	if (is_case_sensitive)
> 		is_like_ci = (void *)&case_sensitive_like;
> 	else
> 		is_like_ci = (void *)&case_insensitive_like;
> 	sqlite3CreateFunc(db, "LIKE", 2, 0, is_like_ci, likeFunc, 0, 0, 0);
> 	sqlite3CreateFunc(db, "LIKE", 3, 0, is_like_ci, likeFunc, 0, 0, 0);

I think we can use SQLITE_INT_TO_PTR and SQLITE_PTR_TO_INT to pass an
integer value as a pointer and then cast it back. Maybe we also should
change LIKEFUNC macro.

> >> +       int *is_like_ci;
> >> +       if (is_case_sensitive)
> >> +               is_like_ci = (int *)&case_sensitive_like;
> >> +       else
> >> +               is_like_ci = (int *)&case_insensitive_like;
> > 
> > Discarding const qualifier? It seems not being right thing to do. It is
> > better to define is_like_ci pointer as const.
> 
> It’s not possible due to so-called “down qualification” and will cause
> compiler warnings.

We'll anyway discard it here or there, so nevermind. I proposed to
change it to SQLITE_INT_TO_PTR.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-10-26 15:19                       ` Nikita Tatunov
@ 2018-10-29 13:01                         ` Alexander Turenko
  2018-10-31  5:25                           ` Nikita Tatunov
  0 siblings, 1 reply; 46+ messages in thread
From: Alexander Turenko @ 2018-10-29 13:01 UTC (permalink / raw)
  To: Nikita Tatunov; +Cc: tarantool-patches, korablev

The patch is okay except one note re test case.

WBR, Alexander Turenko.

> --- EVIDENCE-OF: R-39414-35489 The infix GLOB operator is implemented by
> --- calling the function glob(Y,X) and can be modified by overriding that
> --- function.

This test case was removed, while we have not a similar one for LIKE.

> >>>    if(((size_t)(sourceLimit-s)>(size_t)0x7fffffff && sourceLimit>s)) {
> >>>        *err=U_ILLEGAL_ARGUMENT_ERROR;
> >>>        return 0xffff;
> >> 
> >> 4. I’m not sure if string data can be this long in our context. 
> >>   (string length > (size_t) 0x7ffffffff)
> > 
> > Note: not 0x7ffffffff, but 0x7fffffff.
> > 
> > This limit seems to be some weird internal thing related to using
> > ucnv_getNextUChar inside libicu.
> > 
> > I propose to lie libicu about the buffer size in case when it exceeds
> > this limit. A UTF-8 encoded symbol is 4 bytes long at max, so we can
> > pass the following instead of pattern_end:
> > 
> > ((size_t) (pattern_end - pattern) > (size_t) 0x7fffffff ? pattern + 0x7fffffff : pattern_end
> > 
> > I think this trick need to be covered with a unit test (because it is unclear
> > how to create a string of size >1GiB from lua). Don't sure whether it is
> > okay to allocate such amount of memory in the test, though...
> > 
> > Please, don't do that within this patch, because it is about the another bug.
> > File an issue with all needed information instead (you can provide a link to
> > this message for example).
> 
> Ok, thank you for advice. I think that’s a good idea, but there’s one thing
> I’m getting concerned about: it will cause a lot of operations especially
> in case we’re using LIKE for scanning a lot of data (). I guess even if it’s
> relevant it’s a discussion inside of an issue that’s going to be filed.

Filed https://github.com/tarantool/tarantool/issues/3773

> >>>            } else if(U_SUCCESS(*err) && c>=0) {
> >>>                return c;
> >> 
> >> 6. Returns symbol (can also be 0xfffd, as it is not treated as an actual error).
> >> 
> >> So if I’m not mistaken we will get results in our function either from
> >> ‘return’ number 5 or number 6 and the following code will not be executed.
> > 
> > It is not so. We'll fall through in case of U_ILLEGAL_CHAR_FOUND or
> > U_TRUNCATED_CHAR_FOUND error.
> > 
> > To be honest I don't want to continue. It seems we should not lean on
> > the fact that 0xffff always means end of the buffer, because it does not
> > guaranteed by the API and is not clear from the code.
> > 
> > AFAIR, the problem was to choose appropriate symbol to mark end of the
> > buffer situation and distinguish it from a real error. It seems we have
> > not one. So we should fairly (and always) check for the buffer before a
> > call to ucnv_getNextUChar() or check the status it provide after the
> > call. I would prefer to check it in our code. It seems that it is how
> > the API works.
> > 
> > I propose to use the same code pattern for all Utf8Read calls, e.g.:
> > 
> > if (pattern < pattern_end)
> > 	c = Utf8Read(pattern, pattern_end)
> > else
> > 	return SQL_...;
> > if (c == SQL_INVALID_UTF8_SYMBOL)
> > 	return SQL_...;
> > assert(U_SUCCESS(status));
> > 
> > Note: I have added the assert, because it is not clear what we can do
> > with, say, U_INVALID_TABLE_FORMAT (improper libicu build /
> > installation). Hope Nikita P. suggests right way, but now I think we
> > should at least assert on that.
> > 
> > It seems the code above can be even wrapped into a macro that will get
> > two pointers (pattern and pattern_end / string and string_end) and two
> > SQL_...  error code to handle two possible errors. Yep, it is generally
> > discouraged to return from a macro, but if it'll greatly improves the
> > code readability, so it is appropriate, I think. Just define the macro
> > right before the function and undefne it after to show a reader it is
> > some pure internal thing.
> > 
> > Note: If you will going that way, don't wrap Utf8Read macro into another
> > macro. Use one with ucnv_getNextUChar call.
> > 
> > It is refactoring of the code and our of the scope of your issue.
> > Please, file an issue and link this message into it (but please ask
> > Nikita P. opinion before).
> > 
> > It is not good IMHO, but it seems now it worth to leave the code with
> > assumption 0xffff is the end of buffer. This is kind of splitting the
> > problem into parts and allow us to proceed with this patch re parsing
> > bug.

Filed https://github.com/tarantool/tarantool/issues/3774

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-10-29 13:01                         ` Alexander Turenko
@ 2018-10-31  5:25                           ` Nikita Tatunov
  2018-11-01 10:30                             ` Alexander Turenko
  0 siblings, 1 reply; 46+ messages in thread
From: Nikita Tatunov @ 2018-10-31  5:25 UTC (permalink / raw)
  To: Alexander Turenko; +Cc: tarantool-patches, korablev



> On Oct 29, 2018, at 16:01, Alexander Turenko <alexander.turenko@tarantool.org> wrote:
> 
> The patch is okay except one note re test case.
> 
> WBR, Alexander Turenko.
> 
>> --- EVIDENCE-OF: R-39414-35489 The infix GLOB operator is implemented by
>> --- calling the function glob(Y,X) and can be modified by overriding that
>> --- function.
> 
> This test case was removed, while we have not a similar one for LIKE.

I guess it is concerned more with the second patch.
Anyways. If you mean the tests following this comment then
actually there are some similar tests for LIKE (15.1.x).

> 
>>>>>   if(((size_t)(sourceLimit-s)>(size_t)0x7fffffff && sourceLimit>s)) {
>>>>>       *err=U_ILLEGAL_ARGUMENT_ERROR;
>>>>>       return 0xffff;
>>>> 
>>>> 4. I’m not sure if string data can be this long in our context. 
>>>>  (string length > (size_t) 0x7ffffffff)
>>> 
>>> Note: not 0x7ffffffff, but 0x7fffffff.
>>> 
>>> This limit seems to be some weird internal thing related to using
>>> ucnv_getNextUChar inside libicu.
>>> 
>>> I propose to lie libicu about the buffer size in case when it exceeds
>>> this limit. A UTF-8 encoded symbol is 4 bytes long at max, so we can
>>> pass the following instead of pattern_end:
>>> 
>>> ((size_t) (pattern_end - pattern) > (size_t) 0x7fffffff ? pattern + 0x7fffffff : pattern_end
>>> 
>>> I think this trick need to be covered with a unit test (because it is unclear
>>> how to create a string of size >1GiB from lua). Don't sure whether it is
>>> okay to allocate such amount of memory in the test, though...
>>> 
>>> Please, don't do that within this patch, because it is about the another bug.
>>> File an issue with all needed information instead (you can provide a link to
>>> this message for example).
>> 
>> Ok, thank you for advice. I think that’s a good idea, but there’s one thing
>> I’m getting concerned about: it will cause a lot of operations especially
>> in case we’re using LIKE for scanning a lot of data (). I guess even if it’s
>> relevant it’s a discussion inside of an issue that’s going to be filed.
> 
> Filed https://github.com/tarantool/tarantool/issues/3773
> 
>>>>>           } else if(U_SUCCESS(*err) && c>=0) {
>>>>>               return c;
>>>> 
>>>> 6. Returns symbol (can also be 0xfffd, as it is not treated as an actual error).
>>>> 
>>>> So if I’m not mistaken we will get results in our function either from
>>>> ‘return’ number 5 or number 6 and the following code will not be executed.
>>> 
>>> It is not so. We'll fall through in case of U_ILLEGAL_CHAR_FOUND or
>>> U_TRUNCATED_CHAR_FOUND error.
>>> 
>>> To be honest I don't want to continue. It seems we should not lean on
>>> the fact that 0xffff always means end of the buffer, because it does not
>>> guaranteed by the API and is not clear from the code.
>>> 
>>> AFAIR, the problem was to choose appropriate symbol to mark end of the
>>> buffer situation and distinguish it from a real error. It seems we have
>>> not one. So we should fairly (and always) check for the buffer before a
>>> call to ucnv_getNextUChar() or check the status it provide after the
>>> call. I would prefer to check it in our code. It seems that it is how
>>> the API works.
>>> 
>>> I propose to use the same code pattern for all Utf8Read calls, e.g.:
>>> 
>>> if (pattern < pattern_end)
>>> 	c = Utf8Read(pattern, pattern_end)
>>> else
>>> 	return SQL_...;
>>> if (c == SQL_INVALID_UTF8_SYMBOL)
>>> 	return SQL_...;
>>> assert(U_SUCCESS(status));
>>> 
>>> Note: I have added the assert, because it is not clear what we can do
>>> with, say, U_INVALID_TABLE_FORMAT (improper libicu build /
>>> installation). Hope Nikita P. suggests right way, but now I think we
>>> should at least assert on that.
>>> 
>>> It seems the code above can be even wrapped into a macro that will get
>>> two pointers (pattern and pattern_end / string and string_end) and two
>>> SQL_...  error code to handle two possible errors. Yep, it is generally
>>> discouraged to return from a macro, but if it'll greatly improves the
>>> code readability, so it is appropriate, I think. Just define the macro
>>> right before the function and undefne it after to show a reader it is
>>> some pure internal thing.
>>> 
>>> Note: If you will going that way, don't wrap Utf8Read macro into another
>>> macro. Use one with ucnv_getNextUChar call.
>>> 
>>> It is refactoring of the code and our of the scope of your issue.
>>> Please, file an issue and link this message into it (but please ask
>>> Nikita P. opinion before).
>>> 
>>> It is not good IMHO, but it seems now it worth to leave the code with
>>> assumption 0xffff is the end of buffer. This is kind of splitting the
>>> problem into parts and allow us to proceed with this patch re parsing
>>> bug.
> 
> Filed https://github.com/tarantool/tarantool/issues/3774

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-10-31  5:25                           ` Nikita Tatunov
@ 2018-11-01 10:30                             ` Alexander Turenko
  2018-11-14 14:16                               ` n.pettik
  0 siblings, 1 reply; 46+ messages in thread
From: Alexander Turenko @ 2018-11-01 10:30 UTC (permalink / raw)
  To: Nikita Tatunov; +Cc: korablev, tarantool-patches

On Wed, Oct 31, 2018 at 08:25:12AM +0300, Nikita Tatunov wrote:
> 
> 
> > On Oct 29, 2018, at 16:01, Alexander Turenko <alexander.turenko@tarantool.org> wrote:
> > 
> > The patch is okay except one note re test case.
> > 
> > WBR, Alexander Turenko.
> > 
> >> --- EVIDENCE-OF: R-39414-35489 The infix GLOB operator is implemented by
> >> --- calling the function glob(Y,X) and can be modified by overriding that
> >> --- function.
> > 
> > This test case was removed, while we have not a similar one for LIKE.
> 
> I guess it is concerned more with the second patch.
> Anyways. If you mean the tests following this comment then
> actually there are some similar tests for LIKE (15.1.x).

Found test cases with user-defined like function. Missed it before,
sorry.

I have no more comments re this commit. Please, proceed with Nikita.

WBR, Alexander Turenko.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-10-29 12:15                   ` Alexander Turenko
@ 2018-11-08 15:09                     ` Nikita Tatunov
  2018-11-09 12:18                       ` Alexander Turenko
  0 siblings, 1 reply; 46+ messages in thread
From: Nikita Tatunov @ 2018-11-08 15:09 UTC (permalink / raw)
  To: tarantool-patches; +Cc: korablev, Alexander Turenko

[-- Attachment #1: Type: text/plain, Size: 8698 bytes --]

Hello! thank you for the review.

Issues:
https://github.com/tarantool/tarantool/issues/3251 <https://github.com/tarantool/tarantool/issues/3251>
https://github.com/tarantool/tarantool/issues/3334 <https://github.com/tarantool/tarantool/issues/3334>

Branch:
https://github.com/tarantool/tarantool/tree/N_Tatunov/gh-3251-where-like-hangs <https://github.com/tarantool/tarantool/tree/N_Tatunov/gh-3251-where-like-hangs>

Please consider following changes:

1. I rebased the whole branch on fresh 2.1.

> On Oct 29, 2018, at 15:15, Alexander Turenko <alexander.turenko@tarantool.org> wrote:
> 
> Hi!
> 
> See remaining comments below.
> 
> WBR, Alexander Turenko.
> 
>>>> +static const int case_insensitive_like = 1;
>>>> +static const int case_sensitive_like = 0;
>>> 
>>> Are not they are mutually exclusive? Can we leave just one?
>>> 
>>> Why they are not defines?
>> 
>> I guess it’s a bad idea since we need pointers to them in some functions.
>> e.g:
>> 
>> 	int *is_like_ci;
>> 	if (is_case_sensitive)
>> 		is_like_ci = (void *)&case_sensitive_like;
>> 	else
>> 		is_like_ci = (void *)&case_insensitive_like;
>> 	sqlite3CreateFunc(db, "LIKE", 2, 0, is_like_ci, likeFunc, 0, 0, 0);
>> 	sqlite3CreateFunc(db, "LIKE", 3, 0, is_like_ci, likeFunc, 0, 0, 0);
> 
> I think we can use SQLITE_INT_TO_PTR and SQLITE_PTR_TO_INT to pass an
> integer value as a pointer and then cast it back. Maybe we also should
> change LIKEFUNC macro.
> 
>>>> +       int *is_like_ci;
>>>> +       if (is_case_sensitive)
>>>> +               is_like_ci = (int *)&case_sensitive_like;
>>>> +       else
>>>> +               is_like_ci = (int *)&case_insensitive_like;
>>> 
>>> Discarding const qualifier? It seems not being right thing to do. It is
>>> better to define is_like_ci pointer as const.
>> 
>> It’s not possible due to so-called “down qualification” and will cause
>> compiler warnings.
> 
> We'll anyway discard it here or there, so nevermind. I proposed to
> change it to SQLITE_INT_TO_PTR.
> 


2. Changed manipulations with “sensitiveness” of LIKE using your advice
thus there’s no static consts in func.c anymore.


diff with the previous version of the patch:

diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index b1983e594..5feab52f6 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -627,18 +627,6 @@ total_changes(sqlite3_context * context, int NotUsed, sqlite3_value ** NotUsed2)
 #define SQL_END_OF_STRING        0xffff
 #define SQL_INVALID_UTF8_SYMBOL  0xfffd
 
-/**
- * If SQLITE_CASE_SENSITIVE_LIKE is not defined, then the LIKE
- * operator is not case sensitive.
- */
-static const int case_insensitive_like = 1;
-
-/**
- * If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE
- * operator is case sensitive causing 'a' LIKE 'A' to be false.
- */
-static const int case_sensitive_like = 0;
-
 /**
  * Possible error returns from sql_utf8_pattern_compare().
  */
@@ -819,8 +807,7 @@ sql_utf8_pattern_compare(const char *pattern,
 int
 sql_strlike_cs(const char *zPattern, const char *zStr, unsigned int esc)
 {
-	return sql_utf8_pattern_compare(zPattern, zStr, case_sensitive_like,
-					esc);
+	return sql_utf8_pattern_compare(zPattern, zStr, 0, esc);
 }
 
 /**
@@ -830,8 +817,7 @@ sql_strlike_cs(const char *zPattern, const char *zStr, unsigned int esc)
 int
 sql_strlike_ci(const char *zPattern, const char *zStr, unsigned int esc)
 {
-	return sql_utf8_pattern_compare(zPattern, zStr, case_insensitive_like,
-					esc);
+	return sql_utf8_pattern_compare(zPattern, zStr, 1, esc);
 }
 
 /**
@@ -859,7 +845,7 @@ likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
 	u32 escape = SQL_END_OF_STRING;
 	int nPat;
 	sqlite3 *db = sqlite3_context_db_handle(context);
-	int *is_like_ci = sqlite3_user_data(context);
+	int is_like_ci = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
 
 #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS
 	if (sqlite3_value_type(argv[0]) == SQLITE_BLOB
@@ -913,7 +899,7 @@ likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
 	sqlite3_like_count++;
 #endif
 	int res;
-	res = sql_utf8_pattern_compare(zB, zA, *is_like_ci, escape);
+	res = sql_utf8_pattern_compare(zB, zA, is_like_ci, escape);
 	if (res == SQL_INVALID_PATTERN) {
 		const char *const err_msg =
 			"LIKE pattern can only contain UTF-8 characters";
@@ -1698,24 +1684,20 @@ setLikeOptFlag(sqlite3 * db, const char *zName, u8 flagVal)
  * @retval none.
  */
 void
-sqlite3RegisterLikeFunctions(sqlite3 *db, int is_case_sensitive)
+sqlite3RegisterLikeFunctions(sqlite3 *db, int *is_case_insensitive)
 {
 	/*
 	 * FIXME: after introducing type <BOOLEAN> LIKE must
 	 * return that type: TRUE if the string matches the
 	 * supplied pattern and FALSE otherwise.
 	 */
-	int *is_like_ci;
-	if (is_case_sensitive)
-		is_like_ci = (void *)&case_sensitive_like;
-	else
-		is_like_ci = (void *)&case_insensitive_like;
-	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 2, 0, is_like_ci,
-			  likeFunc, 0, 0, 0);
-	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 3, 0, is_like_ci,
-			  likeFunc, 0, 0, 0);
+	int is_like_ci = SQLITE_PTR_TO_INT(is_case_insensitive);
+	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 2, 0,
+			  is_case_insensitive, likeFunc, 0, 0, 0);
+	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 3, 0,
+			  is_case_insensitive, likeFunc, 0, 0, 0);
 	setLikeOptFlag(db, "LIKE",
-		       is_case_sensitive ? (SQLITE_FUNC_LIKE |
+		       !(is_like_ci) ? (SQLITE_FUNC_LIKE |
 		       SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
 }
 
@@ -1841,14 +1823,14 @@ sqlite3RegisterBuiltinFunctions(void)
 			  groupConcatFinalize, AFFINITY_TEXT),
 
 #ifdef SQLITE_CASE_SENSITIVE_LIKE
-		LIKEFUNC(like, 2, &case_sensitive_like,
-			 SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE, AFFINITY_INTEGER),
-		LIKEFUNC(like, 3, &case_sensitive_like,
-			 SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE, AFFINITY_INTEGER),
+		LIKEFUNC(like, 2, 0,SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE,
+			 AFFINITY_INTEGER),
+		LIKEFUNC(like, 3, 0,SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE,
+			 AFFINITY_INTEGER),
 #else
-		LIKEFUNC(like, 2, &case_insensitive_like, SQLITE_FUNC_LIKE,
+		LIKEFUNC(like, 2, 1, SQLITE_FUNC_LIKE,
 			AFFINITY_INTEGER),
-		LIKEFUNC(like, 3, &case_insensitive_like, SQLITE_FUNC_LIKE,
+		LIKEFUNC(like, 3, 1, SQLITE_FUNC_LIKE,
 			AFFINITY_INTEGER),
 #endif
 #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
diff --git a/src/box/sql/pragma.c b/src/box/sql/pragma.c
index cd6db2b34..546b18ae2 100644
--- a/src/box/sql/pragma.c
+++ b/src/box/sql/pragma.c
@@ -586,9 +586,10 @@ sqlite3Pragma(Parse * pParse, Token * pId,	/* First part of [schema.]id field */
 		 */
 	case PragTyp_CASE_SENSITIVE_LIKE:{
 			if (zRight) {
+				int *is_like_ci =
+					SQLITE_INT_TO_PTR(!(sqlite3GetBoolean(zRight, 0)));
 				sqlite3RegisterLikeFunctions(db,
-							     sqlite3GetBoolean
-							     (zRight, 0));
+							     is_like_ci);
 			}
 			break;
 		}
diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
index f92d4e6b8..dd819622b 100644
--- a/src/box/sql/sqliteInt.h
+++ b/src/box/sql/sqliteInt.h
@@ -1759,7 +1759,7 @@ struct FuncDestructor {
    pArg, 0, xFunc, 0, #zName, {SQLITE_AFF_STRING, {0}}}
 #define LIKEFUNC(zName, nArg, arg, flags, type) \
   {nArg, SQLITE_FUNC_CONSTANT|flags, \
-   (void *)arg, 0, likeFunc, 0, #zName, {0}, type }
+   (void *)(SQLITE_INT_TO_PTR(arg)), 0, likeFunc, 0, #zName, {0}, type }
 #define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal, type) \
   {nArg, (nc*SQLITE_FUNC_NEEDCOLL), \
    SQLITE_INT_TO_PTR(arg), 0, xStep,xFinal,#zName, {0}, type}
@@ -4551,7 +4551,7 @@ sql_key_info_unref(struct sql_key_info *key_info);
 struct key_def *
 sql_key_info_to_key_def(struct sql_key_info *key_info);
 
-void sqlite3RegisterLikeFunctions(sqlite3 *, int);
+void sqlite3RegisterLikeFunctions(sqlite3 *, int *);
 int sql_is_like_func(sqlite3 *, Expr *, int *);
 int sqlite3CreateFunc(sqlite3 *, const char *, enum affinity_type,
 		      int, int, void *,
diff --git a/test/sql-tap/collation.test.lua b/test/sql-tap/collation.test.lua
index eb4f43a90..dbbe1c0fe 100755
--- a/test/sql-tap/collation.test.lua
+++ b/test/sql-tap/collation.test.lua
@@ -219,7 +219,7 @@ local like_testcases =
         {0, {"Aab", "aaa"}} },
     {"2.1.2",
         "EXPLAIN QUERY PLAN SELECT * FROM tx1 WHERE s1 LIKE 'A%';",
-        {0, {0, 0, 0, "/USING COVERING INDEX I1/"}} },
+        {0, {0, 0, 0, "SEARCH TABLE TX1 USING COVERING INDEX I1 (S1>? AND S1<?)"}}},
     {"2.2.0",
         "PRAGMA case_sensitive_like = true;",
         {0}},


[-- Attachment #2: Type: text/html, Size: 19004 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-11-08 15:09                     ` Nikita Tatunov
@ 2018-11-09 12:18                       ` Alexander Turenko
  2018-11-10  3:38                         ` Nikita Tatunov
  0 siblings, 1 reply; 46+ messages in thread
From: Alexander Turenko @ 2018-11-09 12:18 UTC (permalink / raw)
  To: Nikita Tatunov; +Cc: tarantool-patches, korablev

Hi!

See comments below.

WBR, Alexander Turenko.

On Thu, Nov 08, 2018 at 06:09:23PM +0300, Nikita Tatunov wrote:
> Hello! thank you for the review.
> 
> Issues:
> https://github.com/tarantool/tarantool/issues/3251 <https://github.com/tarantool/tarantool/issues/3251>
> https://github.com/tarantool/tarantool/issues/3334 <https://github.com/tarantool/tarantool/issues/3334>
> 
> Branch:
> https://github.com/tarantool/tarantool/tree/N_Tatunov/gh-3251-where-like-hangs <https://github.com/tarantool/tarantool/tree/N_Tatunov/gh-3251-where-like-hangs>
> 

It seems you forgot to push the new changes.

> @@ -913,7 +899,7 @@ likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
>  	sqlite3_like_count++;
>  #endif
>  	int res;
> -	res = sql_utf8_pattern_compare(zB, zA, *is_like_ci, escape);
> +	res = sql_utf8_pattern_compare(zB, zA, is_like_ci, escape);
>  	if (res == SQL_INVALID_PATTERN) {
>  		const char *const err_msg =
>  			"LIKE pattern can only contain UTF-8 characters";
> @@ -1698,24 +1684,20 @@ setLikeOptFlag(sqlite3 * db, const char *zName, u8 flagVal)
>   * @retval none.
>   */
>  void
> -sqlite3RegisterLikeFunctions(sqlite3 *db, int is_case_sensitive)
> +sqlite3RegisterLikeFunctions(sqlite3 *db, int *is_case_insensitive)
>  {
>  	/*
>  	 * FIXME: after introducing type <BOOLEAN> LIKE must
>  	 * return that type: TRUE if the string matches the
>  	 * supplied pattern and FALSE otherwise.
>  	 */
> -	int *is_like_ci;
> -	if (is_case_sensitive)
> -		is_like_ci = (void *)&case_sensitive_like;
> -	else
> -		is_like_ci = (void *)&case_insensitive_like;
> -	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 2, 0, is_like_ci,
> -			  likeFunc, 0, 0, 0);
> -	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 3, 0, is_like_ci,
> -			  likeFunc, 0, 0, 0);
> +	int is_like_ci = SQLITE_PTR_TO_INT(is_case_insensitive);
> +	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 2, 0,
> +			  is_case_insensitive, likeFunc, 0, 0, 0);
> +	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 3, 0,
> +			  is_case_insensitive, likeFunc, 0, 0, 0);
>  	setLikeOptFlag(db, "LIKE",
> -		       is_case_sensitive ? (SQLITE_FUNC_LIKE |
> +		       !(is_like_ci) ? (SQLITE_FUNC_LIKE |
>  		       SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
>  }

I think sqlite3RegisterLikeFunctions should accept int as the second
parameter.

BTW, it seems that we add SQLITE_FUNC_CASE into flags, so maybe we can
read it in likeFunc and don't pass additional parameter at all? It is
just raw idea, I don't know the mechanics of sql functions much.

> diff --git a/test/sql-tap/collation.test.lua b/test/sql-tap/collation.test.lua
> index eb4f43a90..dbbe1c0fe 100755
> --- a/test/sql-tap/collation.test.lua
> +++ b/test/sql-tap/collation.test.lua
> @@ -219,7 +219,7 @@ local like_testcases =
>          {0, {"Aab", "aaa"}} },
>      {"2.1.2",
>          "EXPLAIN QUERY PLAN SELECT * FROM tx1 WHERE s1 LIKE 'A%';",
> -        {0, {0, 0, 0, "/USING COVERING INDEX I1/"}} },
> +        {0, {0, 0, 0, "SEARCH TABLE TX1 USING COVERING INDEX I1 (S1>? AND S1<?)"}}},

What is this hunk about?

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-11-09 12:18                       ` Alexander Turenko
@ 2018-11-10  3:38                         ` Nikita Tatunov
  2018-11-13 19:23                           ` Alexander Turenko
  0 siblings, 1 reply; 46+ messages in thread
From: Nikita Tatunov @ 2018-11-10  3:38 UTC (permalink / raw)
  To: Alexander Turenko; +Cc: tarantool-patches, korablev

[-- Attachment #1: Type: text/plain, Size: 6666 bytes --]

Hello!

Thank you for comments.

> On Nov 9, 2018, at 15:18, Alexander Turenko <alexander.turenko@tarantool.org> wrote:
> 
> Hi!
> 
> See comments below.
> 
> WBR, Alexander Turenko.
> 
> On Thu, Nov 08, 2018 at 06:09:23PM +0300, Nikita Tatunov wrote:
>> Hello! thank you for the review.
>> 
>> Issues:
>> https://github.com/tarantool/tarantool/issues/3251 <https://github.com/tarantool/tarantool/issues/3251>
>> https://github.com/tarantool/tarantool/issues/3334 <https://github.com/tarantool/tarantool/issues/3334>
>> 
>> Branch:
>> https://github.com/tarantool/tarantool/tree/N_Tatunov/gh-3251-where-like-hangs <https://github.com/tarantool/tarantool/tree/N_Tatunov/gh-3251-where-like-hangs>
>> 
> 
> It seems you forgot to push the new changes.

Ermm, did I? I have just opened the branch and it contains a commit
which was pushed at 8th of November (and as I see it’s exactly the commit
from the diff)

> 
>> @@ -913,7 +899,7 @@ likeFunc(sqlite3_context *context, int argc, sqlite3_value **argv)
>> 	sqlite3_like_count++;
>> #endif
>> 	int res;
>> -	res = sql_utf8_pattern_compare(zB, zA, *is_like_ci, escape);
>> +	res = sql_utf8_pattern_compare(zB, zA, is_like_ci, escape);
>> 	if (res == SQL_INVALID_PATTERN) {
>> 		const char *const err_msg =
>> 			"LIKE pattern can only contain UTF-8 characters";
>> @@ -1698,24 +1684,20 @@ setLikeOptFlag(sqlite3 * db, const char *zName, u8 flagVal)
>>  * @retval none.
>>  */
>> void
>> -sqlite3RegisterLikeFunctions(sqlite3 *db, int is_case_sensitive)
>> +sqlite3RegisterLikeFunctions(sqlite3 *db, int *is_case_insensitive)
>> {
>> 	/*
>> 	 * FIXME: after introducing type <BOOLEAN> LIKE must
>> 	 * return that type: TRUE if the string matches the
>> 	 * supplied pattern and FALSE otherwise.
>> 	 */
>> -	int *is_like_ci;
>> -	if (is_case_sensitive)
>> -		is_like_ci = (void *)&case_sensitive_like;
>> -	else
>> -		is_like_ci = (void *)&case_insensitive_like;
>> -	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 2, 0, is_like_ci,
>> -			  likeFunc, 0, 0, 0);
>> -	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 3, 0, is_like_ci,
>> -			  likeFunc, 0, 0, 0);
>> +	int is_like_ci = SQLITE_PTR_TO_INT(is_case_insensitive);
>> +	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 2, 0,
>> +			  is_case_insensitive, likeFunc, 0, 0, 0);
>> +	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 3, 0,
>> +			  is_case_insensitive, likeFunc, 0, 0, 0);
>> 	setLikeOptFlag(db, "LIKE",
>> -		       is_case_sensitive ? (SQLITE_FUNC_LIKE |
>> +		       !(is_like_ci) ? (SQLITE_FUNC_LIKE |
>> 		       SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
>> }
> 
> I think sqlite3RegisterLikeFunctions should accept int as the second
> parameter.

Sure, fixed it.

> BTW, it seems that we add SQLITE_FUNC_CASE into flags, so maybe we can
> read it in likeFunc and don't pass additional parameter at all? It is
> just raw idea, I don't know the mechanics of sql functions much.

I’m not sure it’s a good idea, at least not in terms of this patch.
Call to likeFunc comes right from OP_FUNCTION which is used for sql
functions (of course it’s not only LIKE). Thus the list of parameters is
pretty much defined there.

	(*pCtx->pFunc->xSFunc)(pCtx, pCtx->argc, pCtx->argv);/* IMP: R-24505-23230 */

> 
>> diff --git a/test/sql-tap/collation.test.lua b/test/sql-tap/collation.test.lua
>> index eb4f43a90..dbbe1c0fe 100755
>> --- a/test/sql-tap/collation.test.lua
>> +++ b/test/sql-tap/collation.test.lua
>> @@ -219,7 +219,7 @@ local like_testcases =
>>         {0, {"Aab", "aaa"}} },
>>     {"2.1.2",
>>         "EXPLAIN QUERY PLAN SELECT * FROM tx1 WHERE s1 LIKE 'A%';",
>> -        {0, {0, 0, 0, "/USING COVERING INDEX I1/"}} },
>> +        {0, {0, 0, 0, "SEARCH TABLE TX1 USING COVERING INDEX I1 (S1>? AND S1<?)"}}},
> 
> What is this hunk about?

I found that this changed message occurs even on fresh 2.1.
I was using this and few other test cases to test my patch so it was
kind of concerned with the patch and i decided to fix it at the same time.
(I don’t really think it does worth opening an issue).
I assume this issue was caused by commit 6b8acd8fde and just
wasn’t fixed.
I guess I should’ve wrote about it in the previous letter.


diff with the previous version:

diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index 5feab52f6..ed7926b18 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -1684,20 +1684,20 @@ setLikeOptFlag(sqlite3 * db, const char *zName, u8 flagVal)
  * @retval none.
  */
 void
-sqlite3RegisterLikeFunctions(sqlite3 *db, int *is_case_insensitive)
+sqlite3RegisterLikeFunctions(sqlite3 *db, int is_case_insensitive)
 {
 	/*
 	 * FIXME: after introducing type <BOOLEAN> LIKE must
 	 * return that type: TRUE if the string matches the
 	 * supplied pattern and FALSE otherwise.
 	 */
-	int is_like_ci = SQLITE_PTR_TO_INT(is_case_insensitive);
+	int *is_like_ci = SQLITE_INT_TO_PTR(is_case_insensitive);
 	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 2, 0,
-			  is_case_insensitive, likeFunc, 0, 0, 0);
+			  is_like_ci, likeFunc, 0, 0, 0);
 	sqlite3CreateFunc(db, "LIKE", AFFINITY_INTEGER, 3, 0,
-			  is_case_insensitive, likeFunc, 0, 0, 0);
+			  is_like_ci, likeFunc, 0, 0, 0);
 	setLikeOptFlag(db, "LIKE",
-		       !(is_like_ci) ? (SQLITE_FUNC_LIKE |
+		       !(is_case_insensitive) ? (SQLITE_FUNC_LIKE |
 		       SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
 }
 
diff --git a/src/box/sql/pragma.c b/src/box/sql/pragma.c
index 546b18ae2..8939aa702 100644
--- a/src/box/sql/pragma.c
+++ b/src/box/sql/pragma.c
@@ -586,10 +586,9 @@ sqlite3Pragma(Parse * pParse, Token * pId,	/* First part of [schema.]id field */
 		 */
 	case PragTyp_CASE_SENSITIVE_LIKE:{
 			if (zRight) {
-				int *is_like_ci =
-					SQLITE_INT_TO_PTR(!(sqlite3GetBoolean(zRight, 0)));
-				sqlite3RegisterLikeFunctions(db,
-							     is_like_ci);
+				int is_like_ci =
+					!(sqlite3GetBoolean(zRight, 0));
+				sqlite3RegisterLikeFunctions(db, is_like_ci);
 			}
 			break;
 		}
diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
index dd819622b..07e83e444 100644
--- a/src/box/sql/sqliteInt.h
+++ b/src/box/sql/sqliteInt.h
@@ -4551,7 +4551,7 @@ sql_key_info_unref(struct sql_key_info *key_info);
 struct key_def *
 sql_key_info_to_key_def(struct sql_key_info *key_info);
 
-void sqlite3RegisterLikeFunctions(sqlite3 *, int *);
+void sqlite3RegisterLikeFunctions(sqlite3 *, int);
 int sql_is_like_func(sqlite3 *, Expr *, int *);
 int sqlite3CreateFunc(sqlite3 *, const char *, enum affinity_type,
 		      int, int, void *,



[-- Attachment #2: Type: text/html, Size: 15454 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-11-10  3:38                         ` Nikita Tatunov
@ 2018-11-13 19:23                           ` Alexander Turenko
  2018-11-14 14:16                             ` n.pettik
  0 siblings, 1 reply; 46+ messages in thread
From: Alexander Turenko @ 2018-11-13 19:23 UTC (permalink / raw)
  To: Nikita Tatunov; +Cc: tarantool-patches, korablev

Hi!

I gave some minor comments and I think I cannot add any value anymore.
Nikita N., can you look into this patch?

> -               if (sqlite3_strglob("unordered*", z) == 0) {
> +               if (sql_strlike_cs("unordered%", z, '[') == 0)
>                         index->def->opts.stat->is_unordered = true;
> -               } else if (sqlite3_strglob("noskipscan*", z) == 0) {
> +               else if (sql_strlike_cs("noskipscan%", z, '[') == 0)
>                         index->def->opts.stat->skip_scan_enabled = false;
> -               }

I don't think '[' works here as it was in globs, so the parameter can be
just removed.

> -sqlite3_strglob(const char *zGlobPattern, const char *zString)
> +sql_strlike_cs(const char *zPattern, const char *zStr, unsigned int esc)

Why not UChar32, but 'unsigned int'? (It does not matter if the above is
true.)

See other comments below.

WBR, Alexander Turenko.

> > BTW, it seems that we add SQLITE_FUNC_CASE into flags, so maybe we can
> > read it in likeFunc and don't pass additional parameter at all? It is
> > just raw idea, I don't know the mechanics of sql functions much.
> 
> I’m not sure it’s a good idea, at least not in terms of this patch.
> Call to likeFunc comes right from OP_FUNCTION which is used for sql
> functions (of course it’s not only LIKE). Thus the list of parameters is
> pretty much defined there.
> 
> 	(*pCtx->pFunc->xSFunc)(pCtx, pCtx->argc, pCtx->argv);/* IMP: R-24505-23230 */
> 

I'll leave this question to consider for the next reviewer.

> >> diff --git a/test/sql-tap/collation.test.lua b/test/sql-tap/collation.test.lua
> >> index eb4f43a90..dbbe1c0fe 100755
> >> --- a/test/sql-tap/collation.test.lua
> >> +++ b/test/sql-tap/collation.test.lua
> >> @@ -219,7 +219,7 @@ local like_testcases =
> >>         {0, {"Aab", "aaa"}} },
> >>     {"2.1.2",
> >>         "EXPLAIN QUERY PLAN SELECT * FROM tx1 WHERE s1 LIKE 'A%';",
> >> -        {0, {0, 0, 0, "/USING COVERING INDEX I1/"}} },
> >> +        {0, {0, 0, 0, "SEARCH TABLE TX1 USING COVERING INDEX I1 (S1>? AND S1<?)"}}},
> > 
> > What is this hunk about?
> 
> I found that this changed message occurs even on fresh 2.1.
> I was using this and few other test cases to test my patch so it was
> kind of concerned with the patch and i decided to fix it at the same time.
> (I don’t really think it does worth opening an issue).
> I assume this issue was caused by commit 6b8acd8fde and just
> wasn’t fixed.
> I guess I should’ve wrote about it in the previous letter.
> 

If so it should be separate commit. At least the message of this commit
should state the changes.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-11-01 10:30                             ` Alexander Turenko
@ 2018-11-14 14:16                               ` n.pettik
  2018-11-14 17:06                                 ` Alexander Turenko
  0 siblings, 1 reply; 46+ messages in thread
From: n.pettik @ 2018-11-14 14:16 UTC (permalink / raw)
  To: tarantool-patches; +Cc: Nikita Tatunov, Alexander Turenko

Hello, guys.

I suggest following diff. It doesn’t involve any functional changes.
Obviously, as far as bug has been fixed, patch LGTM.
It is up to you whether discard my fixes or apply them.
I pushed fixes to the separate branch, since I had to solve
rebase conflicts after adding my fixes.

 np/gh-3251-where-like-hangs

diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index 6632c5983..e01519aa9 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -650,12 +650,16 @@ static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
 static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
 
 /**
- * Possible error returns from sql_utf8_pattern_compare().
+ * Returns codes from sql_utf8_pattern_compare().
  */
-#define SQL_MATCH                0
-#define SQL_NOMATCH              1
-#define SQL_NOWILDCARDMATCH      2
-#define SQL_INVALID_PATTERN      3
+enum pattern_match_status {
+       MATCH = 0,
+       NO_MATCH = 1,
+       /** No match in spite of having * or % wildcards. */
+       NO_WILDCARD_MATCH = 2,
+       /** Pattern contains invalid UTF-8 symbol. */
+       INVALID_PATTERN = 3
+};
 
 /**
  * Compare two UTF-8 strings for equality where the first string
@@ -699,12 +703,7 @@ static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
  * @param compareInfo Information about how to compare.
  * @param matchOther The escape char (LIKE) or '[' (GLOB).
  *
- * @retval SQL_MATCH:               Match.
- *        SQL_NOMATCH:             No match.
- *        SQL_NOWILDCARDMATCH:     No match in spite of having *
- *                                 or % wildcards.
- *        SQL_INVALID_PATTERN:     Pattern contains invalid
- *                                 symbol.
+ * @retval One of pattern_match_status values.
  */
 static int
 sql_utf8_pattern_compare(const char *pattern,
@@ -729,10 +728,11 @@ sql_utf8_pattern_compare(const char *pattern,
        while (pattern < pattern_end) {
                c = Utf8Read(pattern, pattern_end);
                if (c == SQL_INVALID_UTF8_SYMBOL)
-                       return SQL_INVALID_PATTERN;
-               if (c == matchAll) {    /* Match "*" */
+                       return INVALID_PATTERN;
+               if (c == matchAll) {
                        /*
-                        * Skip over multiple "*" characters in
+                        * Match *:
+                        * skip over multiple "*" characters in
                         * the pattern. If there are also "?"
                         * characters, skip those as well, but
                         * consume a single character of the
@@ -741,29 +741,28 @@ sql_utf8_pattern_compare(const char *pattern,
                        while ((c = Utf8Read(pattern, pattern_end)) !=
                               SQL_END_OF_STRING) {
                                if (c == SQL_INVALID_UTF8_SYMBOL)
-                                       return SQL_INVALID_PATTERN;
+                                       return INVALID_PATTERN;
                                if (c != matchAll && c != matchOne)
                                        break;
                                if (c == matchOne &&
                                    (c2 = Utf8Read(string, string_end)) ==
                                    SQL_END_OF_STRING)
-                                       return SQL_NOWILDCARDMATCH;
+                                       return NO_WILDCARD_MATCH;
                                if (c2 == SQL_INVALID_UTF8_SYMBOL)
-                                       return SQL_NOMATCH;
+                                       return NO_MATCH;
                        }
                        /*
                         * "*" at the end of the pattern matches.
                         */
-                       if (c == SQL_END_OF_STRING) {
-                               return SQL_MATCH;
-                       }
+                       if (c == SQL_END_OF_STRING)
+                               return MATCH;
                        if (c == matchOther) {
                                if (pInfo->matchSet == 0) {
                                        c = Utf8Read(pattern, pattern_end);
                                        if (c == SQL_INVALID_UTF8_SYMBOL)
-                                               return SQL_INVALID_PATTERN;
+                                               return INVALID_PATTERN;
                                        if (c == SQL_END_OF_STRING)
-                                               return SQL_NOWILDCARDMATCH;
+                                               return NO_WILDCARD_MATCH;
                                } else {
                                        /* "[...]" immediately
                                         * follows the "*". We
@@ -785,13 +784,13 @@ sql_utf8_pattern_compare(const char *pattern,
                                                                string,
                                                                pInfo,
                                                                matchOther);
-                                               if (bMatch != SQL_NOMATCH)
+                                               if (bMatch != NO_MATCH)
                                                        return bMatch;
                                                c = Utf8Read(string, string_end);
                                                if (c == SQL_INVALID_UTF8_SYMBOL)
-                                                       return SQL_NOMATCH;
+                                                       return NO_MATCH;
                                        }
-                                       return SQL_NOWILDCARDMATCH;
+                                       return NO_WILDCARD_MATCH;
                                }
                        }
 
@@ -825,7 +824,7 @@ sql_utf8_pattern_compare(const char *pattern,
                                 */
                                c2 = Utf8Read(string, string_end);
                                if (c2 == SQL_INVALID_UTF8_SYMBOL)
-                                       return SQL_NOMATCH;
+                                       return NO_MATCH;
                                if (!noCase) {
                                        if (c2 != c)
                                                continue;
@@ -837,18 +836,18 @@ sql_utf8_pattern_compare(const char *pattern,
                                                                  string,
                                                                  pInfo,
                                                                  matchOther);
-                               if (bMatch != SQL_NOMATCH)
+                               if (bMatch != NO_MATCH)
                                        return bMatch;
                        }
-                       return SQL_NOWILDCARDMATCH;
+                       return NO_WILDCARD_MATCH;
                }
                if (c == matchOther) {
                        if (pInfo->matchSet == 0) {
                                c = Utf8Read(pattern, pattern_end);
                                if (c == SQL_INVALID_UTF8_SYMBOL)
-                                       return SQL_INVALID_PATTERN;
+                                       return INVALID_PATTERN;
                                if (c == SQL_END_OF_STRING)
-                                       return SQL_NOMATCH;
+                                       return NO_MATCH;
                                zEscaped = pattern;
                        } else {
                                UChar32 prior_c = 0;
@@ -856,24 +855,24 @@ sql_utf8_pattern_compare(const char *pattern,
                                int invert = 0;
                                c = Utf8Read(string, string_end);
                                if (c == SQL_INVALID_UTF8_SYMBOL)
-                                       return SQL_NOMATCH;
+                                       return NO_MATCH;
                                if (string == string_end)
-                                       return SQL_NOMATCH;
+                                       return NO_MATCH;
                                c2 = Utf8Read(pattern, pattern_end);
                                if (c2 == SQL_INVALID_UTF8_SYMBOL)
-                                       return SQL_INVALID_PATTERN;
+                                       return INVALID_PATTERN;
                                if (c2 == '^') {
                                        invert = 1;
                                        c2 = Utf8Read(pattern, pattern_end);
                                        if (c2 == SQL_INVALID_UTF8_SYMBOL)
-                                               return SQL_INVALID_PATTERN;
+                                               return INVALID_PATTERN;
                                }
                                if (c2 == ']') {
                                        if (c == ']')
                                                seen = 1;
                                        c2 = Utf8Read(pattern, pattern_end);
                                        if (c2 == SQL_INVALID_UTF8_SYMBOL)
-                                               return SQL_INVALID_PATTERN;
+                                               return INVALID_PATTERN;
                                }
                                while (c2 != SQL_END_OF_STRING && c2 != ']') {
                                        if (c2 == '-' && pattern[0] != ']'
@@ -881,30 +880,28 @@ sql_utf8_pattern_compare(const char *pattern,
                                            && prior_c > 0) {
                                                c2 = Utf8Read(pattern, pattern_end);
                                                if (c2 == SQL_INVALID_UTF8_SYMBOL)
-                                                       return SQL_INVALID_PATTERN;
+                                                       return INVALID_PATTERN;
                                                if (c >= prior_c && c <= c2)
                                                        seen = 1;
                                                prior_c = 0;
                                        } else {
-                                               if (c == c2) {
+                                               if (c == c2)
                                                        seen = 1;
-                                               }
                                                prior_c = c2;
                                        }
                                        c2 = Utf8Read(pattern, pattern_end);
                                        if (c2 == SQL_INVALID_UTF8_SYMBOL)
-                                               return SQL_INVALID_PATTERN;
+                                               return INVALID_PATTERN;
                                }
                                if (pattern == pattern_end ||
-                                   (seen ^ invert) == 0) {
-                                       return SQL_NOMATCH;
-                               }
+                                   (seen ^ invert) == 0)
+                                       return NO_MATCH;
                                continue;
                        }
                }
                c2 = Utf8Read(string, string_end);
                if (c2 == SQL_INVALID_UTF8_SYMBOL)
-                       return SQL_NOMATCH;
+                       return NO_MATCH;
                if (c == c2)
                        continue;
                if (noCase){
@@ -916,16 +913,15 @@ sql_utf8_pattern_compare(const char *pattern,
                         * to_lower allows to respect Turkish 'İ'
                         * in default locale.
                         */
-                       if (u_tolower(c) == c2 ||
-                           c == u_tolower(c2))
+                       if (u_tolower(c) == c2 || c == u_tolower(c2))
                                continue;
                }
                if (c == matchOne && pattern != zEscaped &&
                    c2 != SQL_END_OF_STRING)
                        continue;
-               return SQL_NOMATCH;
+               return NO_MATCH;
        }
-       return string == string_end ? SQL_MATCH : SQL_NOMATCH;
+       return string == string_end ? MATCH : NO_MATCH;
 }
 
 /*
@@ -1030,12 +1026,12 @@ likeFunc(sqlite3_context * context, int argc, sqlite3_value ** argv)
 #endif
        int res;
        res = sql_utf8_pattern_compare(zB, zA, pInfo, escape);
-       if (res == SQL_INVALID_PATTERN) {
+       if (res == INVALID_PATTERN) {
                sqlite3_result_error(context, "LIKE or GLOB pattern can only"
                                     " contain UTF-8 characters", -1);
                return;
        }
-       sqlite3_result_int(context, res == SQL_MATCH);
+       sqlite3_result_int(context, res == MATCH);
 }
 
 /*
diff --git a/test/sql-tap/e_expr.test.lua b/test/sql-tap/e_expr.test.lua
index 3697b7d7f..682771f36 100755
--- a/test/sql-tap/e_expr.test.lua
+++ b/test/sql-tap/e_expr.test.lua
@@ -99,10 +99,10 @@ operations = {
     {"<<", ">>", "&", "|"},
     {"<", "<=", ">", ">="},
 -- NOTE: This test needs refactoring after deletion of GLOB &
---      type restrictions for LIKE. (See #3572)
--- Another NOTE: MATCH & REGEXP aren't supported in Tarantool &
---              are waiting for their hour, don't confuse them
---              being commented with ticket above.
+-- type restrictions for LIKE. (See #3572)
+-- Also, MATCH & REGEXP aren't supported in Tarantool &
+-- are waiting for their hour, don't confuse them
+-- being commented with ticket above.
     {"=", "==", "!=", "<>"}, --"LIKE", "GLOB"}, --"MATCH", "REGEXP"},
     {"AND"},
     {"OR"},
@@ -493,7 +493,6 @@ for _, op in ipairs(oplist) do
         end
     end
 end
-
 ---------------------------------------------------------------------------
 -- Test the IS and IS NOT operators.
 --
diff --git a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
index c2a2a4d92..612b8183a 100755
--- a/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
+++ b/test/sql-tap/gh-3251-string-pattern-comparison.test.lua
@@ -133,7 +133,7 @@ local invalid_testcases = {
     '\xD0',
 }
 
--- Invalid testcases.
+-- Invalid unicode symbols.
 for i, tested_string in ipairs(invalid_testcases) do
 
     -- We should raise an error in case
@@ -183,7 +183,7 @@ local valid_testcases = {
     '\xE2\x80\xA9',
 }
 
--- Valid testcases.
+-- Valid unicode symbols.
 for i, tested_string in ipairs(valid_testcases) do
     local test_name = prefix .. "8." .. tostring(i)
     local test_itself = "SELECT 'abc' LIKE 'ab" .. tested_string .. "';"

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-11-13 19:23                           ` Alexander Turenko
@ 2018-11-14 14:16                             ` n.pettik
  2018-11-14 17:41                               ` Alexander Turenko
  0 siblings, 1 reply; 46+ messages in thread
From: n.pettik @ 2018-11-14 14:16 UTC (permalink / raw)
  To: tarantool-patches; +Cc: Nikita Tatunov, Alexander Turenko



> On 13 Nov 2018, at 22:23, Alexander Turenko <alexander.turenko@tarantool.org> wrote:
> 
> Hi!
> 
> I gave some minor comments and I think I cannot add any value anymore.
> Nikita N., can you look into this patch?

>    Part of #3589
>    Part of #3572
>    Needed for #3251
>    Needed for #3334

Why this patch is ’needed for’ but comes after
these issues are closed by previous patch?

Also I don’t like the fact that your patch not only removes
GLOB function, but also changes some user-visible interface.
It still would be OK if you wrote about it in commit message
or in doc request. For instance, as I understand from code,
percent symbol (‘%’) now works as star (‘*’) did before.

Personally I don’t like many code style fixes because
they obfuscate patch and make it complicate to review.
What is more, they don’t deal with all problems: they
partially fix comments but don’t fix naming. It looks awful.
But since it is done and two reviewers already gave their
OK I guess it would be irrational to start from scratch.

Finally, to be honest I didn’t review ALL changed tests.
I looked through and they seem to be OK.

I’ve pushed also several non-functional fixes -
see branch np/gh-3251-where-like-hangs.

Let's assume this as formal LGTM.

diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index f0baf3db0..c3d3ccfb2 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -1674,12 +1674,6 @@ setLikeOptFlag(sqlite3 * db, const char *zName, u8 flagVal)
 
 /**
  * Register the built-in LIKE function.
- *
- * @param db database structure.
- * @param is_case_sensitive whether like should be case sensitive
- *                         or not.
- *
- * @retval none.
  */
 void
 sqlite3RegisterLikeFunctions(sqlite3 *db, int is_case_insensitive)
@@ -1699,30 +1693,18 @@ sqlite3RegisterLikeFunctions(sqlite3 *db, int is_case_insensitive)
                       SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
 }
 
-/**
- * Check if the function implements LIKE-style comparison & if it
- * is appropriate to apply a LIKE query optimization.
- *
- * @param db database structure.
- * @param pExpr pointer to a function-implementing expression.
- * @param is_like_ci true if LIKE is case insensitive.
- *
- * @retval 0 if it's appropriate to apply optimization.
- *         1 if it's not.
- */
 int
-sql_is_like_func(sqlite3 *db, Expr *pExpr, int *is_like_ci)
+sql_is_like_func(struct sqlite3 *db, struct Expr *expr, bool *is_like_ci)
 {
-       FuncDef *pDef;
-       if (pExpr->op != TK_FUNCTION || !pExpr->x.pList ||
-           pExpr->x.pList->nExpr != 2)
+       if (expr->op != TK_FUNCTION || !expr->x.pList ||
+           expr->x.pList->nExpr != 2)
                return 0;
-       assert(!ExprHasProperty(pExpr, EP_xIsSelect));
-       pDef = sqlite3FindFunction(db, pExpr->u.zToken, 2, 0);
-       if (NEVER(pDef == 0) || (pDef->funcFlags & SQLITE_FUNC_LIKE) == 0) {
+       assert(!ExprHasProperty(expr, EP_xIsSelect));
+       struct FuncDef *func = sqlite3FindFunction(db, expr->u.zToken, 2, 0);
+       assert(func != NULL);
+       if ((func->funcFlags & SQLITE_FUNC_LIKE) == 0)
                return 0;
-       }
-       *is_like_ci = (pDef->funcFlags & SQLITE_FUNC_CASE) == 0;
+       *is_like_ci = (func->funcFlags & SQLITE_FUNC_CASE) == 0;
        return 1;
 }
 
diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h
index 07e83e444..af124b731 100644
--- a/src/box/sql/sqliteInt.h
+++ b/src/box/sql/sqliteInt.h
@@ -4552,7 +4552,20 @@ struct key_def *
 sql_key_info_to_key_def(struct sql_key_info *key_info);
 
 void sqlite3RegisterLikeFunctions(sqlite3 *, int);
-int sql_is_like_func(sqlite3 *, Expr *, int *);
+
+/**
+ * Check if the function implements LIKE-style comparison & if it
+ * is appropriate to apply a LIKE query optimization.
+ *
+ * @param db database structure.
+ * @param pExpr pointer to a function-implementing expression.
+ * @param[out] is_like_ci true if LIKE is case insensitive.
+ *
+ * @retval 1 if LIKE optimization can be used, 0 otherwise.
+ */
+int
+sql_is_like_func(struct sqlite3 *db, struct Expr *expr, bool *is_like_ci);
+
 int sqlite3CreateFunc(sqlite3 *, const char *, enum affinity_type,
                      int, int, void *,
                      void (*)(sqlite3_context *, int, sqlite3_value **),
diff --git a/src/box/sql/whereexpr.c b/src/box/sql/whereexpr.c
index 5f6344405..5d6b04418 100644
--- a/src/box/sql/whereexpr.c
+++ b/src/box/sql/whereexpr.c
@@ -232,21 +232,17 @@ operatorMask(int op)
  * @param pParse      Parsing and code generating context.
  * @param pExpr       Test this expression.
  * @param ppPrefix    Pointer to TK_STRING expression with
- *                   pattern prefix.
+ *                    pattern prefix.
  * @param pisComplete True if the only wildcard is '%' in the
- *                   last character.
+ *                    last character.
  * @param pnoCase     True if case insensitive.
  *
  * @retval True if the given expr is a LIKE operator & is
- *        optimizable using inequality constraints.
- *        False if not.
+ *         optimizable using inequality constraints.
  */
 static int
-is_like(Parse *pParse,
-       Expr *pExpr,
-       Expr **ppPrefix,
-       int *pisComplete,
-       int *pnoCase)
+like_optimization_is_valid(Parse *pParse, Expr *pExpr, Expr **ppPrefix,
+                          int *pisComplete, int *pnoCase)
 {
        /* String on RHS of LIKE operator. */
        const char *z = 0;
@@ -1158,17 +1154,16 @@ exprAnalyze(SrcList * pSrc,     /* the FROM clause */
         * is made all lowercase so that the bounds also work
         * when comparing BLOBs.
         */
-       if (pWC->op == TK_AND
-           && is_like(pParse, pExpr, &pStr1, &isComplete, &noCase)) {
-               /* LHS of LIKE operator */
+       if (pWC->op == TK_AND &&
+           like_optimization_is_valid(pParse, pExpr, &pStr1,
+                                      &isComplete, &noCase)) {
                Expr *pLeft;
-               /* Copy of pStr1 - RHS of LIKE operator */
+               /* Copy of pStr1 - RHS of LIKE operator. */
                Expr *pStr2;
                Expr *pNewExpr1;
                Expr *pNewExpr2;
                int idxNew1;
                int idxNew2;
-               /* Name of collating sequence */
                const char *zCollSeqName;
                const u16 wtFlags = TERM_LIKEOPT | TERM_VIRTUAL | TERM_DYNAMIC;
 
@@ -1179,7 +1174,7 @@ exprAnalyze(SrcList * pSrc,       /* the FROM clause */
                 * Convert the lower bound to upper-case and the
                 * upper bound to lower-case (upper-case is less
                 * than lower-case in ASCII) so that the range
-                * constraints also work for BLOBs
+                * constraints also work for BLOBs.
                 */
                if (noCase && !pParse->db->mallocFailed) {
                        int i;
diff --git a/test/sql-tap/e_expr.test.lua b/test/sql-tap/e_expr.test.lua
index f49810999..db44999a6 100755
--- a/test/sql-tap/e_expr.test.lua
+++ b/test/sql-tap/e_expr.test.lua
@@ -1264,7 +1264,6 @@ test:do_execsql_test(
 test:execsql [[
     CREATE TABLE tblname(cname INT PRIMARY KEY);
 ]]
-
 local function glob(args)
     return 1
 end

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue
  2018-11-14 14:16                               ` n.pettik
@ 2018-11-14 17:06                                 ` Alexander Turenko
  0 siblings, 0 replies; 46+ messages in thread
From: Alexander Turenko @ 2018-11-14 17:06 UTC (permalink / raw)
  To: n.pettik; +Cc: tarantool-patches, Nikita Tatunov

On Wed, Nov 14, 2018 at 05:16:49PM +0300, n.pettik wrote:
> Hello, guys.
> 
> I suggest following diff. It doesn’t involve any functional changes.
> Obviously, as far as bug has been fixed, patch LGTM.
> It is up to you whether discard my fixes or apply them.
> I pushed fixes to the separate branch, since I had to solve
> rebase conflicts after adding my fixes.
> 
>  np/gh-3251-where-like-hangs
> 

I don't have objections against your changes.

WBR, Alexander Turenko.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-11-14 14:16                             ` n.pettik
@ 2018-11-14 17:41                               ` Alexander Turenko
  2018-11-14 21:48                                 ` n.pettik
  0 siblings, 1 reply; 46+ messages in thread
From: Alexander Turenko @ 2018-11-14 17:41 UTC (permalink / raw)
  To: n.pettik; +Cc: tarantool-patches, Nikita Tatunov

On Wed, Nov 14, 2018 at 05:16:52PM +0300, n.pettik wrote:
> 
> 
> > On 13 Nov 2018, at 22:23, Alexander Turenko <alexander.turenko@tarantool.org> wrote:
> > 
> > Hi!
> > 
> > I gave some minor comments and I think I cannot add any value anymore.
> > Nikita N., can you look into this patch?
> 
> >    Part of #3589
> >    Part of #3572
> >    Needed for #3251
> >    Needed for #3334
> 
> Why this patch is ’needed for’ but comes after
> these issues are closed by previous patch?
> 
> Also I don’t like the fact that your patch not only removes
> GLOB function, but also changes some user-visible interface.
> It still would be OK if you wrote about it in commit message
> or in doc request. For instance, as I understand from code,
> percent symbol (‘%’) now works as star (‘*’) did before.
> 

'*' from GLOB is subject to remove, '%' from LIKE still doing its work.
Comments that use names of symbols from GLOB are changed to use LIKE
syntax.

> Personally I don’t like many code style fixes because
> they obfuscate patch and make it complicate to review.
> What is more, they don’t deal with all problems: they
> partially fix comments but don’t fix naming. It looks awful.
> But since it is done and two reviewers already gave their
> OK I guess it would be irrational to start from scratch.
> 

Agreed. We should push developers to do refactoring in a separate commit
underneath actual changes.

> Finally, to be honest I didn’t review ALL changed tests.
> I looked through and they seem to be OK.
> 
> I’ve pushed also several non-functional fixes -
> see branch np/gh-3251-where-like-hangs.
> 

Don't have objections against your changes.

> Let's assume this as formal LGTM.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH 2/2] sql: remove GLOB from Tarantool
  2018-11-14 17:41                               ` Alexander Turenko
@ 2018-11-14 21:48                                 ` n.pettik
  0 siblings, 0 replies; 46+ messages in thread
From: n.pettik @ 2018-11-14 21:48 UTC (permalink / raw)
  To: tarantool-patches; +Cc: Alexander Turenko, Nikita Tatunov, Kirill Yukhin

[-- Attachment #1: Type: text/plain, Size: 1070 bytes --]


>> Also I don’t like the fact that your patch not only removes
>> GLOB function, but also changes some user-visible interface.
>> It still would be OK if you wrote about it in commit message
>> or in doc request. For instance, as I understand from code,
>> percent symbol (‘%’) now works as star (‘*’) did before.
>> 
> 
> '*' from GLOB is subject to remove, '%' from LIKE still doing its work.
> Comments that use names of symbols from GLOB are changed to use LIKE
> syntax.

My bad. Original comments in source code turned out to be
incomplete and misleading a bit. 

>> Finally, to be honest I didn’t review ALL changed tests.
>> I looked through and they seem to be OK.
>> 
>> I’ve pushed also several non-functional fixes -
>> see branch np/gh-3251-where-like-hangs.
>> 
> 
> Don't have objections against your changes.
> 
>> Let's assume this as formal LGTM.

OK, then I am going to squash commits with fixes
and patch will be ready to push.

Kirill, note that updated branch to push is:
np/gh-3251-where-like-hangs


[-- Attachment #2: Type: text/html, Size: 6728 bytes --]

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [tarantool-patches] Re: [PATCH v2 0/2] sql: pattern comparison fixes & GLOB removal
  2018-08-16 17:00 [tarantool-patches] [PATCH v2 0/2] sql: pattern comparison fixes & GLOB removal N.Tatunov
  2018-08-16 17:00 ` [tarantool-patches] [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue N.Tatunov
  2018-08-16 17:00 ` [tarantool-patches] [PATCH 2/2] sql: remove GLOB from Tarantool N.Tatunov
@ 2018-11-15  4:57 ` Kirill Yukhin
  2 siblings, 0 replies; 46+ messages in thread
From: Kirill Yukhin @ 2018-11-15  4:57 UTC (permalink / raw)
  To: tarantool-patches; +Cc: avkhatskevich, N.Tatunov

Hello,
On 16 Aug 20:00, N.Tatunov wrote:
> Branch: https://github.com/tarantool/tarantool/tree/N_Tatunov/gh-3251-where-like-hanging
> Issues:
> https://github.com/tarantool/tarantool/issues/3251
> https://github.com/tarantool/tarantool/issues/3334
> https://github.com/tarantool/tarantool/issues/3589
> https://github.com/tarantool/tarantool/issues/3572
> 
> Currently we have internal functions for pattern comparisons that are
> hanging in certain situations. This patch-set is aimed on refactoring
> these functions, fixing possible bugs including the ones that are known.
> Also since we want to get close to ANSI SQL it was decided that we're
> going to remove GLOB from Tarantool. And due to changes in comparisons
> some tests containing GLOB would need refactoring. Thus in order not to
> refactor tests that are anyways going to be removed it is quite
> convenient to remove GLOB support in the same patch-set.

I've checked in the patchset into 2.1 branch.

--
Regards, Kirill Yukhin

^ permalink raw reply	[flat|nested] 46+ messages in thread

end of thread, other threads:[~2018-11-15  4:57 UTC | newest]

Thread overview: 46+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-08-16 17:00 [tarantool-patches] [PATCH v2 0/2] sql: pattern comparison fixes & GLOB removal N.Tatunov
2018-08-16 17:00 ` [tarantool-patches] [PATCH 1/2] sql: LIKE & GLOB pattern comparison issue N.Tatunov
2018-08-17  9:23   ` [tarantool-patches] " Alex Khatskevich
2018-08-17 11:17     ` Alexander Turenko
2018-08-17 11:42       ` Alex Khatskevich
2018-09-09 13:33         ` Nikita Tatunov
2018-09-10 22:20           ` Alex Khatskevich
2018-09-11  6:06             ` Nikita Tatunov
2018-09-11 10:06               ` Alex Khatskevich
2018-09-11 13:31                 ` Nikita Tatunov
2018-10-18 18:02                   ` Nikita Tatunov
2018-10-21  3:51                     ` Alexander Turenko
2018-10-26 15:19                       ` Nikita Tatunov
2018-10-29 13:01                         ` Alexander Turenko
2018-10-31  5:25                           ` Nikita Tatunov
2018-11-01 10:30                             ` Alexander Turenko
2018-11-14 14:16                               ` n.pettik
2018-11-14 17:06                                 ` Alexander Turenko
2018-08-16 17:00 ` [tarantool-patches] [PATCH 2/2] sql: remove GLOB from Tarantool N.Tatunov
2018-08-17  8:25   ` [tarantool-patches] " Alex Khatskevich
2018-08-17  8:49     ` n.pettik
2018-08-17  9:01       ` Alex Khatskevich
2018-08-17  9:20         ` n.pettik
2018-08-17  9:28           ` Alex Khatskevich
     [not found]     ` <04D02794-07A5-4146-9144-84EE720C8656@corp.mail.ru>
2018-08-17  8:53       ` Alex Khatskevich
2018-08-17 11:26     ` Alexander Turenko
2018-08-17 11:34       ` Alexander Turenko
2018-08-17 13:46     ` Nikita Tatunov
2018-09-09 14:57     ` Nikita Tatunov
2018-09-10 22:06       ` Alex Khatskevich
2018-09-11  7:38         ` Nikita Tatunov
2018-09-11 10:11           ` Alexander Turenko
2018-09-11 10:22             ` Alex Khatskevich
2018-09-11 12:03           ` Alex Khatskevich
2018-10-18 20:28             ` Nikita Tatunov
2018-10-21  3:48               ` Alexander Turenko
2018-10-26 15:21                 ` Nikita Tatunov
2018-10-29 12:15                   ` Alexander Turenko
2018-11-08 15:09                     ` Nikita Tatunov
2018-11-09 12:18                       ` Alexander Turenko
2018-11-10  3:38                         ` Nikita Tatunov
2018-11-13 19:23                           ` Alexander Turenko
2018-11-14 14:16                             ` n.pettik
2018-11-14 17:41                               ` Alexander Turenko
2018-11-14 21:48                                 ` n.pettik
2018-11-15  4:57 ` [tarantool-patches] Re: [PATCH v2 0/2] sql: pattern comparison fixes & GLOB removal Kirill Yukhin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox