Skip to main content
Query extension metadata and server state using the standard SQL interfaces below.

System Views

INFORMATION_SCHEMA.EXTENSIONS

Lists all currently installed VillageSQL extensions.
INSTALL EXTENSION and UNINSTALL EXTENSION are VillageSQL SQL extensions. They are not part of standard MySQL 8.4 syntax.
Known columns: Example:
Illustrative output (actual version strings depend on installed extensions):
EXTENSION_NAME values are lowercase, matching the name passed to make_extension(). The view reflects the current installed state. The four PENDING_* columns track a scheduled ALTER EXTENSION ... AT RESTART version change. See Managing Extensions for the workflow.

INFORMATION_SCHEMA.COLUMNS (Custom Types)

Columns using custom extension types are visible through the standard INFORMATION_SCHEMA.COLUMNS view. Custom types appear as extension_name.type_name in the DATA_TYPE and COLUMN_TYPE columns (e.g., vsql_complex.COMPLEX). Example:
Sample Output:

INFORMATION_SCHEMA.EXTENSION_REGISTRATION

Exposes the in-memory VEF registration struct for each loaded extension as a JSON document. Use it to verify that the server parsed your extension’s functions, types, and system variables correctly after INSTALL EXTENSION.

Common Queries

Find Extension Dependencies

Find which columns use a specific extension’s types before uninstalling:

List All Extensions and Their Custom Type Columns

Find Tables Using Extension Types


System Variables

veb_dir

Read-only at runtime. Path to the directory where the server looks for .veb extension bundle files. Set in my.cnf under [mysqld]; cannot be changed without a server restart.
Scope: Global, read-only at runtime. Configure in my.cnf:
Only a single directory is supported. See Managing Extensions for placement and troubleshooting.

villagesql_server_version

Read-only global variable. Returns the VillageSQL version string compiled into the server binary. The format is {codebase}_{major}.{minor}.{patch}[-prerelease], where codebase names the upstream fork this build derives from (here, mysql-8.4). This is distinct from villagesql_schema_version, which reports the version stamped on the internal metadata catalog in the same {codebase}_{version} format.
Scope: Global, read-only. Cannot be set at runtime.

villagesql_vef_server_protocol

Read-only global variable. Returns the highest VEF protocol version supported by this server build. Extension authors can compare this value against the protocol constants in types.h to determine which ABI features are available during registration.
What Protocol V4 adds Extensions negotiating VEF_PROTOCOL_4 or higher gain access to the variable_length field on vef_type_desc_t. When set to true, the type’s persisted size is determined per value rather than being a single fixed footprint. Variable-length types must also declare max_persisted_length as an upper bound. Use the variable_length_type() builder method on TypeBuilder to set this flag — do not write variable_length directly. The field is read by the server only when the negotiated protocol is VEF_PROTOCOL_4 or higher. VEF_PROTOCOL_4 also adds the max_result_length field on vef_func_desc_t. A function may declare the maximum length (in characters) of its STRING result so a materialized result — GROUP BY/DISTINCT temp tables, CREATE TABLE ... SELECT, UNION — holds the full value instead of truncating at the argument width. 0 falls back to the argument width; it is STRING-only and capped at VEF_MAX_RESULT_LENGTH (16 MiB / 16777216 bytes). A larger declared value is capped to it. Set it with the max_result_length() builder method on FuncBuilder. Protocol V4 is under active development. Extensions that opt in must be built with -DVSQL_USE_DEV_ABI=ON and should expect ABI changes before it stabilises. See abi/types.h for the full vef_type_desc_t and vef_func_desc_t definitions, type_builder.h for variable_length_type(), and func_builder.h for max_result_length(). The value reflects the compile-time constant vef_server_protocol_version and cannot be changed at runtime.

villagesql_build_info

Read-only global variable. Returns a JSON object with metadata about how this server binary was built: the source commit, work-tree state, and build environment.
Scope: Global, read-only. Cannot be set at runtime. A clean release build has is_dirty: false and all three file-count fields at zero. A build from a modified work tree will show non-zero counts in files_added, files_deleted, or files_modified.

Next Steps

Managing Extensions

Monitor and troubleshoot extensions

Install Extensions

Add new extensions

Extension Architecture

Understand the internals

Available Extensions

Browse extension catalog