1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _CONNECTIVITY_FILE_FSTRINGFUNCTIONS_HXX_
29 #define _CONNECTIVITY_FILE_FSTRINGFUNCTIONS_HXX_
30 
31 #include "file/fcode.hxx"
32 #include "file/filedllapi.hxx"
33 
34 namespace connectivity
35 {
36 	class OSQLParseNode;
37 	namespace file
38 	{
39 		/** UCASE(str)
40 			UPPER(str)
41 				Returns the string str with all characters changed to uppercase according to the current character set mapping (the default is ISO-8859-1 Latin1):
42 
43 			> SELECT UCASE('Hej');
44 					-> 'HEJ'
45 
46 		*/
47 		class OOp_Upper : public OUnaryOperator
48 		{
49 		protected:
50 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
51 		};
52 
53 		/** LCASE(str)
54 			LOWER(str)
55 				Returns the string str with all characters changed to lowercase according to the current character set mapping (the default is ISO-8859-1 Latin1):
56 
57 			> SELECT LCASE('QUADRATICALLY');
58 					-> 'quadratically'
59 
60 		*/
61 		class OOp_Lower : public OUnaryOperator
62 		{
63 		protected:
64 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
65 		};
66 
67 		/** ASCII(str)
68 			Returns the ASCII code value of the leftmost character of the string str. Returns 0 if str is the empty string. Returns NULL if str is NULL:
69 
70 			> SELECT ASCII('2');
71 				-> 50
72 			> SELECT ASCII(2);
73 				-> 50
74 			> SELECT ASCII('dx');
75 				-> 100
76 
77 		*/
78 		class OOp_Ascii : public OUnaryOperator
79 		{
80 		protected:
81 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
82 		};
83 
84 		/** LENGTH(str)
85 			OCTET_LENGTH(str)
86 			CHAR_LENGTH(str)
87 			CHARACTER_LENGTH(str)
88 				Returns the length of the string str:
89 
90 			> SELECT LENGTH('text');
91 					-> 4
92 			> SELECT OCTET_LENGTH('text');
93 					-> 4
94 
95 		*/
96 		class OOp_CharLength : public OUnaryOperator
97 		{
98 		protected:
99 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
100 		};
101 
102 		/** CHAR(N,...)
103 			CHAR() interprets the arguments as integers and returns a string consisting of the characters given by the ASCII code values of those integers. NULL values are skipped:
104 
105 			> SELECT CHAR(ascii('t'),ascii('e'),ascii('s'),ascii('t'));
106 				-> 'test'
107 			> SELECT CHAR(77,77.3,'77.3');
108 				-> 'MMM'
109 
110 		*/
111 		class OOp_Char : public ONthOperator
112 		{
113 		protected:
114 			virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
115 		};
116 
117 		/** CONCAT(str1,str2,...)
118 			Returns the string that results from concatenating the arguments. Returns NULL if any argument is NULL. May have more than 2 arguments. A numeric argument is converted to the equivalent string form:
119 
120 			> SELECT CONCAT('OO', 'o', 'OO');
121 				-> 'OOoOO'
122 			> SELECT CONCAT('OO', NULL, 'OO');
123 				-> NULL
124 			> SELECT CONCAT(14.3);
125 				-> '14.3'
126 
127 		*/
128 		class OOp_Concat : public ONthOperator
129 		{
130 		protected:
131 			virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
132 		};
133 
134 		/** LOCATE(substr,str)
135 			POSITION(substr IN str)
136 			Returns the position of the first occurrence of substring substr in string str. Returns 0 if substr is not in str:
137 
138 			> SELECT LOCATE('bar', 'foobarbar');
139 					-> 4
140 			> SELECT LOCATE('xbar', 'foobar');
141 					-> 0
142 			LOCATE(substr,str,pos)
143 			Returns the position of the first occurrence of substring substr in string str, starting at position pos. Returns 0 if substr is not in str:
144 
145 			> SELECT LOCATE('bar', 'foobarbar',5);
146 				-> 7
147 
148 		*/
149 		class OOp_Locate : public ONthOperator
150 		{
151 		protected:
152 			virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
153 		};
154 
155 		/** SUBSTRING(str,pos)
156 			SUBSTRING(str FROM pos)
157 				Returns a substring from string str starting at position pos:
158 
159 			> SELECT SUBSTRING('Quadratically',5);
160 					-> 'ratically'
161 			> SELECT SUBSTRING('foobarbar' FROM 4);
162 					-> 'barbar'
163 			SUBSTRING(str,pos,len)
164 			SUBSTRING(str FROM pos FOR len)
165 				Returns a substring len characters long from string str, starting at position pos. The variant form that uses FROM is SQL-92 syntax:
166 
167 			> SELECT SUBSTRING('Quadratically',5,6);
168 					-> 'ratica'
169 
170 		*/
171 		class OOp_SubString : public ONthOperator
172 		{
173 		protected:
174 			virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
175 		};
176 
177 		/** LTRIM(str)
178 			Returns the string str with leading space characters removed:
179 
180 			> SELECT LTRIM('  barbar');
181 				-> 'barbar'
182 
183 		*/
184 		class OOp_LTrim : public OUnaryOperator
185 		{
186 		protected:
187 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
188 		};
189 
190 		/** RTRIM(str)
191 			Returns the string str with trailing space characters removed:
192 
193 			> SELECT RTRIM('barbar   ');
194 				-> 'barbar'
195 
196 		*/
197 		class OOp_RTrim : public OUnaryOperator
198 		{
199 		protected:
200 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
201 		};
202 
203 		/** SPACE(N)
204 			Returns a string consisting of N space characters:
205 
206 			> SELECT SPACE(6);
207 				-> '      '
208 
209 		*/
210 		class OOp_Space : public OUnaryOperator
211 		{
212 		protected:
213 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
214 		};
215 
216 		/** REPLACE(str,from_str,to_str)
217 			Returns the string str with all occurrences of the string from_str replaced by the string to_str:
218 
219 			> SELECT REPLACE('www.OOo.com', 'w', 'Ww');
220 				-> 'WwWwWw.OOo.com'
221 
222 		*/
223 		class OOp_Replace : public ONthOperator
224 		{
225 		protected:
226 			virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
227 		};
228 
229 		/** REPEAT(str,count)
230 			Returns a string consisting of the string str repeated count times. If count <= 0, returns an empty string. Returns NULL if str or count are NULL:
231 
232 			> SELECT REPEAT('OOo', 3);
233 				-> 'OOoOOoOOo'
234 
235 		*/
236 		class OOp_Repeat : public OBinaryOperator
237 		{
238 		protected:
239 			virtual ORowSetValue operate(const ORowSetValue& lhs,const ORowSetValue& rhs) const;
240 		};
241 
242 		/** INSERT(str,pos,len,newstr)
243 			Returns the string str, with the substring beginning at position pos and len characters long replaced by the string newstr:
244 
245 			> SELECT INSERT('Quadratic', 3, 4, 'What');
246 				-> 'QuWhattic'
247 
248 		*/
249 		class OOp_Insert : public ONthOperator
250 		{
251 		protected:
252 			virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
253 		};
254 
255 		/** LEFT(str,len)
256 			Returns the leftmost len characters from the string str:
257 
258 			> SELECT LEFT('foobarbar', 5);
259 				-> 'fooba'
260 
261 		*/
262 		class OOp_Left : public OBinaryOperator
263 		{
264 		protected:
265 			virtual ORowSetValue operate(const ORowSetValue& lhs,const ORowSetValue& rhs) const;
266 		};
267 
268 		/** RIGHT(str,len)
269 			Returns the rightmost len characters from the string str:
270 
271 			> SELECT RIGHT('foobarbar', 4);
272 				-> 'rbar'
273 		*/
274 		class OOp_Right : public OBinaryOperator
275 		{
276 		protected:
277 			virtual ORowSetValue operate(const ORowSetValue& lhs,const ORowSetValue& rhs) const;
278 		};
279 	}
280 }
281 
282 #endif // _CONNECTIVITY_FILE_FCODE_HXX_
283 
284