KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > caucho > db > sql > UpdateQuery


1 /*
2  * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved
3  *
4  * This file is part of Resin(R) Open Source
5  *
6  * Each copy or derived work must preserve the copyright notice and this
7  * notice unmodified.
8  *
9  * Resin Open Source is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * Resin Open Source is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
17  * of NON-INFRINGEMENT. See the GNU General Public License for more
18  * details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Resin Open Source; if not, write to the
22  *
23  * Free Software Foundation, Inc.
24  * 59 Temple Place, Suite 330
25  * Boston, MA 02111-1307 USA
26  *
27  * @author Scott Ferguson
28  */

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 JavaDoc;
40 import java.util.logging.Logger JavaDoc;
41
42 class UpdateQuery extends Query {
43   private static final Logger JavaDoc log = Log.open(UpdateQuery.class);
44
45   private final Table _table;
46   private SetItem []_setItems;
47
48   UpdateQuery(Database db, String JavaDoc sql, Table table)
49     throws SQLException JavaDoc
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   /**
69    * Binds the query.
70    */

71   protected void bind()
72     throws SQLException JavaDoc
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   /**
86    * Executes the query.
87    */

88   public void execute(QueryContext context, Transaction xa)
89     throws SQLException JavaDoc
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       // autoCommitWrite must be before freeRows in case freeRows
116
// throws an exception
117
context.unlock();
118       
119       freeRows(rows, rows.length);
120     }
121   }
122
123   public String JavaDoc toString()
124   {
125     StringBuilder JavaDoc cb = new StringBuilder JavaDoc();
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