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.sql
Or 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=qux
Run 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.h
anddeps/ada.cpp
(vendored)
mysql -u root -p < sql/uninstall.sql
Or 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;