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.Column; 35 import com.caucho.db.table.Table; 36 import com.caucho.db.table.TableIterator; 37 import com.caucho.log.Log; 38 39 import java.sql.SQLException ; 40 import java.util.logging.Logger ; 41 42 class UpdateQuery extends Query { 43 private static final Logger log = Log.open(UpdateQuery.class); 44 45 private final Table _table; 46 private SetItem []_setItems; 47 48 UpdateQuery(Database db, String sql, Table table) 49 throws SQLException 50 { 51 super(db, sql, null); 52 53 _table = table; 54 55 setFromItems(new FromItem[] { new FromItem(table, table.getName()) }); 56 } 57 58 public void setSetItems(SetItem []setItems) 59 { 60 _setItems = setItems; 61 } 62 63 public boolean isReadOnly() 64 { 65 return false; 66 } 67 68 71 protected void bind() 72 throws SQLException 73 { 74 super.bind(); 75 76 for (int i = 0; i < _setItems.length; i++) { 77 Expr expr = _setItems[i].getExpr(); 78 79 expr = expr.bind(this); 80 81 _setItems[i].setExpr(expr); 82 } 83 } 84 85 88 public void execute(QueryContext context, Transaction xa) 89 throws SQLException 90 { 91 int count = 0; 92 SetItem []setItems = _setItems; 93 TableIterator []rows = new TableIterator[1]; 94 rows[0] = _table.createTableIterator(); 95 context.init(xa, rows, isReadOnly()); 96 97 try { 98 if (! start(rows, rows.length, context, xa)) 99 return; 100 101 do { 102 for (int i = 0; i < setItems.length; i++) { 103 Column column = setItems[i].getColumn(); 104 Expr expr = setItems[i].getExpr(); 105 106 TableIterator iter = rows[0]; 107 108 iter.setDirty(); 109 column.set(xa, iter, expr, context); 110 } 111 112 context.setRowUpdateCount(++count); 113 } while (nextTuple(rows, rows.length, context, xa)); 114 } finally { 115 context.unlock(); 118 119 freeRows(rows, rows.length); 120 } 121 } 122 123 public String toString() 124 { 125 StringBuilder cb = new StringBuilder (); 126 cb.append("UpdateQuery["); 127 if (_whereExpr != null) { 128 cb.append(",where:" + _whereExpr); 129 } 130 cb.append("]"); 131 132 return cb.toString(); 133 } 134 } 135 | Popular Tags |