-- 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