~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to storage/myisam/mi_open.c

  • Committer: Monty Taylor
  • Date: 2008-07-16 19:10:24 UTC
  • mfrom: (51.1.127 remove-dbug)
  • mto: This revision was merged to the branch mainline in revision 176.
  • Revision ID: monty@inaugust.com-20080716191024-prjgoh7fbri7rx26
MergedĀ fromĀ remove-dbug.

Show diffs side-by-side

added added

removed removed

Lines of Context:
72
72
  ulong rec_per_key_part[HA_MAX_POSSIBLE_KEY*MI_MAX_KEY_SEG];
73
73
  my_off_t key_root[HA_MAX_POSSIBLE_KEY],key_del[MI_MAX_KEY_BLOCK_SIZE];
74
74
  uint64_t max_key_file_length, max_data_file_length;
75
 
  DBUG_ENTER("mi_open");
76
75
 
77
76
  kfile= -1;
78
77
  lock_error=1;
93
92
    share_buff.key_cache= multi_key_cache_search((uchar*) name_buff,
94
93
                                                 strlen(name_buff));
95
94
 
96
 
    DBUG_EXECUTE_IF("myisam_pretend_crashed_table_on_open",
97
 
                    if (strstr(name, "/t1"))
98
 
                    {
99
 
                      my_errno= HA_ERR_CRASHED;
100
 
                      goto err;
101
 
                    });
102
95
    if ((kfile=my_open(name_buff,(open_mode=O_RDWR) | O_SHARE,MYF(0))) < 0)
103
96
    {
104
97
      if ((errno != EROFS && errno != EACCES) ||
117
110
    if (memcmp((uchar*) share->state.header.file_version,
118
111
               (uchar*) myisam_file_magic, 4))
119
112
    {
120
 
      DBUG_PRINT("error",("Wrong header in %s",name_buff));
121
 
      DBUG_DUMP("error_dump",(uchar*) share->state.header.file_version,
122
 
                head_length);
123
113
      my_errno=HA_ERR_NOT_A_TABLE;
124
114
      goto err;
125
115
    }
131
121
          HA_OPTION_TMP_TABLE | HA_OPTION_DELAY_KEY_WRITE |
132
122
          HA_OPTION_RELIES_ON_SQL_LAYER))
133
123
    {
134
 
      DBUG_PRINT("error",("wrong options: 0x%lx", share->options));
135
124
      my_errno=HA_ERR_OLD_FILE;
136
125
      goto err;
137
126
    }
138
127
    if ((share->options & HA_OPTION_RELIES_ON_SQL_LAYER) &&
139
128
        ! (open_flags & HA_OPEN_FROM_SQL_LAYER))
140
129
    {
141
 
      DBUG_PRINT("error", ("table cannot be openned from non-sql layer"));
142
130
      my_errno= HA_ERR_UNSUPPORTED;
143
131
      goto err;
144
132
    }
173
161
    fulltext_keys= (uint) share->state.header.fulltext_keys;
174
162
    key_parts= mi_uint2korr(share->state.header.key_parts);
175
163
    unique_key_parts= mi_uint2korr(share->state.header.unique_key_parts);
176
 
    if (len != MI_STATE_INFO_SIZE)
177
 
    {
178
 
      DBUG_PRINT("warning",
179
 
                 ("saved_state_info_length: %d  state_info_length: %d",
180
 
                  len,MI_STATE_INFO_SIZE));
181
 
    }
182
164
    share->state_diff_length=len-MI_STATE_INFO_SIZE;
183
165
 
184
166
    mi_state_info_read(disk_cache, &share->state);
185
167
    len= mi_uint2korr(share->state.header.base_info_length);
186
 
    if (len != MI_BASE_INFO_SIZE)
187
 
    {
188
 
      DBUG_PRINT("warning",("saved_base_info_length: %d  base_info_length: %d",
189
 
                            len,MI_BASE_INFO_SIZE));
190
 
    }
191
168
    disk_pos= my_n_base_info_read(disk_cache + base_pos, &share->base);
192
169
    share->state.state_length=base_pos;
193
170
 
196
173
         ((open_flags & HA_OPEN_ABORT_IF_CRASHED) &&
197
174
          (share->state.open_count))))
198
175
    {
199
 
      DBUG_PRINT("error",("Table is marked as crashed. open_flags: %u  "
200
 
                          "changed: %u  open_count: %u",
201
 
                          open_flags, share->state.changed,
202
 
                          share->state.open_count));
203
176
      my_errno=((share->state.changed & STATE_CRASHED_ON_REPAIR) ?
204
177
                HA_ERR_CRASHED_ON_REPAIR : HA_ERR_CRASHED_ON_USAGE);
205
178
      goto err;
215
188
    if (share->base.max_key_length > MI_MAX_KEY_BUFF || keys > MI_MAX_KEY ||
216
189
        key_parts > MI_MAX_KEY * MI_MAX_KEY_SEG)
217
190
    {
218
 
      DBUG_PRINT("error",("Wrong key info:  Max_key_length: %d  keys: %d  key_parts: %d", share->base.max_key_length, keys, key_parts));
219
191
      my_errno=HA_ERR_UNSUPPORTED;
220
192
      goto err;
221
193
    }
235
207
#endif
236
208
    if (share->base.raid_type)
237
209
    {
238
 
      DBUG_PRINT("error",("Table uses RAID but we don't have RAID support"));
239
210
      my_errno=HA_ERR_UNSUPPORTED;
240
211
      goto err;
241
212
    }
552
523
    intern_filename(name_buff,share->index_file_name);
553
524
    _myisam_log(MI_LOG_OPEN, m_info, (uchar*) name_buff, strlen(name_buff));
554
525
  }
555
 
  DBUG_RETURN(m_info);
 
526
  return(m_info);
556
527
 
557
528
err:
558
529
  save_errno=my_errno ? my_errno : HA_ERR_END_OF_FILE;
586
557
  }
587
558
  pthread_mutex_unlock(&THR_LOCK_myisam);
588
559
  my_errno=save_errno;
589
 
  DBUG_RETURN (NULL);
 
560
  return (NULL);
590
561
} /* mi_open */
591
562
 
592
563
 
755
726
  uchar *ptr=buff;
756
727
  uint  i, keys= (uint) state->header.keys,
757
728
        key_blocks=state->header.max_block_size_index;
758
 
  DBUG_ENTER("mi_state_info_write");
759
729
 
760
730
  memcpy_fixed(ptr,&state->header,sizeof(state->header));
761
731
  ptr+=sizeof(state->header);
806
776
  }
807
777
 
808
778
  if (pWrite & 1)
809
 
    DBUG_RETURN(my_pwrite(file, buff, (size_t) (ptr-buff), 0L,
 
779
    return(my_pwrite(file, buff, (size_t) (ptr-buff), 0L,
810
780
                          MYF(MY_NABP | MY_THREADSAFE)) != 0);
811
 
  DBUG_RETURN(my_write(file, buff, (size_t) (ptr-buff),
 
781
  return(my_write(file, buff, (size_t) (ptr-buff),
812
782
                       MYF(MY_NABP)) != 0);
813
783
}
814
784