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
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to