18 package com.mysql.clusterj.tie;
20 import java.math.BigDecimal;
21 import java.math.BigInteger;
22 import java.nio.ByteBuffer;
23 import java.util.Arrays;
25 import com.mysql.ndbjtie.ndbapi.NdbScanFilter;
27 import com.mysql.clusterj.ClusterJFatalInternalException;
29 import com.mysql.clusterj.core.store.Column;
30 import com.mysql.clusterj.core.store.ScanFilter;
31 import com.mysql.clusterj.core.util.I18NHelper;
32 import com.mysql.clusterj.core.util.Logger;
33 import com.mysql.clusterj.core.util.LoggerFactoryService;
41 static final I18NHelper local = I18NHelper
42 .getInstance(ScanFilterImpl.class);
45 static final Logger logger = LoggerFactoryService.getFactory()
46 .getInstance(ScanFilterImpl.class);
51 this.ndbScanFilter = ndbScanFilter;
56 handleError(returnCode, ndbScanFilter);
59 public void begin(Group
group) {
60 int returnCode = ndbScanFilter.begin(convertGroup(group));
61 handleError(returnCode, ndbScanFilter);
64 public void cmpBigInteger(BinaryCondition condition, Column storeColumn, BigInteger value) {
65 ByteBuffer buffer = Utility.convertValue(storeColumn, value);
66 int returnCode = ndbScanFilter.cmp(convertCondition(condition),
67 storeColumn.getColumnId(), buffer, buffer.capacity());
68 handleError(returnCode, ndbScanFilter);
71 public void cmpBoolean(BinaryCondition condition, Column storeColumn,
boolean value) {
72 byte byteValue = (value?(byte)0x01:(byte)0x00);
73 cmpByte(condition, storeColumn, byteValue);
76 public void cmpByte(BinaryCondition condition, Column storeColumn, byte value) {
77 ByteBuffer buffer = Utility.convertValue(storeColumn, value);
78 int returnCode = ndbScanFilter.cmp(convertCondition(condition),
79 storeColumn.getColumnId(), buffer, buffer.capacity());
80 handleError(returnCode, ndbScanFilter);
83 public void cmpBytes(BinaryCondition condition, Column storeColumn, byte[] value) {
85 if (condition == BinaryCondition.COND_LIKE) {
86 buffer = Utility.convertValueForLikeFilter(storeColumn, value);
88 buffer = Utility.convertValue(storeColumn, value);
90 int returnCode = ndbScanFilter.cmp(convertCondition(condition),
91 storeColumn.getColumnId(), buffer, buffer.capacity());
92 handleError(returnCode, ndbScanFilter);
95 public void cmpDecimal(BinaryCondition condition, Column storeColumn, BigDecimal value) {
96 ByteBuffer buffer = Utility.convertValue(storeColumn, value);
97 int returnCode = ndbScanFilter.cmp(convertCondition(condition),
98 storeColumn.getColumnId(), buffer, buffer.capacity());
99 handleError(returnCode, ndbScanFilter);
102 public void cmpDouble(BinaryCondition condition, Column storeColumn,
double value) {
103 ByteBuffer buffer = Utility.convertValue(storeColumn, value);
104 int returnCode = ndbScanFilter.cmp(convertCondition(condition),
105 storeColumn.getColumnId(), buffer, buffer.capacity());
106 handleError(returnCode, ndbScanFilter);
109 public void cmpFloat(BinaryCondition condition, Column storeColumn,
float value) {
110 ByteBuffer buffer = Utility.convertValue(storeColumn, value);
111 int returnCode = ndbScanFilter.cmp(convertCondition(condition),
112 storeColumn.getColumnId(), buffer, buffer.capacity());
113 handleError(returnCode, ndbScanFilter);
116 public void cmpShort(BinaryCondition condition, Column storeColumn,
short value) {
117 ByteBuffer buffer = Utility.convertValue(storeColumn, value);
118 int returnCode = ndbScanFilter.cmp(convertCondition(condition),
119 storeColumn.getColumnId(), buffer, buffer.capacity());
120 handleError(returnCode, ndbScanFilter);
123 public void cmpInt(BinaryCondition condition, Column storeColumn,
int value) {
124 ByteBuffer buffer = Utility.convertValue(storeColumn, value);
125 int returnCode = ndbScanFilter.cmp(convertCondition(condition),
126 storeColumn.getColumnId(), buffer, buffer.capacity());
127 handleError(returnCode, ndbScanFilter);
130 public void cmpLong(BinaryCondition condition, Column storeColumn,
long value) {
131 ByteBuffer buffer = Utility.convertValue(storeColumn, value);
132 if (logger.isDetailEnabled()) {
133 int bufferLength = buffer.limit() - buffer.position();
134 byte[] array =
new byte[bufferLength];
137 logger.detail(
"column: " + storeColumn.getName() +
" condition: " + condition.toString() +
" value: " + value + Arrays.toString(array) +
"(" + buffer.capacity() +
")");
139 int returnCode = ndbScanFilter.cmp(convertCondition(condition),
140 storeColumn.getColumnId(), buffer, buffer.capacity());
141 handleError(returnCode, ndbScanFilter);
144 public void cmpString(BinaryCondition condition, Column storeColumn,
String value) {
145 if (logger.isDebugEnabled())
146 logger.debug(storeColumn.getName() +
" " + condition +
" " + value);
148 if (condition == BinaryCondition.COND_LIKE) {
149 buffer = Utility.convertValueForLikeFilter(storeColumn, value);
151 buffer = Utility.convertValue(storeColumn, value);
153 int returnCode = ndbScanFilter.cmp(convertCondition(condition),
154 storeColumn.getColumnId(), buffer, buffer.limit());
155 handleError(returnCode, ndbScanFilter);
158 public void isNull(Column storeColumn) {
159 int returnCode = ndbScanFilter.isnull(storeColumn.getColumnId());
160 handleError(returnCode, ndbScanFilter);
164 int returnCode = ndbScanFilter.end();
165 handleError(returnCode, ndbScanFilter);
168 private int convertCondition(BinaryCondition condition) {
183 throw new ClusterJFatalInternalException(
184 local.message(
"ERR_Implementation_Should_Not_Occur"));
188 private int convertGroup(Group group) {
197 throw new ClusterJFatalInternalException(
198 local.message(
"ERR_Implementation_Should_Not_Occur"));
202 protected static void handleError(
int returnCode,
NdbScanFilter ndbScanFilter) {
203 if (returnCode == 0) {
206 Utility.throwError(returnCode, ndbScanFilter.
getNdbError());
210 protected static void handleError(Object
object,
NdbScanFilter ndbScanFilter) {
211 if (
object != null) {
214 Utility.throwError(null, ndbScanFilter.
getNdbError());
218 public void delete() {