Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for informix connection string parsing in jdbc instrumentation #11542

Merged
merged 10 commits into from
Jun 12, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -831,6 +831,54 @@ DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) {

return MODIFIED_URL_LIKE.doParse(jdbcUrl, builder);
}
},
INFORMIX_SQLI("informix-sqli") {
@Override
DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) {
builder = MODIFIED_URL_LIKE.doParse(jdbcUrl, builder);

int dbNameStartIdx = jdbcUrl.indexOf('/', jdbcUrl.indexOf("//") + 2) + 1;
int dbNameEndIdx = jdbcUrl.indexOf(':', dbNameStartIdx);

String name = jdbcUrl.substring(dbNameStartIdx, dbNameEndIdx);
jaydeluca marked this conversation as resolved.
Show resolved Hide resolved
if (name != null) {
builder.name(name);
}

return INFORMIX.doParse(jdbcUrl, builder);
}
},

INFORMIX_DIRECT("informix-direct") {
@Override
DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) {
builder = MODIFIED_URL_LIKE.doParse(jdbcUrl, builder);

String[] split = jdbcUrl.split("//");
int dbNameEndIdx = split[1].indexOf(":");

String name = split[1].substring(0, dbNameEndIdx);
jaydeluca marked this conversation as resolved.
Show resolved Hide resolved
if (name != null) {
builder.name(name);
}

builder.host("infxhost");
return INFORMIX.doParse(jdbcUrl, builder);
}
},

INFORMIX {
private static final int DEFAULT_PORT = 9088;

@Override
DbInfo.Builder doParse(String jdbcUrl, DbInfo.Builder builder) {
DbInfo dbInfo = builder.build();
if (dbInfo.getPort() == null) {
builder.port(DEFAULT_PORT);
}

return builder;
}
};

private static final Logger logger = Logger.getLogger(JdbcConnectionUrlParser.class.getName());
Expand Down Expand Up @@ -1000,6 +1048,10 @@ private static String toDbSystem(String type) {
return DbSystemValues.H2;
case "hsqldb": // Hyper SQL Database
return "hsqldb";
case "informix-sqli": // IBM Informix
return DbSystemValues.INFORMIX_SQLI;
case "informix-direct":
return DbSystemValues.INFORMIX_DIRECT;
case "mariadb": // MariaDB
return DbSystemValues.MARIADB;
case "mysql": // MySQL
Expand All @@ -1026,6 +1078,8 @@ private static final class DbSystemValues {
static final String MYSQL = "mysql";
static final String ORACLE = "oracle";
static final String DB2 = "db2";
static final String INFORMIX_SQLI = "informix-sqli";
static final String INFORMIX_DIRECT = "informix-direct";
static final String POSTGRESQL = "postgresql";
static final String HANADB = "hanadb";
static final String DERBY = "derby";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,31 @@ public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
.setDb("sapdb")
.build(),

// https://www.ibm.com/support/pages/how-configure-informix-jdbc-connection-string-connect-group
arg("jdbc:informix-sqli://infxhost:99/infxdb:INFORMIXSERVER=infxsn;user=infxuser;password=PW")
.setSystem("informix-sqli")
.setUser("infxuser")
.setShortUrl("informix-sqli://infxhost:99")
.setHost("infxhost")
.setPort(99)
.setName("infxdb")
.build(),
arg("jdbc:informix-sqli://localhost:9088/stores_demo:INFORMIXSERVER=informix")
.setSystem("informix-sqli")
.setShortUrl("informix-sqli://localhost:9088")
.setHost("localhost")
.setPort(9088)
.setName("stores_demo")
.build(),
arg("jdbc:informix-direct://infxdb:999;user=infxuser;password=PW")
.setSystem("informix-direct")
.setUser("infxuser")
.setShortUrl("informix-direct://infxhost:999")
.setHost("infxhost")
.setPort(999)
.setName("infxdb")
.build(),

// http://www.h2database.com/html/features.html#database_url
arg("jdbc:h2:mem:").setShortUrl("h2:mem:").setSystem("h2").setSubtype("mem").build(),
arg("jdbc:h2:mem:")
Expand Down
Loading