View Single Post
  #6  
Old 04-27-2009, 10:20 AM
Inverness Inverness is offline
Incubator
Inverness's Avatar
Join Date: Aug 2004
Location: Houston, Texas
Posts: 3,613
Inverness is a jewel in the roughInverness is a jewel in the rough
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;
} 
__________________
Reply With Quote