Made some changes, made it so the TSQLRequest is always returned so you can check errors and affectedrows and such. Also made it so if you timeout while waiting for a query it will cause an error and do a rollback.
PHP Code:
// sqlexecute(str query, var[] fmtstr):
// Execute an SQL a non-request SQL query.
// Returns TSQLRequest
function sqlexecute(query, fmtstr) {
if (temp.fmtstr.type() == 3) {
temp.query = format2(temp.query, temp.fmtstr);
}
temp.req = requestsql(temp.query, false);
if (temp.req.error != null) {
echo("SQL Error: " @ temp.req.error);
echo(" Query: " @ temp.query);
serverr.sqliserror = true;
}
return temp.req;
}
// sqlexecutereq(str query, var[] fmtstr):
// Execute an SQL request query. Returns TSQLRequest
function sqlexecutereq(query, fmtstr) {
if (temp.fmtstr.type() == 3) {
temp.query = format2(temp.query, temp.fmtstr);
}
temp.req = requestsql(temp.query, true);
if (temp.req.error != null) {
echo("SQL Error: " @ temp.req.error);
echo(" Query: " @ temp.query.escape());
serverr.sqliserror = true;
return temp.req;
}
if (!temp.req.completed && !waitfor(temp.req, "onReceiveData", 60)) {
echo("SQL Timeout: 60 seconds");
echo(" Query: " @ temp.query.escape());
serverr.sqliserror = true;
}
return temp.req;
}
// sqlbegin():
// Begins a nested transacton. Returns true if starting a
// new transaction, false if one is already started.
function sqlbegin() {
if (serverr.sqltransactiondepth < 1) {
serverr.sqltransactiondepth = 1;
serverr.sqliserror = false;
this.sqlexecute("BEGIN");
return true;
}
else {
serverr.sqltransactiondepth++;
return false;
}
}
// sqlerror():
// If called, the last sqlcommit() will cause a rollback of
// the transaction. This should be called from anywhere
// inside a sqlbegin() and sqlcommit().
function sqlerror() {
serverr.sqliserror = true;
}
// sqlcommit():
// Returns true if commit is successful, false if error or
// rollback.
function sqlcommit() {
if (serverr.sqltransactiondepth > 1) {
serverr.sqltransactiondepth--;
return !serverr.sqliserror;
}
else {
serverr.sqltransactiondepth = 0;
temp.ret = !serverr.sqliserror;
if (serverr.sqliserror) {
if (!this.sqlexecute("ROLLBACK")) {
temp.ret = false;
}
}
else {
if (!this.sqlexecute("COMMIT")) {
temp.ret = false;
}
}
serverr.sqliserror = false;
return temp.ret;
}
}
// sqlgettablenames() - returns array:
// Returns array of table names in the database.
function sqlgettablenames() {
temp.req = this.sqlexecutereq(
"SELECT tbl_name FROM sqlite_master WHERE type='table'", true
);
temp.out = {};
for (temp.row: req.rows)
temp.out.add(temp.row[0]);
return temp.out;
}