提交 3a94dbab authored 作者: Noel Grandin's avatar Noel Grandin

improve database not found error

so we can distinguish between the situations where a database doesn't exist, but should, and the situation where we could auto-create a database, but can't because of security
上级 9d0a8827
...@@ -611,13 +611,11 @@ public class ErrorCode { ...@@ -611,13 +611,11 @@ public class ErrorCode {
public static final int PARAMETER_NOT_SET_1 = 90012; public static final int PARAMETER_NOT_SET_1 = 90012;
/** /**
* The error with code <code>90013</code> is thrown when trying to open a * The error with code <code>90013</code> is thrown when when trying to access
* database that does not exist remotely without enabling remote database
* creation first, or using the flag IFEXISTS=TRUE, or when trying to access
* a database object with a catalog name that does not match the database * a database object with a catalog name that does not match the database
* name. * name.
* <pre> * <pre>
* jdbc:h2:./database_that_does_not_exist * SELECT * FROM database_that_does_not_exist.table_name
* </pre> * </pre>
*/ */
public static final int DATABASE_NOT_FOUND_1 = 90013; public static final int DATABASE_NOT_FOUND_1 = 90013;
...@@ -2052,7 +2050,17 @@ public class ErrorCode { ...@@ -2052,7 +2050,17 @@ public class ErrorCode {
public static final int FOR_UPDATE_IS_NOT_ALLOWED_IN_DISTINCT_OR_GROUPED_SELECT = 90145; public static final int FOR_UPDATE_IS_NOT_ALLOWED_IN_DISTINCT_OR_GROUPED_SELECT = 90145;
// next is 90146 /**
* The error with code <code>90146</code> is thrown when trying to open a
* database that does not exist remotely without enabling remote database
* creation first, or using the flag IFEXISTS=TRUE
* <pre>
* jdbc:h2:./database_that_does_not_exist
* </pre>
*/
public static final int DATABASE_NOT_FOUND_2 = 90146;
// next is 90147
private ErrorCode() { private ErrorCode() {
// utility class // utility class
......
...@@ -64,7 +64,7 @@ public class Engine implements SessionFactory { ...@@ -64,7 +64,7 @@ public class Engine implements SessionFactory {
} }
if (database == null) { if (database == null) {
if (ifExists && !Database.exists(name)) { if (ifExists && !Database.exists(name)) {
throw DbException.get(ErrorCode.DATABASE_NOT_FOUND_1, name); throw DbException.get(ErrorCode.DATABASE_NOT_FOUND_2, name);
} }
database = new Database(ci, cipher); database = new Database(ci, cipher);
opened = true; opened = true;
......
...@@ -587,6 +587,7 @@ public class DbException extends RuntimeException { ...@@ -587,6 +587,7 @@ public class DbException extends RuntimeException {
return new JdbcSQLDataException(message, sql, state, errorCode, cause, stackTrace); return new JdbcSQLDataException(message, sql, state, errorCode, cause, stackTrace);
case URL_RELATIVE_TO_CWD: case URL_RELATIVE_TO_CWD:
case DATABASE_NOT_FOUND_1: case DATABASE_NOT_FOUND_1:
case DATABASE_NOT_FOUND_2:
case TRACE_CONNECTION_NOT_CLOSED: case TRACE_CONNECTION_NOT_CLOSED:
case DATABASE_ALREADY_OPEN_1: case DATABASE_ALREADY_OPEN_1:
case FILE_CORRUPTED_1: case FILE_CORRUPTED_1:
......
...@@ -177,6 +177,7 @@ ...@@ -177,6 +177,7 @@
90143=Row {1} not found in primary index {0} 90143=Row {1} not found in primary index {0}
90144=Authenticator not enabled on database {0} 90144=Authenticator not enabled on database {0}
90145=FOR UPDATE is not allowed in DISTINCT or grouped select 90145=FOR UPDATE is not allowed in DISTINCT or grouped select
90146=Database {0} not found, and IFEXISTS=true, so we can't auto-create it
HY000=General error: {0} HY000=General error: {0}
HY004=Unknown data type: {0} HY004=Unknown data type: {0}
HYC00=Feature not supported: {0} HYC00=Feature not supported: {0}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论