1 29 30 package com.caucho.db.sql; 31 32 import com.caucho.db.Database; 33 import com.caucho.db.store.Transaction; 34 import com.caucho.db.table.Table; 35 import com.caucho.db.table.TableIterator; 36 import com.caucho.log.Log; 37 import com.caucho.util.CharBuffer; 38 39 import java.sql.SQLException ; 40 import java.util.logging.Logger ; 41 42 class DeleteQuery extends Query { 43 private static final Logger log = Log.open(DeleteQuery.class); 44 45 private final Table _table; 46 47 DeleteQuery(Database db, String sql, Table table) 48 throws SQLException 49 { 50 super(db, sql, null); 51 52 _table = table; 53 54 setFromItems(new FromItem[] { new FromItem(table, table.getName()) }); 55 } 56 57 public boolean isReadOnly() 58 { 59 return false; 60 } 61 62 65 public void execute(QueryContext context, Transaction xa) 66 throws SQLException 67 { 68 int count = 0; 69 TableIterator []rows = new TableIterator[1]; 70 rows[0] = _table.createTableIterator(); 71 context.init(xa, rows, isReadOnly()); 72 73 try { 74 if (! start(rows, rows.length, context, xa)) 75 return; 76 77 do { 78 rows[0].delete(); 79 80 context.setRowUpdateCount(++count); 81 } while (nextTuple(rows, rows.length, context, xa)); 82 } finally { 83 context.unlock(); 86 87 freeRows(rows, rows.length); 88 } 89 } 90 91 public String toString() 92 { 93 CharBuffer cb = new CharBuffer(); 94 cb.append("DeleteQuery["); 95 if (_whereExpr != null) { 96 cb.append(",where:" + _whereExpr); 97 } 98 cb.append("]"); 99 100 return cb.close(); 101 } 102 } 103 | Popular Tags |