# HG changeset patch # User Sebastien Jodogne # Date 1440523998 -7200 # Node ID 9a3e03d6a4d555d59c17593d3efbbc2ae4d6cde3 # Parent 39ecd34fb1c7e4ff1c88bb46e0e1943a65f545cf fix sqlite standalone build diff -r 39ecd34fb1c7 -r 9a3e03d6a4d5 Core/SQLite/Connection.cpp --- a/Core/SQLite/Connection.cpp Tue Aug 25 17:59:04 2015 +0200 +++ b/Core/SQLite/Connection.cpp Tue Aug 25 19:33:18 2015 +0200 @@ -162,7 +162,10 @@ int error = sqlite3_exec(db_, sql, NULL, NULL, NULL); if (error == SQLITE_ERROR) { +#if ORTHANC_SQLITE_STANDALONE != 1 LOG(ERROR) << "SQLite execute error: " << sqlite3_errmsg(db_); +#endif + throw OrthancSQLiteException(ErrorCode_SQLiteExecute); } else diff -r 39ecd34fb1c7 -r 9a3e03d6a4d5 Core/SQLite/OrthancSQLiteException.h --- a/Core/SQLite/OrthancSQLiteException.h Tue Aug 25 17:59:04 2015 +0200 +++ b/Core/SQLite/OrthancSQLiteException.h Tue Aug 25 19:33:18 2015 +0200 @@ -45,17 +45,99 @@ { namespace SQLite { + // Auto-generated by "Resources/GenerateErrorCodes.py" + enum ErrorCode + { + ErrorCode_ParameterOutOfRange, + ErrorCode_BadParameterType, + ErrorCode_SQLiteNotOpened, + ErrorCode_SQLiteAlreadyOpened, + ErrorCode_SQLiteCannotOpen, + ErrorCode_SQLiteStatementAlreadyUsed, + ErrorCode_SQLiteExecute, + ErrorCode_SQLiteRollbackWithoutTransaction, + ErrorCode_SQLiteCommitWithoutTransaction, + ErrorCode_SQLiteRegisterFunction, + ErrorCode_SQLiteFlush, + ErrorCode_SQLiteCannotRun, + ErrorCode_SQLiteCannotStep, + ErrorCode_SQLiteBindOutOfRange, + ErrorCode_SQLitePrepareStatement, + ErrorCode_SQLiteTransactionAlreadyStarted, + ErrorCode_SQLiteTransactionCommit, + ErrorCode_SQLiteTransactionBegin + }; + class OrthancSQLiteException : public ::std::runtime_error { public: - OrthancSQLiteException(const std::string& what) : - ::std::runtime_error(what) + OrthancSQLiteException(ErrorCode error) : + ::std::runtime_error(EnumerationToString(error)) { } - OrthancSQLiteException(const char* what) : - ::std::runtime_error(what) + // Auto-generated by "Resources/GenerateErrorCodes.py" + static const char* EnumerationToString(ErrorCode code) { + switch (code) + { + case ErrorCode_ParameterOutOfRange: + return "Parameter out of range"; + + case ErrorCode_BadParameterType: + return "Bad type for a parameter"; + + case ErrorCode_SQLiteNotOpened: + return "SQLite: The database is not opened"; + + case ErrorCode_SQLiteAlreadyOpened: + return "SQLite: Connection is already open"; + + case ErrorCode_SQLiteCannotOpen: + return "SQLite: Unable to open the database"; + + case ErrorCode_SQLiteStatementAlreadyUsed: + return "SQLite: This cached statement is already being referred to"; + + case ErrorCode_SQLiteExecute: + return "SQLite: Cannot execute a command"; + + case ErrorCode_SQLiteRollbackWithoutTransaction: + return "SQLite: Rolling back a nonexistent transaction (have you called Begin()?)"; + + case ErrorCode_SQLiteCommitWithoutTransaction: + return "SQLite: Committing a nonexistent transaction"; + + case ErrorCode_SQLiteRegisterFunction: + return "SQLite: Unable to register a function"; + + case ErrorCode_SQLiteFlush: + return "SQLite: Unable to flush the database"; + + case ErrorCode_SQLiteCannotRun: + return "SQLite: Cannot run a cached statement"; + + case ErrorCode_SQLiteCannotStep: + return "SQLite: Cannot step over a cached statement"; + + case ErrorCode_SQLiteBindOutOfRange: + return "SQLite: Bing a value while out of range (serious error)"; + + case ErrorCode_SQLitePrepareStatement: + return "SQLite: Cannot prepare a cached statement"; + + case ErrorCode_SQLiteTransactionAlreadyStarted: + return "SQLite: Beginning the same transaction twice"; + + case ErrorCode_SQLiteTransactionCommit: + return "SQLite: Failure when committing the transaction"; + + case ErrorCode_SQLiteTransactionBegin: + return "SQLite: Cannot start a transaction"; + + default: + return "Unknown error code"; + } } }; } diff -r 39ecd34fb1c7 -r 9a3e03d6a4d5 Resources/GenerateErrorCodes.py --- a/Resources/GenerateErrorCodes.py Tue Aug 25 17:59:04 2015 +0200 +++ b/Resources/GenerateErrorCodes.py Tue Aug 25 19:33:18 2015 +0200 @@ -111,3 +111,24 @@ with open(path, 'w') as f: f.write(a) + + + +## +## Generate the "ErrorCode" enumeration in "OrthancSQLiteException.h" +## + +path = os.path.join(BASE, 'Core', 'SQLite', 'OrthancSQLiteException.h') +with open(path, 'r') as f: + a = f.read() + +e = filter(lambda x: 'SQLite' in x and x['SQLite'], ERRORS) +s = ',\n'.join(map(lambda x: ' ErrorCode_%s' % x['Name'], e)) +a = re.sub('(enum ErrorCode\s*{)[^}]*?(\s*};)', r'\1\n%s\2' % s, a, re.DOTALL) + +s = '\n\n'.join(map(lambda x: ' case ErrorCode_%s:\n return "%s";' % (x['Name'], x['Description']), e)) +a = re.sub('(EnumerationToString\(ErrorCode.*?\)\s*{\s*switch \([^)]*?\)\s*{)[^}]*?(\s*default:)', + r'\1\n%s\2' % s, a, re.DOTALL) + +with open(path, 'w') as f: + f.write(a)