pentaho/pentaho-kettle · error · MonetDbVersionException
MonetDBVersion.Exception.VersionIsNull
MonetDBVersion.Exception.VersionIsNull
Error message
MonetDBVersion.Exception.VersionIsNull
What it means
MonetDbVersion.parseVersion() throws MonetDbVersionException with this message when the MonetDB server's product version string is null. The version is normally read from the server (e.g. via the 'SELECT @@version' / productVersion connection property) and must be non-null before pattern validation. A null means the driver/connection did not return any version string at all.
Solutions
- Verify the JDBC URL targets a real MonetDB server and the connection is open before the loader reads its version (getDatabaseProductVersion).
- Check driver configuration: use the supported MonetDB JDBC driver so connection metadata includes the product version.
- Log/print DatabaseMetaData.getDatabaseProductVersion() on your connection to confirm what is actually returned; if null, fix connectivity/auth first.
- If the error persists during the bulk-load step, test the same connection with a plain Table Output step to isolate the loader's version check.
Example fix
// before
String ver = dbMeta.getDatabaseProductVersion(); // may be null
MonetDbVersion v = new MonetDbVersion(ver); // throws VersionIsNull
// after
String ver = dbMeta.getDatabaseProductVersion();
if (ver == null) {
throw new MonetDbVersionException("MonetDB server did not report a product version");
}
MonetDbVersion v = new MonetDbVersion(ver); Defensive patterns
Strategy: try-catch
Validate before calling
// Java: confirm the server reports a product version before building MonetDbVersion
java.sql.DatabaseMetaData md = connection.getMetaData();
String ver = md.getDatabaseProductVersion();
if (ver == null || ver.trim().isEmpty()) {
throw new IllegalStateException("MonetDB connection returned no product version; check driver/URL");
} Type guard
// Java
static boolean hasVersion(String productVersion) {
return productVersion != null && !productVersion.trim().isEmpty();
} Prevention
- Use the official MonetDB JDBC driver so getDatabaseProductVersion() is populated.
- Confirm connectivity and authentication to the MonetDB server before the loader's version check runs.
- Log connection metadata (product name/version) at startup to catch null versions early.
- Test non-MonetDB URLs fail fast elsewhere so the loader never sees null metadata.
When it happens
Trigger: Constructing MonetDbVersion (which calls parseVersion internally) with a null productVersion — typically because the MonetDB JDBC connection returned no version metadata property.
Common situations: Connecting through a proxy/non-MonetDB driver that omits the productVersion property; database metadata lookups failing silently before version negotiation (the loader checks the server version for feature gating); misconfigured JDBC URL pointing at a non-MonetDB service.
Related errors
- MonetDBVersion.Exception.VersionFormatIsInvalid
- AccessInputMeta.Exception.ErrorSavingToRepository
- An error occurred executing SQL:
- An error occurred executing SQL:
- An error occurred writing data to the MonetDB API (MAPI)…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/14fe760b0a394177.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/monet-db-bulk-loader/impl/src/main/java/org/pentaho/di/trans/steps/monetdbbulkloader/MonetDbVersion.java:149
if ( result != 0 ) {
return result;
}
return result;
}
/**
* Parses string representation of MonetDb version. Sets up <code>majorVersion</code>. Also <code>minorVersion</code>
* and <code>patchVersion</code> if they are present in the product version. Omits all other possible parts as
* insignificant.
*
* @param productVersion
* a string representation of version
* @throws MonetDbVersionException
* if productVersion is null or has incorrect format ( see {@link MonetDbVersion#VERSION_PATTERN} )
*/
private void parseVersion( String productVersion ) throws MonetDbVersionException {
if ( productVersion == null ) {
throw new MonetDbVersionException( BaseMessages.getString( PKG, "MonetDBVersion.Exception.VersionIsNull" ) );
}
if ( !VERSION_PATTERN.matcher( productVersion ).matches() ) {
throw new MonetDbVersionException( BaseMessages.getString( PKG,
"MonetDBVersion.Exception.VersionFormatIsInvalid", productVersion ) );
}
int startIndex = 0;
String[] versionParts = productVersion.split( SEPARATOR );
majorVersion = Integer.valueOf( versionParts[startIndex] );
if ( versionParts.length > 1 ) {
minorVersion = Integer.valueOf( versionParts[startIndex + 1] );
}
if ( versionParts.length > 2 ) {
patchVersion = Integer.valueOf( versionParts[startIndex + 2] );
}
}View on GitHub (pinned to f3058517a1)