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
0543e2e3
Commit
0543e2e3
authored
Nov 16, 2010
by
Michael Widenius
Browse files
Options
Browse Files
Download
Plain Diff
Merge to get make String reallocation faster
parents
881f52fe
aa34668f
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
59 additions
and
35 deletions
+59
-35
mysql-test/suite/maria/r/compat_aliases.result
mysql-test/suite/maria/r/compat_aliases.result
+2
-2
mysql-test/suite/maria/t/compat_aliases.test
mysql-test/suite/maria/t/compat_aliases.test
+1
-0
mysys/safemalloc.c
mysys/safemalloc.c
+4
-0
sql/net_serv.cc
sql/net_serv.cc
+2
-2
sql/protocol.cc
sql/protocol.cc
+3
-0
sql/sp.cc
sql/sp.cc
+1
-1
sql/sql_select.cc
sql/sql_select.cc
+1
-0
sql/sql_show.cc
sql/sql_show.cc
+1
-1
sql/sql_string.cc
sql/sql_string.cc
+9
-9
sql/sql_string.h
sql/sql_string.h
+30
-18
sql/sql_test.cc
sql/sql_test.cc
+2
-1
sql/table.cc
sql/table.cc
+3
-1
No files found.
mysql-test/suite/maria/r/compat_aliases.result
View file @
0543e2e3
select * from information_schema.plugins where plugin_name like '%aria';
PLUGIN_NAME PLUGIN_VERSION PLUGIN_STATUS PLUGIN_TYPE PLUGIN_TYPE_VERSION PLUGIN_LIBRARY PLUGIN_LIBRARY_VERSION PLUGIN_AUTHOR PLUGIN_DESCRIPTION PLUGIN_LICENSE PLUGIN_MATURITY PLUGIN_AUTH_VERSION
Maria 1.5 ACTIVE DAEMON
50300.0
NULL NULL Monty Program Ab Compatibility aliases for the Aria engine GPL Gamma 1.5
Aria 1.5 ACTIVE STORAGE ENGINE
50300.0
NULL NULL Monty Program Ab Crash-safe tables with MyISAM heritage GPL Gamma 1.5
Maria 1.5 ACTIVE DAEMON
#
NULL NULL Monty Program Ab Compatibility aliases for the Aria engine GPL Gamma 1.5
Aria 1.5 ACTIVE STORAGE ENGINE
#
NULL NULL Monty Program Ab Crash-safe tables with MyISAM heritage GPL Gamma 1.5
select maria_vars.variable_name, aria_vars.variable_name from
information_schema.session_variables as maria_vars left join
information_schema.session_variables as aria_vars
...
...
mysql-test/suite/maria/t/compat_aliases.test
View file @
0543e2e3
...
...
@@ -3,6 +3,7 @@
# command-line options). They should match aria* variables.
#
--
replace_column
5
#
select
*
from
information_schema
.
plugins
where
plugin_name
like
'%aria'
;
select
maria_vars
.
variable_name
,
aria_vars
.
variable_name
from
...
...
mysys/safemalloc.c
View file @
0543e2e3
...
...
@@ -224,6 +224,8 @@ void *_myrealloc(register void *ptr, register size_t size,
struct
st_irem
*
irem
;
char
*
data
;
DBUG_ENTER
(
"_myrealloc"
);
DBUG_PRINT
(
"my"
,(
"ptr: 0x%lx size: %lu my_flags: %d"
,
(
long
)
ptr
,
(
ulong
)
size
,
MyFlags
));
if
(
!
ptr
&&
(
MyFlags
&
MY_ALLOW_ZERO_PTR
))
DBUG_RETURN
(
_mymalloc
(
size
,
filename
,
lineno
,
MyFlags
));
...
...
@@ -245,6 +247,8 @@ void *_myrealloc(register void *ptr, register size_t size,
(
void
)
fflush
(
stderr
);
DBUG_RETURN
((
uchar
*
)
NULL
);
}
DBUG_PRINT
(
"my"
,
(
"old_size: %lu -> new_size: %lu"
,
(
ulong
)
irem
->
datasize
,
(
ulong
)
size
));
if
((
data
=
_mymalloc
(
size
,
filename
,
lineno
,
MyFlags
)))
/* Allocate new area */
{
...
...
sql/net_serv.cc
View file @
0543e2e3
...
...
@@ -116,7 +116,7 @@ my_bool my_net_init(NET *net, Vio* vio)
net
->
vio
=
vio
;
my_net_local_init
(
net
);
/* Set some limits */
if
(
!
(
net
->
buff
=
(
uchar
*
)
my_malloc
((
size_t
)
net
->
max_packet
+
NET_HEADER_SIZE
+
COMP_HEADER_SIZE
,
NET_HEADER_SIZE
+
COMP_HEADER_SIZE
+
1
,
MYF
(
MY_WME
))))
DBUG_RETURN
(
1
);
net
->
buff_end
=
net
->
buff
+
net
->
max_packet
;
...
...
@@ -580,7 +580,7 @@ net_real_write(NET *net,const uchar *packet, size_t len)
uchar
*
b
;
uint
header_length
=
NET_HEADER_SIZE
+
COMP_HEADER_SIZE
;
if
(
!
(
b
=
(
uchar
*
)
my_malloc
(
len
+
NET_HEADER_SIZE
+
COMP_HEADER_SIZE
,
MYF
(
MY_WME
))))
COMP_HEADER_SIZE
+
1
,
MYF
(
MY_WME
))))
{
net
->
error
=
2
;
net
->
last_errno
=
ER_OUT_OF_RESOURCES
;
...
...
sql/protocol.cc
View file @
0543e2e3
...
...
@@ -632,6 +632,9 @@ bool Protocol::send_fields(List<Item> *list, uint flags)
uint
count
=
0
;
#endif
/* We have to reallocate it here as a stored procedure may have reset it */
(
void
)
local_packet
->
alloc
(
thd
->
variables
.
net_buffer_length
);
while
((
item
=
it
++
))
{
char
*
pos
;
...
...
sql/sp.cc
View file @
0543e2e3
...
...
@@ -785,7 +785,7 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp,
{
Parser_state
parser_state
;
if
(
parser_state
.
init
(
thd
,
defstr
.
c_ptr
(),
defstr
.
length
()))
if
(
parser_state
.
init
(
thd
,
defstr
.
c_ptr
_safe
(),
defstr
.
length
()))
{
ret
=
SP_INTERNAL_ERROR
;
goto
end
;
...
...
sql/sql_select.cc
View file @
0543e2e3
...
...
@@ -17497,6 +17497,7 @@ change_to_use_tmp_fields(THD *thd, Item **ref_pointer_array,
char
buff
[
256
];
String
str
(
buff
,
sizeof
(
buff
),
&
my_charset_bin
);
str
.
length
(
0
);
str
.
extra_allocation
(
1024
);
item
->
print
(
&
str
,
QT_ORDINARY
);
item_field
->
name
=
sql_strmake
(
str
.
ptr
(),
str
.
length
());
}
...
...
sql/sql_show.cc
View file @
0543e2e3
...
...
@@ -4330,7 +4330,7 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
base_type [(dimension)] [unsigned] [zerofill].
For DATA_TYPE column we extract only base type.
*/
tmp_buff
=
strchr
(
type
.
ptr
(),
'('
);
tmp_buff
=
strchr
(
type
.
c_ptr_safe
(),
'('
);
if
(
!
tmp_buff
)
/*
if there is no dimention part then check the presence of
...
...
sql/sql_string.cc
View file @
0543e2e3
...
...
@@ -411,7 +411,7 @@ bool String::append(const String &s)
{
if
(
s
.
length
())
{
if
(
realloc
(
str_length
+
s
.
length
()))
if
(
realloc
_with_extra_if_needed
(
str_length
+
s
.
length
()))
return
TRUE
;
memcpy
(
Ptr
+
str_length
,
s
.
ptr
(),
s
.
length
());
str_length
+=
s
.
length
();
...
...
@@ -436,7 +436,7 @@ bool String::append(const char *s,uint32 arg_length)
{
uint32
add_length
=
arg_length
*
str_charset
->
mbmaxlen
;
uint
dummy_errors
;
if
(
realloc
(
str_length
+
add_length
))
if
(
realloc
_with_extra_if_needed
(
str_length
+
add_length
))
return
TRUE
;
str_length
+=
copy_and_convert
(
Ptr
+
str_length
,
add_length
,
str_charset
,
s
,
arg_length
,
&
my_charset_latin1
,
...
...
@@ -447,7 +447,7 @@ bool String::append(const char *s,uint32 arg_length)
/*
For an ASCII compatinble string we can just append.
*/
if
(
realloc
(
str_length
+
arg_length
))
if
(
realloc
_with_extra_if_needed
(
str_length
+
arg_length
))
return
TRUE
;
memcpy
(
Ptr
+
str_length
,
s
,
arg_length
);
str_length
+=
arg_length
;
...
...
@@ -478,14 +478,14 @@ bool String::append(const char *s,uint32 arg_length, CHARSET_INFO *cs)
{
uint32
add_length
=
arg_length
/
cs
->
mbminlen
*
str_charset
->
mbmaxlen
;
uint
dummy_errors
;
if
(
realloc
(
str_length
+
add_length
))
if
(
realloc
_with_extra_if_needed
(
str_length
+
add_length
))
return
TRUE
;
str_length
+=
copy_and_convert
(
Ptr
+
str_length
,
add_length
,
str_charset
,
s
,
arg_length
,
cs
,
&
dummy_errors
);
}
else
{
if
(
realloc
(
str_length
+
arg_length
))
if
(
realloc
_with_extra_if_needed
(
str_length
+
arg_length
))
return
TRUE
;
memcpy
(
Ptr
+
str_length
,
s
,
arg_length
);
str_length
+=
arg_length
;
...
...
@@ -497,7 +497,7 @@ bool String::append(const char *s,uint32 arg_length, CHARSET_INFO *cs)
#ifdef TO_BE_REMOVED
bool
String
::
append
(
FILE
*
file
,
uint32
arg_length
,
myf
my_flags
)
{
if
(
realloc
(
str_length
+
arg_length
))
if
(
realloc
_with_extra_if_needed
(
str_length
+
arg_length
))
return
TRUE
;
if
(
my_fread
(
file
,
(
uchar
*
)
Ptr
+
str_length
,
arg_length
,
my_flags
))
{
...
...
@@ -511,7 +511,7 @@ bool String::append(FILE* file, uint32 arg_length, myf my_flags)
bool
String
::
append
(
IO_CACHE
*
file
,
uint32
arg_length
)
{
if
(
realloc
(
str_length
+
arg_length
))
if
(
realloc
_with_extra_if_needed
(
str_length
+
arg_length
))
return
TRUE
;
if
(
my_b_read
(
file
,
(
uchar
*
)
Ptr
+
str_length
,
arg_length
))
{
...
...
@@ -527,7 +527,7 @@ bool String::append_with_prefill(const char *s,uint32 arg_length,
{
int
t_length
=
arg_length
>
full_length
?
arg_length
:
full_length
;
if
(
realloc
(
str_length
+
t_length
))
if
(
realloc
_with_extra_if_needed
(
str_length
+
t_length
))
return
TRUE
;
t_length
=
full_length
-
arg_length
;
if
(
t_length
>
0
)
...
...
@@ -636,7 +636,7 @@ bool String::replace(uint32 offset,uint32 arg_length,
{
if
(
diff
)
{
if
(
realloc
(
str_length
+
(
uint32
)
diff
))
if
(
realloc
_with_extra_if_needed
(
str_length
+
(
uint32
)
diff
))
return
TRUE
;
bmove_upp
((
uchar
*
)
Ptr
+
str_length
+
diff
,
(
uchar
*
)
Ptr
+
str_length
,
str_length
-
offset
-
arg_length
);
...
...
sql/sql_string.h
View file @
0543e2e3
...
...
@@ -53,23 +53,24 @@ uint convert_to_printable(char *to, size_t to_len,
class
String
{
char
*
Ptr
;
uint32
str_length
,
Alloced_length
;
uint32
str_length
,
Alloced_length
,
extra_alloc
;
bool
alloced
;
CHARSET_INFO
*
str_charset
;
public:
String
()
{
Ptr
=
0
;
str_length
=
Alloced_length
=
0
;
alloced
=
0
;
Ptr
=
0
;
str_length
=
Alloced_length
=
extra_alloc
=
0
;
alloced
=
0
;
str_charset
=
&
my_charset_bin
;
}
String
(
uint32
length_arg
)
{
alloced
=
0
;
Alloced_length
=
0
;
(
void
)
real_alloc
(
length_arg
);
alloced
=
0
;
Alloced_length
=
extra_alloc
=
0
;
(
void
)
real_alloc
(
length_arg
);
str_charset
=
&
my_charset_bin
;
}
String
(
const
char
*
str
,
CHARSET_INFO
*
cs
)
{
Ptr
=
(
char
*
)
str
;
str_length
=
(
uint
)
strlen
(
str
);
Alloced_length
=
0
;
alloced
=
0
;
Ptr
=
(
char
*
)
str
;
str_length
=
(
uint32
)
strlen
(
str
);
Alloced_length
=
extra_alloc
=
0
;
alloced
=
0
;
str_charset
=
cs
;
}
/*
...
...
@@ -79,18 +80,18 @@ class String
*/
String
(
const
char
*
str
,
uint32
len
,
CHARSET_INFO
*
cs
)
{
Ptr
=
(
char
*
)
str
;
str_length
=
len
;
Alloced_length
=
0
;
alloced
=
0
;
Ptr
=
(
char
*
)
str
;
str_length
=
len
;
Alloced_length
=
extra_alloc
=
0
;
alloced
=
0
;
str_charset
=
cs
;
}
String
(
char
*
str
,
uint32
len
,
CHARSET_INFO
*
cs
)
{
Ptr
=
(
char
*
)
str
;
Alloced_length
=
str_length
=
len
;
alloced
=
0
;
Ptr
=
(
char
*
)
str
;
Alloced_length
=
str_length
=
len
;
extra_alloc
=
0
;
alloced
=
0
;
str_charset
=
cs
;
}
String
(
const
String
&
str
)
{
Ptr
=
str
.
Ptr
;
str_length
=
str
.
str_length
;
Alloced_length
=
str
.
Alloced_length
;
alloced
=
0
;
Alloced_length
=
str
.
Alloced_length
;
extra_alloc
=
0
;
alloced
=
0
;
str_charset
=
str
.
str_charset
;
}
static
void
*
operator
new
(
size_t
size
,
MEM_ROOT
*
mem_root
)
throw
()
...
...
@@ -106,8 +107,10 @@ class String
inline
CHARSET_INFO
*
charset
()
const
{
return
str_charset
;
}
inline
uint32
length
()
const
{
return
str_length
;}
inline
uint32
alloced_length
()
const
{
return
Alloced_length
;}
inline
uint32
extra_allocation
()
const
{
return
extra_alloc
;}
inline
char
&
operator
[]
(
uint32
i
)
const
{
return
Ptr
[
i
];
}
inline
void
length
(
uint32
len
)
{
str_length
=
len
;
}
inline
void
extra_allocation
(
uint32
len
)
{
extra_alloc
=
len
;
}
inline
bool
is_empty
()
const
{
return
(
str_length
==
0
);
}
inline
void
mark_as_const
()
{
Alloced_length
=
0
;}
inline
const
char
*
ptr
()
const
{
return
Ptr
;
}
...
...
@@ -136,23 +139,21 @@ class String
{
DBUG_ASSERT
(
&
str
!=
this
);
free
();
Ptr
=
(
char
*
)
str
.
ptr
()
+
offset
;
str_length
=
arg_length
;
alloced
=
0
;
Ptr
=
(
char
*
)
str
.
ptr
()
+
offset
;
str_length
=
arg_length
;
if
(
str
.
Alloced_length
)
Alloced_length
=
str
.
Alloced_length
-
offset
;
else
Alloced_length
=
0
;
str_charset
=
str
.
str_charset
;
}
inline
void
set
(
char
*
str
,
uint32
arg_length
,
CHARSET_INFO
*
cs
)
{
free
();
Ptr
=
(
char
*
)
str
;
str_length
=
Alloced_length
=
arg_length
;
alloced
=
0
;
Ptr
=
(
char
*
)
str
;
str_length
=
Alloced_length
=
arg_length
;
str_charset
=
cs
;
}
inline
void
set
(
const
char
*
str
,
uint32
arg_length
,
CHARSET_INFO
*
cs
)
{
free
();
Ptr
=
(
char
*
)
str
;
str_length
=
arg_length
;
Alloced_length
=
0
;
alloced
=
0
;
Ptr
=
(
char
*
)
str
;
str_length
=
arg_length
;
str_charset
=
cs
;
}
bool
set_ascii
(
const
char
*
str
,
uint32
arg_length
);
...
...
@@ -203,12 +204,12 @@ class String
if
(
alloced
)
{
alloced
=
0
;
Alloced_length
=
0
;
my_free
(
Ptr
,
MYF
(
0
));
}
Alloced_length
=
extra_alloc
=
0
;
Ptr
=
0
;
str_length
=
0
;
/* Safety */
}
}
inline
bool
alloc
(
uint32
arg_length
)
{
if
(
arg_length
<
Alloced_length
)
...
...
@@ -217,9 +218,21 @@ class String
}
bool
real_alloc
(
uint32
arg_length
);
// Empties old string
bool
realloc
(
uint32
arg_length
);
inline
void
shrink
(
uint32
arg_length
)
// Shrink buffer
bool
realloc_with_extra
(
uint32
arg_length
)
{
if
(
extra_alloc
<
4096
)
extra_alloc
=
extra_alloc
*
2
+
128
;
return
realloc
(
arg_length
+
extra_alloc
);
}
bool
realloc_with_extra_if_needed
(
uint32
arg_length
)
{
if
(
arg_length
<
Alloced_length
)
return
0
;
return
realloc_with_extra
(
arg_length
);
}
inline
void
shrink
(
uint32
arg_length
)
// Shrink buffer
{
if
(
ALIGN_SIZE
(
arg_length
+
1
)
<
Alloced_length
)
{
char
*
new_ptr
;
if
(
!
(
new_ptr
=
(
char
*
)
my_realloc
(
Ptr
,
arg_length
,
MYF
(
0
))))
...
...
@@ -246,7 +259,6 @@ class String
DBUG_ASSERT
(
!
s
.
uses_buffer_owned_by
(
this
));
free
();
Ptr
=
s
.
Ptr
;
str_length
=
s
.
str_length
;
Alloced_length
=
s
.
Alloced_length
;
alloced
=
0
;
}
return
*
this
;
}
...
...
@@ -281,7 +293,7 @@ class String
}
else
{
if
(
realloc
(
str_length
+
1
))
if
(
realloc
_with_extra
(
str_length
+
1
))
return
1
;
Ptr
[
str_length
++
]
=
chr
;
}
...
...
sql/sql_test.cc
View file @
0543e2e3
...
...
@@ -57,9 +57,10 @@ print_where(COND *cond,const char *info, enum_query_type query_type)
{
if
(
cond
)
{
char
buff
[
256
];
char
buff
[
1024
];
String
str
(
buff
,(
uint32
)
sizeof
(
buff
),
system_charset_info
);
str
.
length
(
0
);
str
.
extra_allocation
(
1024
);
cond
->
print
(
&
str
,
query_type
);
str
.
append
(
'\0'
);
DBUG_LOCK_FILE
;
...
...
sql/table.cc
View file @
0543e2e3
...
...
@@ -3320,11 +3320,13 @@ Table_check_intact::check(TABLE *table, const TABLE_FIELD_DEF *table_def)
is backward compatible.
*/
}
char
buffer
[
STRING_BUFFER_USUAL_SIZE
];
char
buffer
[
1024
];
for
(
i
=
0
;
i
<
table_def
->
count
;
i
++
,
field_def
++
)
{
String
sql_type
(
buffer
,
sizeof
(
buffer
),
system_charset_info
);
sql_type
.
length
(
0
);
/* Allocate min 256 characters at once */
sql_type
.
extra_allocation
(
256
);
if
(
i
<
table
->
s
->
fields
)
{
Field
*
field
=
table
->
field
[
i
];
...
...
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