~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/identifier/table.cc

  • Committer: Lee Bieber
  • Date: 2011-03-23 22:07:25 UTC
  • mfrom: (2246.4.6 foreach)
  • mto: This revision was merged to the branch mainline in revision 2248.
  • Revision ID: kalebral@gmail.com-20110323220725-0whqef7r72kv7tox
Merge Olaf - Use BOOST_FOREACH

Show diffs side-by-side

added added

removed removed

Lines of Context:
310
310
 
311
311
const std::string &Table::getKeyPath() const
312
312
{
313
 
  if (key_path.empty())
314
 
    return path;
315
 
 
316
 
  return key_path;
 
313
  return key_path.empty() ? path : key_path;
317
314
}
318
315
 
319
 
void Table::getSQLPath(std::string &sql_path) const  // @todo this is just used for errors, we should find a way to optimize it
 
316
std::string Table::getSQLPath() const  // @todo this is just used for errors, we should find a way to optimize it
320
317
{
321
 
  switch (type) {
 
318
  switch (type) 
 
319
        {
322
320
  case message::Table::FUNCTION:
323
321
  case message::Table::STANDARD:
324
 
    sql_path.append(getSchemaName());
325
 
    sql_path.append(".");
326
 
    sql_path.append(table_name);
327
 
    break;
 
322
                return getSchemaName() + "." + table_name;
328
323
  case message::Table::INTERNAL:
329
 
    sql_path.append("temporary.");
330
 
    sql_path.append(table_name);
331
 
    break;
 
324
                return "temporary." + table_name;
332
325
  case message::Table::TEMPORARY:
333
 
    sql_path.append(getSchemaName());
334
 
    sql_path.append(".#");
335
 
    sql_path.append(table_name);
336
 
    break;
 
326
    return getSchemaName() + ".#" + table_name;
337
327
  }
 
328
        assert(false);
 
329
        return "<no table>";
338
330
}
339
331
 
340
332
bool Table::isValid() const
343
335
    return false;
344
336
 
345
337
  bool error= false;
346
 
  do
347
 
  {
348
 
    if (table_name.empty())
349
 
    {
350
 
      error= true;
351
 
      break;
352
 
    }
353
 
 
354
 
    if (table_name.size() > NAME_LEN)
355
 
    {
356
 
      error= true;
357
 
      break;
358
 
    }
359
 
 
360
 
    if (table_name.at(table_name.length() -1) == ' ')
361
 
    {
362
 
      error= true;
363
 
      break;
364
 
    }
365
 
 
366
 
    if (table_name.at(0) == '.')
367
 
    {
368
 
      error= true;
369
 
      break;
370
 
    }
371
 
 
372
 
    {
373
 
      const CHARSET_INFO * const cs= &my_charset_utf8mb4_general_ci;
374
 
 
375
 
      int well_formed_error;
376
 
      uint32_t res= cs->cset->well_formed_len(cs, table_name.c_str(), table_name.c_str() + table_name.length(),
377
 
                                              NAME_CHAR_LEN, &well_formed_error);
378
 
      if (well_formed_error or table_name.length() != res)
379
 
      {
380
 
        error= true;
381
 
        break;
382
 
      }
383
 
    }
384
 
  } while (0);
385
 
 
386
 
  if (error)
387
 
  {
388
 
    std::string name;
389
 
 
390
 
    getSQLPath(name);
391
 
    my_error(ER_WRONG_TABLE_NAME, MYF(0), name.c_str());
392
 
 
393
 
    return false;
394
 
  }
395
 
 
396
 
  return true;
 
338
  if (table_name.empty()
 
339
                || table_name.size() > NAME_LEN
 
340
                || table_name[table_name.length() - 1] == ' '
 
341
                || table_name[0] == '.')
 
342
  {
 
343
    error= true;
 
344
  }
 
345
        else
 
346
  {
 
347
    int well_formed_error;
 
348
    uint32_t res= my_charset_utf8mb4_general_ci.cset->well_formed_len(&my_charset_utf8mb4_general_ci, 
 
349
                        table_name.c_str(), table_name.c_str() + table_name.length(), NAME_CHAR_LEN, &well_formed_error);
 
350
    if (well_formed_error or table_name.length() != res)
 
351
      error= true;
 
352
  }
 
353
  if (not error)
 
354
                return true;
 
355
  my_error(ER_WRONG_TABLE_NAME, MYF(0), getSQLPath().c_str());
 
356
  return false;
397
357
}
398
358
 
399
359