~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/identifier/catalog.cc

  • Committer: Lee Bieber
  • Date: 2011-03-18 04:10:25 UTC
  • mfrom: (2241.1.2 build)
  • Revision ID: kalebral@gmail.com-20110318041025-1xoj1azy6zobhnbm
Merge Stewart - refactoring of default values
Merge Olaf - more refactoring

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
 
38
38
using namespace std;
39
39
 
40
 
namespace drizzled
41
 
{
42
 
 
43
 
namespace identifier
44
 
{
45
 
 
46
 
static void build_schema_filename(string &path, const string &name_arg)
47
 
{
48
 
  path.append("../");
49
 
  bool conversion_error= false;
50
 
 
51
 
  conversion_error= util::tablename_to_filename(name_arg, path);
52
 
  if (conversion_error)
53
 
  {
54
 
    errmsg_printf(error::ERROR,
55
 
                  _("Catalog name cannot be encoded and fit within filesystem "
56
 
                    "name length restrictions."));
57
 
  }
58
 
}
 
40
namespace drizzled {
 
41
namespace identifier {
59
42
 
60
43
Catalog::Catalog(const std::string &name_arg) :
61
44
  _name(name_arg)
69
52
  init();
70
53
}
71
54
 
72
 
void  Catalog::init()
 
55
void Catalog::init()
73
56
74
57
  assert(not _name.empty());
75
 
 
76
 
  build_schema_filename(path, _name);
 
58
  path.append("../");
 
59
  if (util::tablename_to_filename(_name, path))
 
60
    errmsg_printf(error::ERROR, _("Catalog name cannot be encoded and fit within filesystem name length restrictions."));
77
61
  assert(path.length()); // TODO throw exception, this is a possibility
78
 
 
79
 
  util::insensitive_hash hasher;
80
 
  hash_value= hasher(path);
81
 
}
82
 
 
83
 
const std::string &Catalog::getPath() const
84
 
{
85
 
  return path;
 
62
  hash_value= util::insensitive_hash()(path);
86
63
}
87
64
 
88
65
bool Catalog::compare(const std::string &arg) const
92
69
 
93
70
bool Catalog::isValid() const
94
71
{
95
 
  if (_name.empty())
96
 
    return false;
97
 
 
98
 
  if (_name.size() > NAME_LEN)
99
 
    return false;
100
 
 
101
 
  if (_name.at(_name.length() -1) == ' ')
102
 
    return false;
103
 
 
104
 
  const CHARSET_INFO * const cs= &my_charset_utf8mb4_general_ci;
105
 
 
 
72
  if (_name.empty()
 
73
    || _name.size() > NAME_LEN
 
74
    || _name.at(_name.length() -1 ) == ' ')
 
75
    return false;
 
76
  const CHARSET_INFO& cs= my_charset_utf8mb4_general_ci;
106
77
  int well_formed_error;
107
 
  uint32_t res= cs->cset->well_formed_len(cs, _name.c_str(), _name.c_str() + _name.length(),
108
 
                                          NAME_CHAR_LEN, &well_formed_error);
109
 
 
 
78
  uint32_t res= cs.cset->well_formed_len(&cs, _name.c_str(), _name.c_str() + _name.length(), NAME_CHAR_LEN, &well_formed_error);
110
79
  if (well_formed_error)
111
80
  {
112
81
    my_error(ER_INVALID_CHARACTER_STRING, MYF(0), "identifier", _name.c_str());
113
82
    return false;
114
83
  }
115
 
 
116
84
  if (_name.length() != res)
117
85
    return false;
118
 
 
119
86
  return true;
120
87
}
121
88
 
122
 
std::size_t hash_value(Catalog const& b)
123
 
{
124
 
  return b.getHashValue();
125
 
}
126
 
 
127
 
void Catalog::getSQLPath(std::string &sql_path) const
128
 
{
129
 
  sql_path= _name;
130
 
}
131
 
 
132
 
 
133
 
 
134
89
} /* namespace identifier */
135
90
} /* namespace drizzled */