~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_base.cc

  • Committer: Brian Aker
  • Date: 2009-07-04 16:06:33 UTC
  • Revision ID: brian@gaz-20090704160633-7lsb6b5nm7ybod2y
Reversing patch that Solaris has issues with.

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>
25
24
 
26
25
#if TIME_WITH_SYS_TIME
27
26
# include <sys/time.h>
36
35
#include <mysys/my_pthread.h>
37
36
 
38
37
#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;
4998
4999
  char  filePath[FN_REFLEN], filePathCopy[FN_REFLEN];
4999
 
  DIR *dirp;
 
5000
  MY_DIR *dirp;
 
5001
  FILEINFO *file;
5000
5002
  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
 
  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))
 
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++)
5023
5017
    {
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))
 
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))
5031
5026
      {
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))
 
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))
5038
5033
        {
5039
 
          share.db_type()->deleteTable(session, filePathCopy);
 
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();
5040
5044
        }
5041
 
        share.free_table_share();
 
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));
5042
5051
      }
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));
5050
5052
    }
 
5053
    my_dirend(dirp);
5051
5054
  }
5052
5055
 
5053
 
  (void) closedir(dirp);
5054
 
 
5055
5056
  delete session;
5056
5057
 
5057
5058
  return false;