KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > smallsql > database > ExpressionFunctionReplace


1 /* =============================================================
2  * SmallSQL : a free Java DBMS library for the Java(tm) platform
3  * =============================================================
4  *
5  * (C) Copyright 2004-2006, by Volker Berlin.
6  *
7  * Project Info: http://www.smallsql.de/
8  *
9  * This library is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation; either version 2.1 of the License, or
12  * (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17  * License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
22  * USA.
23  *
24  * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
25  * in the United States and other countries.]
26  *
27  * ---------------
28  * ExpressionFunctionReplace.java
29  * ---------------
30  * Author: Volker Berlin
31  *
32  * Created on 23.06.2006
33  */

34 package smallsql.database;
35
36 import java.io.ByteArrayOutputStream JavaDoc;
37
38
39 /**
40  * @author Volker Berlin
41  */

42 public class ExpressionFunctionReplace extends ExpressionFunctionReturnP1StringAndBinary {
43
44     final int getFunction() {
45         return SQLTokenizer.REPLACE;
46     }
47
48
49     final boolean isNull() throws Exception JavaDoc {
50         return param1.isNull() || param2.isNull() || param3.isNull();
51     }
52
53
54     final byte[] getBytes() throws Exception JavaDoc{
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 JavaDoc buffer = new ByteArrayOutputStream JavaDoc();
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 JavaDoc getString() throws Exception JavaDoc {
81         if(isNull()) return null;
82         String JavaDoc str1 = param1.getString();
83         String JavaDoc str2 = param2.getString();
84         int length = str2.length();
85         if(length == 0){
86             return str1;
87         }
88         String JavaDoc str3 = param3.getString();
89         StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
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