Commit 3dd0561da0b48e8bb51f63a6e5282b47ece84fe9
1 parent
5e43e620
adding sql_query_timeout() and sql_transaction() functions
Showing
1 changed file
with
93 additions
and
0 deletions
Show diff stats
| 1 | +/* | ||
| 2 | + * | ||
| 3 | + * User: David RENE | ||
| 4 | + * Date: 11/12/2007 | ||
| 5 | + * Time: 01:16 | ||
| 6 | + * (c) Calexium | ||
| 7 | + * | ||
| 8 | + */ | ||
| 9 | + | ||
| 10 | +read tools/basis.anubis | ||
| 11 | +read system/logger.anubis | ||
| 12 | +read data_base/sqlite.anubis | ||
| 13 | + | ||
| 14 | +read calexium_lib/net_services_protocols/logger_service.anubis | ||
| 15 | + | ||
| 16 | + | ||
| 17 | +define Result(SQLite3Error, SQLite3HeadersOrRow -> SQLite3Row) | ||
| 18 | + sql_query_timeout | ||
| 19 | + ( | ||
| 20 | + SQLite3DataBase db, | ||
| 21 | + String sql_command, | ||
| 22 | + Int32 timeout | ||
| 23 | + ) = | ||
| 24 | + | ||
| 25 | + if sql_query(db, sql_command) is | ||
| 26 | + { | ||
| 27 | + error(sql_error) then ( | ||
| 28 | + if (sql_error.code /= 1 & sql_error.code /= 5 & sql_error.code /= 6) | now > timeout then | ||
| 29 | + error(sql_error) | ||
| 30 | + else | ||
| 31 | + ( | ||
| 32 | + if sql_error.code = 5 then | ||
| 33 | + unique | ||
| 34 | + else | ||
| 35 | + print_db_error(sql_error) | ||
| 36 | + ); | ||
| 37 | + sleep(100); | ||
| 38 | + sql_query_timeout(db, sql_command, timeout)), | ||
| 39 | + ok(cursor) then ok(cursor) | ||
| 40 | + }. | ||
| 41 | + | ||
| 42 | +public define Result(SQLite3Error, One) | ||
| 43 | + sql_transaction | ||
| 44 | + ( | ||
| 45 | + SQLite3DataBase db, | ||
| 46 | + String sql_command, | ||
| 47 | + String message | ||
| 48 | + ) = | ||
| 49 | +// logDebug(debug_log, "Entering into transaction [" + message + "]."); | ||
| 50 | + if db_do_transaction( | ||
| 51 | + db, | ||
| 52 | + (One _) |-> | ||
| 53 | + if sql_query(db, sql_command) is | ||
| 54 | + { | ||
| 55 | + error(err) then logError("DB", db_error(err,message));failure //error in the SQL request | ||
| 56 | + ok(cursor) then success(unique) | ||
| 57 | + }, | ||
| 58 | + success( (SQLite3Error err) |-> logError("DB", db_error(err,message))), | ||
| 59 | + 60000 // max 60s | ||
| 60 | + ) is | ||
| 61 | + { | ||
| 62 | + error(err_and_result) then | ||
| 63 | +// logDebug(debug_log, "Exiting from transaction [" + message + "] with error."); | ||
| 64 | + if err_and_result is (err, mb_result) then | ||
| 65 | + error(err), | ||
| 66 | + ok(_) then | ||
| 67 | +// logDebug(debug_log, "Exiting from transaction [" + message + "]."); | ||
| 68 | + ok(unique) | ||
| 69 | + }. | ||
| 70 | + | ||
| 71 | + public define Maybe(SQLite3HeadersOrRow -> SQLite3Row) | ||
| 72 | + sql_query_timeout | ||
| 73 | + ( | ||
| 74 | + SQLite3DataBase db, //database handle | ||
| 75 | + String sql_query, //sql query itself | ||
| 76 | + String msg //message to be shown if an error occure | ||
| 77 | + ) = | ||
| 78 | + //we try with 30 sec of timeout | ||
| 79 | + sql_query_timeout(db, sql_query, now + 30, msg). | ||
| 80 | + | ||
| 81 | +public define Maybe(SQLite3HeadersOrRow -> SQLite3Row) | ||
| 82 | + sql_query_timeout | ||
| 83 | + ( | ||
| 84 | + SQLite3DataBase db, //database handle | ||
| 85 | + String sql_query, //sql query itself | ||
| 86 | + String msg //message to be shown if an error occure | ||
| 87 | + ) = | ||
| 88 | + //we try with 30 sec of timeout | ||
| 89 | + if sql_query_timeout(db, sql_query, now + 60) is | ||
| 90 | + { | ||
| 91 | + error(sql_error) then logError("DB", db_error(sql_error,msg));failure, | ||
| 92 | + ok(cursor) then success(cursor) | ||
| 93 | + }. |