~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_base.cc

  • Committer: Brian Aker
  • Date: 2009-07-03 00:39:59 UTC
  • mfrom: (1081.3.3 my_dir_removal)
  • Revision ID: brian@gaz-20090703003959-7y7mwb8u7etz9jco
Merge David

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
#include <assert.h>
22
22
 
23
23
#include <signal.h>
 
24
#include <dirent.h>
24
25
 
25
26
#if TIME_WITH_SYS_TIME
26
27
# include <sys/time.h>
35
36
#include <mysys/my_pthread.h>
36
37
 
37
38
#include <drizzled/sql_select.h>
38
 
#include <mysys/my_dir.h>
39
39
#include <drizzled/error.h>
40
40
#include <drizzled/gettext.h>
41
41
#include <drizzled/nested_join.h>
4995
4995
 
4996
4996
bool drizzle_rm_tmp_tables(ListenHandler &listen_handler)
4997
4997
{
4998
 
  uint32_t  idx;
4999
4998
  char  filePath[FN_REFLEN], filePathCopy[FN_REFLEN];
5000
 
  MY_DIR *dirp;
5001
 
  FILEINFO *file;
 
4999
  DIR *dirp;
5002
5000
  Session *session;
 
5001
  struct dirent d_entry;
 
5002
  struct dirent *d_result;
5003
5003
 
5004
5004
  assert(drizzle_tmpdir);
5005
5005
 
5008
5008
  session->thread_stack= (char*) &session;
5009
5009
  session->store_globals();
5010
5010
 
5011
 
  /* Remove all temp tables in the tmpdir */
5012
 
  /* See if the directory exists */
5013
 
  if ((dirp = my_dir(drizzle_tmpdir ,MYF(MY_WME | MY_DONT_SORT))))
5014
 
  {
5015
 
    /* Remove all SQLxxx tables from directory */
5016
 
    for (idx=0 ; idx < (uint32_t) dirp->number_off_files ; idx++)
 
5011
  if ((dirp= opendir(drizzle_tmpdir)) == NULL)
 
5012
  {
 
5013
    my_errno= errno;
 
5014
    my_error(ER_CANT_READ_DIR, MYF(0), drizzle_tmpdir, my_errno);
 
5015
    delete session;
 
5016
    return false;
 
5017
  }
 
5018
 
 
5019
  /* Remove all SQLxxx tables from directory */
 
5020
  while (!readdir_r(dirp, &d_entry, &d_result) && (d_result != NULL))
 
5021
  {
 
5022
    if (!memcmp(d_entry.d_name, TMP_FILE_PREFIX, TMP_FILE_PREFIX_LENGTH))
5017
5023
    {
5018
 
      file=dirp->dir_entry+idx;
5019
 
 
5020
 
      /* skiping . and .. */
5021
 
      if (file->name[0] == '.' && (!file->name[1] ||
5022
 
                                   (file->name[1] == '.' &&  !file->name[2])))
5023
 
        continue;
5024
 
 
5025
 
      if (!memcmp(file->name, TMP_FILE_PREFIX, TMP_FILE_PREFIX_LENGTH))
 
5024
      char *ext= fn_ext(d_entry.d_name);
 
5025
      uint32_t ext_len= strlen(ext);
 
5026
      uint32_t filePath_len= snprintf(filePath, sizeof(filePath),
 
5027
                                      "%s%c%s", drizzle_tmpdir, FN_LIBCHAR,
 
5028
                                      d_entry.d_name);
 
5029
 
 
5030
      if (ext_len && !memcmp(".dfe", ext, ext_len))
5026
5031
      {
5027
 
        char *ext= fn_ext(file->name);
5028
 
        uint32_t ext_len= strlen(ext);
5029
 
        uint32_t filePath_len= snprintf(filePath, sizeof(filePath),
5030
 
                                        "%s%c%s", drizzle_tmpdir, FN_LIBCHAR,
5031
 
                                        file->name);
5032
 
        if (!memcmp(".dfe", ext, ext_len))
 
5032
        TableShare share;
 
5033
        /* We should cut file extention before deleting of table */
 
5034
        memcpy(filePathCopy, filePath, filePath_len - ext_len);
 
5035
        filePathCopy[filePath_len - ext_len]= 0;
 
5036
        share.init(NULL, filePathCopy);
 
5037
        if (!open_table_def(session, &share))
5033
5038
        {
5034
 
          TableShare share;
5035
 
          /* We should cut file extention before deleting of table */
5036
 
          memcpy(filePathCopy, filePath, filePath_len - ext_len);
5037
 
          filePathCopy[filePath_len - ext_len]= 0;
5038
 
          share.init(NULL, filePathCopy);
5039
 
          if (!open_table_def(session, &share))
5040
 
          {
5041
 
            share.db_type()->deleteTable(session, filePathCopy);
5042
 
          }
5043
 
          share.free_table_share();
 
5039
          share.db_type()->deleteTable(session, filePathCopy);
5044
5040
        }
5045
 
        /*
5046
 
          File can be already deleted by tmp_table.file->delete_table().
5047
 
          So we hide error messages which happnes during deleting of these
5048
 
          files(MYF(0)).
5049
 
        */
5050
 
        my_delete(filePath, MYF(0));
 
5041
        share.free_table_share();
5051
5042
      }
 
5043
 
 
5044
      /*
 
5045
        File can be already deleted by tmp_table.file->delete_table().
 
5046
        So we hide error messages which happnes during deleting of these
 
5047
        files(MYF(0)).
 
5048
      */
 
5049
      my_delete(filePath, MYF(0));
5052
5050
    }
5053
 
    my_dirend(dirp);
5054
5051
  }
5055
5052
 
 
5053
  (void) closedir(dirp);
 
5054
 
5056
5055
  delete session;
5057
5056
 
5058
5057
  return false;