Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generic support for INSERT/PUT ... VALUES with partial column spec #1394

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ package io.snappydata.cluster

import java.io.File
import java.math.BigDecimal
import java.sql.{Connection, DatabaseMetaData, DriverManager, PreparedStatement, ResultSet, SQLException, Statement}
import java.sql.{Connection, DatabaseMetaData, DriverManager, ResultSet, SQLException, Statement}

import scala.collection.JavaConverters._
import scala.collection.mutable
Expand All @@ -33,7 +33,6 @@ import io.snappydata.Property
import io.snappydata.test.dunit.{AvailablePortHelper, SerializableRunnable}
import org.apache.commons.io.FileUtils
import org.junit.Assert
import org.junit.Assert.assertEquals

import org.apache.spark.Logging
import org.apache.spark.sql.collection.Utils
Expand Down Expand Up @@ -1049,240 +1048,15 @@ class QueryRoutingDUnitTest(val s: String)
}
}

def testSNAP2707withPreparedStatement(): Unit = {
def testSNAP2707_SNAP3038withPreparedStatement(): Unit = {
val netPort1 = AvailablePortHelper.getRandomAvailableTCPPort
vm2.invoke(classOf[ClusterManagerTestBase], "startNetServer", netPort1)
val conn = getANetConnection(netPort1)
val stmt = conn.createStatement()
val snc = SnappyContext(sc)
stmt.execute("drop table if exists t1")
stmt.execute("create table t1(id integer, str string) using column options" +
"(key_columns 'id', COLUMN_MAX_DELTA_ROWS '7', BUCKETS '2')")
var ps: PreparedStatement = null
for (i <- 1 to 10) {
snc.sql("insert into t1 values(" + i + ",'str" + i + "')")
}

var rscnt = stmt.executeQuery("select count(*) from t1")
rscnt.next()
assertEquals(10, rscnt.getInt(1))

val rs = stmt.executeQuery("select * from t1 order by id")
var i = 1
while (rs.next()) {
assertEquals(i, rs.getInt(1))
assertEquals("str" + i, rs.getString(2))
i = i + 1
}

val query2 = "put into t1 values(?,?)"
ps = conn.prepareStatement(query2)
for (i <- 1 to 20) {
ps.setInt(1, i)
ps.setString(2, "str_" + i)
ps.executeUpdate()
}
var rscnt2 = stmt.executeQuery("select count(*) from t1")
rscnt2.next()
assertEquals(20, rscnt2.getInt(1))

val rs2 = stmt.executeQuery("select * from t1 order by id")
var i2 = 0
while (rs.next()) {
assertEquals(i2, rs2.getInt(1))
assertEquals("str_" + i2, rs2.getString(2))
i2 = i2 + 1
}

val query1 = "put into t1 values(?,?)"
ps = conn.prepareStatement(query1)
for (i <- 1 to 30) {
ps.setInt(1, i)
ps.setString(2, "strings_" + i)
ps.addBatch()
if (i % 10 == 0) {
ps.executeBatch()
}
}
ps.executeBatch()

var rscnt1 = stmt.executeQuery("select count(*) from t1")
rscnt1.next()
assertEquals(30, rscnt1.getInt(1))

val rs1 = stmt.executeQuery("select * from t1 order by id")
var i1 = 1
while (rs1.next()) {
assertEquals(i1, rs1.getInt(1))
assertEquals("strings_" + i1, rs1.getString(2))
i1 = i1 + 1
}

val query3 = "put into t1(id,str) values(?,?)"
ps = conn.prepareStatement(query3)
for (i <- 11 to 20) {
ps.setInt(1, i)
ps.setString(2, "str123_" + i)
ps.addBatch()
if (i % 10 == 0) {
ps.executeBatch()
}
}
ps.executeBatch()

var rscnt3 = stmt.executeQuery("select count(*) from t1")
rscnt3.next()
assertEquals(30, rscnt3.getInt(1))

val rs3 = stmt.executeQuery("select * from t1 where id >= 11 and id <= 20 order by id")
var i3 = 11
while (rs3.next()) {
assertEquals(i3, rs3.getInt(1))
assertEquals("str123_" + i3, rs3.getString(2))
i3 = i3 + 1
}

val query4 = "put into t1(id) values(?)"
ps = conn.prepareStatement(query4)
for (i <- 31 to 40) {
ps.setInt(1, i)
ps.addBatch()
if (i % 10 == 0) {
ps.executeBatch()
}
}
ps.executeBatch()

var rscnt4 = stmt.executeQuery("select count(*) from t1")
rscnt4.next()
assertEquals(40, rscnt4.getInt(1))

val rs4 = stmt.executeQuery("select * from t1 where id >= 31 and id <= 40 order by id")
var i4 = 31
while (rs4.next()) {
assertEquals(i4, rs4.getInt(1))
assertEquals(null, rs4.getString(2))
i4 = i4 + 1
}
}

def testSNAP3038withPreparedStatement(): Unit = {
val netPort1 = AvailablePortHelper.getRandomAvailableTCPPort
vm2.invoke(classOf[ClusterManagerTestBase], "startNetServer", netPort1)
val conn = getANetConnection(netPort1)
val stmt = conn.createStatement()
val snc = SnappyContext(sc)
stmt.execute("drop schema if exists std1")
stmt.execute("create schema std1")
stmt.execute("drop table if exists std1.t1")
stmt.execute("create table std1.t1(id integer, str string) using column options" +
"(key_columns 'id', COLUMN_MAX_DELTA_ROWS '7', BUCKETS '2')")
var ps: PreparedStatement = null
for (i <- 1 to 10) {
snc.sql("insert into std1.t1 values(" + i + ",'str" + i + "')")
}

var rscnt = stmt.executeQuery("select count(*) from std1.t1")
rscnt.next()
assertEquals(10, rscnt.getInt(1))

val rs = stmt.executeQuery("select * from std1.t1 order by id")
var i = 1
while (rs.next()) {
assertEquals(i, rs.getInt(1))
assertEquals("str" + i, rs.getString(2))
i = i + 1
}

val query2 = "put into std1.t1 values(?,?)"
ps = conn.prepareStatement(query2)
for (i <- 1 to 20) {
ps.setInt(1, i)
ps.setString(2, "str_" + i)
ps.executeUpdate()
}
var rscnt2 = stmt.executeQuery("select count(*) from std1.t1")
rscnt2.next()
assertEquals(20, rscnt2.getInt(1))

val rs2 = stmt.executeQuery("select * from std1.t1 order by id")
var i2 = 0
while (rs.next()) {
assertEquals(i2, rs2.getInt(1))
assertEquals("str_" + i2, rs2.getString(2))
i2 = i2 + 1
}
val session = new SnappySession(sc)

val query1 = "put into std1.t1 values(?,?)"
ps = conn.prepareStatement(query1)
for (i <- 1 to 30) {
ps.setInt(1, i)
ps.setString(2, "strings_" + i)
ps.addBatch()
if (i % 10 == 0) {
ps.executeBatch()
}
}
ps.executeBatch()

var rscnt1 = stmt.executeQuery("select count(*) from std1.t1")
rscnt1.next()
assertEquals(30, rscnt1.getInt(1))

val rs1 = stmt.executeQuery("select * from std1.t1 order by id")
var i1 = 1
while (rs1.next()) {
assertEquals(i1, rs1.getInt(1))
assertEquals("strings_" + i1, rs1.getString(2))
i1 = i1 + 1
}
PreparedQueryRoutingSingleNodeSuite.testInsertPutRoutingWithVALUES(conn, session)

val query3 = "put into std1.t1(id,str) values(?,?)"
ps = conn.prepareStatement(query3)
for (i <- 11 to 20) {
ps.setInt(1, i)
ps.setString(2, "str123_" + i)
ps.addBatch()
if (i % 10 == 0) {
ps.executeBatch()
}
}
ps.executeBatch()

var rscnt3 = stmt.executeQuery("select count(*) from std1.t1")
rscnt3.next()
assertEquals(30, rscnt3.getInt(1))

val rs3 = stmt.executeQuery("select * from std1.t1 where id >= 11 and id <= 20 order by id")
var i3 = 11
while (rs3.next()) {
assertEquals(i3, rs3.getInt(1))
assertEquals("str123_" + i3, rs3.getString(2))
i3 = i3 + 1
}

val query4 = "put into std1.t1(id) values(?)"
ps = conn.prepareStatement(query4)
for (i <- 31 to 40) {
ps.setInt(1, i)
ps.addBatch()
if (i % 10 == 0) {
ps.executeBatch()
}
}
ps.executeBatch()

var rscnt4 = stmt.executeQuery("select count(*) from std1.t1")
rscnt4.next()
assertEquals(40, rscnt4.getInt(1))

val rs4 = stmt.executeQuery("select * from std1.t1 where id >= 31 and id <= 40 order by id")
var i4 = 31
while (rs4.next()) {
assertEquals(i4, rs4.getInt(1))
assertEquals(null, rs4.getString(2))
i4 = i4 + 1
}
conn.close()
}

def testSchemaAndTableNames: Unit = {
Expand Down
Loading