Fast URL parsing functions for MySQL/MariaDB using the Ada URL Parser library.
url_host(url)- Extract hostnameurl_path(url)- Extract pathurl_protocol(url)- Extract protocol/schemeurl_port(url)- Extract porturl_query(url)- Extract query stringurl_fragment(url)- Extract fragment/hashurl_origin(url)- Extract originurl_normalize(url)- Normalize URLurl_valid(url)- Check if URL is valid (returns 1 or 0)
First compile the library:
# Using Makefile (easiest)
make
make install # requires sudo
# Or manually:
# macOS
g++ -std=c++20 -Ideps -bundle -o url_udf.so lib_url_parse_udf.cpp deps/ada.cpp `mysql_config --include`
# Linux
g++ -std=c++20 -Ideps -fPIC -shared -o url_udf.so lib_url_parse_udf.cpp deps/ada.cpp `mysql_config --include`
# Copy to MySQL plugin directory
sudo cp url_udf.so `mysql_config --plugindir`Then load the functions in MySQL:
mysql -u root -p < sql/install.sqlOr manually:
CREATE FUNCTION url_host RETURNS STRING SONAME 'url_udf.so';
CREATE FUNCTION url_path RETURNS STRING SONAME 'url_udf.so';
CREATE FUNCTION url_protocol RETURNS STRING SONAME 'url_udf.so';
CREATE FUNCTION url_port RETURNS STRING SONAME 'url_udf.so';
CREATE FUNCTION url_query RETURNS STRING SONAME 'url_udf.so';
CREATE FUNCTION url_fragment RETURNS STRING SONAME 'url_udf.so';
CREATE FUNCTION url_origin RETURNS STRING SONAME 'url_udf.so';
CREATE FUNCTION url_normalize RETURNS STRING SONAME 'url_udf.so';
CREATE FUNCTION url_valid RETURNS INTEGER SONAME 'url_udf.so';Example usage:
SELECT url_host('https://example.com:8080/path?query=1#section');
-- Returns: example.com
SELECT url_path('https://example.com:8080/path?query=1#section');
-- Returns: /path
SELECT url_valid('https://example.com');
-- Returns: 1
SELECT url_query('https://example.com?foo=bar&baz=qux');
-- Returns: foo=bar&baz=quxRun the test suite:
mysql -u root -p < sql/test.sql- Ada URL Parser - github.com/ada-url/ada
- License: MIT/Apache-2.0
- Files:
deps/ada.handdeps/ada.cpp(vendored)
mysql -u root -p < sql/uninstall.sqlOr manually:
DROP FUNCTION IF EXISTS url_host;
DROP FUNCTION IF EXISTS url_path;
DROP FUNCTION IF EXISTS url_protocol;
DROP FUNCTION IF EXISTS url_port;
DROP FUNCTION IF EXISTS url_query;
DROP FUNCTION IF EXISTS url_fragment;
DROP FUNCTION IF EXISTS url_origin;
DROP FUNCTION IF EXISTS url_normalize;
DROP FUNCTION IF EXISTS url_valid;