1 34 package smallsql.database; 35 36 import java.io.ByteArrayOutputStream ; 37 38 39 42 public class ExpressionFunctionReplace extends ExpressionFunctionReturnP1StringAndBinary { 43 44 final int getFunction() { 45 return SQLTokenizer.REPLACE; 46 } 47 48 49 final boolean isNull() throws Exception { 50 return param1.isNull() || param2.isNull() || param3.isNull(); 51 } 52 53 54 final byte[] getBytes() throws Exception { 55 if(isNull()) return null; 56 byte[] str1 = param1.getBytes(); 57 byte[] str2 = param2.getBytes(); 58 int length = str2.length; 59 if(length == 0){ 60 return str1; 61 } 62 byte[] str3 = param3.getBytes(); 63 ByteArrayOutputStream buffer = new ByteArrayOutputStream (); 64 int idx1 = 0; 65 int idx2 = Utils.indexOf(str2,str1,idx1); 66 while(idx2 > 0){ 67 buffer.write(str1,idx1,idx2-idx1); 68 buffer.write(str3); 69 idx1 = idx2 + length; 70 idx2 = Utils.indexOf(str2,str1,idx1); 71 } 72 if(idx1 > 0){ 73 buffer.write(str1,idx1,str1.length-idx1); 74 return buffer.toByteArray(); 75 } 76 return str1; 77 } 78 79 80 final String getString() throws Exception { 81 if(isNull()) return null; 82 String str1 = param1.getString(); 83 String str2 = param2.getString(); 84 int length = str2.length(); 85 if(length == 0){ 86 return str1; 87 } 88 String str3 = param3.getString(); 89 StringBuffer buffer = new StringBuffer (); 90 int idx1 = 0; 91 int idx2 = str1.indexOf(str2,idx1); 92 while(idx2 >= 0){ 93 buffer.append(str1.substring(idx1,idx2)); 94 buffer.append(str3); 95 idx1 = idx2 + length; 96 idx2 = str1.indexOf(str2,idx1); 97 } 98 if(idx1 > 0){ 99 buffer.append(str1.substring(idx1)); 100 return buffer.toString(); 101 } 102 return str1; 103 } 104 105 106 int getPrecision() { 107 return SSResultSetMetaData.getDataTypePrecision( getDataType(), -1 ); 108 } 109 110 } 111 | Popular Tags |