Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import java.io.InputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URL;
import java.sql.Array;
import java.sql.Blob;
Expand Down Expand Up @@ -247,6 +248,11 @@ public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException
this.bindVariables.put(Constants.LITERAL_V + parameterIndex, x);
}

public void setBigInteger(int parameterIndex, BigInteger x) throws SQLException {
checkOpen();
this.bindVariables.put(Constants.LITERAL_V + parameterIndex, x);
}

public void setString(int parameterIndex, String x) throws SQLException {
checkOpen();
this.bindVariables.put(Constants.LITERAL_V + parameterIndex, x);
Expand Down Expand Up @@ -322,6 +328,8 @@ public void setObject(int parameterIndex, Object x) throws SQLException {
setTimestamp(parameterIndex, (Timestamp) x);
} else if (x instanceof BigDecimal) {
setBigDecimal(parameterIndex, (BigDecimal) x);
} else if (x instanceof BigInteger) {
setBigInteger(parameterIndex, (BigInteger) x);
} else if (x instanceof byte[]) {
setBytes(parameterIndex, (byte[]) x);
} else if (getConnection().getTreatUtilDateAsTimestamp() && x instanceof java.util.Date) {
Expand Down Expand Up @@ -890,8 +898,7 @@ private void setNumericObject(int parameterIndex, Object parameterObj, int targe
}
setBigDecimal(parameterIndex, scaledBigDecimal);
} else if (numberParam instanceof java.math.BigInteger) {
setBigDecimal(parameterIndex,
new java.math.BigDecimal((java.math.BigInteger) numberParam, scale));
setBigInteger(parameterIndex, (BigInteger) numberParam);
} else {
setBigDecimal(parameterIndex,
new java.math.BigDecimal(numberParam.doubleValue()));
Expand Down
33 changes: 31 additions & 2 deletions java/jdbc/src/main/java/io/vitess/jdbc/VitessResultSet.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,12 @@

package io.vitess.jdbc;

import com.google.common.annotations.VisibleForTesting;
import com.google.protobuf.ByteString;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URL;
import java.sql.Array;
import java.sql.Blob;
Expand All @@ -46,8 +45,12 @@
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;

import javax.sql.rowset.serial.SerialClob;

import com.google.common.annotations.VisibleForTesting;
import com.google.protobuf.ByteString;

import io.vitess.client.cursor.Cursor;
import io.vitess.client.cursor.Row;
import io.vitess.client.cursor.SimpleCursor;
Expand Down Expand Up @@ -428,6 +431,27 @@ public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException
return value;
}

public BigInteger getBigInteger(int columnIndex) throws SQLException {
String bigIntegerString;
BigInteger value;

preAccessor(columnIndex);

if (isNull(columnIndex)) {
return null;
}

bigIntegerString = this.getString(columnIndex);

try {
value = new BigInteger(bigIntegerString);
} catch (Exception ex) {
throw new SQLException(ex);
}

return value;
}

public byte[] getBytes(int columnIndex) throws SQLException {
String bytesString;
byte[] value;
Expand Down Expand Up @@ -528,6 +552,11 @@ public BigDecimal getBigDecimal(String columnLabel, int scale) throws SQLExcepti
return getBigDecimal(columnIndex, scale);
}

public BigInteger getBigInteger(String columnLabel) throws SQLException {
int columnIndex = this.findColumn(columnLabel);
return getBigInteger(columnIndex);
}

public byte[] getBytes(String columnLabel) throws SQLException {
int columnIndex = this.findColumn(columnLabel);
return getBytes(columnIndex);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@

package io.vitess.jdbc;

import com.google.common.collect.ImmutableMap;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.BatchUpdateException;
import java.sql.Date;
import java.sql.ResultSet;
Expand All @@ -32,7 +32,9 @@
import java.util.List;
import java.util.Map;
import java.util.TimeZone;

import javax.sql.rowset.serial.SerialClob;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand All @@ -42,6 +44,8 @@
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import com.google.common.collect.ImmutableMap;

import io.vitess.client.Context;
import io.vitess.client.SQLFuture;
import io.vitess.client.VTGateConnection;
Expand Down Expand Up @@ -456,6 +460,7 @@ private void testExecute(int fetchSize, boolean simpleExecute, boolean shouldRun
Double doubleValue = Double.MAX_VALUE;
BigDecimal bigDecimalValue = new BigDecimal(3.14159265358979323846);
BigDecimal expectedDecimalValue = new BigDecimal("3.14159");
BigInteger bigIntegerValue = new BigInteger("18446744073709551615");
String stringValue = "vitess";
byte[] bytesValue = stringValue.getBytes();
Date dateValue = new Date(0);
Expand All @@ -473,41 +478,43 @@ private void testExecute(int fetchSize, boolean simpleExecute, boolean shouldRun
preparedStatement.setFloat(7, floatValue);
preparedStatement.setDouble(8, doubleValue);
preparedStatement.setBigDecimal(9, bigDecimalValue);
preparedStatement.setString(10, stringValue);
preparedStatement.setBytes(11, bytesValue);
preparedStatement.setDate(12, dateValue);
preparedStatement.setTime(13, timeValue);
preparedStatement.setTimestamp(14, timestampValue);
preparedStatement.setDate(15, dateValue, Calendar.getInstance(TimeZone.getDefault()));
preparedStatement.setTime(16, timeValue, Calendar.getInstance(TimeZone.getDefault()));
preparedStatement.setBigInteger(10, bigIntegerValue);
preparedStatement.setString(11, stringValue);
preparedStatement.setBytes(12, bytesValue);
preparedStatement.setDate(13, dateValue);
preparedStatement.setTime(14, timeValue);
preparedStatement.setTimestamp(15, timestampValue);
preparedStatement.setDate(16, dateValue, Calendar.getInstance(TimeZone.getDefault()));
preparedStatement.setTime(17, timeValue, Calendar.getInstance(TimeZone.getDefault()));
preparedStatement
.setTimestamp(17, timestampValue, Calendar.getInstance(TimeZone.getDefault()));
preparedStatement.setObject(18, boolValue);
preparedStatement.setObject(19, byteValue);
preparedStatement.setObject(20, shortValue);
preparedStatement.setObject(21, intValue);
preparedStatement.setObject(22, longValue);
preparedStatement.setObject(23, floatValue);
preparedStatement.setObject(24, doubleValue);
preparedStatement.setObject(25, bigDecimalValue);
preparedStatement.setObject(26, stringValue);
preparedStatement.setObject(27, dateValue);
preparedStatement.setObject(28, timeValue);
preparedStatement.setObject(29, timestampValue);
preparedStatement.setObject(30, 'a');
preparedStatement.setObject(31, null);
preparedStatement.setObject(32, boolValue, Types.BOOLEAN, 0);
preparedStatement.setObject(33, shortValue, Types.SMALLINT, 0);
preparedStatement.setObject(34, longValue, Types.BIGINT, 0);
preparedStatement.setObject(35, floatValue, Types.DOUBLE, 2);
preparedStatement.setObject(36, doubleValue, Types.DOUBLE, 3);
preparedStatement.setObject(37, bigDecimalValue, Types.DECIMAL, 5);
preparedStatement.setObject(38, stringValue, Types.VARCHAR, 0);
preparedStatement.setObject(39, dateValue, Types.DATE, 0);
preparedStatement.setObject(40, timeValue, Types.TIME, 0);
preparedStatement.setObject(41, timestampValue, Types.TIMESTAMP, 0);
preparedStatement.setClob(42, new SerialClob("clob".toCharArray()));
preparedStatement.setObject(43, bytesValue);
.setTimestamp(18, timestampValue, Calendar.getInstance(TimeZone.getDefault()));
preparedStatement.setObject(19, boolValue);
preparedStatement.setObject(20, byteValue);
preparedStatement.setObject(21, shortValue);
preparedStatement.setObject(22, intValue);
preparedStatement.setObject(23, longValue);
preparedStatement.setObject(24, floatValue);
preparedStatement.setObject(25, doubleValue);
preparedStatement.setObject(26, bigDecimalValue);
preparedStatement.setObject(27, bigIntegerValue);
preparedStatement.setObject(28, stringValue);
preparedStatement.setObject(29, dateValue);
preparedStatement.setObject(30, timeValue);
preparedStatement.setObject(31, timestampValue);
preparedStatement.setObject(32, 'a');
preparedStatement.setObject(33, null);
preparedStatement.setObject(34, boolValue, Types.BOOLEAN, 0);
preparedStatement.setObject(35, shortValue, Types.SMALLINT, 0);
preparedStatement.setObject(36, longValue, Types.BIGINT, 0);
preparedStatement.setObject(37, floatValue, Types.DOUBLE, 2);
preparedStatement.setObject(38, doubleValue, Types.DOUBLE, 3);
preparedStatement.setObject(39, bigDecimalValue, Types.DECIMAL, 5);
preparedStatement.setObject(40, stringValue, Types.VARCHAR, 0);
preparedStatement.setObject(41, dateValue, Types.DATE, 0);
preparedStatement.setObject(42, timeValue, Types.TIME, 0);
preparedStatement.setObject(43, timestampValue, Types.TIMESTAMP, 0);
preparedStatement.setClob(44, new SerialClob("clob".toCharArray()));
preparedStatement.setObject(45, bytesValue);
Field bindVariablesMap = preparedStatement.getClass().getDeclaredField("bindVariables");
bindVariablesMap.setAccessible(true);
Map<String, Object> bindVariables =
Expand All @@ -521,40 +528,42 @@ private void testExecute(int fetchSize, boolean simpleExecute, boolean shouldRun
Assert.assertEquals(floatValue, bindVariables.get("v7"));
Assert.assertEquals(doubleValue, bindVariables.get("v8"));
Assert.assertEquals(bigDecimalValue, bindVariables.get("v9"));
Assert.assertEquals(stringValue, bindVariables.get("v10"));
Assert.assertEquals(bytesValue, bindVariables.get("v11"));
Assert.assertEquals(dateValue.toString(), bindVariables.get("v12"));
Assert.assertEquals(timeValue.toString(), bindVariables.get("v13"));
Assert.assertEquals(timestampValue.toString(), bindVariables.get("v14"));
Assert.assertEquals(dateValue.toString(), bindVariables.get("v15"));
Assert.assertEquals(timeValue.toString(), bindVariables.get("v16"));
Assert.assertEquals(timestampValue.toString(), bindVariables.get("v17"));
Assert.assertEquals(boolValue, bindVariables.get("v18"));
Assert.assertEquals(byteValue, bindVariables.get("v19"));
Assert.assertEquals(shortValue, bindVariables.get("v20"));
Assert.assertEquals(intValue, bindVariables.get("v21"));
Assert.assertEquals(longValue, bindVariables.get("v22"));
Assert.assertEquals(floatValue, bindVariables.get("v23"));
Assert.assertEquals(doubleValue, bindVariables.get("v24"));
Assert.assertEquals(bigDecimalValue, bindVariables.get("v25"));
Assert.assertEquals(stringValue, bindVariables.get("v26"));
Assert.assertEquals(dateValue.toString(), bindVariables.get("v27"));
Assert.assertEquals(timeValue.toString(), bindVariables.get("v28"));
Assert.assertEquals(timestampValue.toString(), bindVariables.get("v29"));
Assert.assertEquals("a", bindVariables.get("v30"));
Assert.assertEquals(null, bindVariables.get("v31"));
Assert.assertEquals(boolValue, bindVariables.get("v32"));
Assert.assertEquals(shortValue.intValue(), bindVariables.get("v33"));
Assert.assertEquals(longValue, bindVariables.get("v34"));
Assert.assertEquals((double) floatValue, (double) bindVariables.get("v35"), 0.1);
Assert.assertEquals(doubleValue, (double) bindVariables.get("v36"), 0.1);
Assert.assertEquals(expectedDecimalValue, bindVariables.get("v37"));
Assert.assertEquals(stringValue, bindVariables.get("v38"));
Assert.assertEquals(dateValue.toString(), bindVariables.get("v39"));
Assert.assertEquals(timeValue.toString(), bindVariables.get("v40"));
Assert.assertEquals(timestampValue.toString(), bindVariables.get("v41"));
Assert.assertEquals("clob", bindVariables.get("v42"));
Assert.assertArrayEquals(bytesValue, (byte[])bindVariables.get("v43"));
Assert.assertEquals(bigIntegerValue, bindVariables.get("v10"));
Assert.assertEquals(stringValue, bindVariables.get("v11"));
Assert.assertEquals(bytesValue, bindVariables.get("v12"));
Assert.assertEquals(dateValue.toString(), bindVariables.get("v13"));
Assert.assertEquals(timeValue.toString(), bindVariables.get("v14"));
Assert.assertEquals(timestampValue.toString(), bindVariables.get("v15"));
Assert.assertEquals(dateValue.toString(), bindVariables.get("v16"));
Assert.assertEquals(timeValue.toString(), bindVariables.get("v17"));
Assert.assertEquals(timestampValue.toString(), bindVariables.get("v18"));
Assert.assertEquals(boolValue, bindVariables.get("v19"));
Assert.assertEquals(byteValue, bindVariables.get("v20"));
Assert.assertEquals(shortValue, bindVariables.get("v21"));
Assert.assertEquals(intValue, bindVariables.get("v22"));
Assert.assertEquals(longValue, bindVariables.get("v23"));
Assert.assertEquals(floatValue, bindVariables.get("v24"));
Assert.assertEquals(doubleValue, bindVariables.get("v25"));
Assert.assertEquals(bigDecimalValue, bindVariables.get("v26"));
Assert.assertEquals(bigIntegerValue, bindVariables.get("v27"));
Assert.assertEquals(stringValue, bindVariables.get("v28"));
Assert.assertEquals(dateValue.toString(), bindVariables.get("v29"));
Assert.assertEquals(timeValue.toString(), bindVariables.get("v30"));
Assert.assertEquals(timestampValue.toString(), bindVariables.get("v31"));
Assert.assertEquals("a", bindVariables.get("v32"));
Assert.assertEquals(null, bindVariables.get("v33"));
Assert.assertEquals(boolValue, bindVariables.get("v34"));
Assert.assertEquals(shortValue.intValue(), bindVariables.get("v35"));
Assert.assertEquals(longValue, bindVariables.get("v36"));
Assert.assertEquals((double) floatValue, (double) bindVariables.get("v37"), 0.1);
Assert.assertEquals(doubleValue, (double) bindVariables.get("v38"), 0.1);
Assert.assertEquals(expectedDecimalValue, bindVariables.get("v39"));
Assert.assertEquals(stringValue, bindVariables.get("v40"));
Assert.assertEquals(dateValue.toString(), bindVariables.get("v41"));
Assert.assertEquals(timeValue.toString(), bindVariables.get("v42"));
Assert.assertEquals(timestampValue.toString(), bindVariables.get("v43"));
Assert.assertEquals("clob", bindVariables.get("v44"));
Assert.assertArrayEquals(bytesValue, (byte[])bindVariables.get("v45"));

preparedStatement.clearParameters();
}
Expand Down
20 changes: 19 additions & 1 deletion java/jdbc/src/test/java/io/vitess/jdbc/VitessResultSetTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

package io.vitess.jdbc;

import com.google.protobuf.ByteString;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
Expand All @@ -27,6 +26,7 @@
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Properties;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand All @@ -36,6 +36,8 @@
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import com.google.protobuf.ByteString;

import io.vitess.client.cursor.Cursor;
import io.vitess.client.cursor.SimpleCursor;
import io.vitess.proto.Query;
Expand Down Expand Up @@ -266,6 +268,14 @@ public Cursor getCursorWithRowsAsNull() {
Assert.assertEquals(new BigInteger("1000"), vitessResultSet.getObject(10));
}

@Test public void getBigInteger() throws SQLException {
Cursor cursor = getCursorWithRowsAsNull();
VitessResultSet vitessResultSet = new VitessResultSet(cursor, getVitessStatement());
vitessResultSet.next();

Assert.assertEquals(new BigInteger("1000"), vitessResultSet.getBigInteger(10));
}

@Test public void testgetBoolean() throws SQLException {
Cursor cursor = getCursorWithRows();
Cursor cursorWithRowsAsNull = getCursorWithRowsAsNull();
Expand Down Expand Up @@ -448,6 +458,14 @@ public Cursor getCursorWithRowsAsNull() {
Assert.assertEquals(-1000, vitessResultSet.getInt("col9"));
}

@Test public void testBigIntegerbyColumnLabel() throws SQLException {
Cursor cursor = getCursorWithRows();
VitessResultSet vitessResultSet = new VitessResultSet(cursor, getVitessStatement());
vitessResultSet.next();
Assert.assertEquals(new BigInteger("1000"),
vitessResultSet.getBigInteger("col10"));
}

@Test public void testgetFloatbyColumnLabel() throws SQLException {
Cursor cursor = getCursorWithRows();
VitessResultSet vitessResultSet = new VitessResultSet(cursor, getVitessStatement());
Expand Down