diff --git a/java/jdbc/pom.xml b/java/jdbc/pom.xml
index dd554e64501..a52048576a1 100644
--- a/java/jdbc/pom.xml
+++ b/java/jdbc/pom.xml
@@ -57,25 +57,6 @@
3.12.4
test
-
-
- org.powermock
- powermock-api-mockito2
- 2.0.9
- test
-
-
- org.powermock
- powermock-core
- 2.0.9
- test
-
-
- org.powermock
- powermock-module-junit4
- 2.0.9
- test
-
diff --git a/java/jdbc/src/test/java/io/vitess/jdbc/FieldWithMetadataTest.java b/java/jdbc/src/test/java/io/vitess/jdbc/FieldWithMetadataTest.java
deleted file mode 100644
index 318bf44d328..00000000000
--- a/java/jdbc/src/test/java/io/vitess/jdbc/FieldWithMetadataTest.java
+++ /dev/null
@@ -1,637 +0,0 @@
-/*
- * Copyright 2019 The Vitess Authors.
-
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://www.apache.org/licenses/LICENSE-2.0
-
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.vitess.jdbc;
-
-import java.util.Set;
-import java.util.EnumSet;
-
-import io.vitess.proto.Query;
-import io.vitess.util.MysqlDefs;
-import io.vitess.util.charset.CharsetMapping;
-
-import java.sql.SQLException;
-import java.sql.Types;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.mockito.internal.verification.VerificationModeFactory;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-@PrepareForTest(FieldWithMetadata.class)
-@RunWith(PowerMockRunner.class)
-public class FieldWithMetadataTest extends BaseTest {
-
- @Test
- public void testImplicitTempTable() throws SQLException {
- Query.Field raw = Query.Field.newBuilder().setTable("#sql_my_temptable")
- .setCharset(CharsetMapping.MYSQL_COLLATION_INDEX_binary)
- .setFlags(Query.MySqlFlag.BINARY_FLAG_VALUE).setType(Query.Type.VARCHAR).setName("foo")
- .build();
-
- FieldWithMetadata fieldWithMetadata = new FieldWithMetadata(getVitessConnection(), raw);
-
- Assert.assertEquals(true, fieldWithMetadata.isImplicitTemporaryTable());
- Assert.assertEquals(false, fieldWithMetadata.isOpaqueBinary());
-
- VitessConnection conn = getVitessConnection();
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
-
- raw = Query.Field.newBuilder().setType(Query.Type.VARCHAR).setName("foo").build();
-
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
-
- Assert.assertEquals(false, fieldWithMetadata.isImplicitTemporaryTable());
- Assert.assertEquals(false, fieldWithMetadata.isOpaqueBinary());
- }
-
- @Test
- public void testBlobRemapping() throws SQLException {
- VitessConnection conn = getVitessConnection();
- conn.setBlobsAreStrings(true);
-
- Query.Field raw = Query.Field.newBuilder().setTable("#sql_my_temptable")
- .setCharset(/* latin1, doesn't matter just don't want utf8 for now */ 5)
- .setFlags(Query.MySqlFlag.BINARY_FLAG_VALUE).setType(Query.Type.BLOB).setName("foo")
- .setOrgName("foo").build();
-
- FieldWithMetadata fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.VARCHAR, fieldWithMetadata.getJavaType());
-
- conn.setBlobsAreStrings(false);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.LONGVARCHAR, fieldWithMetadata.getJavaType());
-
- conn.setFunctionsNeverReturnBlobs(true);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.VARCHAR, fieldWithMetadata.getJavaType());
-
- conn.setFunctionsNeverReturnBlobs(false);
- conn.setUseBlobToStoreUTF8OutsideBMP(true);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.LONGVARCHAR, fieldWithMetadata.getJavaType());
-
- raw = raw.toBuilder().setCharset(CharsetMapping.MYSQL_COLLATION_INDEX_binary)
- .setColumnLength(MysqlDefs.LENGTH_BLOB).build();
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.VARCHAR, fieldWithMetadata.getJavaType());
- Assert.assertEquals("utf8_general_ci", fieldWithMetadata.getCollation());
-
- conn.setUtf8OutsideBmpExcludedColumnNamePattern("^fo.*$");
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.LONGVARBINARY, fieldWithMetadata.getJavaType());
- Assert.assertNotEquals("utf8_general_ci", fieldWithMetadata.getCollation());
-
- conn.setUtf8OutsideBmpIncludedColumnNamePattern("^foo$");
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.VARCHAR, fieldWithMetadata.getJavaType());
- Assert.assertEquals("utf8_general_ci", fieldWithMetadata.getCollation());
-
- raw = raw.toBuilder().setColumnLength(MysqlDefs.LENGTH_LONGBLOB).build();
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.LONGVARCHAR, fieldWithMetadata.getJavaType());
- Assert.assertEquals("utf8_general_ci", fieldWithMetadata.getCollation());
-
- conn.setUseBlobToStoreUTF8OutsideBMP(false);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.LONGVARBINARY, fieldWithMetadata.getJavaType());
-
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.BLOB, fieldWithMetadata.getJavaType());
- Assert.assertEquals(null, fieldWithMetadata.getEncoding());
- Assert.assertEquals(null, fieldWithMetadata.getCollation());
- }
-
- @Test
- public void testTinyIntAsBit() throws SQLException {
- VitessConnection conn = getVitessConnection();
-
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setColumnLength(3)
- .setType(Query.Type.INT8).setName("foo").setOrgName("foo").build();
- conn.setTinyInt1isBit(true);
- FieldWithMetadata fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.TINYINT, fieldWithMetadata.getJavaType());
-
- raw = raw.toBuilder().setColumnLength(1).build();
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.BIT, fieldWithMetadata.getJavaType());
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.TINYINT, fieldWithMetadata.getJavaType());
- }
-
- @Test
- public void testNonNumericNotDateTimeRemapping() throws SQLException {
- VitessConnection conn = getVitessConnection();
-
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setColumnLength(3)
- .setType(Query.Type.VARBINARY).setName("foo").setOrgName("foo")
- .setCharset(/* utf-16 UnicodeBig */35).build();
-
- FieldWithMetadata fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(/* remapped by TEXT special case */Types.VARCHAR,
- fieldWithMetadata.getJavaType());
- Assert.assertEquals("UTF-16", fieldWithMetadata.getEncoding());
- Assert.assertEquals(false, fieldWithMetadata.isSingleBit());
-
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.VARBINARY, fieldWithMetadata.getJavaType());
- Assert.assertEquals(null, fieldWithMetadata.getEncoding());
- Assert.assertEquals(false, fieldWithMetadata.isSingleBit());
-
- conn = getVitessConnection();
- raw = raw.toBuilder().setType(Query.Type.JSON).setColumnLength(MysqlDefs.LENGTH_LONGBLOB)
- .setCharset(CharsetMapping.MYSQL_COLLATION_INDEX_binary).build();
-
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.CHAR, fieldWithMetadata.getJavaType());
- Assert.assertEquals("UTF-8", fieldWithMetadata.getEncoding());
- Assert.assertEquals(false, fieldWithMetadata.isSingleBit());
-
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.CHAR, fieldWithMetadata.getJavaType());
- Assert.assertEquals(null, fieldWithMetadata.getEncoding());
- Assert.assertEquals(false, fieldWithMetadata.isSingleBit());
-
- conn = getVitessConnection();
- raw = raw.toBuilder().setType(Query.Type.BIT).build();
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.BIT, fieldWithMetadata.getJavaType());
- Assert.assertEquals("ISO-8859-1", fieldWithMetadata.getEncoding());
- Assert.assertEquals(false, fieldWithMetadata.isSingleBit());
- Assert.assertEquals(false, fieldWithMetadata.isBlob());
- Assert.assertEquals(false, fieldWithMetadata.isBinary());
-
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.BIT, fieldWithMetadata.getJavaType());
- Assert.assertEquals(null, fieldWithMetadata.getEncoding());
- Assert.assertEquals(false, fieldWithMetadata.isSingleBit());
- Assert.assertEquals(false, fieldWithMetadata.isBlob());
- Assert.assertEquals(false, fieldWithMetadata.isBinary());
-
- conn = getVitessConnection();
- raw = raw.toBuilder().setColumnLength(1).build();
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.BIT, fieldWithMetadata.getJavaType());
- Assert.assertEquals("ISO-8859-1", fieldWithMetadata.getEncoding());
- Assert.assertEquals(true, fieldWithMetadata.isSingleBit());
- Assert.assertEquals(false, fieldWithMetadata.isBlob());
- Assert.assertEquals(false, fieldWithMetadata.isBinary());
-
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(Types.BIT, fieldWithMetadata.getJavaType());
- Assert.assertEquals(null, fieldWithMetadata.getEncoding());
- Assert.assertEquals(false, fieldWithMetadata.isSingleBit());
- Assert.assertEquals(false, fieldWithMetadata.isBlob());
- Assert.assertEquals(false, fieldWithMetadata.isBinary());
- }
-
- @Test
- public void testVarBinaryToVarCharRemapping() throws SQLException {
- VitessConnection conn = getVitessConnection();
-
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setColumnLength(3)
- .setType(Query.Type.VARBINARY).setName("foo").setOrgName("foo")
- .setCharset(CharsetMapping.MYSQL_COLLATION_INDEX_binary)
- .setFlags(Query.MySqlFlag.BINARY_FLAG_VALUE).build();
-
- FieldWithMetadata fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert
- .assertEquals("no remapping - base case", Types.VARBINARY, fieldWithMetadata.getJavaType());
-
- raw = raw.toBuilder().setCharset(CharsetMapping.MYSQL_COLLATION_INDEX_utf8).build();
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals("remap to varchar due to non-binary encoding", Types.VARCHAR,
- fieldWithMetadata.getJavaType());
- }
-
- @Test
- public void testBinaryToCharRemapping() throws SQLException {
- VitessConnection conn = getVitessConnection();
-
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setColumnLength(3)
- .setType(Query.Type.BINARY).setName("foo").setOrgName("foo")
- .setCharset(CharsetMapping.MYSQL_COLLATION_INDEX_binary)
- .setFlags(Query.MySqlFlag.BINARY_FLAG_VALUE).build();
-
- FieldWithMetadata fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals("no remapping - base case", Types.BINARY, fieldWithMetadata.getJavaType());
-
- raw = raw.toBuilder().setCharset(CharsetMapping.MYSQL_COLLATION_INDEX_utf8).build();
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals("remap to char due to non-binary encoding", Types.CHAR,
- fieldWithMetadata.getJavaType());
- }
-
- @Test
- public void testNumericAndDateTimeEncoding() throws SQLException {
- VitessConnection conn = getVitessConnection();
-
- Query.Type[] types = new Query.Type[]{Query.Type.INT8, Query.Type.UINT8, Query.Type.INT16,
- Query.Type.UINT16, Query.Type.INT24, Query.Type.UINT24, Query.Type.INT32, Query.Type.UINT32,
- Query.Type.INT64, Query.Type.UINT64, Query.Type.DECIMAL, Query.Type.UINT24,
- Query.Type.INT32, Query.Type.UINT32, Query.Type.FLOAT32, Query.Type.FLOAT64,
- Query.Type.DATE, Query.Type.DATETIME, Query.Type.TIME, Query.Type.TIMESTAMP,
- Query.Type.YEAR};
-
- for (Query.Type type : types) {
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setColumnLength(3).setType(type)
- .setName("foo").setOrgName("foo").setCharset(/* utf-16 UnicodeBig */35).build();
-
- FieldWithMetadata fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(type.name(), "US-ASCII", fieldWithMetadata.getEncoding());
- Assert.assertEquals(type.name(), false, fieldWithMetadata.isSingleBit());
- }
-
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
-
- for (Query.Type type : types) {
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setColumnLength(3).setType(type)
- .setName("foo").setOrgName("foo").setCharset(/* utf-16 UnicodeBig */35).build();
-
- FieldWithMetadata fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(type.name(), null, fieldWithMetadata.getEncoding());
- Assert.assertEquals(type.name(), false, fieldWithMetadata.isSingleBit());
- }
- }
-
- // Define the types to skip
- Set typesToSkip = EnumSet.of(
- Query.Type.UNRECOGNIZED,
- Query.Type.EXPRESSION,
- Query.Type.HEXVAL,
- Query.Type.HEXNUM,
- Query.Type.BITNUM,
- Query.Type.RAW,
- Query.Type.ROW_TUPLE
- );
-
- @Test
- public void testPrecisionAdjustFactor() throws SQLException {
- VitessConnection conn = getVitessConnection();
- assertPrecisionEquals(conn, Query.Type.FLOAT32, true, 0, 0);
- assertPrecisionEquals(conn, Query.Type.FLOAT64, true, 32, 0);
- assertPrecisionEquals(conn, Query.Type.BIT, true, 0, 0);
- assertPrecisionEquals(conn, Query.Type.DECIMAL, true, 0, -1);
- assertPrecisionEquals(conn, Query.Type.DECIMAL, true, 3, -2);
- assertPrecisionEquals(conn, Query.Type.INT32, true, /* this can't happen, but just checking */3,
- -2);
- assertPrecisionEquals(conn, Query.Type.INT32, true, 0, -1);
- assertPrecisionEquals(conn, Query.Type.FLOAT32, false, 0, 0);
- assertPrecisionEquals(conn, Query.Type.FLOAT64, false, 32, 0);
- assertPrecisionEquals(conn, Query.Type.BIT, false, 0, 0);
- assertPrecisionEquals(conn, Query.Type.DECIMAL, false, 0, -1);
- assertPrecisionEquals(conn, Query.Type.DECIMAL, false, 3, -1);
- assertPrecisionEquals(conn, Query.Type.UINT32, false, 0, 0);
-
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- for (Query.Type type : Query.Type.values()) {
- // Skip if the type is in the set
- if (typesToSkip.contains(type)) {
- continue;
- }
-
- // All should be 0
- assertPrecisionEquals(conn, type, true, 0, 0);
- assertPrecisionEquals(conn, type, false, 0, 0);
- assertPrecisionEquals(conn, type, true, 2, 0);
- assertPrecisionEquals(conn, type, false, 2, 0);
- }
- }
-
- private void assertPrecisionEquals(VitessConnection conn, Query.Type fieldType, boolean signed,
- int decimals, int expectedPrecisionAdjustFactor) throws SQLException {
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setColumnLength(3).setType(fieldType)
- .setDecimals(decimals).setFlags(signed ? 0 : Query.MySqlFlag.UNSIGNED_FLAG_VALUE)
- .setName("foo").setOrgName("foo").build();
- FieldWithMetadata fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert
- .assertEquals(expectedPrecisionAdjustFactor, fieldWithMetadata.getPrecisionAdjustFactor());
- }
-
- @Test
- public void testFlags() throws SQLException {
- VitessConnection conn = getVitessConnection();
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setColumnLength(3)
- .setType(Query.Type.VARBINARY).setName("foo").setOrgName("foo").build();
- FieldWithMetadata fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(false, fieldWithMetadata.isBinary());
- Assert.assertEquals(false, fieldWithMetadata.isBlob());
- Assert.assertEquals(false, fieldWithMetadata.isAutoIncrement());
- Assert.assertEquals(false, fieldWithMetadata.isMultipleKey());
- Assert.assertEquals(false, fieldWithMetadata.isNotNull());
- Assert.assertEquals(false, fieldWithMetadata.isPrimaryKey());
- Assert.assertEquals(false, fieldWithMetadata.isUniqueKey());
- Assert.assertEquals(false, fieldWithMetadata.isUnsigned());
- Assert.assertEquals(/* just inverses isUnsigned */true, fieldWithMetadata.isSigned());
- Assert.assertEquals(false, fieldWithMetadata.isZeroFill());
-
- int value = 0;
- for (Query.MySqlFlag flag : Query.MySqlFlag.values()) {
- if (flag == Query.MySqlFlag.UNRECOGNIZED) {
- continue;
- }
- value |= flag.getNumber();
- }
- raw = raw.toBuilder().setFlags(value).build();
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(true, fieldWithMetadata.isBinary());
- Assert.assertEquals(true, fieldWithMetadata.isBlob());
- Assert.assertEquals(true, fieldWithMetadata.isAutoIncrement());
- Assert.assertEquals(true, fieldWithMetadata.isMultipleKey());
- Assert.assertEquals(true, fieldWithMetadata.isNotNull());
- Assert.assertEquals(true, fieldWithMetadata.isPrimaryKey());
- Assert.assertEquals(true, fieldWithMetadata.isUniqueKey());
- Assert.assertEquals(true, fieldWithMetadata.isUnsigned());
- Assert.assertEquals(/* just inverses isUnsigned */false, fieldWithMetadata.isSigned());
- Assert.assertEquals(true, fieldWithMetadata.isZeroFill());
-
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(false, fieldWithMetadata.isBinary());
- Assert.assertEquals(false, fieldWithMetadata.isBlob());
- Assert.assertEquals(false, fieldWithMetadata.isAutoIncrement());
- Assert.assertEquals(false, fieldWithMetadata.isMultipleKey());
- Assert.assertEquals(true, fieldWithMetadata.isNotNull());
- Assert.assertEquals(false, fieldWithMetadata.isPrimaryKey());
- Assert.assertEquals(false, fieldWithMetadata.isUniqueKey());
- Assert.assertEquals(true, fieldWithMetadata.isUnsigned());
- Assert.assertEquals(/* just inverses isUnsigned */false, fieldWithMetadata.isSigned());
- Assert.assertEquals(false, fieldWithMetadata.isZeroFill());
-
- }
-
- @Test
- public void testOpaqueBinary() throws SQLException {
- VitessConnection conn = getVitessConnection();
-
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setColumnLength(3)
- .setType(Query.Type.CHAR).setName("foo").setOrgName("foo")
- .setCharset(CharsetMapping.MYSQL_COLLATION_INDEX_binary)
- .setFlags(Query.MySqlFlag.BINARY_FLAG_VALUE).build();
-
- FieldWithMetadata fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(true, fieldWithMetadata.isOpaqueBinary());
-
- raw = raw.toBuilder().setTable("#sql_foo_bar").build();
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(false, fieldWithMetadata.isOpaqueBinary());
-
- raw = raw.toBuilder()
- .setCharset(/* short circuits collation -> encoding lookup, resulting in null */-1).build();
-
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(false, fieldWithMetadata.isOpaqueBinary());
-
- conn.setEncoding("binary");
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(true, fieldWithMetadata.isOpaqueBinary());
-
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(false, fieldWithMetadata.isOpaqueBinary());
- }
-
- @Test
- public void testReadOnly() throws SQLException {
- VitessConnection conn = getVitessConnection();
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setType(Query.Type.CHAR)
- .setName("foo").setOrgName("foo").setOrgTable("foo").build();
- FieldWithMetadata fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(false, fieldWithMetadata.isReadOnly());
-
- raw = raw.toBuilder().setOrgName("").setOrgTable("foo").build();
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(true, fieldWithMetadata.isReadOnly());
-
- raw = raw.toBuilder().setOrgName("foo").setOrgTable("").build();
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(true, fieldWithMetadata.isReadOnly());
-
- raw = raw.toBuilder().setOrgTable("").setOrgName("").build();
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(true, fieldWithMetadata.isReadOnly());
-
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- fieldWithMetadata = new FieldWithMetadata(conn, raw);
- Assert.assertEquals(false, fieldWithMetadata.isReadOnly());
- }
-
- @Test
- public void testDefaultsWithoutAllFields() throws SQLException {
- Query.Field raw = Query.Field.newBuilder().setName("foo").setOrgName("foo").setTable("foo")
- .setOrgTable("foo").setDatabase("foo").setType(Query.Type.CHAR).setFlags(
- Query.MySqlFlag.AUTO_INCREMENT_FLAG_VALUE | Query.MySqlFlag.PRI_KEY_FLAG_VALUE
- | Query.MySqlFlag.UNIQUE_KEY_FLAG_VALUE | Query.MySqlFlag.BINARY_FLAG_VALUE
- | Query.MySqlFlag.BLOB_FLAG_VALUE | Query.MySqlFlag.MULTIPLE_KEY_FLAG_VALUE
- | Query.MySqlFlag.UNSIGNED_FLAG_VALUE | Query.MySqlFlag.ZEROFILL_FLAG_VALUE)
- .build();
- VitessConnection conn = getVitessConnection();
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- FieldWithMetadata field = new FieldWithMetadata(conn, raw);
- Assert.assertEquals("foo", field.getName());
- Assert.assertEquals(null, field.getOrgName());
- Assert.assertEquals(null, field.getTable());
- Assert.assertEquals(null, field.getOrgTable());
- Assert.assertEquals(null, field.getDatabase());
- Assert.assertEquals(0, field.getDecimals());
- Assert.assertEquals(0, field.getColumnLength());
- Assert.assertEquals(0, field.getPrecisionAdjustFactor());
- Assert.assertEquals(false, field.isSingleBit());
- Assert.assertEquals(false, field.isAutoIncrement());
- Assert.assertEquals(false, field.isBinary());
- Assert.assertEquals(false, field.isBlob());
- Assert.assertEquals(false, field.isMultipleKey());
- Assert.assertEquals(true, field.isNotNull());
- Assert.assertEquals(false, field.isZeroFill());
- Assert.assertEquals(false, field.isPrimaryKey());
- Assert.assertEquals(false, field.isUniqueKey());
- Assert.assertEquals(true, field.isUnsigned());
- Assert.assertEquals(false, field.isSigned());
- Assert.assertEquals(false, field.isOpaqueBinary());
- Assert.assertEquals(false, field.isReadOnly());
- }
-
- @Test
- public void testToString() throws SQLException {
- Query.Field raw = Query.Field.newBuilder().setName("foo").setOrgName("foo").setTable("foo")
- .setOrgTable("foo").setDatabase("foo").setType(Query.Type.CHAR).setFlags(
- Query.MySqlFlag.AUTO_INCREMENT_FLAG_VALUE | Query.MySqlFlag.PRI_KEY_FLAG_VALUE
- | Query.MySqlFlag.UNIQUE_KEY_FLAG_VALUE | Query.MySqlFlag.BINARY_FLAG_VALUE
- | Query.MySqlFlag.BLOB_FLAG_VALUE | Query.MySqlFlag.MULTIPLE_KEY_FLAG_VALUE
- | Query.MySqlFlag.UNSIGNED_FLAG_VALUE | Query.MySqlFlag.ZEROFILL_FLAG_VALUE)
- .build();
- FieldWithMetadata field = new FieldWithMetadata(getVitessConnection(), raw);
- String result =
- "io.vitess.jdbc.FieldWithMetadata[catalog=foo," + "tableName=foo,originalTableName=foo,"
- + "columnName=foo,originalColumnName=foo," + "vitessType=" + Query.Type.CHAR.toString()
- + "(1)," + "flags=AUTO_INCREMENT PRIMARY_KEY UNIQUE_KEY BINARY "
- + "BLOB MULTI_KEY UNSIGNED ZEROFILL, charsetIndex=0, charsetName=null]";
- Assert.assertEquals(result, field.toString());
- }
-
- public void testCollations() throws Exception {
- VitessConnection conn = getVitessConnection();
-
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setType(Query.Type.CHAR)
- .setName("foo").setOrgName("foo").setCharset(33).build();
-
- FieldWithMetadata fieldWithMetadata = PowerMockito.spy(new FieldWithMetadata(conn, raw));
- String first = fieldWithMetadata.getCollation();
- String second = fieldWithMetadata.getCollation();
-
- Assert.assertEquals("utf8_general_ci", first);
- Assert.assertEquals("cached response is same as first", first, second);
-
- PowerMockito.verifyPrivate(fieldWithMetadata, VerificationModeFactory.times(1))
- .invoke("getCollationIndex");
-
- try {
- raw = raw.toBuilder()
- // value chosen because it's obviously out of bounds for the underlying array
- .setCharset(Integer.MAX_VALUE).build();
-
- fieldWithMetadata = PowerMockito.spy(new FieldWithMetadata(conn, raw));
- fieldWithMetadata.getCollation();
- Assert.fail("Should have received an array index out of bounds because "
- + "charset/collationIndex of Int.MAX is well above size of charset array");
- } catch (SQLException e) {
- if (e.getCause() instanceof ArrayIndexOutOfBoundsException) {
- Assert.assertEquals("CollationIndex '" + Integer.MAX_VALUE + "' out of bounds for "
- + "collationName lookup, should be within 0 and "
- + CharsetMapping.COLLATION_INDEX_TO_COLLATION_NAME.length, e.getMessage());
- } else {
- // just rethrow so we fail that way
- throw e;
- }
- }
-
- PowerMockito.verifyPrivate(fieldWithMetadata, VerificationModeFactory.times(1))
- .invoke("getCollationIndex");
- //Mockito.verify(fieldWithMetadata, Mockito.times(1)).getCollationIndex();
-
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- fieldWithMetadata = PowerMockito.spy(new FieldWithMetadata(conn, raw));
- Assert.assertEquals("null response when not including all fields", null,
- fieldWithMetadata.getCollation());
-
- // We should not call this at all, because we're short circuiting due to included fields
- //Mockito.verify(fieldWithMetadata, Mockito.never()).getCollationIndex();
- PowerMockito.verifyPrivate(fieldWithMetadata, VerificationModeFactory.times(0))
- .invoke("getCollationIndex");
- }
-
- @Test
- public void testMaxBytesPerChar() throws Exception {
- VitessConnection conn = PowerMockito.spy(getVitessConnection());
-
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setType(Query.Type.CHAR)
- .setName("foo").setOrgName("foo").setCharset(33).build();
-
- FieldWithMetadata fieldWithMetadata = PowerMockito.spy(new FieldWithMetadata(conn, raw));
-
- int first = fieldWithMetadata.getMaxBytesPerCharacter();
- int second = fieldWithMetadata.getMaxBytesPerCharacter();
-
- Assert.assertEquals("cached response is same as first", first, second);
- // We called getMaxBytesPerCharacter 2 times above, but should only have made 1 call to
- // fieldWithMetadata.getMaxBytesPerChar:
- // first - call conn
- // second - return cached
- Mockito.verify(fieldWithMetadata, VerificationModeFactory.times(1))
- .getMaxBytesPerChar(33, "UTF-8");
- PowerMockito.verifyPrivate(fieldWithMetadata, VerificationModeFactory.times(1))
- .invoke("getCollationIndex");
-
- conn.setIncludedFields(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME);
- fieldWithMetadata = PowerMockito.spy(new FieldWithMetadata(conn, raw));
- Assert.assertEquals("0 return value when not including all fields", 0,
- fieldWithMetadata.getMaxBytesPerCharacter());
-
- // We should not call this function because we short circuited due to not including all fields.
- Mockito.verify(fieldWithMetadata, VerificationModeFactory.times(0))
- .getMaxBytesPerChar(33, "UTF-8");
- // Should not be called at all, because it's new for just this test
- PowerMockito.verifyPrivate(fieldWithMetadata, VerificationModeFactory.times(0))
- .invoke("getCollationIndex");
- }
-
- @Test
- public void testGetEncodingForIndex() throws SQLException {
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setType(Query.Type.CHAR)
- .setName("foo").setOrgName("foo").setCharset(33).build();
- FieldWithMetadata field = new FieldWithMetadata(getVitessConnection(), raw);
-
- // No default encoding configured, and passing NO_CHARSET_INFO basically says "mysql doesn't
- // know"
- // which means don't try looking it up
- Assert.assertEquals(null, field.getEncodingForIndex(MysqlDefs.NO_CHARSET_INFO));
- // Similarly, a null index or one landing out of bounds for the charset index should return null
- Assert.assertEquals(null, field.getEncodingForIndex(Integer.MAX_VALUE));
- Assert.assertEquals(null, field.getEncodingForIndex(-123));
-
- // charsetIndex 25 is MYSQL_CHARSET_NAME_greek, which is a charset with multiple names,
- // ISO8859_7 and greek
- // Without an encoding configured in the connection, we should return the first (default)
- // encoding for a charset,
- // in this case ISO8859_7
- Assert.assertEquals("ISO-8859-7", field.getEncodingForIndex(25));
- field.getConnectionProperties().setEncoding("greek");
- // With an encoding configured, we should return that because it matches one of the names for
- // the charset
- Assert.assertEquals("greek", field.getEncodingForIndex(25));
-
- field.getConnectionProperties().setEncoding(null);
- Assert.assertEquals("UTF-8",
- field.getEncodingForIndex(CharsetMapping.MYSQL_COLLATION_INDEX_utf8));
- Assert.assertEquals("ISO-8859-1",
- field.getEncodingForIndex(CharsetMapping.MYSQL_COLLATION_INDEX_binary));
-
- field.getConnectionProperties().setEncoding("NOT_REAL");
- // Same tests as the first one, but testing that when there is a default configured, it falls
- // back to that regardless
- Assert.assertEquals("NOT_REAL", field.getEncodingForIndex(MysqlDefs.NO_CHARSET_INFO));
- Assert.assertEquals("NOT_REAL", field.getEncodingForIndex(Integer.MAX_VALUE));
- Assert.assertEquals("NOT_REAL", field.getEncodingForIndex(-123));
- }
-
- @Test
- public void testGetMaxBytesPerChar() throws SQLException {
- Query.Field raw = Query.Field.newBuilder().setTable("foo").setType(Query.Type.CHAR)
- .setName("foo").setOrgName("foo").setCharset(33).build();
- FieldWithMetadata field = new FieldWithMetadata(getVitessConnection(), raw);
-
- // Default state when no good info is passed in
- Assert.assertEquals(0, field.getMaxBytesPerChar(MysqlDefs.NO_CHARSET_INFO, null));
- // use passed collation index
- Assert
- .assertEquals(3, field.getMaxBytesPerChar(CharsetMapping.MYSQL_COLLATION_INDEX_utf8, null));
- // use first, if both are passed and valid
- Assert.assertEquals(3,
- field.getMaxBytesPerChar(CharsetMapping.MYSQL_COLLATION_INDEX_utf8, "UnicodeBig"));
- // use passed default charset
- Assert.assertEquals(2, field.getMaxBytesPerChar(MysqlDefs.NO_CHARSET_INFO, "UnicodeBig"));
- }
-}
diff --git a/java/jdbc/src/test/java/io/vitess/jdbc/VitessConnectionTest.java b/java/jdbc/src/test/java/io/vitess/jdbc/VitessConnectionTest.java
deleted file mode 100644
index 415790ed3f4..00000000000
--- a/java/jdbc/src/test/java/io/vitess/jdbc/VitessConnectionTest.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright 2019 The Vitess Authors.
-
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://www.apache.org/licenses/LICENSE-2.0
-
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.vitess.jdbc;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import io.vitess.client.VTSession;
-import io.vitess.proto.Query;
-import io.vitess.proto.Query.ExecuteOptions.TransactionIsolation;
-import io.vitess.proto.Topodata;
-import io.vitess.util.Constants;
-
-import java.lang.reflect.Field;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.Properties;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-/**
- * Created by harshit.gangal on 19/01/16.
- */
-@RunWith(PowerMockRunner.class)
-public class VitessConnectionTest extends BaseTest {
-
- @Test
- public void testVitessConnection() throws SQLException {
- VitessConnection vitessConnection = new VitessConnection(dbURL, new Properties());
- assertFalse(vitessConnection.isClosed());
- assertNull(vitessConnection.getDbProperties());
- }
-
- @Test
- public void testCreateStatement() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- Statement statement = vitessConnection.createStatement();
- assertEquals(vitessConnection, statement.getConnection());
- }
-
- @Test
- public void testCreateStatementForClose() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- assertFailsOnClosedConnection(vitessConnection, vitessConnection::createStatement);
- }
-
- @Test
- public void testnativeSQL() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- assertEquals("query", vitessConnection.nativeSQL("query"));
- }
-
- @Test
- public void testCreatePreperedStatement() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- PreparedStatement preparedStatementstatement = vitessConnection.prepareStatement("query");
- assertEquals(vitessConnection, preparedStatementstatement.getConnection());
- }
-
- @Test
- public void testCreatePreparedStatementForClose() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- assertFailsOnClosedConnection(vitessConnection,
- () -> vitessConnection.prepareStatement("query"));
- }
-
- @Test
- public void testDefaultGetAutoCommit() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- assertTrue(vitessConnection.getAutoCommit());
- }
-
- @Test
- public void testDefaultGetAutoCommitForClose() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- assertFailsOnClosedConnection(vitessConnection, vitessConnection::getAutoCommit);
- }
-
- @Test
- public void testDefaultSetAutoCommit() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- vitessConnection.setAutoCommit(false);
- assertFalse(vitessConnection.getAutoCommit());
- }
-
- @Test
- public void testDefaultSetAutoCommitForClose() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- assertFailsOnClosedConnection(vitessConnection, () -> vitessConnection.setAutoCommit(false));
- }
-
- @Test
- public void testCommit() throws Exception {
- VTSession mockSession = PowerMockito.mock(VTSession.class);
- VitessConnection vitessConnection = getVitessConnection();
- Field privateVTSessionField = VitessConnection.class.getDeclaredField("vtSession");
- privateVTSessionField.setAccessible(true);
- privateVTSessionField.set(vitessConnection, mockSession);
- PowerMockito.when(mockSession.isInTransaction()).thenReturn(false);
- PowerMockito.when(mockSession.isAutoCommit()).thenReturn(false);
- vitessConnection.commit();
- }
-
- @Test(expected = SQLException.class)
- public void testCommitForException() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- vitessConnection.setAutoCommit(true);
- vitessConnection.commit();
- }
-
- @Test
- public void testRollback() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- vitessConnection.setAutoCommit(false);
- vitessConnection.rollback();
- }
-
- @Test(expected = SQLException.class)
- public void testRollbackForException() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- vitessConnection.setAutoCommit(true);
- vitessConnection.rollback();
- }
-
- @Test
- public void testClosed() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- vitessConnection.setAutoCommit(false);
- vitessConnection.close();
- assertTrue(vitessConnection.isClosed());
- }
-
- @Test(expected = SQLException.class)
- public void testClosedForException() throws Exception {
- VTSession mockSession = PowerMockito.mock(VTSession.class);
- VitessConnection vitessConnection = getVitessConnection();
- Field privateVTSessionField = VitessConnection.class.getDeclaredField("vtSession");
- privateVTSessionField.setAccessible(true);
- privateVTSessionField.set(vitessConnection, mockSession);
- PowerMockito.when(mockSession.isInTransaction()).thenReturn(true);
- PowerMockito.when(mockSession.isAutoCommit()).thenReturn(true);
- vitessConnection.close();
- }
-
- @Test
- public void testGetCatalog() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- assertEquals("keyspace", vitessConnection.getCatalog());
- }
-
- @Test
- public void testSetCatalog() throws SQLException {
- VitessConnection vitessConnection = getVitessConnection();
- vitessConnection.setCatalog("myDB");
- assertEquals("myDB", vitessConnection.getCatalog());
- }
-
- @Test
- public void testPropertiesFromJdbcUrl() throws SQLException {
- String url = "jdbc:vitess://locahost:9000/vt_keyspace/keyspace?TABLET_TYPE=replica"
- + "&includedFields=type_and_name&blobsAreStrings=yes";
- VitessConnection conn = new VitessConnection(url, new Properties());
-
- // Properties from the url should be passed into the connection properties, and override
- // whatever defaults we've defined
- assertEquals(Query.ExecuteOptions.IncludedFields.TYPE_AND_NAME, conn.getIncludedFields());
- assertFalse(conn.isIncludeAllFields());
- assertEquals(Topodata.TabletType.REPLICA, conn.getTabletType());
- assertTrue(conn.getBlobsAreStrings());
- }
-
- @Test
- public void testClientFoundRows() throws SQLException {
- String url = "jdbc:vitess://locahost:9000/vt_keyspace/keyspace?TABLET_TYPE=replica"
- + "&useAffectedRows=true";
- VitessConnection conn = new VitessConnection(url, new Properties());
-
- assertTrue(conn.getUseAffectedRows());
- assertFalse(conn.getVtSession().getSession().getOptions().getClientFoundRows());
- }
-
- @Test
- public void testClientFoundRows2() throws SQLException {
- String url = "jdbc:vitess://locahost:9000/vt_keyspace/keyspace?TABLET_TYPE=replica"
- + "&useAffectedRows=false";
- VitessConnection conn = new VitessConnection(url, new Properties());
-
- assertFalse(conn.getUseAffectedRows());
- assertTrue(conn.getVtSession().getSession().getOptions().getClientFoundRows());
- }
-
- @Test
- public void testWorkload() throws SQLException {
- for (Query.ExecuteOptions.Workload workload : Query.ExecuteOptions.Workload.values()) {
- if (workload == Query.ExecuteOptions.Workload.UNRECOGNIZED) {
- continue;
- }
- String url = "jdbc:vitess://locahost:9000/vt_keyspace/keyspace?TABLET_TYPE=replica&workload="
- + workload.toString().toLowerCase();
- VitessConnection conn = new VitessConnection(url, new Properties());
-
- assertEquals(workload, conn.getWorkload());
- assertEquals(workload, conn.getVtSession().getSession().getOptions().getWorkload());
- }
- }
-
- @Test
- public void testTransactionIsolation() throws SQLException {
- VitessConnection conn = Mockito.spy(getVitessConnection());
- doReturn(new DBProperties("random", "random", "random", Connection.TRANSACTION_REPEATABLE_READ,
- "random")).when(conn).getDbProperties();
- doReturn(new VitessMySQLDatabaseMetadata(conn)).when(conn).getMetaData();
-
- assertEquals(TransactionIsolation.DEFAULT,
- conn.getVtSession().getSession().getOptions().getTransactionIsolation());
- assertEquals(Connection.TRANSACTION_REPEATABLE_READ, conn.getTransactionIsolation());
-
- conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
-
- assertEquals(TransactionIsolation.READ_COMMITTED,
- conn.getVtSession().getSession().getOptions().getTransactionIsolation());
- assertEquals(Connection.TRANSACTION_READ_COMMITTED, conn.getTransactionIsolation());
-
- VitessStatement statement = mock(VitessStatement.class);
- when(conn.createStatement()).thenReturn(statement);
- when(conn.isInTransaction()).thenReturn(true);
- conn.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
-
- verify(statement).executeUpdate("rollback");
- assertEquals(TransactionIsolation.READ_UNCOMMITTED,
- conn.getVtSession().getSession().getOptions().getTransactionIsolation());
- assertEquals(Connection.TRANSACTION_READ_UNCOMMITTED, conn.getTransactionIsolation());
- }
-
- interface Runthis {
-
- void run() throws SQLException;
- }
-
- private void assertFailsOnClosedConnection(VitessConnection connection, Runthis failingRunnable)
- throws SQLException {
- connection.close();
- try {
- failingRunnable.run();
- fail("expected this to fail on a closed connection");
- } catch (SQLException e) {
- assertEquals(e.getMessage(), Constants.SQLExceptionMessages.CONN_CLOSED);
- }
- }
-
-}
diff --git a/java/jdbc/src/test/java/io/vitess/jdbc/VitessDatabaseMetadataTest.java b/java/jdbc/src/test/java/io/vitess/jdbc/VitessDatabaseMetadataTest.java
deleted file mode 100644
index 92d5cfede9b..00000000000
--- a/java/jdbc/src/test/java/io/vitess/jdbc/VitessDatabaseMetadataTest.java
+++ /dev/null
@@ -1,1626 +0,0 @@
-/*
- * Copyright 2019 The Vitess Authors.
-
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://www.apache.org/licenses/LICENSE-2.0
-
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.vitess.jdbc;
-
-import com.google.common.base.Charsets;
-import com.google.common.io.CharStreams;
-import com.google.protobuf.ByteString;
-
-import io.vitess.client.cursor.Cursor;
-import io.vitess.client.cursor.SimpleCursor;
-import io.vitess.proto.Query;
-import io.vitess.util.Constants;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.util.Scanner;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-/**
- * Created by ashudeep.sharma on 08/03/16.
- */
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({VitessMySQLDatabaseMetadata.class, VitessConnection.class})
-public class VitessDatabaseMetadataTest extends BaseTest {
-
- private ResultSet resultSet;
-
- @Test
- public void getPseudoColumnsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- this.resultSet = vitessDatabaseMetaData.getPseudoColumns(null, null, null, null);
-
- ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
- Assert.assertEquals("TABLE_CAT", resultSetMetaData.getColumnName(1));
- Assert.assertEquals("TABLE_SCHEM", resultSetMetaData.getColumnName(2));
- Assert.assertEquals("TABLE_NAME", resultSetMetaData.getColumnName(3));
- Assert.assertEquals("COLUMN_NAME", resultSetMetaData.getColumnName(4));
- Assert.assertEquals("DATA_TYPE", resultSetMetaData.getColumnName(5));
- Assert.assertEquals("COLUMN_SIZE", resultSetMetaData.getColumnName(6));
- Assert.assertEquals("DECIMAL_DIGITS", resultSetMetaData.getColumnName(7));
- Assert.assertEquals("NUM_PREC_RADIX", resultSetMetaData.getColumnName(8));
- Assert.assertEquals("COLUMN_USAGE", resultSetMetaData.getColumnName(9));
- Assert.assertEquals("REMARKS", resultSetMetaData.getColumnName(10));
- Assert.assertEquals("CHAR_OCTET_LENGTH", resultSetMetaData.getColumnName(11));
- Assert.assertEquals("IS_NULLABLE", resultSetMetaData.getColumnName(12));
- }
-
- @Test
- public void getClientInfoPropertiesTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- this.resultSet = vitessDatabaseMetaData.getClientInfoProperties();
-
- ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
- Assert.assertEquals("NAME", resultSetMetaData.getColumnName(1));
- Assert.assertEquals("MAX_LEN", resultSetMetaData.getColumnName(2));
- Assert.assertEquals("DEFAULT_VALUE", resultSetMetaData.getColumnName(3));
- Assert.assertEquals("DESCRIPTION", resultSetMetaData.getColumnName(4));
- }
-
- @Test
- public void getSchemasTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- this.resultSet = vitessDatabaseMetaData.getSchemas(null, null);
-
- ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
- Assert.assertEquals("TABLE_CAT", resultSetMetaData.getColumnName(1));
- Assert.assertEquals("TABLE_CATALOG", resultSetMetaData.getColumnName(2));
- }
-
- @Test
- public void getAttributesTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- this.resultSet = vitessDatabaseMetaData.getAttributes(null, null, null, null);
-
- ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
- Assert.assertEquals("TYPE_CAT", resultSetMetaData.getColumnName(1));
- Assert.assertEquals("TYPE_SCHEM", resultSetMetaData.getColumnName(2));
- Assert.assertEquals("TYPE_NAME", resultSetMetaData.getColumnName(3));
- Assert.assertEquals("ATTR_NAME", resultSetMetaData.getColumnName(4));
- Assert.assertEquals("DATA_TYPE", resultSetMetaData.getColumnName(5));
- Assert.assertEquals("ATTR_TYPE_NAME", resultSetMetaData.getColumnName(6));
- Assert.assertEquals("ATTR_SIZE", resultSetMetaData.getColumnName(7));
- Assert.assertEquals("DECIMAL_DIGITS", resultSetMetaData.getColumnName(8));
- Assert.assertEquals("NUM_PREC_RADIX", resultSetMetaData.getColumnName(9));
- Assert.assertEquals("NULLABLE", resultSetMetaData.getColumnName(10));
- Assert.assertEquals("REMARKS", resultSetMetaData.getColumnName(11));
- Assert.assertEquals("ATTR_DEF", resultSetMetaData.getColumnName(12));
- Assert.assertEquals("SQL_DATA_TYPE", resultSetMetaData.getColumnName(13));
- Assert.assertEquals("SQL_DATETIME_SUB", resultSetMetaData.getColumnName(14));
- Assert.assertEquals("CHAR_OCTET_LENGTH", resultSetMetaData.getColumnName(15));
- Assert.assertEquals("ORDINAL_POSITION", resultSetMetaData.getColumnName(16));
- Assert.assertEquals("ISNULLABLE", resultSetMetaData.getColumnName(17));
- Assert.assertEquals("SCOPE_CATALOG", resultSetMetaData.getColumnName(18));
- Assert.assertEquals("SCOPE_SCHEMA", resultSetMetaData.getColumnName(19));
- Assert.assertEquals("SCOPE_TABLE", resultSetMetaData.getColumnName(20));
- Assert.assertEquals("SOURCE_DATA_TYPE", resultSetMetaData.getColumnName(21));
- }
-
- @Test
- public void getSuperTablesTest() throws SQLException {
-
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- this.resultSet = vitessDatabaseMetaData.getSuperTables(null, null, null);
-
- ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
- Assert.assertEquals("TABLE_CAT", resultSetMetaData.getColumnName(1));
- Assert.assertEquals("TYPE_SCHEM", resultSetMetaData.getColumnName(2));
- Assert.assertEquals("TABLE_NAME", resultSetMetaData.getColumnName(3));
- Assert.assertEquals("SUPERTABLE_NAME", resultSetMetaData.getColumnName(4));
- }
-
- @Test
- public void getSuperTypesTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- this.resultSet = vitessDatabaseMetaData.getSuperTypes(null, null, null);
-
- ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
- Assert.assertEquals("TYPE_CAT", resultSetMetaData.getColumnName(1));
- Assert.assertEquals("TYPE_SCHEM", resultSetMetaData.getColumnName(2));
- Assert.assertEquals("TYPE_NAME", resultSetMetaData.getColumnName(3));
- Assert.assertEquals("SUPERTYPE_CAT", resultSetMetaData.getColumnName(4));
- Assert.assertEquals("SUPERTYPE_SCHEM", resultSetMetaData.getColumnName(5));
- Assert.assertEquals("SUPERTYPE_NAME", resultSetMetaData.getColumnName(6));
- }
-
- @Test
- public void getUDTsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- this.resultSet = vitessDatabaseMetaData.getUDTs(null, null, null, null);
-
- ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
- Assert.assertEquals("TYPE_CAT", resultSetMetaData.getColumnName(1));
- Assert.assertEquals("TYPE_SCHEM", resultSetMetaData.getColumnName(2));
- Assert.assertEquals("TYPE_NAME", resultSetMetaData.getColumnName(3));
- Assert.assertEquals("CLASS_NAME", resultSetMetaData.getColumnName(4));
- Assert.assertEquals("DATA_TYPE", resultSetMetaData.getColumnName(5));
- Assert.assertEquals("REMARKS", resultSetMetaData.getColumnName(6));
- Assert.assertEquals("BASE_TYPE", resultSetMetaData.getColumnName(7));
- }
-
- @Test
- public void getTypeInfoTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- this.resultSet = vitessDatabaseMetaData.getTypeInfo();
-
- ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
- Assert.assertEquals("TYPE_NAME", resultSetMetaData.getColumnName(1));
- Assert.assertEquals("DATA_TYPE", resultSetMetaData.getColumnName(2));
- Assert.assertEquals("PRECISION", resultSetMetaData.getColumnName(3));
- Assert.assertEquals("LITERAL_PREFIX", resultSetMetaData.getColumnName(4));
- Assert.assertEquals("LITERAL_SUFFIX", resultSetMetaData.getColumnName(5));
- Assert.assertEquals("CREATE_PARAMS", resultSetMetaData.getColumnName(6));
- Assert.assertEquals("NULLABLE", resultSetMetaData.getColumnName(7));
- Assert.assertEquals("CASE_SENSITIVE", resultSetMetaData.getColumnName(8));
- Assert.assertEquals("SEARCHABLE", resultSetMetaData.getColumnName(9));
- Assert.assertEquals("UNSIGNED_ATTRIBUTE", resultSetMetaData.getColumnName(10));
- Assert.assertEquals("FIXED_PREC_SCALE", resultSetMetaData.getColumnName(11));
- Assert.assertEquals("AUTO_INCREMENT", resultSetMetaData.getColumnName(12));
- Assert.assertEquals("LOCAL_TYPE_NAME", resultSetMetaData.getColumnName(13));
- Assert.assertEquals("MINIMUM_SCALE", resultSetMetaData.getColumnName(14));
- Assert.assertEquals("MAXIMUM_SCALE", resultSetMetaData.getColumnName(15));
- Assert.assertEquals("SQL_DATA_TYPE", resultSetMetaData.getColumnName(16));
- Assert.assertEquals("SQL_DATETIME_SUB", resultSetMetaData.getColumnName(17));
- Assert.assertEquals("NUM_PREC_RADIX", resultSetMetaData.getColumnName(18));
-
- //Check for ResultSet Data as well
- }
-
- @Test
- public void getTableTypesTest() throws SQLException {
-
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- this.resultSet = vitessDatabaseMetaData.getTableTypes();
-
- ArrayList data = new ArrayList();
- while (resultSet.next()) {
- data.add(resultSet.getString("table_type"));
- }
-
- ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
- Assert.assertEquals("table_type", resultSetMetaData.getColumnName(1));
- //Checking Data
- Assert.assertEquals("LOCAL TEMPORARY", data.get(0));
- Assert.assertEquals("SYSTEM TABLES", data.get(1));
- Assert.assertEquals("SYSTEM VIEW", data.get(2));
- Assert.assertEquals("TABLE", data.get(3));
- Assert.assertEquals("VIEW", data.get(4));
- }
-
- @Test
- public void getSchemasTest2() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- this.resultSet = vitessDatabaseMetaData.getSchemas();
-
- ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
- Assert.assertEquals("TABLE_SCHEM", resultSetMetaData.getColumnName(1));
- Assert.assertEquals("TABLE_CATALOG", resultSetMetaData.getColumnName(2));
- }
-
- @Test
- public void allProceduresAreCallableTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.allProceduresAreCallable());
- }
-
- @Test
- public void allTablesAreSelectableTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.allTablesAreSelectable());
- }
-
- @Test
- public void nullsAreSortedHighTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.nullsAreSortedHigh());
- Assert.assertEquals(false, vitessMariaDBDatabaseMetadata.nullsAreSortedHigh());
- }
-
- @Test
- public void nullsAreSortedLowTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(true, vitessDatabaseMetaData.nullsAreSortedLow());
- Assert.assertEquals(true, vitessMariaDBDatabaseMetadata.nullsAreSortedLow());
- }
-
- @Test
- public void nullsAreSortedAtStartTest() throws SQLException {
- VitessDatabaseMetaData vitessMySQLDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessMySQLDatabaseMetaData.nullsAreSortedAtStart());
- Assert.assertEquals(false, vitessMariaDBDatabaseMetadata.nullsAreSortedAtStart());
- }
-
- @Test
- public void nullsAreSortedAtEndTest() throws SQLException {
- VitessDatabaseMetaData vitessMySQLDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessMySQLDatabaseMetaData.nullsAreSortedAtEnd());
- Assert.assertEquals(true, vitessMariaDBDatabaseMetadata.nullsAreSortedAtEnd());
- }
-
- @Test
- public void getDatabaseProductNameTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals("MySQL", vitessDatabaseMetaData.getDatabaseProductName());
- }
-
- @Test
- public void getDriverVersionTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- StringBuilder driverVersionBuilder = new StringBuilder();
- driverVersionBuilder.append(Constants.DRIVER_MAJOR_VERSION);
- driverVersionBuilder.append(".");
- driverVersionBuilder.append(Constants.DRIVER_MINOR_VERSION);
- Assert.assertEquals(driverVersionBuilder.toString(), vitessDatabaseMetaData.getDriverVersion());
- }
-
- @Test
- public void getDriverMajorVersionTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(Constants.DRIVER_MAJOR_VERSION,
- vitessDatabaseMetaData.getDriverMajorVersion());
- }
-
- @Test
- public void getDriverMinorVersionTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(Constants.DRIVER_MINOR_VERSION,
- vitessDatabaseMetaData.getDriverMinorVersion());
- }
-
- @Test
- public void getSearchStringEscapeTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals("\\", vitessDatabaseMetaData.getSearchStringEscape());
- }
-
- @Test
- public void getExtraNameCharactersTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals("#@", vitessDatabaseMetaData.getExtraNameCharacters());
- }
-
- @Test
- public void supportsAlterTableWithAddColumnTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsAlterTableWithAddColumn());
- }
-
- @Test
- public void supportsAlterTableWithDropColumnTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsAlterTableWithDropColumn());
- }
-
- @Test
- public void supportsColumnAliasingTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(true, vitessDatabaseMetaData.supportsColumnAliasing());
- }
-
- @Test
- public void nullPlusNonNullIsNullTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(true, vitessDatabaseMetaData.nullPlusNonNullIsNull());
- }
-
- @Test
- public void supportsExpressionsInOrderByTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsExpressionsInOrderBy());
- }
-
- @Test
- public void supportsOrderByUnrelatedTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsOrderByUnrelated());
- }
-
- @Test
- public void supportsGroupByTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsGroupBy());
- }
-
- @Test
- public void supportsGroupByUnrelatedTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsGroupByUnrelated());
- }
-
- @Test
- public void supportsGroupByBeyondSelectTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsGroupByBeyondSelect());
- }
-
- @Test
- public void supportsLikeEscapeClauseTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(true, vitessDatabaseMetaData.supportsLikeEscapeClause());
- }
-
- @Test
- public void supportsMultipleResultSetsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsMultipleResultSets());
- }
-
- @Test
- public void supportsMultipleTransactionsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(true, vitessDatabaseMetaData.supportsMultipleTransactions());
- }
-
- @Test
- public void supportsNonNullableColumnsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(true, vitessDatabaseMetaData.supportsNonNullableColumns());
- }
-
- @Test
- public void supportsMinimumSQLGrammarTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(true, vitessDatabaseMetaData.supportsMinimumSQLGrammar());
- }
-
- @Test
- public void supportsCoreSQLGrammarTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsCoreSQLGrammar());
- }
-
- @Test
- public void supportsExtendedSQLGrammarTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsExtendedSQLGrammar());
- }
-
- @Test
- public void supportsOuterJoinsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsOuterJoins());
- }
-
- @Test
- public void supportsFullOuterJoinsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsFullOuterJoins());
- }
-
- @Test
- public void supportsLimitedOuterJoinsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsLimitedOuterJoins());
- }
-
- @Test
- public void getSchemaTermTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals("", vitessDatabaseMetaData.getSchemaTerm());
- }
-
- @Test
- public void getProcedureTermTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals("procedure", vitessDatabaseMetaData.getProcedureTerm());
- }
-
- @Test
- public void getCatalogTermTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals("database", vitessDatabaseMetaData.getCatalogTerm());
- }
-
- @Test
- public void isCatalogAtStartTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(true, vitessDatabaseMetaData.isCatalogAtStart());
- }
-
- @Test
- public void getCatalogSeparatorTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(".", vitessDatabaseMetaData.getCatalogSeparator());
- }
-
- @Test
- public void supportsSchemasInDataManipulationTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsSchemasInDataManipulation());
- }
-
- @Test
- public void supportsSchemasInProcedureCallsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsSchemasInProcedureCalls());
- }
-
- @Test
- public void supportsSchemasInTableDefinitionsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsSchemasInTableDefinitions());
- }
-
- @Test
- public void supportsSchemasInIndexDefinitionsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsSchemasInIndexDefinitions());
- }
-
- @Test
- public void supportsSelectForUpdateTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsSelectForUpdate());
- }
-
- @Test
- public void supportsStoredProceduresTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsStoredProcedures());
- }
-
- @Test
- public void supportsSubqueriesInComparisonsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsSubqueriesInComparisons());
- }
-
- @Test
- public void supportsSubqueriesInExistsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsSubqueriesInExists());
- }
-
- @Test
- public void supportsSubqueriesInInsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsSubqueriesInIns());
- }
-
- @Test
- public void supportsSubqueriesInQuantifiedsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsSubqueriesInQuantifieds());
- }
-
- @Test
- public void supportsCorrelatedSubqueriesTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsCorrelatedSubqueries());
- }
-
- @Test
- public void supportsUnionTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsUnion());
- }
-
- @Test
- public void supportsUnionAllTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsUnionAll());
- }
-
- @Test
- public void supportsOpenCursorsAcrossRollbackTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsOpenCursorsAcrossRollback());
- }
-
- @Test
- public void supportsOpenStatementsAcrossCommitTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsOpenStatementsAcrossCommit());
- }
-
- @Test
- public void supportsOpenStatementsAcrossRollbackTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsOpenStatementsAcrossRollback());
- }
-
- @Test
- public void supportsOpenCursorsAcrossCommitTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.supportsOpenCursorsAcrossCommit());
- }
-
- @Test
- public void getMaxBinaryLiteralLengthTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(16777208, vitessDatabaseMetaData.getMaxBinaryLiteralLength());
- }
-
- @Test
- public void getMaxCharLiteralLengthTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(16777208, vitessDatabaseMetaData.getMaxCharLiteralLength());
- }
-
- @Test
- public void getMaxColumnNameLengthTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(64, vitessDatabaseMetaData.getMaxColumnNameLength());
- }
-
- @Test
- public void getMaxColumnsInGroupByTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(64, vitessDatabaseMetaData.getMaxColumnsInGroupBy());
- }
-
- @Test
- public void getMaxColumnsInIndexTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(16, vitessDatabaseMetaData.getMaxColumnsInIndex());
- }
-
- @Test
- public void getMaxColumnsInOrderByTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(64, vitessDatabaseMetaData.getMaxColumnsInOrderBy());
- }
-
- @Test
- public void getMaxColumnsInSelectTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(256, vitessDatabaseMetaData.getMaxColumnsInSelect());
- }
-
- @Test
- public void getMaxIndexLengthTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(256, vitessDatabaseMetaData.getMaxIndexLength());
- }
-
- @Test
- public void doesMaxRowSizeIncludeBlobsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.doesMaxRowSizeIncludeBlobs());
- }
-
- @Test
- public void getMaxTableNameLengthTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(64, vitessDatabaseMetaData.getMaxTableNameLength());
- }
-
- @Test
- public void getMaxTablesInSelectTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(256, vitessDatabaseMetaData.getMaxTablesInSelect());
- }
-
- @Test
- public void getMaxUserNameLengthTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(16, vitessDatabaseMetaData.getMaxUserNameLength());
- }
-
- @Test
- public void supportsDataDefinitionAndDataManipulationTransactionsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false,
- vitessDatabaseMetaData.supportsDataDefinitionAndDataManipulationTransactions());
- }
-
- @Test
- public void dataDefinitionCausesTransactionCommitTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.dataDefinitionCausesTransactionCommit());
- }
-
- @Test
- public void dataDefinitionIgnoredInTransactionsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.dataDefinitionIgnoredInTransactions());
- }
-
- @Test
- public void getIdentifierQuoteStringTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals("`", vitessDatabaseMetaData.getIdentifierQuoteString());
- }
-
- @Test
- public void getProceduresTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(null, vitessDatabaseMetaData.getProcedures(null, null, null));
- }
-
- @Test
- public void supportsResultSetTypeTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(true,
- vitessDatabaseMetaData.supportsResultSetType(ResultSet.TYPE_FORWARD_ONLY));
- Assert.assertEquals(false,
- vitessDatabaseMetaData.supportsResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE));
- Assert.assertEquals(false,
- vitessDatabaseMetaData.supportsResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE));
- Assert.assertEquals(false,
- vitessDatabaseMetaData.supportsResultSetType(ResultSet.CLOSE_CURSORS_AT_COMMIT));
- Assert.assertEquals(false,
- vitessDatabaseMetaData.supportsResultSetType(ResultSet.CONCUR_READ_ONLY));
- Assert.assertEquals(false,
- vitessDatabaseMetaData.supportsResultSetType(ResultSet.CONCUR_UPDATABLE));
- Assert
- .assertEquals(false, vitessDatabaseMetaData.supportsResultSetType(ResultSet.FETCH_FORWARD));
- Assert
- .assertEquals(false, vitessDatabaseMetaData.supportsResultSetType(ResultSet.FETCH_REVERSE));
- Assert.assertEquals(false,
- vitessDatabaseMetaData.supportsResultSetType(ResultSet.HOLD_CURSORS_OVER_COMMIT));
- Assert
- .assertEquals(false, vitessDatabaseMetaData.supportsResultSetType(ResultSet.FETCH_UNKNOWN));
- }
-
- @Test
- public void supportsResultSetConcurrencyTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- Assert.assertEquals(true, vitessDatabaseMetaData
- .supportsResultSetConcurrency(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY));
- Assert.assertEquals(false, vitessDatabaseMetaData
- .supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE,
- ResultSet.CONCUR_READ_ONLY));
- Assert.assertEquals(false, vitessDatabaseMetaData
- .supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY));
- Assert.assertEquals(false, vitessDatabaseMetaData
- .supportsResultSetConcurrency(ResultSet.CLOSE_CURSORS_AT_COMMIT,
- ResultSet.CONCUR_READ_ONLY));
- Assert.assertEquals(false, vitessDatabaseMetaData
- .supportsResultSetConcurrency(ResultSet.CONCUR_READ_ONLY, ResultSet.CONCUR_READ_ONLY));
- Assert.assertEquals(false, vitessDatabaseMetaData
- .supportsResultSetConcurrency(ResultSet.CONCUR_UPDATABLE, ResultSet.CONCUR_READ_ONLY));
- Assert.assertEquals(false, vitessDatabaseMetaData
- .supportsResultSetConcurrency(ResultSet.FETCH_FORWARD, ResultSet.CONCUR_READ_ONLY));
- Assert.assertEquals(false, vitessDatabaseMetaData
- .supportsResultSetConcurrency(ResultSet.FETCH_REVERSE, ResultSet.CONCUR_READ_ONLY));
- Assert.assertEquals(false, vitessDatabaseMetaData
- .supportsResultSetConcurrency(ResultSet.HOLD_CURSORS_OVER_COMMIT,
- ResultSet.CONCUR_READ_ONLY));
- Assert.assertEquals(false, vitessDatabaseMetaData
- .supportsResultSetConcurrency(ResultSet.FETCH_UNKNOWN, ResultSet.CONCUR_READ_ONLY));
- }
-
- @Test
- public void getJDBCMajorVersionTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(1, vitessDatabaseMetaData.getJDBCMajorVersion());
- }
-
- @Test
- public void getJDBCMinorVersionTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(0, vitessDatabaseMetaData.getJDBCMinorVersion());
- }
-
- @Test
- public void getNumericFunctionsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(
- "ABS,ACOS,ASIN,ATAN,ATAN2,BIT_COUNT,CEILING,COS,COT,DEGREES,EXP,FLOOR,LOG,LOG10,MAX,MIN,"
- + "MOD,PI,POW,POWER,"
- + "RADIANS,RAND,ROUND,SIN,SQRT,TAN,TRUNCATE",
- vitessDatabaseMetaData.getNumericFunctions());
- }
-
- @Test
- public void getStringFunctionsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(
- "ASCII,BIN,BIT_LENGTH,CHAR,CHARACTER_LENGTH,CHAR_LENGTH,CONCAT,CONCAT_WS,CONV,ELT,"
- + "EXPORT_SET,FIELD,"
- + "FIND_IN_SET,HEX,INSERT,INSTR,LCASE,LEFT,LENGTH,LOAD_FILE,LOCATE,LOCATE,LOWER,LPAD,"
- + "LTRIM,MAKE_SET,"
- + "MATCH,MID,OCT,OCTET_LENGTH,ORD,POSITION,QUOTE,REPEAT,REPLACE,REVERSE,RIGHT,RPAD,"
- + "RTRIM,SOUNDEX,SPACE,"
- + "STRCMP,SUBSTRING,SUBSTRING,SUBSTRING,SUBSTRING,SUBSTRING_INDEX,TRIM,UCASE,UPPER",
- vitessDatabaseMetaData.getStringFunctions());
- }
-
- @Test
- public void getSystemFunctionsTest() throws SQLException {
- VitessDatabaseMetaData vitessMySQLDatabaseMetadata = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatbaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(
- "DATABASE,USER,SYSTEM_USER,SESSION_USER,LAST_INSERT_ID,VERSION,PASSWORD,ENCRYPT",
- vitessMySQLDatabaseMetadata.getSystemFunctions());
- Assert.assertEquals("DATABASE,USER,SYSTEM_USER,SESSION_USER,LAST_INSERT_ID,VERSION",
- vitessMariaDBDatbaseMetadata.getSystemFunctions());
- }
-
- @Test
- public void getTimeDateFunctionsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(
- "DAYOFWEEK,WEEKDAY,DAYOFMONTH,DAYOFYEAR,MONTH,DAYNAME,MONTHNAME,QUARTER,WEEK,YEAR,HOUR,"
- + "MINUTE,SECOND,"
- + "PERIOD_ADD,PERIOD_DIFF,TO_DAYS,FROM_DAYS,DATE_FORMAT,TIME_FORMAT,CURDATE,"
- + "CURRENT_DATE,CURTIME,"
- + "CURRENT_TIME,NOW,SYSDATE,CURRENT_TIMESTAMP,UNIX_TIMESTAMP,FROM_UNIXTIME,"
- + "SEC_TO_TIME,TIME_TO_SEC",
- vitessDatabaseMetaData.getTimeDateFunctions());
- }
-
- @Test
- public void autoCommitFailureClosesAllResultSetsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.autoCommitFailureClosesAllResultSets());
- }
-
- @Test
- public void getUrlTest() throws SQLException {
- String connectionUrl = "jdbc:vitess://://";
- VitessJDBCUrl mockUrl = PowerMockito.mock(VitessJDBCUrl.class);
- PowerMockito.when(mockUrl.getUrl()).thenReturn(connectionUrl);
-
- VitessConnection mockConn = PowerMockito.mock(VitessConnection.class);
- PowerMockito.when(mockConn.getUrl()).thenReturn(mockUrl);
-
- Assert.assertEquals(connectionUrl, mockConn.getUrl().getUrl());
- }
-
- @Test
- public void isReadOnlyTest() throws SQLException {
- VitessConnection mockConn = PowerMockito.mock(VitessConnection.class);
- PowerMockito.when(mockConn.isReadOnly()).thenReturn(false);
- Assert.assertEquals(false, mockConn.isReadOnly());
-
- }
-
- @Test
- public void getDriverNameTest() throws SQLException {
- VitessDatabaseMetaData vitessMySQLDatabaseMetadata = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals("Vitess MySQL JDBC Driver", vitessMySQLDatabaseMetadata.getDriverName());
- Assert
- .assertEquals("Vitess MariaDB JDBC Driver", vitessMariaDBDatabaseMetadata.getDriverName());
- }
-
- @Test
- public void usesLocalFilesTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.usesLocalFiles());
- Assert.assertEquals(false, vitessDatabaseMetaData.usesLocalFilePerTable());
- Assert.assertEquals(false, vitessDatabaseMetaData.storesUpperCaseIdentifiers());
- }
-
- @Test
- public void storeIdentifiersTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessDatabaseMetaData.storesUpperCaseIdentifiers());
- }
-
- @Test
- public void supportsTransactionsTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- Assert.assertEquals(true, vitessDatabaseMetaData.supportsTransactions());
- }
-
- @Test
- public void supportsTransactionIsolationLevelTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- Assert.assertEquals(false,
- vitessDatabaseMetaData.supportsTransactionIsolationLevel(Connection.TRANSACTION_NONE));
- Assert.assertEquals(true, vitessDatabaseMetaData
- .supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_COMMITTED));
- Assert.assertEquals(true, vitessDatabaseMetaData
- .supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED));
- Assert.assertEquals(true, vitessDatabaseMetaData
- .supportsTransactionIsolationLevel(Connection.TRANSACTION_REPEATABLE_READ));
- Assert.assertEquals(true, vitessDatabaseMetaData
- .supportsTransactionIsolationLevel(Connection.TRANSACTION_SERIALIZABLE));
- }
-
- @Test
- public void getMaxProcedureNameLengthTest() throws SQLException {
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- Assert.assertEquals(256, vitessDatabaseMetaData.getMaxProcedureNameLength());
- }
-
- @Test
- public void getMaxCatalogNameLengthTest() throws SQLException {
- VitessDatabaseMetaData vitessMySqlDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(32, vitessMySqlDatabaseMetaData.getMaxCatalogNameLength());
- Assert.assertEquals(0, vitessMariaDBDatabaseMetadata.getMaxCatalogNameLength());
- }
-
- @Test
- public void getMaxRowSizeTest() throws SQLException {
- VitessDatabaseMetaData vitessMySqlDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(2147483639, vitessMySqlDatabaseMetaData.getMaxRowSize());
- Assert.assertEquals(0, vitessMariaDBDatabaseMetadata.getMaxRowSize());
- }
-
- @Test
- public void getMaxStatementLengthTest() throws SQLException {
- VitessDatabaseMetaData vitessMySqlDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(65531, vitessMySqlDatabaseMetaData.getMaxStatementLength());
- Assert.assertEquals(0, vitessMariaDBDatabaseMetadata.getMaxStatementLength());
- }
-
- @Test
- public void getMaxStatementsTest() throws SQLException {
- VitessDatabaseMetaData vitessMySqlDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(0, vitessMySqlDatabaseMetaData.getMaxStatements());
- Assert.assertEquals(0, vitessMariaDBDatabaseMetadata.getMaxStatements());
- }
-
- @Test
- public void supportsDataManipulationTransactionsOnlyTest() throws SQLException {
- VitessDatabaseMetaData vitessMySqlDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(false,
- vitessMySqlDatabaseMetaData.supportsDataManipulationTransactionsOnly());
- Assert.assertEquals(false,
- vitessMariaDBDatabaseMetadata.supportsDataManipulationTransactionsOnly());
- }
-
- @Test
- public void getMaxSchemaNameLengthTest() throws SQLException {
- VitessDatabaseMetaData vitessMySqlDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(0, vitessMySqlDatabaseMetaData.getMaxSchemaNameLength());
- Assert.assertEquals(32, vitessMariaDBDatabaseMetadata.getMaxSchemaNameLength());
- }
-
- @Test
- public void supportsSavepointsTest() throws SQLException {
- VitessDatabaseMetaData vitessMySqlDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessMySqlDatabaseMetaData.supportsSavepoints());
- Assert.assertEquals(false, vitessMariaDBDatabaseMetadata.supportsSavepoints());
- }
-
- @Test
- public void supportsMultipleOpenResultsTest() throws SQLException {
- VitessDatabaseMetaData vitessMySqlDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessMySqlDatabaseMetaData.supportsMultipleOpenResults());
- Assert.assertEquals(false, vitessMariaDBDatabaseMetadata.supportsMultipleOpenResults());
- }
-
- @Test
- public void locatorsUpdateCopyTest() throws SQLException {
- VitessDatabaseMetaData vitessMySqlDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(true, vitessMySqlDatabaseMetaData.locatorsUpdateCopy());
- Assert.assertEquals(false, vitessMariaDBDatabaseMetadata.locatorsUpdateCopy());
- }
-
- @Test
- public void supportsStatementPooling() throws SQLException {
- VitessDatabaseMetaData vitessMySqlDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- VitessDatabaseMetaData vitessMariaDBDatabaseMetadata = new VitessMariaDBDatabaseMetadata(null);
-
- Assert.assertEquals(false, vitessMySqlDatabaseMetaData.supportsStatementPooling());
- Assert.assertEquals(false, vitessMariaDBDatabaseMetadata.supportsStatementPooling());
- }
-
- @Test
- public void getCatalogsTest() throws SQLException, Exception {
- String sql = "SHOW DATABASES";
- Cursor mockedCursor = new SimpleCursor(Query.QueryResult.newBuilder().addFields(
- Query.Field.newBuilder().setName("TABLE_CAT").setType(Query.Type.VARCHAR).build()).addRows(
- Query.Row.newBuilder().addLengths("vitessDB".length())
- .setValues(ByteString.copyFromUtf8("vitessDB"))).addRows(
- Query.Row.newBuilder().addLengths("sampleDB".length())
- .setValues(ByteString.copyFromUtf8("sampleDB"))).addRows(
- Query.Row.newBuilder().addLengths("testDB".length())
- .setValues(ByteString.copyFromUtf8("testDB"))).addRows(
- Query.Row.newBuilder().addLengths("dummyDB".length())
- .setValues(ByteString.copyFromUtf8("dummyDB"))).build());
-
- VitessStatement vitessStatement = PowerMockito.mock(VitessStatement.class);
- PowerMockito.whenNew(VitessStatement.class).withAnyArguments().thenReturn(vitessStatement);
- PowerMockito.when(vitessStatement.executeQuery(sql))
- .thenReturn(new VitessResultSet(mockedCursor));
-
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(null);
- ResultSet resultSet = vitessDatabaseMetaData.getCatalogs();
- ArrayList resultSetList = new ArrayList();
- while (resultSet.next()) {
- resultSetList.add(resultSet.getString(1));
- }
- Assert.assertEquals("dummyDB", resultSetList.get(0));
- Assert.assertEquals("sampleDB", resultSetList.get(1));
- Assert.assertEquals("testDB", resultSetList.get(2));
- Assert.assertEquals("vitessDB", resultSetList.get(3));
- }
-
- @Test
- public void getTablesTest() throws SQLException, Exception {
-
- String sql = "SHOW FULL TABLES FROM `vt` LIKE '%'";
- Cursor mockedCursor = getTablesCursor();
-
- VitessStatement vitessStatement = PowerMockito.mock(VitessStatement.class);
- PowerMockito.whenNew(VitessStatement.class).withAnyArguments().thenReturn(vitessStatement);
- PowerMockito.when(vitessStatement.executeQuery(sql))
- .thenReturn(new VitessResultSet(mockedCursor));
-
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(
- getVitessConnection());
- ResultSet actualResultSet = vitessDatabaseMetaData.getTables("vt", null, null, null);
- ResultSet expectedResultSet = new VitessResultSet(mockedCursor);
-
- assertResultSetEquals(actualResultSet, expectedResultSet);
- }
-
- @Test
- public void getTablesProperResultTypeTest() throws SQLException, Exception {
-
- String sql = "SHOW FULL TABLES FROM `vt` LIKE '%'";
- Cursor mockedCursor = getTablesCursor();
-
- VitessStatement vitessStatement = PowerMockito.mock(VitessStatement.class);
- PowerMockito.whenNew(VitessStatement.class).withAnyArguments().thenReturn(vitessStatement);
- PowerMockito.when(vitessStatement.executeQuery(sql))
- .thenReturn(new VitessResultSet(mockedCursor));
-
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(
- getVitessConnection());
- ResultSet actualResultSet = vitessDatabaseMetaData.getTables("vt", null, null, null);
- actualResultSet.next();
- Assert.assertEquals(String.class, actualResultSet.getObject("TABLE_CAT").getClass());
- }
-
- private Cursor getTablesCursor() throws Exception {
- return new SimpleCursor(Query.QueryResult.newBuilder()
- .addFields(Query.Field.newBuilder().setName("TABLE_CAT").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("TABLE_SCHEM").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("TABLE_NAME").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("TABLE_TYPE").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("REMARKS").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("TYPE_CAT").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("TYPE_SCHEM").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("TYPE_NAME").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("SELF_REFERENCING_COL_NAME")
- .setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("REF_GENERATION").setType(Query.Type.VARCHAR))
- .addRows(Query.Row.newBuilder().addLengths("TestDB1".length()).addLengths("".length())
- .addLengths("SampleTable1".length()).addLengths("TABLE".length())
- .addLengths("".length()).addLengths("".length()).addLengths("".length())
- .addLengths("".length()).addLengths("".length()).addLengths("".length())
- .setValues(ByteString.copyFromUtf8("TestDB1sampleTable1TABLE"))).addRows(
- Query.Row.newBuilder().addLengths("TestDB1".length()).addLengths("".length())
- .addLengths("SampleView1".length()).addLengths("VIEW".length())
- .addLengths("".length()).addLengths("".length()).addLengths("".length())
- .addLengths("".length()).addLengths("".length()).addLengths("".length())
- .setValues(ByteString.copyFromUtf8("TestDB1SampleView1VIEW"))).addRows(
- Query.Row.newBuilder().addLengths("TestDB1".length()).addLengths("".length())
- .addLengths("SampleSystemView".length()).addLengths("SYSTEM VIEW".length())
- .addLengths("".length()).addLengths("".length()).addLengths("".length())
- .addLengths("".length()).addLengths("".length()).addLengths("".length())
- .setValues(ByteString.copyFromUtf8("TestDB2SampleSystemViewSYSTEM VIEW"))).addRows(
- Query.Row.newBuilder().addLengths("TestDB1".length()).addLengths("".length())
- .addLengths("SampleSystemTable".length()).addLengths("SYSTEM TABLE".length())
- .addLengths("".length()).addLengths("".length()).addLengths("".length())
- .addLengths("".length()).addLengths("".length()).addLengths("".length())
- .setValues(ByteString.copyFromUtf8("TestDB2SampleSystemTableSYSTEM TABLE")))
- .addRows(Query.Row.newBuilder().addLengths("TestDB1".length()).addLengths("".length())
- .addLengths("SampleLocalTemporary".length()).addLengths("LOCAL TEMPORARY".length())
- .addLengths("".length()).addLengths("".length()).addLengths("".length())
- .addLengths("".length()).addLengths("".length()).addLengths("".length())
- .setValues(ByteString.copyFromUtf8("TestDB2SampleLocalTemporaryLOCAL TEMPORARY")))
- .build());
- }
-
- @Test
- public void getColumnsTest() throws SQLException, Exception {
-
- String sql = "SHOW FULL COLUMNS FROM `sampleTable1` FROM `TestDB1` LIKE '%'";
- Cursor mockedTablecursor = new SimpleCursor(Query.QueryResult.newBuilder()
- .addFields(Query.Field.newBuilder().setName("TABLE_CAT").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("TABLE_SCHEM").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("TABLE_NAME").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("TABLE_TYPE").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("REMARKS").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("TYPE_CAT").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("TYPE_SCHEM").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("TYPE_NAME").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("SELF_REFERENCING_COL_NAME")
- .setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("REF_GENERATION").setType(Query.Type.VARCHAR))
- .addRows(Query.Row.newBuilder().addLengths("TestDB1".length()).addLengths("".length())
- .addLengths("sampleTable1".length()).addLengths("TABLE".length())
- .addLengths("".length()).addLengths("".length()).addLengths("".length())
- .addLengths("".length()).addLengths("".length()).addLengths("".length())
- .setValues(ByteString.copyFromUtf8("TestDB1sampleTable1TABLE"))).build());
-
- Cursor actualCursor = new SimpleCursor(Query.QueryResult.newBuilder()
- .addFields(Query.Field.newBuilder().setName("Field").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Type").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Collation").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Null").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Key").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Default").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Extra").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Privileges").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Comment").setType(Query.Type.VARCHAR)).addRows(
- Query.Row.newBuilder().addLengths("shipmentid".length()).addLengths("bigint".length())
- .addLengths("NULL".length()).addLengths("NO".length()).addLengths("PRI".length())
- .addLengths("NULL".length()).addLengths("".length())
- .addLengths("select,insert,update,references".length()).addLengths("".length())
- .setValues(ByteString
- .copyFromUtf8("shipmentidbigintNULLNOPRINULLselect,insert,update,references")))
- .addRows(
- Query.Row.newBuilder().addLengths("trackingid".length()).addLengths("varchar".length())
- .addLengths("utf8_general_ci".length()).addLengths("YES".length())
- .addLengths("".length()).addLengths("NULL".length()).addLengths("".length())
- .addLengths("select,insert,update,references".length()).addLengths("".length())
- .setValues(ByteString.copyFromUtf8(
- "trackingidvarcharutf8_general_ciYESNULLselect,insert,update,references")))
- .build());
- Cursor expectedCursor = new SimpleCursor(Query.QueryResult.newBuilder()
- .addFields(Query.Field.newBuilder().setName("TABLE_CAT").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("TABLE_SCHEM").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("TABLE_NAME").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("COLUMN_NAME").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("DATA_TYPE").setType(Query.Type.INT32))
- .addFields(Query.Field.newBuilder().setName("TYPE_NAME").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("COLUMN_SIZE").setType(Query.Type.INT32))
- .addFields(Query.Field.newBuilder().setName("BUFFER_LENGTH").setType(Query.Type.INT32))
- .addFields(Query.Field.newBuilder().setName("DECIMAL_DIGITS").setType(Query.Type.INT32))
- .addFields(Query.Field.newBuilder().setName("NUM_PREC_RADIX").setType(Query.Type.INT32))
- .addFields(Query.Field.newBuilder().setName("NULLABLE").setType(Query.Type.INT32))
- .addFields(Query.Field.newBuilder().setName("REMARKS").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("COLUMN_DEF").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("SQL_DATA_TYPE").setType(Query.Type.INT32))
- .addFields(Query.Field.newBuilder().setName("SQL_DATETIME_SUB").setType(Query.Type.INT32))
- .addFields(Query.Field.newBuilder().setName("CHAR_OCTET_LENGTH").setType(Query.Type.INT32))
- .addFields(Query.Field.newBuilder().setName("ORDINAL_POSITION").setType(Query.Type.INT32))
- .addFields(Query.Field.newBuilder().setName("ISNULLABLE").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("SCOPE_CATALOG").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("SCOPE_SCHEMA").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("SCOPE_TABLE").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("SOURCE_DATA_TYPE").setType(Query.Type.INT16))
- .addFields(Query.Field.newBuilder().setName("IS_AUTOINCREMENT").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("IS_GENERATEDCOLUMN").setType(Query.Type.CHAR))
- .addRows(Query.Row.newBuilder().addLengths("TestDB1".length()).addLengths(-1)
- .addLengths("sampleTable1".length()).addLengths("shipmentid".length())
- .addLengths("-5".length()).addLengths("BIGINT".length()).addLengths("19".length())
- .addLengths("65535".length()).addLengths("0".length()).addLengths("10".length())
- .addLengths("0".length()).addLengths("Comment".length()).addLengths("NULL".length())
- .addLengths("0".length()).addLengths("0".length()).addLengths("0".length())
- .addLengths("1".length()).addLengths("NO".length()).addLengths(-1).addLengths(-1)
- .addLengths(-1).addLengths(-1).addLengths("NO".length()).addLengths("NO".length())
- .setValues(ByteString.copyFromUtf8(
- "TestDB1sampleTable1shipmentid-5BIGINT19655350100CommentNULL0001NONONO"))).addRows(
- Query.Row.newBuilder().addLengths("TestDB1".length()).addLengths(-1)
- .addLengths("sampleTable1".length()).addLengths("trackingid".length())
- .addLengths("12".length()).addLengths("VARCHAR".length()).addLengths("255".length())
- .addLengths("65535".length()).addLengths(-1).addLengths("10".length())
- .addLengths("1".length()).addLengths("Comment".length()).addLengths("NULL".length())
- .addLengths("0".length()).addLengths("0".length()).addLengths("255".length())
- .addLengths("2".length()).addLengths("YES".length()).addLengths(-1).addLengths(-1)
- .addLengths(-1).addLengths(-1).addLengths("NO".length()).addLengths("NO".length())
- .setValues(ByteString.copyFromUtf8(
- "TestDB1sampleTable1trackingid12VARCHAR25565535101CommentNULL002552YESNONO")))
- .build());
-
- VitessStatement vitessStatement = PowerMockito.mock(VitessStatement.class);
- PowerMockito.whenNew(VitessStatement.class).withAnyArguments().thenReturn(vitessStatement);
- PowerMockito.when(vitessStatement.executeQuery(sql))
- .thenReturn(new VitessResultSet(actualCursor));
-
- VitessDatabaseMetaData vitessDatabaseMetaData = PowerMockito
- .mock(VitessMySQLDatabaseMetadata.class);
- PowerMockito.doCallRealMethod().when(vitessDatabaseMetaData)
- .getColumns("TestDB1", null, null, null);
- PowerMockito.when(vitessDatabaseMetaData.getTables("TestDB1", null, "%", new String[0]))
- .thenReturn(new VitessResultSet(mockedTablecursor));
- ResultSet actualResultSet = vitessDatabaseMetaData.getColumns("TestDB1", null, null, null);
- ResultSet expectedResultSet = new VitessResultSet(expectedCursor);
-
- assertResultSetEquals(actualResultSet, expectedResultSet);
- }
-
- @Test
- public void getPrimaryKeysTest() throws SQLException, Exception {
-
- String sql = "SHOW KEYS FROM `shipment` FROM `vt`";
- Cursor mockedCursor = new SimpleCursor(Query.QueryResult.newBuilder()
- .addFields(Query.Field.newBuilder().setName("TABLE").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Non_unique").setType(Query.Type.INT64))
- .addFields(Query.Field.newBuilder().setName("Key_name").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Seq_in_index").setType(Query.Type.INT64))
- .addFields(Query.Field.newBuilder().setName("Column_name").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Collation").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Cardinality").setType(Query.Type.INT64))
- .addFields(Query.Field.newBuilder().setName("Sub_part").setType(Query.Type.INT64))
- .addFields(Query.Field.newBuilder().setName("Packed").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Null").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Index_type").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Comment").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Index_comment").setType(Query.Type.VARCHAR))
- .addRows(Query.Row.newBuilder().addLengths("shipment".length()).addLengths("0".length())
- .addLengths("PRIMARY".length()).addLengths("1".length())
- .addLengths("shipmentid".length()).addLengths("A".length())
- .addLengths("434880".length()).addLengths(-1).addLengths(-1).addLengths("".length())
- .addLengths("BTREE".length()).addLengths("".length()).addLengths("".length())
- .setValues(ByteString.copyFromUtf8("shipment0PRIMARY1shipmentidA434880BTREE")))
- .build());
- Cursor expectedcursor = new SimpleCursor(Query.QueryResult.newBuilder()
- .addFields(Query.Field.newBuilder().setName("TABLE_CAT").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("TABLE_SCHEM").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("TABLE_NAME").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("COLUMN_NAME").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("KEY_SEQ").setType(Query.Type.INT16))
- .addFields(Query.Field.newBuilder().setName("PK_NAME").setType(Query.Type.CHAR)).addRows(
- Query.Row.newBuilder().addLengths("vt".length()).addLengths(-1)
- .addLengths("shipment".length()).addLengths("shipmentid".length())
- .addLengths("1".length()).addLengths("PRIMARY".length())
- .setValues(ByteString.copyFromUtf8("vtshipmentshipmentid1PRIMARY"))).build());
-
- VitessStatement vitessStatement = PowerMockito.mock(VitessStatement.class);
- VitessDatabaseMetaData vitessDatabaseMetaData = PowerMockito
- .mock(VitessMySQLDatabaseMetadata.class);
- PowerMockito.mock(VitessMySQLDatabaseMetadata.class);
- PowerMockito.doCallRealMethod().when(vitessDatabaseMetaData)
- .getPrimaryKeys("vt", null, "shipment");
- PowerMockito.whenNew(VitessStatement.class).withAnyArguments().thenReturn(vitessStatement);
- PowerMockito.when(vitessStatement.executeQuery(sql))
- .thenReturn(new VitessResultSet(mockedCursor));
- ResultSet expectedResultSet = vitessDatabaseMetaData.getPrimaryKeys("vt", null, "shipment");
- ResultSet actualResultSet = new VitessResultSet(expectedcursor);
-
- assertResultSetEquals(actualResultSet, expectedResultSet);
- }
-
- @Test
- public void getIndexInfoTest() throws SQLException, Exception {
-
- String sql = "SHOW INDEX FROM `shipment` FROM `vt`";
- Cursor mockedCursor = new SimpleCursor(Query.QueryResult.newBuilder()
- .addFields(Query.Field.newBuilder().setName("Table").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Non_unique").setType(Query.Type.INT64))
- .addFields(Query.Field.newBuilder().setName("Key_name").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Seq_in_index").setType(Query.Type.INT64))
- .addFields(Query.Field.newBuilder().setName("Column_name").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Collation").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Cardinality").setType(Query.Type.INT64))
- .addFields(Query.Field.newBuilder().setName("Sub_part").setType(Query.Type.INT64))
- .addFields(Query.Field.newBuilder().setName("Packed").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Null").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Index_type").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Comment").setType(Query.Type.VARCHAR))
- .addFields(Query.Field.newBuilder().setName("Index_comment").setType(Query.Type.VARCHAR))
- .addRows(Query.Row.newBuilder().addLengths("shipment".length()).addLengths("0".length())
- .addLengths("PRIMARY".length()).addLengths("1".length())
- .addLengths("shipmentid".length()).addLengths("A".length())
- .addLengths("434880".length()).addLengths(-1).addLengths(-1).addLengths("".length())
- .addLengths("BTREE".length()).addLengths("".length()).addLengths("".length())
- .setValues(ByteString.copyFromUtf8("shipment0PRIMARY1shipmentidA434880BTREE")))
- .build());
-
- Cursor expectedcursor = new SimpleCursor(Query.QueryResult.newBuilder()
- .addFields(Query.Field.newBuilder().setName("TABLE_CAT").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("TABLE_SCHEM").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("TABLE_NAME").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("Non_unique").setType(Query.Type.BIT))
- .addFields(Query.Field.newBuilder().setName("INDEX_QUALIFIER").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("INDEX_NAME").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("TYPE").setType(Query.Type.INT16))
- .addFields(Query.Field.newBuilder().setName("ORDINAL_POSITION").setType(Query.Type.INT16))
- .addFields(Query.Field.newBuilder().setName("COLUMN_NAME").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("ASC_OR_DESC").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("CARDINALITY").setType(Query.Type.INT32))
- .addFields(Query.Field.newBuilder().setName("PAGES").setType(Query.Type.INT32))
- .addFields(Query.Field.newBuilder().setName("FILTER_CONDITION").setType(Query.Type.CHAR))
- .addRows(Query.Row.newBuilder().addLengths("vt".length()).addLengths(-1)
- .addLengths("shipment".length()).addLengths("false".length()).addLengths("".length())
- .addLengths("PRIMARY".length()).addLengths("3".length()).addLengths("1".length())
- .addLengths("shipmentid".length()).addLengths("A".length())
- .addLengths("434880".length()).addLengths("0".length()).addLengths(-1)
- .setValues(ByteString.copyFromUtf8("vtshipmentfalsePRIMARY31shipmentidA4348800")))
- .build());
- VitessStatement vitessStatement = PowerMockito.mock(VitessStatement.class);
- VitessDatabaseMetaData vitessDatabaseMetaData = PowerMockito
- .mock(VitessMySQLDatabaseMetadata.class);
- PowerMockito.mock(VitessMySQLDatabaseMetadata.class);
- PowerMockito.doCallRealMethod().when(vitessDatabaseMetaData)
- .getIndexInfo("vt", null, "shipment", true, false);
- PowerMockito.whenNew(VitessStatement.class).withAnyArguments().thenReturn(vitessStatement);
- PowerMockito.when(vitessStatement.executeQuery(sql))
- .thenReturn(new VitessResultSet(mockedCursor));
- ResultSet actualResultSet = vitessDatabaseMetaData
- .getIndexInfo("vt", null, "shipment", true, false);
- ResultSet expectedResultSet = new VitessResultSet(expectedcursor);
-
- assertResultSetEquals(actualResultSet, expectedResultSet);
- }
-
- private void assertResultSetEquals(ResultSet actualResultSet, ResultSet expectedResultSet)
- throws SQLException {
- ResultSetMetaData actualResultSetMetadata = actualResultSet.getMetaData();
- ResultSetMetaData expectedResultSetMetadata = expectedResultSet.getMetaData();
- //Column Count Comparison
- Assert.assertEquals(expectedResultSetMetadata.getColumnCount(),
- actualResultSetMetadata.getColumnCount());
- //Column Type Comparison
- for (int i = 0; i < expectedResultSetMetadata.getColumnCount(); i++) {
- Assert.assertEquals(expectedResultSetMetadata.getColumnType(i + 1),
- actualResultSetMetadata.getColumnType(i + 1));
- }
-
- //Actual Values Comparison
- while (expectedResultSet.next() && actualResultSet.next()) {
- for (int i = 0; i < expectedResultSetMetadata.getColumnCount(); i++) {
- switch (expectedResultSetMetadata.getColumnType(i + 1)) {
- case Types.TINYINT:
- case Types.SMALLINT:
- case Types.INTEGER:
- Assert.assertEquals(expectedResultSet.getInt(i + 1), actualResultSet.getInt(i + 1));
- break;
- case Types.BIGINT:
- Assert.assertEquals(expectedResultSet.getLong(i + 1), actualResultSet.getLong(i + 1));
- break;
- case Types.FLOAT:
- Assert.assertEquals(expectedResultSet.getFloat(i + 1), actualResultSet.getFloat(i + 1),
- 0.1);
- break;
- case Types.DOUBLE:
- Assert
- .assertEquals(expectedResultSet.getDouble(i + 1), actualResultSet.getDouble(i + 1),
- 0.1);
- break;
- case Types.TIME:
- Assert.assertEquals(expectedResultSet.getTime(i + 1), actualResultSet.getTime(i + 1));
- break;
- case Types.TIMESTAMP:
- Assert.assertEquals(expectedResultSet.getTimestamp(i + 1),
- actualResultSet.getTimestamp(i + 1));
- break;
- case Types.DATE:
- Assert.assertEquals(expectedResultSet.getDate(i + 1), actualResultSet.getDate(i + 1));
- break;
- case Types.BLOB:
- Assert.assertEquals(expectedResultSet.getBlob(i + 1), actualResultSet.getBlob(i + 1));
- break;
- case Types.BINARY:
- case Types.LONGVARBINARY:
- Assert.assertEquals(expectedResultSet.getBytes(i + 1), actualResultSet.getBytes(i + 1));
- break;
- default:
- Assert
- .assertEquals(expectedResultSet.getString(i + 1), actualResultSet.getString(i + 1));
- break;
- }
- }
- }
- }
-
- @Test
- public void getUserNameTest() {
- try {
- VitessConnection vitessConnection = new VitessConnection(
- "jdbc:vitess://username@ip1:port1/keyspace", null);
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(
- vitessConnection);
- Assert.assertEquals("username", vitessDatabaseMetaData.getUserName());
-
- vitessConnection = new VitessConnection("jdbc:vitess://ip1:port1/keyspace", null);
- vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(vitessConnection);
- Assert.assertEquals(null, vitessDatabaseMetaData.getUserName());
-
- Properties properties = new Properties();
- properties.put(Constants.Property.USERNAME, "username");
- vitessConnection = new VitessConnection("jdbc:vitess://ip1:port1/keyspace", properties);
- vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(vitessConnection);
- Assert.assertEquals("username", vitessDatabaseMetaData.getUserName());
-
- } catch (SQLException e) {
- Assert.fail("Exception occurred: " + e.getMessage());
- }
- }
-
- @Test
- public void testCaseSensitivityIdentifierFuncsMySql() throws Exception {
- assertCaseSensitivityForDatabaseType(false);
- }
-
- @Test
- public void testCaseSensitivityIdentifierFuncsMariaDb() throws Exception {
- assertCaseSensitivityForDatabaseType(true);
- }
-
- private void assertCaseSensitivityForDatabaseType(boolean useMariaDb) throws Exception {
- VitessConnection connection = new VitessConnection("jdbc:vitess://username@ip1:port1/keyspace",
- null);
- mockStatementForLowercaseTablesValue("0", useMariaDb);
- Assert.assertEquals(true, connection.getMetaData().supportsMixedCaseIdentifiers());
- Assert.assertEquals(true, connection.getMetaData().supportsMixedCaseQuotedIdentifiers());
- Assert.assertEquals(false, connection.getMetaData().storesLowerCaseIdentifiers());
- Assert.assertEquals(true, connection.getMetaData().storesMixedCaseIdentifiers());
- Assert.assertEquals(false, connection.getMetaData().storesLowerCaseQuotedIdentifiers());
- Assert.assertEquals(true, connection.getMetaData().storesMixedCaseQuotedIdentifiers());
- connection.close();
-
- connection = new VitessConnection("jdbc:vitess://username@ip1:port1/keyspace", null);
- mockStatementForLowercaseTablesValue("1", useMariaDb);
- Assert.assertEquals(false, connection.getMetaData().supportsMixedCaseIdentifiers());
- Assert.assertEquals(false, connection.getMetaData().supportsMixedCaseQuotedIdentifiers());
- Assert.assertEquals(true, connection.getMetaData().storesLowerCaseIdentifiers());
- Assert.assertEquals(false, connection.getMetaData().storesMixedCaseIdentifiers());
- Assert.assertEquals(true, connection.getMetaData().storesLowerCaseQuotedIdentifiers());
- Assert.assertEquals(false, connection.getMetaData().storesMixedCaseQuotedIdentifiers());
- connection.close();
-
- connection = new VitessConnection("jdbc:vitess://username@ip1:port1/keyspace", null);
- mockStatementForLowercaseTablesValue("2", useMariaDb);
- Assert.assertEquals(false, connection.getMetaData().supportsMixedCaseIdentifiers());
- Assert.assertEquals(false, connection.getMetaData().supportsMixedCaseQuotedIdentifiers());
- Assert.assertEquals(false, connection.getMetaData().storesLowerCaseIdentifiers());
- Assert.assertEquals(true, connection.getMetaData().storesMixedCaseIdentifiers());
- Assert.assertEquals(false, connection.getMetaData().storesLowerCaseQuotedIdentifiers());
- Assert.assertEquals(true, connection.getMetaData().storesMixedCaseQuotedIdentifiers());
- connection.close();
-
- connection = new VitessConnection("jdbc:vitess://username@ip1:port1/keyspace", null);
- mockStatementForLowercaseTablesValue("something random", useMariaDb);
- Assert.assertEquals(true, connection.getMetaData().supportsMixedCaseIdentifiers());
- Assert.assertEquals(true, connection.getMetaData().supportsMixedCaseQuotedIdentifiers());
- Assert.assertEquals(false, connection.getMetaData().storesLowerCaseIdentifiers());
- Assert.assertEquals(true, connection.getMetaData().storesMixedCaseIdentifiers());
- Assert.assertEquals(false, connection.getMetaData().storesLowerCaseQuotedIdentifiers());
- Assert.assertEquals(true, connection.getMetaData().storesMixedCaseQuotedIdentifiers());
- connection.close();
- }
-
- private void mockStatementForLowercaseTablesValue(String lcTablesValue, boolean useMariaDb)
- throws Exception {
- String sql = "SHOW VARIABLES WHERE VARIABLE_NAME IN (\'tx_isolation\',\'INNODB_VERSION\', "
- + "\'lower_case_table_names\')";
- String versionName = "innodb_version";
- String versionValue = "5.7.16-10";
- if (useMariaDb) {
- versionValue = versionValue + "-mariadb";
- }
- String txIsoName = "tx_isolation";
- String txIsoValue = "REPEATABLE-READ";
- String lcTablesName = "lower_case_table_names";
-
- Cursor mockedCursor = new SimpleCursor(Query.QueryResult.newBuilder().addFields(
- Query.Field.newBuilder().setName("Variable_name").setType(Query.Type.VARCHAR).build())
- .addFields(Query.Field.newBuilder().setName("Value").setType(Query.Type.VARCHAR).build())
- .addRows(Query.Row.newBuilder().addLengths(versionName.length())
- .addLengths(versionValue.length())
- .setValues(ByteString.copyFromUtf8(versionName + versionValue))).addRows(
- Query.Row.newBuilder().addLengths(txIsoName.length()).addLengths(txIsoValue.length())
- .setValues(ByteString.copyFromUtf8(txIsoName + txIsoValue))).addRows(
- Query.Row.newBuilder().addLengths(lcTablesName.length())
- .addLengths(lcTablesValue.length())
- .setValues(ByteString.copyFromUtf8(lcTablesName + lcTablesValue))).build());
-
- VitessStatement vitessStatement = PowerMockito.mock(VitessStatement.class);
- PowerMockito.whenNew(VitessStatement.class).withAnyArguments().thenReturn(vitessStatement);
- PowerMockito.when(vitessStatement.executeQuery(sql))
- .thenReturn(new VitessResultSet(mockedCursor));
- }
-
- /**
- * Tests that we're properly stitching together the results of SHOW CREATE TABLE. See {@link
- * #extractForeignKeyForTableTest()} for more thorough testing of the actual parsing
- */
- @Test
- public void getImportedKeysTest() throws Exception {
- try (InputStream resourceAsStream = this.getClass()
- .getResourceAsStream("/getImportedKeysTestCase.sql")) {
- String table = "testA";
- String showCreate = CharStreams
- .toString(new InputStreamReader(resourceAsStream, Charsets.UTF_8));
-
- Query.QueryResult queryResult = Query.QueryResult.newBuilder()
- .addFields(Query.Field.newBuilder().setName("Table").setType(Query.Type.CHAR))
- .addFields(Query.Field.newBuilder().setName("Create Table").setType(Query.Type.CHAR))
- .addRows(Query.Row.newBuilder().addLengths(table.length()).addLengths(showCreate.length())
- .setValues(ByteString.copyFromUtf8(table + showCreate))).build();
-
- String sql = "SHOW CREATE TABLE `testA`";
- VitessConnection vitessConnection = new VitessConnection(
- "jdbc:vitess://username@ip1:port1/keyspace", null);
- VitessStatement vitessStatement = PowerMockito.spy(new VitessStatement(vitessConnection));
- PowerMockito.whenNew(VitessStatement.class).withAnyArguments().thenReturn(vitessStatement);
- PowerMockito.doReturn(new VitessResultSet(new SimpleCursor(queryResult), vitessStatement))
- .when(vitessStatement).executeQuery(sql);
-
- VitessDatabaseMetaData vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(
- vitessConnection);
- ResultSet importedKeys = vitessDatabaseMetaData.getImportedKeys("test", "test", "testA");
- importedKeys.next();
- Assert.assertEquals("test", importedKeys.getString("PKTABLE_CAT"));
- Assert.assertEquals(null, importedKeys.getString("PKTABLE_SCHEM"));
- Assert.assertEquals("fTable", importedKeys.getString("PKTABLE_NAME"));
- Assert.assertEquals("id", importedKeys.getString("PKCOLUMN_NAME"));
- Assert.assertEquals("test", importedKeys.getString("FKTABLE_CAT"));
- Assert.assertEquals(null, importedKeys.getString("FKTABLE_SCHEM"));
- Assert.assertEquals("testA", importedKeys.getString("FKTABLE_NAME"));
- Assert.assertEquals("fIdOne", importedKeys.getString("FKCOLUMN_NAME"));
- Assert.assertEquals(1, importedKeys.getInt("KEY_SEQ"));
- Assert.assertEquals(3, importedKeys.getInt("UPDATE_RULE"));
- Assert.assertEquals(3, importedKeys.getInt("DELETE_RULE"));
- Assert.assertEquals("fk_testA", importedKeys.getString("FK_NAME"));
- Assert.assertEquals(null, importedKeys.getString("PK_NAME"));
- Assert.assertEquals(7, importedKeys.getInt("DEFERRABILITY"));
- }
- }
-
- /**
- * Tests parsing all the various outputs of SHOW CREATE TABLE for the foreign key constraints.
- */
- @Test
- public void extractForeignKeyForTableTest() throws SQLException, IOException {
- VitessConnection vitessConnection = new VitessConnection(
- "jdbc:vitess://username@ip1:port1/keyspace", null);
- VitessMySQLDatabaseMetadata vitessDatabaseMetaData = new VitessMySQLDatabaseMetadata(
- vitessConnection);
-
- try (InputStream resourceAsStream = this.getClass()
- .getResourceAsStream("/extractForeignKeyForTableTestCases.sql")) {
- Scanner scanner = new Scanner(resourceAsStream);
- List> rows = new ArrayList<>();
- String testName = null;
- String testExpected = null;
- String testInput = "";
- String startTag = "-- name: ";
- String expectedTag = "-- expected: ";
- while (scanner.hasNextLine()) {
- String line = scanner.nextLine();
- if (line.startsWith(startTag)) {
- if (testName != null) {
- rows.clear();
- vitessDatabaseMetaData.extractForeignKeyForTable(rows, testInput, "test", "testA");
- assertForeignKeysOutput(testName, testExpected, rows);
- testInput = "";
- }
- testName = line.substring(startTag.length());
- } else if (line.startsWith(expectedTag)) {
- testExpected = line.substring(expectedTag.length());
- } else if (line.startsWith("--") || line.trim().isEmpty()) {
- // Just general comment or whitespace, we can ignore
- } else {
- testInput += line + "\n";
- }
- }
-
- rows.clear();
- vitessDatabaseMetaData.extractForeignKeyForTable(rows, testExpected, "test", "testA");
- assertForeignKeysOutput(testName, testExpected, rows);
- }
- }
-
- private void assertForeignKeysOutput(String testName, String expected,
- List> output) {
- // Uncomment below for debugging
- //System.out.println("Name: " + testName);
- //System.out.println("Expected: " + expected);
- //System.out.println("Output: " + String.valueOf(output));
- Assert.assertEquals(testName, expected, String.valueOf(output));
- }
-}
diff --git a/java/jdbc/src/test/java/io/vitess/jdbc/VitessParameterMetaDataTest.java b/java/jdbc/src/test/java/io/vitess/jdbc/VitessParameterMetaDataTest.java
deleted file mode 100644
index 8916063ffaf..00000000000
--- a/java/jdbc/src/test/java/io/vitess/jdbc/VitessParameterMetaDataTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2019 The Vitess Authors.
-
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://www.apache.org/licenses/LICENSE-2.0
-
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.vitess.jdbc;
-
-import java.sql.ParameterMetaData;
-import java.sql.SQLException;
-import java.sql.Types;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.internal.verification.VerificationModeFactory;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(VitessParameterMetaData.class)
-public class VitessParameterMetaDataTest {
-
- @Test
- public void testValidSimpleResponses() throws SQLException {
- VitessParameterMetaData metaData = new VitessParameterMetaData(5);
- Assert.assertEquals("parameterCount", 5, metaData.getParameterCount());
- Assert.assertEquals("parameterMode", ParameterMetaData.parameterModeIn,
- metaData.getParameterMode(2));
- Assert.assertEquals("parameterType", Types.VARCHAR, metaData.getParameterType(2));
- Assert.assertEquals("precision", 0, metaData.getPrecision(2));
- Assert.assertEquals("scale", 0, metaData.getScale(2));
- Assert
- .assertEquals("parameterClassName", "java.lang.String", metaData.getParameterClassName(2));
- Assert.assertEquals("parameterTypeName", "VARCHAR", metaData.getParameterTypeName(2));
- Assert.assertEquals("signed", false, metaData.isSigned(2));
- }
-
- @Test
- public void testOutOfBoundsValidation() {
- int parameterCount = 1;
- VitessParameterMetaData metaData = new VitessParameterMetaData(parameterCount);
-
- try {
- metaData.getParameterType(0);
- Assert.fail();
- } catch (SQLException e) {
- Assert.assertEquals("Parameter index of '0' is invalid.", e.getMessage());
- }
-
- int paramNumber = 2;
- try {
- metaData.getParameterType(paramNumber);
- Assert.fail();
- } catch (SQLException e) {
- Assert.assertEquals("Parameter index of '" + paramNumber
- + "' is greater than number of parameters, which is '" + parameterCount + "'.",
- e.getMessage());
- }
- }
-
- @Test
- public void testOutOfBoundCoverage() throws Exception {
- int param = 2;
- VitessParameterMetaData metaData = PowerMockito.spy(new VitessParameterMetaData(5));
-
- metaData.getParameterType(param);
- metaData.getPrecision(param);
- metaData.getScale(param);
- metaData.getParameterClassName(param);
- metaData.getParameterTypeName(param);
- metaData.isSigned(param);
-
- PowerMockito.verifyPrivate(metaData, VerificationModeFactory.times(6))
- .invoke("checkBounds", param);
- }
-
- @Test(expected = SQLException.class)
- public void testNullableNotAvailable() throws SQLException {
- VitessParameterMetaData metaData = new VitessParameterMetaData(5);
- metaData.isNullable(3);
- Assert.fail();
- }
-}
diff --git a/java/jdbc/src/test/java/io/vitess/jdbc/VitessPreparedStatementTest.java b/java/jdbc/src/test/java/io/vitess/jdbc/VitessPreparedStatementTest.java
deleted file mode 100644
index c5a9b4cbd33..00000000000
--- a/java/jdbc/src/test/java/io/vitess/jdbc/VitessPreparedStatementTest.java
+++ /dev/null
@@ -1,750 +0,0 @@
-/*
- * Copyright 2019 The Vitess Authors.
-
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- * http://www.apache.org/licenses/LICENSE-2.0
-
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.vitess.jdbc;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.nullable;
-import static org.mockito.Matchers.anyMap;
-import static org.mockito.Matchers.anyString;
-import static org.powermock.api.mockito.PowerMockito.mock;
-import static org.powermock.api.mockito.PowerMockito.when;
-
-import com.google.common.collect.ImmutableMap;
-
-import io.vitess.client.Context;
-import io.vitess.client.SQLFuture;
-import io.vitess.client.VTGateConnection;
-import io.vitess.client.VTSession;
-import io.vitess.client.cursor.Cursor;
-import io.vitess.client.cursor.CursorWithError;
-import io.vitess.mysql.DateTime;
-import io.vitess.proto.Query;
-import io.vitess.proto.Vtrpc;
-import io.vitess.util.Constants;
-
-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;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.sql.Time;
-import java.sql.Timestamp;
-import java.sql.Types;
-import java.util.ArrayList;
-import java.util.Calendar;
-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;
-import org.mockito.Matchers;
-import org.mockito.Mockito;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-
-/**
- * Created by harshit.gangal on 09/02/16.
- */
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({VTGateConnection.class, Vtrpc.RPCError.class})
-public class VitessPreparedStatementTest {
-
- private String sqlSelect = "select 1 from test_table";
- private String sqlShow = "show tables";
- private String sqlUpdate = "update test_table set msg = null";
- private String sqlInsert = "insert into test_table(msg) values (?)";
-
- @Test
- public void testStatementExecute() {
- VitessConnection mockConn = mock(VitessConnection.class);
- VitessPreparedStatement preparedStatement;
- try {
- preparedStatement = new VitessPreparedStatement(mockConn, sqlShow);
- preparedStatement.executeQuery(sqlSelect);
- fail("Should have thrown exception for calling this method");
- } catch (SQLException ex) {
- assertEquals("This method cannot be called using this class object", ex.getMessage());
- }
-
- try {
- preparedStatement = new VitessPreparedStatement(mockConn, sqlShow);
- preparedStatement.executeUpdate(sqlUpdate);
- fail("Should have thrown exception for calling this method");
- } catch (SQLException ex) {
- assertEquals("This method cannot be called using this class object", ex.getMessage());
- }
-
- try {
- preparedStatement = new VitessPreparedStatement(mockConn, sqlShow);
- preparedStatement.execute(sqlShow);
- fail("Should have thrown exception for calling this method");
- } catch (SQLException ex) {
- assertEquals("This method cannot be called using this class object", ex.getMessage());
- }
- }
-
- @Test
- public void testExecuteQuery() throws SQLException {
- VitessConnection mockConn = mock(VitessConnection.class);
- VTGateConnection mockVtGateConn = mock(VTGateConnection.class);
- Cursor mockCursor = mock(Cursor.class);
- SQLFuture mockSqlFutureCursor = mock(SQLFuture.class);
-
- when(mockConn.getVtGateConn()).thenReturn(mockVtGateConn);
- when(mockVtGateConn.execute(nullable(Context.class), nullable(String.class), nullable(Map.class), nullable(VTSession.class))).
- thenReturn(mockSqlFutureCursor);
- when(mockConn.getExecuteType()).thenReturn(Constants.QueryExecuteType.SIMPLE);
- when(mockConn.isSimpleExecute()).thenReturn(true);
- when(mockSqlFutureCursor.checkedGet()).thenReturn(mockCursor);
-
- VitessPreparedStatement preparedStatement;
- try {
-
- //Empty Sql Statement
- try {
- new VitessPreparedStatement(mockConn, "");
- fail("Should have thrown exception for empty sql");
- } catch (SQLException ex) {
- assertEquals("SQL statement is not valid", ex.getMessage());
- }
-
- //show query
- preparedStatement = new VitessPreparedStatement(mockConn, sqlShow);
- ResultSet rs = preparedStatement.executeQuery();
- assertEquals(-1, preparedStatement.getUpdateCount());
-
- //select on replica with bind variables
- preparedStatement = new VitessPreparedStatement(mockConn, sqlSelect,
- ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
- rs = preparedStatement.executeQuery();
- assertEquals(-1, preparedStatement.getUpdateCount());
-
- //select on replica without bind variables
- preparedStatement = new VitessPreparedStatement(mockConn, sqlSelect,
- ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
- rs = preparedStatement.executeQuery();
- assertEquals(-1, preparedStatement.getUpdateCount());
-
- //select on primary
- rs = preparedStatement.executeQuery();
- assertEquals(-1, preparedStatement.getUpdateCount());
-
- try {
- //when returned cursor is null
- when(mockSqlFutureCursor.checkedGet()).thenReturn(null);
- preparedStatement.executeQuery();
- fail("Should have thrown exception for cursor null");
- } catch (SQLException ex) {
- assertEquals("Failed to execute this method", ex.getMessage());
- }
-
- } catch (SQLException e) {
- fail("Test failed " + e.getMessage());
- }
- }
-
- @Test
- public void testExecuteQueryWithStream() throws SQLException {
- VitessConnection mockConn = mock(VitessConnection.class);
- VTGateConnection mockVtGateConn = mock(VTGateConnection.class);
- Cursor mockCursor = mock(Cursor.class);
- SQLFuture mockSqlFutureCursor = mock(SQLFuture.class);
-
- when(mockConn.getVtGateConn()).thenReturn(mockVtGateConn);
- when(mockVtGateConn
- .streamExecute(nullable(Context.class), nullable(String.class), nullable(Map.class), nullable(VTSession.class)))
- .thenReturn(mockCursor);
- when(mockVtGateConn.execute(nullable(Context.class), nullable(String.class), nullable(Map.class), nullable(VTSession.class)))
- .thenReturn(mockSqlFutureCursor);
- when(mockSqlFutureCursor.checkedGet()).thenReturn(mockCursor);
- when(mockConn.getExecuteType()).thenReturn(Constants.QueryExecuteType.STREAM);
-
- VitessPreparedStatement preparedStatement;
- try {
-
- //Empty Sql Statement
- try {
- new VitessPreparedStatement(mockConn, "");
- fail("Should have thrown exception for empty sql");
- } catch (SQLException ex) {
- assertEquals("SQL statement is not valid", ex.getMessage());
- }
-
- //show query
- preparedStatement = new VitessPreparedStatement(mockConn, sqlShow);
- ResultSet rs = preparedStatement.executeQuery();
- assertEquals(-1, preparedStatement.getUpdateCount());
-
- //select on replica with bind variables
- preparedStatement = new VitessPreparedStatement(mockConn, sqlSelect,
- ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
- rs = preparedStatement.executeQuery();
- assertEquals(-1, preparedStatement.getUpdateCount());
-
- //select on replica without bind variables
- preparedStatement = new VitessPreparedStatement(mockConn, sqlSelect,
- ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
- rs = preparedStatement.executeQuery();
- assertEquals(-1, preparedStatement.getUpdateCount());
-
- //select on primary
- rs = preparedStatement.executeQuery();
- assertEquals(-1, preparedStatement.getUpdateCount());
-
- try {
- //when returned cursor is null
- when(mockVtGateConn
- .streamExecute(nullable(Context.class), nullable(String.class), nullable(Map.class), nullable(VTSession.class)))
- .thenReturn(null);
- preparedStatement.executeQuery();
- fail("Should have thrown exception for cursor null");
- } catch (SQLException ex) {
- assertEquals("Failed to execute this method", ex.getMessage());
- }
-
- } catch (SQLException e) {
- fail("Test failed " + e.getMessage());
- }
- }
-
-
- @Test
- public void testExecuteUpdate() throws SQLException {
- VitessConnection mockConn = mock(VitessConnection.class);
- VTGateConnection mockVtGateConn = mock(VTGateConnection.class);
- Cursor mockCursor = mock(Cursor.class);
- SQLFuture mockSqlFutureCursor = mock(SQLFuture.class);
- List fieldList = mock(ArrayList.class);
-
- when(mockConn.getVtGateConn()).thenReturn(mockVtGateConn);
- when(mockVtGateConn.execute(nullable(Context.class), nullable(String.class), nullable(Map.class), nullable(VTSession.class)))
- .thenReturn(mockSqlFutureCursor);
- when(mockSqlFutureCursor.checkedGet()).thenReturn(mockCursor);
- when(mockCursor.getFields()).thenReturn(Query.QueryResult.getDefaultInstance().getFieldsList());
-
- VitessPreparedStatement preparedStatement;
- try {
-
- //executing dml on primary
- preparedStatement = new VitessPreparedStatement(mockConn, sqlUpdate,
- ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
- int updateCount = preparedStatement.executeUpdate();
- assertEquals(0, updateCount);
-
- //tx is null & autoCommit is true
- when(mockConn.getAutoCommit()).thenReturn(true);
- preparedStatement = new VitessPreparedStatement(mockConn, sqlUpdate);
- updateCount = preparedStatement.executeUpdate();
- assertEquals(0, updateCount);
-
- //cursor fields is not null
- when(mockCursor.getFields()).thenReturn(fieldList);
- when(fieldList.isEmpty()).thenReturn(false);
- try {
- preparedStatement.executeUpdate();
- fail("Should have thrown exception for field not null");
- } catch (SQLException ex) {
- assertEquals("ResultSet generation is not allowed through this method", ex.getMessage());
- }
-
- //cursor is null
- when(mockSqlFutureCursor.checkedGet()).thenReturn(null);
- try {
- preparedStatement.executeUpdate();
- fail("Should have thrown exception for cursor null");
- } catch (SQLException ex) {
- assertEquals("Failed to execute this method", ex.getMessage());
- }
-
- //read only
- when(mockConn.isReadOnly()).thenReturn(true);
- try {
- preparedStatement.executeUpdate();
- fail("Should have thrown exception for read only");
- } catch (SQLException ex) {
- assertEquals(Constants.SQLExceptionMessages.READ_ONLY, ex.getMessage());
- }
-
- //read only
- when(mockConn.isReadOnly()).thenReturn(true);
- try {
- preparedStatement.executeBatch();
- fail("Should have thrown exception for read only");
- } catch (SQLException ex) {
- assertEquals(Constants.SQLExceptionMessages.READ_ONLY, ex.getMessage());
- }
-
- } catch (SQLException e) {
- fail("Test failed " + e.getMessage());
- }
- }
-
- @Test
- public void testExecute() throws SQLException {
- VitessConnection mockConn = mock(VitessConnection.class);
- VTGateConnection mockVtGateConn = mock(VTGateConnection.class);
- Cursor mockCursor = mock(Cursor.class);
- SQLFuture mockSqlFutureCursor = mock(SQLFuture.class);
- List mockFieldList = PowerMockito.spy(new ArrayList<>());
-
- when(mockConn.getVtGateConn()).thenReturn(mockVtGateConn);
- when(mockVtGateConn.execute(nullable(Context.class), nullable(String.class), nullable(Map.class), nullable(VTSession.class)))
- .thenReturn(mockSqlFutureCursor);
- when(mockConn.getExecuteType()).thenReturn(Constants.QueryExecuteType.SIMPLE);
- when(mockConn.isSimpleExecute()).thenReturn(true);
-
- when(mockConn.getAutoCommit()).thenReturn(true);
-
- when(mockSqlFutureCursor.checkedGet()).thenReturn(mockCursor);
- when(mockCursor.getFields()).thenReturn(mockFieldList);
-
- VitessPreparedStatement preparedStatement = new VitessPreparedStatement(mockConn, sqlSelect,
- ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
- try {
-
- int fieldSize = 5;
- when(mockCursor.getFields()).thenReturn(mockFieldList);
- PowerMockito.doReturn(fieldSize).when(mockFieldList).size();
- PowerMockito.doReturn(false).when(mockFieldList).isEmpty();
- boolean hasResultSet = preparedStatement.execute();
- Assert.assertTrue(hasResultSet);
- Assert.assertNotNull(preparedStatement.getResultSet());
-
- preparedStatement = new VitessPreparedStatement(mockConn, sqlShow);
- hasResultSet = preparedStatement.execute();
- Assert.assertTrue(hasResultSet);
- Assert.assertNotNull(preparedStatement.getResultSet());
-
- int mockUpdateCount = 10;
- when(mockCursor.getFields())
- .thenReturn(Query.QueryResult.getDefaultInstance().getFieldsList());
- when(mockCursor.getRowsAffected()).thenReturn((long) mockUpdateCount);
- preparedStatement = new VitessPreparedStatement(mockConn, sqlUpdate);
- hasResultSet = preparedStatement.execute();
- Assert.assertFalse(hasResultSet);
- Assert.assertNull(preparedStatement.getResultSet());
- assertEquals(mockUpdateCount, preparedStatement.getUpdateCount());
-
- //cursor is null
- when(mockSqlFutureCursor.checkedGet()).thenReturn(null);
- try {
- preparedStatement = new VitessPreparedStatement(mockConn, sqlShow);
- preparedStatement.execute();
- fail("Should have thrown exception for cursor null");
- } catch (SQLException ex) {
- assertEquals("Failed to execute this method", ex.getMessage());
- }
-
- } catch (SQLException e) {
- fail("Test failed " + e.getMessage());
- }
- }
-
- @Test
- public void testExecuteFetchSizeAsStreaming() throws SQLException {
- testExecute(5, true, false, true);
- testExecute(5, false, false, true);
- testExecute(0, true, true, false);
- testExecute(0, false, false, true);
- }
-
- private void testExecute(int fetchSize, boolean simpleExecute, boolean shouldRunExecute,
- boolean shouldRunStreamExecute) throws SQLException {
- VTGateConnection mockVtGateConn = mock(VTGateConnection.class);
-
- VitessConnection mockConn = mock(VitessConnection.class);
- when(mockConn.isSimpleExecute()).thenReturn(simpleExecute);
- when(mockConn.getVtGateConn()).thenReturn(mockVtGateConn);
-
- Cursor mockCursor = mock(Cursor.class);
- SQLFuture mockSqlFutureCursor = mock(SQLFuture.class);
- when(mockSqlFutureCursor.checkedGet()).thenReturn(mockCursor);
-
- when(mockVtGateConn.execute(nullable(Context.class), nullable(String.class), nullable(Map.class), nullable(VTSession.class)))
- .thenReturn(mockSqlFutureCursor);
- when(mockVtGateConn
- .streamExecute(nullable(Context.class), nullable(String.class), nullable(Map.class), nullable(VTSession.class)))
- .thenReturn(mockCursor);
-
- VitessPreparedStatement statement = new VitessPreparedStatement(mockConn, sqlSelect);
- statement.setFetchSize(fetchSize);
- statement.executeQuery();
-
- if (shouldRunExecute) {
- Mockito.verify(mockVtGateConn, Mockito.times(2))
- .execute(nullable(Context.class), nullable(String.class), nullable(Map.class), nullable(VTSession.class));
- }
-
- if (shouldRunStreamExecute) {
- Mockito.verify(mockVtGateConn)
- .streamExecute(nullable(Context.class), nullable(String.class), nullable(Map.class), nullable(VTSession.class));
- }
- }
-
- @Test
- public void testGetUpdateCount() throws SQLException {
- VitessConnection mockConn = mock(VitessConnection.class);
- VTGateConnection mockVtGateConn = mock(VTGateConnection.class);
- Cursor mockCursor = mock(Cursor.class);
- SQLFuture mockSqlFuture = mock(SQLFuture.class);
-
- when(mockConn.getVtGateConn()).thenReturn(mockVtGateConn);
- when(mockVtGateConn.execute(nullable(Context.class), nullable(String.class), nullable(Map.class), nullable(VTSession.class)))
- .thenReturn(mockSqlFuture);
- when(mockSqlFuture.checkedGet()).thenReturn(mockCursor);
- when(mockCursor.getFields()).thenReturn(Query.QueryResult.getDefaultInstance().getFieldsList());
-
- VitessPreparedStatement preparedStatement = new VitessPreparedStatement(mockConn, sqlSelect);
- try {
-
- when(mockCursor.getRowsAffected()).thenReturn(10L);
- int updateCount = preparedStatement.executeUpdate();
- assertEquals(10L, updateCount);
- assertEquals(10L, preparedStatement.getUpdateCount());
-
- // Truncated Update Count
- when(mockCursor.getRowsAffected()).thenReturn((long) Integer.MAX_VALUE + 10);
- updateCount = preparedStatement.executeUpdate();
- assertEquals(Integer.MAX_VALUE, updateCount);
- assertEquals(Integer.MAX_VALUE, preparedStatement.getUpdateCount());
-
- when(mockConn.isSimpleExecute()).thenReturn(true);
- preparedStatement.executeQuery();
- assertEquals(-1, preparedStatement.getUpdateCount());
-
- } catch (SQLException e) {
- fail("Test failed " + e.getMessage());
- }
- }
-
- @Test
- public void testSetParameters() throws Exception {
- VitessConnection mockConn = mock(VitessConnection.class);
- Mockito.when(mockConn.getTreatUtilDateAsTimestamp()).thenReturn(true);
- VitessPreparedStatement preparedStatement = new VitessPreparedStatement(mockConn, sqlSelect);
- Boolean boolValue = true;
- Byte byteValue = Byte.MAX_VALUE;
- Short shortValue = Short.MAX_VALUE;
- Integer intValue = Integer.MAX_VALUE;
- Long longValue = Long.MAX_VALUE;
- Float floatValue = Float.MAX_VALUE;
- 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);
- // Use a time value that won't go negative after adjusting for time zone.
- // The java.sql.Time class does not properly format negative times.
- Time timeValue = new Time(12 * 60 * 60 * 1000);
- Timestamp timestampValue = new Timestamp(0);
-
- preparedStatement.setNull(1, Types.INTEGER);
- preparedStatement.setBoolean(2, boolValue);
- preparedStatement.setByte(3, byteValue);
- preparedStatement.setShort(4, shortValue);
- preparedStatement.setInt(5, intValue);
- preparedStatement.setLong(6, longValue);
- preparedStatement.setFloat(7, floatValue);
- preparedStatement.setDouble(8, doubleValue);
- preparedStatement.setBigDecimal(9, bigDecimalValue);
- 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(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 bindVariables = (Map) bindVariablesMap
- .get(preparedStatement);
- assertEquals(null, bindVariables.get("v1"));
- assertEquals(boolValue, bindVariables.get("v2"));
- assertEquals(byteValue, bindVariables.get("v3"));
- assertEquals(shortValue, bindVariables.get("v4"));
- assertEquals(intValue, bindVariables.get("v5"));
- assertEquals(longValue, bindVariables.get("v6"));
- assertEquals(floatValue, bindVariables.get("v7"));
- assertEquals(doubleValue, bindVariables.get("v8"));
- assertEquals(bigDecimalValue, bindVariables.get("v9"));
- assertEquals(bigIntegerValue, bindVariables.get("v10"));
- assertEquals(stringValue, bindVariables.get("v11"));
- assertEquals(bytesValue, bindVariables.get("v12"));
- assertEquals(dateValue.toString(), bindVariables.get("v13"));
- assertEquals(timeValue.toString(), bindVariables.get("v14"));
- assertEquals(timestampValue.toString(), bindVariables.get("v15"));
- assertEquals(dateValue.toString(), bindVariables.get("v16"));
- assertEquals(timeValue.toString(), bindVariables.get("v17"));
- assertEquals(timestampValue.toString(), bindVariables.get("v18"));
- assertEquals(boolValue, bindVariables.get("v19"));
- assertEquals(byteValue, bindVariables.get("v20"));
- assertEquals(shortValue, bindVariables.get("v21"));
- assertEquals(intValue, bindVariables.get("v22"));
- assertEquals(longValue, bindVariables.get("v23"));
- assertEquals(floatValue, bindVariables.get("v24"));
- assertEquals(doubleValue, bindVariables.get("v25"));
- assertEquals(bigDecimalValue, bindVariables.get("v26"));
- assertEquals(bigIntegerValue, bindVariables.get("v27"));
- assertEquals(stringValue, bindVariables.get("v28"));
- assertEquals(dateValue.toString(), bindVariables.get("v29"));
- assertEquals(timeValue.toString(), bindVariables.get("v30"));
- assertEquals(timestampValue.toString(), bindVariables.get("v31"));
- assertEquals("a", bindVariables.get("v32"));
- assertEquals(null, bindVariables.get("v33"));
- assertEquals(true, bindVariables.get("v34"));
- assertEquals(shortValue.intValue(), bindVariables.get("v35"));
- assertEquals(longValue, bindVariables.get("v36"));
- assertEquals((double) floatValue, (double) bindVariables.get("v37"), 0.1);
- assertEquals(doubleValue, (double) bindVariables.get("v38"), 0.1);
- assertEquals(expectedDecimalValue, bindVariables.get("v39"));
- assertEquals(stringValue, bindVariables.get("v40"));
- assertEquals(dateValue.toString(), bindVariables.get("v41"));
- assertEquals(timeValue.toString(), bindVariables.get("v42"));
- assertEquals(timestampValue.toString(), bindVariables.get("v43"));
- assertEquals("clob", bindVariables.get("v44"));
- Assert.assertArrayEquals(bytesValue, (byte[]) bindVariables.get("v45"));
-
- preparedStatement.clearParameters();
- }
-
- @Test
- public void testTreatUtilDateAsTimestamp() throws Exception {
- VitessConnection mockConn = mock(VitessConnection.class);
- VitessPreparedStatement preparedStatement = new VitessPreparedStatement(mockConn, sqlSelect);
-
- java.util.Date utilDateValue = new java.util.Date(System.currentTimeMillis());
- Timestamp timestamp = new Timestamp(utilDateValue.getTime());
- try {
- preparedStatement.setObject(1, utilDateValue);
- fail("setObject on java.util.Date should have failed with SQLException");
- } catch (SQLException e) {
- Assert.assertTrue(e.getMessage().startsWith(Constants.SQLExceptionMessages.SQL_TYPE_INFER));
- }
-
- preparedStatement.clearParameters();
-
- Mockito.when(mockConn.getTreatUtilDateAsTimestamp()).thenReturn(true);
- preparedStatement = new VitessPreparedStatement(mockConn, sqlSelect);
- preparedStatement.setObject(1, utilDateValue);
-
- Field bindVariablesMap = preparedStatement.getClass().getDeclaredField("bindVariables");
- bindVariablesMap.setAccessible(true);
- Map bindVariables = (Map) bindVariablesMap
- .get(preparedStatement);
-
- assertEquals(DateTime.formatTimestamp(timestamp), bindVariables.get("v1"));
- }
-
- @Test
- public void testAutoGeneratedKeys() throws SQLException {
- VitessConnection mockConn = mock(VitessConnection.class);
- VTGateConnection mockVtGateConn = mock(VTGateConnection.class);
- Cursor mockCursor = mock(Cursor.class);
- SQLFuture mockSqlFutureCursor = mock(SQLFuture.class);
-
- when(mockConn.getVtGateConn()).thenReturn(mockVtGateConn);
- when(mockVtGateConn.execute(nullable(Context.class), nullable(String.class), nullable(Map.class), nullable(VTSession.class)))
- .thenReturn(mockSqlFutureCursor);
- when(mockSqlFutureCursor.checkedGet()).thenReturn(mockCursor);
- when(mockCursor.getFields()).thenReturn(Query.QueryResult.getDefaultInstance().getFieldsList());
-
- try {
-
- long expectedFirstGeneratedId = 121;
- long[] expectedGeneratedIds = {121, 122};
- int expectedAffectedRows = 2;
- when(mockCursor.getInsertId()).thenReturn(expectedFirstGeneratedId);
- when(mockCursor.getRowsAffected()).thenReturn(Long.valueOf(expectedAffectedRows));
-
- //Executing Insert Statement
- VitessPreparedStatement preparedStatement = new VitessPreparedStatement(mockConn, sqlInsert,
- Statement.RETURN_GENERATED_KEYS);
- int updateCount = preparedStatement.executeUpdate();
- assertEquals(expectedAffectedRows, updateCount);
-
- ResultSet rs = preparedStatement.getGeneratedKeys();
- int i = 0;
- while (rs.next()) {
- long generatedId = rs.getLong(1);
- assertEquals(expectedGeneratedIds[i++], generatedId);
- }
-
- } catch (SQLException e) {
- fail("Test failed " + e.getMessage());
- }
- }
-
- @Test
- public void testAddBatch() throws SQLException {
- VitessConnection mockConn = mock(VitessConnection.class);
- VitessPreparedStatement statement = new VitessPreparedStatement(mockConn, sqlInsert);
- try {
- statement.addBatch(this.sqlInsert);
- fail("Should have thrown Exception");
- } catch (SQLException ex) {
- assertEquals(Constants.SQLExceptionMessages.METHOD_NOT_ALLOWED, ex.getMessage());
- }
- statement.setString(1, "string1");
- statement.addBatch();
- try {
- Field privateStringField = VitessPreparedStatement.class.getDeclaredField("batchedArgs");
- privateStringField.setAccessible(true);
- assertEquals("string1",
- (((List