summaryrefslogtreecommitdiff
path: root/libmysql
Commit message (Collapse)AuthorAgeFilesLines
* mysql_stmt_field_count()unknown2004-06-062-0/+11
| | | | | | | | | | | | include/mysql.h: mysql_stmt_field_count() declaration libmysql/libmysql.c: added mysql_stmt_field_count(): we need this function to ease use of mysql_stmt_result_metadata: if mysql_stmt_field_count() != 0 mysql_stmt_result_metadata fails only if OOM. libmysql/libmysql.def: declaration for mysql_stmt_field_count()
* More comments in prepared statements code.unknown2004-06-061-78/+153
| | | | | | | | | libmysql/libmysql.c: Extended comments for mysql_stmt_init, mysql_stmt_prepare, mysql_stmt_result_metadata. Few bits of code moved around and cleaned up. sql/sql_prepare.cc: Commented case with ulonglong length in get_param_length
* Added authentication code that was missed in mergeunknown2004-06-031-51/+1
| | | | | | | | | | | | | | Added new windows configuration VC++Files/client/mysqlclient.dsp: Added new configuration VC++Files/zlib/zlib.dsp: Added new configuration libmysql/libmysql.c: Moved check function from libmysql.c to client.c sql-common/client.c: Moved check function from libmysql.c to client.c
* Merge with 4.0 to get fixes for netwareunknown2004-06-021-1/+1
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | client/mysqltest.c: Auto merged include/mysql.h: Auto merged innobase/dict/dict0dict.c: Auto merged innobase/include/row0mysql.h: Auto merged innobase/lock/lock0lock.c: Auto merged innobase/row/row0mysql.c: Auto merged libmysql/libmysql.c: Auto merged mysql-test/README: Auto merged mysql-test/r/select_found.result: Auto merged mysql-test/t/select_found.test: Auto merged mysys/mf_wcomp.c: Auto merged mysys/mf_wfile.c: Auto merged sql/ha_innodb.cc: Auto merged sql/set_var.cc: Auto merged sql/sql_base.cc: Auto merged configure.in: Get changes for netware include/my_sys.h: Use local file innobase/include/os0file.h: auto merge innobase/os/os0file.c: auto merge sql/mysqld.cc: auto merge sql/sql_acl.cc: indentation change sql/sql_acl.h: use local file sql/sql_class.h: auto merge sql/sql_db.cc: use local file sql/sql_parse.cc: use local file sql/sql_select.cc: Merge sql/sql_show.cc: use local file
| * mysql_get_parameter interface fixedunknown2004-05-311-1/+1
| | | | | | | | | | | | | | include/mysql.h: (void) added to the empty parameter's list libmysql/libmysql.c: (void) added to the empty parameter's list
* | Made my_snprintf() behavior snprintf() compatible when printing %x arguments ↵unknown2004-05-271-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (it should produce hex digits in lower case). (fixed version) Replaced _dig_vec array with two _dig_vec_upper/_dig_vec_lower arrays. Added extra argument to int2str function which controls case of digits you get. Replaced lot of invocations of int2str for decimal radix with more optimized int10_to_str() function. Removed unused my_itoa/my_ltoa functions. client/mysql.cc: Replaced int2str invocations with radix argument equal to 10 with optimized int10_to_str() call. client/mysqladmin.c: Replaced int2str invocations with radix argument equal to 10 with optimized int10_to_str() call. dbug/dbug.c: _dig_vec became _dig_vec_upper. include/m_string.h: _dig_vec is obsoleted by _dig_vec_upper/_dig_vec_lower. my_itoa()/my_ltoa() functions were removed because they were never used in our code. int2str() now has one more argument which controls case of digits it will produce. include/my_global.h: my_itoa()/my_ltoa() functions were removed because they were never used in our code. isam/isamchk.c: Replaced int2str invocations with radix argument equal to 10 with optimized int10_to_str() call. libmysql/libmysql.def: _dig_vec is obsoleted by _dig_vec_upper/_dig_vec_lower. myisam/myisamchk.c: Replaced int2str invocation with radix argument equal to 10 with optimized int10_to_str() call. mysys/mf_tempfile.c: _dig_vec became _dig_vec_upper. mysys/my_error.c: Replaced int2str invocations with radix argument equal to 10 with optimized int10_to_str() call. mysys/my_tempnam.c: _dig_vec became _dig_vec_upper. sql-common/client.c: Replaced int2str invocation with radix argument equal to 10 with optimized int10_to_str() call. sql/item_strfunc.cc: _dig_vec became _dig_vec_upper. Also we don't need hex[] array in this file now because we have _dig_vec_lower instead. sql/mysqld.cc: Replaced int2str invocations with radix argument equal to 10 with optimized int10_to_str() call. sql/password.c: _dig_vec became _dig_vec_upper. sql/sql_bitmap.h: _dig_vec became _dig_vec_upper. strings/int2str.c: Replaced _dig_vec by _dig_vec_upper/_dig_vec_lower pair. int2str() now has one more argument which controls case of digits it will produce. my_itoa()/my_ltoa() functions were removed because they were never used in our code. strings/longlong2str-x86.s: _dig_vec became _dig_vec_upper. strings/longlong2str.c: _dig_vec became _dig_vec_upper. strings/my_vsnprintf.c: If my_snprintf() is printing %x argument it should produce lower case hexadecimal digits to be snprintf() compatible.
* | merge with 4.0 to get windows fixesunknown2004-05-272-2/+9
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | VC++Files/client/mysqlclient.dsp: Auto merged VC++Files/innobase/innobase.dsp: Auto merged include/mysql.h: Auto merged include/mysql_com.h: Auto merged innobase/include/log0log.h: Auto merged innobase/include/log0log.ic: Auto merged innobase/include/mtr0mtr.h: Auto merged innobase/log/log0log.c: Auto merged innobase/log/log0recv.c: Auto merged innobase/que/que0que.c: Auto merged libmysql/libmysql.c: Auto merged libmysql_r/Makefile.am: Auto merged sql/log_event.cc: Auto merged sql/mysqld.cc: Auto merged tools/mysqlmanager.c: Auto merged
| * Fix to make Windows compilation smootherunknown2004-05-262-18/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | VC++Files/innobase/innobase.dsp: non-existent file removed client/mysql.cc: local opt_max_allowed_packet and opt_net_buffer_length introduced client/mysqldump.c: local opt_max_allowed_packet and opt_net_buffer_length introduced include/mysql.h: mysql_get_parameters() interface added #define max_allowed_packet added include/mysql_com.h: these should not be exported libmysql/libmysql.c: mysql_get_parameters implementations libmysql/libmysql.def: interface changed libmysql_r/Makefile.am: MYSQL_CLIENT define added libmysqld/lib_sql.cc: line moved to be above the '#include "mysql.cc"' libmysqld/libmysqld.c: mysql_get_parameters implementation (embedded) libmysqld/libmysqld.def: interface changed sql/log_event.cc: should be like that in this case tools/mysqlmanager.c: compiler warns on this line
* | Changed prototype of killed_ptr() to make it more portableunknown2004-05-262-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Applied patches for Netware innobase/include/os0thread.h: Applied patches for Netware innobase/os/os0thread.c: Applied patches for Netware libmysql/libmysql.c: Applied patches for Netware libmysql/libmysql.def: Applied patches for Netware myisam/myisamchk.c: Applied patches for Netware Changed prototype of killed_ptr() to make it more portable myisam/myisamdef.h: Applied patches for Netware Changed prototype of killed_ptr() to make it more portable mysql-test/t/rpl_relayspace-slave.opt: Applied patches for Netware mysys/my_pthread.c: Applied patches for Netware mysys/my_static.h: Portability fix netware/BUILD/compile-linux-tools: Applied patches for Netware Changed prototype of killed_ptr() to make it more portable netware/BUILD/mwenv: Applied patches for Netware Changed prototype of killed_ptr() to make it more portable netware/BUILD/nwbootstrap: Applied patches for Netware Changed prototype of killed_ptr() to make it more portable netware/my_manage.c: Applied patches for Netware Changed prototype of killed_ptr() to make it more portable netware/mysql_fix_privilege_tables.pl: Applied patches for Netware Changed prototype of killed_ptr() to make it more portable netware/mysql_test_run.c: Applied patches for Netware Changed prototype of killed_ptr() to make it more portable netware/static_init_db.sql: Applied patches for Netware Changed prototype of killed_ptr() to make it more portable scripts/make_binary_distribution.sh: Applied patches for Netware Changed prototype of killed_ptr() to make it more portable sql/filesort.cc: Changed prototype of killed_ptr() to make it more portable sql/ha_myisam.cc: Changed prototype of killed_ptr() to make it more portable sql/mysqld.cc: Fixed some typos for Netware sql/sql_bitmap.h: Applied patches for Netware sql/sql_class.h: Changed prototype of killed_ptr() to make it more portable sql/sql_insert.cc: safety fix strings/my_strtoll10.c: Added comment
* | Merge with 4.0 to get fixes for Windows project filesunknown2004-05-251-1/+1
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | VC++Files/client/mysql.dsp: Auto merged VC++Files/client/mysqladmin.dsp: Auto merged VC++Files/client/mysqldump.dsp: Auto merged VC++Files/mysql.dsw: Auto merged VC++Files/client/mysqlimport.dsp: Auto merged VC++Files/client/mysqlshow.dsp: Auto merged VC++Files/isamchk/isamchk.dsp: Auto merged VC++Files/libmysql/libmysql.dsp: Auto merged VC++Files/my_print_defaults/my_print_defaults.dsp: Auto merged VC++Files/myisamchk/myisamchk.dsp: Auto merged VC++Files/myisamlog/myisamlog.dsp: Auto merged VC++Files/myisampack/myisampack.dsp: Auto merged VC++Files/mysqlbinlog/mysqlbinlog.dsp: Auto merged VC++Files/mysqlcheck/mysqlcheck.dsp: Auto merged VC++Files/mysqlmanager/mysqlmanager.dsp: Auto merged VC++Files/mysys/mysys.dsp: Auto merged VC++Files/pack_isam/pack_isam.dsp: Auto merged VC++Files/perror/perror.dsp: Auto merged VC++Files/replace/replace.dsp: Auto merged include/my_global.h: Auto merged include/mysql_version.h.in: Auto merged innobase/eval/eval0eval.c: Auto merged innobase/sync/sync0arr.c: Auto merged libmysql/libmysql.c: Auto merged sql-bench/crash-me.sh: Auto merged sql-bench/limits/mysql-4.0.cfg: Auto merged sql/mysqld.cc: Auto merged sql/set_var.cc: Auto merged sql/slave.cc: Auto merged
| * New MYSQL_SERVER_SUFFIX usage (for easier compilation)unknown2004-05-251-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Update of VC++ project files. VC++Files/mysqlmanager/childfrm.cpp: Rename: VC++Files/mysqlmanager/CHILDFRM.CPP -> VC++Files/mysqlmanager/childfrm.cpp VC++Files/mysqlmanager/childfrm.h: Rename: VC++Files/mysqlmanager/CHILDFRM.H -> VC++Files/mysqlmanager/childfrm.h VC++Files/mysqlmanager/mainfrm.cpp: Rename: VC++Files/mysqlmanager/MAINFRM.CPP -> VC++Files/mysqlmanager/mainfrm.cpp VC++Files/mysqlmanager/mainfrm.h: Rename: VC++Files/mysqlmanager/MAINFRM.H -> VC++Files/mysqlmanager/mainfrm.h VC++Files/mysqlmanager/mysqlmanager.dsp: Rename: VC++Files/mysqlmanager/MySqlManager.dsp -> VC++Files/mysqlmanager/mysqlmanager.dsp VC++Files/mysqlmanager/mysqlmanager.mak: Rename: VC++Files/mysqlmanager/MySqlManager.mak -> VC++Files/mysqlmanager/mysqlmanager.mak VC++Files/mysqlmanager/resource.h: Rename: VC++Files/mysqlmanager/RESOURCE.H -> VC++Files/mysqlmanager/resource.h VC++Files/mysqlmanager/stdafx.cpp: Rename: VC++Files/mysqlmanager/STDAFX.CPP -> VC++Files/mysqlmanager/stdafx.cpp VC++Files/mysqlmanager/stdafx.h: Rename: VC++Files/mysqlmanager/STDAFX.H -> VC++Files/mysqlmanager/stdafx.h VC++Files/mysqlmanager/toolsql.cpp: Rename: VC++Files/mysqlmanager/TOOLSQL.CPP -> VC++Files/mysqlmanager/toolsql.cpp VC++Files/mysqlmanager/toolsql.h: Rename: VC++Files/mysqlmanager/TOOLSQL.H -> VC++Files/mysqlmanager/toolsql.h VC++Files/mysqlmanager/RES/bitmap1.bmp: Rename: VC++Files/mysqlmanager/RES/BITMAP1.BMP -> VC++Files/mysqlmanager/RES/bitmap1.bmp VC++Files/mysqlmanager/RES/bitmap3.bmp: Rename: VC++Files/mysqlmanager/RES/BITMAP3.BMP -> VC++Files/mysqlmanager/RES/bitmap3.bmp VC++Files/mysqlmanager/RES/bmp00001.bmp: Rename: VC++Files/mysqlmanager/RES/BMP00001.BMP -> VC++Files/mysqlmanager/RES/bmp00001.bmp VC++Files/mysqlmanager/RES/bmp00002.bmp: Rename: VC++Files/mysqlmanager/RES/BMP00002.BMP -> VC++Files/mysqlmanager/RES/bmp00002.bmp VC++Files/mysqlmanager/RES/database.bmp: Rename: VC++Files/mysqlmanager/RES/DATABASE.BMP -> VC++Files/mysqlmanager/RES/database.bmp VC++Files/mysqlmanager/RES/fontd.bmp: Rename: VC++Files/mysqlmanager/RES/FONTD.BMP -> VC++Files/mysqlmanager/RES/fontd.bmp VC++Files/mysqlmanager/RES/fontu.bmp: Rename: VC++Files/mysqlmanager/RES/FONTU.BMP -> VC++Files/mysqlmanager/RES/fontu.bmp VC++Files/mysqlmanager/RES/query_ex.bmp: Rename: VC++Files/mysqlmanager/RES/QUERY_EX.BMP -> VC++Files/mysqlmanager/RES/query_ex.bmp VC++Files/mysqlmanager/RES/toolbar.bmp: Rename: VC++Files/mysqlmanager/RES/TOOLBAR.BMP -> VC++Files/mysqlmanager/RES/toolbar.bmp BUILD/compile-pentium-valgrind-max: Use MYSQL_SERVER_SUFFIX VC++Files/bdb/bdb.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/client/mysql.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/client/mysqladmin.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/client/mysqldump.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/client/mysqlimport.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/client/mysqlshow.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/copy_mysql_files.bat: Assume we are in correct directory VC++Files/innobase/innobase.dsp: Use new version of MYSQL_SERVER_SUFFIX Remove old files VC++Files/isamchk/isamchk.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/libmysqld/libmysqld.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/my_print_defaults/my_print_defaults.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/myisamchk/myisamchk.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/myisamlog/myisamlog.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/myisampack/myisampack.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/mysql.dsw: Use new version of MYSQL_SERVER_SUFFIX VC++Files/mysqlbinlog/mysqlbinlog.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/mysqlcheck/mysqlcheck.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/mysys/mysys.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/pack_isam/pack_isam.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/perror/perror.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/replace/replace.dsp: Use new version of MYSQL_SERVER_SUFFIX VC++Files/sql/mysqld.dsp: Use new version of MYSQL_SERVER_SUFFIX include/my_global.h: Added QUOTE and STRINGIFY include/mysql_version.h.in: New MYSQL_SERVER_SUFFIX handling innobase/eval/eval0eval.c: Fixed compiler warning libmysql/libmysql.c: Use STRINGIFY() sql/mysqld.cc: New MYSQL_SERVER_SUFFIX handling sql/mysqld_suffix.h: New MYSQL_SERVER_SUFFIX handling sql/set_var.cc: Use STRINGIFY() zlib/contrib/asm386/zlibvc.dsp: Updated for 4.0
* | Support for character set conversion in binary protocol: another gounknown2004-05-251-82/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | after Monty's review. - Item_param was rewritten. - it turns out that we can't convert string data to character set of connection on the fly, because they first should be written to the binary log. To support efficient conversion we need to rewrite prepared statements binlogging code first. include/my_global.h: Macro swap(a, b, c) was renamed to resolve name conflict with String::swap() method. include/my_sys.h: Added declaration of escape_string_for_mysql() include/mysql_com.h: Removed and moved back: a macro which is visible to libmysql user but has sence only in prepared statement protocol implementation. isam/_search.c: swap -> swap_variables isam/test2.c: swap -> swap_variables libmysql/libmysql.c: - sub_escape_string moved to mysys/charset.c to be visible in sql/ - few cleanups myisam/mi_test2.c: swap -> swap_variables mysys/charset.c: sub_escape_string was moved from libmysql.c to be able to use it in sql/ code. mysys/my_chsize.c: rename: swap -> swap_variables mysys/my_compress.c: swap -> swap_variables mysys/my_handler.c: swap -> swap_variables sql/field.cc: Field::store_time refactored to use TIME_to_string function from time.cc sql/item.cc: New implementation of Item_param class: added support for character sets conversion. sql/item.h: Item_param: - 'state' member introduced instead of many boolean variables. - put ltime, int_value and real_value into union to save space. - remove unimplemented members - set_value renamed to set_str sql/item_timefunc.cc: Refactored to use functions from time.cc sql/lock.cc: rename: swap -> swap_variables sql/mysql_priv.h: - added declarations for TIME_to_ulonglong_*, TIME_to_string functions - const specifiers for make_date, make_time, make_datetime arguments sql/opt_range.cc: rename: swap -> swap_variables sql/protocol.cc: - added character set conversion support to binary protocol. - Protocol::convert changed to point at shared buffer in THD. This lets us use one convert buffer for binary and simple protocol. The same buffer is used for client->server conversions in prepared statements code. - string conversion code refactored to Protocol::store_string_aux function. - few more comments sql/protocol.h: - Protocol::convert now points at THD::convert_buffer: we want to share one buffer between all protocol implementations. sql/sql_class.cc: - implementation of THD::convert_string using THD::convert_buffer (conversion of strings allocated in the system heap). sql/sql_class.h: - THD::convert_buffer is shared between THD and network Protocols and used for character set conversion of strings. - new function to convert String object from one charset to another using THD::convert_buffer sql/sql_insert.cc: A little fix in a comment. sql/sql_parse.cc: Shrink convert buffer in the end of each statement. sql/sql_prepare.cc: Many changes: - static specifier for set_param_* family of functions. - FIELD_TYPE -> MYSQL_TYPE - added set_param_binary as handler for BLOB types. - added character set support - added support for param typecode in mysql_stmt_get_longdata (mysql_stmt_send_long_data handler) - changes in Item_param deployed - few cleanups sql/sql_select.cc: rename: swap -> swap_variables sql/sql_string.cc: - String::append rewritten to support character set conversion for single-byte encodings. - added String::swap method to efficiently exchange two string objects. sql/sql_string.h: Declraration for String::swap(). sql/time.cc: - function TIME_to_string to convert TIME to String in default MySQL format - family of functions TIME_to_ulonglong_* tests/client_test.c: Test for support for character set conversions in prepared statements (binary and text data).
* | Fixes for #3371, #3372, #3374, #3375, #3376unknown2004-05-151-24/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | libmysql/libmysql.c: code to fix #3772 counting of field->max_length moved to mysql_store_stmt_result so it will work in libmysqld also libmysqld/lib_sql.cc: to fix #3771 and #3775 stmt->affected_rows specifying added code getting default values changed so it will add terminating /0 to values sql/sql_parse.cc: to fix #3773 silly mistake here :\ sql/sql_prepare.cc: to fix #3774 and #3776 special function for datetime values in embedded server added unsigned flag now specified for values in embedded server tests/client_test.c: this test fails if privilege-checking pars are disabled (it's the default for libmysqld)
* | Fix VC++ compiler error (function redifinition) for embedded serverunknown2004-05-101-1/+1
| |
* | Added additional parameter userdata for mysql_set_local_infile_handlerunknown2004-05-071-4/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | to allow binding of userland functions in PHP. include/mysql.h: added new last parameter (void *) for mysql_set_local_infile_handler st_mysql_options: added void *local_infile_userdata added last parameter (void *) for local_infile_init function pointer libmysql/libmysql.c: added parameter userdata in mysql_set_local_infile_handler added parameter (void *userdata __attribute__ ((unused))) in mysql_local_infile_init passed additional parameter userdata to init function in handle_local_infile BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
* | Merge bk-internal.mysql.com:/home/bk/mysql-4.1unknown2004-05-072-7/+9
|\ \ | | | | | | | | | | | | | | | | | | | | | into mysql.com:/home/my/mysql-4.1 libmysql/libmysql.c: Auto merged
| * | Portability fixesunknown2004-05-072-7/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Change strtoll -> my_strtoll10() Fixed bug in my_strntoul() and my_strntol() where we got different values on 32 and 64 bit systems (Bug #3472) configure.in: Fixed problem on IRIX64 (One can't have AC_MSG_RESULT on same row as AC_DEFINE extra/my_print_defaults.c: Fixed wrong definition for 'verbose' include/my_global.h: Portability fix (IRIX64) libmysql/client_settings.h: Remove compiler warnings libmysql/libmysql.c: Remove compiler warnings mysql-test/r/func_str.result: Updated results mysql-test/r/key_cache.result: Updated results to not depend on key_blocks_unused mysql-test/t/func_str.test: More test of long overflow mysql-test/t/key_cache.test: Updated results to not depend on key_blocks_unused sql/item.cc: Portability fix (don't use strtoll()) sql/item.h: Portability fix (don't use strtoll()) sql/item_sum.h: Portability fix (don't use strtoll()) sql/item_timefunc.cc: Fixed compiler warning strings/ctype-simple.c: Fixed bug in my_strntoul() and my_strntol() where we got different values on 32 and 64 bit systems strings/ctype-ucs2.c: Fixed bug in my_strntoul() and my_strntol() where we got different values on 32 and 64 bit systems
* | | mysql_stmt_reset now expects ok/error packet from server.unknown2004-05-061-1/+2
|/ / | | | | | | | | | | | | | | | | libmysql/libmysql.c: Make advanced_command check client reply sql/sql_prepare.cc: mysql_stmt_reset now sends ok/error reply to the client. tests/client_test.c: Memory leak fixed.
* | Fix to handle unsigned data in prepared statements (Bug #3447)unknown2004-05-041-9/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed security problem that password was temporarly reset when someone changed GRANT for a user. (Bug #3404) Fixed problem with PROCEDURE analyse() and impossible WHERE (Bug #2238) Don't auto-repair tables in mysqlcheck if table type doesn't support 'check' command. Docs/mysqld_error.txt: Updated error values client/mysqlcheck.c: Don't cause auto-repair on 'note' (Tables that doesn't support 'check') libmysql/libmysql.c: Fix to handle unsigned data in prepared statements (Bug #3447) mysql-test/r/analyse.result: Test of analyze + impossible where (Bug #2238) mysql-test/r/bdb.result: Update results mysql-test/r/ctype_ujis.result: Update results mysql-test/r/isam.result: Update results mysql-test/r/repair.result: Update results mysql-test/t/analyse.test: Test of analyze + impossible where (Bug #2238) mysql-test/t/ctype_ujis.test: Added test for LIKE (Bug #3438) sql/sql_acl.cc: Fixed security problem that password was temporarly reset when someone changed GRANT for a user. (Bug #3404) sql/sql_select.cc: Fixed problem with PROCEDURE analyse() and impossible WHERE (Bug #2238) sql/sql_table.cc: Changed 'error' to 'note' when table doesn't support admin command. sql/sql_update.cc: Indentaion cleanup tests/client_test.c: Added test for handling unsigned/signed strings with prepared statements
* | Only calculate MYSQL_FIELD->max_length if mysql_stmt_attr_set(..., ↵unknown2004-04-301-7/+4
| | | | | | | | | | | | | | STMT_ATTR_UPDATE_MAX_LENGTH) is done. tests/client_test.c: Test mysql_stmt_attr_set(...STMT_ATTR_UPDATE_MAX_LENGTH)
* | Mergeunknown2004-04-301-8/+173
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | libmysql/libmysql.c: Auto merged tests/client_test.c: Auto merged include/mysql.h: SCCS merged
| * | Update 'MYSQL_FIELD->max_length' on mysql_stmt_store_result() (Bug #1647)unknown2004-04-301-8/+173
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added checking of cut read lines in bootstrap thread (Bug #2874) include/mysql.h: Added length to MYSQL_ROWS to enable sanity checking of packets Update 'MYSQL_FIELD->max_length' on mysql_stmt_store_result() libmysql/libmysql.c: Update 'MYSQL_FIELD->max_length' on mysql_stmt_store_result() (Bug #1647) scripts/fill_help_tables.sh: Added checking of maximum length of line in output (Bug #2874) scripts/mysql_install_db.sh: Added error message if help tables couldn't be done (Bug #2874) sql/sql_parse.cc: Added checking of cut read lines in bootstrap thread (Bug #2874) tests/client_test.c: Added --debug Changed some strange define names Less output Added testing of max_length for prepared statements
* | | Merge bk-internal.mysql.com:/home/bk/mysql-4.1unknown2004-04-301-29/+30
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into mysql.com:/home/kostja/mysql/mysql-4.1-u2 include/mysql.h: Auto merged libmysql/libmysql.c: Auto merged sql/sql_prepare.cc: Auto merged tests/client_test.c: Auto merged
| * | | Fix for Bug#3035 "Prepared statement integer inserts": now unsignedunknown2004-04-301-29/+30
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | flag is sent to server with placeholder types. There were no need to extend the protocol as one additional byte was reserved for placeholder code, when placeholder code is in range 0-255. So this byte is now used for flags. Post-review fixes added. include/config-win.h: added floaststore implementation include/my_global.h: added floatstore implementation include/mysql.h: Bug#3035: added 'is_unsigned' member binary_data wasn't used, removed null_field wasn't necessary, removed include/mysql_com.h: Unused defines were removed. libmysql/libmysql.c: Function store_param_type was removed - too much for a function, especially with bug in it. New implementation is inline and takes into account signedness of placeholder. Fixed store functions to not perform double network-host order conversion on high-byte-first systems (should also fix Bug#3578 "Prepared statement integer conversions work wrong in 64-bit Power Mac G5 CPUs"). null_field removed. sql/sql_prepare.cc: Placeholder sign is taken into account when reading data from network. tests/client_test.c: Test for BUG#3035 added: insert and retrieve minimum and maximum of all integer types.
* | | Implementation of mysql_stmt_attr_get and mysql_stmt_attr_set unknown2004-04-302-0/+52
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | requested by Monty for Bug#1647 (No way to determine what size blob/clob is being returned into bound buffer) include/mysql.h: Implementation of mysql_stmt_attr_get and mysql_stmt_attr_set requested by Monty for Bug#1647. libmysql/libmysql.c: Implementation of mysql_stmt_attr_get and mysql_stmt_attr_set requested by Monty for Bug#1647. libmysql/libmysql.def: Windows .defs added for new API calls
* | Allow one to send empty strings with mysql_stmt_send_long_data()unknown2004-04-281-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | mysql_stmt_reset() now resets param->long_data_used Abort if --defaults-file=path-name uses a non-existing file (Bug #3413) Fixed problem with symlink test (bug in 4.1.2) libmysql/libmysql.c: Allow one to send empty strings with mysql_stmt_send_long_data() mysql_stmt_reset() now resets param->long_data_used mysys/default.c: Abort if --defaults-file=path-name uses a non-existing file (Bug #3413) sql/unireg.cc: Fixed problem with symlink test: .frm table was not properly deleted if handler create failed
* | Stubs for types/names of placeholders, cursor flags and array execution countunknown2004-03-311-4/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | implemented in the client library and server. Warning: this makes the new client library and server incompatible with all previous versions and 5.0. libmysql/libmysql.c: Make client library compatible with future extensions: types of placeholders, names of named parameters, cursors and array execution. sql/sql_prepare.cc: Alpha server side support for future extensions: types of placeholders and names of named parameters are sent to client (virtually), cursor flags and execution count received in COM_EXECUTE packet are ignored.
* | Simplification: MYSQL_RES *result replaced with MYSQL_DATA result;unknown2004-03-283-108/+76
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | No need to check for result existence any more, store_result functions now are shorter. cli_read_binary_rows rewritten to handle MYSQL_DATA directly. include/mysql.h: MYSQL_RES * pointer replaced with MYSQL_DATA: it saves us at least 2 mallocs per store_result and simplifies stored result handling. Plus it's done with cursor fetch in mind: cursor fetch will use this structure to buffer fetched rows. libmysql/client_settings.h: signature of cli_read_binary_rows changed libmysql/libmysql.c: MYSQL_DATA is now used to handle result. cli_read_binary_rows rewritten to use MYSQL_DATA directly. libmysql/libmysql.def: declarations of new calls in the library libmysqld/lib_sql.cc: MYSQL_DATA is now used to handle result. cli_read_binary_rows rewritten to use MYSQL_DATA directly.
* | bad merge (?) fixedunknown2004-03-261-1/+1
| |
* | Cleanups & safety fixesunknown2004-03-251-89/+133
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | include/mysql.h: cleanup of load data infile patch libmysql/libmysql.c: cleanup of load data infile patch myisam/mi_search.c: Added missing assert.h mysql-test/r/func_time.result: Make test more secure mysql-test/t/func_time.test: Make test more secure sql/item.cc: restore to use str_value in item::save_in_field sql/item.h: Simple cleanup sql/item_cmpfunc.cc: Safety fix sql/item_cmpfunc.h: Simple optimization sql/item_func.cc: Updated comment sql/sql_base.cc: Simple optimization sql/sql_select.cc: Simple optimization sql/sql_union.cc: safey fixes
* | Unicode Collation Algorithm subset implementationunknown2004-03-241-1/+2
| |
* | Added LOCAL INFILE callback function support.unknown2004-03-222-19/+155
| | | | | | | | | | BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
* | merge with 4.0 (to get compiler error fixes for innodb)unknown2004-03-192-0/+54
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | client/mysqltest.c: Auto merged include/errmsg.h: Auto merged include/mysql_version.h.in: Auto merged innobase/que/que0que.c: Auto merged mysql-test/t/rpl000009.test: Auto merged sql/set_var.cc: Auto merged libmysql/errmsg.c: merge with 4.0 libmysql/libmysql.c: merge with 4.0 mysql-test/mysql-test-run.sh: merge with 4.0 mysql-test/r/rpl000009.result: merge with 4.0 scripts/mysql_fix_privilege_tables.sh: merge with 4.0 sql/repl_failsafe.cc: merge with 4.0
| * WL #1510 "Implement support for "commercial" binaries on handshake",unknown2004-03-172-3/+60
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | client library: - implemented 'check_license' function include/errmsg.h: WL #1510: new error code include/mysql_version.h.in: WL #1510: fallback define for LICENSE libmysql/errmsg.c: WL #1510: error message to print in case when client and server license mismatch. libmysql/libmysql.c: WL#1510: implementation of 'check_license' function sql/set_var.cc: removed unused variable 'license'
| * Merge with 3.23 to get patch for floor()unknown2004-03-121-2/+2
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | BitKeeper/etc/logging_ok: auto-union myisam/mi_check.c: Auto merged mysql-test/r/func_math.result: Auto merged mysql-test/t/func_math.test: Auto merged sql/item_func.cc: Auto merged
| | * Fix for bug#2021: Wron error message from the clientunknown2004-02-111-4/+2
| | | | | | | | | | | | | | | BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
| * | Added missing argument to strxnmov() (Applies for windows debug mode)unknown2004-02-201-1/+2
| | | | | | | | | | | | | | | libmysql/libmysql.c: Added missing argument to strxnmov()
* | | Merge miguel@bk-internal.mysql.com:/home/bk/mysql-4.1unknown2004-03-161-9/+9
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | into hegel.local:/home/miguel/bk/mysql-4.1 sql/log_event.cc: Auto merged
| * \ \ Merge miguel@bk-internal.mysql.com:/home/bk/mysql-4.1unknown2004-03-121-9/+9
| |\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into hegel.local:/home/miguel/bk/mysql-4.1
| | * | | For to export the renamed functionsunknown2004-03-121-9/+9
| | | | |
* | | | | Intermediate commit of client library (cleanups + fixes of 3 items from unknown2004-03-163-188/+408
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | flaws list) TODO: * verify that no sequence of API calls produces SIGSEGV. That is, verify that mysql_stmt_init -> mysql_stmt_fetch is OK, or mysql_stmt_prepare -> mysql_stmt_fetch_column is OK and sets meaningful error. * remove alloc_stmt_fields call * revise stmt->state codes and statement states. * there are other items in prepared statements 'to fix' document. Done: - cleanups and comments - revision of prepared statement error codes. - mysql_stmt_prepare is now can always be called (that is, you can reprepare a statement) - new implementation of mysql_stmt_close and fetch cancellation include/errmsg.h: - CR_NOT_ALL_PARAMS_BOUND - this error code wasn't used until now. Apparently it was added in advance, but then interface of mysql_stmt_bind_param changed. Now it's not possible to bind only some parameters - either all or none of parameters are bound. This error code is renamed to CR_PARAMS_NOT_BOUND - CR_FETCH_CANCELLED - error code set on server side when fetch from MYSQL_RES or MYSQL_STMT (in blocking mode) was cancelled because of intercepting call to mysql_stmt_close - CR_NO_DATA - this is proposed error code to return from mysql_stmt_fetch_column if no row was fetched (by any type of fetch). We always can fall back to CR_COMMANDS_OUT_OF_SYNC though. Need reviewer's opinion on this one. include/mysql.h: - added unbuffered_fetch_owner member to MYSQL to point to MYSQL_RES or MYSQL_STMT which is used to fetch result at the moment. This is to be able to set CR_FETCH_CANCELLED error without fantoms. - added unbuffered_fetch_cancelled boolean variable to MYSQL_STMT and MYSQL_RES structures - rename PREP_STMT_STATE -> enum enum_mysql_stmt_state - members of MYSQL_STMT ordered by size. - removed members of MYSQL_STMT: current_row, result_buffered, last_fetched_column, last_fetched_buffer, query - renamed members of MYSQL_STMT: param_buffers -> bind_param_done, res_buffers -> bind_result_done - now mysql_stmt_fetch calls stmt->read_row_func to read row either from buffer or from network. include/sql_common.h: declaration for flush_use_result libmysql/client_settings.h: stmt_close declaration removed libmysql/errmsg.c: Error messages for changed and added error codes. libmysql/libmysql.c: Many changes: - some unused variables removed - cleanups - better error reporting - some function calls commented - alloc_stmt_fields is now called right after execute, to not read mysql->fields of some other statement - new implementation of mysql_stmt_fetch - this is also with cursor fetch in mind (to implement cursor fetch I'll just need to write special read_row function for it, so this change will be local) - implementation of fetch cancellation, including complete rewrite of mysql_stmt_close - now mysql_stmt_free_result doesn't free results of other statements. sql-common/client.c: - implementation of flush_use_result - implementation of fetch cancellation - changed behaviour of mysql_close in regard to mysql_stmt_close - now mysql_close just set stmt->mysql to 0
* | | | fix to make client.c compile on windowsunknown2004-03-121-1/+0
|/ / /
* | | Rudimentary part of libmysql patch:unknown2004-03-122-20/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set_mysql_error is deployed libmysql/client_settings.h: declaration for set_mysql_error libmysql/libmysql.c: - set_mysql_error moved to client.c - st_stmt_errmsg -> set_stmt_error sql-common/client.c: deployment of set_mysql_error
* | | Rename:unknown2004-03-102-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | read_statistic -> read_statistics (statistic is adjective) include/mysql.h: read_statistic -> read_statistics libmysql/client_settings.h: read_statistic -> read_statistics libmysql/libmysql.c: read_statistic -> read_statistics libmysqld/lib_sql.cc: read_statistic -> read_statistics sql-common/client.c: read_statistic -> read_statistics
* | | Fix for C++ style declarationunknown2004-03-051-1/+2
| | |
* | | New call mysql_stmt_init() introduced.unknown2004-03-052-55/+94
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Renames: mysql_bind_param -> mysql_stmt_bind_param mysql_bind_result -> mysql_stmt_bind_result mysql_execute -> mysql_stmt_execute mysql_fetch -> mysql_stmt_fetch mysql_fetch_column -> mysql_stmt_fetch_column mysql_get_metadata -> mysql_stmt_result_metadata mysql_param_count -> mysql_stmt_param_count mysql_param_result -> mysql_stmt_param_metadata mysql_prepare -> mysql_stmt_prepare mysql_send_long_data -> mysql_stmt_send_long_data client_test.c cleaned up from memory leaks include/mysql.h: New call mysql_stmt_init() introduced. Renames: mysql_bind_param -> mysql_stmt_bind_param mysql_bind_result -> mysql_stmt_bind_result mysql_execute -> mysql_stmt_execute mysql_fetch -> mysql_stmt_fetch mysql_fetch_column -> mysql_stmt_fetch_column mysql_get_metadata -> mysql_stmt_result_metadata mysql_param_count -> mysql_stmt_param_count mysql_param_result -> mysql_stmt_param_metadata mysql_prepare -> mysql_stmt_prepare mysql_send_long_data -> mysql_stmt_send_long_data Renames are done according to the rule 'Everything call operating with 'MYSQL_STMT' structure has 'mysql_stmt_' prefix. Additionally mysql_param_result was renamed to mysql_stmt_param_metadata and mysql_get_metadata to mysql_stmt_result_metadata. All renames are done in hope that new names are easier to remember and understand. libmysql/client_settings.h: skip_list is not needed any more libmysql/libmysql.c: New call mysql_stmt_init() introduced. Renames: mysql_bind_param -> mysql_stmt_bind_param mysql_bind_result -> mysql_stmt_bind_result mysql_execute -> mysql_stmt_execute mysql_fetch -> mysql_stmt_fetch mysql_fetch_column -> mysql_stmt_fetch_column mysql_get_metadata -> mysql_stmt_result_metadata mysql_param_count -> mysql_stmt_param_count mysql_param_result -> mysql_stmt_param_metadata mysql_prepare -> mysql_stmt_prepare mysql_send_long_data -> mysql_stmt_send_long_data sql-common/client.c: no skip_list argument any more tests/client_test.c: - many memory leaks and valgrind errors cleaned up.
* | | Merge bk-internal.mysql.com:/home/bk/mysql-4.1unknown2004-02-222-3/+4
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into mashka.mysql.fi:/home/my/mysql-4.1 innobase/rem/rem0cmp.c: Auto merged libmysql/libmysql.c: Auto merged sql-common/client.c: Auto merged sql/ha_innodb.cc: Auto merged sql/sql_base.cc: Auto merged
| * \ \ merge with 4.0 to get security fixes and latest bug fixesunknown2004-02-202-3/+4
| |\ \ \ | | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | BitKeeper/etc/logging_ok: auto-union configure.in: Auto merged BitKeeper/deleted/.del-mini_client.cc~8677895ec8169183: Auto merged VC++Files/mysql.dsw: Auto merged VC++Files/mysys/mysys.dsp: Auto merged innobase/buf/buf0buf.c: Auto merged innobase/include/srv0start.h: Auto merged innobase/lock/lock0lock.c: Auto merged innobase/mem/mem0dbg.c: Auto merged innobase/que/que0que.c: Auto merged innobase/srv/srv0start.c: Auto merged innobase/sync/sync0rw.c: Auto merged innobase/sync/sync0sync.c: Auto merged innobase/trx/trx0trx.c: Auto merged libmysql/manager.c: Auto merged sql/ha_innodb.cc: Auto merged sql/sql_load.cc: Auto merged sql/sql_yacc.yy: Auto merged sql/unireg.cc: Auto merged VC++Files/sql/mysqld.dsp: Removed wrong define USE_SYMLINK include/config-win.h: Use original code innobase/srv/srv0srv.c: merge innobase/usr/usr0sess.c: merge libmysql/libmysql.c: merge mysql-test/r/func_test.result: merge mysql-test/t/func_test.test: merge sql/log.cc: merge sql/mysqld.cc: merge
| | * | Merge bk-internal.mysql.com:/home/bk/mysql-4.0unknown2004-02-191-5/+7
| | |\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into mysql.com:/home/my/mysql-4.0 libmysql/libmysql.c: Auto merged
| | | * | Fixed usage of strxnmov() in recent changesetsunknown2004-02-191-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | libmysql/libmysql.c: szPipeName -> pipe_name fixed usage of strxnmov() mysys/mf_tempfile.c: Fixed usage of strnxmov() Simple optimization mysys/my_tempnam.c: Fixed usage of strnxmov() Simple optimization sql/log.cc: simple optimization sql/mini_client.cc: szPipeName -> pipe_name fixed usage of strxnmov() sql/mysqld.cc: szPipeName -> pipe_name fixed usage of strxnmov() Fixed indentation