2 Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; version 2 of the License.
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
13 You should have received a copy of the GNU General Public License
14 along with this program; if not, write to the Free Software
15 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 package testsuite.clusterj;
20 import testsuite.clusterj.model.DoubleTypes;
21 import testsuite.clusterj.model.IdBase;
23 public class QueryDoubleTypesTest extends AbstractQueryTest {
26 public Class getInstanceType() {
27 return DoubleTypes.class;
31 void createInstances(int number) {
32 createAllDoubleTypesInstances(number);
35 /** Test all single- and double-predicate queries using DoubleTypes.
36 drop table if exists doubletypes;
37 create table doubletypes (
38 id int not null primary key,
40 double_null_hash double(10,5),
41 double_null_btree double(10,5),
42 double_null_both double(10,5),
43 double_null_none double(10,5)
45 ) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
47 create unique index idx_double_null_hash using hash on doubletypes(double_null_hash);
48 create index idx_double_null_btree on doubletypes(double_null_btree);
49 create unique index idx_double_null_both on doubletypes(double_null_both);
53 /** Double types allow hash indexes to be defined but ndb-bindings
54 * do not allow an equal lookup, so they are not used.
55 * If hash indexes are supported in future, uncomment the test case methods.
58 btreeIndexScanDouble();
59 hashIndexScanDouble();
60 bothIndexScanDouble();
61 noneIndexScanDouble();
65 public void btreeIndexScanDouble() {
66 equalQuery("double_not_null_btree", "idx_double_not_null_btree", getDouble(8), 8);
67 greaterEqualQuery("double_not_null_btree", "idx_double_not_null_btree", getDouble(7), 7, 8, 9);
68 greaterThanQuery("double_not_null_btree", "idx_double_not_null_btree", getDouble(6), 7, 8, 9);
69 lessEqualQuery("double_not_null_btree", "idx_double_not_null_btree", getDouble(4), 4, 3, 2, 1, 0);
70 lessThanQuery("double_not_null_btree", "idx_double_not_null_btree", getDouble(4), 3, 2, 1, 0);
71 betweenQuery("double_not_null_btree", "idx_double_not_null_btree", getDouble(4), getDouble(6), 4, 5, 6);
72 greaterEqualAndLessEqualQuery("double_not_null_btree", "idx_double_not_null_btree", getDouble(4), getDouble(6), 4, 5, 6);
73 greaterThanAndLessEqualQuery("double_not_null_btree", "idx_double_not_null_btree", getDouble(4), getDouble(6), 5, 6);
74 greaterEqualAndLessThanQuery("double_not_null_btree", "idx_double_not_null_btree", getDouble(4), getDouble(6), 4, 5);
75 greaterThanAndLessThanQuery("double_not_null_btree", "idx_double_not_null_btree", getDouble(4), getDouble(6), 5);
77 equalQuery("double_null_btree", "idx_double_null_btree", getDouble(8), 8);
78 greaterEqualQuery("double_null_btree", "idx_double_null_btree", getDouble(7), 7, 8, 9);
79 greaterThanQuery("double_null_btree", "idx_double_null_btree", getDouble(6), 7, 8, 9);
80 lessEqualQuery("double_null_btree", "idx_double_null_btree", getDouble(4), 4, 3, 2, 1, 0);
81 lessThanQuery("double_null_btree", "idx_double_null_btree", getDouble(4), 3, 2, 1, 0);
82 betweenQuery("double_null_btree", "idx_double_null_btree", getDouble(4), getDouble(6), 4, 5, 6);
83 greaterEqualAndLessEqualQuery("double_null_btree", "idx_double_null_btree", getDouble(4), getDouble(6), 4, 5, 6);
84 greaterThanAndLessEqualQuery("double_null_btree", "idx_double_null_btree", getDouble(4), getDouble(6), 5, 6);
85 greaterEqualAndLessThanQuery("double_null_btree", "idx_double_null_btree", getDouble(4), getDouble(6), 4, 5);
86 greaterThanAndLessThanQuery("double_null_btree", "idx_double_null_btree", getDouble(4), getDouble(6), 5);
89 public void hashIndexScanDouble() {
90 equalQuery("double_not_null_hash", "idx_double_not_null_hash", getDouble(8), 8);
91 greaterEqualQuery("double_not_null_hash", "none", getDouble(7), 7, 8, 9);
92 greaterThanQuery("double_not_null_hash", "none", getDouble(6), 7, 8, 9);
93 lessEqualQuery("double_not_null_hash", "none", getDouble(4), 4, 3, 2, 1, 0);
94 lessThanQuery("double_not_null_hash", "none", getDouble(4), 3, 2, 1, 0);
95 betweenQuery("double_not_null_hash", "none", getDouble(4), getDouble(6), 4, 5, 6);
96 greaterEqualAndLessEqualQuery("double_not_null_hash", "none", getDouble(4), getDouble(6), 4, 5, 6);
97 greaterThanAndLessEqualQuery("double_not_null_hash", "none", getDouble(4), getDouble(6), 5, 6);
98 greaterEqualAndLessThanQuery("double_not_null_hash", "none", getDouble(4), getDouble(6), 4, 5);
99 greaterThanAndLessThanQuery("double_not_null_hash", "none", getDouble(4), getDouble(6), 5);
101 equalQuery("double_null_hash", "idx_double_null_hash", getDouble(8), 8);
102 greaterEqualQuery("double_null_hash", "none", getDouble(7), 7, 8, 9);
103 greaterThanQuery("double_null_hash", "none", getDouble(6), 7, 8, 9);
104 lessEqualQuery("double_null_hash", "none", getDouble(4), 4, 3, 2, 1, 0);
105 lessThanQuery("double_null_hash", "none", getDouble(4), 3, 2, 1, 0);
106 betweenQuery("double_null_hash", "none", getDouble(4), getDouble(6), 4, 5, 6);
107 greaterEqualAndLessEqualQuery("double_null_hash", "none", getDouble(4), getDouble(6), 4, 5, 6);
108 greaterThanAndLessEqualQuery("double_null_hash", "none", getDouble(4), getDouble(6), 5, 6);
109 greaterEqualAndLessThanQuery("double_null_hash", "none", getDouble(4), getDouble(6), 4, 5);
110 greaterThanAndLessThanQuery("double_null_hash", "none", getDouble(4), getDouble(6), 5);
114 public void bothIndexScanDouble() {
115 equalQuery("double_not_null_both", "idx_double_not_null_both", getDouble(8), 8);
116 greaterEqualQuery("double_not_null_both", "idx_double_not_null_both", getDouble(7), 7, 8, 9);
117 greaterThanQuery("double_not_null_both", "idx_double_not_null_both", getDouble(6), 7, 8, 9);
118 lessEqualQuery("double_not_null_both", "idx_double_not_null_both", getDouble(4), 4, 3, 2, 1, 0);
119 lessThanQuery("double_not_null_both", "idx_double_not_null_both", getDouble(4), 3, 2, 1, 0);
120 betweenQuery("double_not_null_both", "idx_double_not_null_both", getDouble(4), getDouble(6), 4, 5, 6);
121 greaterEqualAndLessEqualQuery("double_not_null_both", "idx_double_not_null_both", getDouble(4), getDouble(6), 4, 5, 6);
122 greaterThanAndLessEqualQuery("double_not_null_both", "idx_double_not_null_both", getDouble(4), getDouble(6), 5, 6);
123 greaterEqualAndLessThanQuery("double_not_null_both", "idx_double_not_null_both", getDouble(4), getDouble(6), 4, 5);
124 greaterThanAndLessThanQuery("double_not_null_both", "idx_double_not_null_both", getDouble(4), getDouble(6), 5);
126 equalQuery("double_null_both", "idx_double_null_both", getDouble(8), 8);
127 greaterEqualQuery("double_null_both", "idx_double_null_both", getDouble(7), 7, 8, 9);
128 greaterThanQuery("double_null_both", "idx_double_null_both", getDouble(6), 7, 8, 9);
129 lessEqualQuery("double_null_both", "idx_double_null_both", getDouble(4), 4, 3, 2, 1, 0);
130 lessThanQuery("double_null_both", "idx_double_null_both", getDouble(4), 3, 2, 1, 0);
131 betweenQuery("double_null_both", "idx_double_null_both", getDouble(4), getDouble(6), 4, 5, 6);
132 greaterEqualAndLessEqualQuery("double_null_both", "idx_double_null_both", getDouble(4), getDouble(6), 4, 5, 6);
133 greaterThanAndLessEqualQuery("double_null_both", "idx_double_null_both", getDouble(4), getDouble(6), 5, 6);
134 greaterEqualAndLessThanQuery("double_null_both", "idx_double_null_both", getDouble(4), getDouble(6), 4, 5);
135 greaterThanAndLessThanQuery("double_null_both", "idx_double_null_both", getDouble(4), getDouble(6), 5);
139 public void noneIndexScanDouble() {
140 equalQuery("double_not_null_none", "none", getDouble(8), 8);
141 greaterEqualQuery("double_not_null_none", "none", getDouble(7), 7, 8, 9);
142 greaterThanQuery("double_not_null_none", "none", getDouble(6), 7, 8, 9);
143 lessEqualQuery("double_not_null_none", "none", getDouble(4), 4, 3, 2, 1, 0);
144 lessThanQuery("double_not_null_none", "none", getDouble(4), 3, 2, 1, 0);
145 betweenQuery("double_not_null_none", "none", getDouble(4), getDouble(6), 4, 5, 6);
146 greaterEqualAndLessEqualQuery("double_not_null_none", "none", getDouble(4), getDouble(6), 4, 5, 6);
147 greaterThanAndLessEqualQuery("double_not_null_none", "none", getDouble(4), getDouble(6), 5, 6);
148 greaterEqualAndLessThanQuery("double_not_null_none", "none", getDouble(4), getDouble(6), 4, 5);
149 greaterThanAndLessThanQuery("double_not_null_none", "none", getDouble(4), getDouble(6), 5);
151 equalQuery("double_null_none", "none", getDouble(8), 8);
152 greaterEqualQuery("double_null_none", "none", getDouble(7), 7, 8, 9);
153 greaterThanQuery("double_null_none", "none", getDouble(6), 7, 8, 9);
154 lessEqualQuery("double_null_none", "none", getDouble(4), 4, 3, 2, 1, 0);
155 lessThanQuery("double_null_none", "none", getDouble(4), 3, 2, 1, 0);
156 betweenQuery("double_null_none", "none", getDouble(4), getDouble(6), 4, 5, 6);
157 greaterEqualAndLessEqualQuery("double_null_none", "none", getDouble(4), getDouble(6), 4, 5, 6);
158 greaterThanAndLessEqualQuery("double_null_none", "none", getDouble(4), getDouble(6), 5, 6);
159 greaterEqualAndLessThanQuery("double_null_none", "none", getDouble(4), getDouble(6), 4, 5);
160 greaterThanAndLessThanQuery("double_null_none", "none", getDouble(4), getDouble(6), 5);
164 private void createAllDoubleTypesInstances(int number) {
165 for (int i = 0; i < number; ++i) {
166 DoubleTypes instance = session.newInstance(DoubleTypes.class);
168 instance.setDouble_not_null_hash(getDouble(i));
169 instance.setDouble_not_null_btree(getDouble(i));
170 instance.setDouble_not_null_both(getDouble(i));
171 instance.setDouble_not_null_none(getDouble(i));
172 instance.setDouble_null_hash(getDouble(i));
173 instance.setDouble_null_btree(getDouble(i));
174 instance.setDouble_null_both(getDouble(i));
175 instance.setDouble_null_none(getDouble(i));
176 instances.add(instance);
180 protected Double getDouble(int number) {
181 return Double.valueOf(0.00001D * number);
184 /** Print the results of a query for debugging.
186 * @param instance the instance to print
189 protected void printResultInstance(IdBase instance) {
190 if (instance instanceof DoubleTypes) {
191 DoubleTypes doubleType = (DoubleTypes)instance;
192 // System.out.println(toString(doubleType));
196 public static String toString(IdBase idBase) {
197 DoubleTypes instance = (DoubleTypes)idBase;
198 StringBuffer buffer = new StringBuffer("DoubleTypes id: ");
199 buffer.append(instance.getId());
200 buffer.append("; double_not_null_both: ");
201 buffer.append(instance.getDouble_not_null_both());
202 buffer.append("; double_not_null_btree: ");
203 buffer.append(instance.getDouble_not_null_btree());
204 buffer.append("; double_not_null_hash: ");
205 buffer.append(instance.getDouble_not_null_hash());
206 buffer.append("; double_not_null_none: ");
207 buffer.append(instance.getDouble_not_null_none());
208 buffer.append("; double_null_both: ");
209 buffer.append(instance.getDouble_null_both().toString());
210 buffer.append("; double_null_btree: ");
211 buffer.append(instance.getDouble_null_btree().toString());
212 buffer.append("; double_null_hash: ");
213 buffer.append(instance.getDouble_null_hash().toString());
214 buffer.append("; double_null_none: ");
215 buffer.append(instance.getDouble_null_none().toString());
216 return buffer.toString();