diff options
author | unknown <monty@mysql.com> | 2005-05-14 18:31:22 +0300 |
---|---|---|
committer | unknown <monty@mysql.com> | 2005-05-14 18:31:22 +0300 |
commit | f8f714a2fbd821488aa3d8e39d6c3a944c7b1aa1 (patch) | |
tree | c08ee86cd9f77c3a7dc13b02b09371ccd19f2b88 /sql/sql_table.cc | |
parent | bb2b8120615f48cd17682aa810e54b20a7002c77 (diff) | |
parent | 78f2e7b53db62a3bc67dcb5ed20dfe47cf680c66 (diff) | |
download | mariadb-git-f8f714a2fbd821488aa3d8e39d6c3a944c7b1aa1.tar.gz |
Merge with 4.1
BitKeeper/etc/logging_ok:
auto-union
BitKeeper/deleted/.del-errmsg.txt~11edc4db89248c16:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~184eb1f09242dc72:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~2cdeb8d6f80eba72:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~4617575065d612b9:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~587903f9311db2d1:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~606dfaeb9e81aa4e:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~6bbd9eac7f0e6b89:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~7397c423c52c6d2c:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~898865062c970766:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~8ed1999cbd481dc4:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~94a93cc742fca24d:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~9dab24f7fb11b1e1:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~b44a85a177954da0:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~b6181e29d8282b06:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~ba132dc9bc936c8a:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~e2609fdf7870795:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~e3183b99fbba0a9c:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~eeb2c47537ed9c23:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~ef28b592c7591b7:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~ef53c33ac0ff8a84:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~f19bfd5d4c918964:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~f96b7055cac394e:
Auto merged
libmysql/libmysql.c:
Auto merged
myisam/mi_key.c:
Auto merged
mysql-test/r/alter_table.result:
Auto merged
mysql-test/r/auto_increment.result:
Auto merged
mysql-test/r/innodb.result:
Auto merged
mysql-test/r/select.result:
Auto merged
mysql-test/t/alter_table.test:
Auto merged
mysql-test/t/innodb.test:
Auto merged
mysql-test/t/select.test:
Auto merged
sql/handler.h:
Auto merged
sql/item_func.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
mysql-test/r/insert_update.result:
Auto merged
strings/ctype-ucs2.c:
Auto merged
sql/sql_table.cc:
merge
sql/unireg.cc:
merge
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r-- | sql/sql_table.cc | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc index ad0a0baae2d..b6e44f8ec25 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -641,8 +641,7 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, const char *key_name; create_field *sql_field,*dup_field; uint field,null_fields,blob_columns; - uint max_key_length= file->max_key_length(); - ulong pos; + ulong record_offset= 0; KEY *key_info; KEY_PART_INFO *key_part_info; int timestamps= 0, timestamps_with_niladic= 0; @@ -836,10 +835,10 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, (*db_options)|= HA_OPTION_PACK_RECORD; it2.rewind(); } - /* If fixed row records, we need one bit to check for deleted rows */ - if (!((*db_options) & HA_OPTION_PACK_RECORD)) - null_fields++; - pos= (null_fields + total_uneven_bit_length + 7) / 8; + + /* record_offset will be increased with 'length-of-null-bits' later */ + record_offset= 0; + null_fields+= total_uneven_bit_length; it.rewind(); while ((sql_field=it++)) @@ -852,10 +851,10 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, DBUG_RETURN(-1); if (sql_field->sql_type == MYSQL_TYPE_VARCHAR) create_info->varchar= 1; - sql_field->offset= pos; + sql_field->offset= record_offset; if (MTYP_TYPENR(sql_field->unireg_check) == Field::NEXT_NUMBER) auto_increment++; - pos+=sql_field->pack_length; + record_offset+= sql_field->pack_length; } if (timestamps_with_niladic > 1) { @@ -1159,6 +1158,7 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, /* Implicitly set primary key fields to NOT NULL for ISO conf. */ sql_field->flags|= NOT_NULL_FLAG; sql_field->pack_flag&= ~FIELDFLAG_MAYBE_NULL; + null_fields--; } else key_info->flags|= HA_NULL_PART_KEY; @@ -1317,6 +1317,7 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, /* Sort keys in optimized order */ qsort((gptr) *key_info_buffer, *key_count, sizeof(KEY), (qsort_cmp) sort_keys); + create_info->null_bits= null_fields; DBUG_RETURN(0); } @@ -3417,12 +3418,14 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, /* better have a negative test here, instead of positive, like - alter_info->flags & ALTER_ADD_COLUMN|ALTER_ADD_INDEX|... + alter_info->flags & ALTER_ADD_COLUMN|ALTER_ADD_INDEX|... so that ALTER TABLE won't break when somebody will add new flag */ - need_copy_table=(alter_info->flags & ~(ALTER_CHANGE_COLUMN_DEFAULT|ALTER_OPTIONS) || - create_info->used_fields & ~(HA_CREATE_USED_COMMENT|HA_CREATE_USED_PASSWORD) || - table->s->tmp_table); + need_copy_table= (alter_info->flags & + ~(ALTER_CHANGE_COLUMN_DEFAULT|ALTER_OPTIONS) || + (create_info->used_fields & + ~(HA_CREATE_USED_COMMENT|HA_CREATE_USED_PASSWORD)) || + table->s->tmp_table); create_info->frm_only= !need_copy_table; /* @@ -3827,8 +3830,8 @@ copy_data_between_tables(TABLE *from,TABLE *to, !(sortorder=make_unireg_sortorder(order, &length)) || (from->sort.found_records = filesort(thd, from, sortorder, length, (SQL_SELECT *) 0, HA_POS_ERROR, - &examined_rows)) - == HA_POS_ERROR) + &examined_rows)) == + HA_POS_ERROR) goto err; }; |