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
d7042ec4
Commit
d7042ec4
authored
Jun 26, 2024
by
Yuchen Pei
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '10.5' into 10.6
parents
0076eb3d
53a48678
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
403 additions
and
224 deletions
+403
-224
mysql-test/main/having_cond_pushdown.result
mysql-test/main/having_cond_pushdown.result
+12
-0
mysql-test/main/having_cond_pushdown.test
mysql-test/main/having_cond_pushdown.test
+12
-0
sql/log_event_old.cc
sql/log_event_old.cc
+4
-4
sql/sql_class.h
sql/sql_class.h
+1
-1
sql/sql_insert.cc
sql/sql_insert.cc
+21
-0
sql/sql_parse.cc
sql/sql_parse.cc
+16
-0
storage/oqgraph/graphcore.cc
storage/oqgraph/graphcore.cc
+9
-9
storage/oqgraph/ha_oqgraph.h
storage/oqgraph/ha_oqgraph.h
+33
-33
storage/spider/mysql-test/spider/my.cnf
storage/spider/mysql-test/spider/my.cnf
+8
-175
storage/spider/mysql-test/spider/my_1_1.cnf
storage/spider/mysql-test/spider/my_1_1.cnf
+44
-0
storage/spider/mysql-test/spider/my_2_1.cnf
storage/spider/mysql-test/spider/my_2_1.cnf
+56
-0
storage/spider/mysql-test/spider/my_2_2.cnf
storage/spider/mysql-test/spider/my_2_2.cnf
+38
-0
storage/spider/mysql-test/spider/my_2_3.cnf
storage/spider/mysql-test/spider/my_2_3.cnf
+9
-0
storage/spider/mysql-test/spider/my_3_1.cnf
storage/spider/mysql-test/spider/my_3_1.cnf
+11
-0
storage/spider/mysql-test/spider/my_3_2.cnf
storage/spider/mysql-test/spider/my_3_2.cnf
+9
-0
storage/spider/mysql-test/spider/my_3_3.cnf
storage/spider/mysql-test/spider/my_3_3.cnf
+9
-0
storage/spider/mysql-test/spider/my_4_1.cnf
storage/spider/mysql-test/spider/my_4_1.cnf
+9
-0
storage/spider/spd_copy_tables.cc
storage/spider/spd_copy_tables.cc
+1
-1
storage/spider/spd_direct_sql.cc
storage/spider/spd_direct_sql.cc
+1
-1
tests/mysql_client_test.c
tests/mysql_client_test.c
+100
-0
No files found.
mysql-test/main/having_cond_pushdown.result
View file @
d7042ec4
...
...
@@ -4965,4 +4965,16 @@ SELECT a,b FROM t1 GROUP BY a,b HAVING a = (b IS NULL);
a b
0 11
DROP TABLE t1;
#
# MDEV-19520 Extend condition normalization to include 'NOT a'
# having Item_func_not in item tree breaks assumptions during the
# optimization phase about transformation possibilities in fix_fields().
# Remove Item_func_not by extending normalization during parsing.
#
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (0),(1);
SELECT a FROM t1 GROUP BY a HAVING NOT a;
a
0
DROP TABLE t1;
End of 10.4 tests
mysql-test/main/having_cond_pushdown.test
View file @
d7042ec4
...
...
@@ -1489,4 +1489,16 @@ SELECT a,b FROM t1 GROUP BY a,b HAVING a = (b IS NULL);
DROP
TABLE
t1
;
--
echo
#
--
echo
# MDEV-19520 Extend condition normalization to include 'NOT a'
--
echo
# having Item_func_not in item tree breaks assumptions during the
--
echo
# optimization phase about transformation possibilities in fix_fields().
--
echo
# Remove Item_func_not by extending normalization during parsing.
--
echo
#
CREATE
TABLE
t1
(
a
INT
);
INSERT
INTO
t1
VALUES
(
0
),(
1
);
SELECT
a
FROM
t1
GROUP
BY
a
HAVING
NOT
a
;
DROP
TABLE
t1
;
--
echo
End
of
10.4
tests
sql/log_event_old.cc
View file @
d7042ec4
...
...
@@ -27,13 +27,13 @@
#include "lock.h" // mysql_unlock_tables
#include "rpl_rli.h"
#include "rpl_utility.h"
#endif
#include "log_event_old.h"
#include "rpl_record_old.h"
#include "transaction.h"
#ifdef WITH_WSREP
#include "wsrep_mysqld.h"
#endif
/* WITH_WSREP */
#endif
/* MYSQL_CLIENT */
#include "log_event_old.h"
#include "rpl_record_old.h"
#include "transaction.h"
PSI_memory_key
key_memory_log_event_old
;
...
...
sql/sql_class.h
View file @
d7042ec4
...
...
@@ -4862,7 +4862,7 @@ class THD: public THD_count, /* this must be first */
my_message
(
ER_NO_DB_ERROR
,
ER
(
ER_NO_DB_ERROR
),
MYF
(
0
));
return
TRUE
;
}
/* Get db name or "".
Use for printing current db
*/
/* Get db name or "". */
const
char
*
get_db
()
{
return
safe_str
(
db
.
str
);
}
...
...
sql/sql_insert.cc
View file @
d7042ec4
...
...
@@ -1027,10 +1027,19 @@ bool mysql_insert(THD *thd, TABLE_LIST *table_list,
*/
restore_record
(
table
,
s
->
default_values
);
// Get empty record
table
->
reset_default_fields
();
/*
Reset the sentinel thd->bulk_param in order not to consume the next
values of a bound array in case one of statement executed by
the trigger's body is INSERT statement.
*/
void
*
save_bulk_param
=
thd
->
bulk_param
;
thd
->
bulk_param
=
nullptr
;
if
(
unlikely
(
fill_record_n_invoke_before_triggers
(
thd
,
table
,
fields
,
*
values
,
0
,
TRG_EVENT_INSERT
)))
{
thd
->
bulk_param
=
save_bulk_param
;
if
(
values_list
.
elements
!=
1
&&
!
thd
->
is_error
())
{
info
.
records
++
;
...
...
@@ -1044,6 +1053,7 @@ bool mysql_insert(THD *thd, TABLE_LIST *table_list,
error
=
1
;
break
;
}
thd
->
bulk_param
=
save_bulk_param
;
}
else
{
...
...
@@ -1073,12 +1083,22 @@ bool mysql_insert(THD *thd, TABLE_LIST *table_list,
}
}
table
->
reset_default_fields
();
/*
Reset the sentinel thd->bulk_param in order not to consume the next
values of a bound array in case one of statement executed by
the trigger's body is INSERT statement.
*/
void
*
save_bulk_param
=
thd
->
bulk_param
;
thd
->
bulk_param
=
nullptr
;
if
(
unlikely
(
fill_record_n_invoke_before_triggers
(
thd
,
table
,
table
->
field_to_fill
(),
*
values
,
0
,
TRG_EVENT_INSERT
)))
{
thd
->
bulk_param
=
save_bulk_param
;
if
(
values_list
.
elements
!=
1
&&
!
thd
->
is_error
())
{
info
.
records
++
;
...
...
@@ -1087,6 +1107,7 @@ bool mysql_insert(THD *thd, TABLE_LIST *table_list,
error
=
1
;
break
;
}
thd
->
bulk_param
=
save_bulk_param
;
}
/*
...
...
sql/sql_parse.cc
View file @
d7042ec4
...
...
@@ -9158,6 +9158,7 @@ push_new_name_resolution_context(THD *thd,
/**
Fix condition which contains only field (f turns to f <> 0 )
or only contains the function NOT field (not f turns to f == 0)
@param cond The condition to fix
...
...
@@ -9173,6 +9174,21 @@ Item *normalize_cond(THD *thd, Item *cond)
{
cond
=
new
(
thd
->
mem_root
)
Item_func_ne
(
thd
,
cond
,
new
(
thd
->
mem_root
)
Item_int
(
thd
,
0
));
}
else
{
if
(
type
==
Item
::
FUNC_ITEM
)
{
Item_func
*
func_item
=
(
Item_func
*
)
cond
;
if
(
func_item
->
functype
()
==
Item_func
::
NOT_FUNC
)
{
Item
*
arg
=
func_item
->
arguments
()[
0
];
if
(
arg
->
type
()
==
Item
::
FIELD_ITEM
||
arg
->
type
()
==
Item
::
REF_ITEM
)
cond
=
new
(
thd
->
mem_root
)
Item_func_eq
(
thd
,
arg
,
new
(
thd
->
mem_root
)
Item_int
(
thd
,
0
));
}
}
}
}
return
cond
;
}
...
...
storage/oqgraph/graphcore.cc
View file @
d7042ec4
...
...
@@ -266,10 +266,10 @@ namespace open_query {
:
oqgraph_cursor
(
arg
),
no_weight
(),
sequence
(
0
),
results
(),
last
()
{
}
int
fetch_row
(
const
row
&
,
row
&
);
int
fetch_row
(
const
row
&
,
row
&
,
const
reference
&
);
int
fetch_row
(
const
row
&
,
row
&
)
override
;
int
fetch_row
(
const
row
&
,
row
&
,
const
reference
&
)
override
;
void
current
(
reference
&
ref
)
const
void
current
(
reference
&
ref
)
const
override
{
ref
=
last
;
}
...
...
@@ -286,10 +286,10 @@ namespace open_query {
:
oqgraph_cursor
(
arg
),
position
(
0
)
{
}
int
fetch_row
(
const
row
&
,
row
&
);
int
fetch_row
(
const
row
&
,
row
&
,
const
reference
&
);
int
fetch_row
(
const
row
&
,
row
&
)
override
;
int
fetch_row
(
const
row
&
,
row
&
,
const
reference
&
)
override
;
void
current
(
reference
&
ref
)
const
void
current
(
reference
&
ref
)
const
override
{
ref
=
last
;
}
...
...
@@ -308,10 +308,10 @@ namespace open_query {
:
oqgraph_cursor
(
arg
),
position
(
0
),
last
()
{
}
int
fetch_row
(
const
row
&
,
row
&
);
int
fetch_row
(
const
row
&
,
row
&
,
const
reference
&
);
int
fetch_row
(
const
row
&
,
row
&
)
override
;
int
fetch_row
(
const
row
&
,
row
&
,
const
reference
&
)
override
;
void
current
(
reference
&
ref
)
const
void
current
(
reference
&
ref
)
const
override
{
ref
=
last
;
}
...
...
storage/oqgraph/ha_oqgraph.h
View file @
d7042ec4
...
...
@@ -58,59 +58,59 @@ class ha_oqgraph: public handler
public:
#if MYSQL_VERSION_ID >= 50100
ha_oqgraph
(
handlerton
*
hton
,
TABLE_SHARE
*
table
);
ulonglong
table_flags
()
const
;
ulonglong
table_flags
()
const
override
;
#else
ha_oqgraph
(
TABLE
*
table
);
Table_flags
table_flags
()
const
;
#endif
virtual
~
ha_oqgraph
();
const
char
*
index_type
(
uint
inx
)
const
char
*
index_type
(
uint
inx
)
override
{
return
"HASH"
;
}
/* Rows also use a fixed-size format */
enum
row_type
get_row_type
()
const
{
return
ROW_TYPE_FIXED
;
}
ulong
index_flags
(
uint
inx
,
uint
part
,
bool
all_parts
)
const
;
enum
row_type
get_row_type
()
const
override
{
return
ROW_TYPE_FIXED
;
}
ulong
index_flags
(
uint
inx
,
uint
part
,
bool
all_parts
)
const
override
;
const
char
**
bas_ext
()
const
;
uint
max_supported_keys
()
const
{
return
MAX_KEY
;
}
uint
max_supported_key_part_length
()
const
{
return
MAX_KEY_LENGTH
;
}
double
scan_time
()
{
return
(
double
)
1000000000
;
}
double
read_time
(
uint
index
,
uint
ranges
,
ha_rows
rows
)
uint
max_supported_keys
()
const
override
{
return
MAX_KEY
;
}
uint
max_supported_key_part_length
()
const
override
{
return
MAX_KEY_LENGTH
;
}
double
scan_time
()
override
{
return
(
double
)
1000000000
;
}
double
read_time
(
uint
,
uint
,
ha_rows
)
override
{
return
1
;
}
// Doesn't make sense to change the engine on a virtual table.
virtual
bool
can_switch_engines
()
{
return
false
;
}
virtual
bool
can_switch_engines
()
override
{
return
false
;
}
int
open
(
const
char
*
name
,
int
mode
,
uint
test_if_locked
);
int
close
(
void
);
int
write_row
(
const
byte
*
buf
);
int
update_row
(
const
uchar
*
old_data
,
const
uchar
*
new_data
);
int
delete_row
(
const
byte
*
buf
);
int
open
(
const
char
*
name
,
int
mode
,
uint
test_if_locked
)
override
;
int
close
(
void
)
override
;
int
write_row
(
const
byte
*
buf
)
override
;
int
update_row
(
const
uchar
*
old_data
,
const
uchar
*
new_data
)
override
;
int
delete_row
(
const
byte
*
buf
)
override
;
int
index_read
(
byte
*
buf
,
const
byte
*
key
,
uint
key_len
,
enum
ha_rkey_function
find_flag
);
uint
key_len
,
enum
ha_rkey_function
find_flag
)
override
;
int
index_read_idx
(
byte
*
buf
,
uint
idx
,
const
byte
*
key
,
uint
key_len
,
enum
ha_rkey_function
find_flag
);
int
index_next_same
(
byte
*
buf
,
const
byte
*
key
,
uint
key_len
);
int
rnd_init
(
bool
scan
);
int
rnd_next
(
byte
*
buf
);
int
rnd_pos
(
byte
*
buf
,
byte
*
pos
);
void
position
(
const
byte
*
record
);
int
info
(
uint
);
int
extra
(
enum
ha_extra_function
operation
);
int
external_lock
(
THD
*
thd
,
int
lock_type
);
int
delete_all_rows
(
void
);
int
index_next_same
(
byte
*
buf
,
const
byte
*
key
,
uint
key_len
)
override
;
int
rnd_init
(
bool
scan
)
override
;
int
rnd_next
(
byte
*
buf
)
override
;
int
rnd_pos
(
byte
*
buf
,
byte
*
pos
)
override
;
void
position
(
const
byte
*
record
)
override
;
int
info
(
uint
)
override
;
int
extra
(
enum
ha_extra_function
operation
)
override
;
int
external_lock
(
THD
*
thd
,
int
lock_type
)
override
;
int
delete_all_rows
(
void
)
override
;
ha_rows
records_in_range
(
uint
inx
,
const
key_range
*
min_key
,
const
key_range
*
max_key
,
page_range
*
pages
);
int
delete_table
(
const
char
*
from
);
int
rename_table
(
const
char
*
from
,
const
char
*
to
);
int
create
(
const
char
*
name
,
TABLE
*
form
,
HA_CREATE_INFO
*
create_info
);
void
update_create_info
(
HA_CREATE_INFO
*
create_info
);
const
key_range
*
max_key
,
page_range
*
pages
)
override
;
int
delete_table
(
const
char
*
from
)
override
;
int
rename_table
(
const
char
*
from
,
const
char
*
to
)
override
;
int
create
(
const
char
*
name
,
TABLE
*
form
,
HA_CREATE_INFO
*
create_info
)
override
;
void
update_create_info
(
HA_CREATE_INFO
*
create_info
)
override
;
THR_LOCK_DATA
**
store_lock
(
THD
*
thd
,
THR_LOCK_DATA
**
to
,
enum
thr_lock_type
lock_type
);
int
cmp_ref
(
const
byte
*
ref1
,
const
byte
*
ref2
);
enum
thr_lock_type
lock_type
)
override
;
int
cmp_ref
(
const
byte
*
ref1
,
const
byte
*
ref2
)
override
;
bool
get_error_message
(
int
error
,
String
*
buf
);
bool
get_error_message
(
int
error
,
String
*
buf
)
override
;
void
fprint_error
(
const
char
*
fmt
,
...);
...
...
@@ -123,7 +123,7 @@ class ha_oqgraph: public handler
uint
key_length
,
qc_engine_callback
*
engine_callback
,
ulonglong
*
engine_data
)
ulonglong
*
engine_data
)
override
{
/*
Do not put data from OQGRAPH tables into query cache (because there
...
...
storage/spider/mysql-test/spider/my.cnf
View file @
d7042ec4
# Use default setting for mysqld processes
!include include/default_mysqld.cnf
[mysqld.1.1]
log-bin= master-bin
loose_handlersocket_port= 20000
loose_handlersocket_port_wr= 20001
loose_handlersocket_threads= 2
loose_handlersocket_threads_wr= 1
loose_handlersocket_support_merge_table= 0
loose_handlersocket_direct_update_mode= 2
loose_handlersocket_unlimited_boundary= 65536
loose_handlersocket_bulk_insert= 0
loose_handlersocket_bulk_insert_timeout= 0
loose_handlersocket_general_log= 1
loose_handlersocket_timeout= 30
loose_handlersocket_close_table_interval=2
open_files_limit= 4096
loose_partition= 1
[mysqld.2.1]
loose_handlersocket_port= 20002
loose_handlersocket_port_wr= 20003
loose_handlersocket_threads= 2
loose_handlersocket_threads_wr= 1
loose_handlersocket_support_merge_table= 0
loose_handlersocket_direct_update_mode= 2
loose_handlersocket_unlimited_boundary= 65536
loose_handlersocket_bulk_insert= 0
loose_handlersocket_bulk_insert_timeout= 0
loose_handlersocket_general_log= 1
loose_handlersocket_timeout= 30
loose_handlersocket_close_table_interval=2
open_files_limit= 4096
[mysqld.2.2]
loose_handlersocket_port= 20004
loose_handlersocket_port_wr= 20005
loose_handlersocket_threads= 2
loose_handlersocket_threads_wr= 1
loose_handlersocket_support_merge_table= 0
loose_handlersocket_direct_update_mode= 2
loose_handlersocket_unlimited_boundary= 65536
loose_handlersocket_bulk_insert= 0
loose_handlersocket_bulk_insert_timeout= 0
loose_handlersocket_general_log= 1
loose_handlersocket_timeout= 30
loose_handlersocket_close_table_interval=2
open_files_limit= 4096
[mysqld.2.3]
[mysqld.3.1]
loose_partition= 1
[mysqld.3.2]
loose_partition= 1
[mysqld.3.3]
loose_partition= 1
[mysqld.4.1]
loose_partition= 1
[ENV]
USE_GEOMETRY_TEST= 1
USE_FULLTEXT_TEST= 1
USE_HA_TEST= 1
USE_GENERAL_LOG= 1
USE_REPLICATION= 1
MASTER_1_MYPORT= @mysqld.1.1.port
MASTER_1_HSRPORT= 20000
MASTER_1_HSWPORT= 20001
MASTER_1_MYSOCK= @mysqld.1.1.socket
MASTER_1_ENGINE_TYPE= Spider
#MASTER_1_ENGINE_TYPE= MyISAM
MASTER_1_ENGINE= ENGINE=Spider
MASTER_1_CHARSET= DEFAULT CHARSET=utf8
MASTER_1_ENGINE2= ENGINE=MyISAM
MASTER_1_CHARSET2= DEFAULT CHARSET=utf8
MASTER_1_CHARSET3= DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
SLAVE1_1_MYPORT= @mysqld.4.1.port
SLAVE1_1_MYSOCK= @mysqld.4.1.socket
SLAVE1_1_ENGINE_TYPE= MyISAM
SLAVE1_1_ENGINE= ENGINE=MyISAM
SLAVE1_1_CHARSET= DEFAULT CHARSET=utf8
USE_CHILD_GROUP2= 1
OUTPUT_CHILD_GROUP2= 0
CHILD2_1_MYPORT= @mysqld.2.1.port
CHILD2_1_HSRPORT= 20002
CHILD2_1_HSWPORT= 20003
CHILD2_1_MYSOCK= @mysqld.2.1.socket
CHILD2_1_ENGINE_TYPE= InnoDB
CHILD2_1_ENGINE= ENGINE=InnoDB
CHILD2_1_CHARSET= DEFAULT CHARSET=utf8
CHILD2_1_CHARSET2= DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CHILD2_2_MYPORT= @mysqld.2.2.port
CHILD2_2_HSRPORT= 20004
CHILD2_2_HSWPORT= 20005
CHILD2_2_MYSOCK= @mysqld.2.2.socket
CHILD2_2_ENGINE_TYPE= InnoDB
CHILD2_2_ENGINE= ENGINE=InnoDB
CHILD2_2_CHARSET= DEFAULT CHARSET=utf8
CHILD2_3_MYPORT= @mysqld.2.3.port
CHILD2_3_MYSOCK= @mysqld.2.3.socket
CHILD2_3_ENGINE_TYPE= InnoDB
CHILD2_3_ENGINE= ENGINE=InnoDB
CHILD2_3_CHARSET= DEFAULT CHARSET=utf8
CHILD2_1_FT_MYPORT= @mysqld.2.1.port
CHILD2_1_FT_MYSOCK= @mysqld.2.1.socket
CHILD2_1_FT_ENGINE_TYPE= MyISAM
CHILD2_1_FT_ENGINE= ENGINE=MyISAM
CHILD2_1_FT_CHARSET= DEFAULT CHARSET=utf8
CHILD2_2_FT_MYPORT= @mysqld.2.2.port
CHILD2_2_FT_MYSOCK= @mysqld.2.2.socket
CHILD2_2_FT_ENGINE_TYPE= MyISAM
CHILD2_2_FT_ENGINE= ENGINE=MyISAM
CHILD2_2_FT_CHARSET= DEFAULT CHARSET=utf8
CHILD2_1_GM_MYPORT= @mysqld.2.1.port
CHILD2_1_GM_MYSOCK= @mysqld.2.1.socket
CHILD2_1_GM_ENGINE_TYPE= MyISAM
CHILD2_1_GM_ENGINE= ENGINE=MyISAM
CHILD2_1_GM_CHARSET= DEFAULT CHARSET=utf8
CHILD2_2_GM_MYPORT= @mysqld.2.2.port
CHILD2_2_GM_MYSOCK= @mysqld.2.2.socket
CHILD2_2_GM_ENGINE_TYPE= MyISAM
CHILD2_2_GM_ENGINE= ENGINE=MyISAM
CHILD2_2_GM_CHARSET= DEFAULT CHARSET=utf8
USE_CHILD_GROUP3= 1
OUTPUT_CHILD_GROUP3= 0
CHILD3_1_MYPORT= @mysqld.3.1.port
CHILD3_1_MYSOCK= @mysqld.3.1.socket
CHILD3_1_ENGINE_TYPE= InnoDB
CHILD3_1_ENGINE= ENGINE=InnoDB
CHILD3_1_CHARSET= DEFAULT CHARSET=utf8
CHILD3_2_MYPORT= @mysqld.3.2.port
CHILD3_2_MYSOCK= @mysqld.3.2.socket
CHILD3_2_ENGINE_TYPE= InnoDB
CHILD3_2_ENGINE= ENGINE=InnoDB
CHILD3_2_CHARSET= DEFAULT CHARSET=utf8
CHILD3_3_MYPORT= @mysqld.3.3.port
CHILD3_3_MYSOCK= @mysqld.3.3.socket
CHILD3_3_ENGINE_TYPE= InnoDB
CHILD3_3_ENGINE= ENGINE=InnoDB
CHILD3_3_CHARSET= DEFAULT CHARSET=utf8
STR_SEMICOLON= ;
#The followings are set in include/init_xxx.inc files
# MASTER_1_COMMENT_2_1
# MASTER_1_COMMENT2_2_1
# MASTER_1_COMMENT3_2_1
# MASTER_1_COMMENT4_2_1
# MASTER_1_COMMENT5_2_1
# MASTER_1_COMMENT_P_2_1
# CHILD2_1_DROP_TABLES
# CHILD2_1_CREATE_TABLES
# CHILD2_1_SELECT_TABLES
# CHILD2_1_DROP_TABLES2
# CHILD2_1_CREATE_TABLES2
# CHILD2_1_SELECT_TABLES2
# CHILD2_1_DROP_TABLES3
# CHILD2_1_CREATE_TABLES3
# CHILD2_1_SELECT_TABLES3
# CHILD2_1_DROP_TABLES4
# CHILD2_1_CREATE_TABLES4
# CHILD2_1_SELECT_TABLES4
# CHILD2_1_DROP_TABLES5
# CHILD2_1_CREATE_TABLES5
# CHILD2_1_SELECT_TABLES5
# CHILD2_1_DROP_TABLES6
# CHILD2_1_CREATE_TABLES6
# CHILD2_1_SELECT_TABLES6
# CHILD2_2_DROP_TABLES
# CHILD2_2_CREATE_TABLES
# CHILD2_2_SELECT_TABLES
!include my_1_1.cnf
!include my_2_1.cnf
!include my_2_2.cnf
!include my_2_3.cnf
!include my_3_1.cnf
!include my_3_2.cnf
!include my_3_3.cnf
!include my_4_1.cnf
storage/spider/mysql-test/spider/my_1_1.cnf
0 → 100644
View file @
d7042ec4
[mysqld.1.1]
log-bin= master-bin
loose_handlersocket_port= 20000
loose_handlersocket_port_wr= 20001
loose_handlersocket_threads= 2
loose_handlersocket_threads_wr= 1
loose_handlersocket_support_merge_table= 0
loose_handlersocket_direct_update_mode= 2
loose_handlersocket_unlimited_boundary= 65536
loose_handlersocket_bulk_insert= 0
loose_handlersocket_bulk_insert_timeout= 0
loose_handlersocket_general_log= 1
loose_handlersocket_timeout= 30
loose_handlersocket_close_table_interval=2
open_files_limit= 4096
loose_partition= 1
[ENV]
USE_GEOMETRY_TEST= 1
USE_FULLTEXT_TEST= 1
USE_HA_TEST= 1
USE_GENERAL_LOG= 1
USE_REPLICATION= 1
MASTER_1_MYPORT= @mysqld.1.1.port
MASTER_1_HSRPORT= 20000
MASTER_1_HSWPORT= 20001
MASTER_1_MYSOCK= @mysqld.1.1.socket
MASTER_1_ENGINE_TYPE= Spider
#MASTER_1_ENGINE_TYPE= MyISAM
MASTER_1_ENGINE= ENGINE=Spider
MASTER_1_CHARSET= DEFAULT CHARSET=utf8
MASTER_1_ENGINE2= ENGINE=MyISAM
MASTER_1_CHARSET2= DEFAULT CHARSET=utf8
MASTER_1_CHARSET3= DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
STR_SEMICOLON= ;
#The followings are set in include/init_xxx.inc files
# MASTER_1_COMMENT_2_1
# MASTER_1_COMMENT2_2_1
# MASTER_1_COMMENT3_2_1
# MASTER_1_COMMENT4_2_1
# MASTER_1_COMMENT5_2_1
# MASTER_1_COMMENT_P_2_1
storage/spider/mysql-test/spider/my_2_1.cnf
0 → 100644
View file @
d7042ec4
[mysqld.2.1]
loose_handlersocket_port= 20002
loose_handlersocket_port_wr= 20003
loose_handlersocket_threads= 2
loose_handlersocket_threads_wr= 1
loose_handlersocket_support_merge_table= 0
loose_handlersocket_direct_update_mode= 2
loose_handlersocket_unlimited_boundary= 65536
loose_handlersocket_bulk_insert= 0
loose_handlersocket_bulk_insert_timeout= 0
loose_handlersocket_general_log= 1
loose_handlersocket_timeout= 30
loose_handlersocket_close_table_interval=2
open_files_limit= 4096
[ENV]
USE_CHILD_GROUP2= 1
OUTPUT_CHILD_GROUP2= 0
CHILD2_1_MYPORT= @mysqld.2.1.port
CHILD2_1_HSRPORT= 20002
CHILD2_1_HSWPORT= 20003
CHILD2_1_MYSOCK= @mysqld.2.1.socket
CHILD2_1_ENGINE_TYPE= InnoDB
CHILD2_1_ENGINE= ENGINE=InnoDB
CHILD2_1_CHARSET= DEFAULT CHARSET=utf8
CHILD2_1_CHARSET2= DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CHILD2_1_FT_MYPORT= @mysqld.2.1.port
CHILD2_1_FT_MYSOCK= @mysqld.2.1.socket
CHILD2_1_FT_ENGINE_TYPE= MyISAM
CHILD2_1_FT_ENGINE= ENGINE=MyISAM
CHILD2_1_FT_CHARSET= DEFAULT CHARSET=utf8
CHILD2_1_GM_MYPORT= @mysqld.2.1.port
CHILD2_1_GM_MYSOCK= @mysqld.2.1.socket
CHILD2_1_GM_ENGINE_TYPE= MyISAM
CHILD2_1_GM_ENGINE= ENGINE=MyISAM
CHILD2_1_GM_CHARSET= DEFAULT CHARSET=utf8
#The followings are set in include/init_xxx.inc files
# CHILD2_1_DROP_TABLES
# CHILD2_1_CREATE_TABLES
# CHILD2_1_SELECT_TABLES
# CHILD2_1_DROP_TABLES2
# CHILD2_1_CREATE_TABLES2
# CHILD2_1_SELECT_TABLES2
# CHILD2_1_DROP_TABLES3
# CHILD2_1_CREATE_TABLES3
# CHILD2_1_SELECT_TABLES3
# CHILD2_1_DROP_TABLES4
# CHILD2_1_CREATE_TABLES4
# CHILD2_1_SELECT_TABLES4
# CHILD2_1_DROP_TABLES5
# CHILD2_1_CREATE_TABLES5
# CHILD2_1_SELECT_TABLES5
# CHILD2_1_DROP_TABLES6
# CHILD2_1_CREATE_TABLES6
# CHILD2_1_SELECT_TABLES6
storage/spider/mysql-test/spider/my_2_2.cnf
0 → 100644
View file @
d7042ec4
[mysqld.2.2]
loose_handlersocket_port= 20004
loose_handlersocket_port_wr= 20005
loose_handlersocket_threads= 2
loose_handlersocket_threads_wr= 1
loose_handlersocket_support_merge_table= 0
loose_handlersocket_direct_update_mode= 2
loose_handlersocket_unlimited_boundary= 65536
loose_handlersocket_bulk_insert= 0
loose_handlersocket_bulk_insert_timeout= 0
loose_handlersocket_general_log= 1
loose_handlersocket_timeout= 30
loose_handlersocket_close_table_interval=2
open_files_limit= 4096
[ENV]
CHILD2_2_MYPORT= @mysqld.2.2.port
CHILD2_2_HSRPORT= 20004
CHILD2_2_HSWPORT= 20005
CHILD2_2_MYSOCK= @mysqld.2.2.socket
CHILD2_2_ENGINE_TYPE= InnoDB
CHILD2_2_ENGINE= ENGINE=InnoDB
CHILD2_2_CHARSET= DEFAULT CHARSET=utf8
CHILD2_2_FT_MYPORT= @mysqld.2.2.port
CHILD2_2_FT_MYSOCK= @mysqld.2.2.socket
CHILD2_2_FT_ENGINE_TYPE= MyISAM
CHILD2_2_FT_ENGINE= ENGINE=MyISAM
CHILD2_2_FT_CHARSET= DEFAULT CHARSET=utf8
CHILD2_2_GM_MYPORT= @mysqld.2.2.port
CHILD2_2_GM_MYSOCK= @mysqld.2.2.socket
CHILD2_2_GM_ENGINE_TYPE= MyISAM
CHILD2_2_GM_ENGINE= ENGINE=MyISAM
CHILD2_2_GM_CHARSET= DEFAULT CHARSET=utf8
#The followings are set in include/init_xxx.inc files
# CHILD2_2_DROP_TABLES
# CHILD2_2_CREATE_TABLES
# CHILD2_2_SELECT_TABLES
storage/spider/mysql-test/spider/my_2_3.cnf
0 → 100644
View file @
d7042ec4
[mysqld.2.3]
loose_partition= 1
[ENV]
CHILD2_3_MYPORT= @mysqld.2.3.port
CHILD2_3_MYSOCK= @mysqld.2.3.socket
CHILD2_3_ENGINE_TYPE= InnoDB
CHILD2_3_ENGINE= ENGINE=InnoDB
CHILD2_3_CHARSET= DEFAULT CHARSET=utf8
storage/spider/mysql-test/spider/my_3_1.cnf
0 → 100644
View file @
d7042ec4
[mysqld.3.1]
loose_partition= 1
[ENV]
USE_CHILD_GROUP3= 1
OUTPUT_CHILD_GROUP3= 0
CHILD3_1_MYPORT= @mysqld.3.1.port
CHILD3_1_MYSOCK= @mysqld.3.1.socket
CHILD3_1_ENGINE_TYPE= InnoDB
CHILD3_1_ENGINE= ENGINE=InnoDB
CHILD3_1_CHARSET= DEFAULT CHARSET=utf8
storage/spider/mysql-test/spider/my_3_2.cnf
0 → 100644
View file @
d7042ec4
[mysqld.3.2]
loose_partition= 1
[ENV]
CHILD3_2_MYPORT= @mysqld.3.2.port
CHILD3_2_MYSOCK= @mysqld.3.2.socket
CHILD3_2_ENGINE_TYPE= InnoDB
CHILD3_2_ENGINE= ENGINE=InnoDB
CHILD3_2_CHARSET= DEFAULT CHARSET=utf8
storage/spider/mysql-test/spider/my_3_3.cnf
0 → 100644
View file @
d7042ec4
[mysqld.3.3]
loose_partition= 1
[ENV]
CHILD3_3_MYPORT= @mysqld.3.3.port
CHILD3_3_MYSOCK= @mysqld.3.3.socket
CHILD3_3_ENGINE_TYPE= InnoDB
CHILD3_3_ENGINE= ENGINE=InnoDB
CHILD3_3_CHARSET= DEFAULT CHARSET=utf8
storage/spider/mysql-test/spider/my_4_1.cnf
0 → 100644
View file @
d7042ec4
[mysqld.4.1]
loose_partition= 1
[ENV]
SLAVE1_1_MYPORT= @mysqld.4.1.port
SLAVE1_1_MYSOCK= @mysqld.4.1.socket
SLAVE1_1_ENGINE_TYPE= MyISAM
SLAVE1_1_ENGINE= ENGINE=MyISAM
SLAVE1_1_CHARSET= DEFAULT CHARSET=utf8
storage/spider/spd_copy_tables.cc
View file @
d7042ec4
...
...
@@ -52,7 +52,7 @@ int spider_udf_set_copy_tables_param_default(
copy_tables
->
database_length
=
SPIDER_THD_db_length
(
copy_tables
->
trx
->
thd
);
if
(
!
(
copy_tables
->
database
=
spider_create_string
(
SPIDER_THD_db_str
(
copy_tables
->
trx
->
thd
),
copy_tables
->
trx
->
thd
->
get_db
(
),
copy_tables
->
database_length
))
)
{
my_error
(
ER_OUT_OF_RESOURCES
,
MYF
(
0
),
HA_ERR_OUT_OF_MEM
);
...
...
storage/spider/spd_direct_sql.cc
View file @
d7042ec4
...
...
@@ -1194,7 +1194,7 @@ int spider_udf_set_direct_sql_param_default(
direct_sql
->
tgt_default_db_name_length
=
SPIDER_THD_db_length
(
trx
->
thd
);
if
(
!
(
direct_sql
->
tgt_default_db_name
=
spider_create_string
(
SPIDER_THD_db_str
(
trx
->
thd
),
trx
->
thd
->
get_db
(
),
direct_sql
->
tgt_default_db_name_length
))
)
{
my_error
(
ER_OUT_OF_RESOURCES
,
MYF
(
0
),
HA_ERR_OUT_OF_MEM
);
...
...
tests/mysql_client_test.c
View file @
d7042ec4
...
...
@@ -21873,6 +21873,103 @@ static void test_mdev19838()
rc
=
mysql_query
(
mysql
,
"drop table mdev19838"
);
myquery
(
rc
);
}
static
void
test_mdev_24411
()
{
int
rc
;
MYSQL_STMT
*
stmt
;
MYSQL_BIND
bind
;
MYSQL_RES
*
result
;
MYSQL_ROW
row
;
my_ulonglong
row_count
;
unsigned
int
vals
[]
=
{
1
,
2
,
3
};
unsigned
int
vals_array_len
=
3
;
const
char
*
insert_stmt
=
"INSERT INTO t1 VALUES (?)"
;
myheader
(
"test_mdev_24411"
);
rc
=
mysql_query
(
mysql
,
"DROP TABLE IF EXISTS t1"
);
myquery
(
rc
);
rc
=
mysql_query
(
mysql
,
"DROP TABLE IF EXISTS t2"
);
myquery
(
rc
);
rc
=
mysql_query
(
mysql
,
"CREATE TABLE t1 (a INT)"
);
myquery
(
rc
);
rc
=
mysql_query
(
mysql
,
"CREATE TABLE t2 (a INT)"
);
myquery
(
rc
);
rc
=
mysql_query
(
mysql
,
"CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW "
"BEGIN INSERT INTO t2 (a) VALUES (NEW.a); END;"
);
myquery
(
rc
);
stmt
=
mysql_stmt_init
(
mysql
);
check_stmt
(
stmt
);
rc
=
mysql_stmt_prepare
(
stmt
,
insert_stmt
,
strlen
(
insert_stmt
));
check_execute
(
stmt
,
rc
);
memset
(
&
bind
,
0
,
sizeof
(
bind
));
bind
.
buffer_type
=
MYSQL_TYPE_LONG
;
bind
.
buffer
=
vals
;
rc
=
mysql_stmt_attr_set
(
stmt
,
STMT_ATTR_ARRAY_SIZE
,
&
vals_array_len
);
check_execute
(
stmt
,
rc
);
rc
=
mysql_stmt_bind_param
(
stmt
,
&
bind
);
check_execute
(
stmt
,
rc
);
rc
=
mysql_stmt_execute
(
stmt
);
check_execute
(
stmt
,
rc
);
/*
It's expected that the INSERT statement adds three rows into
the table t1
*/
row_count
=
mysql_stmt_affected_rows
(
stmt
);
DIE_UNLESS
(
row_count
==
3
);
/*
* Check that the BEFORE INSERT trigger of the table t1 does work correct
* and inserted the rows (1), (2), (3) into the table t2.
*/
rc
=
mysql_query
(
mysql
,
"SELECT 't1' tname, a FROM t1 "
"UNION SELECT 't2' tname, a FROM t2 ORDER BY tname,a"
);
myquery
(
rc
);
result
=
mysql_store_result
(
mysql
);
row
=
mysql_fetch_row
(
result
);
DIE_UNLESS
(
strcmp
(
row
[
0
],
"t1"
)
==
0
&&
atoi
(
row
[
1
])
==
1
);
row
=
mysql_fetch_row
(
result
);
DIE_UNLESS
(
strcmp
(
row
[
0
],
"t1"
)
==
0
&&
atoi
(
row
[
1
])
==
2
);
row
=
mysql_fetch_row
(
result
);
DIE_UNLESS
(
strcmp
(
row
[
0
],
"t1"
)
==
0
&&
atoi
(
row
[
1
])
==
3
);
row
=
mysql_fetch_row
(
result
);
DIE_UNLESS
(
strcmp
(
row
[
0
],
"t2"
)
==
0
&&
atoi
(
row
[
1
])
==
1
);
row
=
mysql_fetch_row
(
result
);
DIE_UNLESS
(
strcmp
(
row
[
0
],
"t2"
)
==
0
&&
atoi
(
row
[
1
])
==
2
);
row
=
mysql_fetch_row
(
result
);
DIE_UNLESS
(
strcmp
(
row
[
0
],
"t2"
)
==
0
&&
atoi
(
row
[
1
])
==
3
);
row
=
mysql_fetch_row
(
result
);
DIE_UNLESS
(
row
==
NULL
);
mysql_free_result
(
result
);
mysql_stmt_close
(
stmt
);
rc
=
mysql_query
(
mysql
,
"DROP TABLE t1, t2"
);
myquery
(
rc
);
}
#endif // EMBEDDED_LIBRARY
...
...
@@ -22442,6 +22539,9 @@ static struct my_tests_st my_tests[]= {
{
"test_connect_autocommit"
,
test_connect_autocommit
},
{
"test_execute_direct"
,
test_execute_direct
},
{
"test_cache_metadata"
,
test_cache_metadata
},
#ifndef EMBEDDED_LIBRARY
{
"test_mdev_24411"
,
test_mdev_24411
},
#endif
{
0
,
0
}
};
...
...
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