Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions storage/connect/mysql-test/connect/r/unknown_db.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#
# MDEV-39050 ConnectSE: improve table discovery error message when local database doesn't exist
#
DROP DATABASE IF EXISTS unknown_connect_db;
Warnings:
Note 1008 Can't drop database 'unknown_connect_db'; database doesn't exist
CREATE TABLE t1 (id INT NOT NULL, name VARCHAR(32));
INSERT INTO t1 VALUES (1, 'foo'), (2, 'bar');
#
# TABLE_TYPE=PROXY with DBNAME pointing to a non-existent database
# should produce "Unknown database" instead of a generic discovery error
#
CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=PROXY TABNAME='t1' DBNAME='unknown_connect_db';
ERROR HY000: Unknown database 'unknown_connect_db'
#
# Once the database and source table exist, discovery should succeed
#
CREATE DATABASE unknown_connect_db;
CREATE TABLE unknown_connect_db.t1 (id INT NOT NULL, name VARCHAR(32));
INSERT INTO unknown_connect_db.t1 VALUES (3, 'baz');
CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=PROXY TABNAME='t1' DBNAME='unknown_connect_db';
SELECT * FROM t2 ORDER BY id;
id name
3 baz
DROP TABLE t2;
DROP TABLE t1;
DROP TABLE unknown_connect_db.t1;
DROP DATABASE unknown_connect_db;
37 changes: 37 additions & 0 deletions storage/connect/mysql-test/connect/t/unknown_db.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
--source include/not_embedded.inc

--echo #
--echo # MDEV-39050 ConnectSE: improve table discovery error message when local database doesn't exist
--echo #

# Ensure the test database does not exist
DROP DATABASE IF EXISTS unknown_connect_db;

# Create a source table to proxy
CREATE TABLE t1 (id INT NOT NULL, name VARCHAR(32));
INSERT INTO t1 VALUES (1, 'foo'), (2, 'bar');

--echo #
--echo # TABLE_TYPE=PROXY with DBNAME pointing to a non-existent database
--echo # should produce "Unknown database" instead of a generic discovery error
--echo #

--error ER_UNKNOWN_ERROR
CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=PROXY TABNAME='t1' DBNAME='unknown_connect_db';

--echo #
--echo # Once the database and source table exist, discovery should succeed
--echo #

CREATE DATABASE unknown_connect_db;
CREATE TABLE unknown_connect_db.t1 (id INT NOT NULL, name VARCHAR(32));
INSERT INTO unknown_connect_db.t1 VALUES (3, 'baz');

CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=PROXY TABNAME='t1' DBNAME='unknown_connect_db';
SELECT * FROM t2 ORDER BY id;

# Cleanup
DROP TABLE t2;
DROP TABLE t1;
DROP TABLE unknown_connect_db.t1;
DROP DATABASE unknown_connect_db;
8 changes: 7 additions & 1 deletion storage/connect/tabutil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "sql_class.h"
#include "table.h"
#include "field.h"
#include "sql_db.h"
#if defined(_WIN32)
#include <stdlib.h>
#include <stdio.h>
Expand Down Expand Up @@ -109,7 +110,12 @@ TABLE_SHARE *GetTableShare(PGLOBAL g, THD *thd, const char *db,
if (thd->is_error())
thd->clear_error(); // Avoid stopping info commands

snprintf(g->Message, sizeof(g->Message), "Error %d opening share", s->error);
if (s->error == OPEN_FRM_OPEN_ERROR && s->open_errno == ENOENT &&
check_db_dir_existence(db))
snprintf(g->Message, sizeof(g->Message), "Unknown database '%s'", db);
else
snprintf(g->Message, sizeof(g->Message), "Error %d opening share", s->error);

free_table_share(s);
return NULL;
} // endif open_table_def
Expand Down