mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
- Fix bug: Server crash when using a special column in XCOL tables
modified: storage/connect/mysql-test/connect/r/xcol.result storage/connect/mysql-test/connect/t/xcol.test storage/connect/tabxcl.cpp
This commit is contained in:
parent
4f59b65fb0
commit
c4cf40c21b
3 changed files with 56 additions and 10 deletions
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Checking XCOL tables
|
||||
# Make the children list table
|
||||
#
|
||||
CREATE TABLE chlist (
|
||||
mother char(12) NOT NULL COMMENT 'The mother of the listed children',
|
||||
|
@ -20,7 +20,10 @@ Lisbeth Lucy,Charles,Diana
|
|||
Corinne NULL
|
||||
Claude Marc
|
||||
Janet Arthur,Sandra,Peter,John
|
||||
CREATE TABLE child ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=chlist OPTION_LIST='colname=children,port=PORT';
|
||||
#
|
||||
# Checking XCOL tables
|
||||
#
|
||||
CREATE TABLE child ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=chlist OPTION_LIST='colname=children';
|
||||
SELECT * FROM child;
|
||||
mother children
|
||||
Sophia Vivian
|
||||
|
@ -81,5 +84,34 @@ Corinne 0
|
|||
Janet 4
|
||||
Lisbeth 3
|
||||
Sophia 2
|
||||
#
|
||||
# Test using special columns
|
||||
#
|
||||
CREATE TABLE `child2` (
|
||||
`row` int NOT NULL SPECIAL=ROWID,
|
||||
`num` int NOT NULL SPECIAL=ROWNUM,
|
||||
`mother` varchar(12) NOT NULL COMMENT 'The mother of the children',
|
||||
`child` varchar(12) NOT NULL COMMENT 'The child name' FLAG=2
|
||||
) ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=chlist `OPTION_LIST`='colname=child';
|
||||
SELECT * FROM child2;
|
||||
row num mother child
|
||||
1 1 Sophia Vivian
|
||||
2 2 Sophia Antony
|
||||
3 1 Lisbeth Lucy
|
||||
4 2 Lisbeth Charles
|
||||
5 3 Lisbeth Diana
|
||||
7 1 Claude Marc
|
||||
8 1 Janet Arthur
|
||||
9 2 Janet Sandra
|
||||
10 3 Janet Peter
|
||||
11 4 Janet John
|
||||
# List only first child
|
||||
SELECT mother, child FROM child2 where num = 1;
|
||||
mother child
|
||||
Sophia Vivian
|
||||
Lisbeth Lucy
|
||||
Claude Marc
|
||||
Janet Arthur
|
||||
DROP TABLE child;
|
||||
DROP TABLE chlist;
|
||||
DROP TABLE child2;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
let $PORT= `select @@port`;
|
||||
|
||||
--echo #
|
||||
--echo # Checking XCOL tables
|
||||
--echo # Make the children list table
|
||||
--echo #
|
||||
CREATE TABLE chlist (
|
||||
mother char(12) NOT NULL COMMENT 'The mother of the listed children',
|
||||
|
@ -15,8 +12,10 @@ INSERT INTO chlist VALUES('Claude','Marc');
|
|||
INSERT INTO chlist VALUES('Janet','Arthur,Sandra,Peter,John');
|
||||
SELECT * FROM chlist;
|
||||
|
||||
--replace_result $PORT PORT
|
||||
--eval CREATE TABLE child ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=chlist OPTION_LIST='colname=children,port=$PORT'
|
||||
--echo #
|
||||
--echo # Checking XCOL tables
|
||||
--echo #
|
||||
CREATE TABLE child ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=chlist OPTION_LIST='colname=children';
|
||||
SELECT * FROM child;
|
||||
SELECT * FROM child ORDER BY mother;
|
||||
SELECT * FROM child ORDER BY children;
|
||||
|
@ -24,5 +23,19 @@ SELECT mother FROM child;
|
|||
SELECT mother, COUNT(*) FROM child GROUP BY mother;
|
||||
SELECT mother, COUNT(children) FROM child GROUP BY mother;
|
||||
|
||||
--echo #
|
||||
--echo # Test using special columns
|
||||
--echo #
|
||||
CREATE TABLE `child2` (
|
||||
`row` int NOT NULL SPECIAL=ROWID,
|
||||
`num` int NOT NULL SPECIAL=ROWNUM,
|
||||
`mother` varchar(12) NOT NULL COMMENT 'The mother of the children',
|
||||
`child` varchar(12) NOT NULL COMMENT 'The child name' FLAG=2
|
||||
) ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=chlist `OPTION_LIST`='colname=child';
|
||||
SELECT * FROM child2;
|
||||
--echo # List only first child
|
||||
SELECT mother, child FROM child2 where num = 1;
|
||||
|
||||
DROP TABLE child;
|
||||
DROP TABLE chlist;
|
||||
DROP TABLE child2;
|
||||
|
|
|
@ -182,8 +182,9 @@ bool TDBXCL::OpenDB(PGLOBAL g)
|
|||
/* Check and initialize the subtable columns. */
|
||||
/*********************************************************************/
|
||||
for (PCOL cp = Columns; cp; cp = cp->GetNext())
|
||||
if (((PPRXCOL)cp)->Init(g))
|
||||
return TRUE;
|
||||
if (!cp->IsSpecial())
|
||||
if (((PPRXCOL)cp)->Init(g))
|
||||
return TRUE;
|
||||
|
||||
/*********************************************************************/
|
||||
/* Physically open the object table. */
|
||||
|
|
Loading…
Reference in a new issue