94
96
if (!memcmp(from, TMP_FILE_PREFIX, TMP_FILE_PREFIX_LENGTH))
96
98
/* Temporary table name. */
97
res= (my_stpncpy(to, from, to_length) - to);
99
res= strlen(strncpy(to, from, to_length));
176
178
build_tmptable_filename() for them.
181
path length on success, 0 on failure
182
184
uint32_t build_table_filename(char *buff, size_t bufflen, const char *db,
183
185
const char *table_name, const char *ext, uint32_t flags)
185
188
char dbbuff[FN_REFLEN];
186
189
char tbbuff[FN_REFLEN];
190
int rootdir_len= strlen(FN_ROOTDIR);
188
192
if (flags & FN_IS_TMP) // FN_FROM_IS_TMP | FN_TO_IS_TMP
189
my_stpncpy(tbbuff, table_name, sizeof(tbbuff));
193
strncpy(tbbuff, table_name, sizeof(tbbuff));
191
195
tablename_to_filename(table_name, tbbuff, sizeof(tbbuff));
193
197
tablename_to_filename(db, dbbuff, sizeof(dbbuff));
198
table_path= drizzle_data_home;
199
int without_rootdir= table_path.length()-rootdir_len;
195
char *end = buff + bufflen;
196
201
/* Don't add FN_ROOTDIR if dirzzle_data_home already includes it */
197
char *pos = my_stpncpy(buff, drizzle_data_home, bufflen);
198
int rootdir_len= strlen(FN_ROOTDIR);
199
if (pos - rootdir_len >= buff &&
200
memcmp(pos - rootdir_len, FN_ROOTDIR, rootdir_len) != 0)
201
pos= my_stpncpy(pos, FN_ROOTDIR, end - pos);
202
pos= my_stpncpy(pos, dbbuff, end-pos);
203
pos= my_stpncpy(pos, FN_ROOTDIR, end-pos);
202
if (without_rootdir >= 0)
204
char *tmp= (char*)table_path.c_str()+without_rootdir;
205
if (memcmp(tmp, FN_ROOTDIR, rootdir_len) != 0)
206
table_path.append(FN_ROOTDIR);
209
table_path.append(dbbuff);
210
table_path.append(FN_ROOTDIR);
204
211
#ifdef USE_SYMDIR
205
unpack_dirname(buff, buff);
208
pos= my_stpncpy(pos, tbbuff, end - pos);
209
pos= my_stpncpy(pos, ext, end - pos);
214
table_path.append(tbbuff);
215
table_path.append(ext);
217
if (bufflen < table_path.length())
220
strcpy(buff, table_path.c_str());
221
return table_path.length();
227
237
a file name in drizzle_tmpdir.
240
path length on success, 0 on failure
233
243
uint32_t build_tmptable_filename(Session* session, char *buff, size_t bufflen)
246
ostringstream path_str, post_tmpdir_str;
236
char *p= my_stpncpy(buff, drizzle_tmpdir, bufflen);
237
snprintf(p, bufflen - (p - buff), "/%s%lx_%"PRIx64"_%x%s",
238
TMP_FILE_PREFIX, (unsigned long)current_pid,
239
session->thread_id, session->tmp_table++, reg_ext);
249
path_str << drizzle_tmpdir;
250
post_tmpdir_str << "/" << TMP_FILE_PREFIX << current_pid;
251
post_tmpdir_str << session->thread_id << session->tmp_table++ << reg_ext;
252
tmp= post_tmpdir_str.str();
241
254
if (lower_case_table_names)
243
/* Convert all except tmpdir to lower case */
244
my_casedn_str(files_charset_info, p);
247
uint32_t length= unpack_filename(buff, buff);
255
transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);
259
if (bufflen < path_str.str().length())
262
length= unpack_filename(buff, path_str.str().c_str());
4395
4411
uint32_t order_num, order_st *order, bool ignore)
4397
4413
Table *table, *new_table=0, *name_lock= 0;;
4414
string new_name_str;
4399
4416
char tmp_name[80],old_name[32],new_name_buff[FN_REFLEN];
4400
4417
char new_alias_buff[FN_REFLEN], *table_name, *db, *new_alias, *alias;
4430
4447
/* Conditionally writes to binlog. */
4431
4448
return(mysql_discard_or_import_tablespace(session,table_list,
4432
4449
alter_info->tablespace_op));
4433
char* pos= new_name_buff;
4434
char* pos_end= pos+strlen(new_name_buff)-1;
4435
pos= my_stpncpy(new_name_buff, drizzle_data_home, pos_end-pos);
4436
pos= my_stpncpy(new_name_buff, "/", pos_end-pos);
4437
pos= my_stpncpy(new_name_buff, db, pos_end-pos);
4438
pos= my_stpncpy(new_name_buff, "/", pos_end-pos);
4439
pos= my_stpncpy(new_name_buff, table_name, pos_end-pos);
4440
pos= my_stpncpy(new_name_buff, reg_ext, pos_end-pos);
4451
oss << drizzle_data_home << "/" << db << "/" << table_name << reg_ext;
4442
(void) unpack_filename(new_name_buff, new_name_buff);
4453
(void) unpack_filename(new_name_buff, oss.str().c_str());
4444
4455
If this is just a rename of a view, short cut to the
4445
4456
following scenario: 1) lock LOCK_open 2) do a RENAME