summaryrefslogtreecommitdiff
path: root/storage/maria/ma_create.c
diff options
context:
space:
mode:
authorunknown <monty@narttu.mysql.fi>2007-12-17 01:18:23 +0200
committerunknown <monty@narttu.mysql.fi>2007-12-17 01:18:23 +0200
commit3e27ec4e90b3c7e3cdec014bfd65e20b803b12c7 (patch)
tree1132ec49c428a68a3fca71afc34834b74581e7db /storage/maria/ma_create.c
parent79e40ef6e45768a6fe0b9f4e5223b5a7fe684ca5 (diff)
parentcc589bef15c16b48cd5715645abb545df284fb5a (diff)
downloadmariadb-git-3e27ec4e90b3c7e3cdec014bfd65e20b803b12c7.tar.gz
Merge bk-internal.mysql.com:/home/bk/mysql-maria
into mysql.com:/home/my/mysql-maria mysql-test/r/maria-recovery.result: Auto merged storage/maria/ha_maria.cc: Auto merged storage/maria/ma_blockrec.c: Auto merged storage/maria/ma_blockrec.h: Auto merged storage/maria/ma_create.c: Auto merged storage/maria/ma_key_recover.c: Auto merged storage/maria/ma_open.c: Auto merged storage/maria/ma_recovery.c: Auto merged storage/maria/maria_def.h: Auto merged
Diffstat (limited to 'storage/maria/ma_create.c')
-rw-r--r--storage/maria/ma_create.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/storage/maria/ma_create.c b/storage/maria/ma_create.c
index 6fe0a772011..9c189a062ae 100644
--- a/storage/maria/ma_create.c
+++ b/storage/maria/ma_create.c
@@ -147,8 +147,17 @@ int maria_create(const char *name, enum data_file_type datafile_type,
reclength+= column->length;
type= column->type;
- if (type == FIELD_SKIP_PRESPACE && datafile_type == BLOCK_RECORD)
- type= FIELD_NORMAL; /* SKIP_PRESPACE not supported */
+ if (datafile_type == BLOCK_RECORD)
+ {
+ if (type == FIELD_SKIP_PRESPACE)
+ type= FIELD_NORMAL; /* SKIP_PRESPACE not supported */
+ if (type == FIELD_NORMAL &&
+ column->length > FULL_PAGE_SIZE(maria_block_size))
+ {
+ /* FIELD_NORMAL can't be split over many blocks, convert to a CHAR */
+ type= column->type= FIELD_SKIP_ENDSPACE;
+ }
+ }
if (type != FIELD_NORMAL && type != FIELD_CHECK)
{
@@ -623,7 +632,6 @@ int maria_create(const char *name, enum data_file_type datafile_type,
}
unique_key_parts=0;
- offset=reclength-uniques*MARIA_UNIQUE_HASH_LENGTH;
for (i=0, uniquedef=uniquedefs ; i < uniques ; i++ , uniquedef++)
{
uniquedef->key=keys+i;
@@ -869,7 +877,7 @@ int maria_create(const char *name, enum data_file_type datafile_type,
#endif
}
/* Create extra keys for unique definitions */
- offset=reclength-uniques*MARIA_UNIQUE_HASH_LENGTH;
+ offset= real_reclength - uniques*MARIA_UNIQUE_HASH_LENGTH;
bzero((char*) &tmp_keydef,sizeof(tmp_keydef));
bzero((char*) &tmp_keyseg,sizeof(tmp_keyseg));
for (i=0; i < uniques ; i++)
@@ -1199,7 +1207,7 @@ uint maria_get_pointer_length(ulonglong file_length, uint def)
For same kind of fields, keep fields in original order
*/
-static inline int sign(longlong a)
+static inline int sign(long a)
{
return a < 0 ? -1 : (a > 0 ? 1 : 0);
}
@@ -1219,12 +1227,12 @@ static int compare_columns(MARIA_COLUMNDEF **a_ptr, MARIA_COLUMNDEF **b_ptr)
{
if (b_type != FIELD_NORMAL || b->null_bit)
return -1;
- return sign((long) (a->offset - b->offset));
+ return sign((long) a->offset - (long) b->offset);
}
if (b_type == FIELD_NORMAL && !b->null_bit)
return 1;
if (a_type == b_type)
- return sign((long) (a->offset - b->offset));
+ return sign((long) a->offset - (long) b->offset);
if (a_type == FIELD_NORMAL)
return -1;
if (b_type == FIELD_NORMAL)
@@ -1233,7 +1241,7 @@ static int compare_columns(MARIA_COLUMNDEF **a_ptr, MARIA_COLUMNDEF **b_ptr)
return 1;
if (b_type == FIELD_BLOB)
return -1;
- return sign((long) (a->offset - b->offset));
+ return sign((long) a->offset - (long) b->offset);
}