Skip to content

Commit f41ab40

Browse files
authored
[GITHUB-1559] Added test for issue #1559 (#1560)
Code fix is in TIBCOSoftware/snappy-store#565 Reference: #1559
1 parent 96f9a37 commit f41ab40

4 files changed

Lines changed: 85 additions & 19 deletions

File tree

cluster/src/test/scala/org/apache/spark/sql/store/SQLMetadataTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class SQLMetadataTest extends SnappyFunSuite {
6060
try {
6161
val stmt = conn.createStatement()
6262
MetadataTest.testDescribeShowAndExplain(SnappyFunSuite.resultSetToDataset(session, stmt),
63-
usingJDBC = true, PlanCaching.get(session.sessionState.conf))
63+
stmt, PlanCaching.get(session.sessionState.conf))
6464
stmt.close()
6565
} finally {
6666
conn.close()

core/src/dunit/scala/io/snappydata/cluster/SplitClusterDUnitTestBase.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -318,15 +318,15 @@ trait SplitClusterDUnitTestObject extends Logging {
318318
MetadataTest.testSYSTablesAndVTIs(session.sql,
319319
hostName = "localhost", netServers, locatorId, locatorNetServer, servers, leadId)
320320
val planCaching = PlanCaching.get(session.sessionState.conf)
321-
MetadataTest.testDescribeShowAndExplain(session.sql, usingJDBC = false, planCaching)
321+
MetadataTest.testDescribeShowAndExplain(session.sql, jdbcStmt = null, planCaching)
322322
MetadataTest.testDSIDWithSYSTables(session.sql,
323323
netServers, locatorId, locatorNetServer, servers, leadId)
324324
// next test metadata using JDBC connection
325325
stmt = jdbcConn.createStatement()
326326
MetadataTest.testSYSTablesAndVTIs(SnappyFunSuite.resultSetToDataset(session, stmt),
327327
hostName = "localhost", netServers, locatorId, locatorNetServer, servers, leadId)
328328
MetadataTest.testDescribeShowAndExplain(SnappyFunSuite.resultSetToDataset(session, stmt),
329-
usingJDBC = true , planCaching)
329+
stmt, planCaching)
330330
MetadataTest.testDSIDWithSYSTables(SnappyFunSuite.resultSetToDataset(session, stmt),
331331
netServers, locatorId, locatorNetServer, servers, leadId)
332332

core/src/test/scala/org/apache/spark/sql/store/MetadataTest.scala

Lines changed: 81 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class MetadataTest extends SnappyFunSuite {
4343
test("DESCRIBE, SHOW and EXPLAIN") {
4444
val session = this.snc.snappySession
4545
val planCaching = io.snappydata.Property.PlanCaching.get(session.sessionState.conf)
46-
MetadataTest.testDescribeShowAndExplain(session.sql, usingJDBC = false, planCaching)
46+
MetadataTest.testDescribeShowAndExplain(session.sql, jdbcStmt = null, planCaching)
4747
}
4848

4949
test("DSID joins with SYS tables") {
@@ -367,7 +367,7 @@ object MetadataTest extends Assertions {
367367
}
368368

369369
def testDescribeShowAndExplain(executeSQL: String => Dataset[Row],
370-
usingJDBC: Boolean, planCachingEnabled: Boolean): Unit = {
370+
jdbcStmt: java.sql.Statement, planCachingEnabled: Boolean): Unit = {
371371
var ds: Dataset[Row] = null
372372
var expectedColumns: List[String] = null
373373
var rs: Array[Row] = null
@@ -618,6 +618,72 @@ object MetadataTest extends Assertions {
618618
rs = executeSQL("show tblproperties columnTable2").collect()
619619
checkTableProperties(rs, isRowTable = false)
620620

621+
// ----- check ResultSet metadata is case-insensitive (GITHUB #1559) -----
622+
623+
executeSQL("insert into rowTable1 select id, 'data_' || id from range(1000)")
624+
executeSQL("insert into columnTable2 select id, 'data_' || id, id + 1.1 from range(1000)")
625+
if (jdbcStmt != null) {
626+
var numResults = 0
627+
var resultSet = jdbcStmt.executeQuery("select * from rowTable1 order by id")
628+
while (resultSet.next()) {
629+
val expectedData = "data_" + numResults
630+
assert(resultSet.getInt(1) === numResults)
631+
assert(resultSet.getInt("id") === numResults)
632+
assert(resultSet.getInt("ID") === numResults)
633+
assert(resultSet.getInt("Id") === numResults)
634+
assert(resultSet.getInt("rowtable1.id") === numResults)
635+
assert(resultSet.getInt("ROWTABLE1.ID") === numResults)
636+
assert(resultSet.getInt("rowTable1.Id") === numResults)
637+
638+
assert(resultSet.getString(2) === expectedData)
639+
assert(resultSet.getString("data") === expectedData)
640+
assert(resultSet.getString("DATA") === expectedData)
641+
assert(resultSet.getString("Data") === expectedData)
642+
assert(resultSet.getString("rowtable1.data") === expectedData)
643+
assert(resultSet.getString("ROWTABLE1.DATA") === expectedData)
644+
assert(resultSet.getString("rowTable1.Data") === expectedData)
645+
646+
numResults += 1
647+
}
648+
assert(numResults === 1000)
649+
650+
numResults = 0
651+
resultSet = jdbcStmt.executeQuery("select * from columnTable2 order by id")
652+
while (resultSet.next()) {
653+
assert(resultSet.getInt(1) === numResults)
654+
assert(resultSet.getInt("id") === numResults)
655+
assert(resultSet.getInt("ID") === numResults)
656+
assert(resultSet.getInt("Id") === numResults)
657+
assert(resultSet.getInt("columntable2.id") === numResults)
658+
assert(resultSet.getInt("COLUMNTABLE2.ID") === numResults)
659+
assert(resultSet.getInt("columnTable2.Id") === numResults)
660+
661+
val expectedData = "data_" + numResults
662+
assert(resultSet.getString(2) === expectedData)
663+
assert(resultSet.getString("data") === expectedData)
664+
assert(resultSet.getString("DATA") === expectedData)
665+
assert(resultSet.getString("Data") === expectedData)
666+
assert(resultSet.getString("columntable2.data") === expectedData)
667+
assert(resultSet.getString("COLUMNTABLE2.DATA") === expectedData)
668+
assert(resultSet.getString("columnTable2.Data") === expectedData)
669+
670+
val expectedData2 = new java.math.BigDecimal(numResults).add(
671+
new java.math.BigDecimal("1.1")).setScale(18)
672+
assert(resultSet.getBigDecimal(3) === expectedData2)
673+
assert(resultSet.getBigDecimal("data2") === expectedData2)
674+
assert(resultSet.getBigDecimal("DATA2") === expectedData2)
675+
assert(resultSet.getBigDecimal("Data2") === expectedData2)
676+
assert(resultSet.getBigDecimal("columnTable2.data2") === expectedData2)
677+
assert(resultSet.getBigDecimal("COLUMNTABLE2.DATA2") === expectedData2)
678+
assert(resultSet.getBigDecimal("columntable2.Data2") === expectedData2)
679+
680+
numResults += 1
681+
}
682+
assert(numResults === 1000)
683+
}
684+
executeSQL("delete from rowTable1")
685+
executeSQL("delete from columnTable2")
686+
621687
// ----- check EXPLAIN for row tables -----
622688

623689
var plan: String = null
@@ -627,7 +693,7 @@ object MetadataTest extends Assertions {
627693
plan = rs(0).getString(0)
628694
// check schema of the returned Dataset which should be a single string column
629695
// for JDBC it should be a CLOB column
630-
if (usingJDBC) {
696+
if (jdbcStmt != null) {
631697
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true,
632698
getMetadata("plan", 0, "CLOB")))))
633699
} else {
@@ -641,15 +707,15 @@ object MetadataTest extends Assertions {
641707
rs = ds.collect()
642708
assert(rs.length === 1)
643709
plan = rs(0).getString(0)
644-
if (usingJDBC) {
710+
if (jdbcStmt != null) {
645711
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true,
646712
getMetadata("plan", 0, "CLOB")))))
647713
} else {
648714
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true))))
649715
}
650716

651717
def literalString(value: String): String = {
652-
if (planCachingEnabled || usingJDBC) {
718+
if (planCachingEnabled || jdbcStmt != null) {
653719
s"ParamLiteral:0,[0-9#]*,$value"
654720
} else {
655721
value
@@ -667,7 +733,7 @@ object MetadataTest extends Assertions {
667733
rs = ds.collect()
668734
assert(rs.length === 1)
669735
plan = rs(0).getString(0)
670-
if (usingJDBC) {
736+
if (jdbcStmt != null) {
671737
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = false,
672738
getMetadata("plan", 0, "CLOB")))))
673739
assert(plan.contains("stmt_id"))
@@ -684,7 +750,7 @@ object MetadataTest extends Assertions {
684750
rs = ds.collect()
685751
assert(rs.length === 1)
686752
plan = rs(0).getString(0)
687-
if (usingJDBC) {
753+
if (jdbcStmt != null) {
688754
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true,
689755
getMetadata("plan", 0, "CLOB")))))
690756
} else {
@@ -704,7 +770,7 @@ object MetadataTest extends Assertions {
704770
rs = ds.collect()
705771
assert(rs.length === 1)
706772
plan = rs(0).getString(0)
707-
if (usingJDBC) {
773+
if (jdbcStmt != null) {
708774
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true,
709775
getMetadata("plan", 0, "CLOB")))))
710776
} else {
@@ -719,7 +785,7 @@ object MetadataTest extends Assertions {
719785
rs = ds.collect()
720786
assert(rs.length === 1)
721787
plan = rs(0).getString(0)
722-
if (usingJDBC) {
788+
if (jdbcStmt != null) {
723789
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true,
724790
getMetadata("plan", 0, "CLOB")))))
725791
} else {
@@ -739,7 +805,7 @@ object MetadataTest extends Assertions {
739805
rs = ds.collect()
740806
assert(rs.length === 1)
741807
plan = rs(0).getString(0)
742-
if (usingJDBC) {
808+
if (jdbcStmt != null) {
743809
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true,
744810
getMetadata("plan", 0, "CLOB")))))
745811
} else {
@@ -817,7 +883,7 @@ object MetadataTest extends Assertions {
817883
plan = rs(0).getString(0)
818884
// check schema of the returned Dataset which should be a single string column
819885
// for JDBC it should be a CLOB column
820-
if (usingJDBC) {
886+
if (jdbcStmt != null) {
821887
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true,
822888
getMetadata("plan", 0, "CLOB")))))
823889
} else {
@@ -831,7 +897,7 @@ object MetadataTest extends Assertions {
831897
rs = ds.collect()
832898
assert(rs.length === 1)
833899
plan = rs(0).getString(0)
834-
if (usingJDBC) {
900+
if (jdbcStmt != null) {
835901
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true,
836902
getMetadata("plan", 0, "CLOB")))))
837903
} else {
@@ -848,7 +914,7 @@ object MetadataTest extends Assertions {
848914
rs = ds.collect()
849915
assert(rs.length === 1)
850916
plan = rs(0).getString(0)
851-
if (usingJDBC) {
917+
if (jdbcStmt != null) {
852918
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = false,
853919
getMetadata("plan", 0, "CLOB")))))
854920
assert(plan.contains("stmt_id"))
@@ -869,7 +935,7 @@ object MetadataTest extends Assertions {
869935
rs = ds.collect()
870936
assert(rs.length === 1)
871937
plan = rs(0).getString(0)
872-
if (usingJDBC) {
938+
if (jdbcStmt != null) {
873939
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true,
874940
getMetadata("plan", 0, "CLOB")))))
875941
} else {
@@ -883,7 +949,7 @@ object MetadataTest extends Assertions {
883949
rs = ds.collect()
884950
assert(rs.length === 1)
885951
plan = rs(0).getString(0)
886-
if (usingJDBC) {
952+
if (jdbcStmt != null) {
887953
assert(ds.schema === StructType(Array(StructField("plan", StringType, nullable = true,
888954
getMetadata("plan", 0, "CLOB")))))
889955
} else {

0 commit comments

Comments
 (0)