Files
greptimedb/tests/cases/standalone/common/function/matches_term.result
Zhenchi dd63068df6 feat: add matches_term function (#5817)
* feat: add `matches_term` function

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* merge & fix

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* address comments

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

* fix & skip char after boundary mismatch

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>

---------

Signed-off-by: Zhenchi <zhongzc_arch@outlook.com>
2025-04-03 09:09:41 +00:00

315 lines
9.3 KiB
Plaintext

-- Test basic term matching
-- Expect: true
SELECT matches_term('cat!', 'cat') as result;
+--------+
| result |
+--------+
| true |
+--------+
-- Test phrase matching with spaces
-- Expect: true
SELECT matches_term('warning:hello world!', 'hello world') as result;
+--------+
| result |
+--------+
| true |
+--------+
-- Test numbers in term
SELECT matches_term('v1.0!', 'v1.0') as result;
+--------+
| result |
+--------+
| true |
+--------+
-- Test case sensitivity
-- Expect: true
SELECT matches_term('Cat', 'Cat') as result;
+--------+
| result |
+--------+
| true |
+--------+
-- Expect: false
SELECT matches_term('cat', 'Cat') as result;
+--------+
| result |
+--------+
| false |
+--------+
-- Test empty string handling
-- Expect: true
SELECT matches_term('', '') as result;
+--------+
| result |
+--------+
| true |
+--------+
-- Expect: false
SELECT matches_term('any', '') as result;
+--------+
| result |
+--------+
| false |
+--------+
-- Expect: false
SELECT matches_term('', 'any') as result;
+--------+
| result |
+--------+
| false |
+--------+
-- Test partial matches (should fail)
-- Expect: false
SELECT matches_term('category', 'cat') as result;
+--------+
| result |
+--------+
| false |
+--------+
-- Expect: false
SELECT matches_term('rebooted', 'boot') as result;
+--------+
| result |
+--------+
| false |
+--------+
-- Test adjacent alphanumeric characters
SELECT matches_term('cat5', 'cat') as result;
+--------+
| result |
+--------+
| false |
+--------+
SELECT matches_term('dogcat', 'dog') as result;
+--------+
| result |
+--------+
| false |
+--------+
-- Test leading non-alphanumeric
-- Expect: true
SELECT matches_term('dog/cat', '/cat') as result;
+--------+
| result |
+--------+
| true |
+--------+
-- Expect: true
SELECT matches_term('dog/cat', 'dog/') as result;
+--------+
| result |
+--------+
| true |
+--------+
-- Expect: true
SELECT matches_term('dog/cat', 'dog/cat') as result;
+--------+
| result |
+--------+
| true |
+--------+
-- Test unicode characters
-- Expect: true
SELECT matches_term('café>', 'café') as result;
+--------+
| result |
+--------+
| true |
+--------+
-- Expect: true
SELECT matches_term('русский!', 'русский') as result;
+--------+
| result |
+--------+
| true |
+--------+
-- Test complete word matching
CREATE TABLE logs (
`id` TIMESTAMP TIME INDEX,
`log_message` STRING
);
Affected Rows: 0
INSERT INTO logs VALUES
(1, 'An error occurred!'),
(2, 'Critical error: system failure'),
(3, 'error-prone'),
(4, 'errors'),
(5, 'error123'),
(6, 'errorLogs'),
(7, 'Version v1.0 released'),
(8, 'v1.0!'),
(9, 'v1.0a'),
(10, 'v1.0beta'),
(11, 'GET /app/start'),
(12, 'Command: /start-prosess'),
(13, 'Command: /start'),
(14, 'start'),
(15, 'start/stop'),
(16, 'Alert: system failure detected'),
(17, 'system failure!'),
(18, 'system-failure'),
(19, 'system failure2023'),
(20, 'critical error: system failure'),
(21, 'critical failure detected'),
(22, 'critical issue'),
(23, 'failure imminent'),
(24, 'Warning: high temperature'),
(25, 'WARNING: system overload'),
(26, 'warned'),
(27, 'warnings');
Affected Rows: 27
-- Test complete word matching for 'error'
-- Expect:
-- 1|An error occurred!|true
-- 2|Critical error: system failure|true
-- 3|error-prone|true
-- 4|errors|false
-- 5|error123|false
-- 6|errorLogs|false
SELECT `id`, `log_message`, matches_term(`log_message`, 'error') as `matches_error` FROM logs WHERE `id` <= 6 ORDER BY `id`;
+-------------------------+--------------------------------+---------------+
| id | log_message | matches_error |
+-------------------------+--------------------------------+---------------+
| 1970-01-01T00:00:00.001 | An error occurred! | true |
| 1970-01-01T00:00:00.002 | Critical error: system failure | true |
| 1970-01-01T00:00:00.003 | error-prone | true |
| 1970-01-01T00:00:00.004 | errors | false |
| 1970-01-01T00:00:00.005 | error123 | false |
| 1970-01-01T00:00:00.006 | errorLogs | false |
+-------------------------+--------------------------------+---------------+
-- Test complete word matching for 'v1.0'
-- Expect:
-- 7|Version v1.0 released|true
-- 8|v1.0!|true
-- 9|v1.0a|false
-- 10|v1.0beta|false
SELECT `id`, `log_message`, matches_term(`log_message`, 'v1.0') as `matches_version` FROM logs WHERE `id` BETWEEN 7 AND 10 ORDER BY `id`;
+-------------------------+-----------------------+-----------------+
| id | log_message | matches_version |
+-------------------------+-----------------------+-----------------+
| 1970-01-01T00:00:00.007 | Version v1.0 released | true |
| 1970-01-01T00:00:00.008 | v1.0! | true |
| 1970-01-01T00:00:00.009 | v1.0a | false |
| 1970-01-01T00:00:00.010 | v1.0beta | false |
+-------------------------+-----------------------+-----------------+
-- Test complete word matching for '/start'
-- Expect:
-- 11|GET /app/start|true
-- 12|Command: /start-prosess|true
-- 13|Command: /start|true
-- 14|start|false
-- 15|start/stop|false
SELECT `id`, `log_message`, matches_term(`log_message`, '/start') as `matches_start` FROM logs WHERE `id` BETWEEN 11 AND 15 ORDER BY `id`;
+-------------------------+-------------------------+---------------+
| id | log_message | matches_start |
+-------------------------+-------------------------+---------------+
| 1970-01-01T00:00:00.011 | GET /app/start | true |
| 1970-01-01T00:00:00.012 | Command: /start-prosess | true |
| 1970-01-01T00:00:00.013 | Command: /start | true |
| 1970-01-01T00:00:00.014 | start | false |
| 1970-01-01T00:00:00.015 | start/stop | false |
+-------------------------+-------------------------+---------------+
-- Test phrase matching for 'system failure'
-- Expect:
-- 16|Alert: system failure detected|true
-- 17|system failure!|true
-- 18|system-failure|false
-- 19|system failure2023|false
SELECT `id`, `log_message`, matches_term(`log_message`, 'system failure') as `matches_phrase` FROM logs WHERE `id` BETWEEN 16 AND 19 ORDER BY `id`;
+-------------------------+--------------------------------+----------------+
| id | log_message | matches_phrase |
+-------------------------+--------------------------------+----------------+
| 1970-01-01T00:00:00.016 | Alert: system failure detected | true |
| 1970-01-01T00:00:00.017 | system failure! | true |
| 1970-01-01T00:00:00.018 | system-failure | false |
| 1970-01-01T00:00:00.019 | system failure2023 | false |
+-------------------------+--------------------------------+----------------+
-- Test multi-word matching using AND
-- Expect:
-- 20|critical error: system failure|true|true|true
-- 21|critical failure detected|true|true|true
-- 22|critical issue|true|false|false
-- 23|failure imminent|false|true|false
SELECT `id`, `log_message`,
matches_term(`log_message`, 'critical') as `matches_critical`,
matches_term(`log_message`, 'failure') as `matches_failure`,
matches_term(`log_message`, 'critical') AND matches_term(`log_message`, 'failure') as `matches_both`
FROM logs WHERE `id` BETWEEN 20 AND 23 ORDER BY `id`;
+-------------------------+--------------------------------+------------------+-----------------+--------------+
| id | log_message | matches_critical | matches_failure | matches_both |
+-------------------------+--------------------------------+------------------+-----------------+--------------+
| 1970-01-01T00:00:00.020 | critical error: system failure | true | true | true |
| 1970-01-01T00:00:00.021 | critical failure detected | true | true | true |
| 1970-01-01T00:00:00.022 | critical issue | true | false | false |
| 1970-01-01T00:00:00.023 | failure imminent | false | true | false |
+-------------------------+--------------------------------+------------------+-----------------+--------------+
-- Test case-insensitive matching using lower()
-- Expect:
-- 24|Warning: high temperature|true
-- 25|WARNING: system overload|true
-- 26|warned|false
-- 27|warnings|false
SELECT `id`, `log_message`, matches_term(lower(`log_message`), 'warning') as `matches_warning` FROM logs WHERE `id` >= 24 ORDER BY `id`;
+-------------------------+---------------------------+-----------------+
| id | log_message | matches_warning |
+-------------------------+---------------------------+-----------------+
| 1970-01-01T00:00:00.024 | Warning: high temperature | true |
| 1970-01-01T00:00:00.025 | WARNING: system overload | true |
| 1970-01-01T00:00:00.026 | warned | false |
| 1970-01-01T00:00:00.027 | warnings | false |
+-------------------------+---------------------------+-----------------+
DROP TABLE logs;
Affected Rows: 0