~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/util/tablename_to_filename.cc

  • Committer: lbieber
  • Date: 2010-10-06 16:34:16 UTC
  • mfrom: (1816.1.3 build)
  • Revision ID: lbieber@orisndriz08-20101006163416-ea0sl59qgpglk21y
Merge Monty - Change the requirement from either libinnodb to libhaildb. Also, tied it to version 2.2
Merge Andrew - fix bug 650935: remove --compress from all clients
Merge Andrew - fix bug 653471: Add -A to drizzle client
Merge Travis - 621861 = To change C structs to C++ classes in Drizzle

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* - mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 
 *
4
 
 *  Copyright (C) 2010 Brian Aker
5
 
 *
6
 
 *  This program is free software; you can redistribute it and/or modify
7
 
 *  it under the terms of the GNU General Public License as published by
8
 
 *  the Free Software Foundation; either version 2 of the License, or
9
 
 *  (at your option) any later version.
10
 
 *
11
 
 *  This program is distributed in the hope that it will be useful,
12
 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 
 *  GNU General Public License for more details.
15
 
 *
16
 
 *  You should have received a copy of the GNU General Public License
17
 
 *  along with this program; if not, write to the Free Software
18
 
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
 
 */
20
 
 
21
 
#include "config.h"
22
 
#include <string>
23
 
 
24
 
#include "drizzled/util/tablename_to_filename.h"
25
 
 
26
 
#include "drizzled/internal/my_sys.h"
27
 
 
28
 
namespace drizzled
29
 
{
30
 
namespace util
31
 
{
32
 
 
33
 
static const char hexchars[]= "0123456789abcdef";
34
 
 
35
 
 
36
 
/*
37
 
  Translate a table name to a cursor name (WL #1324).
38
 
 
39
 
  SYNOPSIS
40
 
    tablename_to_filename()
41
 
      from                      The table name
42
 
      to                OUT     The cursor name
43
 
 
44
 
  RETURN
45
 
    true if errors happen. false on success.
46
 
*/
47
 
bool tablename_to_filename(const std::string &from, std::string &to)
48
 
{
49
 
  
50
 
  std::string::const_iterator iter= from.begin();
51
 
  for (; iter != from.end(); ++iter)
52
 
  {
53
 
    if (isascii(*iter))
54
 
    {
55
 
      if ((isdigit(*iter)) ||
56
 
          (islower(*iter)) ||
57
 
          (*iter == '_') ||
58
 
          (*iter == ' ') ||
59
 
          (*iter == '-'))
60
 
      {
61
 
        to.push_back(*iter);
62
 
        continue;
63
 
      }
64
 
 
65
 
      if (isupper(*iter))
66
 
      {
67
 
        to.push_back(tolower(*iter));
68
 
        continue;
69
 
      }
70
 
    }
71
 
   
72
 
    /* We need to escape this char in a way that can be reversed */
73
 
    to.push_back('@');
74
 
    to.push_back(hexchars[(*iter >> 4) & 15]);
75
 
    to.push_back(hexchars[(*iter) & 15]);
76
 
  }
77
 
 
78
 
  if (drizzled::internal::check_if_legal_tablename(to.c_str()))
79
 
  {
80
 
    to.append("@@@");
81
 
  }
82
 
  return false;
83
 
}
84
 
 
85
 
} /* namespace util */
86
 
} /* namespace drizzled */