Bug #27990 MYSQL_FIELD struct's member strings Bug 21635 not fixed for all cases

Submitted: 20 Apr 2007 19:13 Modified: 30 Oct 2007 23:47
Reporter: TOM DONOVAN (Candidate Quality Contributor) Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: C API (client library) Severity:S2 (Serious)
Version:5.0.44-BK, 5.0.37 OS:Any
Assigned to: Evgeny Potemkin CPU Architecture:Any
Tags: expression, MYSQL_FIELD, org_name, qc

[20 Apr 2007 19:13] TOM DONOVAN
Description:
The fix for:

Bug 21635 
"MYSQL_FIELD struct's member strings seem to misbehave for expression cols" 

is ineffective if the optimizer chooses to use tmp fields to process the query.

How to repeat:
Run mysql_client_test "test_bug21635"  with server set to: default-storage-engine=INNODB

Suggested fix:
It's not clear how to fix this, as the info is lost when Item_sum objects are replaced by Item_field object at sql_select.cpp line 14038.

The problem does not depend on using INNODB. The problem happens in all cases where the optimizer chooses to call change_to_use_tmp_fields at sql_select.cpp line 14008.

Line numbers are from 5.0.37 source.
[14 Jun 2007 15:13] Valeriy Kravchuk
Thank you for a problem report. Verified just as described with latest 5.0.44-BK on Linux:

openxs@suse:~/dbs/5.0> bin/mysqld_safe --default-storage-engine=innodb &
[1] 15067
openxs@suse:~/dbs/5.0> Starting mysqld daemon with databases from /home/openxs/d
bs/5.0/var

openxs@suse:~/dbs/5.0> bin/mysql_client_test -uroot test_bug21635

#####################################
client_connect
#####################################

 Establishing a connection to '' ... OK
Connected to MySQL server version: 5.0.44-debug (50044)

 Creating a test database 'client_test_db' ... OK

#####################################
1 of (1/1): test_bug21635
#####################################
MIN(i) -> MIN(i) ... mysql_client_test.c:15523: check failed: 'field->db[0] == 0
 && field->org_table[0] == 0 && field->table[0] == 0 && field->org_name[0] == 0'

Aborted
openxs@suse:~/dbs/5.0> bin/mysqladmin -uroot shutdown
STOPPING server from pid file /home/openxs/dbs/5.0/var/suse.pid
070612 18:10:06  mysqld ended

[1]+  Done                    bin/mysqld_safe --default-storage-engine=innodb
openxs@suse:~/dbs/5.0> bin/mysqld_safe &
[1] 15108
openxs@suse:~/dbs/5.0> Starting mysqld daemon with databases from /home/openxs/d
bs/5.0/var

openxs@suse:~/dbs/5.0> bin/mysql_client_test -uroot test_bug21635

#####################################
client_connect
#####################################

 Establishing a connection to '' ... OK
Connected to MySQL server version: 5.0.44-debug (50044)

 Creating a test database 'client_test_db' ... OK

#####################################
1 of (1/1): test_bug21635
#####################################
MIN(i) -> MIN(i) ... OK
MIN(i) AS A1 -> A1 ... OK
MAX(i) -> MAX(i) ... OK
MAX(i) AS A2 -> A2 ... OK
COUNT(i) -> COUNT(i) ... OK
COUNT(i) AS A3 -> A3 ... OK

#####################################
client_disconnect
#####################################

 dropping the test database 'client_test_db' ... OK
 closing the connection ... OK

All '1' tests were successful (in '1' iterations)
  Total execution time: 0 SECS

!!! SUCCESS !!!
[13 Sep 2007 10:49] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/34161

ChangeSet@1.2424, 2007-09-13 14:44:26+00:00, evgen@moonbone.local +3 -0
  Bug#27990: Wrong info in MYSQL_FIELD struct members when a tmp table was used.
  
  The change_to_use_tmp_fields function leaves the orig_table member of an
  expression's tmp table field filled for the new Item_field being created.
  Later orig_table is used by the Field::make_field function to provide some
  info about original table and field name to a user. This is ok for a field
  but for an expression it should be empty.
  
  The change_to_use_tmp_fields function now resets orig_table member of
  an expression's tmp table field to prevent providing a wrong info to a user.
  The Field::make_field function now resets the table_name and the org_col_name
  variables when the orig_table is set to 0.
[22 Sep 2007 9:52] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/34482

ChangeSet@1.2424, 2007-09-22 11:35:11+04:00, evgen@sunlight.local +3 -0
  Bug#27990: Wrong info in MYSQL_FIELD struct members when a tmp table was used.
  
  The change_to_use_tmp_fields function leaves the orig_table member of an
  expression's tmp table field filled for the new Item_field being created.
  Later orig_table is used by the Field::make_field function to provide some
  info about original table and field name to a user. This is ok for a field
  but for an expression it should be empty.
  
  The change_to_use_tmp_fields function now resets orig_table member of
  an expression's tmp table field to prevent providing a wrong info to a user.
  The Field::make_field function now resets the table_name and the org_col_name
  variables when the orig_table is set to 0.
[29 Oct 2007 8:42] Bugs System
Pushed into 5.0.52
[29 Oct 2007 8:45] Bugs System
Pushed into 5.1.23-beta
[29 Oct 2007 8:49] Bugs System
Pushed into 6.0.4-alpha
[30 Oct 2007 23:47] Paul DuBois
Noted in 5.0.52, 5.1.23, 6.0.4 changelogs.

The metadata in some MYSQL_FIELD members could be incorrect when a
temporary table was used to evaluate a query.

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.042 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.