+ * Case-insensitive versions
+ */
+
+Datum
+nameiclike(PG_FUNCTION_ARGS)
+{
+ Name str = PG_GETARG_NAME(0);
+ text *pat = PG_GETARG_TEXT_P(1);
+ bool result;
+ unsigned char *s,
+ *p;
+ int slen,
+ plen;
+
+ s = NameStr(*str);
+ slen = strlen(s);
+ p = VARDATA(pat);
+ plen = (VARSIZE(pat) - VARHDRSZ);
+
+ if (pg_database_encoding_max_length() == 1)
+ result = (MatchTextIC(s, slen, p, plen) == LIKE_TRUE);
+ else
+ result = (MBMatchTextIC(s, slen, p, plen) == LIKE_TRUE);
+
+ PG_RETURN_BOOL(result);
+}
+
+Datum
+nameicnlike(PG_FUNCTION_ARGS)
+{
+ Name str = PG_GETARG_NAME(0);
+ text *pat = PG_GETARG_TEXT_P(1);
+ bool result;
+ unsigned char *s,
+ *p;
+ int slen,
+ plen;
+
+ s = NameStr(*str);
+ slen = strlen(s);
+ p = VARDATA(pat);
+ plen = (VARSIZE(pat) - VARHDRSZ);
+
+ if (pg_database_encoding_max_length() == 1)
+ result = (MatchTextIC(s, slen, p, plen) != LIKE_TRUE);
+ else
+ result = (MBMatchTextIC(s, slen, p, plen) != LIKE_TRUE);
+
+ PG_RETURN_BOOL(result);
+}
+
+Datum
+texticlike(PG_FUNCTION_ARGS)
+{
+ text *str = PG_GETARG_TEXT_P(0);
+ text *pat = PG_GETARG_TEXT_P(1);
+ bool result;
+ unsigned char *s,
+ *p;
+ int slen,
+ plen;
+
+ s = VARDATA(str);
+ slen = (VARSIZE(str) - VARHDRSZ);
+ p = VARDATA(pat);
+ plen = (VARSIZE(pat) - VARHDRSZ);
+
+ if (pg_database_encoding_max_length() == 1)
+ result = (MatchTextIC(s, slen, p, plen) == LIKE_TRUE);
+ else
+ result = (MBMatchTextIC(s, slen, p, plen) == LIKE_TRUE);
+
+ PG_RETURN_BOOL(result);
+}
+
+Datum
+texticnlike(PG_FUNCTION_ARGS)
+{
+ text *str = PG_GETARG_TEXT_P(0);
+ text *pat = PG_GETARG_TEXT_P(1);
+ bool result;
+ unsigned char *s,
+ *p;
+ int slen,
+ plen;
+
+ s = VARDATA(str);
+ slen = (VARSIZE(str) - VARHDRSZ);
+ p = VARDATA(pat);
+ plen = (VARSIZE(pat) - VARHDRSZ);
+
+ if (pg_database_encoding_max_length() == 1)
+ result = (MatchTextIC(s, slen, p, plen) != LIKE_TRUE);
+ else
+ result = (MBMatchTextIC(s, slen, p, plen) != LIKE_TRUE);
+
+ PG_RETURN_BOOL(result);
+}
+
+/*
+ * like_escape() --- given a pattern and an ESCAPE string,
+ * convert the pattern to use Postgres' standard backslash escape convention.
+ */
+Datum
+like_escape(PG_FUNCTION_ARGS)