RocMarshal commented on code in PR #183:
URL:
https://github.com/apache/flink-connector-jdbc/pull/183#discussion_r2696755217
##########
flink-connector-jdbc-core/src/main/java/org/apache/flink/connector/jdbc/core/database/catalog/AbstractJdbcCatalog.java:
##########
@@ -579,14 +574,69 @@ protected String getSchemaTableName(ObjectPath tablePath)
{
throw new UnsupportedOperationException();
}
+ private Function<String, String> calculateUrlFunction(String url) {
+ final String[] parts;
+ final int questionMarkIndex = url.indexOf('?');
+ if (questionMarkIndex == -1) {
+ parts = url.split("/+", 3);
+ return dbName -> parts.length == 3 ? url.trim() : url.trim() + "/"
+ dbName;
+ } else {
+ String withoutParams = url.substring(0, questionMarkIndex);
+ String prefix = withoutParams.substring(0,
withoutParams.lastIndexOf('/') + 1);
+ return dbName ->
+ dbName == null ? url : prefix + dbName + "?" +
url.substring(questionMarkIndex);
+ }
+ }
+
/**
* URL has to be without database, like "jdbc:dialect://localhost:1234/" or
* "jdbc:dialect://localhost:1234" rather than
"jdbc:dialect://localhost:1234/db".
*/
- protected static void validateJdbcUrl(String url) {
- String[] parts = url.trim().split("\\/+");
-
- checkArgument(parts.length == 2);
+ protected static String validateJdbcUrl(String url, String
defaultDatabase) {
+ String trimmedUrl = url.trim();
+ String processedUrl =
+ trimmedUrl.endsWith("/")
+ ? trimmedUrl.substring(0, trimmedUrl.length() - 1)
+ : trimmedUrl;
+ String[] parts = processedUrl.split("/+", 3);
+ String database;
+ int questionMark = trimmedUrl.indexOf('?');
+ if (questionMark == -1) {
+ if (defaultDatabase == null) {
+ checkArgument(
+ parts.length > 2,
+ "No default database specified. Please set a database
name.");
+ database = parts[2];
+ } else {
+ checkArgument(
+ parts.length == 2
+ || (parts.length == 3 &&
defaultDatabase.equals(parts[2])),
+ "Cannot uniquely identify the database name. \n"
+ + "Please specify a database name using one of
these methods: \n"
+ + "\t (1) Match 'default-database' and
database name in 'base-url'. \n"
+ + "\t (2) Use only 'default-database' without
database name in 'base-url'. \n "
+ + "\t (3) Omit 'default-database' and include
database name in 'base-url'.");
Review Comment:
Anchor-A
##########
flink-connector-jdbc-core/src/main/java/org/apache/flink/connector/jdbc/core/database/catalog/AbstractJdbcCatalog.java:
##########
@@ -579,14 +574,69 @@ protected String getSchemaTableName(ObjectPath tablePath)
{
throw new UnsupportedOperationException();
}
+ private Function<String, String> calculateUrlFunction(String url) {
+ final String[] parts;
+ final int questionMarkIndex = url.indexOf('?');
+ if (questionMarkIndex == -1) {
+ parts = url.split("/+", 3);
+ return dbName -> parts.length == 3 ? url.trim() : url.trim() + "/"
+ dbName;
+ } else {
+ String withoutParams = url.substring(0, questionMarkIndex);
+ String prefix = withoutParams.substring(0,
withoutParams.lastIndexOf('/') + 1);
+ return dbName ->
+ dbName == null ? url : prefix + dbName + "?" +
url.substring(questionMarkIndex);
+ }
+ }
+
/**
* URL has to be without database, like "jdbc:dialect://localhost:1234/" or
* "jdbc:dialect://localhost:1234" rather than
"jdbc:dialect://localhost:1234/db".
*/
- protected static void validateJdbcUrl(String url) {
- String[] parts = url.trim().split("\\/+");
-
- checkArgument(parts.length == 2);
+ protected static String validateJdbcUrl(String url, String
defaultDatabase) {
+ String trimmedUrl = url.trim();
+ String processedUrl =
+ trimmedUrl.endsWith("/")
+ ? trimmedUrl.substring(0, trimmedUrl.length() - 1)
+ : trimmedUrl;
+ String[] parts = processedUrl.split("/+", 3);
+ String database;
+ int questionMark = trimmedUrl.indexOf('?');
+ if (questionMark == -1) {
+ if (defaultDatabase == null) {
+ checkArgument(
+ parts.length > 2,
+ "No default database specified. Please set a database
name.");
+ database = parts[2];
+ } else {
+ checkArgument(
+ parts.length == 2
+ || (parts.length == 3 &&
defaultDatabase.equals(parts[2])),
+ "Cannot uniquely identify the database name. \n"
+ + "Please specify a database name using one of
these methods: \n"
+ + "\t (1) Match 'default-database' and
database name in 'base-url'. \n"
+ + "\t (2) Use only 'default-database' without
database name in 'base-url'. \n "
+ + "\t (3) Omit 'default-database' and include
database name in 'base-url'.");
+ database = defaultDatabase;
+ }
+ } else {
+ checkArgument(
+ parts.length > 2 && !parts[2].startsWith("?"),
+ "Please set a database name in base-url option.");
+ questionMark = parts[2].indexOf('?');
+ if (defaultDatabase == null) {
+ database = parts[2].substring(0, questionMark);
+ } else {
+ checkArgument(
+ defaultDatabase.equals(parts[2].substring(0,
questionMark)),
+ "Cannot uniquely identify the database name. \n"
+ + "Please specify a database name using one of
these methods: \n"
+ + "\t (1) Match 'default-database' and
database name in 'base-url'. \n"
+ + "\t (2) Use only 'default-database' without
database name in 'base-url'. \n "
+ + "\t (3) Omit 'default-database' and include
database name in 'base-url'.");
Review Comment:
If this hint-message is same as mentioned Anchor-A.
Could we extract it into a common variable ?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]