| 1 package com.quadcap.sql; 2 3 40 41 import java.io.Externalizable ; 42 import java.io.IOException ; 43 import java.io.ObjectInput ; 44 import java.io.ObjectOutput ; 45 46 import java.util.Vector ; 47 48 import java.sql.SQLException ; 49 50 import com.quadcap.sql.types.Value; 51 import com.quadcap.sql.types.ValueNull; 52 53 import com.quadcap.util.Debug; 54 55 61 public class ItemsRow extends Row { 62 Session session; 63 Vector items; 64 Cursor cursor; 65 Row myRow; 66 Row baseRow; 67 int[] map; 68 69 public ItemsRow(Session session, Vector items, Cursor cursor, 70 Row r, int[] map) throws SQLException { 71 this.session = session; 72 this.items = items; 73 this.cursor = cursor; 74 this.map = map; 75 this.myRow = new Row(items.size()); 76 if (r == null && cursor != null) { 77 r = new Row(cursor.getColumnCount()); 78 for (int i = 1; i <= r.size(); i++) r.set(i, ValueNull.valueNull); 79 } 80 this.nextRow(r); 81 } 82 83 Row getBaseRow() { return baseRow; } 84 85 public void nextRow(Row r) throws SQLException { 86 this.baseRow = r; 87 for (int i = 1; i <= size(); i++) { 88 myRow.set(i, getItem(r, i)); 89 } 90 } 91 92 public int size() { return map.length; } 93 94 public Value item(int i) throws SQLException { 95 return myRow.item(i); 96 } 97 98 public Value getItem(Row r, int i) throws SQLException { 99 int pos = map[i-1]; 100 if (pos < 0) { 101 SelectItem item = (SelectItem)items.elementAt(i-1); 102 Expression e = item.getExpression(); 103 return e.getValue(session, cursor); 104 } else if (r != null) { 105 return r.item(pos); 106 } else { 107 return new ValueNull(); 108 } 109 } 110 111 public void set(int i, Value val) throws SQLException { 112 int pos = map[i-1]; 113 if (pos < 0) { 114 throw new SQLException ("Not updatable: " + 115 items.elementAt(i-1), 116 "42000"); 117 } 118 myRow.set(i, val); 119 baseRow.set(map[i-1], val); 120 } 121 122 public boolean isUpdateable(int i) { 123 return map[i-1] >= 0; 124 } 125 } 126 | Popular Tags |