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
1e76b778
Commit
1e76b778
authored
Jan 11, 2005
by
paul@kite-hub.kitebird.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge paul@bk-internal.mysql.com:/home/bk/mysql-5.0
into kite-hub.kitebird.com:/src/extern/MySQL/bk/mysql-5.0
parents
dc5c99e2
28ee79a7
Changes
20
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
226 additions
and
254 deletions
+226
-254
VC++Files/libmysqld/libmysqld.dsp
VC++Files/libmysqld/libmysqld.dsp
+1
-1
client/mysql.cc
client/mysql.cc
+11
-1
include/my_sys.h
include/my_sys.h
+2
-0
libmysqld/lib_sql.cc
libmysqld/lib_sql.cc
+3
-2
libmysqld/libmysqld.c
libmysqld/libmysqld.c
+3
-0
mysql-test/ndb/ndb_config_2_node.ini
mysql-test/ndb/ndb_config_2_node.ini
+3
-3
mysql-test/r/ctype_utf8.result
mysql-test/r/ctype_utf8.result
+12
-0
mysql-test/r/ps_7ndb.result
mysql-test/r/ps_7ndb.result
+9
-9
mysql-test/r/strict.result
mysql-test/r/strict.result
+2
-0
mysql-test/t/ctype_utf8.test
mysql-test/t/ctype_utf8.test
+9
-0
mysql-test/t/strict.test
mysql-test/t/strict.test
+0
-1
mysys/default.c
mysys/default.c
+38
-14
ndb/src/kernel/blocks/backup/Backup.cpp
ndb/src/kernel/blocks/backup/Backup.cpp
+5
-1
ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
+27
-30
ndb/src/kernel/blocks/suma/Suma.cpp
ndb/src/kernel/blocks/suma/Suma.cpp
+4
-3
ndb/src/mgmsrv/InitConfigFileParser.cpp
ndb/src/mgmsrv/InitConfigFileParser.cpp
+10
-2
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.cc
+70
-175
sql/item_strfunc.cc
sql/item_strfunc.cc
+10
-5
sql/sql_insert.cc
sql/sql_insert.cc
+5
-5
sql/strfunc.cc
sql/strfunc.cc
+2
-2
No files found.
VC++Files/libmysqld/libmysqld.dsp
View file @
1e76b778
...
@@ -73,7 +73,7 @@ LINK32=xilink6.exe
...
@@ -73,7 +73,7 @@ LINK32=xilink6.exe
# PROP Ignore_Export_Lib 0
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMYSQLD_EXPORTS" /YX /FD /GZ /c
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMYSQLD_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MT /W3 /Z7 /Od /I "../include" /I "../libmysqld" /I "../sql" /I "../regex" /I "../bdb/build_win32" /I "../zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "USE_TLS" /D "__WIN__" /FD /GZ /c
# ADD CPP /nologo /MT /W3 /Z7 /Od /I "../include" /I "../libmysqld" /I "../sql" /I "../regex" /I "../bdb/build_win32" /I "../zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "
SAFEMALLOC" /D "
HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "USE_TLS" /D "__WIN__" /FD /GZ /c
# SUBTRACT CPP /X /Fr
# SUBTRACT CPP /X /Fr
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
...
...
client/mysql.cc
View file @
1e76b778
...
@@ -330,6 +330,16 @@ static sig_handler mysql_end(int sig);
...
@@ -330,6 +330,16 @@ static sig_handler mysql_end(int sig);
int
main
(
int
argc
,
char
*
argv
[])
int
main
(
int
argc
,
char
*
argv
[])
{
{
char
buff
[
80
];
char
buff
[
80
];
char
*
defaults
,
*
extra_defaults
;
char
*
emb_argv
[
3
];
int
emb_argc
=
1
;
emb_argv
[
0
]
=
argv
[
0
];
get_defaults_files
(
argc
,
argv
,
&
defaults
,
&
extra_defaults
);
if
(
defaults
)
emb_argv
[
emb_argc
++
]
=
defaults
;
if
(
extra_defaults
)
emb_argv
[
emb_argc
++
]
=
extra_defaults
;
MY_INIT
(
argv
[
0
]);
MY_INIT
(
argv
[
0
]);
DBUG_ENTER
(
"main"
);
DBUG_ENTER
(
"main"
);
...
@@ -375,7 +385,7 @@ int main(int argc,char *argv[])
...
@@ -375,7 +385,7 @@ int main(int argc,char *argv[])
my_end
(
0
);
my_end
(
0
);
exit
(
1
);
exit
(
1
);
}
}
if
(
mysql_server_init
(
0
,
NULL
,
(
char
**
)
server_default_groups
))
if
(
mysql_server_init
(
emb_argc
,
emb_argv
,
(
char
**
)
server_default_groups
))
{
{
free_defaults
(
defaults_argv
);
free_defaults
(
defaults_argv
);
my_end
(
0
);
my_end
(
0
);
...
...
include/my_sys.h
View file @
1e76b778
...
@@ -769,6 +769,8 @@ extern void reset_root_defaults(MEM_ROOT *mem_root, uint block_size,
...
@@ -769,6 +769,8 @@ extern void reset_root_defaults(MEM_ROOT *mem_root, uint block_size,
extern
char
*
strdup_root
(
MEM_ROOT
*
root
,
const
char
*
str
);
extern
char
*
strdup_root
(
MEM_ROOT
*
root
,
const
char
*
str
);
extern
char
*
strmake_root
(
MEM_ROOT
*
root
,
const
char
*
str
,
uint
len
);
extern
char
*
strmake_root
(
MEM_ROOT
*
root
,
const
char
*
str
,
uint
len
);
extern
char
*
memdup_root
(
MEM_ROOT
*
root
,
const
char
*
str
,
uint
len
);
extern
char
*
memdup_root
(
MEM_ROOT
*
root
,
const
char
*
str
,
uint
len
);
extern
void
get_defaults_files
(
int
argc
,
char
**
argv
,
char
**
defaults
,
char
**
extra_defaults
);
extern
int
load_defaults
(
const
char
*
conf_file
,
const
char
**
groups
,
extern
int
load_defaults
(
const
char
*
conf_file
,
const
char
**
groups
,
int
*
argc
,
char
***
argv
);
int
*
argc
,
char
***
argv
);
extern
int
process_default_option_files
(
const
char
*
conf_file
,
extern
int
process_default_option_files
(
const
char
*
conf_file
,
...
...
libmysqld/lib_sql.cc
View file @
1e76b778
...
@@ -219,12 +219,13 @@ static my_bool emb_mysql_read_query_result(MYSQL *mysql)
...
@@ -219,12 +219,13 @@ static my_bool emb_mysql_read_query_result(MYSQL *mysql)
static
int
emb_stmt_execute
(
MYSQL_STMT
*
stmt
)
static
int
emb_stmt_execute
(
MYSQL_STMT
*
stmt
)
{
{
DBUG_ENTER
(
"emb_stmt_execute"
);
DBUG_ENTER
(
"emb_stmt_execute"
);
char
header
[
4
];
int4store
(
header
,
stmt
->
stmt_id
);
THD
*
thd
=
(
THD
*
)
stmt
->
mysql
->
thd
;
THD
*
thd
=
(
THD
*
)
stmt
->
mysql
->
thd
;
thd
->
client_param_count
=
stmt
->
param_count
;
thd
->
client_param_count
=
stmt
->
param_count
;
thd
->
client_params
=
stmt
->
params
;
thd
->
client_params
=
stmt
->
params
;
if
(
emb_advanced_command
(
stmt
->
mysql
,
COM_EXECUTE
,
0
,
0
,
if
(
emb_advanced_command
(
stmt
->
mysql
,
COM_EXECUTE
,
0
,
0
,
(
const
char
*
)
&
stmt
->
stmt_id
,
sizeof
(
stmt
->
stmt_id
),
header
,
sizeof
(
header
),
1
)
||
1
)
||
emb_mysql_read_query_result
(
stmt
->
mysql
))
emb_mysql_read_query_result
(
stmt
->
mysql
))
{
{
NET
*
net
=
&
stmt
->
mysql
->
net
;
NET
*
net
=
&
stmt
->
mysql
->
net
;
...
...
libmysqld/libmysqld.c
View file @
1e76b778
...
@@ -143,6 +143,9 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
...
@@ -143,6 +143,9 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
db
?
db
:
"(Null)"
,
db
?
db
:
"(Null)"
,
user
?
user
:
"(Null)"
));
user
?
user
:
"(Null)"
));
if
(
!
host
||
!
host
[
0
])
host
=
mysql
->
options
.
host
;
if
(
mysql
->
options
.
methods_to_use
==
MYSQL_OPT_USE_REMOTE_CONNECTION
||
if
(
mysql
->
options
.
methods_to_use
==
MYSQL_OPT_USE_REMOTE_CONNECTION
||
(
mysql
->
options
.
methods_to_use
==
MYSQL_OPT_GUESS_CONNECTION
&&
(
mysql
->
options
.
methods_to_use
==
MYSQL_OPT_GUESS_CONNECTION
&&
host
&&
*
host
&&
strcmp
(
host
,
LOCAL_HOST
)))
host
&&
*
host
&&
strcmp
(
host
,
LOCAL_HOST
)))
...
...
mysql-test/ndb/ndb_config_2_node.ini
View file @
1e76b778
...
@@ -9,13 +9,13 @@ DataDir= CHOOSE_FILESYSTEM
...
@@ -9,13 +9,13 @@ DataDir= CHOOSE_FILESYSTEM
MaxNoOfOrderedIndexes
=
CHOOSE_MaxNoOfOrderedIndexes
MaxNoOfOrderedIndexes
=
CHOOSE_MaxNoOfOrderedIndexes
[ndbd]
[ndbd]
HostName
=
CHOOSE_HOSTNAME_1
HostName
=
CHOOSE_HOSTNAME_1
# hostname is a valid network adress
[ndbd]
[ndbd]
HostName
=
CHOOSE_HOSTNAME_2
HostName
=
CHOOSE_HOSTNAME_2
# hostname is a valid network adress
[ndb_mgmd]
[ndb_mgmd]
DataDir
=
CHOOSE_FILESYSTEM
DataDir
=
CHOOSE_FILESYSTEM
#
PortNumber
=
CHOOSE_PORT_MGM
PortNumber
=
CHOOSE_PORT_MGM
[mysqld]
[mysqld]
...
...
mysql-test/r/ctype_utf8.result
View file @
1e76b778
...
@@ -817,3 +817,15 @@ drop table t1;
...
@@ -817,3 +817,15 @@ drop table t1;
select 'c' like '\_' as want0;
select 'c' like '\_' as want0;
want0
want0
0
0
create table t1 (id integer, a varchar(100) character set utf8 collate utf8_unicode_ci);
insert into t1 values (1, 'Test');
select * from t1 where soundex(a) = soundex('Test');
id a
1 Test
select * from t1 where soundex(a) = soundex('TEST');
id a
1 Test
select * from t1 where soundex(a) = soundex('test');
id a
1 Test
drop table t1;
mysql-test/r/ps_7ndb.result
View file @
1e76b778
...
@@ -70,7 +70,7 @@ def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
...
@@ -70,7 +70,7 @@ def test t9 t9 c18 c18 1 4 1 Y 32768 0 63
def test t9 t9 c19 c19 1 1 1 Y 32768 0 63
def test t9 t9 c19 c19 1 1 1 Y 32768 0 63
def test t9 t9 c20 c20 254 1 1 Y 0 0 8
def test t9 t9 c20 c20 254 1 1 Y 0 0 8
def test t9 t9 c21 c21 254 10 10 Y 0 0 8
def test t9 t9 c21 c21 254 10 10 Y 0 0 8
def test t9 t9 c22 c22 25
4
30 30 Y 0 0 8
def test t9 t9 c22 c22 25
3
30 30 Y 0 0 8
def test t9 t9 c23 c23 252 255 8 Y 144 0 63
def test t9 t9 c23 c23 252 255 8 Y 144 0 63
def test t9 t9 c24 c24 252 255 8 Y 16 0 8
def test t9 t9 c24 c24 252 255 8 Y 16 0 8
def test t9 t9 c25 c25 252 65535 4 Y 144 0 63
def test t9 t9 c25 c25 252 65535 4 Y 144 0 63
...
@@ -1926,7 +1926,7 @@ def @arg28 253 8192 10 Y 0 31 8
...
@@ -1926,7 +1926,7 @@ def @arg28 253 8192 10 Y 0 31 8
def @arg29 253 8192 8 Y 128 31 63
def @arg29 253 8192 8 Y 128 31 63
def @arg30 253 8192 8 Y 0 31 8
def @arg30 253 8192 8 Y 0 31 8
def @arg31 253 8192 3 Y 0 31 8
def @arg31 253 8192 3 Y 0 31 8
def @arg32 253 8192 6 Y
128 31 63
def @arg32 253 8192 6 Y
0 31 8
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
1 1 1 1 1 1 1 1 1 1 1 1 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
1 1 1 1 1 1 1 1 1 1 1 1 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
select @arg01:= c1, @arg02:= c2, @arg03:= c3, @arg04:= c4,
select @arg01:= c1, @arg02:= c2, @arg03:= c3, @arg04:= c4,
...
@@ -2023,7 +2023,7 @@ def @arg28 253 8192 10 Y 0 31 8
...
@@ -2023,7 +2023,7 @@ def @arg28 253 8192 10 Y 0 31 8
def @arg29 253 8192 8 Y 128 31 63
def @arg29 253 8192 8 Y 128 31 63
def @arg30 253 8192 8 Y 0 31 8
def @arg30 253 8192 8 Y 0 31 8
def @arg31 253 8192 3 Y 0 31 8
def @arg31 253 8192 3 Y 0 31 8
def @arg32 253 8192 6 Y
128 31 63
def @arg32 253 8192 6 Y
0 31 8
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
1 1 1 1 1 1 1 1 1 1 1 1 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
1 1 1 1 1 1 1 1 1 1 1 1 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
set @my_key= 0 ;
set @my_key= 0 ;
...
@@ -2111,7 +2111,7 @@ def @arg28 253 8192 10 Y 0 31 8
...
@@ -2111,7 +2111,7 @@ def @arg28 253 8192 10 Y 0 31 8
def @arg29 253 8192 8 Y 128 31 63
def @arg29 253 8192 8 Y 128 31 63
def @arg30 253 8192 8 Y 0 31 8
def @arg30 253 8192 8 Y 0 31 8
def @arg31 253 8192 3 Y 0 31 8
def @arg31 253 8192 3 Y 0 31 8
def @arg32 253 8192 6 Y
128 31 63
def @arg32 253 8192 6 Y
0 31 8
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
1 1 1 1 1 1 1 1 1 1 1 1 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
1 1 1 1 1 1 1 1 1 1 1 1 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
...
@@ -2201,7 +2201,7 @@ def @arg28 253 8192 10 Y 0 31 8
...
@@ -2201,7 +2201,7 @@ def @arg28 253 8192 10 Y 0 31 8
def @arg29 253 8192 8 Y 128 31 63
def @arg29 253 8192 8 Y 128 31 63
def @arg30 253 8192 8 Y 0 31 8
def @arg30 253 8192 8 Y 0 31 8
def @arg31 253 8192 3 Y 0 31 8
def @arg31 253 8192 3 Y 0 31 8
def @arg32 253 8192 6 Y
128 31 63
def @arg32 253 8192 6 Y
0 31 8
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
1 1 1 1 1 1 1 1 1 1 1 1 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
1 1 1 1 1 1 1 1 1 1 1 1 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
set @my_key= 0 ;
set @my_key= 0 ;
...
...
mysql-test/r/strict.result
View file @
1e76b778
...
@@ -818,6 +818,8 @@ ERROR 01000: Data truncated for column 'col1' at row 1
...
@@ -818,6 +818,8 @@ ERROR 01000: Data truncated for column 'col1' at row 1
INSERT INTO t1 (col2) VALUES ('hellobob');
INSERT INTO t1 (col2) VALUES ('hellobob');
ERROR 01000: Data truncated for column 'col2' at row 1
ERROR 01000: Data truncated for column 'col2' at row 1
INSERT INTO t1 (col2) VALUES ('hello ');
INSERT INTO t1 (col2) VALUES ('hello ');
Warnings:
Note 1265 Data truncated for column 'col2' at row 1
UPDATE t1 SET col1 ='hellobob' WHERE col1 ='he';
UPDATE t1 SET col1 ='hellobob' WHERE col1 ='he';
ERROR 01000: Data truncated for column 'col1' at row 2
ERROR 01000: Data truncated for column 'col1' at row 2
UPDATE t1 SET col2 ='hellobob' WHERE col2 ='he';
UPDATE t1 SET col2 ='hellobob' WHERE col2 ='he';
...
...
mysql-test/t/ctype_utf8.test
View file @
1e76b778
...
@@ -666,3 +666,12 @@ drop table t1;
...
@@ -666,3 +666,12 @@ drop table t1;
#
#
select
'c'
like
'\_'
as
want0
;
select
'c'
like
'\_'
as
want0
;
#
# Bug #7730 Server crash using soundex on an utf8 table
#
create
table
t1
(
id
integer
,
a
varchar
(
100
)
character
set
utf8
collate
utf8_unicode_ci
);
insert
into
t1
values
(
1
,
'Test'
);
select
*
from
t1
where
soundex
(
a
)
=
soundex
(
'Test'
);
select
*
from
t1
where
soundex
(
a
)
=
soundex
(
'TEST'
);
select
*
from
t1
where
soundex
(
a
)
=
soundex
(
'test'
);
drop
table
t1
;
mysql-test/t/strict.test
View file @
1e76b778
...
@@ -569,7 +569,6 @@ INSERT INTO t1 VALUES ('hello', 'hello'),('he', 'he'),('hello ', 'hello ');
...
@@ -569,7 +569,6 @@ INSERT INTO t1 VALUES ('hello', 'hello'),('he', 'he'),('hello ', 'hello ');
INSERT
INTO
t1
(
col1
)
VALUES
(
'hellobob'
);
INSERT
INTO
t1
(
col1
)
VALUES
(
'hellobob'
);
--
error
1265
--
error
1265
INSERT
INTO
t1
(
col2
)
VALUES
(
'hellobob'
);
INSERT
INTO
t1
(
col2
)
VALUES
(
'hellobob'
);
--
error
1265
INSERT
INTO
t1
(
col2
)
VALUES
(
'hello '
);
INSERT
INTO
t1
(
col2
)
VALUES
(
'hello '
);
--
error
1265
--
error
1265
UPDATE
t1
SET
col1
=
'hellobob'
WHERE
col1
=
'he'
;
UPDATE
t1
SET
col1
=
'hellobob'
WHERE
col1
=
'he'
;
...
...
mysys/default.c
View file @
1e76b778
...
@@ -112,20 +112,14 @@ static int search_files(const char *conf_file, int *argc, char ***argv,
...
@@ -112,20 +112,14 @@ static int search_files(const char *conf_file, int *argc, char ***argv,
DBUG_ENTER
(
"search_files"
);
DBUG_ENTER
(
"search_files"
);
/* Check if we want to force the use a specific default file */
/* Check if we want to force the use a specific default file */
forced_default_file
=
0
;
get_defaults_files
(
*
argc
,
*
argv
,
if
(
*
argc
>=
2
)
(
char
**
)
&
forced_default_file
,
&
defaults_extra_file
);
{
if
(
forced_default_file
)
if
(
is_prefix
(
argv
[
0
][
1
],
"--defaults-file="
))
forced_default_file
=
strchr
(
forced_default_file
,
'='
)
+
1
;
{
if
(
defaults_extra_file
)
forced_default_file
=
strchr
(
argv
[
0
][
1
],
'='
)
+
1
;
defaults_extra_file
=
strchr
(
defaults_extra_file
,
'='
)
+
1
;
(
*
args_used
)
++
;
}
args_used
+=
(
forced_default_file
?
1
:
0
)
+
(
defaults_extra_file
?
1
:
0
);
else
if
(
is_prefix
(
argv
[
0
][
1
],
"--defaults-extra-file="
))
{
defaults_extra_file
=
strchr
(
argv
[
0
][
1
],
'='
)
+
1
;
(
*
args_used
)
++
;
}
}
if
(
forced_default_file
)
if
(
forced_default_file
)
{
{
...
@@ -261,6 +255,36 @@ static int handle_default_option(void *in_ctx, const char *group_name,
...
@@ -261,6 +255,36 @@ static int handle_default_option(void *in_ctx, const char *group_name,
}
}
/*
Gets --defaults-file and --defaults-extra-file options from command line.
SYNOPSIS
get_defaults_files()
argc Pointer to argc of original program
argv Pointer to argv of original program
defaults --defaults-file option
extra_defaults --defaults-extra-file option
RETURN
defaults and extra_defaults will be set to appropriate items
of argv array, or to NULL if there are no such options
*/
void
get_defaults_files
(
int
argc
,
char
**
argv
,
char
**
defaults
,
char
**
extra_defaults
)
{
*
defaults
=
0
;
*
extra_defaults
=
0
;
if
(
argc
>=
2
)
{
if
(
is_prefix
(
argv
[
1
],
"--defaults-file="
))
*
defaults
=
argv
[
1
];
else
if
(
is_prefix
(
argv
[
1
],
"--defaults-extra-file="
))
*
extra_defaults
=
argv
[
1
];
}
}
/*
/*
Read options from configurations files
Read options from configurations files
...
...
ndb/src/kernel/blocks/backup/Backup.cpp
View file @
1e76b778
...
@@ -992,7 +992,11 @@ Backup::execUTIL_SEQUENCE_CONF(Signal* signal)
...
@@ -992,7 +992,11 @@ Backup::execUTIL_SEQUENCE_CONF(Signal* signal)
}
//if
}
//if
ndbrequire
(
ptr
.
p
->
masterData
.
state
.
getState
()
==
DEFINING
);
ndbrequire
(
ptr
.
p
->
masterData
.
state
.
getState
()
==
DEFINING
);
ptr
.
p
->
backupId
=
conf
->
sequenceValue
[
0
];
{
Uint64
backupId
;
memcpy
(
&
backupId
,
conf
->
sequenceValue
,
8
);
ptr
.
p
->
backupId
=
(
Uint32
)
backupId
;
}
ptr
.
p
->
backupKey
[
0
]
=
(
getOwnNodeId
()
<<
16
)
|
(
ptr
.
p
->
backupId
&
0xFFFF
);
ptr
.
p
->
backupKey
[
0
]
=
(
getOwnNodeId
()
<<
16
)
|
(
ptr
.
p
->
backupId
&
0xFFFF
);
ptr
.
p
->
backupKey
[
1
]
=
NdbTick_CurrentMillisecond
();
ptr
.
p
->
backupKey
[
1
]
=
NdbTick_CurrentMillisecond
();
...
...
ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
View file @
1e76b778
...
@@ -27,6 +27,14 @@
...
@@ -27,6 +27,14 @@
#include <NdbThread.h>
#include <NdbThread.h>
#include <signaldata/FsOpenReq.hpp>
#include <signaldata/FsOpenReq.hpp>
// use this to test broken pread code
//#define HAVE_BROKEN_PREAD
#ifdef HAVE_BROKEN_PREAD
#undef HAVE_PWRITE
#undef HAVE_PREAD
#endif
#if defined NDB_WIN32 || defined NDB_OSE || defined NDB_SOFTOSE
#if defined NDB_WIN32 || defined NDB_OSE || defined NDB_SOFTOSE
#else
#else
// For readv and writev
// For readv and writev
...
@@ -379,9 +387,12 @@ AsyncFile::readBuffer(char * buf, size_t size, off_t offset){
...
@@ -379,9 +387,12 @@ AsyncFile::readBuffer(char * buf, size_t size, off_t offset){
if
(
dwSFP
!=
offset
)
{
if
(
dwSFP
!=
offset
)
{
return
GetLastError
();
return
GetLastError
();
}
}
#elif defined NDB_OSE || defined NDB_SOFTOSE
#elif ! defined(HAVE_PREAD)
return_value
=
lseek
(
theFd
,
offset
,
SEEK_SET
);
off_t
seek_val
;
if
(
return_value
!=
offset
)
{
while
((
seek_val
=
lseek
(
theFd
,
offset
,
SEEK_SET
))
==
(
off_t
)
-
1
&&
errno
==
EINTR
);
if
(
seek_val
==
(
off_t
)
-
1
)
{
return
errno
;
return
errno
;
}
}
#endif
#endif
...
@@ -400,10 +411,10 @@ AsyncFile::readBuffer(char * buf, size_t size, off_t offset){
...
@@ -400,10 +411,10 @@ AsyncFile::readBuffer(char * buf, size_t size, off_t offset){
return
GetLastError
();
return
GetLastError
();
}
}
bytes_read
=
dwBytesRead
;
bytes_read
=
dwBytesRead
;
#elif
defined NDB_OSE || defined NDB_SOFTOSE
#elif
! defined(HAVE_PREAD)
return_value
=
::
read
(
theFd
,
buf
,
size
);
return_value
=
::
read
(
theFd
,
buf
,
size
);
#else // UNIX
#else // UNIX
return_value
=
my_pread
(
theFd
,
buf
,
size
,
offset
,
0
);
return_value
=
::
pread
(
theFd
,
buf
,
size
,
offset
);
#endif
#endif
#ifndef NDB_WIN32
#ifndef NDB_WIN32
if
(
return_value
==
-
1
&&
errno
==
EINTR
)
{
if
(
return_value
==
-
1
&&
errno
==
EINTR
)
{
...
@@ -453,7 +464,7 @@ AsyncFile::readReq( Request * request)
...
@@ -453,7 +464,7 @@ AsyncFile::readReq( Request * request)
void
void
AsyncFile
::
readvReq
(
Request
*
request
)
AsyncFile
::
readvReq
(
Request
*
request
)
{
{
#if
defined NDB_OSE || defined NDB_SOFTOSE
#if
! defined(HAVE_PREAD)
readReq
(
request
);
readReq
(
request
);
return
;
return
;
#elif defined NDB_WIN32
#elif defined NDB_WIN32
...
@@ -483,7 +494,7 @@ AsyncFile::readvReq( Request * request)
...
@@ -483,7 +494,7 @@ AsyncFile::readvReq( Request * request)
int
int
AsyncFile
::
extendfile
(
Request
*
request
)
{
AsyncFile
::
extendfile
(
Request
*
request
)
{
#if
defined NDB_OSE || defined NDB_SOFTOSE
#if
! defined(HAVE_PWRITE)
// Find max size of this file in this request
// Find max size of this file in this request
int
maxOffset
=
0
;
int
maxOffset
=
0
;
int
maxSize
=
0
;
int
maxSize
=
0
;
...
@@ -592,28 +603,14 @@ AsyncFile::writeBuffer(const char * buf, size_t size, off_t offset,
...
@@ -592,28 +603,14 @@ AsyncFile::writeBuffer(const char * buf, size_t size, off_t offset,
if
(
dwSFP
!=
offset
)
{
if
(
dwSFP
!=
offset
)
{
return
GetLastError
();
return
GetLastError
();
}
}
#elif defined NDB_OSE || defined NDB_SOFTOSE
#elif ! defined(HAVE_PWRITE)
return_value
=
lseek
(
theFd
,
offset
,
SEEK_SET
);
off_t
seek_val
;
if
(
return_value
!=
offset
)
{
while
((
seek_val
=
lseek
(
theFd
,
offset
,
SEEK_SET
))
==
(
off_t
)
-
1
DEBUG
(
ndbout_c
(
"AsyncFile::writeReq, err1: return_value=%d, offset=%d
\n
"
,
&&
errno
==
EINTR
);
return_value
,
chunk_offset
));
if
(
seek_val
==
(
off_t
)
-
1
)
PRINT_ERRORANDFLAGS
(
0
);
{
if
(
errno
==
78
)
{
// Could not write beyond end of file, try to extend file
DEBUG
(
ndbout_c
(
"AsyncFile::writeReq, Extend. file! filename=
\"
%s
\"
\n
"
,
theFileName
.
c_str
()));
return_value
=
extendfile
(
request
);
if
(
return_value
==
-
1
)
{
return
errno
;
}
return_value
=
lseek
(
theFd
,
offset
,
SEEK_SET
);
if
(
return_value
!=
offset
)
{
return
errno
;
return
errno
;
}
}
}
else
{
return
errno
;
}
}
#endif
#endif
while
(
size
>
0
)
{
while
(
size
>
0
)
{
...
@@ -634,10 +631,10 @@ AsyncFile::writeBuffer(const char * buf, size_t size, off_t offset,
...
@@ -634,10 +631,10 @@ AsyncFile::writeBuffer(const char * buf, size_t size, off_t offset,
DEBUG
(
ndbout_c
(
"Warning partial write %d != %d"
,
bytes_written
,
bytes_to_write
));
DEBUG
(
ndbout_c
(
"Warning partial write %d != %d"
,
bytes_written
,
bytes_to_write
));
}
}
#elif
defined NDB_OSE || defined NDB_SOFTOSE
#elif
! defined(HAVE_PWRITE)
return_value
=
::
write
(
theFd
,
buf
,
bytes_to_write
);
return_value
=
::
write
(
theFd
,
buf
,
bytes_to_write
);
#else // UNIX
#else // UNIX
return_value
=
my_pwrite
(
theFd
,
buf
,
bytes_to_write
,
offset
,
0
);
return_value
=
::
pwrite
(
theFd
,
buf
,
bytes_to_write
,
offset
);
#endif
#endif
#ifndef NDB_WIN32
#ifndef NDB_WIN32
if
(
return_value
==
-
1
&&
errno
==
EINTR
)
{
if
(
return_value
==
-
1
&&
errno
==
EINTR
)
{
...
...
ndb/src/kernel/blocks/suma/Suma.cpp
View file @
1e76b778
...
@@ -824,7 +824,8 @@ Suma::execUTIL_SEQUENCE_CONF(Signal* signal)
...
@@ -824,7 +824,8 @@ Suma::execUTIL_SEQUENCE_CONF(Signal* signal)
return
;
return
;
}
}
Uint32
subId
=
conf
->
sequenceValue
[
0
];
Uint64
subId
;
memcpy
(
&
subId
,
conf
->
sequenceValue
,
8
);
Uint32
subData
=
conf
->
senderData
;
Uint32
subData
=
conf
->
senderData
;
SubscriberPtr
subbPtr
;
SubscriberPtr
subbPtr
;
...
@@ -832,8 +833,8 @@ Suma::execUTIL_SEQUENCE_CONF(Signal* signal)
...
@@ -832,8 +833,8 @@ Suma::execUTIL_SEQUENCE_CONF(Signal* signal)
CreateSubscriptionIdConf
*
subconf
=
(
CreateSubscriptionIdConf
*
)
conf
;
CreateSubscriptionIdConf
*
subconf
=
(
CreateSubscriptionIdConf
*
)
conf
;
subconf
->
subscriptionId
=
subId
;
subconf
->
subscriptionId
=
(
Uint32
)
subId
;
subconf
->
subscriptionKey
=
(
getOwnNodeId
()
<<
16
)
|
(
subId
&
0xFFFF
);
subconf
->
subscriptionKey
=
(
getOwnNodeId
()
<<
16
)
|
(
Uint32
)(
subId
&
0xFFFF
);
subconf
->
subscriberData
=
subbPtr
.
p
->
m_senderData
;
subconf
->
subscriberData
=
subbPtr
.
p
->
m_senderData
;
sendSignal
(
subbPtr
.
p
->
m_subscriberRef
,
GSN_CREATE_SUBID_CONF
,
signal
,
sendSignal
(
subbPtr
.
p
->
m_subscriberRef
,
GSN_CREATE_SUBID_CONF
,
signal
,
...
...
ndb/src/mgmsrv/InitConfigFileParser.cpp
View file @
1e76b778
...
@@ -228,13 +228,21 @@ bool InitConfigFileParser::parseNameValuePair(Context& ctx, const char* line)
...
@@ -228,13 +228,21 @@ bool InitConfigFileParser::parseNameValuePair(Context& ctx, const char* line)
Vector
<
BaseString
>
tmp_string_split
;
Vector
<
BaseString
>
tmp_string_split
;
if
(
BaseString
(
line
).
split
(
tmp_string_split
,
if
(
BaseString
(
line
).
split
(
tmp_string_split
,
BaseString
(
"=:"
),
"=:"
,
2
)
!=
2
)
2
)
!=
2
)
{
{
ctx
.
reportError
(
"Parse error"
);
ctx
.
reportError
(
"Parse error"
);
return
false
;
return
false
;
}
}
// *************************************
// Remove all after #
// *************************************
Vector
<
BaseString
>
tmp_string_split2
;
tmp_string_split
[
1
].
split
(
tmp_string_split2
,
"#"
,
2
);
tmp_string_split
[
1
]
=
tmp_string_split2
[
0
];
// *************************************
// *************************************
// Remove leading and trailing chars
// Remove leading and trailing chars
// *************************************
// *************************************
...
...
sql/ha_ndbcluster.cc
View file @
1e76b778
...
@@ -156,8 +156,8 @@ static int ndb_to_mysql_error(const NdbError *err)
...
@@ -156,8 +156,8 @@ static int ndb_to_mysql_error(const NdbError *err)
inline
inline
int
execute_no_commit
(
ha_ndbcluster
*
h
,
NdbTransaction
*
trans
)
int
execute_no_commit
(
ha_ndbcluster
*
h
,
NdbTransaction
*
trans
)
{
{
int
m_batch_execute
=
0
;
#ifdef NOT_USED
#ifdef NOT_USED
int
m_batch_execute
=
0
;
if
(
m_batch_execute
)
if
(
m_batch_execute
)
return
0
;
return
0
;
#endif
#endif
...
@@ -169,8 +169,8 @@ int execute_no_commit(ha_ndbcluster *h, NdbTransaction *trans)
...
@@ -169,8 +169,8 @@ int execute_no_commit(ha_ndbcluster *h, NdbTransaction *trans)
inline
inline
int
execute_commit
(
ha_ndbcluster
*
h
,
NdbTransaction
*
trans
)
int
execute_commit
(
ha_ndbcluster
*
h
,
NdbTransaction
*
trans
)
{
{
int
m_batch_execute
=
0
;
#ifdef NOT_USED
#ifdef NOT_USED
int
m_batch_execute
=
0
;
if
(
m_batch_execute
)
if
(
m_batch_execute
)
return
0
;
return
0
;
#endif
#endif
...
@@ -182,8 +182,8 @@ int execute_commit(ha_ndbcluster *h, NdbTransaction *trans)
...
@@ -182,8 +182,8 @@ int execute_commit(ha_ndbcluster *h, NdbTransaction *trans)
inline
inline
int
execute_commit
(
THD
*
thd
,
NdbTransaction
*
trans
)
int
execute_commit
(
THD
*
thd
,
NdbTransaction
*
trans
)
{
{
int
m_batch_execute
=
0
;
#ifdef NOT_USED
#ifdef NOT_USED
int
m_batch_execute
=
0
;
if
(
m_batch_execute
)
if
(
m_batch_execute
)
return
0
;
return
0
;
#endif
#endif
...
@@ -195,8 +195,8 @@ int execute_commit(THD *thd, NdbTransaction *trans)
...
@@ -195,8 +195,8 @@ int execute_commit(THD *thd, NdbTransaction *trans)
inline
inline
int
execute_no_commit_ie
(
ha_ndbcluster
*
h
,
NdbTransaction
*
trans
)
int
execute_no_commit_ie
(
ha_ndbcluster
*
h
,
NdbTransaction
*
trans
)
{
{
int
m_batch_execute
=
0
;
#ifdef NOT_USED
#ifdef NOT_USED
int
m_batch_execute
=
0
;
if
(
m_batch_execute
)
if
(
m_batch_execute
)
return
0
;
return
0
;
#endif
#endif
...
@@ -810,7 +810,7 @@ int ha_ndbcluster::build_index_list(TABLE *tab, enum ILBP phase)
...
@@ -810,7 +810,7 @@ int ha_ndbcluster::build_index_list(TABLE *tab, enum ILBP phase)
{
{
uint
i
;
uint
i
;
int
error
=
0
;
int
error
=
0
;
const
char
*
name
,
*
index_name
;
const
char
*
index_name
;
char
unique_index_name
[
FN_LEN
];
char
unique_index_name
[
FN_LEN
];
static
const
char
*
unique_suffix
=
"$unique"
;
static
const
char
*
unique_suffix
=
"$unique"
;
KEY
*
key_info
=
tab
->
key_info
;
KEY
*
key_info
=
tab
->
key_info
;
...
@@ -1118,10 +1118,10 @@ ha_ndbcluster::set_index_key(NdbOperation *op,
...
@@ -1118,10 +1118,10 @@ ha_ndbcluster::set_index_key(NdbOperation *op,
int
ha_ndbcluster
::
pk_read
(
const
byte
*
key
,
uint
key_len
,
byte
*
buf
)
int
ha_ndbcluster
::
pk_read
(
const
byte
*
key
,
uint
key_len
,
byte
*
buf
)
{
{
uint
no_fields
=
table
->
s
->
fields
,
i
;
uint
no_fields
=
table
->
s
->
fields
;
NdbConnection
*
trans
=
m_active_trans
;
NdbConnection
*
trans
=
m_active_trans
;
NdbOperation
*
op
;
NdbOperation
*
op
;
THD
*
thd
=
current_thd
;
int
res
;
int
res
;
DBUG_ENTER
(
"pk_read"
);
DBUG_ENTER
(
"pk_read"
);
DBUG_PRINT
(
"enter"
,
(
"key_len: %u"
,
key_len
));
DBUG_PRINT
(
"enter"
,
(
"key_len: %u"
,
key_len
));
...
@@ -1238,7 +1238,6 @@ int ha_ndbcluster::peek_row()
...
@@ -1238,7 +1238,6 @@ int ha_ndbcluster::peek_row()
{
{
NdbTransaction
*
trans
=
m_active_trans
;
NdbTransaction
*
trans
=
m_active_trans
;
NdbOperation
*
op
;
NdbOperation
*
op
;
THD
*
thd
=
current_thd
;
DBUG_ENTER
(
"peek_row"
);
DBUG_ENTER
(
"peek_row"
);
NdbOperation
::
LockMode
lm
=
NdbOperation
::
LockMode
lm
=
...
@@ -1345,8 +1344,11 @@ inline int ha_ndbcluster::fetch_next(NdbScanOperation* cursor)
...
@@ -1345,8 +1344,11 @@ inline int ha_ndbcluster::fetch_next(NdbScanOperation* cursor)
{
{
if
(
execute_commit
(
this
,
trans
)
!=
0
)
if
(
execute_commit
(
this
,
trans
)
!=
0
)
DBUG_RETURN
(
-
1
);
DBUG_RETURN
(
-
1
);
int
res
=
trans
->
restart
();
if
(
trans
->
restart
()
!=
0
)
DBUG_ASSERT
(
res
==
0
);
{
DBUG_ASSERT
(
0
);
DBUG_RETURN
(
-
1
);
}
}
}
m_ops_pending
=
0
;
m_ops_pending
=
0
;
}
}
...
@@ -1441,7 +1443,9 @@ int ha_ndbcluster::set_bounds(NdbIndexScanOperation *op,
...
@@ -1441,7 +1443,9 @@ int ha_ndbcluster::set_bounds(NdbIndexScanOperation *op,
{
{
KEY_PART_INFO
*
key_part
=
&
key_info
->
key_part
[
i
];
KEY_PART_INFO
*
key_part
=
&
key_info
->
key_part
[
i
];
Field
*
field
=
key_part
->
field
;
Field
*
field
=
key_part
->
field
;
#ifndef DBUG_OFF
uint
part_len
=
key_part
->
length
;
uint
part_len
=
key_part
->
length
;
#endif
uint
part_store_len
=
key_part
->
store_length
;
uint
part_store_len
=
key_part
->
store_length
;
// Info about each key part
// Info about each key part
struct
part_st
{
struct
part_st
{
...
@@ -1586,7 +1590,6 @@ int ha_ndbcluster::define_read_attrs(byte* buf, NdbOperation* op)
...
@@ -1586,7 +1590,6 @@ int ha_ndbcluster::define_read_attrs(byte* buf, NdbOperation* op)
{
{
uint
i
;
uint
i
;
THD
*
thd
=
current_thd
;
THD
*
thd
=
current_thd
;
NdbTransaction
*
trans
=
m_active_trans
;
DBUG_ENTER
(
"define_read_attrs"
);
DBUG_ENTER
(
"define_read_attrs"
);
...
@@ -1780,7 +1783,6 @@ int ha_ndbcluster::filtered_scan(const byte *key, uint key_len,
...
@@ -1780,7 +1783,6 @@ int ha_ndbcluster::filtered_scan(const byte *key, uint key_len,
int
ha_ndbcluster
::
full_table_scan
(
byte
*
buf
)
int
ha_ndbcluster
::
full_table_scan
(
byte
*
buf
)
{
{
uint
i
;
int
res
;
int
res
;
NdbScanOperation
*
op
;
NdbScanOperation
*
op
;
NdbTransaction
*
trans
=
m_active_trans
;
NdbTransaction
*
trans
=
m_active_trans
;
...
@@ -1893,14 +1895,12 @@ int ha_ndbcluster::write_row(byte *record)
...
@@ -1893,14 +1895,12 @@ int ha_ndbcluster::write_row(byte *record)
((
m_rows_inserted
%
m_bulk_insert_rows
)
==
0
)
||
((
m_rows_inserted
%
m_bulk_insert_rows
)
==
0
)
||
set_blob_value
)
set_blob_value
)
{
{
THD
*
thd
=
current_thd
;
// Send rows to NDB
// Send rows to NDB
DBUG_PRINT
(
"info"
,
(
"Sending inserts to NDB, "
\
DBUG_PRINT
(
"info"
,
(
"Sending inserts to NDB, "
\
"rows_inserted:%d, bulk_insert_rows: %d"
,
"rows_inserted:%d, bulk_insert_rows: %d"
,
(
int
)
m_rows_inserted
,
(
int
)
m_bulk_insert_rows
));
(
int
)
m_rows_inserted
,
(
int
)
m_bulk_insert_rows
));
m_bulk_insert_not_flushed
=
FALSE
;
m_bulk_insert_not_flushed
=
FALSE
;
// if (thd->transaction.on)
if
(
m_transaction_on
)
if
(
m_transaction_on
)
{
{
if
(
execute_no_commit
(
this
,
trans
)
!=
0
)
if
(
execute_no_commit
(
this
,
trans
)
!=
0
)
...
@@ -1918,8 +1918,11 @@ int ha_ndbcluster::write_row(byte *record)
...
@@ -1918,8 +1918,11 @@ int ha_ndbcluster::write_row(byte *record)
no_uncommitted_rows_execute_failure
();
no_uncommitted_rows_execute_failure
();
DBUG_RETURN
(
ndb_err
(
trans
));
DBUG_RETURN
(
ndb_err
(
trans
));
}
}
int
res
=
trans
->
restart
();
if
(
trans
->
restart
()
!=
0
)
DBUG_ASSERT
(
res
==
0
);
{
DBUG_ASSERT
(
0
);
DBUG_RETURN
(
-
1
);
}
}
}
}
}
if
((
has_auto_increment
)
&&
(
m_skip_auto_increment
))
if
((
has_auto_increment
)
&&
(
m_skip_auto_increment
))
...
@@ -2220,7 +2223,10 @@ void ha_ndbcluster::unpack_record(byte* buf)
...
@@ -2220,7 +2223,10 @@ void ha_ndbcluster::unpack_record(byte* buf)
{
{
NdbBlob
*
ndb_blob
=
(
*
value
).
blob
;
NdbBlob
*
ndb_blob
=
(
*
value
).
blob
;
bool
isNull
=
TRUE
;
bool
isNull
=
TRUE
;
int
ret
=
ndb_blob
->
getNull
(
isNull
);
#ifndef DBUG_OFF
int
ret
=
#endif
ndb_blob
->
getNull
(
isNull
);
DBUG_ASSERT
(
ret
==
0
);
DBUG_ASSERT
(
ret
==
0
);
if
(
isNull
)
if
(
isNull
)
(
*
field
)
->
set_null
(
row_offset
);
(
*
field
)
->
set_null
(
row_offset
);
...
@@ -2252,32 +2258,35 @@ void ha_ndbcluster::unpack_record(byte* buf)
...
@@ -2252,32 +2258,35 @@ void ha_ndbcluster::unpack_record(byte* buf)
void
ha_ndbcluster
::
print_results
()
void
ha_ndbcluster
::
print_results
()
{
{
const
NDBTAB
*
tab
=
(
const
NDBTAB
*
)
m_table
;
DBUG_ENTER
(
"print_results"
);
DBUG_ENTER
(
"print_results"
);
#ifndef DBUG_OFF
#ifndef DBUG_OFF
const
NDBTAB
*
tab
=
(
const
NDBTAB
*
)
m_table
;
if
(
!
_db_on_
)
if
(
!
_db_on_
)
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
char
buf_type
[
MAX_FIELD_WIDTH
],
buf_val
[
MAX_FIELD_WIDTH
];
String
type
(
buf_type
,
sizeof
(
buf_type
),
&
my_charset_bin
);
String
val
(
buf_val
,
sizeof
(
buf_val
),
&
my_charset_bin
);
for
(
uint
f
=
0
;
f
<
table
->
s
->
fields
;
f
++
)
for
(
uint
f
=
0
;
f
<
table
->
s
->
fields
;
f
++
)
{
{
// Use DBUG_PRINT since DBUG_FILE cannot be filtered out
// Use DBUG_PRINT since DBUG_FILE cannot be filtered out
char
buf
[
2000
];
char
buf
[
2000
];
Field
*
field
;
Field
*
field
;
void
*
ptr
;
void
*
ptr
;
const
NDBCOL
*
col
;
const
NDBCOL
*
col
=
NULL
;
NdbValue
value
;
NdbValue
value
;
NdbBlob
*
ndb_blob
;
NdbBlob
*
ndb_blob
;
buf
[
0
]
=
0
;
buf
[
0
]
=
0
;
field
=
table
->
field
[
f
];
if
(
!
(
value
=
m_value
[
f
]).
ptr
)
if
(
!
(
value
=
m_value
[
f
]).
ptr
)
{
{
my_snprintf
(
buf
,
sizeof
(
buf
),
"not read"
);
my_snprintf
(
buf
,
sizeof
(
buf
),
"not read"
);
goto
print_value
;
goto
print_value
;
}
}
field
=
table
->
field
[
f
];
ptr
=
field
->
ptr
;
ptr
=
field
->
ptr
;
DBUG_DUMP
(
"field->ptr"
,
(
char
*
)
ptr
,
field
->
pack_length
());
DBUG_DUMP
(
"field->ptr"
,
(
char
*
)
ptr
,
field
->
pack_length
());
col
=
tab
->
getColumn
(
f
);
col
=
tab
->
getColumn
(
f
);
...
@@ -2290,6 +2299,11 @@ void ha_ndbcluster::print_results()
...
@@ -2290,6 +2299,11 @@ void ha_ndbcluster::print_results()
my_snprintf
(
buf
,
sizeof
(
buf
),
"NULL"
);
my_snprintf
(
buf
,
sizeof
(
buf
),
"NULL"
);
goto
print_value
;
goto
print_value
;
}
}
type
.
length
(
0
);
val
.
length
(
0
);
field
->
sql_type
(
type
);
field
->
val_str
(
&
val
);
my_snprintf
(
buf
,
sizeof
(
buf
),
"%s %s"
,
type
.
c_ptr
(),
val
.
c_ptr
());
}
}
else
else
{
{
...
@@ -2302,142 +2316,6 @@ void ha_ndbcluster::print_results()
...
@@ -2302,142 +2316,6 @@ void ha_ndbcluster::print_results()
}
}
}
}
switch
(
col
->
getType
())
{
case
NdbDictionary
:
:
Column
::
Tinyint
:
{
Int8
value
=
*
(
Int8
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Tinyint %d"
,
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Tinyunsigned
:
{
Uint8
value
=
*
(
Uint8
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Tinyunsigned %u"
,
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Smallint
:
{
Int16
value
=
*
(
Int16
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Smallint %d"
,
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Smallunsigned
:
{
Uint16
value
=
*
(
Uint16
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Smallunsigned %u"
,
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Mediumint
:
{
byte
value
[
3
];
memcpy
(
value
,
ptr
,
3
);
my_snprintf
(
buf
,
sizeof
(
buf
),
"Mediumint %d,%d,%d"
,
value
[
0
],
value
[
1
],
value
[
2
]);
break
;
}
case
NdbDictionary
:
:
Column
::
Mediumunsigned
:
{
byte
value
[
3
];
memcpy
(
value
,
ptr
,
3
);
my_snprintf
(
buf
,
sizeof
(
buf
),
"Mediumunsigned %u,%u,%u"
,
value
[
0
],
value
[
1
],
value
[
2
]);
break
;
}
case
NdbDictionary
:
:
Column
::
Int
:
{
Int32
value
=
*
(
Int32
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Int %d"
,
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Unsigned
:
{
Uint32
value
=
*
(
Uint32
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Unsigned %u"
,
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Bigint
:
{
Int64
value
=
*
(
Int64
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Bigint %d"
,
(
int
)
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Bigunsigned
:
{
Uint64
value
=
*
(
Uint64
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Bigunsigned %u"
,
(
unsigned
)
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Float
:
{
float
value
=
*
(
float
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Float %f"
,
(
double
)
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Double
:
{
double
value
=
*
(
double
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Double %f"
,
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Decimal
:
{
const
char
*
value
=
(
char
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Decimal '%-*s'"
,
field
->
pack_length
(),
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Char
:
{
const
char
*
value
=
(
char
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Char '%.*s'"
,
field
->
pack_length
(),
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Varchar
:
{
uint
len
=
*
(
uchar
*
)
ptr
;
const
char
*
value
=
(
char
*
)
ptr
+
1
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Varchar (%u)'%.*s'"
,
len
,
len
,
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Binary
:
{
const
char
*
value
=
(
char
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Binary '%.*s'"
,
field
->
pack_length
(),
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Varbinary
:
{
uint
len
=
*
(
uchar
*
)
ptr
;
const
char
*
value
=
(
char
*
)
ptr
+
1
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Varbinary (%u)'%.*s'"
,
len
,
len
,
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Datetime
:
{
my_snprintf
(
buf
,
sizeof
(
buf
),
"Datetime ?"
);
// fix-me
break
;
}
case
NdbDictionary
:
:
Column
::
Date
:
{
my_snprintf
(
buf
,
sizeof
(
buf
),
"Date ?"
);
// fix-me
break
;
}
case
NdbDictionary
:
:
Column
::
Time
:
{
my_snprintf
(
buf
,
sizeof
(
buf
),
"Time ?"
);
// fix-me
break
;
}
case
NdbDictionary
:
:
Column
::
Blob
:
{
Uint64
len
=
0
;
ndb_blob
->
getLength
(
len
);
my_snprintf
(
buf
,
sizeof
(
buf
),
"Blob [len=%u]"
,
(
unsigned
)
len
);
break
;
}
case
NdbDictionary
:
:
Column
::
Text
:
{
Uint64
len
=
0
;
ndb_blob
->
getLength
(
len
);
my_snprintf
(
buf
,
sizeof
(
buf
),
"Text [len=%u]"
,
(
unsigned
)
len
);
break
;
}
case
NdbDictionary
:
:
Column
::
Bit
:
{
const
char
*
value
=
(
char
*
)
ptr
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Bit '%.*s'"
,
field
->
pack_length
(),
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Longvarchar
:
{
uint
len
=
uint2korr
(
ptr
);
const
char
*
value
=
(
char
*
)
ptr
+
2
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Longvarchar (%u)'%.*s'"
,
len
,
len
,
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Longvarbinary
:
{
uint
len
=
uint2korr
(
ptr
);
const
char
*
value
=
(
char
*
)
ptr
+
2
;
my_snprintf
(
buf
,
sizeof
(
buf
),
"Longvarbinary (%u)'%.*s'"
,
len
,
len
,
value
);
break
;
}
case
NdbDictionary
:
:
Column
::
Undefined
:
my_snprintf
(
buf
,
sizeof
(
buf
),
"Unknown type: %d"
,
col
->
getType
());
break
;
}
print_value:
print_value:
DBUG_PRINT
(
"value"
,
(
"%u,%s: %s"
,
f
,
col
->
getName
(),
buf
));
DBUG_PRINT
(
"value"
,
(
"%u,%s: %s"
,
f
,
col
->
getName
(),
buf
));
}
}
...
@@ -2685,8 +2563,11 @@ int ha_ndbcluster::rnd_init(bool scan)
...
@@ -2685,8 +2563,11 @@ int ha_ndbcluster::rnd_init(bool scan)
{
{
if
(
!
scan
)
if
(
!
scan
)
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
int
res
=
cursor
->
restart
(
m_force_send
);
if
(
cursor
->
restart
(
m_force_send
)
!=
0
)
DBUG_ASSERT
(
res
==
0
);
{
DBUG_ASSERT
(
0
);
DBUG_RETURN
(
-
1
);
}
}
}
index_init
(
table
->
s
->
primary_key
);
index_init
(
table
->
s
->
primary_key
);
DBUG_RETURN
(
0
);
DBUG_RETURN
(
0
);
...
@@ -2801,13 +2682,15 @@ void ha_ndbcluster::position(const byte *record)
...
@@ -2801,13 +2682,15 @@ void ha_ndbcluster::position(const byte *record)
DBUG_PRINT
(
"info"
,
(
"Getting hidden key"
));
DBUG_PRINT
(
"info"
,
(
"Getting hidden key"
));
int
hidden_no
=
table
->
s
->
fields
;
int
hidden_no
=
table
->
s
->
fields
;
const
NdbRecAttr
*
rec
=
m_value
[
hidden_no
].
rec
;
const
NdbRecAttr
*
rec
=
m_value
[
hidden_no
].
rec
;
memcpy
(
ref
,
(
const
void
*
)
rec
->
aRef
(),
ref_length
);
#ifndef DBUG_OFF
const
NDBTAB
*
tab
=
(
const
NDBTAB
*
)
m_table
;
const
NDBTAB
*
tab
=
(
const
NDBTAB
*
)
m_table
;
const
NDBCOL
*
hidden_col
=
tab
->
getColumn
(
hidden_no
);
const
NDBCOL
*
hidden_col
=
tab
->
getColumn
(
hidden_no
);
DBUG_ASSERT
(
hidden_col
->
getPrimaryKey
()
&&
DBUG_ASSERT
(
hidden_col
->
getPrimaryKey
()
&&
hidden_col
->
getAutoIncrement
()
&&
hidden_col
->
getAutoIncrement
()
&&
rec
!=
NULL
&&
rec
!=
NULL
&&
ref_length
==
NDB_HIDDEN_PRIMARY_KEY_LENGTH
);
ref_length
==
NDB_HIDDEN_PRIMARY_KEY_LENGTH
);
memcpy
(
ref
,
(
const
void
*
)
rec
->
aRef
(),
ref_length
);
#endif
}
}
DBUG_DUMP
(
"ref"
,
(
char
*
)
ref
,
ref_length
);
DBUG_DUMP
(
"ref"
,
(
char
*
)
ref
,
ref_length
);
...
@@ -3336,11 +3219,13 @@ int ha_ndbcluster::start_stmt(THD *thd)
...
@@ -3336,11 +3219,13 @@ int ha_ndbcluster::start_stmt(THD *thd)
Ndb
*
ndb
=
((
Thd_ndb
*
)
thd
->
transaction
.
thd_ndb
)
->
ndb
;
Ndb
*
ndb
=
((
Thd_ndb
*
)
thd
->
transaction
.
thd_ndb
)
->
ndb
;
DBUG_PRINT
(
"trans"
,(
"Starting transaction stmt"
));
DBUG_PRINT
(
"trans"
,(
"Starting transaction stmt"
));
#if 0
NdbTransaction *tablock_trans=
NdbTransaction *tablock_trans=
(NdbTransaction*)thd->transaction.all.ndb_tid;
(NdbTransaction*)thd->transaction.all.ndb_tid;
DBUG_PRINT("info", ("tablock_trans: %x", (uint)tablock_trans));
DBUG_PRINT("info", ("tablock_trans: %x", (uint)tablock_trans));
DBUG_ASSERT(tablock_trans);
DBUG_ASSERT(tablock_trans);
// trans= ndb->hupp(tablock_trans);
// trans= ndb->hupp(tablock_trans);
#endif
trans
=
ndb
->
startTransaction
();
trans
=
ndb
->
startTransaction
();
if
(
trans
==
NULL
)
if
(
trans
==
NULL
)
ERR_RETURN
(
ndb
->
getNdbError
());
ERR_RETURN
(
ndb
->
getNdbError
());
...
@@ -3675,7 +3560,6 @@ int ha_ndbcluster::create(const char *name,
...
@@ -3675,7 +3560,6 @@ int ha_ndbcluster::create(const char *name,
NDBCOL
col
;
NDBCOL
col
;
uint
pack_length
,
length
,
i
,
pk_length
=
0
;
uint
pack_length
,
length
,
i
,
pk_length
=
0
;
const
void
*
data
,
*
pack_data
;
const
void
*
data
,
*
pack_data
;
const
char
**
key_names
=
form
->
s
->
keynames
.
type_names
;
char
name2
[
FN_HEADLEN
];
char
name2
[
FN_HEADLEN
];
bool
create_from_engine
=
(
info
->
table_options
&
HA_CREATE_FROM_ENGINE
);
bool
create_from_engine
=
(
info
->
table_options
&
HA_CREATE_FROM_ENGINE
);
...
@@ -3908,7 +3792,6 @@ int ha_ndbcluster::alter_table_name(const char *to)
...
@@ -3908,7 +3792,6 @@ int ha_ndbcluster::alter_table_name(const char *to)
Ndb
*
ndb
=
get_ndb
();
Ndb
*
ndb
=
get_ndb
();
NDBDICT
*
dict
=
ndb
->
getDictionary
();
NDBDICT
*
dict
=
ndb
->
getDictionary
();
const
NDBTAB
*
orig_tab
=
(
const
NDBTAB
*
)
m_table
;
const
NDBTAB
*
orig_tab
=
(
const
NDBTAB
*
)
m_table
;
int
ret
;
DBUG_ENTER
(
"alter_table_name_table"
);
DBUG_ENTER
(
"alter_table_name_table"
);
NdbDictionary
::
Table
new_tab
=
*
orig_tab
;
NdbDictionary
::
Table
new_tab
=
*
orig_tab
;
...
@@ -4008,7 +3891,6 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg):
...
@@ -4008,7 +3891,6 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg):
handler
(
table_arg
),
handler
(
table_arg
),
m_active_trans
(
NULL
),
m_active_trans
(
NULL
),
m_active_cursor
(
NULL
),
m_active_cursor
(
NULL
),
m_multi_cursor
(
NULL
),
m_table
(
NULL
),
m_table
(
NULL
),
m_table_info
(
NULL
),
m_table_info
(
NULL
),
m_table_flags
(
HA_REC_NOT_IN_SEQ
|
m_table_flags
(
HA_REC_NOT_IN_SEQ
|
...
@@ -4037,7 +3919,8 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg):
...
@@ -4037,7 +3919,8 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg):
m_force_send
(
TRUE
),
m_force_send
(
TRUE
),
m_autoincrement_prefetch
(
32
),
m_autoincrement_prefetch
(
32
),
m_transaction_on
(
TRUE
),
m_transaction_on
(
TRUE
),
m_use_local_query_cache
(
FALSE
)
m_use_local_query_cache
(
FALSE
),
m_multi_cursor
(
NULL
)
{
{
int
i
;
int
i
;
...
@@ -4512,15 +4395,21 @@ bool ndbcluster_init()
...
@@ -4512,15 +4395,21 @@ bool ndbcluster_init()
}
}
else
if
(
res
==
1
)
else
if
(
res
==
1
)
{
{
if
(
g_ndb_cluster_connection
->
start_connect_thread
())
{
if
(
g_ndb_cluster_connection
->
start_connect_thread
())
{
DBUG_PRINT
(
"error"
,
(
"g_ndb_cluster_connection->start_connect_thread()"
));
DBUG_PRINT
(
"error"
,
(
"g_ndb_cluster_connection->start_connect_thread()"
));
goto
ndbcluster_init_error
;
goto
ndbcluster_init_error
;
}
}
#ifndef DBUG_OFF
{
{
char
buf
[
1024
];
char
buf
[
1024
];
DBUG_PRINT
(
"info"
,(
"NDBCLUSTER storage engine not started, will connect using %s"
,
DBUG_PRINT
(
"info"
,
g_ndb_cluster_connection
->
get_connectstring
(
buf
,
sizeof
(
buf
))));
(
"NDBCLUSTER storage engine not started, "
"will connect using %s"
,
g_ndb_cluster_connection
->
get_connectstring
(
buf
,
sizeof
(
buf
))));
}
}
#endif
}
}
else
else
{
{
...
@@ -5059,6 +4948,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
...
@@ -5059,6 +4948,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
* pk-op 4 pk-op 4
* pk-op 4 pk-op 4
* range 5
* range 5
* pk-op 6 pk-ok 6
* pk-op 6 pk-ok 6
*/
/**
/**
* Variables for loop
* Variables for loop
...
@@ -5117,7 +5007,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
...
@@ -5117,7 +5007,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
multi_range_curr
->
start_key
.
length
))
multi_range_curr
->
start_key
.
length
))
goto
sk
;
goto
sk
;
goto
range
;
goto
range
;
case
ORDERED_INDEX
:
case
ORDERED_INDEX
:
{
range:
range:
multi_range_curr
->
range_flag
&=
~
(
uint
)
UNIQUE_RANGE
;
multi_range_curr
->
range_flag
&=
~
(
uint
)
UNIQUE_RANGE
;
if
(
scanOp
==
0
)
if
(
scanOp
==
0
)
...
@@ -5152,6 +5042,11 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
...
@@ -5152,6 +5042,11 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
DBUG_RETURN
(
res
);
DBUG_RETURN
(
res
);
break
;
break
;
}
}
case
(
UNDEFINED_INDEX
):
DBUG_ASSERT
(
FALSE
);
DBUG_RETURN
(
1
);
break
;
}
}
}
if
(
multi_range_curr
!=
multi_range_end
)
if
(
multi_range_curr
!=
multi_range_end
)
...
@@ -5238,7 +5133,7 @@ ha_ndbcluster::read_multi_range_next(KEY_MULTI_RANGE ** multi_range_found_p)
...
@@ -5238,7 +5133,7 @@ ha_ndbcluster::read_multi_range_next(KEY_MULTI_RANGE ** multi_range_found_p)
range_no
=
m_multi_cursor
->
get_range_no
();
range_no
=
m_multi_cursor
->
get_range_no
();
uint
current_range_no
=
multi_range_curr
-
m_multi_ranges
;
uint
current_range_no
=
multi_range_curr
-
m_multi_ranges
;
if
(
range_no
==
current_range_no
)
if
(
(
uint
)
range_no
==
current_range_no
)
{
{
DBUG_MULTI_RANGE
(
4
);
DBUG_MULTI_RANGE
(
4
);
// return current row
// return current row
...
...
sql/item_strfunc.cc
View file @
1e76b778
...
@@ -1578,9 +1578,14 @@ void Item_func_soundex::fix_length_and_dec()
...
@@ -1578,9 +1578,14 @@ void Item_func_soundex::fix_length_and_dec()
else return 0
else return 0
*/
*/
static
char
get_scode
(
CHARSET_INFO
*
cs
,
char
*
ptr
)
static
char
soundex_toupper
(
char
ch
)
{
{
uchar
ch
=
my_toupper
(
cs
,
*
ptr
);
return
(
ch
>=
'a'
&&
ch
<=
'z'
)
?
ch
-
'a'
+
'A'
:
ch
;
}
static
char
get_scode
(
char
*
ptr
)
{
uchar
ch
=
soundex_toupper
(
*
ptr
);
if
(
ch
<
'A'
||
ch
>
'Z'
)
if
(
ch
<
'A'
||
ch
>
'Z'
)
{
{
// Thread extended alfa (country spec)
// Thread extended alfa (country spec)
...
@@ -1610,8 +1615,8 @@ String *Item_func_soundex::val_str(String *str)
...
@@ -1610,8 +1615,8 @@ String *Item_func_soundex::val_str(String *str)
from
++
;
/* purecov: inspected */
from
++
;
/* purecov: inspected */
if
(
from
==
end
)
if
(
from
==
end
)
return
&
my_empty_string
;
// No alpha characters.
return
&
my_empty_string
;
// No alpha characters.
*
to
++
=
my_toupper
(
cs
,
*
from
);
// Copy first letter
*
to
++
=
soundex_toupper
(
*
from
);
// Copy first letter
last_ch
=
get_scode
(
cs
,
from
);
// code of the first letter
last_ch
=
get_scode
(
from
);
// code of the first letter
// for the first 'double-letter check.
// for the first 'double-letter check.
// Loop on input letters until
// Loop on input letters until
// end of input (null) or output
// end of input (null) or output
...
@@ -1620,7 +1625,7 @@ String *Item_func_soundex::val_str(String *str)
...
@@ -1620,7 +1625,7 @@ String *Item_func_soundex::val_str(String *str)
{
{
if
(
!
my_isalpha
(
cs
,
*
from
))
if
(
!
my_isalpha
(
cs
,
*
from
))
continue
;
continue
;
ch
=
get_scode
(
cs
,
from
);
ch
=
get_scode
(
from
);
if
((
ch
!=
'0'
)
&&
(
ch
!=
last_ch
))
// if not skipped or double
if
((
ch
!=
'0'
)
&&
(
ch
!=
last_ch
))
// if not skipped or double
{
{
*
to
++
=
ch
;
// letter, copy to output
*
to
++
=
ch
;
// letter, copy to output
...
...
sql/sql_insert.cc
View file @
1e76b778
...
@@ -292,7 +292,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -292,7 +292,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
error
=
0
;
error
=
0
;
id
=
0
;
id
=
0
;
thd
->
proc_info
=
"update"
;
thd
->
proc_info
=
"update"
;
if
(
duplic
!=
DUP_ERROR
)
if
(
duplic
!=
DUP_ERROR
||
ignore
)
table
->
file
->
extra
(
HA_EXTRA_IGNORE_DUP_KEY
);
table
->
file
->
extra
(
HA_EXTRA_IGNORE_DUP_KEY
);
/*
/*
let's *try* to start bulk inserts. It won't necessary
let's *try* to start bulk inserts. It won't necessary
...
@@ -471,7 +471,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
...
@@ -471,7 +471,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
table
->
next_number_field
=
0
;
table
->
next_number_field
=
0
;
thd
->
count_cuted_fields
=
CHECK_FIELD_IGNORE
;
thd
->
count_cuted_fields
=
CHECK_FIELD_IGNORE
;
thd
->
next_insert_id
=
0
;
// Reset this if wrongly used
thd
->
next_insert_id
=
0
;
// Reset this if wrongly used
if
(
duplic
!=
DUP_ERROR
)
if
(
duplic
!=
DUP_ERROR
||
ignore
)
table
->
file
->
extra
(
HA_EXTRA_NO_IGNORE_DUP_KEY
);
table
->
file
->
extra
(
HA_EXTRA_NO_IGNORE_DUP_KEY
);
/* Reset value of LAST_INSERT_ID if no rows where inserted */
/* Reset value of LAST_INSERT_ID if no rows where inserted */
...
@@ -1606,7 +1606,7 @@ bool delayed_insert::handle_inserts(void)
...
@@ -1606,7 +1606,7 @@ bool delayed_insert::handle_inserts(void)
info
.
ignore
=
row
->
ignore
;
info
.
ignore
=
row
->
ignore
;
info
.
handle_duplicates
=
row
->
dup
;
info
.
handle_duplicates
=
row
->
dup
;
if
(
info
.
ignore
||
if
(
info
.
ignore
||
info
.
handle_duplicates
==
DUP_REPLACE
)
info
.
handle_duplicates
!=
DUP_ERROR
)
{
{
table
->
file
->
extra
(
HA_EXTRA_IGNORE_DUP_KEY
);
table
->
file
->
extra
(
HA_EXTRA_IGNORE_DUP_KEY
);
using_ignore
=
1
;
using_ignore
=
1
;
...
@@ -1806,7 +1806,7 @@ select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
...
@@ -1806,7 +1806,7 @@ select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
restore_record
(
table
,
s
->
default_values
);
// Get empty record
restore_record
(
table
,
s
->
default_values
);
// Get empty record
table
->
next_number_field
=
table
->
found_next_number_field
;
table
->
next_number_field
=
table
->
found_next_number_field
;
thd
->
cuted_fields
=
0
;
thd
->
cuted_fields
=
0
;
if
(
info
.
ignore
||
info
.
handle_duplicates
==
DUP_REPLACE
)
if
(
info
.
ignore
||
info
.
handle_duplicates
!=
DUP_ERROR
)
table
->
file
->
extra
(
HA_EXTRA_IGNORE_DUP_KEY
);
table
->
file
->
extra
(
HA_EXTRA_IGNORE_DUP_KEY
);
table
->
file
->
start_bulk_insert
((
ha_rows
)
0
);
table
->
file
->
start_bulk_insert
((
ha_rows
)
0
);
thd
->
no_trans_update
=
0
;
thd
->
no_trans_update
=
0
;
...
@@ -2008,7 +2008,7 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
...
@@ -2008,7 +2008,7 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
restore_record
(
table
,
s
->
default_values
);
// Get empty record
restore_record
(
table
,
s
->
default_values
);
// Get empty record
thd
->
cuted_fields
=
0
;
thd
->
cuted_fields
=
0
;
if
(
info
.
ignore
||
info
.
handle_duplicates
==
DUP_REPLACE
)
if
(
info
.
ignore
||
info
.
handle_duplicates
!=
DUP_ERROR
)
table
->
file
->
extra
(
HA_EXTRA_IGNORE_DUP_KEY
);
table
->
file
->
extra
(
HA_EXTRA_IGNORE_DUP_KEY
);
table
->
file
->
start_bulk_insert
((
ha_rows
)
0
);
table
->
file
->
start_bulk_insert
((
ha_rows
)
0
);
thd
->
no_trans_update
=
0
;
thd
->
no_trans_update
=
0
;
...
...
sql/strfunc.cc
View file @
1e76b778
...
@@ -147,7 +147,7 @@ uint find_type(TYPELIB *lib, const char *find, uint length, bool part_match)
...
@@ -147,7 +147,7 @@ uint find_type(TYPELIB *lib, const char *find, uint length, bool part_match)
uint
find_type2
(
TYPELIB
*
typelib
,
const
char
*
x
,
uint
length
,
CHARSET_INFO
*
cs
)
uint
find_type2
(
TYPELIB
*
typelib
,
const
char
*
x
,
uint
length
,
CHARSET_INFO
*
cs
)
{
{
int
find
,
pos
,
findpos
;
int
find
,
pos
;
const
char
*
j
;
const
char
*
j
;
DBUG_ENTER
(
"find_type2"
);
DBUG_ENTER
(
"find_type2"
);
DBUG_PRINT
(
"enter"
,(
"x: '%.*s' lib: 0x%lx"
,
length
,
x
,
typelib
));
DBUG_PRINT
(
"enter"
,(
"x: '%.*s' lib: 0x%lx"
,
length
,
x
,
typelib
));
...
@@ -157,7 +157,7 @@ uint find_type2(TYPELIB *typelib, const char *x, uint length, CHARSET_INFO *cs)
...
@@ -157,7 +157,7 @@ uint find_type2(TYPELIB *typelib, const char *x, uint length, CHARSET_INFO *cs)
DBUG_PRINT
(
"exit"
,(
"no count"
));
DBUG_PRINT
(
"exit"
,(
"no count"
));
DBUG_RETURN
(
0
);
DBUG_RETURN
(
0
);
}
}
LINT_INIT
(
findpos
);
for
(
find
=
0
,
pos
=
0
;
(
j
=
typelib
->
type_names
[
pos
])
;
pos
++
)
for
(
find
=
0
,
pos
=
0
;
(
j
=
typelib
->
type_names
[
pos
])
;
pos
++
)
{
{
if
(
!
my_strnncoll
(
cs
,
(
const
uchar
*
)
x
,
length
,
if
(
!
my_strnncoll
(
cs
,
(
const
uchar
*
)
x
,
length
,
...
...
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