The application runs as a singleton; there are no other applications
accessing the data base.
I do not run the command-line tool while testing.
I've cut down the example code:
SqlStatus = sqlite3_open16 ( db_loc_string
, &SqlDB
) ;
if ( SQLITE_OK != SqlStatus )
{
. . .
return DATASTORE_UNAVAILABLE ;
}
SqlStatus = sqlite3_prepare16_v2 ( SqlDB
, L"BEGIN TRANSACTION"
, 36
, &SqlStmt
, NULL
) ;
if ( SQLITE_OK != SqlStatus )
{
. . .
return SQL_PREP_ERROR ;
}
SqlStatus = sqlite3_step ( SqlStmt ) ;
if ( SQLITE_DONE != SqlStatus )
{
. . .
return TXN_BEGIN_FAILED ;
}
SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
if ( SQLITE_OK != SqlStatus )
{
. . .
return SQL_FNLZ_ERROR ;
}
swprintf_s ( (PXID_CHAR)sql_statement
, sizeof ( sql_statement ) / sizeof ( XID_CHAR )
, L"DELETE"
L" FROM RSPNS"
L" WHERE . . .
) ;
SqlStatus = sqlite3_prepare16_v2 ( SqlDB
, sql_statement
, ( lstrlen ( sql_statement ) + 1 ) *
sizeof ( XID_CHAR )
, &SqlStmt
, NULL
) ;
if ( SQLITE_OK != SqlStatus )
{
. . .
return SQL_PREP_ERROR ;
}
SqlStatus = sqlite3_step ( SqlStmt ) ;
if ( SQLITE_DONE != SqlStatus )
{
. . .
return SQL_DLET_ERROR ;
}
SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
if ( SQLITE_OK != SqlStatus )
{
. . .
return SQL_FNLZ_ERROR ;
}
SqlStatus = sqlite3_prepare16_v2 ( SqlDB
, L"COMMIT TRANSACTION"
, 38
, &SqlStmt
, NULL
) ;
if ( SQLITE_OK != SqlStatus )
{
. . .
return SQL_PREP_ERROR ;
}
SqlStatus = sqlite3_step ( SqlStmt ) ;
if ( SQLITE_DONE != SqlStatus )
{
. . .
return TXN_COMMIT_FAILED ;
}
SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
if ( SQLITE_OK != SqlStatus )
{
. . .
return SQL_FNLZ_ERROR ;
}
SqlStatus = sqlite3_prepare16_v2 ( SqlDB
, L"BEGIN TRANSACTION"
, 36
, &SqlStmt
, NULL
) ;
if ( SQLITE_OK != SqlStatus )
{
. . .
return SQL_PREP_ERROR ;
}
/*-------------------------*/
SqlStatus = sqlite3_step ( SqlStmt ) ;
if ( SQLITE_DONE != SqlStatus )
{
. . .
return TXN_BEGIN_FAILED ;
}
SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
if ( SQLITE_OK != SqlStatus )
{
. . .
return SQL_FNLZ_ERROR ;
}
. . .
swprintf_s ( (PXID_CHAR)sql_statement
, sizeof ( sql_statement ) / sizeof ( XID_CHAR )
, L"INSERT"
L" INTO RSPNS"
L" ( SERVER_NAME"
. . .
L" , RESPONSE_TEXT"
L" )"
L" VALUES ( '%s'"
. , ,
L" , '%s'"
L" )"
, ServerName
. . .
, &InputBuffer[m]
) ;
SqlStatus = sqlite3_prepare16_v2 ( SqlDB
, (const char *)sql_statement
, ( lstrlen ( sql_statement ) + 1 ) *
sizeof ( XID_CHAR )
, &SqlStmt
, NULL
) ;
if ( SQLITE_OK != SqlStatus )
{
SQLiteError ( sql_statement
, L"sqlite3_prepare16_v2 ( )"
) ;
sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
return SQL_PREP_ERROR ;
}
SqlStatus = sqlite3_step ( SqlStmt ) ;
if ( SQLITE_DONE != SqlStatus )
{
. . .
return SQL_ISRT_ERROR ;
}
SqlStatus = sqlite3_finalize ( SqlStmt ) ;
if ( SQLITE_OK != SqlStatus )
{
. . .
return XID_DBPA_SQL_FNLZ_ERROR ;
}
. . .
SqlStatus = sqlite3_prepare16_v2 ( SqlDB
, L"COMMIT TRANSACTION"
, 38
, &SqlStmt
, NULL
) ;
if ( SQLITE_OK != SqlStatus )
{
. . .
return XID_DBPA_SQL_PREP_ERROR ;
}
SqlStatus = sqlite3_step ( SqlStmt ) ;
if ( SQLITE_DONE != SqlStatus )
{
. . .
return XID_DBPA_TXN_COMMIT_FAILED ;
}
SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ;
if ( SQLITE_OK != SqlStatus )
{
. . .
return XID_DBPA_SQL_FNLZ_ERROR ;
}
sqlite3_close ( SqlDB ) ; SqlDB = NULL ;
The SQLITE_BUSY condition is raised on approximately the 300th execution of
the second COMMIT TRANSACTION.
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users