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(queryfmtstr) {
  if (
temp.fmtstr.type() == 3) {
    
temp.query format2(temp.querytemp.fmtstr);
  }
  
temp.req requestsql(temp.queryfalse);
  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(queryfmtstr) {
  if (
temp.fmtstr.type() == 3) {
    
temp.query format2(temp.querytemp.fmtstr);
  }
  
temp.req requestsql(temp.querytrue);
  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.rowreq.rows)
    
temp.out.add(temp.row[0]);
  return 
temp.out;

__________________
Reply With Quote