Firebird 2.5事件“将数据写入连接时出错”
我使用的是OSX10.10上最新的Firebird 2.5.3,使用的是C api,并且发布了一个专门针对事件的版本。我明白了Firebird 2.5事件“将数据写入连接时出错”,firebird,firebird2.5,Firebird,Firebird2.5,我使用的是OSX10.10上最新的Firebird 2.5.3,使用的是C api,并且发布了一个专门针对事件的版本。我明白了 "error writing data to the connection" 从数据库触发器运行的事件发生概率约为1:5,使用: POST_EVENT 'xxx'; 其中“xxx”是事件\u回调 这是其他人看到的问题吗?我很难用谷歌追踪到很多信息,因为大多数参考资料都是早期版本的Firebird,或者是所谓的“修复”bug 编辑-其他
"error writing data to the connection"
从数据库触发器运行的事件发生概率约为1:5,使用:
POST_EVENT 'xxx';
其中“xxx”是事件\u回调
这是其他人看到的问题吗?我很难用谷歌追踪到很多信息,因为大多数参考资料都是早期版本的Firebird,或者是所谓的“修复”bug
编辑-其他信息
显然,一些细节已经被忽略了
触发器的创建类似于:
"CREATE TRIGGER \"%s\" FOR \"%s\" \
AFTER %s \
AS \
BEGIN \
if( new.id = %d ) THEN \
BEGIN \
INSERT INTO \"Event_Log\" (\"ID\",\"triggerName\", \"lastModified\") VALUES (GEN_ID(\"seq_Event_Table\",1)'%s', (select current_timestamp from rdb$database) ); \
POST_EVENT '%s'; \
END \
END;"
使用执行以下操作的代码初始化事件:
isc_que_events(status, &database, &eventData->id, eventData->length, eventData->buffer, (isc_callback)EventCallback, eventData->resultBuffer);
最后,活动是结构化的:
isc_callback EventCallback( char *result, short length, char *updated )
{
uint64_t startTime;
startTime = mach_absolute_time();
printf("__EVENT__:%s:%s:%llu\n",eventData->buffer,eventData->resultBuffer,startTime);
while (length--)
{
*result++ = *updated++;
}
isc_event_counts(status, eventData->length, eventData->buffer, eventData->resultBuffer);
isc_que_events(status, &database, &eventData->id, eventData->length, eventData->buffer, (isc_callback)EventCallback, eventData->resultBuffer);
return(0);
}
最后,通过在测试套件中反复跳闸触发器来测试代码,类似于:
query = "UPDATE table_name SET column1=value1 WHERE some_column=some_value;";
for (int i=0 ; i<1e6 ; i++)
{
if (isc_start_transaction(status_vector, &transactionHandle, 1, &database, 0, NULL))
{
/*error handling*/
}
if (isc_dsql_execute_immediate(status_vector, &database, &transactionHandle, 0, query, 3, NULL))
{
/*error handling*/
}
if (isc_commit_transaction(status_vector, &transactionHandle))
{
/*error handling*/
}
}
显示用于设置事件回调并将其排队的C代码。这不包括eventblocks的初始化。您可能想考虑将此发布到FielBube支持邮件列表中,请参阅详细信息,您将获得更多熟悉C-API的眼睛。