1 package com.daffodilwoods.daffodildb.server.sql99.expression.stringvalueexpression; 2 3 import com.daffodilwoods.database.resource.*; 4 import com.daffodilwoods.daffodildb.server.sql99.token.*; 5 import com.daffodilwoods.daffodildb.server.sql99.utils.ByteComparison; 6 import com.daffodilwoods.daffodildb.server.sql99.common.ColumnDetails; 7 import com.daffodilwoods.daffodildb.server.sql99.utils._Reference; 8 import com.daffodilwoods.daffodildb.server.serversystem._ServerSession; 9 import com.daffodilwoods.daffodildb.server.sql99.common.ParameterInfo; 10 import com.daffodilwoods.daffodildb.server.sql99.expression.rowvalueexpression. 11 AbstractRowValueExpression; 12 import com.daffodilwoods.daffodildb.server.sql99.common.*; 13 import in.co.daffodil.db.jdbc.DatabaseProperties; 14 import com.daffodilwoods.daffodildb.utils.field.*; 15 import com.daffodilwoods.daffodildb.utils.*; 16 import java.util.*; 17 import com.daffodilwoods.daffodildb.utils.field.FieldLiteral; 18 19 public class trimfunction extends AbstractStringValueExpression implements com.daffodilwoods.daffodildb.utils.parser.StatementExecuter ,charactervaluefunction { 20 21 public Srightparen_1874859514 _Srightparen_18748595140 ; 22 public charactervalueexpression _charactervalueexpression1 ; 23 public trimoptionOptcharactervalueexpressionSRESERVEDWORD1206543922 _OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222 ; 24 public Sleftparen653880241 _Sleftparen6538802413 ; 25 public SNONRESERVEDWORD136444255 _SNONRESERVEDWORD1364442554 ; 26 27 public Object run(Object object) throws DException{ 28 29 FieldBase result = (FieldBase) _charactervalueexpression1.run(object); 30 if (result.isNull()) { 31 return new FieldStringLiteral(FieldUtility.NULLBUFFERRANGE, CHARACTER); 32 } 33 Object [] optional =new Object [2]; 34 String trimFrom=null; 35 FieldBase trimValue=null; 36 if(_OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222!=null) { 37 optional =(Object [])_OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222.run(object); 38 trimFrom =(String )optional[0]; 39 trimValue=(FieldBase)optional[1]; 40 } 41 return getResult(getDataType(result), result.getObject(),trimFrom,trimValue); 42 } 43 44 private Object getResult(int type, Object object,String trimOption ,FieldBase trimValue ) throws DException { 45 switch (type) { 46 case BYTE: 47 case TINYINT: 48 case INTEGER: 49 case INT: 50 case REAL: 51 case DOUBLE: 52 case FLOAT: 53 case DOUBLEPRECISION: 54 case LONG: 55 case BIGINT: 56 case SHORT: 57 case SMALLINT: 58 case BIGDECIMAL: 59 case DEC: 60 case DECIMAL: 61 case NUMERIC: 62 Number operand = (Number ) object; 63 return new FieldStringLiteral(trim(operand.toString(),trimOption,trimValue), Datatypes.CHARACTER); 64 case CHARACTER: 65 case VARCHAR: 66 case CHAR: 67 case CHARACTERVARYING: 68 String string = (String ) object; 69 return new FieldStringLiteral(trim(string,trimOption,trimValue), Datatypes.CHARACTER); 70 default: 71 throw new DException("DSE514", new Object [] {StaticClass.getDataTypeName(type)}); 72 } 73 } 74 75 93 94 private String trim(String string,String trimOption0 ,FieldBase trimValue0)throws DException { 95 String trimOption="",trimValue=""; 96 if(trimOption0!=null){ 97 trimOption =trimOption0; 98 } 99 if(trimValue0!=null && !trimValue0.isNull()){ 100 trimValue =trimValue0.getObject().toString(); 101 } 102 boolean startsWith =string.startsWith(trimValue); 103 boolean endsWith = string.endsWith(trimValue); 104 105 if(checkForLeadingDenomiNator(trimOption)){ 106 return removeLeading(string, trimValue, startsWith ); 107 } 108 else if(checkForTrailingDenomiNator(trimOption)){ 109 return removeTrailing(string, trimValue, endsWith ); 110 } 111 else if(checkForBothDenomiNator(trimOption)){ return removeBoth(string, trimValue,startsWith , endsWith); 113 } 114 else 115 return string.trim(); 116 117 } 118 119 public String removeLeading(String value, String leading,boolean startFound) throws DException{ 120 if(startFound){ 121 do { 122 value = value.replaceFirst(leading, ""); 123 } 124 while (value.startsWith(leading)); 125 } 126 return value; 127 } 128 129 public String removeTrailing(String value, String trailing,boolean endFound) throws DException{ 130 if(endFound){ 131 do{ 132 133 int index = value.lastIndexOf(trailing); 134 value = value.substring(0,index); 135 }while(value.endsWith(trailing)); 136 } 137 return value; 138 } 139 140 public String removeBoth(String value, String words,boolean startFound,boolean endFound) throws DException{ 141 value = removeLeading(value,words, startFound); 142 value = removeTrailing(value,words, endFound); 143 return value; 144 } 145 146 private boolean checkForLeadingDenomiNator(String denominator) { 147 if(denominator.equalsIgnoreCase("leading")) { 148 return true; 149 } 150 return false; 151 } 152 private boolean checkForTrailingDenomiNator(String denominator) { 153 if(denominator.equalsIgnoreCase("trailing")) { 154 return true; 155 } 156 return false; 157 } 158 159 private boolean checkForBothDenomiNator(String denominator) { 160 if(denominator.equalsIgnoreCase("both")) { 161 return true; 162 } 163 return false; 164 } 165 166 167 public ParameterInfo[] getParameterInfo() throws DException { 168 177 return new ParameterInfo[0]; 178 } 179 180 protected ParameterInfo[] getThisParameterInfo() throws DException { 181 ParameterInfo parameterInfo = new ParameterInfo(); 182 parameterInfo.setName(toString()); 183 parameterInfo.setDataType(Datatypes.CHARACTER); 184 return new ParameterInfo[] {parameterInfo}; 185 } 186 187 188 protected String getNameOfColumn(ColumnDetails[] columnDetails) throws DException { 189 String nameOfColumn = ""; 190 for (int i = 0; i < columnDetails.length; ++i) { 191 nameOfColumn += columnDetails[i].getColumn(); 192 } 193 return nameOfColumn; 194 } 195 196 197 public String toString() { 198 StringBuffer sb = new StringBuffer (); 199 sb.append(" "); 200 sb.append(_SNONRESERVEDWORD1364442554); 201 sb.append(" "); 202 sb.append(_Sleftparen6538802413); 203 sb.append(" "); 204 if(_OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222 != null ) { 205 sb.append(_OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222); 206 } 207 sb.append(" "); 208 sb.append(_charactervalueexpression1); 209 sb.append(" "); 210 sb.append(_Srightparen_18748595140); 211 return sb.toString(); 212 } 213 214 215 public Object clone() throws CloneNotSupportedException { 216 trimfunction tempClass = new trimfunction(); 217 tempClass._Srightparen_18748595140 = (Srightparen_1874859514) 218 _Srightparen_18748595140.clone(); 219 tempClass._charactervalueexpression1 = (charactervalueexpression) 220 _charactervalueexpression1.clone(); 221 if (_OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222 != null) { 222 tempClass. 223 _OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222 = ( 224 trimoptionOptcharactervalueexpressionSRESERVEDWORD1206543922) 225 _OpttrimoptionOptcharactervalueexpressionSRESERVEDWORD12065439222. 226 clone(); 227 } 228 tempClass._Sleftparen6538802413 = (Sleftparen653880241) 229 _Sleftparen6538802413.clone(); 230 tempClass._SNONRESERVEDWORD1364442554 = (SNONRESERVEDWORD136444255) 231 _SNONRESERVEDWORD1364442554.clone(); 232 return tempClass; 233 } 234 235 236 237 243 public ByteComparison getByteComparison(Object object) throws DException { 244 ByteComparison byteComparison =new ByteComparison(false, new int[] {CHARACTER}); 245 int columnSize= getColumnSize(object); 246 byteComparison.setSize(columnSize); 247 return byteComparison; 248 249 } 250 251 256 257 public ColumnDetails[] getChildColumnDetails() { 258 return columnDetails; 259 } 260 261 266 public AbstractRowValueExpression[] getChilds() { 267 285 AbstractRowValueExpression[] childs =new AbstractRowValueExpression[]{(AbstractRowValueExpression)_charactervalueexpression1}; 286 return childs; 287 } 288 289 290 295 public String getType() throws DException { 296 return (String ) _SNONRESERVEDWORD1364442554.run(null); 297 } 298 299 300 public _Reference[] checkSemantic(_ServerSession parent) throws DException { 301 _Reference[] ref = (_Reference[])_charactervalueexpression1.checkSemantic(parent); 302 if(ref!=null) { 303 return ref; 304 } 305 int type = _charactervalueexpression1.getByteComparison(parent). 306 getDataTypes()[0]; 307 switch (type) { 308 case -1: 309 case BYTE: 310 case TINYINT: 311 case INTEGER: 312 case INT: 313 case REAL: 314 case DOUBLE: 315 case FLOAT: 316 case DOUBLEPRECISION: 317 case LONG: 318 case BIGINT: 319 case SHORT: 320 case SMALLINT: 321 case BIGDECIMAL: 322 case DEC: 323 case DECIMAL: 324 case NUMERIC: 325 case CHARACTER: 326 case VARCHAR: 327 case CHAR: 328 case CHARACTERVARYING: 329 return ref; 330 default: 331 throw new DException("DSE514", 332 new Object [] {StaticClass.getDataTypeName(type), 333 "TRIM"}); 334 } 335 } 336 337 338 339 public int getColumnSize(Object object) throws DException { 340 ColumnDetails[] columnDetails = getChildColumnDetails(); 341 if (columnDetails[0].getQuestion()) { 342 return DatabaseProperties.maxCharLiteralLength; 343 } 344 else if (columnDetails[0].getType() != TypeConstants.CONSTANT || 345 columnDetails[0].getSize() != -5) { 346 return columnDetails[0].getSize(); 347 } else { 348 FieldBase field = (FieldBase) _charactervalueexpression1.run(object); 349 field.setDatatype(columnDetails[0].getDatatype()); 350 return field.getLength(); 351 } 352 353 } 354 355 } 356 | Popular Tags |