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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
d9f7c443
Commit
d9f7c443
authored
Jul 28, 2007
by
gshchepa/uchum@gleb.loc
Browse files
Options
Browse Files
Download
Plain Diff
Merge gleb.loc:/home/uchum/work/bk/5.0
into gleb.loc:/home/uchum/work/bk/5.0-opt
parents
81905ee1
e4f4a46f
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
145 additions
and
23 deletions
+145
-23
mysql-test/r/bdb.result
mysql-test/r/bdb.result
+1
-1
mysql-test/r/rpl_insert_delayed.result
mysql-test/r/rpl_insert_delayed.result
+23
-0
mysql-test/r/rpl_session_var.result
mysql-test/r/rpl_session_var.result
+10
-0
mysql-test/t/rpl_insert_delayed.test
mysql-test/t/rpl_insert_delayed.test
+30
-0
mysql-test/t/rpl_session_var.test
mysql-test/t/rpl_session_var.test
+22
-0
sql/ha_berkeley.cc
sql/ha_berkeley.cc
+5
-1
sql/item.cc
sql/item.cc
+38
-14
sql/item.h
sql/item.h
+5
-1
sql/item_strfunc.h
sql/item_strfunc.h
+4
-0
sql/sql_insert.cc
sql/sql_insert.cc
+6
-3
sql/sql_select.cc
sql/sql_select.cc
+0
-1
sql/table.cc
sql/table.cc
+1
-2
No files found.
mysql-test/r/bdb.result
View file @
d9f7c443
...
@@ -136,8 +136,8 @@ update ignore t1 set id=1023 where id=1010;
...
@@ -136,8 +136,8 @@ update ignore t1 set id=1023 where id=1010;
select * from t1 where parent_id=102 order by parent_id,id;
select * from t1 where parent_id=102 order by parent_id,id;
id parent_id level
id parent_id level
1008 102 2
1008 102 2
1010 102 2
1015 102 2
1015 102 2
1010 102 2
explain select level from t1 where level=1;
explain select level from t1 where level=1;
id select_type table type possible_keys key key_len ref rows Extra
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ref level level 1 const X Using index
1 SIMPLE t1 ref level level 1 const X Using index
...
...
mysql-test/r/rpl_insert_delayed.result
View file @
d9f7c443
...
@@ -29,3 +29,26 @@ id name
...
@@ -29,3 +29,26 @@ id name
10 my name
10 my name
20 is Bond
20 is Bond
drop table t1;
drop table t1;
CREATE TABLE t1(a int, UNIQUE(a));
INSERT DELAYED IGNORE INTO t1 VALUES(1);
INSERT DELAYED IGNORE INTO t1 VALUES(1);
flush table t1;
show binlog events limit 11,100;
Log_name Pos Event_type Server_id End_log_pos Info
x x x x x use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1)
x x x x x use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1)
x x x x x use `test`; flush table t1
select * from t1;
a
1
On slave
show binlog events limit 12,100;
Log_name Pos Event_type Server_id End_log_pos Info
x x x x x use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1)
x x x x x use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1)
x x x x x use `test`; flush table t1
select * from t1;
a
1
drop table t1;
End of 5.0 tests
mysql-test/r/rpl_session_var.result
View file @
d9f7c443
...
@@ -41,3 +41,13 @@ select * from t2 order by b;
...
@@ -41,3 +41,13 @@ select * from t2 order by b;
b a
b a
1 1
1 1
drop table t1,t2;
drop table t1,t2;
CREATE TABLE t1 (
`id` int(11) NOT NULL auto_increment,
`data` varchar(100),
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
INSERT INTO t1(data) VALUES(SESSION_USER());
SELECT * FROM t1;
id data
1
drop table t1;
mysql-test/t/rpl_insert_delayed.test
View file @
d9f7c443
...
@@ -65,3 +65,33 @@ connection master;
...
@@ -65,3 +65,33 @@ connection master;
drop
table
t1
;
drop
table
t1
;
sync_slave_with_master
;
sync_slave_with_master
;
connection
master
;
connection
master
;
#
# Bug #29571: INSERT DELAYED IGNORE written to binary log on the master but
# on the slave
#
CREATE
TABLE
t1
(
a
int
,
UNIQUE
(
a
));
INSERT
DELAYED
IGNORE
INTO
t1
VALUES
(
1
);
INSERT
DELAYED
IGNORE
INTO
t1
VALUES
(
1
);
flush
table
t1
;
# to wait for INSERT DELAYED to be done
#must show two INSERT DELAYED
--
replace_column
1
x
2
x
3
x
4
x
5
x
show
binlog
events
limit
11
,
100
;
select
*
from
t1
;
sync_slave_with_master
;
echo
On
slave
;
#must show two INSERT DELAYED
--
replace_column
1
x
2
x
3
x
4
x
5
x
show
binlog
events
limit
12
,
100
;
select
*
from
t1
;
# clean up
connection
master
;
drop
table
t1
;
sync_slave_with_master
;
connection
master
;
--
echo
End
of
5.0
tests
mysql-test/t/rpl_session_var.test
View file @
d9f7c443
...
@@ -40,3 +40,25 @@ drop table t1,t2;
...
@@ -40,3 +40,25 @@ drop table t1,t2;
save_master_pos
;
save_master_pos
;
connection
slave
;
connection
slave
;
sync_with_master
;
sync_with_master
;
#
# Bug #29878 Garbage data generation when executing SESSION_USER() on a slave.
#
connection
master
;
CREATE
TABLE
t1
(
`id`
int
(
11
)
NOT
NULL
auto_increment
,
`data`
varchar
(
100
),
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
MyISAM
;
INSERT
INTO
t1
(
data
)
VALUES
(
SESSION_USER
());
save_master_pos
;
connection
slave
;
sync_with_master
;
SELECT
*
FROM
t1
;
connection
master
;
drop
table
t1
;
save_master_pos
;
connection
slave
;
sync_with_master
;
sql/ha_berkeley.cc
View file @
d9f7c443
...
@@ -2646,7 +2646,11 @@ ha_rows ha_berkeley::estimate_rows_upper_bound()
...
@@ -2646,7 +2646,11 @@ ha_rows ha_berkeley::estimate_rows_upper_bound()
int
ha_berkeley
::
cmp_ref
(
const
byte
*
ref1
,
const
byte
*
ref2
)
int
ha_berkeley
::
cmp_ref
(
const
byte
*
ref1
,
const
byte
*
ref2
)
{
{
if
(
hidden_primary_key
)
if
(
hidden_primary_key
)
return
memcmp
(
ref1
,
ref2
,
BDB_HIDDEN_PRIMARY_KEY_LENGTH
);
{
ulonglong
a
=
uint5korr
((
char
*
)
ref1
);
ulonglong
b
=
uint5korr
((
char
*
)
ref2
);
return
a
<
b
?
-
1
:
(
a
>
b
?
1
:
0
);
}
int
result
;
int
result
;
Field
*
field
;
Field
*
field
;
...
...
sql/item.cc
View file @
d9f7c443
...
@@ -336,6 +336,37 @@ int Item::save_date_in_field(Field *field)
...
@@ -336,6 +336,37 @@ int Item::save_date_in_field(Field *field)
}
}
/*
Store the string value in field directly
SYNOPSIS
Item::save_str_value_in_field()
field a pointer to field where to store
result the pointer to the string value to be stored
DESCRIPTION
The method is used by Item_*::save_in_field implementations
when we don't need to calculate the value to store
See Item_string::save_in_field() implementation for example
IMPLEMENTATION
Check if the Item is null and stores the NULL or the
result value in the field accordingly.
RETURN
Nonzero value if error
*/
int
Item
::
save_str_value_in_field
(
Field
*
field
,
String
*
result
)
{
if
(
null_value
)
return
set_field_to_null
(
field
);
field
->
set_notnull
();
return
field
->
store
(
result
->
ptr
(),
result
->
length
(),
collation
.
collation
);
}
Item
::
Item
()
:
Item
::
Item
()
:
rsize
(
0
),
name
(
0
),
orig_name
(
0
),
name_length
(
0
),
fixed
(
0
),
rsize
(
0
),
name
(
0
),
orig_name
(
0
),
name_length
(
0
),
fixed
(
0
),
is_autogenerated_name
(
TRUE
),
is_autogenerated_name
(
TRUE
),
...
@@ -3009,16 +3040,6 @@ my_decimal *Item_copy_string::val_decimal(my_decimal *decimal_value)
...
@@ -3009,16 +3040,6 @@ my_decimal *Item_copy_string::val_decimal(my_decimal *decimal_value)
}
}
int
Item_copy_string
::
save_in_field
(
Field
*
field
,
bool
no_conversions
)
{
if
(
null_value
)
return
set_field_to_null
(
field
);
field
->
set_notnull
();
return
field
->
store
(
str_value
.
ptr
(),
str_value
.
length
(),
collation
.
collation
);
}
/*
/*
Functions to convert item to field (for send_fields)
Functions to convert item to field (for send_fields)
*/
*/
...
@@ -4417,6 +4438,12 @@ int Item_null::save_safe_in_field(Field *field)
...
@@ -4417,6 +4438,12 @@ int Item_null::save_safe_in_field(Field *field)
}
}
/*
This implementation can lose str_value content, so if the
Item uses str_value to store something, it should
reimplement it's ::save_in_field() as Item_string, for example, does
*/
int
Item
::
save_in_field
(
Field
*
field
,
bool
no_conversions
)
int
Item
::
save_in_field
(
Field
*
field
,
bool
no_conversions
)
{
{
int
error
;
int
error
;
...
@@ -4474,10 +4501,7 @@ int Item_string::save_in_field(Field *field, bool no_conversions)
...
@@ -4474,10 +4501,7 @@ int Item_string::save_in_field(Field *field, bool no_conversions)
{
{
String
*
result
;
String
*
result
;
result
=
val_str
(
&
str_value
);
result
=
val_str
(
&
str_value
);
if
(
null_value
)
return
save_str_value_in_field
(
field
,
result
);
return
set_field_to_null
(
field
);
field
->
set_notnull
();
return
field
->
store
(
result
->
ptr
(),
result
->
length
(),
collation
.
collation
);
}
}
...
...
sql/item.h
View file @
d9f7c443
...
@@ -612,6 +612,7 @@ public:
...
@@ -612,6 +612,7 @@ public:
int
save_time_in_field
(
Field
*
field
);
int
save_time_in_field
(
Field
*
field
);
int
save_date_in_field
(
Field
*
field
);
int
save_date_in_field
(
Field
*
field
);
int
save_str_value_in_field
(
Field
*
field
,
String
*
result
);
virtual
Field
*
get_tmp_table_field
()
{
return
0
;
}
virtual
Field
*
get_tmp_table_field
()
{
return
0
;
}
/* This is also used to create fields in CREATE ... SELECT: */
/* This is also used to create fields in CREATE ... SELECT: */
...
@@ -2166,7 +2167,10 @@ public:
...
@@ -2166,7 +2167,10 @@ public:
my_decimal
*
val_decimal
(
my_decimal
*
);
my_decimal
*
val_decimal
(
my_decimal
*
);
void
make_field
(
Send_field
*
field
)
{
item
->
make_field
(
field
);
}
void
make_field
(
Send_field
*
field
)
{
item
->
make_field
(
field
);
}
void
copy
();
void
copy
();
int
save_in_field
(
Field
*
field
,
bool
no_conversions
);
int
save_in_field
(
Field
*
field
,
bool
no_conversions
)
{
return
save_str_value_in_field
(
field
,
&
str_value
);
}
table_map
used_tables
()
const
{
return
(
table_map
)
1L
;
}
table_map
used_tables
()
const
{
return
(
table_map
)
1L
;
}
bool
const_item
()
const
{
return
0
;
}
bool
const_item
()
const
{
return
0
;
}
bool
is_null
()
{
return
null_value
;
}
bool
is_null
()
{
return
null_value
;
}
...
...
sql/item_strfunc.h
View file @
d9f7c443
...
@@ -434,6 +434,10 @@ public:
...
@@ -434,6 +434,10 @@ public:
}
}
const
char
*
func_name
()
const
{
return
"user"
;
}
const
char
*
func_name
()
const
{
return
"user"
;
}
const
char
*
fully_qualified_func_name
()
const
{
return
"user()"
;
}
const
char
*
fully_qualified_func_name
()
const
{
return
"user()"
;
}
int
save_in_field
(
Field
*
field
,
bool
no_conversions
)
{
return
save_str_value_in_field
(
field
,
&
str_value
);
}
};
};
...
...
sql/sql_insert.cc
View file @
d9f7c443
...
@@ -560,6 +560,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -560,6 +560,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
int
error
,
res
;
int
error
,
res
;
bool
transactional_table
,
joins_freed
=
FALSE
;
bool
transactional_table
,
joins_freed
=
FALSE
;
bool
changed
;
bool
changed
;
bool
was_insert_delayed
=
(
table_list
->
lock_type
==
TL_WRITE_DELAYED
);
uint
value_count
;
uint
value_count
;
ulong
counter
=
1
;
ulong
counter
=
1
;
ulonglong
id
;
ulonglong
id
;
...
@@ -859,13 +860,15 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -859,13 +860,15 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
transactional_table
=
table
->
file
->
has_transactions
();
transactional_table
=
table
->
file
->
has_transactions
();
if
((
changed
=
(
info
.
copied
||
info
.
deleted
||
info
.
updated
)))
if
((
changed
=
(
info
.
copied
||
info
.
deleted
||
info
.
updated
))
||
was_insert_delayed
)
{
{
/*
/*
Invalidate the table in the query cache if something changed.
Invalidate the table in the query cache if something changed.
For the transactional algorithm to work the invalidation must be
For the transactional algorithm to work the invalidation must be
before binlog writing and ha_autocommit_or_rollback
before binlog writing and ha_autocommit_or_rollback
*/
*/
if
(
changed
)
query_cache_invalidate3
(
thd
,
table_list
,
1
);
query_cache_invalidate3
(
thd
,
table_list
,
1
);
if
(
error
<=
0
||
!
transactional_table
)
if
(
error
<=
0
||
!
transactional_table
)
{
{
...
@@ -904,7 +907,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -904,7 +907,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
if
(
mysql_bin_log
.
write
(
&
qinfo
)
&&
transactional_table
)
if
(
mysql_bin_log
.
write
(
&
qinfo
)
&&
transactional_table
)
error
=
1
;
error
=
1
;
}
}
if
(
!
transactional_table
)
if
(
!
transactional_table
&&
changed
)
thd
->
no_trans_update
.
all
=
TRUE
;
thd
->
no_trans_update
.
all
=
TRUE
;
}
}
}
}
...
...
sql/sql_select.cc
View file @
d9f7c443
...
@@ -12033,7 +12033,6 @@ static int test_if_order_by_key(ORDER *order, TABLE *table, uint idx,
...
@@ -12033,7 +12033,6 @@ static int test_if_order_by_key(ORDER *order, TABLE *table, uint idx,
*/
*/
if
(
!
on_primary_key
&&
if
(
!
on_primary_key
&&
(
table
->
file
->
table_flags
()
&
HA_PRIMARY_KEY_IN_READ_INDEX
)
&&
(
table
->
file
->
table_flags
()
&
HA_PRIMARY_KEY_IN_READ_INDEX
)
&&
table
->
s
->
db_type
==
DB_TYPE_INNODB
&&
table
->
s
->
primary_key
!=
MAX_KEY
)
table
->
s
->
primary_key
!=
MAX_KEY
)
{
{
on_primary_key
=
TRUE
;
on_primary_key
=
TRUE
;
...
...
sql/table.cc
View file @
d9f7c443
...
@@ -782,8 +782,7 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
...
@@ -782,8 +782,7 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
if
(
ha_option
&
HA_PRIMARY_KEY_IN_READ_INDEX
)
if
(
ha_option
&
HA_PRIMARY_KEY_IN_READ_INDEX
)
{
{
field
->
part_of_key
=
share
->
keys_in_use
;
field
->
part_of_key
=
share
->
keys_in_use
;
if
(
share
->
db_type
==
DB_TYPE_INNODB
&&
if
(
field
->
part_of_sortkey
.
is_set
(
key
))
field
->
part_of_sortkey
.
is_set
(
key
))
field
->
part_of_sortkey
=
share
->
keys_in_use
;
field
->
part_of_sortkey
=
share
->
keys_in_use
;
}
}
}
}
...
...
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