?? indexupdateplanner.java
字號:
package simpledb.index.planner;import static simpledb.index.metadata.IndexInfo.*;import java.util.Iterator;import java.util.Map;import simpledb.record.RID;import simpledb.server.SimpleDB;import simpledb.tx.Transaction;import simpledb.index.Index;import simpledb.index.metadata.IndexInfo;import simpledb.parse.*;import simpledb.planner.*;import simpledb.query.*;/** * A modification of the basic update planner. * It dispatches each update statement to the corresponding * index planner. * It also now understands the "create index" statement. * @author Edward Sciore */public class IndexUpdatePlanner implements UpdatePlanner { public int executeInsert(InsertData data, Transaction tx) { Plan plan = new TablePlan(data.tableName(), tx); // first, insert the record UpdateScan s = (UpdateScan) plan.open(); s.insert(); RID rid = s.getRid(); // then modify each field, inserting an index record if appropriate Map<String,IndexInfo> indexes = SimpleDB.mdMgr().getIndexInfo(data.tableName(), tx); Iterator<Constant> valIter = data.vals().iterator(); for (String fldname : data.fields()) { Constant val = valIter.next(); s.setVal(fldname, val); IndexInfo ii = indexes.get(fldname); if (ii != null) { Index idx = ii.open(); idx.insert(val, rid); idx.close(); } } s.close(); return 1; } public int executeDelete(DeleteData data, Transaction tx) { String tblname = data.tableName(); Plan p = new TablePlan(tblname, tx); p = new SelectPlan(p, data.pred()); Map<String,IndexInfo> indexes = SimpleDB.mdMgr().getIndexInfo(tblname, tx); UpdateScan s = (UpdateScan) p.open(); int count = 0; while(s.next()) { // first, delete the record's RID from every index RID rid = s.getRid(); for (String fldname : indexes.keySet()) { Constant val = s.getVal(fldname); Index idx = indexes.get(fldname).open(); idx.delete(val, rid); idx.close(); } // then delete the record s.delete(); count++; } s.close(); return count; } public int executeModify(ModifyData data, Transaction tx) { String tblname = data.tableName(); String fldname = data.targetField(); Plan p = new TablePlan(tblname, tx); p = new SelectPlan(p, data.pred()); IndexInfo ii = SimpleDB.mdMgr().getIndexInfo(tblname, tx).get(fldname); Index idx = (ii == null) ? null : ii.open(); UpdateScan s = (UpdateScan) p.open(); int count = 0; while(s.next()) { // first, update the record Constant newval = data.newValue().evaluate(s); Constant oldval = s.getVal(fldname); s.setVal(data.targetField(), newval); // then update the appropriate index, if it exists if (idx != null) { RID rid = s.getRid(); idx.delete(oldval, rid); idx.insert(newval, rid); } count++; } if (idx != null) idx.close(); s.close(); return count; } public int executeCreateTable(CreateTableData data, Transaction tx) { SimpleDB.mdMgr().createTable(data.tableName(), data.newSchema(), tx); return 0; } public int executeCreateView(CreateViewData data, Transaction tx) { SimpleDB.mdMgr().createView(data.viewName(), data.viewDef(), tx); return 0; } public int executeCreateIndex(CreateIndexData data, Transaction tx) { SimpleDB.mdMgr().createIndex(data.tableName(), data.fieldName(), BTREE, tx); return 0; }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -