~stewart/drizzle/update-innobase-1.0.11

« back to all changes in this revision

Viewing changes to drizzled/plugin/storage_engine.cc

  • Committer: Stewart Smith
  • Date: 2010-11-16 02:46:05 UTC
  • mfrom: (1819.163.13 staging)
  • Revision ID: stewart@flamingspork.com-20101116024605-yjr1fj0t7o4hb5qj
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
56
56
 
57
57
#include <drizzled/table/shell.h>
58
58
 
 
59
#include "drizzled/message/cache.h"
 
60
 
59
61
#include <boost/algorithm/string/compare.hpp>
60
62
 
61
63
static bool shutdown_has_begun= false; // Once we put in the container for the vector/etc for engines this will go away.
368
370
*/
369
371
int StorageEngine::getTableDefinition(Session& session,
370
372
                                      const TableIdentifier &identifier,
371
 
                                      message::Table &table_message,
 
373
                                      message::TablePtr &table_message,
372
374
                                      bool include_temporary_tables)
373
375
{
374
376
  int err= ENOENT;
375
377
 
376
378
  if (include_temporary_tables)
377
379
  {
378
 
    if (session.doGetTableDefinition(identifier, table_message) == EEXIST)
 
380
    Table *table= session.find_temporary_table(identifier);
 
381
    if (table)
 
382
    {
 
383
      table_message.reset(new message::Table(*table->getShare()->getTableProto()));
379
384
      return EEXIST;
380
 
  }
381
 
 
 
385
    }
 
386
  }
 
387
 
 
388
  drizzled::message::TablePtr table_ptr;
 
389
  if ((table_ptr= drizzled::message::Cache::singleton().find(identifier)))
 
390
  {
 
391
    table_message= table_ptr;
 
392
  }
 
393
 
 
394
  message::Table message;
382
395
  EngineVector::iterator iter=
383
396
    find_if(vector_of_engines.begin(), vector_of_engines.end(),
384
 
            StorageEngineGetTableDefinition(session, identifier, table_message, err));
 
397
            StorageEngineGetTableDefinition(session, identifier, message, err));
385
398
 
386
399
  if (iter == vector_of_engines.end())
387
400
  {
388
401
    return ENOENT;
389
402
  }
 
403
  table_message.reset(new message::Table(message));
 
404
 
 
405
 drizzled::message::Cache::singleton().insert(identifier, table_message);
390
406
 
391
407
  return err;
392
408
}
429
445
{
430
446
  int error= 0;
431
447
  int error_proto;
432
 
  message::Table src_proto;
 
448
  message::TablePtr src_proto;
433
449
  StorageEngine *engine;
434
450
 
435
451
  error_proto= StorageEngine::getTableDefinition(session, identifier, src_proto);
440
456
 
441
457
    error_message.append(const_cast<TableIdentifier &>(identifier).getSQLPath());
442
458
    error_message.append(" : ");
443
 
    error_message.append(src_proto.InitializationErrorString());
 
459
    error_message.append(src_proto->InitializationErrorString());
444
460
 
445
461
    my_error(ER_CORRUPT_TABLE_DEFINITION, MYF(0), error_message.c_str());
446
462
 
447
463
    return ER_CORRUPT_TABLE_DEFINITION;
448
464
  }
449
465
 
450
 
  engine= StorageEngine::findByName(session, src_proto.engine().name());
 
466
  if (src_proto)
 
467
    engine= StorageEngine::findByName(session, src_proto->engine().name());
 
468
  else
 
469
    engine= StorageEngine::findByName(session, "");
451
470
 
452
471
  if (not engine)
453
472
  {
485
504
    }
486
505
  }
487
506
 
 
507
  drizzled::message::Cache::singleton().erase(identifier);
488
508
 
489
509
  return error;
490
510
}