1 29 30 package com.caucho.amber.query; 31 32 import com.caucho.util.CharBuffer; 33 34 import com.caucho.amber.table.Column; 35 import com.caucho.amber.table.LinkColumns; 36 37 40 public class ColumnExpr extends AbstractAmberExpr { 41 protected PathExpr _parent; 42 private Column _column; 44 45 protected FromItem _fromItem; 46 47 50 public ColumnExpr(PathExpr parent, Column column) 51 { 52 _parent = parent; 53 _column = column; 54 } 55 56 59 PathExpr getParent() 60 { 61 return _parent; 62 } 63 64 67 Column getColumn() 68 { 69 return _column; 70 } 71 72 75 public AmberExpr createBoolean() 76 throws QueryParseException 77 { 78 if (getColumn().getType().isBoolean()) 79 return new BooleanColumnExpr(_parent, _column); 80 else 81 return super.createBoolean(); 82 } 83 84 87 public AmberExpr bindSelect(QueryParser parser) 88 { 89 FromItem parentFromItem = _parent.bindSubPath(parser); 90 91 if (parentFromItem.getTable() == getColumn().getTable()) { 92 _fromItem = parentFromItem; 93 94 return this; 95 } 96 97 LinkColumns link = getColumn().getTable().getDependentIdLink(); 98 _fromItem = parser.createDependentFromItem(parentFromItem, link); 99 100 return this; 101 } 102 103 106 public boolean usesFrom(FromItem from, int type, boolean isNot) 107 { 108 if (_fromItem == from) 109 return true; 110 else if (_fromItem == null && _parent.getChildFromItem() == from) 111 return true; 112 else 113 return false; 114 } 115 116 119 public AmberExpr replaceJoin(JoinExpr join) 120 { 121 _parent = (PathExpr) _parent.replaceJoin(join); 122 123 return this; 124 } 125 126 129 public void generateWhere(CharBuffer cb) 130 { 131 if (_fromItem != null) { 132 cb.append(_fromItem.getName()); 133 cb.append('.'); 134 cb.append(_column.getName()); 135 } 136 else { 137 cb.append(_parent.getChildFromItem().getName()); 138 cb.append('.'); 139 cb.append(_column.getName()); 140 } 141 } 142 143 public String toString() 144 { 145 return _parent + "." + _column.getName(); 146 } 147 } 148 | Popular Tags |