Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@

package org.apache.spark.sql.jdbc

import java.sql.Connection
import java.math.{BigDecimal => JBigDecimal}
import java.sql.{Connection, Date, Timestamp}
import java.text.SimpleDateFormat
import java.util.Properties

import org.apache.spark.sql.Column
Expand Down Expand Up @@ -54,15 +56,28 @@ class PostgresIntegrationSuite extends DockerJDBCIntegrationSuite {
conn.prepareStatement("CREATE TABLE bar (c0 text, c1 integer, c2 double precision, c3 bigint, "
+ "c4 bit(1), c5 bit(10), c6 bytea, c7 boolean, c8 inet, c9 cidr, "
+ "c10 integer[], c11 text[], c12 real[], c13 numeric(2,2)[], c14 enum_type, "
+ "c15 float4, c16 smallint, c17 numeric[])").executeUpdate()
+ "c15 float4, c16 smallint, c17 numeric[], c18 bit varying(6), c19 point, c20 line, "
+ "c21 lseg, c22 box, c23 path, c24 polygon, c25 circle, c26 pg_lsn, "
+ "c27 character(2), c28 character varying(3), c29 date, c30 interval, "
+ "c31 macaddr, c32 macaddr8, c33 numeric(6,4), c34 pg_snapshot, "
+ "c35 real, c36 time, c37 timestamp, c38 tsquery, c39 tsvector, c40 txid_snapshot, "
+ "c41 xml)").executeUpdate()
conn.prepareStatement("INSERT INTO bar VALUES ('hello', 42, 1.25, 123456789012345, B'0', "
+ "B'1000100101', E'\\\\xDEADBEEF', true, '172.16.0.42', '192.168.0.0/16', "
+ """'{1, 2}', '{"a", null, "b"}', '{0.11, 0.22}', '{0.11, 0.22}', 'd1', 1.01, 1, """
+ "'{111.2222, 333.4444}')"
+ "'{111.2222, 333.4444}', B'101010', '(800, 600)', '(23.8, 56.2), (16.23, 89.2)', "
+ "'[(80.12, 131.24), (201.5, 503.33)]', '(19.84, 11.23), (20.21, 2.1)', "
+ "'(10.2, 30.4), (50.6, 70.8), (90.1, 11.3)', "
+ "'((100.3, 40.2), (20.198, 83.1), (500.821, 311.38))', '<500, 200, 100>', '16/B374D848', "
+ "'ab', 'efg', '2021-02-02', '1 minute', '00:11:22:33:44:55', "
+ "'00:11:22:33:44:55:66:77', 12.3456, '10:20:10,14,15', 1E+37, "
+ "'17:22:31', '2016-08-12 10:22:31.949271', 'cat:AB & dog:CD', "
+ "'dog and cat and fox', '10:20:10,14,15', '<key>id</key><value>10</value>')"
).executeUpdate()
conn.prepareStatement("INSERT INTO bar VALUES (null, null, null, null, null, "
+ "null, null, null, null, null, "
+ "null, null, null, null, null, null, null, null)"
+ "null, null, null, null, null, null, null, null, null, null, null, null, "
+ "null, null, null, null, null, null, null, null, null, null, null, null, "
+ "null, null, null, null, null, null, null, null, null, null, null, null, null)"
).executeUpdate()

conn.prepareStatement("CREATE TABLE ts_with_timezone " +
Expand Down Expand Up @@ -106,7 +121,7 @@ class PostgresIntegrationSuite extends DockerJDBCIntegrationSuite {
assert(rows.length == 2)
// Test the types, and values using the first row.
val types = rows(0).toSeq.map(x => x.getClass)
assert(types.length == 18)
assert(types.length == 42)
assert(classOf[String].isAssignableFrom(types(0)))
assert(classOf[java.lang.Integer].isAssignableFrom(types(1)))
assert(classOf[java.lang.Double].isAssignableFrom(types(2)))
Expand All @@ -125,6 +140,30 @@ class PostgresIntegrationSuite extends DockerJDBCIntegrationSuite {
assert(classOf[java.lang.Float].isAssignableFrom(types(15)))
assert(classOf[java.lang.Short].isAssignableFrom(types(16)))
assert(classOf[scala.collection.Seq[BigDecimal]].isAssignableFrom(types(17)))
assert(classOf[String].isAssignableFrom(types(18)))
assert(classOf[String].isAssignableFrom(types(19)))
assert(classOf[String].isAssignableFrom(types(20)))
assert(classOf[String].isAssignableFrom(types(21)))
assert(classOf[String].isAssignableFrom(types(22)))
assert(classOf[String].isAssignableFrom(types(23)))
assert(classOf[String].isAssignableFrom(types(24)))
assert(classOf[String].isAssignableFrom(types(25)))
assert(classOf[String].isAssignableFrom(types(26)))
assert(classOf[String].isAssignableFrom(types(27)))
assert(classOf[String].isAssignableFrom(types(28)))
assert(classOf[Date].isAssignableFrom(types(29)))
assert(classOf[String].isAssignableFrom(types(30)))
assert(classOf[String].isAssignableFrom(types(31)))
assert(classOf[String].isAssignableFrom(types(32)))
assert(classOf[JBigDecimal].isAssignableFrom(types(33)))
assert(classOf[String].isAssignableFrom(types(34)))
assert(classOf[java.lang.Float].isAssignableFrom(types(35)))
assert(classOf[java.sql.Timestamp].isAssignableFrom(types(36)))
assert(classOf[java.sql.Timestamp].isAssignableFrom(types(37)))
assert(classOf[String].isAssignableFrom(types(38)))
assert(classOf[String].isAssignableFrom(types(39)))
assert(classOf[String].isAssignableFrom(types(40)))
assert(classOf[String].isAssignableFrom(types(41)))
assert(rows(0).getString(0).equals("hello"))
assert(rows(0).getInt(1) == 42)
assert(rows(0).getDouble(2) == 1.25)
Expand All @@ -147,6 +186,30 @@ class PostgresIntegrationSuite extends DockerJDBCIntegrationSuite {
assert(rows(0).getShort(16) == 1)
assert(rows(0).getSeq(17) ==
Seq("111.222200000000000000", "333.444400000000000000").map(BigDecimal(_).bigDecimal))
assert(rows(0).getString(18) == "101010")
assert(rows(0).getString(19) == "(800,600)")
assert(rows(0).getString(20) == "{-4.359313077939234,-1,159.9516512549538}")
assert(rows(0).getString(21) == "[(80.12,131.24),(201.5,503.33)]")
assert(rows(0).getString(22) == "(20.21,11.23),(19.84,2.1)")
assert(rows(0).getString(23) == "((10.2,30.4),(50.6,70.8),(90.1,11.3))")
assert(rows(0).getString(24) == "((100.3,40.2),(20.198,83.1),(500.821,311.38))")
assert(rows(0).getString(25) == "<(500,200),100>")
assert(rows(0).getString(26) == "16/B374D848")
assert(rows(0).getString(27) == "ab")
assert(rows(0).getString(28) == "efg")
assert(rows(0).getDate(29) == new SimpleDateFormat("yyyy-MM-dd").parse("2021-02-02"))
assert(rows(0).getString(30) == "00:01:00")
assert(rows(0).getString(31) == "00:11:22:33:44:55")
assert(rows(0).getString(32) == "00:11:22:33:44:55:66:77")
assert(rows(0).getDecimal(33) == new JBigDecimal("12.3456"))
assert(rows(0).getString(34) == "10:20:10,14,15")
assert(rows(0).getFloat(35) == 1E+37F)
assert(rows(0).getTimestamp(36) == Timestamp.valueOf("1970-01-01 17:22:31.0"))
assert(rows(0).getTimestamp(37) == Timestamp.valueOf("2016-08-12 10:22:31.949271"))
assert(rows(0).getString(38) == "'cat':AB & 'dog':CD")
assert(rows(0).getString(39) == "'and' 'cat' 'dog' 'fox'")
assert(rows(0).getString(40) == "10:20:10,14,15")
assert(rows(0).getString(41) == "<key>id</key><value>10</value>")

// Test reading null values using the second row.
assert(0.until(16).forall(rows(1).isNullAt(_)))
Expand Down