testcontainers / testcontainers/testcontainers-java

`databasename` part of `jdbc:tc` URIs іs ignored when optional host:port pair is omitted

Ouverte
#4,121 10 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

modules/jdbc resolution/acknowledged type/bug
Langage dominant
Java
Étoiles
8.7k
Forks
1.9k
Merge moyen
2 j 17 h
PR mergées (30 j)
9

Description

Note that this issue is related to behavior mentioned in #1846.

When one uses "host-less URI" as specified on the JDBC support page, e.g.: jdbc:tc:mysql:5.7.12:///mydatabase, DB name is also ignored and a default test name is used instead.
This code fragment from org.testcontainers.jdbc.ConnectionUrl#parseUrl method clearly shows how it is handled:

//In case it matches to the default pattern
Matcher dbInstanceMatcher = Patterns.DB_INSTANCE_MATCHING_PATTERN.matcher(dbHostString);
if (dbInstanceMatcher.matches()) {
	databaseHost = Optional.of(dbInstanceMatcher.group(1));
        databasePort = Optional.ofNullable(dbInstanceMatcher.group(3)).map(value -> Integer.valueOf(value));
        databaseName = Optional.of(dbInstanceMatcher.group(4));
}

then org.testcontainers.containers.JdbcDatabaseContainerProvider#newInstanceFromConnectionUrl defaults DB name to test:

final String databaseName = connectionUrl.getDatabaseName().orElse("test");

In my particular case an init SQL script, which starts with the following instruction, fails with Caused by: java.sql.SQLSyntaxErrorException: Access denied for user 'test'@'%' to 'mydatabase' error:

CREATE DATABASE IF NOT EXISTS `mydatabase`;

Aforementioned documentation page says:

Note that the hostname, port and database name will be ignored; you can leave these as-is or set them to any value.

which apparently is not the case and /// syntax, which includes DB name only, is recommended and multiple examples are provided.

I suggest to improve "host-less" URI handling by honoring DB name and clarify the documentation on this matter. Will make a PR for this if project owners are OK with such resolution.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par org.testcontainers.jdbc.ConnectionUrl#parseUrl et org.testcontainers.containers.JdbcDatabaseContainerProvider#newInstanceFromConnectionUrl, puis examinez la page de documentation sur la prise en charge de JDBC. Vérifiez qu’un URI sans hôte tel que jdbc:tc:mysql:5.7.12:///mydatabase conserve le nom de la base de données au lieu d’utiliser test par défaut, et clarifiez la documentation en conséquence.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
java, mysql
Domaine
databases
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.