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