Skip to content

Commit 4c2a7a4

Browse files
Updated JDBCDialects to save VARCHAR size to metadata
1 parent 4cae11b commit 4c2a7a4

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

sql/core/src/main/scala/org/apache/spark/sql/jdbc/JdbcDialects.scala

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,15 @@ case object MsSqlServerDialect extends JdbcDialect {
293293
@DeveloperApi
294294
case object OracleDialect extends JdbcDialect {
295295
override def canHandle(url: String): Boolean = url.startsWith("jdbc:oracle")
296+
override def getCatalystType(
297+
sqlType: Int, typeName: String, size: Int, md: MetadataBuilder): Option[DataType] = {
298+
if (sqlType == Types.VARCHAR && typeName.equals("VARCHAR")) {
299+
//Save varchar size to metadata
300+
md.putLong("maxlength", size)
301+
Some(LongType)
302+
} else None
303+
}
304+
296305
override def getJDBCType(dt: DataType, md: Metadata): Option[JdbcType] = {
297306
if (dt == StringType && md.contains("maxlength")) {
298307
Some(JdbcType(s"VARCHAR(${md.getLong("maxlength")})", java.sql.Types.VARCHAR))
@@ -311,6 +320,15 @@ case object OracleDialect extends JdbcDialect {
311320
@DeveloperApi
312321
case object NetezzaDialect extends JdbcDialect {
313322
override def canHandle(url: String): Boolean = url.startsWith("jdbc:netezza")
323+
override def getCatalystType(
324+
sqlType: Int, typeName: String, size: Int, md: MetadataBuilder): Option[DataType] = {
325+
if (sqlType == Types.VARCHAR && typeName.equals("VARCHAR")) {
326+
//Save varchar size to metadata
327+
md.putLong("maxlength", size)
328+
Some(LongType)
329+
} else None
330+
}
331+
314332
override def getJDBCType(dt: DataType, md: Metadata): Option[JdbcType] = {
315333
if (dt == StringType && md.contains("maxlength")) {
316334
Some(JdbcType(s"VARCHAR(${md.getLong("maxlength")})", java.sql.Types.VARCHAR))

0 commit comments

Comments
 (0)