1 /*
2    Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
3 
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License, version 2.0,
6    as published by the Free Software Foundation.
7 
8    This program is also distributed with certain software (including
9    but not limited to OpenSSL) that is licensed under separate terms,
10    as designated in a particular file or component or in included license
11    documentation.  The authors of MySQL hereby grant you an additional
12    permission to link the program and your derivative works with the
13    separately licensed software that they have included with MySQL.
14 
15    This program 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 General Public License, version 2.0, for more details.
19 
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
23 */
24 
25 package testsuite.clusterj;
26 
27 import testsuite.clusterj.model.StringTypes;
28 import testsuite.clusterj.model.IdBase;
29 
30 public class QueryStringTypesTest extends AbstractQueryTest {
31 
32     @Override
getInstanceType()33     public Class getInstanceType() {
34         return StringTypes.class;
35     }
36 
37     @Override
createInstances(int number)38     void createInstances(int number) {
39         createAllStringTypesInstances(number);
40     }
41 
42     static String[] strings = new String[] {
43         "Alabama",
44         "Arkansas",
45         "Delaware",
46         "New Jersey",
47         "New York",
48         "Pennsylvania",
49         "Rhode Island",
50         "Texax",
51         "Virginia",
52         "Wyoming"
53     };
54 
55     /** Schema
56     *
57    drop table if exists stringtypes;
58    create table stringtypes (
59     id int not null primary key,
60 
61     string_null_hash varchar(20),
62     string_null_btree varchar(300),
63     string_null_both varchar(20),
64     string_null_none varchar(300),
65 
66     string_not_null_hash varchar(300),
67     string_not_null_btree varchar(20),
68     string_not_null_both varchar(300),
69     string_not_null_none varchar(20),
70     unique key idx_string_null_hash (string_null_hash) using hash,
71     key idx_string_null_btree (string_null_btree),
72     unique key idx_string_null_both (string_null_both),
73 
74     unique key idx_string_not_null_hash (string_not_null_hash) using hash,
75     key idx_string_not_null_btree (string_not_null_btree),
76     unique key idx_string_not_null_both (string_not_null_both)
77 
78    ) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
79 
80     */
test()81     public void test() {
82         btreeIndexScanString();
83         hashIndexScanString();
84         bothIndexScanString();
85         noneIndexScanString();
86         failOnError();
87     }
88 
btreeIndexScanString()89     public void btreeIndexScanString() {
90         equalQuery("string_not_null_btree", "idx_string_not_null_btree", getString(8), 8);
91         greaterEqualQuery("string_not_null_btree", "idx_string_not_null_btree", getString(7), 7, 8, 9);
92         greaterThanQuery("string_not_null_btree", "idx_string_not_null_btree", getString(6), 7, 8, 9);
93         lessEqualQuery("string_not_null_btree", "idx_string_not_null_btree", getString(4), 4, 3, 2, 1, 0);
94         lessThanQuery("string_not_null_btree", "idx_string_not_null_btree", getString(4), 3, 2, 1, 0);
95         betweenQuery("string_not_null_btree", "idx_string_not_null_btree", getString(4), getString(6), 4, 5, 6);
96         greaterEqualAndLessEqualQuery("string_not_null_btree", "idx_string_not_null_btree", getString(4), getString(6), 4, 5, 6);
97         greaterThanAndLessEqualQuery("string_not_null_btree", "idx_string_not_null_btree", getString(4), getString(6), 5, 6);
98         greaterEqualAndLessThanQuery("string_not_null_btree", "idx_string_not_null_btree", getString(4), getString(6), 4, 5);
99         greaterThanAndLessThanQuery("string_not_null_btree", "idx_string_not_null_btree", getString(4), getString(6), 5);
100 
101         equalQuery("string_null_btree", "idx_string_null_btree", getString(8), 8);
102         greaterEqualQuery("string_null_btree", "idx_string_null_btree", getString(7), 7, 8, 9);
103         greaterThanQuery("string_null_btree", "idx_string_null_btree", getString(6), 7, 8, 9);
104         lessEqualQuery("string_null_btree", "idx_string_null_btree", getString(4), 4, 3, 2, 1, 0);
105         lessThanQuery("string_null_btree", "idx_string_null_btree", getString(4), 3, 2, 1, 0);
106         betweenQuery("string_null_btree", "idx_string_null_btree", getString(4), getString(6), 4, 5, 6);
107         greaterEqualAndLessEqualQuery("string_null_btree", "idx_string_null_btree", getString(4), getString(6), 4, 5, 6);
108         greaterThanAndLessEqualQuery("string_null_btree", "idx_string_null_btree", getString(4), getString(6), 5, 6);
109         greaterEqualAndLessThanQuery("string_null_btree", "idx_string_null_btree", getString(4), getString(6), 4, 5);
110         greaterThanAndLessThanQuery("string_null_btree", "idx_string_null_btree", getString(4), getString(6), 5);
111 }
112 
hashIndexScanString()113     public void hashIndexScanString() {
114         equalQuery("string_not_null_hash", "idx_string_not_null_hash", getString(8), 8);
115         greaterEqualQuery("string_not_null_hash", "none", getString(7), 7, 8, 9);
116         greaterThanQuery("string_not_null_hash", "none", getString(6), 7, 8, 9);
117         lessEqualQuery("string_not_null_hash", "none", getString(4), 4, 3, 2, 1, 0);
118         lessThanQuery("string_not_null_hash", "none", getString(4), 3, 2, 1, 0);
119         betweenQuery("string_not_null_hash", "none", getString(4), getString(6), 4, 5, 6);
120         greaterEqualAndLessEqualQuery("string_not_null_hash", "none", getString(4), getString(6), 4, 5, 6);
121         greaterThanAndLessEqualQuery("string_not_null_hash", "none", getString(4), getString(6), 5, 6);
122         greaterEqualAndLessThanQuery("string_not_null_hash", "none", getString(4), getString(6), 4, 5);
123         greaterThanAndLessThanQuery("string_not_null_hash", "none", getString(4), getString(6), 5);
124 
125         equalQuery("string_null_hash", "idx_string_null_hash", getString(8), 8);
126         greaterEqualQuery("string_null_hash", "none", getString(7), 7, 8, 9);
127         greaterThanQuery("string_null_hash", "none", getString(6), 7, 8, 9);
128         lessEqualQuery("string_null_hash", "none", getString(4), 4, 3, 2, 1, 0);
129         lessThanQuery("string_null_hash", "none", getString(4), 3, 2, 1, 0);
130         betweenQuery("string_null_hash", "none", getString(4), getString(6), 4, 5, 6);
131         greaterEqualAndLessEqualQuery("string_null_hash", "none", getString(4), getString(6), 4, 5, 6);
132         greaterThanAndLessEqualQuery("string_null_hash", "none", getString(4), getString(6), 5, 6);
133         greaterEqualAndLessThanQuery("string_null_hash", "none", getString(4), getString(6), 4, 5);
134         greaterThanAndLessThanQuery("string_null_hash", "none", getString(4), getString(6), 5);
135 
136     }
137 
bothIndexScanString()138     public void bothIndexScanString() {
139         equalQuery("string_not_null_both", "idx_string_not_null_both", getString(8), 8);
140         greaterEqualQuery("string_not_null_both", "idx_string_not_null_both", getString(7), 7, 8, 9);
141         greaterThanQuery("string_not_null_both", "idx_string_not_null_both", getString(6), 7, 8, 9);
142         lessEqualQuery("string_not_null_both", "idx_string_not_null_both", getString(4), 4, 3, 2, 1, 0);
143         lessThanQuery("string_not_null_both", "idx_string_not_null_both", getString(4), 3, 2, 1, 0);
144         betweenQuery("string_not_null_both", "idx_string_not_null_both", getString(4), getString(6), 4, 5, 6);
145         greaterEqualAndLessEqualQuery("string_not_null_both", "idx_string_not_null_both", getString(4), getString(6), 4, 5, 6);
146         greaterThanAndLessEqualQuery("string_not_null_both", "idx_string_not_null_both", getString(4), getString(6), 5, 6);
147         greaterEqualAndLessThanQuery("string_not_null_both", "idx_string_not_null_both", getString(4), getString(6), 4, 5);
148         greaterThanAndLessThanQuery("string_not_null_both", "idx_string_not_null_both", getString(4), getString(6), 5);
149 
150         equalQuery("string_null_both", "idx_string_null_both", getString(8), 8);
151         greaterEqualQuery("string_null_both", "idx_string_null_both", getString(7), 7, 8, 9);
152         greaterThanQuery("string_null_both", "idx_string_null_both", getString(6), 7, 8, 9);
153         lessEqualQuery("string_null_both", "idx_string_null_both", getString(4), 4, 3, 2, 1, 0);
154         lessThanQuery("string_null_both", "idx_string_null_both", getString(4), 3, 2, 1, 0);
155         betweenQuery("string_null_both", "idx_string_null_both", getString(4), getString(6), 4, 5, 6);
156         greaterEqualAndLessEqualQuery("string_null_both", "idx_string_null_both", getString(4), getString(6), 4, 5, 6);
157         greaterThanAndLessEqualQuery("string_null_both", "idx_string_null_both", getString(4), getString(6), 5, 6);
158         greaterEqualAndLessThanQuery("string_null_both", "idx_string_null_both", getString(4), getString(6), 4, 5);
159         greaterThanAndLessThanQuery("string_null_both", "idx_string_null_both", getString(4), getString(6), 5);
160 
161     }
162 
noneIndexScanString()163     public void noneIndexScanString() {
164         equalQuery("string_not_null_none", "none", getString(8), 8);
165         greaterEqualQuery("string_not_null_none", "none", getString(7), 7, 8, 9);
166         greaterThanQuery("string_not_null_none", "none", getString(6), 7, 8, 9);
167         lessEqualQuery("string_not_null_none", "none", getString(4), 4, 3, 2, 1, 0);
168         lessThanQuery("string_not_null_none", "none", getString(4), 3, 2, 1, 0);
169         betweenQuery("string_not_null_none", "none", getString(4), getString(6), 4, 5, 6);
170         greaterEqualAndLessEqualQuery("string_not_null_none", "none", getString(4), getString(6), 4, 5, 6);
171         greaterThanAndLessEqualQuery("string_not_null_none", "none", getString(4), getString(6), 5, 6);
172         greaterEqualAndLessThanQuery("string_not_null_none", "none", getString(4), getString(6), 4, 5);
173         greaterThanAndLessThanQuery("string_not_null_none", "none", getString(4), getString(6), 5);
174 
175         equalQuery("string_null_none", "none", getString(8), 8);
176         greaterEqualQuery("string_null_none", "none", getString(7), 7, 8, 9);
177         greaterThanQuery("string_null_none", "none", getString(6), 7, 8, 9);
178         lessEqualQuery("string_null_none", "none", getString(4), 4, 3, 2, 1, 0);
179         lessThanQuery("string_null_none", "none", getString(4), 3, 2, 1, 0);
180         betweenQuery("string_null_none", "none", getString(4), getString(6), 4, 5, 6);
181         greaterEqualAndLessEqualQuery("string_null_none", "none", getString(4), getString(6), 4, 5, 6);
182         greaterThanAndLessEqualQuery("string_null_none", "none", getString(4), getString(6), 5, 6);
183         greaterEqualAndLessThanQuery("string_null_none", "none", getString(4), getString(6), 4, 5);
184         greaterThanAndLessThanQuery("string_null_none", "none", getString(4), getString(6), 5);
185 
186     }
187 
createAllStringTypesInstances(int number)188     private void createAllStringTypesInstances(int number) {
189         for (int i = 0; i < number; ++i) {
190             StringTypes instance = session.newInstance(StringTypes.class);
191             instance.setId(i);
192             instance.setString_not_null_hash(getString(i));
193             instance.setString_not_null_btree(getString(i));
194             instance.setString_not_null_both(getString(i));
195             instance.setString_not_null_none(getString(i));
196             instance.setString_null_hash(getString(i));
197             instance.setString_null_btree(getString(i));
198             instance.setString_null_both(getString(i));
199             instance.setString_null_none(getString(i));
200             instances.add(instance);
201         }
202     }
203 
getString(int number)204     protected String getString(int number) {
205         return strings[number];
206     }
207 
208     /** Print the results of a query for debugging.
209      *
210      * @param instance the instance to print
211      */
212     @Override
printResultInstance(IdBase instance)213     protected void printResultInstance(IdBase instance) {
214         if (instance instanceof StringTypes) {
215             StringTypes stringType = (StringTypes)instance;
216 //            System.out.println(toString(stringType));
217         }
218     }
219 
toString(IdBase idBase)220     public static String toString(IdBase idBase) {
221         StringTypes instance = (StringTypes)idBase;
222         StringBuffer buffer = new StringBuffer("StringTypes id: ");
223         buffer.append(instance.getId());
224         buffer.append("; string_not_null_both: ");
225         buffer.append(instance.getString_not_null_both());
226         buffer.append("; string_not_null_btree: ");
227         buffer.append(instance.getString_not_null_btree());
228         buffer.append("; string_not_null_hash: ");
229         buffer.append(instance.getString_not_null_hash());
230         buffer.append("; string_not_null_none: ");
231         buffer.append(instance.getString_not_null_none());
232         buffer.append("; string_null_both: ");
233         buffer.append(instance.getString_null_both().toString());
234         buffer.append("; string_null_btree: ");
235         buffer.append(instance.getString_null_btree().toString());
236         buffer.append("; string_null_hash: ");
237         buffer.append(instance.getString_null_hash().toString());
238         buffer.append("; string_null_none: ");
239         buffer.append(instance.getString_null_none().toString());
240         return buffer.toString();
241     }
242 }
243