Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
281cd0f3
Commit
281cd0f3
authored
Feb 20, 2006
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug #17559 ndb_gis test failure
- test tables use blobs without PK, and was not handled correctly
parent
55815835
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
105 additions
and
53 deletions
+105
-53
mysql-test/r/ndb_gis.result
mysql-test/r/ndb_gis.result
+48
-0
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.cc
+27
-39
sql/ha_ndbcluster_binlog.cc
sql/ha_ndbcluster_binlog.cc
+28
-13
sql/ha_ndbcluster_binlog.h
sql/ha_ndbcluster_binlog.h
+2
-1
No files found.
mysql-test/r/ndb_gis.result
View file @
281cd0f3
SET storage_engine=ndbcluster;
DROP TABLE IF EXISTS t1, gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
CREATE TABLE gis_point (fid INTEGER, g POINT);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_line (fid INTEGER, g LINESTRING);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_polygon (fid INTEGER, g POLYGON);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_multi_point (fid INTEGER, g MULTIPOINT);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_multi_line (fid INTEGER, g MULTILINESTRING);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_multi_polygon (fid INTEGER, g MULTIPOLYGON);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_geometrycollection (fid INTEGER, g GEOMETRYCOLLECTION);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_geometry (fid INTEGER, g GEOMETRY);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
SHOW CREATE TABLE gis_point;
Table Create Table
gis_point CREATE TABLE `gis_point` (
...
...
@@ -416,6 +432,8 @@ mpg multipolygon,
gc geometrycollection,
gm geometry
);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
SHOW FIELDS FROM t1;
Field Type Null Key Default Extra
gp point YES NULL
...
...
@@ -427,6 +445,8 @@ mpg multipolygon YES NULL
gc geometrycollection YES NULL
gm geometry YES NULL
ALTER TABLE t1 ADD fid INT;
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
SHOW FIELDS FROM t1;
Field Type Null Key Default Extra
gp point YES NULL
...
...
@@ -440,6 +460,8 @@ gm geometry YES NULL
fid int(11) YES NULL
DROP TABLE t1;
create table t1 (a geometry not null);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
insert into t1 values (GeomFromText('Point(1 2)'));
insert into t1 values ('Garbage');
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
...
...
@@ -447,6 +469,8 @@ insert IGNORE into t1 values ('Garbage');
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
drop table t1;
create table t1 (fl geometry);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
insert into t1 values (1);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
insert into t1 values (1.11);
...
...
@@ -459,13 +483,29 @@ drop table t1;
set engine_condition_pushdown = on;
DROP TABLE IF EXISTS t1, gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
CREATE TABLE gis_point (fid INTEGER, g POINT);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_line (fid INTEGER, g LINESTRING);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_polygon (fid INTEGER, g POLYGON);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_multi_point (fid INTEGER, g MULTIPOINT);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_multi_line (fid INTEGER, g MULTILINESTRING);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_multi_polygon (fid INTEGER, g MULTIPOLYGON);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_geometrycollection (fid INTEGER, g GEOMETRYCOLLECTION);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
CREATE TABLE gis_geometry (fid INTEGER, g GEOMETRY);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
SHOW CREATE TABLE gis_point;
Table Create Table
gis_point CREATE TABLE `gis_point` (
...
...
@@ -874,6 +914,8 @@ mpg multipolygon,
gc geometrycollection,
gm geometry
);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
SHOW FIELDS FROM t1;
Field Type Null Key Default Extra
gp point YES NULL
...
...
@@ -885,6 +927,8 @@ mpg multipolygon YES NULL
gc geometrycollection YES NULL
gm geometry YES NULL
ALTER TABLE t1 ADD fid INT;
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
SHOW FIELDS FROM t1;
Field Type Null Key Default Extra
gp point YES NULL
...
...
@@ -898,6 +942,8 @@ gm geometry YES NULL
fid int(11) YES NULL
DROP TABLE t1;
create table t1 (a geometry not null);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
insert into t1 values (GeomFromText('Point(1 2)'));
insert into t1 values ('Garbage');
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
...
...
@@ -905,6 +951,8 @@ insert IGNORE into t1 values ('Garbage');
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
drop table t1;
create table t1 (fl geometry);
Warnings:
Error 1538 Table storage engine 'ndbcluster' does not support the create option 'Binlog of table with BLOB attribute and no PK'
insert into t1 values (1);
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
insert into t1 values (1.11);
...
...
sql/ha_ndbcluster.cc
View file @
281cd0f3
...
...
@@ -4430,29 +4430,24 @@ int ha_ndbcluster::create(const char *name,
Always create an event for the table, as other mysql servers
expect it to be there.
*/
if
(
ndbcluster_create_event
(
ndb
,
t
,
event_name
.
c_ptr
(),
share
)
<
0
)
if
(
!
ndbcluster_create_event
(
ndb
,
t
,
event_name
.
c_ptr
(),
share
,
share
&&
do_event_op
/* push warning */
))
{
/* this is only a serious error if the binlog is on */
if
(
share
&&
do_event_op
)
{
push_warning_printf
(
current_thd
,
MYSQL_ERROR
::
WARN_LEVEL_ERROR
,
ER_GET_ERRMSG
,
ER
(
ER_GET_ERRMSG
),
"Creating event for logging table failed. "
"See error log for details."
);
}
break
;
}
if
(
ndb_extra_logging
)
sql_print_information
(
"NDB Binlog: CREATE TABLE Event: %s"
,
event_name
.
c_ptr
());
if
(
share
&&
do_event_op
&&
ndbcluster_create_event_ops
(
share
,
t
,
event_name
.
c_ptr
())
<
0
)
{
sql_print_error
(
"NDB Binlog: FAILED CREATE TABLE event operations."
" Event: %s"
,
name
);
/* a warning has been issued to the client */
if
(
ndb_extra_logging
)
sql_print_information
(
"NDB Binlog: CREATE TABLE Event: %s"
,
event_name
.
c_ptr
());
if
(
share
&&
do_event_op
&&
ndbcluster_create_event_ops
(
share
,
t
,
event_name
.
c_ptr
()))
{
sql_print_error
(
"NDB Binlog: FAILED CREATE TABLE event operations."
" Event: %s"
,
name
);
/* a warning has been issued to the client */
}
}
/*
warning has been issued if ndbcluster_create_event failed
and (share && do_event_op)
*/
if
(
share
&&
!
do_event_op
)
share
->
flags
|=
NSF_NO_BINLOG
;
ndbcluster_log_schema_op
(
current_thd
,
share
,
...
...
@@ -4793,31 +4788,24 @@ int ha_ndbcluster::rename_table(const char *from, const char *to)
ndb_rep_event_name
(
&
event_name
,
to
+
sizeof
(
share_prefix
)
-
1
,
0
);
const
NDBTAB
*
ndbtab
=
dict
->
getTable
(
new_tabname
);
if
(
ndbcluster_create_event
(
ndb
,
ndbtab
,
event_name
.
c_ptr
(),
share
)
>=
0
)
if
(
!
ndbcluster_create_event
(
ndb
,
ndbtab
,
event_name
.
c_ptr
(),
share
,
share
&&
ndb_binlog_running
/* push warning */
))
{
if
(
ndb_extra_logging
)
sql_print_information
(
"NDB Binlog: RENAME Event: %s"
,
event_name
.
c_ptr
());
if
(
share
&&
ndb_binlog_running
)
if
(
share
&&
ndb_binlog_running
&&
ndbcluster_create_event_ops
(
share
,
ndbtab
,
event_name
.
c_ptr
()))
{
if
(
ndbcluster_create_event_ops
(
share
,
ndbtab
,
event_name
.
c_ptr
())
<
0
)
{
sql_print_error
(
"NDB Binlog: FAILED create event operations "
"during RENAME. Event %s"
,
event_name
.
c_ptr
());
/* a warning has been issued to the client */
}
sql_print_error
(
"NDB Binlog: FAILED create event operations "
"during RENAME. Event %s"
,
event_name
.
c_ptr
());
/* a warning has been issued to the client */
}
}
else
{
sql_print_error
(
"NDB Binlog: FAILED create event during RENAME. "
"Event: %s"
,
event_name
.
c_ptr
());
push_warning_printf
(
current_thd
,
MYSQL_ERROR
::
WARN_LEVEL_ERROR
,
ER_GET_ERRMSG
,
ER
(
ER_GET_ERRMSG
),
"Creating event for logging table failed. "
"See error log for details."
);
}
/*
warning has been issued if ndbcluster_create_event failed
and (share && ndb_binlog_running)
*/
if
(
!
is_old_table_tmpfile
)
ndbcluster_log_schema_op
(
current_thd
,
share
,
current_thd
->
query
,
current_thd
->
query_length
,
...
...
sql/ha_ndbcluster_binlog.cc
View file @
281cd0f3
...
...
@@ -1858,8 +1858,7 @@ int ndbcluster_create_binlog_setup(Ndb *ndb, const char *key,
/*
create the event operations for receiving logging events
*/
if
(
ndbcluster_create_event_ops
(
share
,
ndbtab
,
event_name
.
c_ptr
())
<
0
)
if
(
ndbcluster_create_event_ops
(
share
,
ndbtab
,
event_name
.
c_ptr
()))
{
sql_print_error
(
"NDB Binlog:"
"FAILED CREATE (DISCOVER) EVENT OPERATIONS Event: %s"
,
...
...
@@ -1874,7 +1873,8 @@ int ndbcluster_create_binlog_setup(Ndb *ndb, const char *key,
int
ndbcluster_create_event
(
Ndb
*
ndb
,
const
NDBTAB
*
ndbtab
,
const
char
*
event_name
,
NDB_SHARE
*
share
)
const
char
*
event_name
,
NDB_SHARE
*
share
,
int
push_warning
)
{
DBUG_ENTER
(
"ndbcluster_create_event"
);
DBUG_PRINT
(
"info"
,
(
"table=%s version=%d event=%s share=%s"
,
...
...
@@ -1901,8 +1901,14 @@ ndbcluster_create_event(Ndb *ndb, const NDBTAB *ndbtab,
if
(
share
->
flags
&
NSF_BLOB_FLAG
)
{
sql_print_error
(
"NDB Binlog: logging of table %s "
"with
no PK and blob attributes
is not supported"
,
"with
BLOB attribute and no PK
is not supported"
,
share
->
key
);
if
(
push_warning
)
push_warning_printf
(
current_thd
,
MYSQL_ERROR
::
WARN_LEVEL_ERROR
,
ER_ILLEGAL_HA_CREATE_OPTION
,
ER
(
ER_ILLEGAL_HA_CREATE_OPTION
),
ndbcluster_hton
.
name
,
"Binlog of table with BLOB attribute and no PK"
);
share
->
flags
|=
NSF_NO_BINLOG
;
DBUG_RETURN
(
-
1
);
}
...
...
@@ -1935,17 +1941,16 @@ ndbcluster_create_event(Ndb *ndb, const NDBTAB *ndbtab,
if
(
dict
->
createEvent
(
my_event
))
// Add event to database
{
#ifdef NDB_BINLOG_EXTRA_WARNINGS
/*
failed, print a warning
*/
push_warning_printf
(
current_thd
,
MYSQL_ERROR
::
WARN_LEVEL_ERROR
,
ER_GET_ERRMSG
,
ER
(
ER_GET_ERRMSG
),
dict
->
getNdbError
().
code
,
dict
->
getNdbError
().
message
,
"NDB"
);
#endif
if
(
dict
->
getNdbError
().
classification
!=
NdbError
::
SchemaObjectExists
)
{
/*
failed, print a warning
*/
if
(
push_warning
)
push_warning_printf
(
current_thd
,
MYSQL_ERROR
::
WARN_LEVEL_ERROR
,
ER_GET_ERRMSG
,
ER
(
ER_GET_ERRMSG
),
dict
->
getNdbError
().
code
,
dict
->
getNdbError
().
message
,
"NDB"
);
sql_print_error
(
"NDB Binlog: Unable to create event in database. "
"Event: %s Error Code: %d Message: %s"
,
event_name
,
dict
->
getNdbError
().
code
,
dict
->
getNdbError
().
message
);
...
...
@@ -1957,6 +1962,11 @@ ndbcluster_create_event(Ndb *ndb, const NDBTAB *ndbtab,
*/
if
(
dict
->
dropEvent
(
my_event
.
getName
()))
{
if
(
push_warning
)
push_warning_printf
(
current_thd
,
MYSQL_ERROR
::
WARN_LEVEL_ERROR
,
ER_GET_ERRMSG
,
ER
(
ER_GET_ERRMSG
),
dict
->
getNdbError
().
code
,
dict
->
getNdbError
().
message
,
"NDB"
);
sql_print_error
(
"NDB Binlog: Unable to create event in database. "
" Attempt to correct with drop failed. "
"Event: %s Error Code: %d Message: %s"
,
...
...
@@ -1971,6 +1981,11 @@ ndbcluster_create_event(Ndb *ndb, const NDBTAB *ndbtab,
*/
if
(
dict
->
createEvent
(
my_event
))
{
if
(
push_warning
)
push_warning_printf
(
current_thd
,
MYSQL_ERROR
::
WARN_LEVEL_ERROR
,
ER_GET_ERRMSG
,
ER
(
ER_GET_ERRMSG
),
dict
->
getNdbError
().
code
,
dict
->
getNdbError
().
message
,
"NDB"
);
sql_print_error
(
"NDB Binlog: Unable to create event in database. "
" Attempt to correct with drop ok, but create failed. "
"Event: %s Error Code: %d Message: %s"
,
...
...
sql/ha_ndbcluster_binlog.h
View file @
281cd0f3
...
...
@@ -85,7 +85,8 @@ int ndbcluster_create_binlog_setup(Ndb *ndb, const char *key,
const
char
*
table_name
,
my_bool
share_may_exist
);
int
ndbcluster_create_event
(
Ndb
*
ndb
,
const
NDBTAB
*
table
,
const
char
*
event_name
,
NDB_SHARE
*
share
);
const
char
*
event_name
,
NDB_SHARE
*
share
,
int
push_warning
=
0
);
int
ndbcluster_create_event_ops
(
NDB_SHARE
*
share
,
const
NDBTAB
*
ndbtab
,
const
char
*
event_name
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment