1 package com.daffodilwoods.daffodildb.server.sql99.expression. 2 stringvalueexpression; 3 4 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*; 5 import com.daffodilwoods.daffodildb.server.serversystem.*; 6 import com.daffodilwoods.daffodildb.server.sql99.common.*; 7 import com.daffodilwoods.daffodildb.server.sql99.expression. 8 numericvalueexpression.*; 9 import com.daffodilwoods.daffodildb.server.sql99.expression.rowvalueexpression.*; 10 import com.daffodilwoods.daffodildb.server.sql99.token.*; 11 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 12 import com.daffodilwoods.daffodildb.utils.*; 13 import com.daffodilwoods.daffodildb.utils.field.*; 14 import com.daffodilwoods.database.resource.*; 15 import com.daffodilwoods.database.utility.P; 16 import java.util.ArrayList ; 17 import java.util.Arrays ; 18 import in.co.daffodil.db.jdbc.DatabaseProperties; 19 20 public class substringfunction 21 extends AbstractStringValueExpression 22 implements charactervaluefunction { 23 24 25 26 public Srightparen_1874859514 _Srightparen_18748595140 ; 27 public numericvalueexpression _OptScomma94843605numericvalueexpression1 ; 28 public numericvalueexpression _numericvalueexpression2 ; 29 public Scomma94843605 _Scomma948436053 ; 30 public charactervalueexpression _charactervalueexpression4 ; 31 public Sleftparen653880241 _Sleftparen6538802415 ; 32 public SNONRESERVEDWORD136444255 _SNONRESERVEDWORD1364442556 ; 33 34 35 36 37 public Object run(Object object) throws com.daffodilwoods.database.resource. 38 DException { 39 FieldBase result1 = (FieldBase) _charactervalueexpression4.run(object); 40 if (result1.isNull()) { 41 return new FieldStringLiteral(FieldUtility.NULLBUFFERRANGE, CHARACTER); 42 } 43 FieldBase result2 = (FieldBase) _numericvalueexpression2.run(object); 44 if (result2.isNull()) { 45 return new FieldStringLiteral(FieldUtility.NULLBUFFERRANGE, CHARACTER); 46 } 47 FieldBase result3=null; 48 if(_OptScomma94843605numericvalueexpression1!=null) { 49 result3 = (FieldBase) _OptScomma94843605numericvalueexpression1.run(object); 50 } 51 if(result3==null||result3.isNull()) { 52 return getResultInCaseOfTwoParameter(getDataType(result1), result1.getObject(), 53 getCount(result2.getObject(), getDataType(result2))); 54 55 } else { 56 return getResulInCaseOfThreeParameter( 57 getDataType(result1), result1.getObject(), 58 getCount(result2.getObject(), getDataType(result2)), 59 getCount(result3.getObject(), getDataType(result3))); 60 } 61 } 62 63 public ColumnDetails[] getChildColumnDetails() throws DException { 64 return columnDetails; 65 } 66 67 public ParameterInfo[] getParameterInfo() throws DException { 68 ArrayList list =new ArrayList (); 69 ParameterInfo[] parameterInfo1 = _charactervalueexpression4.getParameterInfo(); 70 for (int i = 0; i < parameterInfo1.length; i++) { 71 if (parameterInfo1[i].getQuestionMark()) { 72 parameterInfo1[i].setDataType(Datatypes.CHARACTER); 73 parameterInfo1[i].setName("SUBSTRING Arg1"); 74 list.addAll(Arrays.asList(parameterInfo1)); 75 } 76 } 77 ParameterInfo[] parameterInfo2 = _numericvalueexpression2.getParameterInfo(); 78 for (int i = 0; i <parameterInfo2.length; i++) { 79 if (parameterInfo2[i].getQuestionMark()) { 80 parameterInfo2[i].setDataType(Datatypes.INTEGER); 81 parameterInfo2[i].setName("SUBSTRING Arg2"); 82 list.addAll(Arrays.asList(parameterInfo2)); 83 } 84 } 85 if(_OptScomma94843605numericvalueexpression1!=null ) { 86 ParameterInfo[] parameterInfo4 = _OptScomma94843605numericvalueexpression1. 87 getParameterInfo(); 88 for (int i = 0; i < parameterInfo4.length; i++) { 89 if (parameterInfo4[i].getQuestionMark()) { 90 parameterInfo4[i].setDataType(Datatypes.INTEGER); 91 parameterInfo4[i].setName("SUBSTRING Arg3"); 92 list.addAll(Arrays.asList(parameterInfo4)); 93 } 94 } 95 } 96 97 ParameterInfo[] param3 = new ParameterInfo[list.size()]; 98 list.toArray(param3); 99 for (int i = 0; i < param3.length; i++) { 100 if(param3[i].getQuestionMark()){ 101 return param3; 102 } 103 } 104 return getThisParameterInfo(); 105 106 } 107 108 protected ParameterInfo[] getThisParameterInfo() throws DException { 109 ParameterInfo parameterInfo = new ParameterInfo(); 110 parameterInfo.setName(toString()); 111 parameterInfo.setDataType(Datatypes.CHARACTER); 112 return new ParameterInfo[] { 113 parameterInfo}; 114 } 115 116 117 118 protected String getNameOfColumn(ColumnDetails[] columnDetails) throws 119 DException { 120 String nameOfColumn = ""; 121 for (int i = 0; i < columnDetails.length; ++i) { 122 nameOfColumn += columnDetails[i].getColumn(); 123 } 124 return nameOfColumn; 125 } 126 127 private Integer getCount(Object object, int type) throws DException { 128 switch (type) { 129 case BYTE: 130 case TINYINT: 131 case INTEGER: 132 case INT: 133 case REAL: 134 case DOUBLE: 135 case FLOAT: 136 case DOUBLEPRECISION: 137 case LONG: 138 case BIGINT: 139 case SHORT: 140 case SMALLINT: 141 case BIGDECIMAL: 142 case DEC: 143 case DECIMAL: 144 case NUMERIC: 145 return new Integer ( ( (Number ) object).intValue()); 146 case CHARACTER: 147 case VARCHAR: 148 case CHAR: 149 case CHARACTERVARYING: 150 String string = (String ) object; 151 Double d = null; 152 try { 153 d = new Double (string); 154 } 155 catch (Exception e) { 156 throw new DException("DSE4104", null); 157 } 158 return new Integer (d.intValue()); 159 default: 160 throw new DException("DSE4108", 161 new Object [] {StaticClass.getDataTypeName(type), 162 "substring"}); 163 } 164 } 165 166 private Object getResulInCaseOfThreeParameter(int type, Object result1, Integer start, 167 Integer length) throws DException { 168 int startP = start.intValue(); 169 int lengthP = length.intValue(); 170 switch (type) { 171 case CHARACTER: 172 case VARCHAR: 173 case CHAR: 174 case CHARACTERVARYING: 175 return new FieldStringLiteral(subString( (String ) result1, startP, 176 lengthP), Datatype.CHARACTER); 177 default: 178 throw new DException("DSE4108", 179 new Object [] {StaticClass.getDataTypeName(type), 180 "substring"}); 181 } 182 } 183 184 185 private Object getResultInCaseOfTwoParameter(int type, Object result1, Integer start) throws DException { 186 switch (type) { 187 case CHARACTER: 188 case VARCHAR: 189 case CHAR: 190 case CHARACTERVARYING: 191 int length =start.intValue(); 192 if(length< 0||length>((String )result1).length()) { 193 return new FieldStringLiteral("", Datatype.CHARACTER); 194 } 195 return new FieldStringLiteral( ( (String ) result1).substring(start. 196 intValue() - 1), Datatype.CHARACTER); 197 default: 198 throw new DException("DSE4108", 199 new Object [] {StaticClass.getDataTypeName(type), 200 "substring"}); 201 } 202 } 203 204 205 private String subString(String string, int beginIndex, int length) throws 206 DException { 207 beginIndex = beginIndex - 1; 208 if (beginIndex < 0 || length < 1) 209 throw new DException("DSE1160", null); 210 if (beginIndex > string.length()) { 211 return ""; 212 } 213 if ( (beginIndex + length) > string.length()) { 214 return string.substring(beginIndex); 215 } 216 return string.substring(beginIndex, beginIndex + length); 217 218 } 219 220 221 public AbstractRowValueExpression[] getChilds() { 222 ArrayList list =new ArrayList (); 223 list.add((AbstractRowValueExpression) (_charactervalueexpression4)); 224 list.add((AbstractRowValueExpression) (_numericvalueexpression2)); 225 if(_OptScomma94843605numericvalueexpression1!=null ) 226 list.add((AbstractRowValueExpression) (_OptScomma94843605numericvalueexpression1)); 227 AbstractRowValueExpression[] childs = new AbstractRowValueExpression[list.size()]; 228 list.toArray(childs); 229 return childs; 230 231 } 232 233 public String getType() throws DException { 234 return (String ) _SNONRESERVEDWORD1364442556.run(null); 235 } 236 237 public String toString() { 238 StringBuffer sb = new StringBuffer (); 239 sb.append(" "); 240 sb.append(_SNONRESERVEDWORD1364442556); 241 sb.append(" "); 242 sb.append(_Sleftparen6538802415); 243 sb.append(" "); 244 sb.append(_charactervalueexpression4); 245 sb.append(" "); 246 sb.append(_Scomma948436053); 247 sb.append(" "); 248 sb.append(_numericvalueexpression2); 249 sb.append(" "); 250 if(_OptScomma94843605numericvalueexpression1 != null ) { 251 sb.append(_Scomma948436053); 252 sb.append(_OptScomma94843605numericvalueexpression1); 253 sb.append(" "); 254 } 255 sb.append(_Srightparen_18748595140); 256 return sb.toString(); 257 } 258 259 260 public Object clone() throws CloneNotSupportedException { 261 substringfunction tempClass = new substringfunction(); 262 tempClass._Srightparen_18748595140 = (Srightparen_1874859514) 263 _Srightparen_18748595140.clone(); 264 if(_OptScomma94843605numericvalueexpression1!=null) 265 tempClass._OptScomma94843605numericvalueexpression1 = (numericvalueexpression) 266 _OptScomma94843605numericvalueexpression1.clone(); 267 tempClass._numericvalueexpression2 = (numericvalueexpression) 268 _numericvalueexpression2.clone(); 269 tempClass._Scomma948436053 = (Scomma94843605) _Scomma948436053.clone(); 270 tempClass._charactervalueexpression4 = (charactervalueexpression) 271 _charactervalueexpression4.clone(); 272 tempClass._Sleftparen6538802415 = (Sleftparen653880241) 273 _Sleftparen6538802415.clone(); 274 tempClass._SNONRESERVEDWORD1364442556 = (SNONRESERVEDWORD136444255) 275 _SNONRESERVEDWORD1364442556.clone(); 276 return tempClass; 277 } 278 279 public _Reference[] checkSemantic(_ServerSession parent) throws DException { 280 _Reference[] ref = super.checkSemantic(parent); 281 if(ref!=null) { 282 return ref; 283 } 284 int type = _charactervalueexpression4.getByteComparison(parent). 285 getDataTypes()[0]; 286 switch (type) { 287 case -1: 288 case CHARACTER: 289 case VARCHAR: 290 case CHAR: 291 case CHARACTERVARYING: 292 return ref; 293 default: 294 throw new DException("DSE4108", 295 new Object [] {StaticClass.getDataTypeName(type), 296 "substring"}); 297 } 298 299 } 300 301 public int getColumnSize(Object object) throws DException { 302 ColumnDetails[] columnDetails = getChildColumnDetails(); 303 int columnSize=-1; 304 if(_OptScomma94843605numericvalueexpression1!=null) { 305 if (columnDetails[2].getQuestion()) { 306 columnSize = DatabaseProperties.maxCharLiteralLength; 307 } 308 else if (columnDetails[2].getType() != TypeConstants.CONSTANT || 309 columnDetails[2].getSize() != -5 ) { 310 columnSize = columnDetails[2].getSize(); 311 } 312 else { 313 if(_OptScomma94843605numericvalueexpression1!=null) { 314 FieldBase field = (FieldBase) _OptScomma94843605numericvalueexpression1.run(object); 315 field.setDatatype(columnDetails[2].getDatatype()); 316 columnSize = field.getLength(); 317 }else { 318 FieldBase field = (FieldBase) _charactervalueexpression4. 319 run(object); 320 field.setDatatype(columnDetails[0].getDatatype()); 321 columnSize = field.getLength(); 322 323 } 324 } 325 } else { 326 if (columnDetails[1].getQuestion()) { 327 columnSize = DatabaseProperties.maxCharLiteralLength; 328 } 329 else if (columnDetails[0].getType() != TypeConstants.CONSTANT || 330 columnDetails[0].getSize() != -5) { 331 columnSize = columnDetails[0].getSize(); 332 } 333 else { 334 FieldBase field = (FieldBase) _charactervalueexpression4. 335 run(object); 336 field.setDatatype(columnDetails[0].getDatatype()); 337 columnSize = field.getLength(); 338 339 } 340 } 341 return columnSize; 342 } 343 344 } 345 | Popular Tags |