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.FloatTypes;
28 import testsuite.clusterj.model.IdBase;
29 
30 public class QueryFloatTypesTest extends AbstractQueryTest {
31 
32     @Override
getInstanceType()33     public Class getInstanceType() {
34         return FloatTypes.class;
35     }
36 
37     @Override
createInstances(int number)38     void createInstances(int number) {
39         createAllFloatTypesInstances(number);
40     }
41 
42     /** Test all single- and double-predicate queries using FloatTypes.
43 drop table if exists floattypes;
44 create table floattypes (
45  id int not null primary key,
46 
47  float_null_hash float,
48  float_null_btree float,
49  float_null_both float,
50  float_null_none float,
51 
52  float_not_null_hash float,
53  float_not_null_btree float,
54  float_not_null_both float,
55  float_not_null_none float
56 
57 ) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
58 
59 create unique index idx_float_null_hash using hash on floattypes(float_null_hash);
60 create index idx_float_null_btree on floattypes(float_null_btree);
61 create unique index idx_float_null_both on floattypes(float_null_both);
62 
63 create unique index idx_float_not_null_hash using hash on floattypes(float_not_null_hash);
64 create index idx_float_not_null_btree on floattypes(float_not_null_btree);
65 create unique index idx_float_not_null_both on floattypes(float_not_null_both);
66 
67      */
68 
69 /** Float types allow hash indexes to be defined but ndb-bindings
70  * do not allow an equal lookup, so they are not used.
71  * If hash indexes are supported in future, uncomment the test case methods.
72  */
test()73     public void test() {
74         btreeIndexScanFloat();
75         hashIndexScanFloat();
76         bothIndexScanFloat();
77         noneIndexScanFloat();
78         failOnError();
79     }
80 
btreeIndexScanFloat()81     public void btreeIndexScanFloat() {
82         equalQuery("float_not_null_btree", "idx_float_not_null_btree", getFloat(8), 8);
83         greaterEqualQuery("float_not_null_btree", "idx_float_not_null_btree", getFloat(7), 7, 8, 9);
84         greaterThanQuery("float_not_null_btree", "idx_float_not_null_btree", getFloat(6), 7, 8, 9);
85         lessEqualQuery("float_not_null_btree", "idx_float_not_null_btree", getFloat(4), 4, 3, 2, 1, 0);
86         lessThanQuery("float_not_null_btree", "idx_float_not_null_btree", getFloat(4), 3, 2, 1, 0);
87         betweenQuery("float_not_null_btree", "idx_float_not_null_btree", getFloat(4), getFloat(6), 4, 5, 6);
88         greaterEqualAndLessEqualQuery("float_not_null_btree", "idx_float_not_null_btree", getFloat(4), getFloat(6), 4, 5, 6);
89         greaterThanAndLessEqualQuery("float_not_null_btree", "idx_float_not_null_btree", getFloat(4), getFloat(6), 5, 6);
90         greaterEqualAndLessThanQuery("float_not_null_btree", "idx_float_not_null_btree", getFloat(4), getFloat(6), 4, 5);
91         greaterThanAndLessThanQuery("float_not_null_btree", "idx_float_not_null_btree", getFloat(4), getFloat(6), 5);
92 
93         equalQuery("float_null_btree", "idx_float_null_btree", getFloat(8), 8);
94         greaterEqualQuery("float_null_btree", "idx_float_null_btree", getFloat(7), 7, 8, 9);
95         greaterThanQuery("float_null_btree", "idx_float_null_btree", getFloat(6), 7, 8, 9);
96         lessEqualQuery("float_null_btree", "idx_float_null_btree", getFloat(4), 4, 3, 2, 1, 0);
97         lessThanQuery("float_null_btree", "idx_float_null_btree", getFloat(4), 3, 2, 1, 0);
98         betweenQuery("float_null_btree", "idx_float_null_btree", getFloat(4), getFloat(6), 4, 5, 6);
99         greaterEqualAndLessEqualQuery("float_null_btree", "idx_float_null_btree", getFloat(4), getFloat(6), 4, 5, 6);
100         greaterThanAndLessEqualQuery("float_null_btree", "idx_float_null_btree", getFloat(4), getFloat(6), 5, 6);
101         greaterEqualAndLessThanQuery("float_null_btree", "idx_float_null_btree", getFloat(4), getFloat(6), 4, 5);
102         greaterThanAndLessThanQuery("float_null_btree", "idx_float_null_btree", getFloat(4), getFloat(6), 5);
103 }
104 
hashIndexScanFloat()105     public void hashIndexScanFloat() {
106         equalQuery("float_not_null_hash", "idx_float_not_null_hash", getFloat(8), 8);
107         greaterEqualQuery("float_not_null_hash", "none", getFloat(7), 7, 8, 9);
108         greaterThanQuery("float_not_null_hash", "none", getFloat(6), 7, 8, 9);
109         lessEqualQuery("float_not_null_hash", "none", getFloat(4), 4, 3, 2, 1, 0);
110         lessThanQuery("float_not_null_hash", "none", getFloat(4), 3, 2, 1, 0);
111         betweenQuery("float_not_null_hash", "none", getFloat(4), getFloat(6), 4, 5, 6);
112         greaterEqualAndLessEqualQuery("float_not_null_hash", "none", getFloat(4), getFloat(6), 4, 5, 6);
113         greaterThanAndLessEqualQuery("float_not_null_hash", "none", getFloat(4), getFloat(6), 5, 6);
114         greaterEqualAndLessThanQuery("float_not_null_hash", "none", getFloat(4), getFloat(6), 4, 5);
115         greaterThanAndLessThanQuery("float_not_null_hash", "none", getFloat(4), getFloat(6), 5);
116 
117         equalQuery("float_null_hash", "idx_float_null_hash", getFloat(8), 8);
118         greaterEqualQuery("float_null_hash", "none", getFloat(7), 7, 8, 9);
119         greaterThanQuery("float_null_hash", "none", getFloat(6), 7, 8, 9);
120         lessEqualQuery("float_null_hash", "none", getFloat(4), 4, 3, 2, 1, 0);
121         lessThanQuery("float_null_hash", "none", getFloat(4), 3, 2, 1, 0);
122         betweenQuery("float_null_hash", "none", getFloat(4), getFloat(6), 4, 5, 6);
123         greaterEqualAndLessEqualQuery("float_null_hash", "none", getFloat(4), getFloat(6), 4, 5, 6);
124         greaterThanAndLessEqualQuery("float_null_hash", "none", getFloat(4), getFloat(6), 5, 6);
125         greaterEqualAndLessThanQuery("float_null_hash", "none", getFloat(4), getFloat(6), 4, 5);
126         greaterThanAndLessThanQuery("float_null_hash", "none", getFloat(4), getFloat(6), 5);
127 
128     }
129 
bothIndexScanFloat()130     public void bothIndexScanFloat() {
131         equalQuery("float_not_null_both", "idx_float_not_null_both", getFloat(8), 8);
132         greaterEqualQuery("float_not_null_both", "idx_float_not_null_both", getFloat(7), 7, 8, 9);
133         greaterThanQuery("float_not_null_both", "idx_float_not_null_both", getFloat(6), 7, 8, 9);
134         lessEqualQuery("float_not_null_both", "idx_float_not_null_both", getFloat(4), 4, 3, 2, 1, 0);
135         lessThanQuery("float_not_null_both", "idx_float_not_null_both", getFloat(4), 3, 2, 1, 0);
136         betweenQuery("float_not_null_both", "idx_float_not_null_both", getFloat(4), getFloat(6), 4, 5, 6);
137         greaterEqualAndLessEqualQuery("float_not_null_both", "idx_float_not_null_both", getFloat(4), getFloat(6), 4, 5, 6);
138         greaterThanAndLessEqualQuery("float_not_null_both", "idx_float_not_null_both", getFloat(4), getFloat(6), 5, 6);
139         greaterEqualAndLessThanQuery("float_not_null_both", "idx_float_not_null_both", getFloat(4), getFloat(6), 4, 5);
140         greaterThanAndLessThanQuery("float_not_null_both", "idx_float_not_null_both", getFloat(4), getFloat(6), 5);
141 
142         equalQuery("float_null_both", "idx_float_null_both", getFloat(8), 8);
143         greaterEqualQuery("float_null_both", "idx_float_null_both", getFloat(7), 7, 8, 9);
144         greaterThanQuery("float_null_both", "idx_float_null_both", getFloat(6), 7, 8, 9);
145         lessEqualQuery("float_null_both", "idx_float_null_both", getFloat(4), 4, 3, 2, 1, 0);
146         lessThanQuery("float_null_both", "idx_float_null_both", getFloat(4), 3, 2, 1, 0);
147         betweenQuery("float_null_both", "idx_float_null_both", getFloat(4), getFloat(6), 4, 5, 6);
148         greaterEqualAndLessEqualQuery("float_null_both", "idx_float_null_both", getFloat(4), getFloat(6), 4, 5, 6);
149         greaterThanAndLessEqualQuery("float_null_both", "idx_float_null_both", getFloat(4), getFloat(6), 5, 6);
150         greaterEqualAndLessThanQuery("float_null_both", "idx_float_null_both", getFloat(4), getFloat(6), 4, 5);
151         greaterThanAndLessThanQuery("float_null_both", "idx_float_null_both", getFloat(4), getFloat(6), 5);
152 
153     }
154 
noneIndexScanFloat()155     public void noneIndexScanFloat() {
156         equalQuery("float_not_null_none", "none", getFloat(8), 8);
157         greaterEqualQuery("float_not_null_none", "none", getFloat(7), 7, 8, 9);
158         greaterThanQuery("float_not_null_none", "none", getFloat(6), 7, 8, 9);
159         lessEqualQuery("float_not_null_none", "none", getFloat(4), 4, 3, 2, 1, 0);
160         lessThanQuery("float_not_null_none", "none", getFloat(4), 3, 2, 1, 0);
161         betweenQuery("float_not_null_none", "none", getFloat(4), getFloat(6), 4, 5, 6);
162         greaterEqualAndLessEqualQuery("float_not_null_none", "none", getFloat(4), getFloat(6), 4, 5, 6);
163         greaterThanAndLessEqualQuery("float_not_null_none", "none", getFloat(4), getFloat(6), 5, 6);
164         greaterEqualAndLessThanQuery("float_not_null_none", "none", getFloat(4), getFloat(6), 4, 5);
165         greaterThanAndLessThanQuery("float_not_null_none", "none", getFloat(4), getFloat(6), 5);
166 
167         equalQuery("float_null_none", "none", getFloat(8), 8);
168         greaterEqualQuery("float_null_none", "none", getFloat(7), 7, 8, 9);
169         greaterThanQuery("float_null_none", "none", getFloat(6), 7, 8, 9);
170         lessEqualQuery("float_null_none", "none", getFloat(4), 4, 3, 2, 1, 0);
171         lessThanQuery("float_null_none", "none", getFloat(4), 3, 2, 1, 0);
172         betweenQuery("float_null_none", "none", getFloat(4), getFloat(6), 4, 5, 6);
173         greaterEqualAndLessEqualQuery("float_null_none", "none", getFloat(4), getFloat(6), 4, 5, 6);
174         greaterThanAndLessEqualQuery("float_null_none", "none", getFloat(4), getFloat(6), 5, 6);
175         greaterEqualAndLessThanQuery("float_null_none", "none", getFloat(4), getFloat(6), 4, 5);
176         greaterThanAndLessThanQuery("float_null_none", "none", getFloat(4), getFloat(6), 5);
177 
178     }
179 
createAllFloatTypesInstances(int number)180     private void createAllFloatTypesInstances(int number) {
181         for (int i = 0; i < number; ++i) {
182             FloatTypes instance = session.newInstance(FloatTypes.class);
183             instance.setId(i);
184             instance.setFloat_not_null_hash(getFloat(i));
185             instance.setFloat_not_null_btree(getFloat(i));
186             instance.setFloat_not_null_both(getFloat(i));
187             instance.setFloat_not_null_none(getFloat(i));
188             instance.setFloat_null_hash(getFloat(i));
189             instance.setFloat_null_btree(getFloat(i));
190             instance.setFloat_null_both(getFloat(i));
191             instance.setFloat_null_none(getFloat(i));
192             instances.add(instance);
193         }
194     }
195 
getFloat(int number)196     protected Float getFloat(int number) {
197         return Float.valueOf(0.00001F * number);
198     }
199 
200     /** Print the results of a query for debugging.
201      *
202      * @param instance the instance to print
203      */
204     @Override
printResultInstance(IdBase instance)205     protected void printResultInstance(IdBase instance) {
206         if (instance instanceof FloatTypes) {
207             FloatTypes floatType = (FloatTypes)instance;
208 //            System.out.println(toString(floatType));
209         }
210     }
211 
toString(IdBase idBase)212     public static String toString(IdBase idBase) {
213         FloatTypes instance = (FloatTypes)idBase;
214         StringBuffer buffer = new StringBuffer("FloatTypes id: ");
215         buffer.append(instance.getId());
216         buffer.append("; float_not_null_both: ");
217         buffer.append(instance.getFloat_not_null_both());
218         buffer.append("; float_not_null_btree: ");
219         buffer.append(instance.getFloat_not_null_btree());
220         buffer.append("; float_not_null_hash: ");
221         buffer.append(instance.getFloat_not_null_hash());
222         buffer.append("; float_not_null_none: ");
223         buffer.append(instance.getFloat_not_null_none());
224         buffer.append("; float_null_both: ");
225         buffer.append(instance.getFloat_null_both().toString());
226         buffer.append("; float_null_btree: ");
227         buffer.append(instance.getFloat_null_btree().toString());
228         buffer.append("; float_null_hash: ");
229         buffer.append(instance.getFloat_null_hash().toString());
230         buffer.append("; float_null_none: ");
231         buffer.append(instance.getFloat_null_none().toString());
232         return buffer.toString();
233     }
234 }
235