无法关闭MySQL UDF(V5.6)中的表

时间:2013-12-27 14:39:26

标签: mysql

我花了三天时间试图找出这个,任何帮助都会受到赞赏。我试图在MySQL中的UDF中打开几个表(以InnoDB格式存储)。如果我创建一个新的THD实例并将其设置为“当前thd”,我就能打开它们。但是,我有正确关闭这些表的问题。我用来打开表的代码看起来像这样

THD *thd = new THD;
thd->thread_stack = (char*) &thd;
thd->set_db(db_name, strlen(db_name));
my_pthread_setspecific_ptr(THR_THD,  thd);

const unsigned int NUMBER_OF_TABLES = 5;
char* tableNames[NUMBER_OF_TABLES];

... set table name here ...

TABLE_LIST tables[NUMBER_OF_TABLES];
for (unsigned int i = 0; i < NUMBER_OF_TABLES; i++) 
{
  tables[i].init_one_table((char*)db_name, strlen(db_name), tableNames[i],   
                 strlen(tableNames[i]), tableNames[i], TL_WRITE_ALLOW_WRITE);
  if (i != NUMBER_OF_TABLES-1)
    tables[i].next_local = tables[i].next_global = tables + 1 + i;
  }
}
if (open_and_lock_tables(thd, tables, false, MYSQL_LOCK_IGNORE_TIMEOUT))
{
  goto end;
}

我能够使用上面的代码块打开所有表。但是,当我完成它们的使用时,由于断言失败,我无法关闭这些表。如果有人能帮助我,我将不胜感激。我使用以下代码块来关闭表,

thd->cleanup_after_query();
close_thread_tables(thd);
delete thd;

失败的断言与thd-&gt; transaction.stmt.is_empty()有关。 is_empty()方法只检查ha_list == NULL。 我想了解如何正确关闭这些表?

我正在使用MySQL 5.6在Windows 7上进行开发。

0 个答案:

没有答案