Error codes appear in the application log panel, in error dialogs,
and in the server-side log file (edb2mysql-api.log, located
in the private/ folder alongside config.php).
Each log entry that involves an error includes the code in brackets —
for example [E2002] or [E2002/N1045] when a
native engine error number is also available.
The /N<number> suffix is the raw MySQL or
ElevateDB engine error number. It provides additional diagnostic detail
for MySQL and EDB errors and can be looked up in the MySQL or ElevateDB
documentation.
Error codes are grouped into ranges by source layer. Only the ranges relevant to the converter application and the EDBApiClient library are documented here; codes 5000–5999 (internal serialisation utilities) and 9999 (completely unknown) appear rarely and require no user action beyond checking the log for context.
[2026-05-26 14:32:11] ERROR [E2002/N1045]: MySQL authentication failed: Access denied for user 'root'@'localhost'
| Part | Meaning |
|---|---|
[E2002] |
Error code — identifies the category and specific error |
/N1045 |
Native MySQL error number (present only for MySQL and EDB errors) |
Text after : |
Human-readable description of this specific occurrence |
Errors originating in edbapi.php on the server. The
server could not complete the request.
| Code | Name | Message | Typical cause |
|---|---|---|---|
| 1000 | PHP_UNKNOWN | Unknown API error | Unexpected error in the PHP script; check the server log |
| 1001 | PHP_METHOD_NOT_ALLOWED | HTTP method not allowed | Request was not a POST; internal error if it appears in normal use |
| 1002 | PHP_DISABLED | API is disabled | API_ENABLED = false in config.php |
| 1003 | PHP_ACCESS_DENIED | Access denied | Client IP is blocked or not in ALLOWED_IPS; see
config.php |
| 1004 | PHP_UNAUTHORIZED | Unauthorized: invalid or missing API key | Wrong or absent X-API-Key; check API
Key field and API_KEY in
config.php |
| 1005 | PHP_ACTION_MISSING | Action not specified | Internal protocol error; update the application |
| 1006 | PHP_ACTION_UNKNOWN | Unknown action | Internal protocol error; update the application |
| 1007 | PHP_INVALID_JSON | Invalid JSON in request | Network corruption or internal error; retry |
| 1008 | PHP_PARAM_MISSING | Required parameter missing | Internal protocol error; update the application |
| 1009 | PHP_PARAM_INVALID | Invalid parameter | Internal validation error; check the server log for details |
| 1010 | PHP_SESSION_INVALID | Invalid or expired session | Upload session timed out; retry the operation |
| 1011 | PHP_FILE_UPLOAD | File upload error | PHP upload failed; check upload_max_filesize and
post_max_size in php.ini |
| 1012 | PHP_FILESYSTEM | Filesystem error | Server cannot write to _tmp/ or
blobuploads/ in the configuration folder
(private/); check directory permissions and that the web
server process can write there |
| 1013 | PHP_SCRIPT_UPLOAD | Script upload failed | One or more script chunks were rejected; retry |
| 1014 | PHP_SCRIPT_EXEC | Script execution failed | SQL error in the uploaded script; check the log for the failed statement |
| 1015 | PHP_OBJECT_NOT_FOUND | Object not found | Result page or BLOB file not found; may have expired — retry the query |
| 1016 | PHP_BLOB_DECODE | BLOB decode failed | Corrupt Base64 or compressed data in the batch; check data integrity |
| 1017 | PHP_BLOB_READ | BLOB read error | Server cannot read a BLOB temp file; check disk space and permissions |
| 1018 | PHP_MEMORY_EXHAUSTED | PHP memory limit exhausted | Result set or BLOB exceeds memory_limit; increase
memory_limit in php.ini |
| 1019 | PHP_FETCH_ABORTED | Result fetch aborted | Server stopped mid-fetch (OOM or timeout); increase
memory_limit and gateway timeouts |
| 1020 | PHP_LOG_ERROR | Log file error | Server cannot read or write edb2mysql-api.log (in
private/ alongside config.php, or at the path
defined by LOG_FILE in config.php); check file
permissions and that the directory is writable by the web server
process |
Errors returned by MySQL or MariaDB via PDO. The
/N<number> suffix is the native MySQL error
number.
| Code | Name | Message | Typical cause |
|---|---|---|---|
| 2000 | MYSQL_UNKNOWN | Unknown MySQL error | Unclassified PDO error; check /N<number> in MySQL
documentation |
| 2001 | MYSQL_CONNECTION | MySQL connection failed | Cannot reach MySQL host; check host, port, and firewall rules |
| 2002 | MYSQL_AUTH | MySQL authentication failed | Wrong username or password (N1045), or access denied
for the host (N1044) |
| 2003 | MYSQL_QUERY | MySQL query error | SQL syntax error or unsupported statement; check the failed statement in the log |
| 2004 | MYSQL_CONSTRAINT | MySQL constraint violation | FK, NOT NULL, or CHECK constraint rejected a row; review the data or disable strict mode |
| 2005 | MYSQL_TIMEOUT | MySQL timeout | lock_wait_timeout or wait_timeout
exceeded; retry or increase the timeout on the server |
| 2006 | MYSQL_DEADLOCK | MySQL deadlock | Two transactions deadlocked; retry the operation |
| 2007 | MYSQL_DUPLICATE_KEY | MySQL duplicate key | INSERT failed because a row with the same primary key or unique index already exists |
| 2008 | MYSQL_TRANSACTION | MySQL transaction error | Error during BEGIN, COMMIT, or
ROLLBACK; check the server log |
| 2009 | MYSQL_TRUNCATED | MySQL result truncated | Result fetch was aborted by the server; partial data may be available |
Errors from the local ElevateDB engine. The
/N<number> suffix is the native EDB error number.
| Code | Name | Message | Typical cause |
|---|---|---|---|
| 3000 | EDB_UNKNOWN | Unknown ElevateDB error | Unclassified EDB engine error; check /N<number>
in the EDB documentation |
| 3001 | EDB_CONNECTION | EDB connection failed | EDB session or database is not open; open the source database first |
| 3002 | EDB_QUERY | EDB query error | SQL error in the local EDB query; internal error — check the log |
| 3003 | EDB_TABLE | EDB table error | Cannot open or create a local temporary table; check EDB session state and disk space |
| 3004 | EDB_CONSTRAINT | EDB constraint violation | A key or constraint was violated writing to a local EDB temp table; internal error |
| 3005 | EDB_SESSION | EDB session error | Cannot configure or create the EDB session; check Session settings |
| 3006 | EDB_BLOB | EDB BLOB write error | Error writing a BLOB/CLOB to a local EDB field; check disk space |
| 3007 | EDB_DDL | EDB DDL error | Error creating or dropping a local temporary table; internal error |
Errors in the HTTP communication layer between the application and the PHP server.
| Code | Name | Message | Typical cause |
|---|---|---|---|
| 4000 | HTTP_UNKNOWN | Unknown HTTP transport error | Unclassified transport error |
| 4001 | HTTP_CONNECTION | HTTP connection failed | Cannot reach the server; check the API URL and network connectivity — see E4001 below |
| 4002 | HTTP_TIMEOUT | HTTP request timed out | The server did not respond within the timeout; increase gateway timeouts — see E4002 below |
| 4003 | HTTP_AUTH | HTTP authentication failed (401) | Wrong or missing API key — see code 1004 |
| 4004 | HTTP_NON_JSON | HTTP non-JSON response | Server returned an unrecognised non-JSON body — see E4004 below |
| 4005 | HTTP_STATUS_ERROR | HTTP status error | Non-200 response on a binary endpoint (BLOB fetch) |
| 4006 | HTTP_MULTIPART | HTTP multipart upload failed | BLOB chunk upload failed; check upload_max_filesize and
network stability |
| 4007 | HTTP_BINARY_RESPONSE | HTTP binary response error | Unexpected response format fetching a BLOB |
| 4008 | HTTP_INTERNAL | Internal error during HTTP | An unexpected Delphi exception (range error, access violation, etc.) was raised inside an HTTP operation; not a transport failure — check the log for the exception class and message |
E4001 — connection failed
The application cannot reach edbapi.php. Check: - The
API URL is correct and includes https:// or
http://. - The web server is running and
edbapi.php is deployed at the URL. - Port 80/443 is not
blocked by a local firewall. - For HTTPS, the server certificate is
valid.
E4002 — timeout
The server did not respond in time. For long-running operations
(large scripts, large tables): - Increase
fastcgi_read_timeout (nginx) or ProxyTimeout
(Apache) to at least 300 s. - Increase max_execution_time
in php.ini.
E4004 — non-JSON response
The server returned a non-JSON body that could not be automatically classified. Many common causes now produce a more specific code instead:
max_execution_time exceeded or
HTTP 408/504 gateway timeout → E4002 with a hint to use
LIMIT or increase max_execution_time in
php.ini.memory_limit exceeded → E1018 with
a hint to use LIMIT or increase memory_limit
in php.ini.When E4004 does appear in the log, the message itself includes the plain-text content of the unexpected response (HTML stripped). If that does not identify the cause, open the API URL in a browser to see the raw PHP error. Other common causes:
edbapi.php or
config.php.pdo_mysql extension.display_errors = 0 in php.ini).Errors from the TMMScript and TMMUpdater
classes in the EDBApiClient library. These codes appear in the
application log and are also available programmatically via the
LastError and PrefetchError properties.
| Code | Name | Message | Typical cause |
|---|---|---|---|
| 6000 | CLIENT_UNKNOWN | Unknown client error | Unclassified library error |
| 6001 | CLIENT_NO_CONNECTION | No connection assigned | TMMScript or TMMUpdater has no
TMMConnection set |
| 6002 | CLIENT_NO_SESSION | No EDB session or database assigned | TMMConnection.Database is not set or not open |
| 6003 | CLIENT_TEST_FAILED | Connection test failed | TestConnection returned an error; see the accompanying
message |
| 6004 | CLIENT_SCRIPT_UPLOAD | Script upload failed | One or more script_chunk calls failed; check network
and server log |
| 6005 | CLIENT_SCRIPT_EXEC | Script execution failed | script_run returned an error; see the accompanying
MySQL error message |
| 6006 | CLIENT_FETCH_FAILED | Result set retrieval incomplete | A result page could not be fetched; partial data may be in the buffer |
| 6007 | CLIENT_PARAM_INVALID | Invalid parameter | A nil or empty value was passed to a library method |
| 6008 | CLIENT_RESULT_TRUNC | Result set truncated | Result fetch was aborted before all rows were received |
| 6009 | CLIENT_WHERE_BUILD | WHERE clause build failed | A :param placeholder in Where has no
matching entry in Params |
| 6010 | CLIENT_NO_PK | Table has no primary key | Operation requires a PK (e.g. adaptive BLOB upload,
Prefetch repair) |
| 6011 | CLIENT_PREFETCH_FAIL | Prefetch failed | Prefetch was called but could not complete;
Execute is blocked until Prefetch is called
again successfully |
| 6012 | CLIENT_CANCELLED | Operation cancelled by user | Cancel was called; not an error condition |
| 6013 | CLIENT_NO_RESPONSE | No response from server | The server returned nil or an empty body; check network and server log |
| 6014 | CLIENT_COL_VALIDATION | Column validation failed | The Columns list did not pass schema validation in
Prepare |
| 6015 | CLIENT_MODE_INVALID | Batch mode incompatible with current state | Prepare or Execute was called in the wrong
order, or the mode is not valid for the current table |
| 6016 | CLIENT_SCHEMA_INVALID | Schema validation failed | Prepare could not build a valid buffer table
schema |
| 6017 | CLIENT_BLOB_CHUNK | blob_chunk upload failed | A BLOB chunk multipart upload failed; check network stability and
upload_max_filesize |
| 6018 | CLIENT_BLOB_COMMIT | blob_commit write failed | The PHP UPDATE of the BLOB column failed; check the server log for the MySQL error |
| 6019 | CLIENT_NO_RESULTSET | Server returned no result set | Reserved for internal use; not emitted by the current library. |
| 6020 | CLIENT_DEMO_RESTRICTED | Demo library restriction | Emitted by TMMScript.Execute and
TMMUpdater.Execute in a demo-library build
(EDB_DEMO_LIB). Two conditions trigger this: (1)
bds.exe is not running — the demo library requires the
Delphi IDE to be open; (2) TMMUpdater.Execute with a buffer
containing more than 50 rows — the demo library caps
Execute to 50 rows per call. |
Errors from the query execution pipeline used by the SQL Console. These codes appear in the application log.
| Code | Name | Message | Typical cause |
|---|---|---|---|
| 7000 | PIPELINE_UNKNOWN | Unknown pipeline error | Unclassified error |
| 7001 | PIPELINE_CONNECTION | Pipeline connection failed | Could not reach the API; check the API URL |
| 7002 | PIPELINE_QUERY | Pipeline query failed | script_run returned an error; check the query syntax
and the server log |
| 7003 | PIPELINE_RESULT_BUILD | Pipeline result build failed | Error constructing the local EDB result table; check disk space and EDB session state |
| 7004 | PIPELINE_PAGE_FETCH | Pipeline page fetch failed | A result_page call failed; may be a network
interruption or server timeout |
| 7005 | PIPELINE_CANCELLED | Pipeline cancelled by user | The user cancelled the query; not an error condition |
| 7006 | PIPELINE_BLOB_FETCH | Pipeline BLOB fetch failed | blob_fetch could not retrieve a BLOB cell; check the
server log |
| 7007 | PIPELINE_SCHEMA | Pipeline schema error | Error generating or applying the EDB temp-table schema for the result set |
| 7008 | PIPELINE_EXPORT | Pipeline export failed | Error writing the result set to a file |
Errors from the EDB2MySQL converter application itself. These codes appear in the application log.
| Code | Name | Message | Typical cause |
|---|---|---|---|
| 8000 | APP_UNKNOWN | Unknown application error | Unclassified application error |
| 8001 | APP_CONVERTER | Converter error | Error during schema conversion; check the log for the specific object that failed |
| 8002 | APP_MIGRATION | Migration error | Error during data migration; check the log for the table and batch that failed |
| 8003 | APP_SETTINGS | Settings error | Error reading or writing the settings file
(EDB2MySQL.ini) |
| 8004 | APP_SCHEMA | Schema conversion failed | Error generating the DDL script; check the log for warnings |
| 8005 | APP_DATA | Data migration failed | A data transfer error; check the log for the batch and row details |
| 8006 | APP_CONNECTION | Connection error | Could not connect to the source EDB database or the target MySQL/MariaDB server |
| 8007 | APP_EXPORT | Export failed | Error exporting a result set to a file; check disk space and write permissions |
| 8008 | APP_ANALYSIS | Schema analysis failed | Error during pre-migration analysis; check the source database is open and accessible |
| 8009 | APP_COLLATION | Collation mapping error | A collation in the source database has no mapping; check the collation map editor |
| 8010 | APP_CANCELLED | Operation cancelled by user | The user cancelled the operation; not an error condition |