Commit da12c768 authored by unknown's avatar unknown

Give an error if you use a BLOB(X) where X > 255

Fixes for MIT pthreads


Docs/manual.texi:
  Update for MIT pthreads and sockets
configure.in:
  Fixed MIT pthreads to use sockets
myisam/mi_check.c:
  Portability fix
myisam/sort.c:
  Portability fix
sql/handler.h:
  Give an error if you use a BLOB(X) where X > 255
sql/mysqld.cc:
  Fixed MIT pthreads to use sockets
sql/sql_table.cc:
  Give an error if you use a BLOB(X) where X > 255
sql/table.cc:
  Fixed problem with BDB tables without keys
parent 94c93b9e
...@@ -267,7 +267,7 @@ System-specific Issues ...@@ -267,7 +267,7 @@ System-specific Issues
* HP-UX 10.20:: HP-UX 10.20 notes * HP-UX 10.20:: HP-UX 10.20 notes
* HP-UX 11.x:: HP-UX 11.x notes * HP-UX 11.x:: HP-UX 11.x notes
* Mac OS X:: Mac OS X notes * Mac OS X:: Mac OS X notes
* BEOS:: * BEOS::
Linux Notes (All Linux Versions) Linux Notes (All Linux Versions)
...@@ -278,7 +278,7 @@ Linux Notes (All Linux Versions) ...@@ -278,7 +278,7 @@ Linux Notes (All Linux Versions)
* Linux-Alpha:: Linux-Alpha notes * Linux-Alpha:: Linux-Alpha notes
* MKLinux:: MkLinux notes * MKLinux:: MkLinux notes
* Qube2:: Qube2 Linux notes * Qube2:: Qube2 Linux notes
* Linux-Ia64:: * Linux-Ia64::
BSD/OS Notes BSD/OS Notes
...@@ -295,7 +295,7 @@ Windows Notes ...@@ -295,7 +295,7 @@ Windows Notes
* Windows and SSH:: Connecting to a remote @strong{MySQL} from Windows with SSH * Windows and SSH:: Connecting to a remote @strong{MySQL} from Windows with SSH
* Windows symbolic links:: Splitting data across different disks under Win32 * Windows symbolic links:: Splitting data across different disks under Win32
* Windows compiling:: Compiling MySQL clients on Windows. * Windows compiling:: Compiling MySQL clients on Windows.
* Windows and BDB tables.:: * Windows and BDB tables.::
* Windows vs Unix:: @strong{MySQL}-Windows compared to Unix @strong{MySQL} * Windows vs Unix:: @strong{MySQL}-Windows compared to Unix @strong{MySQL}
Post-installation Setup and Testing Post-installation Setup and Testing
...@@ -454,18 +454,18 @@ Functions for Use in @code{SELECT} and @code{WHERE} Clauses ...@@ -454,18 +454,18 @@ Functions for Use in @code{SELECT} and @code{WHERE} Clauses
@code{SHOW} syntax (Get information about tables, columns,...) @code{SHOW} syntax (Get information about tables, columns,...)
* SHOW DATABASE INFO:: * SHOW DATABASE INFO::
* SHOW TABLE STATUS:: * SHOW TABLE STATUS::
* SHOW STATUS:: * SHOW STATUS::
* SHOW VARIABLES:: * SHOW VARIABLES::
* SHOW PROCESSLIST:: * SHOW PROCESSLIST::
* SHOW GRANTS:: * SHOW GRANTS::
* SHOW CREATE TABLE:: * SHOW CREATE TABLE::
MySQL table types MySQL table types
* MyISAM:: MyISAM tables * MyISAM:: MyISAM tables
* MERGE:: * MERGE:: MERGE tables
* ISAM:: ISAM tables * ISAM:: ISAM tables
* HEAP:: HEAP tables * HEAP:: HEAP tables
* BDB:: BDB or Berkeley_db tables * BDB:: BDB or Berkeley_db tables
...@@ -581,7 +581,7 @@ Speed of queries that access or update data ...@@ -581,7 +581,7 @@ Speed of queries that access or update data
* Estimating performance:: Estimating query performance * Estimating performance:: Estimating query performance
* SELECT speed:: Speed of @code{SELECT} queries * SELECT speed:: Speed of @code{SELECT} queries
* Where optimizations:: How MySQL optimizes @code{WHERE} clauses * Where optimizations:: How MySQL optimizes @code{WHERE} clauses
* DISTINCT optimization:: * DISTINCT optimization::
* LEFT JOIN optimization:: How MySQL optimizes @code{LEFT JOIN} * LEFT JOIN optimization:: How MySQL optimizes @code{LEFT JOIN}
* LIMIT optimization:: How MySQL optimizes @code{LIMIT} * LIMIT optimization:: How MySQL optimizes @code{LIMIT}
* Insert speed:: Speed of @code{INSERT} queries * Insert speed:: Speed of @code{INSERT} queries
...@@ -613,10 +613,10 @@ Using @code{myisamchk} for table maintenance and crash recovery ...@@ -613,10 +613,10 @@ Using @code{myisamchk} for table maintenance and crash recovery
@code{myisamchk} invocation syntax @code{myisamchk} invocation syntax
* myisamchk general options:: * myisamchk general options::
* myisamchk check options:: * myisamchk check options::
* myisamchk repair options:: * myisamchk repair options::
* myisamchk other options:: * myisamchk other options::
Using @code{myisamchk} for crash recovery Using @code{myisamchk} for crash recovery
...@@ -689,7 +689,7 @@ Some common errors when using MySQL ...@@ -689,7 +689,7 @@ Some common errors when using MySQL
* Packet too large:: @code{Packet too large} error * Packet too large:: @code{Packet too large} error
* Communication errors:: Communication errors / Aborted connection * Communication errors:: Communication errors / Aborted connection
* Full table:: @code{The table is full} error * Full table:: @code{The table is full} error
* Cannot create:: * Cannot create::
* Commands out of sync:: @code{Commands out of sync} error in client * Commands out of sync:: @code{Commands out of sync} error in client
* Ignoring user:: @code{Ignoring user} error * Ignoring user:: @code{Ignoring user} error
* Cannot find table:: @code{Table 'xxx' doesn't exist} error * Cannot find table:: @code{Table 'xxx' doesn't exist} error
...@@ -699,7 +699,7 @@ Solving some common problems with MySQL ...@@ -699,7 +699,7 @@ Solving some common problems with MySQL
* Log Replication:: Database replication with update log * Log Replication:: Database replication with update log
* Backup:: Database backups * Backup:: Database backups
* Update log:: The update log * Update log:: The update log
* Binary log:: * Binary log::
* Slow query log:: Log of slow queries * Slow query log:: Log of slow queries
* Multiple servers:: Running multiple @strong{MySQL} servers on the same machine * Multiple servers:: Running multiple @strong{MySQL} servers on the same machine
...@@ -813,6 +813,7 @@ MySQL change history ...@@ -813,6 +813,7 @@ MySQL change history
Changes in release 3.23.x (Recommended; beta) Changes in release 3.23.x (Recommended; beta)
* News-3.23.27::
* News-3.23.26:: Changes in release 3.23.26 * News-3.23.26:: Changes in release 3.23.26
* News-3.23.25:: Changes in release 3.23.25 * News-3.23.25:: Changes in release 3.23.25
* News-3.23.24:: Changes in release 3.23.24 * News-3.23.24:: Changes in release 3.23.24
...@@ -838,7 +839,7 @@ Changes in release 3.23.x (Recommended; beta) ...@@ -838,7 +839,7 @@ Changes in release 3.23.x (Recommended; beta)
* News-3.23.4:: Changes in release 3.23.4 * News-3.23.4:: Changes in release 3.23.4
* News-3.23.3:: Changes in release 3.23.3 * News-3.23.3:: Changes in release 3.23.3
* News-3.23.2:: Changes in release 3.23.2 * News-3.23.2:: Changes in release 3.23.2
* News-3.23.1:: * News-3.23.1:: Changes in release 3.23.1
* News-3.23.0:: Changes in release 3.23.0 * News-3.23.0:: Changes in release 3.23.0
Changes in release 3.22.x Changes in release 3.22.x
...@@ -952,7 +953,7 @@ Comments on porting to other systems ...@@ -952,7 +953,7 @@ Comments on porting to other systems
* Debugging server:: Debugging a @strong{MySQL} server * Debugging server:: Debugging a @strong{MySQL} server
* Debugging client:: Debugging a @strong{MySQL} client * Debugging client:: Debugging a @strong{MySQL} client
* The DBUG package:: The DBUG package * The DBUG package:: The DBUG package
* Locking methods:: * Locking methods::
* RTS-threads:: Comments about RTS threads * RTS-threads:: Comments about RTS threads
* Thread packages:: Differences between different thread packages * Thread packages:: Differences between different thread packages
...@@ -5884,16 +5885,6 @@ shell> ./configure --with-mit-threads ...@@ -5884,16 +5885,6 @@ shell> ./configure --with-mit-threads
Building in a non-source directory is not supported when using Building in a non-source directory is not supported when using
MIT-pthreads, because we want to minimize our changes to this code. MIT-pthreads, because we want to minimize our changes to this code.
@item
MIT-pthreads doesn't support the @code{AF_UNIX} protocol used to implement
UNIX sockets. This means that if you compile using MIT-pthreads, all
connections must be made using TCP/IP (which is a little slower). If you
find after building @strong{MySQL} that you cannot connect to the local
server, it may be that your client is attempting to connect to
@code{localhost} using a UNIX socket as the default. Try making a TCP/IP
connection with @code{mysql} by using a host option (@code{-h} or
@code{--host}) to specify the local host name explicitly.
@item @item
The checks that determine whether or not to use MIT-pthreads occur only The checks that determine whether or not to use MIT-pthreads occur only
during the part of the configuration process that deals with the server during the part of the configuration process that deals with the server
...@@ -6230,7 +6221,7 @@ distribution. ...@@ -6230,7 +6221,7 @@ distribution.
* HP-UX 10.20:: HP-UX 10.20 notes * HP-UX 10.20:: HP-UX 10.20 notes
* HP-UX 11.x:: HP-UX 11.x notes * HP-UX 11.x:: HP-UX 11.x notes
* Mac OS X:: Mac OS X notes * Mac OS X:: Mac OS X notes
* BEOS:: * BEOS::
@end menu @end menu
...@@ -6674,7 +6665,7 @@ CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE -DCONST=const - ...@@ -6674,7 +6665,7 @@ CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE -DCONST=const -
* Linux-Alpha:: Linux-Alpha notes * Linux-Alpha:: Linux-Alpha notes
* MKLinux:: MkLinux notes * MKLinux:: MkLinux notes
* Qube2:: Qube2 Linux notes * Qube2:: Qube2 Linux notes
* Linux-Ia64:: * Linux-Ia64::
@end menu @end menu
@node Linux-x86, Linux-RedHat50, Linux, Linux @node Linux-x86, Linux-RedHat50, Linux, Linux
...@@ -7732,7 +7723,7 @@ is also described in the @file{README} file that comes with the ...@@ -7732,7 +7723,7 @@ is also described in the @file{README} file that comes with the
* Windows and SSH:: Connecting to a remote @strong{MySQL} from Windows with SSH * Windows and SSH:: Connecting to a remote @strong{MySQL} from Windows with SSH
* Windows symbolic links:: Splitting data across different disks under Win32 * Windows symbolic links:: Splitting data across different disks under Win32
* Windows compiling:: Compiling MySQL clients on Windows. * Windows compiling:: Compiling MySQL clients on Windows.
* Windows and BDB tables.:: * Windows and BDB tables.::
* Windows vs Unix:: @strong{MySQL}-Windows compared to Unix @strong{MySQL} * Windows vs Unix:: @strong{MySQL}-Windows compared to Unix @strong{MySQL}
@end menu @end menu
...@@ -19531,13 +19522,13 @@ and @samp{_} wildcard characters. ...@@ -19531,13 +19522,13 @@ and @samp{_} wildcard characters.
@findex SHOW INDEX @findex SHOW INDEX
@findex SHOW KEYS @findex SHOW KEYS
@menu @menu
* SHOW DATABASE INFO:: * SHOW DATABASE INFO::
* SHOW TABLE STATUS:: * SHOW TABLE STATUS::
* SHOW STATUS:: * SHOW STATUS::
* SHOW VARIABLES:: * SHOW VARIABLES::
* SHOW PROCESSLIST:: * SHOW PROCESSLIST::
* SHOW GRANTS:: * SHOW GRANTS::
* SHOW CREATE TABLE:: * SHOW CREATE TABLE::
@end menu @end menu
@cindex displaying, information, @code{SHOW} @cindex displaying, information, @code{SHOW}
...@@ -21365,7 +21356,7 @@ of both worlds. ...@@ -21365,7 +21356,7 @@ of both worlds.
@menu @menu
* MyISAM:: MyISAM tables * MyISAM:: MyISAM tables
* MERGE:: MERGE tables * MERGE:: MERGE tables
* ISAM:: ISAM tables * ISAM:: ISAM tables
* HEAP:: HEAP tables * HEAP:: HEAP tables
* BDB:: BDB or Berkeley_db tables * BDB:: BDB or Berkeley_db tables
...@@ -26429,7 +26420,7 @@ great tool to find out if this is a problem with your query. ...@@ -26429,7 +26420,7 @@ great tool to find out if this is a problem with your query.
* Estimating performance:: Estimating query performance * Estimating performance:: Estimating query performance
* SELECT speed:: Speed of @code{SELECT} queries * SELECT speed:: Speed of @code{SELECT} queries
* Where optimizations:: How MySQL optimizes @code{WHERE} clauses * Where optimizations:: How MySQL optimizes @code{WHERE} clauses
* DISTINCT optimization:: * DISTINCT optimization::
* LEFT JOIN optimization:: How MySQL optimizes @code{LEFT JOIN} * LEFT JOIN optimization:: How MySQL optimizes @code{LEFT JOIN}
* LIMIT optimization:: How MySQL optimizes @code{LIMIT} * LIMIT optimization:: How MySQL optimizes @code{LIMIT}
* Insert speed:: Speed of @code{INSERT} queries * Insert speed:: Speed of @code{INSERT} queries
...@@ -28653,10 +28644,10 @@ shell> myisamchk /path/to/datadir/*/*.MYI ...@@ -28653,10 +28644,10 @@ shell> myisamchk /path/to/datadir/*/*.MYI
@code{myisamchk} supports the following options: @code{myisamchk} supports the following options:
@menu @menu
* myisamchk general options:: * myisamchk general options::
* myisamchk check options:: * myisamchk check options::
* myisamchk repair options:: * myisamchk repair options::
* myisamchk other options:: * myisamchk other options::
@end menu @end menu
@cindex options, @code{myisamchk} @cindex options, @code{myisamchk}
...@@ -31142,7 +31133,7 @@ sure that no other programs is using the dynamic libraries! ...@@ -31142,7 +31133,7 @@ sure that no other programs is using the dynamic libraries!
* Packet too large:: @code{Packet too large} error * Packet too large:: @code{Packet too large} error
* Communication errors:: Communication errors / Aborted connection * Communication errors:: Communication errors / Aborted connection
* Full table:: @code{The table is full} error * Full table:: @code{The table is full} error
* Cannot create:: * Cannot create::
* Commands out of sync:: @code{Commands out of sync} error in client * Commands out of sync:: @code{Commands out of sync} error in client
* Ignoring user:: @code{Ignoring user} error * Ignoring user:: @code{Ignoring user} error
* Cannot find table:: @code{Table 'xxx' doesn't exist} error * Cannot find table:: @code{Table 'xxx' doesn't exist} error
...@@ -32232,7 +32223,7 @@ Drop or rename @code{old_table} ...@@ -32232,7 +32223,7 @@ Drop or rename @code{old_table}
* Log Replication:: Database replication with update log * Log Replication:: Database replication with update log
* Backup:: Database backups * Backup:: Database backups
* Update log:: The update log * Update log:: The update log
* Binary log:: * Binary log::
* Slow query log:: Log of slow queries * Slow query log:: Log of slow queries
* Multiple servers:: Running multiple @strong{MySQL} servers on the same machine * Multiple servers:: Running multiple @strong{MySQL} servers on the same machine
@end menu @end menu
...@@ -38113,6 +38104,7 @@ version. The replication and BerkeleyDB code is still under development, ...@@ -38113,6 +38104,7 @@ version. The replication and BerkeleyDB code is still under development,
though, so 3.23 is not released as a stable version yet. though, so 3.23 is not released as a stable version yet.
@menu @menu
* News-3.23.27:: Changes in release 3.23.27
* News-3.23.26:: Changes in release 3.23.26 * News-3.23.26:: Changes in release 3.23.26
* News-3.23.25:: Changes in release 3.23.25 * News-3.23.25:: Changes in release 3.23.25
* News-3.23.24:: Changes in release 3.23.24 * News-3.23.24:: Changes in release 3.23.24
...@@ -38142,7 +38134,16 @@ though, so 3.23 is not released as a stable version yet. ...@@ -38142,7 +38134,16 @@ though, so 3.23 is not released as a stable version yet.
* News-3.23.0:: Changes in release 3.23.0 * News-3.23.0:: Changes in release 3.23.0
@end menu @end menu
@node News-3.23.26, News-3.23.25, News-3.23.x, News-3.23.x @node News-3.23.27, News-3.23.26, News-3.23.x, News-3.23.x
@appendixsubsec Changes in release 3.23.27
@itemize @bullet
@item
You can now have sockets even with @code{mit-pthreads}
@item
Small portability fixes
@end itemize
@node News-3.23.26, News-3.23.25, News-3.23.27, News-3.23.x
@appendixsubsec Changes in release 3.23.26 @appendixsubsec Changes in release 3.23.26
@itemize @bullet @itemize @bullet
@item @item
...@@ -42912,7 +42913,7 @@ will ensure that your thread installation has even a remote chance to work! ...@@ -42912,7 +42913,7 @@ will ensure that your thread installation has even a remote chance to work!
* Debugging server:: Debugging a @strong{MySQL} server * Debugging server:: Debugging a @strong{MySQL} server
* Debugging client:: Debugging a @strong{MySQL} client * Debugging client:: Debugging a @strong{MySQL} client
* The DBUG package:: The DBUG package * The DBUG package:: The DBUG package
* Locking methods:: * Locking methods::
* RTS-threads:: Comments about RTS threads * RTS-threads:: Comments about RTS threads
* Thread packages:: Differences between different thread packages * Thread packages:: Differences between different thread packages
@end menu @end menu
...@@ -1862,8 +1862,8 @@ AC_SUBST(server_scripts) ...@@ -1862,8 +1862,8 @@ AC_SUBST(server_scripts)
if test "$with_posix_threads" = "no" -o "$with_mit_threads" = "yes" if test "$with_posix_threads" = "no" -o "$with_mit_threads" = "yes"
then then
# MIT pthreads does not support connecting with unix sockets # MIT pthreads does now support connecting with unix sockets
AC_DEFINE(HAVE_THREADS_WITHOUT_SOCKETS) # AC_DEFINE(HAVE_THREADS_WITHOUT_SOCKETS)
fi fi
# Some usefull subst # Some usefull subst
......
...@@ -192,7 +192,7 @@ int chk_del(MI_CHECK *param, register MI_INFO *info, uint test_flag) ...@@ -192,7 +192,7 @@ int chk_del(MI_CHECK *param, register MI_INFO *info, uint test_flag)
} }
DBUG_RETURN(0); DBUG_RETURN(0);
wrong: wrong:
param->retry_without_quick=1; // Don't use quick repair param->retry_without_quick=1; /* Don't use quick repair */
if (test_flag & T_VERBOSE) puts(""); if (test_flag & T_VERBOSE) puts("");
mi_check_print_error(param,"record delete-link-chain corrupted"); mi_check_print_error(param,"record delete-link-chain corrupted");
DBUG_RETURN(1); DBUG_RETURN(1);
...@@ -292,7 +292,7 @@ int chk_size(MI_CHECK *param, register MI_INFO *info) ...@@ -292,7 +292,7 @@ int chk_size(MI_CHECK *param, register MI_INFO *info)
error=1; error=1;
mi_check_print_error(param,"Size of datafile is: %-8s Should be: %s", mi_check_print_error(param,"Size of datafile is: %-8s Should be: %s",
llstr(size,buff), llstr(skr,buff2)); llstr(size,buff), llstr(skr,buff2));
param->retry_without_quick=1; // Don't use quick repair param->retry_without_quick=1; /* Don't use quick repair */
} }
else else
{ {
......
...@@ -291,9 +291,9 @@ static int NEAR_F merge_many_buff(MI_SORT_PARAM *info, uint keys, ...@@ -291,9 +291,9 @@ static int NEAR_F merge_many_buff(MI_SORT_PARAM *info, uint keys,
temp=from_file; from_file=to_file; to_file=temp; temp=from_file; from_file=to_file; to_file=temp;
*maxbuffer= (int) (lastbuff-buffpek)-1; *maxbuffer= (int) (lastbuff-buffpek)-1;
} }
close_cached_file(to_file); // This holds old result close_cached_file(to_file); /* This holds old result */
if (to_file == t_file) if (to_file == t_file)
*t_file=t_file2; // Copy result file *t_file=t_file2; /* Copy result file */
DBUG_RETURN(*maxbuffer >= MERGEBUFF2); /* Return 1 if interrupted */ DBUG_RETURN(*maxbuffer >= MERGEBUFF2); /* Return 1 if interrupted */
} /* merge_many_buff */ } /* merge_many_buff */
......
...@@ -273,6 +273,7 @@ public: ...@@ -273,6 +273,7 @@ public:
virtual uint max_keys() const =0; virtual uint max_keys() const =0;
virtual uint max_key_parts() const =0; virtual uint max_key_parts() const =0;
virtual uint max_key_length()const =0; virtual uint max_key_length()const =0;
virtual uint max_key_part_length() { return 255; }
virtual uint min_record_length(uint options) const { return 1; } virtual uint min_record_length(uint options) const { return 1; }
virtual bool low_byte_first() const { return 1; } virtual bool low_byte_first() const { return 1; }
virtual bool is_crashed() const { return 0; } virtual bool is_crashed() const { return 0; }
......
...@@ -809,7 +809,7 @@ static void server_init(void) ...@@ -809,7 +809,7 @@ static void server_init(void)
} }
#endif #endif
#if defined(HAVE_SYS_UN_H) && !defined(HAVE_mit_thread) #if defined(HAVE_SYS_UN_H)
/* /*
** Create the UNIX socket ** Create the UNIX socket
*/ */
...@@ -2694,7 +2694,7 @@ The default values (after parsing the command line arguments) are:\n\n"); ...@@ -2694,7 +2694,7 @@ The default values (after parsing the command line arguments) are:\n\n");
if (opt_slow_logname) if (opt_slow_logname)
printf("update log: %s\n",opt_slow_logname); printf("update log: %s\n",opt_slow_logname);
printf("TCP port: %d\n",mysql_port); printf("TCP port: %d\n",mysql_port);
#if defined(HAVE_SYS_UN_H) && !defined(HAVE_mit_thread) #if defined(HAVE_SYS_UN_H)
printf("Unix socket: %s\n",mysql_unix_port); printf("Unix socket: %s\n",mysql_unix_port);
#endif #endif
if (my_disable_locking) if (my_disable_locking)
......
...@@ -416,7 +416,8 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -416,7 +416,8 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
{ {
if (f_is_blob(sql_field->pack_flag)) if (f_is_blob(sql_field->pack_flag))
{ {
if ((length=column->length) > file->max_key_length()) if ((length=column->length) > file->max_key_length() ||
length > file->max_key_part_length())
{ {
my_error(ER_WRONG_SUB_KEY,MYF(0)); my_error(ER_WRONG_SUB_KEY,MYF(0));
DBUG_RETURN(-1); DBUG_RETURN(-1);
......
...@@ -491,6 +491,8 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, ...@@ -491,6 +491,8 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
else else
outparam->primary_key = MAX_KEY; // we do not have a primary key outparam->primary_key = MAX_KEY; // we do not have a primary key
} }
else
outparam->primary_key= MAX_KEY;
x_free((gptr) disk_buff); x_free((gptr) disk_buff);
disk_buff=0; disk_buff=0;
if (new_field_pack_flag <= 1) if (new_field_pack_flag <= 1)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment