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
af1e8cf7
Commit
af1e8cf7
authored
Jan 29, 2005
by
joreland@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/home/jonas/src/mysql-5.0
into mysql.com:/home/jonas/src/mysql-5.0-ndb
parents
f7420730
08b30289
Changes
37
Hide whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
283 additions
and
123 deletions
+283
-123
.bzrignore
.bzrignore
+3
-0
BitKeeper/etc/logging_ok
BitKeeper/etc/logging_ok
+1
-0
Docs/Images/Makefile.am
Docs/Images/Makefile.am
+0
-4
client/Makefile.am
client/Makefile.am
+1
-1
configure.in
configure.in
+2
-2
dbug/Makefile.am
dbug/Makefile.am
+1
-3
extra/Makefile.am
extra/Makefile.am
+15
-14
include/Makefile.am
include/Makefile.am
+2
-7
innobase/include/rem0rec.ic
innobase/include/rem0rec.ic
+2
-2
innobase/include/trx0trx.h
innobase/include/trx0trx.h
+3
-1
innobase/row/row0mysql.c
innobase/row/row0mysql.c
+0
-12
libmysql/Makefile.am
libmysql/Makefile.am
+1
-1
libmysql_r/Makefile.am
libmysql_r/Makefile.am
+1
-1
libmysqld/Makefile.am
libmysqld/Makefile.am
+1
-1
libmysqld/examples/Makefile.am
libmysqld/examples/Makefile.am
+6
-9
mysql-test/r/ndb_index_ordered.result
mysql-test/r/ndb_index_ordered.result
+34
-10
mysql-test/t/ndb_index_ordered.test
mysql-test/t/ndb_index_ordered.test
+20
-10
ndb/docs/Makefile.am
ndb/docs/Makefile.am
+1
-1
ndb/include/kernel/signaldata/DictTabInfo.hpp
ndb/include/kernel/signaldata/DictTabInfo.hpp
+11
-1
ndb/include/ndb_constants.h
ndb/include/ndb_constants.h
+3
-1
ndb/include/ndbapi/NdbDictionary.hpp
ndb/include/ndbapi/NdbDictionary.hpp
+3
-1
ndb/include/ndbapi/NdbScanFilter.hpp
ndb/include/ndbapi/NdbScanFilter.hpp
+1
-1
ndb/include/ndbapi/ndb_opt_defaults.h
ndb/include/ndbapi/ndb_opt_defaults.h
+0
-4
ndb/include/util/NdbSqlUtil.hpp
ndb/include/util/NdbSqlUtil.hpp
+5
-1
ndb/src/common/util/NdbSqlUtil.cpp
ndb/src/common/util/NdbSqlUtil.cpp
+42
-0
ndb/src/ndbapi/NdbDictionary.cpp
ndb/src/ndbapi/NdbDictionary.cpp
+6
-0
ndb/src/ndbapi/NdbDictionaryImpl.cpp
ndb/src/ndbapi/NdbDictionaryImpl.cpp
+2
-0
ndb/src/ndbapi/NdbRecAttr.cpp
ndb/src/ndbapi/NdbRecAttr.cpp
+90
-9
ndb/test/include/NdbSchemaOp.hpp
ndb/test/include/NdbSchemaOp.hpp
+0
-4
scripts/Makefile.am
scripts/Makefile.am
+1
-1
server-tools/instance-manager/Makefile.am
server-tools/instance-manager/Makefile.am
+1
-1
sql/Makefile.am
sql/Makefile.am
+2
-4
sql/ha_innodb.cc
sql/ha_innodb.cc
+3
-2
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.cc
+11
-8
sql/share/Makefile.am
sql/share/Makefile.am
+3
-2
sql/sql_show.cc
sql/sql_show.cc
+4
-3
tools/Makefile.am
tools/Makefile.am
+1
-1
No files found.
.bzrignore
View file @
af1e8cf7
...
...
@@ -1052,3 +1052,6 @@ vio/test-ssl
vio/test-sslclient
vio/test-sslserver
vio/viotest-ssl
include/mysqld_ername.h
include/mysqld_error.h
include/sql_state.h
BitKeeper/etc/logging_ok
View file @
af1e8cf7
...
...
@@ -241,6 +241,7 @@ tonu@x153.internalnet
tonu@x3.internalnet
tsmith@build.mysql.com
tulin@build.mysql.com
tulin@mysql.com
ulli@morbus.(none)
venu@hundin.mysql.fi
venu@myvenu.com
...
...
Docs/Images/Makefile.am
View file @
af1e8cf7
...
...
@@ -27,9 +27,5 @@ EXTRA_DIST =
all
:
:
# Nothing to cleanup in this dummy directory.
clean
:
:
# Don't update the files from bitkeeper
%
::
SCCS/s.%
client/Makefile.am
View file @
af1e8cf7
...
...
@@ -18,7 +18,7 @@
#AUTOMAKE_OPTIONS = nostdinc
INCLUDES
=
-I
$(top_srcdir)
/include
-I
$(top_srcdir)
/regex
\
$(openssl_includes)
-I
$(top_
srcdir)
/extra
$(openssl_includes)
-I
$(top_
builddir)
/include
LIBS
=
@CLIENT_LIBS@
LDADD
=
@CLIENT_EXTRA_LDFLAGS@
\
$(top_builddir)
/libmysql/libmysqlclient.la
...
...
configure.in
View file @
af1e8cf7
...
...
@@ -1674,8 +1674,8 @@ then
elif test "
$with_debug
" = "
full
"
then
# Full debug. Very slow in some cases
CFLAGS="
$DEBUG_CFLAGS
-DDBUG_ON
-DSAFE_MUTEX
-DSAFEMALLOC
-DUNIV_DEBUG
$CFLAGS
"
CXXFLAGS="
$DEBUG_CXXFLAGS
-DDBUG_ON
-DSAFE_MUTEX
-DSAFEMALLOC
-DUNIV_DEBUG
$CXXFLAGS
"
CFLAGS="
$DEBUG_CFLAGS
-DDBUG_ON
-DSAFE_MUTEX
-DSAFEMALLOC
$CFLAGS
"
CXXFLAGS="
$DEBUG_CXXFLAGS
-DDBUG_ON
-DSAFE_MUTEX
-DSAFEMALLOC
$CXXFLAGS
"
else
# Optimized version. No debug
CFLAGS="
$OPTIMIZE_CFLAGS
-DDBUG_OFF
$CFLAGS
"
...
...
dbug/Makefile.am
View file @
af1e8cf7
...
...
@@ -26,6 +26,7 @@ EXTRA_DIST = example1.c example2.c example3.c \
NROFF_INC
=
example1.r example2.r example3.r main.r
\
factorial.r output1.r output2.r output3.r
\
output4.r output5.r
CLEANFILES
=
$(NROFF_INC)
user.t user.ps
# Must be linked with libs that are not compiled yet
...
...
@@ -59,8 +60,5 @@ output5.r: factorial
@
RM@
-f
$@
@
SED@
-e
's!\\!\\\\!g'
$<
>
$@
clean
:
@
RM@
-f
$(NROFF_INC)
user.t user.ps
# Don't update the files from bitkeeper
%
::
SCCS/s.%
extra/Makefile.am
View file @
af1e8cf7
...
...
@@ -16,25 +16,26 @@
INCLUDES
=
@MT_INCLUDES@
-I
$(top_srcdir)
/include
\
@ndbcluster_includes@
-I
$(top_srcdir)
/sql
\
-I
$(top_
srcdir)
/extra
-I
$(top_
builddir)
/include
LDADD
=
@CLIENT_EXTRA_LDFLAGS@ ../mysys/libmysys.a
\
../dbug/libdbug.a ../strings/libmystrings.a
BUILT_SOURCES
=
mysqld_error.h sql_state.h mysqld_ername.h
BUILT_SOURCES
=
$(top_builddir)
/include/mysqld_error.h
\
$(top_builddir)
/include/sql_state.h
\
$(top_builddir)
/include/mysqld_ername.h
pkginclude_HEADERS
=
$(BUILT_SOURCES)
created_sources
=
created_include_files
CLEANFILES
=
$(created_sources)
SUPERCLEANFILES
=
$(BUILT_SOURCES)
all
:
$(created_sources)
CLEANFILES
=
$(BUILT_SOURCES)
# This will build mysqld_error.h and sql_state.h
mysqld_error.h
:
created_include_files
mysqld_ername.h
:
created_include_files
sql_state.h
:
created_include_files
created_include_files
:
comp_err
$(top_builddir)
/extra/comp_err
--charset
=
$(srcdir)
/../sql/share/charsets
--out-dir
=
$(top_builddir)
/sql/share/
--header_file
=
$(top_builddir)
/extra/mysqld_error.h
--name_file
=
$(top_builddir)
/extra/mysqld_ername.h
--state_file
=
$(top_builddir)
/extra/sql_state.h
--in_file
=
$(srcdir)
/../sql/share/errmsg.txt
touch
created_include_files
$(top_builddir)/include/mysqld_error.h
:
comp_err
$(top_builddir)
/extra/comp_err
\
--charset
=
$(top_srcdir)
/sql/share/charsets
\
--out-dir
=
$(top_builddir)
/sql/share/
\
--header_file
=
$(top_builddir)
/include/mysqld_error.h
\
--name_file
=
$(top_builddir)
/include/mysqld_ername.h
\
--state_file
=
$(top_builddir)
/include/sql_state.h
\
--in_file
=
$(top_srcdir)
/sql/share/errmsg.txt
$(top_builddir)/include/mysqld_ername.h
:
$(top_builddir)/include/mysqld_error.h
$(top_builddir)/include/sql_state.h
:
$(top_builddir)/include/mysqld_error.h
bin_PROGRAMS
=
replace comp_err perror resolveip my_print_defaults
\
resolve_stack_dump mysql_waitpid
...
...
include/Makefile.am
View file @
af1e8cf7
...
...
@@ -33,15 +33,10 @@ noinst_HEADERS = config-win.h config-os2.h config-netware.h \
mysql_version.h.in my_handler.h my_time.h decimal.h
# mysql_version.h are generated
SUPERCLEANFILES
=
mysql_version.h my_config.h
CLEANFILES
=
mysql_version.h my_config.h readline
# Some include files that may be moved and patched by configure
DISTCLEANFILES
=
sched.h
$(SUPERCLEANFILES)
clean
:
$(RM)
-fr
readline
distclean
:
$(RM)
-fr
readline
DISTCLEANFILES
=
sched.h
$(CLEANFILES)
all-local
:
my_config.h
...
...
innobase/include/rem0rec.ic
View file @
af1e8cf7
...
...
@@ -526,7 +526,7 @@ bits of a record. (Only compact records have status bits.) */
UNIV_INLINE
ulint
rec_get_info_and_status_bits(
/*==============*/
/*==============
===========
*/
/* out: info bits */
rec_t* rec, /* in: physical record */
ibool comp) /* in: TRUE=compact page format */
...
...
@@ -550,7 +550,7 @@ bits of a record. (Only compact records have status bits.) */
UNIV_INLINE
void
rec_set_info_and_status_bits(
/*==============*/
/*==============
===========
*/
rec_t* rec, /* in: physical record */
ibool comp, /* in: TRUE=compact page format */
ulint bits) /* in: info bits */
...
...
innobase/include/trx0trx.h
View file @
af1e8cf7
...
...
@@ -383,7 +383,9 @@ struct trx_struct{
dulint
commit_lsn
;
/* lsn at the time of the commit */
ibool
dict_operation
;
/* TRUE if the trx is used to create
a table, create an index, or drop a
table */
table. This is a hint that the table
may need to be dropped in crash
recovery. */
dulint
table_id
;
/* table id if the preceding field is
TRUE */
/*------------------------------*/
...
...
innobase/row/row0mysql.c
View file @
af1e8cf7
...
...
@@ -2561,17 +2561,6 @@ do not allow the TRUNCATE. We also reserve the data dictionary latch. */
goto
funct_exit
;
}
if
(
table
->
n_mysql_handles_opened
>
1
)
{
ut_print_timestamp
(
stderr
);
fputs
(
" InnoDB: Warning: MySQL is trying to truncate table "
,
stderr
);
ut_print_name
(
stderr
,
trx
,
table
->
name
);
fputs
(
"
\n
"
"InnoDB: though there are still open handles to it.
\n
"
,
stderr
);
err
=
DB_ERROR
;
goto
funct_exit
;
}
/* TODO: could we replace the counter n_foreign_key_checks_running
with lock checks on the table? Acquire here an exclusive lock on the
table, and rewrite lock0lock.c and the lock wait in srv0srv.c so that
...
...
@@ -2594,7 +2583,6 @@ fputs(" InnoDB: Warning: MySQL is trying to truncate table ", stderr);
lock_reset_all_on_table
(
table
);
trx
->
dict_operation
=
TRUE
;
trx
->
table_id
=
table
->
id
;
/* scan SYS_INDEXES for all indexes of the table */
...
...
libmysql/Makefile.am
View file @
af1e8cf7
...
...
@@ -24,7 +24,7 @@ target = libmysqlclient.la
target_defs
=
-DUNDEF_THREADS_HACK
-DDONT_USE_RAID
@LIB_EXTRA_CCFLAGS@
LIBS
=
@CLIENT_LIBS@
INCLUDES
=
-I
$(top_srcdir)
/include
$(openssl_includes)
@ZLIB_INCLUDES@
\
-I
$(top_
srcdir)
/extra
-I
$(top_
builddir)
/include
include
$(srcdir)/Makefile.shared
...
...
libmysql_r/Makefile.am
View file @
af1e8cf7
...
...
@@ -26,7 +26,7 @@ LIBS = @LIBS@ @ZLIB_LIBS@ @openssl_libs@
INCLUDES
=
@MT_INCLUDES@
\
-I
$(top_srcdir)
/include
$(openssl_includes)
@ZLIB_INCLUDES@
\
-I
$(top_
srcdir)
/extra
-I
$(top_
builddir)
/include
## automake barfs if you don't use $(srcdir) or $(top_srcdir) in include
include
$(top_srcdir)/libmysql/Makefile.shared
...
...
libmysqld/Makefile.am
View file @
af1e8cf7
...
...
@@ -28,7 +28,7 @@ DEFS = -DEMBEDDED_LIBRARY -DMYSQL_SERVER \
INCLUDES
=
@MT_INCLUDES@ @bdb_includes@
-I
$(top_srcdir)
/include
\
-I
$(top_srcdir)
/sql
-I
$(top_srcdir)
/sql/examples
\
-I
$(top_srcdir)
/regex
\
-I
$(top_
srcdir)
/extra
\
-I
$(top_
builddir)
/include
\
$(openssl_includes)
@ZLIB_INCLUDES@
noinst_LIBRARIES
=
libmysqld_int.a
...
...
libmysqld/examples/Makefile.am
View file @
af1e8cf7
noinst_PROGRAMS
=
mysql
bin_PROGRAMS
=
mysqltest_embedded mysql_client_test_embedded
client_sources
=
$(mysqltest_embedded_SOURCES)
$(mysql_SOURCES)
tests_sources
=
$(mysql_client_test_embedded_SOURCES)
noinst_PROGRAMS
=
mysql
bin_PROGRAMS
=
mysqltest_embedded mysql_client_test_embedded
client_sources
=
$(mysqltest_embedded_SOURCES)
$(mysql_SOURCES)
tests_sources
=
$(mysql_client_test_embedded_SOURCES)
CLEANFILES
=
$(client_sources)
$(tests_sources)
link_sources
:
for
f
in
$(client_sources)
;
do
\
...
...
@@ -16,7 +17,7 @@ link_sources:
DEFS
=
-DEMBEDDED_LIBRARY
INCLUDES
=
@MT_INCLUDES@
-I
$(top_srcdir)
/include
-I
$(srcdir)
\
-I
$(top_srcdir)
-I
$(top_srcdir)
/client
-I
$(top_srcdir)
/regex
\
-I
$(top_
srcdir)
/extra
$(openssl_includes)
-I
$(top_
builddir)
/include
$(openssl_includes)
LIBS
=
@LIBS@ @WRAPLIBS@ @CLIENT_LIBS@
LDADD
=
@CLIENT_EXTRA_LDFLAGS@ ../libmysqld.a @innodb_system_libs@ @LIBDL@
$(CXXLDFLAGS)
...
...
@@ -31,9 +32,5 @@ mysql_LDADD = @readline_link@ @TERMCAP_LIB@ $(LDADD)
mysql_client_test_embedded_LINK
=
$(CXXLINK)
mysql_client_test_embedded_SOURCES
=
mysql_client_test.c
clean
:
rm
-f
$(client_sources)
rm
-f
$(tests_sources)
# Don't update the files from bitkeeper
%
::
SCCS/s.%
mysql-test/r/ndb_index_ordered.result
View file @
af1e8cf7
...
...
@@ -432,16 +432,16 @@ index(ye),
index(ti),
index(ts)
) engine=ndb;
insert into t1 (pk,dt,da,ye,ti) values
(1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59'),
(2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59'),
(3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00'),
(4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'),
(5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06'),
(6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06'),
(7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10'),
(8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'),
(9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59');
insert into t1 (pk,dt,da,ye,ti
,ts
) values
(1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59'
, '2001-01-01 23:00:59'
),
(2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59'
, '2001-01-01 13:00:59'
),
(3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00'
, '2001-01-01 00:00:00'
),
(4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'
, '2001-01-01 00:00:00'
),
(5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06'
, '2001-01-01 06:06:06'
),
(6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06'
, '2001-01-01 06:06:06'
),
(7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10'
, '2001-01-01 10:11:10'
),
(8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'
, '2001-01-01 10:11:11'
),
(9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59'
, '2001-01-01 23:59:59'
);
select count(*)-9 from t1 use index (dt) where dt > '1900-01-01 00:00:00';
count(*)-9
0
...
...
@@ -529,6 +529,30 @@ count(*)-8
select count(*)-9 from t1 use index (ti) where ti <= '23:59:59';
count(*)-9
0
select count(*)-9 from t1 use index (ts) where ts >= '2001-01-01 00:00:00';
count(*)-9
0
select count(*)-7 from t1 use index (ts) where ts > '2001-01-01 00:00:00';
count(*)-7
0
select count(*)-7 from t1 use index (ts) where ts > '2001-01-01 05:05:05';
count(*)-7
0
select count(*)-5 from t1 use index (ts) where ts > '2001-01-01 06:06:06';
count(*)-5
0
select count(*)-5 from t1 use index (ts) where ts < '2001-01-01 10:11:11';
count(*)-5
0
select count(*)-6 from t1 use index (ts) where ts <= '2001-01-01 10:11:11';
count(*)-6
0
select count(*)-8 from t1 use index (ts) where ts < '2001-01-01 23:59:59';
count(*)-8
0
select count(*)-9 from t1 use index (ts) where ts <= '2001-01-01 23:59:59';
count(*)-9
0
drop table t1;
create table t1(a int primary key, b int not null, index(b));
insert into t1 values (1,1), (2,2);
...
...
mysql-test/t/ndb_index_ordered.test
View file @
af1e8cf7
...
...
@@ -220,16 +220,16 @@ create table t1 (
index
(
ts
)
)
engine
=
ndb
;
insert
into
t1
(
pk
,
dt
,
da
,
ye
,
ti
)
values
(
1
,
'1901-05-05 23:00:59'
,
'1901-05-05'
,
'1901'
,
'23:00:59'
),
(
2
,
'1912-09-05 13:00:59'
,
'1912-09-05'
,
'1912'
,
'13:00:59'
),
(
3
,
'1945-12-31 00:00:00'
,
'1945-12-31'
,
'1945'
,
'00:00:00'
),
(
4
,
'1955-12-31 00:00:00'
,
'1955-12-31'
,
'1955'
,
'00:00:00'
),
(
5
,
'1963-06-06 06:06:06'
,
'1963-06-06'
,
'1963'
,
'06:06:06'
),
(
6
,
'1993-06-06 06:06:06'
,
'1993-06-06'
,
'1993'
,
'06:06:06'
),
(
7
,
'2001-01-01 10:11:10'
,
'2001-01-01'
,
'2001'
,
'10:11:10'
),
(
8
,
'2001-01-01 10:11:11'
,
'2001-01-01'
,
'2001'
,
'10:11:11'
),
(
9
,
'2005-01-31 23:59:59'
,
'2005-01-31'
,
'2005'
,
'23:59:59'
);
insert
into
t1
(
pk
,
dt
,
da
,
ye
,
ti
,
ts
)
values
(
1
,
'1901-05-05 23:00:59'
,
'1901-05-05'
,
'1901'
,
'23:00:59'
,
'2001-01-01 23:00:59'
),
(
2
,
'1912-09-05 13:00:59'
,
'1912-09-05'
,
'1912'
,
'13:00:59'
,
'2001-01-01 13:00:59'
),
(
3
,
'1945-12-31 00:00:00'
,
'1945-12-31'
,
'1945'
,
'00:00:00'
,
'2001-01-01 00:00:00'
),
(
4
,
'1955-12-31 00:00:00'
,
'1955-12-31'
,
'1955'
,
'00:00:00'
,
'2001-01-01 00:00:00'
),
(
5
,
'1963-06-06 06:06:06'
,
'1963-06-06'
,
'1963'
,
'06:06:06'
,
'2001-01-01 06:06:06'
),
(
6
,
'1993-06-06 06:06:06'
,
'1993-06-06'
,
'1993'
,
'06:06:06'
,
'2001-01-01 06:06:06'
),
(
7
,
'2001-01-01 10:11:10'
,
'2001-01-01'
,
'2001'
,
'10:11:10'
,
'2001-01-01 10:11:10'
),
(
8
,
'2001-01-01 10:11:11'
,
'2001-01-01'
,
'2001'
,
'10:11:11'
,
'2001-01-01 10:11:11'
),
(
9
,
'2005-01-31 23:59:59'
,
'2005-01-31'
,
'2005'
,
'23:59:59'
,
'2001-01-01 23:59:59'
);
# datetime
select
count
(
*
)
-
9
from
t1
use
index
(dt) where dt > '1900-01-01 00:00:00'
;
...
...
@@ -268,6 +268,16 @@ select count(*)-6 from t1 use index (ti) where ti <= '10:11:11';
select
count
(
*
)
-
8
from
t1
use
index
(ti) where ti < '23:59:59'
;
select
count
(
*
)
-
9
from
t1
use
index
(ti) where ti <= '23:59:59'
;
# timestamp
select
count
(
*
)
-
9
from
t1
use
index
(ts) where ts >= '2001-01-01 00:00:00'
;
select
count
(
*
)
-
7
from
t1
use
index
(ts) where ts > '2001-01-01 00:00:00'
;
select
count
(
*
)
-
7
from
t1
use
index
(ts) where ts > '2001-01-01 05:05:05'
;
select
count
(
*
)
-
5
from
t1
use
index
(ts) where ts > '2001-01-01 06:06:06'
;
select
count
(
*
)
-
5
from
t1
use
index
(ts) where ts < '2001-01-01 10:11:11'
;
select
count
(
*
)
-
6
from
t1
use
index
(ts) where ts <= '2001-01-01 10:11:11'
;
select
count
(
*
)
-
8
from
t1
use
index
(ts) where ts < '2001-01-01 23:59:59'
;
select
count
(
*
)
-
9
from
t1
use
index
(ts) where ts <= '2001-01-01 23:59:59'
;
drop
table
t1
;
# bug#7798
...
...
ndb/docs/Makefile.am
View file @
af1e8cf7
...
...
@@ -9,7 +9,7 @@ DOXYOUT = .doxyout
NDB_RELEASE
=
@NDB_VERSION_MAJOR@.@NDB_VERSION_MINOR@.@NDB_VERSION_BUILD@-@NDB_VERSION_STATUS@
clean
:
clean
-local
:
rm
-rf
ndbapi.pdf ndbapi.html mgmapi.pdf mgmapi.html
rm
-rf
$(DOXYTMP)
$(DOXYOUT)
...
...
ndb/include/kernel/signaldata/DictTabInfo.hpp
View file @
af1e8cf7
...
...
@@ -276,7 +276,9 @@ public:
ExtBit
=
NdbSqlUtil
::
Type
::
Bit
,
ExtLongvarchar
=
NdbSqlUtil
::
Type
::
Longvarchar
,
ExtLongvarbinary
=
NdbSqlUtil
::
Type
::
Longvarbinary
,
ExtTime
=
NdbSqlUtil
::
Type
::
Time
ExtTime
=
NdbSqlUtil
::
Type
::
Time
,
ExtYear
=
NdbSqlUtil
::
Type
::
Year
,
ExtTimestamp
=
NdbSqlUtil
::
Type
::
Timestamp
};
// Attribute data interpretation
...
...
@@ -389,6 +391,14 @@ public:
AttributeSize
=
DictTabInfo
::
an8Bit
;
AttributeArraySize
=
3
*
AttributeExtLength
;
break
;
case
DictTabInfo
:
:
ExtYear
:
AttributeSize
=
DictTabInfo
::
an8Bit
;
AttributeArraySize
=
1
*
AttributeExtLength
;
break
;
case
DictTabInfo
:
:
ExtTimestamp
:
AttributeSize
=
DictTabInfo
::
an8Bit
;
AttributeArraySize
=
4
*
AttributeExtLength
;
break
;
default:
return
false
;
};
...
...
ndb/include/ndb_constants.h
View file @
af1e8cf7
...
...
@@ -61,7 +61,9 @@
#define NDB_TYPE_LONG_VARCHAR 23
#define NDB_TYPE_LONG_VARBINARY 24
#define NDB_TYPE_TIME 25
#define NDB_TYPE_YEAR 26
#define NDB_TYPE_TIMESTAMP 27
#define NDB_TYPE_MAX 2
6
#define NDB_TYPE_MAX 2
8
#endif
ndb/include/ndbapi/NdbDictionary.hpp
View file @
af1e8cf7
...
...
@@ -196,7 +196,9 @@ public:
Bit
=
NDB_TYPE_BIT
,
///< Bit, length specifies no of bits
Longvarchar
=
NDB_TYPE_LONG_VARCHAR
,
///< Length bytes: 2, little-endian
Longvarbinary
=
NDB_TYPE_LONG_VARBINARY
,
///< Length bytes: 2, little-endian
Time
=
NDB_TYPE_TIME
///< Time without date
Time
=
NDB_TYPE_TIME
,
///< Time without date
Year
=
NDB_TYPE_YEAR
,
///< Year 1901-2155 (1 byte)
Timestamp
=
NDB_TYPE_TIMESTAMP
///< Unix time
};
/**
...
...
ndb/include/ndbapi/NdbScanFilter.hpp
View file @
af1e8cf7
...
...
@@ -53,7 +53,7 @@ public:
COND_GE
=
2
,
///< upper bound
COND_GT
=
3
,
///< upper bound, strict
COND_EQ
=
4
,
///< equality
COND_NE
=
5
COND_NE
=
5
///< not equal
};
/**
...
...
ndb/include/ndbapi/ndb_opt_defaults.h
View file @
af1e8cf7
...
...
@@ -17,11 +17,7 @@
#ifndef NDB_OPT_DEFAULTS_H
#define NDB_OPT_DEFAULTS_H
#ifdef SIGRTMIN
#define OPT_NDB_SHM_SIGNUM_DEFAULT SIGRTMIN+2
#else
#define OPT_NDB_SHM_SIGNUM_DEFAULT 0
#endif
#define OPT_NDB_SHM_DEFAULT 0
#endif
ndb/include/util/NdbSqlUtil.hpp
View file @
af1e8cf7
...
...
@@ -92,7 +92,9 @@ public:
Bit
=
NDB_TYPE_BIT
,
Longvarchar
=
NDB_TYPE_LONG_VARCHAR
,
Longvarbinary
=
NDB_TYPE_LONG_VARBINARY
,
Time
=
NDB_TYPE_TIME
Time
=
NDB_TYPE_TIME
,
Year
=
NDB_TYPE_YEAR
,
Timestamp
=
NDB_TYPE_TIMESTAMP
};
Enum
m_typeId
;
// redundant
Cmp
*
m_cmp
;
// comparison method
...
...
@@ -161,6 +163,8 @@ private:
static
Cmp
cmpLongvarchar
;
static
Cmp
cmpLongvarbinary
;
static
Cmp
cmpTime
;
static
Cmp
cmpYear
;
static
Cmp
cmpTimestamp
;
};
#endif
ndb/src/common/util/NdbSqlUtil.cpp
View file @
af1e8cf7
...
...
@@ -179,6 +179,14 @@ NdbSqlUtil::m_typeList[] = {
{
Type
::
Time
,
cmpTime
},
{
Type
::
Year
,
cmpYear
},
{
Type
::
Timestamp
,
cmpTimestamp
}
};
...
...
@@ -670,6 +678,40 @@ NdbSqlUtil::cmpLongvarbinary(const void* info, const void* p1, unsigned n1, cons
return
CmpUnknown
;
}
int
NdbSqlUtil
::
cmpYear
(
const
void
*
info
,
const
void
*
p1
,
unsigned
n1
,
const
void
*
p2
,
unsigned
n2
,
bool
full
)
{
if
(
n2
>=
sizeof
(
Uint8
))
{
Uint8
v1
,
v2
;
memcpy
(
&
v1
,
p1
,
sizeof
(
Uint8
));
memcpy
(
&
v2
,
p2
,
sizeof
(
Uint8
));
if
(
v1
<
v2
)
return
-
1
;
if
(
v1
>
v2
)
return
+
1
;
return
0
;
}
assert
(
!
full
);
return
CmpUnknown
;
}
int
NdbSqlUtil
::
cmpTimestamp
(
const
void
*
info
,
const
void
*
p1
,
unsigned
n1
,
const
void
*
p2
,
unsigned
n2
,
bool
full
)
{
if
(
n2
>=
sizeof
(
Uint32
))
{
Uint32
v1
,
v2
;
memcpy
(
&
v1
,
p1
,
sizeof
(
Uint32
));
memcpy
(
&
v2
,
p2
,
sizeof
(
Uint32
));
if
(
v1
<
v2
)
return
-
1
;
if
(
v1
>
v2
)
return
+
1
;
return
0
;
}
assert
(
!
full
);
return
CmpUnknown
;
}
// check charset
bool
...
...
ndb/src/ndbapi/NdbDictionary.cpp
View file @
af1e8cf7
...
...
@@ -980,6 +980,12 @@ operator<<(NdbOut& out, const NdbDictionary::Column& col)
case
NdbDictionary
:
:
Column
::
Time
:
out
<<
"Time"
;
break
;
case
NdbDictionary
:
:
Column
::
Year
:
out
<<
"Year"
;
break
;
case
NdbDictionary
:
:
Column
::
Timestamp
:
out
<<
"Timestamp"
;
break
;
case
NdbDictionary
:
:
Column
::
Undefined
:
out
<<
"Undefined"
;
break
;
...
...
ndb/src/ndbapi/NdbDictionaryImpl.cpp
View file @
af1e8cf7
...
...
@@ -144,6 +144,8 @@ NdbColumnImpl::init(Type t)
m_cs
=
default_cs
;
break
;
case
Time
:
case
Year
:
case
Timestamp
:
m_precision
=
0
;
m_scale
=
0
;
m_length
=
1
;
...
...
ndb/src/ndbapi/NdbRecAttr.cpp
View file @
af1e8cf7
...
...
@@ -178,10 +178,11 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
return
out
;
}
if
(
r
.
arraySize
()
>
1
)
uint
length
=
r
.
getColumn
()
->
getLength
();
if
(
length
>
1
)
out
<<
"["
;
for
(
Uint32
j
=
0
;
j
<
r
.
arraySize
()
;
j
++
)
for
(
Uint32
j
=
0
;
j
<
length
;
j
++
)
{
if
(
j
>
0
)
out
<<
" "
;
...
...
@@ -221,13 +222,13 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
break
;
case
NdbDictionary
:
:
Column
::
Char
:
ndbrecattr_print_string
(
out
,
"Char"
,
r
.
aRef
(),
r
.
arraySize
());
j
=
r
.
arraySize
()
;
j
=
length
;
break
;
case
NdbDictionary
:
:
Column
::
Varchar
:
{
unsigned
len
=
*
(
const
unsigned
char
*
)
r
.
aRef
();
ndbrecattr_print_string
(
out
,
"Varchar"
,
r
.
aRef
()
+
1
,
len
);
j
=
r
.
arraySize
()
;
j
=
length
;
}
break
;
case
NdbDictionary
:
:
Column
::
Float
:
...
...
@@ -236,6 +237,86 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
case
NdbDictionary
:
:
Column
::
Double
:
out
<<
r
.
double_value
();
break
;
// for dates cut-and-paste from field.cc
case
NdbDictionary
:
:
Column
::
Datetime
:
{
ulonglong
tmp
=
r
.
u_64_value
();
long
part1
,
part2
,
part3
;
part1
=
(
long
)
(
tmp
/
LL
(
1000000
));
part2
=
(
long
)
(
tmp
-
(
ulonglong
)
part1
*
LL
(
1000000
));
char
buf
[
40
];
char
*
pos
=
(
char
*
)
buf
+
19
;
*
pos
--=
0
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
(
part2
%
10
));
part2
/=
10
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
(
part2
%
10
));
part3
=
(
int
)
(
part2
/
10
);
*
pos
--=
':'
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
(
part3
%
10
));
part3
/=
10
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
(
part3
%
10
));
part3
/=
10
;
*
pos
--=
':'
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
(
part3
%
10
));
part3
/=
10
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
part3
);
*
pos
--=
'/'
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
(
part1
%
10
));
part1
/=
10
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
(
part1
%
10
));
part1
/=
10
;
*
pos
--=
'-'
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
(
part1
%
10
));
part1
/=
10
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
(
part1
%
10
));
part3
=
(
int
)
(
part1
/
10
);
*
pos
--=
'-'
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
(
part3
%
10
));
part3
/=
10
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
(
part3
%
10
));
part3
/=
10
;
*
pos
--=
(
char
)
(
'0'
+
(
char
)
(
part3
%
10
));
part3
/=
10
;
*
pos
=
(
char
)
(
'0'
+
(
char
)
part3
);
out
<<
buf
;
}
break
;
case
NdbDictionary
:
:
Column
::
Date
:
{
uint32
tmp
=
(
uint32
)
uint3korr
(
r
.
aRef
());
int
part
;
char
buf
[
40
];
char
*
pos
=
(
char
*
)
buf
+
10
;
*
pos
--=
0
;
part
=
(
int
)
(
tmp
&
31
);
*
pos
--=
(
char
)
(
'0'
+
part
%
10
);
*
pos
--=
(
char
)
(
'0'
+
part
/
10
);
*
pos
--=
'-'
;
part
=
(
int
)
(
tmp
>>
5
&
15
);
*
pos
--=
(
char
)
(
'0'
+
part
%
10
);
*
pos
--=
(
char
)
(
'0'
+
part
/
10
);
*
pos
--=
'-'
;
part
=
(
int
)
(
tmp
>>
9
);
*
pos
--=
(
char
)
(
'0'
+
part
%
10
);
part
/=
10
;
*
pos
--=
(
char
)
(
'0'
+
part
%
10
);
part
/=
10
;
*
pos
--=
(
char
)
(
'0'
+
part
%
10
);
part
/=
10
;
*
pos
=
(
char
)
(
'0'
+
part
);
out
<<
buf
;
}
break
;
case
NdbDictionary
:
:
Column
::
Time
:
{
long
tmp
=
(
long
)
sint3korr
(
r
.
aRef
());
int
hour
=
(
uint
)
(
tmp
/
10000
);
int
minute
=
(
uint
)
(
tmp
/
100
%
100
);
int
second
=
(
uint
)
(
tmp
%
100
);
char
buf
[
40
];
sprintf
(
buf
,
"%02d:%02d:%02d"
,
hour
,
minute
,
second
);
out
<<
buf
;
}
break
;
case
NdbDictionary
:
:
Column
::
Year
:
{
uint
year
=
1900
+
r
.
u_char_value
();
char
buf
[
40
];
sprintf
(
buf
,
"%04d"
,
year
);
out
<<
buf
;
}
break
;
case
NdbDictionary
:
:
Column
::
Timestamp
:
{
time_t
time
=
r
.
u_32_value
();
out
<<
(
uint
)
time
;
}
break
;
case
NdbDictionary
:
:
Column
::
Blob
:
{
const
NdbBlob
::
Head
*
h
=
(
const
NdbBlob
::
Head
*
)
r
.
aRef
();
...
...
@@ -244,7 +325,7 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
unsigned
n
=
r
.
arraySize
()
-
sizeof
(
*
h
);
for
(
unsigned
k
=
0
;
k
<
n
&&
k
<
h
->
length
;
k
++
)
out
.
print
(
"%02X"
,
(
int
)
p
[
k
]);
j
=
r
.
arraySize
()
;
j
=
length
;
}
break
;
case
NdbDictionary
:
:
Column
::
Text
:
...
...
@@ -255,26 +336,26 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
unsigned
n
=
r
.
arraySize
()
-
sizeof
(
*
h
);
for
(
unsigned
k
=
0
;
k
<
n
&&
k
<
h
->
length
;
k
++
)
out
.
print
(
"%c"
,
(
int
)
p
[
k
]);
j
=
r
.
arraySize
()
;
j
=
length
;
}
break
;
case
NdbDictionary
:
:
Column
::
Longvarchar
:
{
unsigned
len
=
uint2korr
(
r
.
aRef
());
ndbrecattr_print_string
(
out
,
"Longvarchar"
,
r
.
aRef
()
+
2
,
len
);
j
=
r
.
arraySize
()
;
j
=
length
;
}
break
;
default:
/* no print functions for the rest, just print type */
out
<<
(
int
)
r
.
getType
();
j
=
r
.
arraySize
()
;
j
=
length
;
if
(
j
>
1
)
out
<<
" "
<<
j
<<
" times"
;
break
;
}
}
if
(
r
.
arraySize
()
>
1
)
if
(
length
>
1
)
{
out
<<
"]"
;
}
...
...
ndb/test/include/NdbSchemaOp.hpp
View file @
af1e8cf7
...
...
@@ -575,10 +575,6 @@ convertColumnTypeToAttrType(NdbDictionary::Column::Type _type)
case
NdbDictionary
:
:
Column
::
Binary
:
case
NdbDictionary
:
:
Column
::
Varbinary
:
return
String
;
case
NdbDictionary
:
:
Column
::
Datetime
:
case
NdbDictionary
:
:
Column
::
Date
:
case
NdbDictionary
:
:
Column
::
Time
:
case
NdbDictionary
:
:
Column
::
Undefined
:
default:
return
NoAttrTypeDef
;
}
...
...
scripts/Makefile.am
View file @
af1e8cf7
...
...
@@ -90,7 +90,7 @@ CLEANFILES = @server_scripts@ \
fill_help_tables
\
mysql_create_system_tables
SUPERCLEANFILES
=
mysqlbug
DISTCLEANFILES
=
mysqlbug
# We want the right version and configure comand line in mysqlbug
mysqlbug
:
${top_builddir}/config.status mysqlbug.sh
...
...
server-tools/instance-manager/Makefile.am
View file @
af1e8cf7
...
...
@@ -14,7 +14,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
INCLUDES
=
-I
$(top_srcdir)
/include
-I
$(top_
srcdir)
/extra
INCLUDES
=
-I
$(top_srcdir)
/include
-I
$(top_
builddir)
/include
DEFS
=
-DMYSQL_INSTANCE_MANAGER
-DMYSQL_SERVER
...
...
sql/Makefile.am
View file @
af1e8cf7
...
...
@@ -22,7 +22,7 @@ MYSQLBASEdir= $(prefix)
INCLUDES
=
@MT_INCLUDES@ @ZLIB_INCLUDES@
\
@bdb_includes@ @innodb_includes@ @ndbcluster_includes@
\
-I
$(top_srcdir)
/include
-I
$(top_srcdir)
/regex
\
-I
$(srcdir)
$(openssl_includes)
-I
$(top_
srcdir)
/extra
-I
$(srcdir)
$(openssl_includes)
-I
$(top_
builddir)
/include
WRAPLIBS
=
@WRAPLIBS@
SUBDIRS
=
share
libexec_PROGRAMS
=
mysqld
...
...
@@ -115,6 +115,7 @@ DEFS = -DMYSQL_SERVER \
# Don't put lex_hash.h in BUILT_SOURCES as this will give infinite recursion
BUILT_SOURCES
=
sql_yacc.cc sql_yacc.h
EXTRA_DIST
=
udf_example.cc
$(BUILT_SOURCES)
DISTCLEANFILES
=
lex_hash.h
AM_YFLAGS
=
-d
mysql_tzinfo_to_sql.cc
:
...
...
@@ -160,8 +161,5 @@ sql_lex.o: lex_hash.h
udf_example.so
:
udf_example.cc
$(CXXCOMPILE)
-shared
-o
$@
$<
distclean
:
rm
-f
lex_hash.h
# Don't update the files from bitkeeper
%
::
SCCS/s.%
sql/ha_innodb.cc
View file @
af1e8cf7
...
...
@@ -5787,11 +5787,12 @@ ha_innobase::store_lock(
if
(
lock_type
!=
TL_IGNORE
&&
lock
.
type
==
TL_UNLOCK
)
{
/* If we are not doing a LOCK TABLE or DISCARD/IMPORT
TABLESPACE, then allow multiple writers */
TABLESPACE
or TRUNCATE TABLE
, then allow multiple writers */
if
((
lock_type
>=
TL_WRITE_CONCURRENT_INSERT
&&
lock_type
<=
TL_WRITE
)
&&
!
thd
->
in_lock_tables
&&
!
thd
->
tablespace_op
)
{
&&
!
thd
->
tablespace_op
&&
thd
->
lex
->
sql_command
!=
SQLCOM_TRUNCATE
)
{
lock_type
=
TL_WRITE_ALLOW_WRITE
;
}
...
...
sql/ha_ndbcluster.cc
View file @
af1e8cf7
...
...
@@ -3472,14 +3472,14 @@ static int create_ndb_column(NDBCOL &col,
col
.
setLength
(
1
);
break
;
// Date types
case
MYSQL_TYPE_TIMESTAMP
:
col
.
setType
(
NDBCOL
::
Unsigned
);
col
.
setLength
(
1
);
break
;
case
MYSQL_TYPE_DATETIME
:
col
.
setType
(
NDBCOL
::
Datetime
);
col
.
setLength
(
1
);
break
;
case
MYSQL_TYPE_DATE
:
// ?
col
.
setType
(
NDBCOL
::
Char
);
col
.
setLength
(
field
->
pack_length
());
break
;
case
MYSQL_TYPE_NEWDATE
:
col
.
setType
(
NDBCOL
::
Date
);
col
.
setLength
(
1
);
...
...
@@ -3488,10 +3488,13 @@ static int create_ndb_column(NDBCOL &col,
col
.
setType
(
NDBCOL
::
Time
);
col
.
setLength
(
1
);
break
;
case
MYSQL_TYPE_DATE
:
// ?
case
MYSQL_TYPE_YEAR
:
col
.
setType
(
NDBCOL
::
Char
);
col
.
setLength
(
field
->
pack_length
());
case
MYSQL_TYPE_YEAR
:
col
.
setType
(
NDBCOL
::
Year
);
col
.
setLength
(
1
);
break
;
case
MYSQL_TYPE_TIMESTAMP
:
col
.
setType
(
NDBCOL
::
Timestamp
);
col
.
setLength
(
1
);
break
;
// Char types
case
MYSQL_TYPE_STRING
:
...
...
sql/share/Makefile.am
View file @
af1e8cf7
...
...
@@ -14,10 +14,11 @@ dist-hook:
all
:
english/errmsg.sys
# Use the english errmsg.sys as a flag that all errmsg.sys needs to be
# created. Normally these are created by extra/Makefile
.am
# created. Normally these are created by extra/Makefile
english/errmsg.sys
:
errmsg.txt
$(top_builddir)
/extra/comp_err
--charset
=
$(srcdir)
/charsets
--out-dir
=
$(top_builddir)
/sql/share/
--header_file
=
$(top_builddir)
/extra/mysqld_error.h
--state_file
=
$(top_builddir)
/extra/sql_state.h
--in_file
=
errmsg.txt
rm
$(top_builddir)
/include/mysqld_error.h
(
cd
$(top_builddir)
/extra
&&
$(MAKE)
)
install-data-local
:
for
lang
in
@AVAILABLE_LANGUAGES@
;
\
...
...
sql/sql_show.cc
View file @
af1e8cf7
...
...
@@ -3191,9 +3191,10 @@ int mysql_schema_table(THD *thd, LEX *lex, TABLE_LIST *table_list)
views
working correctly
*/
table
->
alias_name_used
=
my_strcasecmp
(
table_alias_charset
,
table_list
->
schema_table_name
,
table_list
->
alias
);
if
(
table_list
->
schema_table_name
)
table
->
alias_name_used
=
my_strcasecmp
(
table_alias_charset
,
table_list
->
schema_table_name
,
table_list
->
alias
);
table_list
->
table_name
=
(
char
*
)
table
->
s
->
table_name
;
table_list
->
table
=
table
;
table
->
next
=
thd
->
derived_tables
;
...
...
tools/Makefile.am
View file @
af1e8cf7
...
...
@@ -16,7 +16,7 @@
# Process this file with automake to create Makefile.in
INCLUDES
=
@MT_INCLUDES@
-I
$(top_srcdir)
/include
$(openssl_includes)
\
-I
$(top_
srcdir)
/extra
-I
$(top_
builddir)
/include
LDADD
=
@CLIENT_EXTRA_LDFLAGS@ @openssl_libs@
\
$(top_builddir)
/libmysql_r/libmysqlclient_r.la @ZLIB_LIBS@
bin_PROGRAMS
=
mysqlmanager
...
...
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