Guest User

Untitled

a guest
Apr 8th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.17 KB | None | 0 0
  1. import java.io.{Closeable, InputStream, PrintWriter, Reader}
  2. import java.net.URL
  3. import java.sql.{Blob, CallableStatement, Clob, Connection, DatabaseMetaData, Date, NClob, ParameterMetaData, PreparedStatement, Ref, ResultSet, ResultSetMetaData, RowId, SQLWarning, SQLXML, Savepoint, Statement, Struct, Time, Timestamp}
  4. import java.util.{Calendar, Properties}
  5. import java.{sql, util}
  6. import java.util.concurrent.Executor
  7. import java.util.logging.Logger
  8. import javax.sql.DataSource
  9.  
  10. trait SqlTracer {
  11. final def apply(ds: DataSource): DataSource =
  12. new SqlTracer.DataSourceProxy(ds)(this)
  13.  
  14. def executePreparedStatement[@specialized(Boolean, Int, Long) A](method : String,
  15. sql : String,
  16. batches: Int,
  17. run : () => A): A
  18. }
  19.  
  20. object SqlTracer {
  21.  
  22. final class DataSourceProxy(underlying: DataSource)(implicit tracer: SqlTracer) extends DataSource with Closeable {
  23. def proxyC(c: Connection) = new ConnectionProxy(c)
  24.  
  25. override def getConnection: Connection =
  26. proxyC(
  27. underlying.getConnection)
  28.  
  29. override def getConnection(username: String, password: String): Connection =
  30. proxyC(
  31. underlying.getConnection(username, password))
  32.  
  33. override def close(): Unit =
  34. underlying match {
  35. case c: Closeable => c.close()
  36. case _ => ()
  37. }
  38.  
  39. override def setLoginTimeout(seconds: Int): Unit =
  40. underlying.setLoginTimeout(seconds)
  41.  
  42. override def setLogWriter(out: PrintWriter): Unit =
  43. underlying.setLogWriter(out)
  44.  
  45. override def getParentLogger: Logger =
  46. underlying.getParentLogger
  47.  
  48. override def getLoginTimeout: Int =
  49. underlying.getLoginTimeout
  50.  
  51. override def getLogWriter: PrintWriter =
  52. underlying.getLogWriter
  53.  
  54. override def unwrap[T](iface: Class[T]): T =
  55. underlying.unwrap(iface)
  56.  
  57. override def isWrapperFor(iface: Class[_]): Boolean =
  58. underlying.isWrapperFor(iface)
  59. }
  60.  
  61. // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  62.  
  63. final class ConnectionProxy(underlying: Connection)(implicit tracer: SqlTracer) extends Connection {
  64. def proxyPS(sql: String, ps: PreparedStatement) = new PreparedStatementProxy(sql, ps)
  65.  
  66. override def abort(executor: Executor): Unit =
  67. underlying.abort(executor)
  68.  
  69. override def clearWarnings(): Unit =
  70. underlying.clearWarnings()
  71.  
  72. override def close(): Unit =
  73. underlying.close()
  74.  
  75. override def commit(): Unit =
  76. underlying.commit()
  77.  
  78. override def createArrayOf(typeName: String, elements: Array[AnyRef]): sql.Array =
  79. underlying.createArrayOf(typeName, elements)
  80.  
  81. override def createBlob(): Blob =
  82. underlying.createBlob()
  83.  
  84. override def createClob(): Clob =
  85. underlying.createClob()
  86.  
  87. override def createNClob(): NClob =
  88. underlying.createNClob()
  89.  
  90. override def createSQLXML(): SQLXML =
  91. underlying.createSQLXML()
  92.  
  93. override def createStatement(): Statement =
  94. underlying.createStatement()
  95.  
  96. override def createStatement(resultSetType: Int, resultSetConcurrency: Int, resultSetHoldability: Int): Statement =
  97. underlying.createStatement(resultSetType, resultSetConcurrency, resultSetHoldability)
  98.  
  99. override def createStatement(resultSetType: Int, resultSetConcurrency: Int): Statement =
  100. underlying.createStatement(resultSetType, resultSetConcurrency)
  101.  
  102. override def createStruct(typeName: String, attributes: Array[AnyRef]): Struct =
  103. underlying.createStruct(typeName, attributes)
  104.  
  105. override def getAutoCommit: Boolean =
  106. underlying.getAutoCommit
  107.  
  108. override def getCatalog: String =
  109. underlying.getCatalog
  110.  
  111. override def getClientInfo: Properties =
  112. underlying.getClientInfo
  113.  
  114. override def getClientInfo(name: String): String =
  115. underlying.getClientInfo(name)
  116.  
  117. override def getHoldability: Int =
  118. underlying.getHoldability
  119.  
  120. override def getMetaData: DatabaseMetaData =
  121. underlying.getMetaData
  122.  
  123. override def getNetworkTimeout: Int =
  124. underlying.getNetworkTimeout
  125.  
  126. override def getSchema: String =
  127. underlying.getSchema
  128.  
  129. override def getTransactionIsolation: Int =
  130. underlying.getTransactionIsolation
  131.  
  132. override def getTypeMap: util.Map[String, Class[_]] =
  133. underlying.getTypeMap
  134.  
  135. override def getWarnings: SQLWarning =
  136. underlying.getWarnings
  137.  
  138. override def isClosed: Boolean =
  139. underlying.isClosed
  140.  
  141. override def isReadOnly: Boolean =
  142. underlying.isReadOnly
  143.  
  144. override def isValid(timeout: Int): Boolean =
  145. underlying.isValid(timeout)
  146.  
  147. override def isWrapperFor(iface: Class[_]): Boolean =
  148. underlying.isWrapperFor(iface)
  149.  
  150. override def nativeSQL(sql: String): String =
  151. underlying.nativeSQL(sql)
  152.  
  153. override def prepareCall(sql: String, resultSetType: Int, resultSetConcurrency: Int, resultSetHoldability: Int): CallableStatement =
  154. underlying.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability)
  155.  
  156. override def prepareCall(sql: String, resultSetType: Int, resultSetConcurrency: Int): CallableStatement =
  157. underlying.prepareCall(sql, resultSetType, resultSetConcurrency)
  158.  
  159. override def prepareCall(sql: String): CallableStatement =
  160. underlying.prepareCall(sql)
  161.  
  162. override def prepareStatement(sql: String, autoGeneratedKeys: Int): PreparedStatement =
  163. proxyPS(sql,
  164. underlying.prepareStatement(sql, autoGeneratedKeys))
  165.  
  166. override def prepareStatement(sql: String, columnIndexes: Array[Int]): PreparedStatement =
  167. proxyPS(sql,
  168. underlying.prepareStatement(sql, columnIndexes))
  169.  
  170. override def prepareStatement(sql: String, columnNames: Array[String]): PreparedStatement =
  171. proxyPS(sql,
  172. underlying.prepareStatement(sql, columnNames))
  173.  
  174. override def prepareStatement(sql: String, resultSetType: Int, resultSetConcurrency: Int, resultSetHoldability: Int): PreparedStatement =
  175. proxyPS(sql,
  176. underlying.prepareStatement(sql, resultSetType, resultSetConcurrency, resultSetHoldability))
  177.  
  178. override def prepareStatement(sql: String, resultSetType: Int, resultSetConcurrency: Int): PreparedStatement =
  179. proxyPS(sql,
  180. underlying.prepareStatement(sql, resultSetType, resultSetConcurrency))
  181.  
  182. override def prepareStatement(sql: String): PreparedStatement =
  183. proxyPS(sql,
  184. underlying.prepareStatement(sql))
  185.  
  186. override def releaseSavepoint(savepoint: Savepoint): Unit =
  187. underlying.releaseSavepoint(savepoint)
  188.  
  189. override def rollback(): Unit =
  190. underlying.rollback()
  191.  
  192. override def rollback(savepoint: Savepoint): Unit =
  193. underlying.rollback(savepoint)
  194.  
  195. override def setAutoCommit(autoCommit: Boolean): Unit =
  196. underlying.setAutoCommit(autoCommit)
  197.  
  198. override def setCatalog(catalog: String): Unit =
  199. underlying.setCatalog(catalog)
  200.  
  201. override def setClientInfo(name: String, value: String): Unit =
  202. underlying.setClientInfo(name, value)
  203.  
  204. override def setClientInfo(properties: Properties): Unit =
  205. underlying.setClientInfo(properties)
  206.  
  207. override def setHoldability(holdability: Int): Unit =
  208. underlying.setHoldability(holdability)
  209.  
  210. override def setNetworkTimeout(executor: Executor, milliseconds: Int): Unit =
  211. underlying.setNetworkTimeout(executor, milliseconds)
  212.  
  213. override def setReadOnly(readOnly: Boolean): Unit =
  214. underlying.setReadOnly(readOnly)
  215.  
  216. override def setSavepoint(): Savepoint =
  217. underlying.setSavepoint()
  218.  
  219. override def setSavepoint(name: String): Savepoint =
  220. underlying.setSavepoint(name)
  221.  
  222. override def setSchema(schema: String): Unit =
  223. underlying.setSchema(schema)
  224.  
  225. override def setTransactionIsolation(level: Int): Unit =
  226. underlying.setTransactionIsolation(level)
  227.  
  228. override def setTypeMap(map: util.Map[String, Class[_]]): Unit =
  229. underlying.setTypeMap(map)
  230.  
  231. override def unwrap[T](iface: Class[T]): T =
  232. underlying.unwrap[T](iface)
  233. }
  234.  
  235. // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  236.  
  237. final class PreparedStatementProxy(preparedSql: String, underlying: PreparedStatement)(implicit tracer: SqlTracer) extends PreparedStatement {
  238. var batchSize = 0
  239.  
  240. override def addBatch(): Unit = {
  241. batchSize += 1
  242. underlying.addBatch()
  243. }
  244.  
  245. override def addBatch(sql: String): Unit =
  246. underlying.addBatch(sql: String) // Spec declares this a runtime exception
  247.  
  248. override def cancel(): Unit =
  249. underlying.cancel()
  250.  
  251. override def clearBatch(): Unit =
  252. underlying.clearBatch()
  253.  
  254. override def clearParameters(): Unit =
  255. underlying.clearParameters()
  256.  
  257. override def clearWarnings(): Unit =
  258. underlying.clearWarnings()
  259.  
  260. override def close(): Unit =
  261. underlying.close()
  262.  
  263. override def closeOnCompletion(): Unit =
  264. underlying.closeOnCompletion()
  265.  
  266. override def execute(): Boolean =
  267. tracer.executePreparedStatement("execute", preparedSql, 1, () =>
  268. underlying.execute())
  269.  
  270. override def execute(sql: String, autoGeneratedKeys: Int): Boolean =
  271. underlying.execute(sql: String, autoGeneratedKeys: Int) // Spec declares this a runtime exception
  272.  
  273. override def execute(sql: String, columnIndexes: Array[Int]): Boolean =
  274. underlying.execute(sql: String, columnIndexes: Array[Int]) // Spec declares this a runtime exception
  275.  
  276. override def execute(sql: String, columnNames: Array[String]): Boolean =
  277. underlying.execute(sql: String, columnNames: Array[String]) // Spec declares this a runtime exception
  278.  
  279. override def execute(sql: String): Boolean =
  280. underlying.execute(sql: String) // Spec declares this a runtime exception
  281.  
  282. override def executeBatch(): Array[Int] =
  283. tracer.executePreparedStatement("executeBatch", preparedSql, batchSize, () =>
  284. underlying.executeBatch())
  285.  
  286. override def executeLargeBatch(): Array[Long] =
  287. tracer.executePreparedStatement("executeLargeBatch", preparedSql, batchSize, () =>
  288. underlying.executeLargeBatch())
  289.  
  290. override def executeLargeUpdate(): Long =
  291. tracer.executePreparedStatement("executeLargeUpdate", preparedSql, 1, () =>
  292. underlying.executeLargeUpdate())
  293.  
  294. override def executeQuery(): ResultSet =
  295. tracer.executePreparedStatement("executeQuery", preparedSql, 1, () =>
  296. underlying.executeQuery())
  297.  
  298. override def executeQuery(sql: String): ResultSet =
  299. underlying.executeQuery(sql) // Spec declares this a runtime exception
  300.  
  301. override def executeUpdate(): Int =
  302. tracer.executePreparedStatement("executeUpdate", preparedSql, 1, () =>
  303. underlying.executeUpdate())
  304.  
  305. override def executeUpdate(sql: String, autoGeneratedKeys: Int): Int =
  306. underlying.executeUpdate(sql: String, autoGeneratedKeys: Int) // Spec declares this a runtime exception
  307.  
  308. override def executeUpdate(sql: String, columnIndexes: Array[Int]): Int =
  309. underlying.executeUpdate(sql: String, columnIndexes: Array[Int]) // Spec declares this a runtime exception
  310.  
  311. override def executeUpdate(sql: String, columnNames: Array[String]): Int =
  312. underlying.executeUpdate(sql: String, columnNames: Array[String]) // Spec declares this a runtime exception
  313.  
  314. override def executeUpdate(sql: String): Int =
  315. underlying.executeUpdate(sql: String) // Spec declares this a runtime exception
  316.  
  317. override def getConnection: Connection =
  318. underlying.getConnection
  319.  
  320. override def getFetchDirection: Int =
  321. underlying.getFetchDirection
  322.  
  323. override def getFetchSize: Int =
  324. underlying.getFetchSize
  325.  
  326. override def getGeneratedKeys: ResultSet =
  327. underlying.getGeneratedKeys
  328.  
  329. override def getMaxFieldSize: Int =
  330. underlying.getMaxFieldSize
  331.  
  332. override def getMaxRows: Int =
  333. underlying.getMaxRows
  334.  
  335. override def getMetaData: ResultSetMetaData =
  336. underlying.getMetaData
  337.  
  338. override def getMoreResults: Boolean =
  339. underlying.getMoreResults
  340.  
  341. override def getMoreResults(current: Int): Boolean =
  342. underlying.getMoreResults(current: Int)
  343.  
  344. override def getParameterMetaData: ParameterMetaData =
  345. underlying.getParameterMetaData
  346.  
  347. override def getQueryTimeout: Int =
  348. underlying.getQueryTimeout
  349.  
  350. override def getResultSet: ResultSet =
  351. underlying.getResultSet
  352.  
  353. override def getResultSetConcurrency: Int =
  354. underlying.getResultSetConcurrency
  355.  
  356. override def getResultSetHoldability: Int =
  357. underlying.getResultSetHoldability
  358.  
  359. override def getResultSetType: Int =
  360. underlying.getResultSetType
  361.  
  362. override def getUpdateCount: Int =
  363. underlying.getUpdateCount
  364.  
  365. override def getWarnings: SQLWarning =
  366. underlying.getWarnings
  367.  
  368. override def isClosed: Boolean =
  369. underlying.isClosed
  370.  
  371. override def isCloseOnCompletion: Boolean =
  372. underlying.isCloseOnCompletion
  373.  
  374. override def isPoolable: Boolean =
  375. underlying.isPoolable
  376.  
  377. override def isWrapperFor(iface: Class[_]): Boolean =
  378. underlying.isWrapperFor(iface: Class[_])
  379.  
  380. override def setArray(parameterIndex: Int, x: sql.Array): Unit =
  381. underlying.setArray(parameterIndex: Int, x: sql.Array)
  382.  
  383. override def setAsciiStream(parameterIndex: Int, x: InputStream, length: Int): Unit =
  384. underlying.setAsciiStream(parameterIndex: Int, x: InputStream, length: Int)
  385.  
  386. override def setAsciiStream(parameterIndex: Int, x: InputStream, length: Long): Unit =
  387. underlying.setAsciiStream(parameterIndex: Int, x: InputStream, length: Long)
  388.  
  389. override def setAsciiStream(parameterIndex: Int, x: InputStream): Unit =
  390. underlying.setAsciiStream(parameterIndex: Int, x: InputStream)
  391.  
  392. override def setBigDecimal(parameterIndex: Int, x: java.math.BigDecimal): Unit =
  393. underlying.setBigDecimal(parameterIndex: Int, x: java.math.BigDecimal)
  394.  
  395. override def setBinaryStream(parameterIndex: Int, x: InputStream, length: Int): Unit =
  396. underlying.setBinaryStream(parameterIndex: Int, x: InputStream, length: Int)
  397.  
  398. override def setBinaryStream(parameterIndex: Int, x: InputStream, length: Long): Unit =
  399. underlying.setBinaryStream(parameterIndex: Int, x: InputStream, length: Long)
  400.  
  401. override def setBinaryStream(parameterIndex: Int, x: InputStream): Unit =
  402. underlying.setBinaryStream(parameterIndex: Int, x: InputStream)
  403.  
  404. override def setBlob(parameterIndex: Int, inputStream: InputStream, length: Long): Unit =
  405. underlying.setBlob(parameterIndex: Int, inputStream: InputStream, length: Long)
  406.  
  407. override def setBlob(parameterIndex: Int, inputStream: InputStream): Unit =
  408. underlying.setBlob(parameterIndex: Int, inputStream: InputStream)
  409.  
  410. override def setBlob(parameterIndex: Int, x: Blob): Unit =
  411. underlying.setBlob(parameterIndex: Int, x: Blob)
  412.  
  413. override def setBoolean(parameterIndex: Int, x: Boolean): Unit =
  414. underlying.setBoolean(parameterIndex: Int, x: Boolean)
  415.  
  416. override def setByte(parameterIndex: Int, x: Byte): Unit =
  417. underlying.setByte(parameterIndex: Int, x: Byte)
  418.  
  419. override def setBytes(parameterIndex: Int, x: Array[Byte]): Unit =
  420. underlying.setBytes(parameterIndex: Int, x: Array[Byte])
  421.  
  422. override def setCharacterStream(parameterIndex: Int, reader: Reader, length: Int): Unit =
  423. underlying.setCharacterStream(parameterIndex: Int, reader: Reader, length: Int)
  424.  
  425. override def setCharacterStream(parameterIndex: Int, reader: Reader, length: Long): Unit =
  426. underlying.setCharacterStream(parameterIndex: Int, reader: Reader, length: Long)
  427.  
  428. override def setCharacterStream(parameterIndex: Int, reader: Reader): Unit =
  429. underlying.setCharacterStream(parameterIndex: Int, reader: Reader)
  430.  
  431. override def setClob(parameterIndex: Int, reader: Reader, length: Long): Unit =
  432. underlying.setClob(parameterIndex: Int, reader: Reader, length: Long)
  433.  
  434. override def setClob(parameterIndex: Int, reader: Reader): Unit =
  435. underlying.setClob(parameterIndex: Int, reader: Reader)
  436.  
  437. override def setClob(parameterIndex: Int, x: Clob): Unit =
  438. underlying.setClob(parameterIndex: Int, x: Clob)
  439.  
  440. override def setCursorName(name: String): Unit =
  441. underlying.setCursorName(name: String)
  442.  
  443. override def setDate(parameterIndex: Int, x: Date, cal: Calendar): Unit =
  444. underlying.setDate(parameterIndex: Int, x: Date, cal: Calendar)
  445.  
  446. override def setDate(parameterIndex: Int, x: Date): Unit =
  447. underlying.setDate(parameterIndex: Int, x: Date)
  448.  
  449. override def setDouble(parameterIndex: Int, x: Double): Unit =
  450. underlying.setDouble(parameterIndex: Int, x: Double)
  451.  
  452. override def setEscapeProcessing(enable: Boolean): Unit =
  453. underlying.setEscapeProcessing(enable: Boolean)
  454.  
  455. override def setFetchDirection(direction: Int): Unit =
  456. underlying.setFetchDirection(direction: Int)
  457.  
  458. override def setFetchSize(rows: Int): Unit =
  459. underlying.setFetchSize(rows: Int)
  460.  
  461. override def setFloat(parameterIndex: Int, x: Float): Unit =
  462. underlying.setFloat(parameterIndex: Int, x: Float)
  463.  
  464. override def setInt(parameterIndex: Int, x: Int): Unit =
  465. underlying.setInt(parameterIndex: Int, x: Int)
  466.  
  467. override def setLong(parameterIndex: Int, x: Long): Unit =
  468. underlying.setLong(parameterIndex: Int, x: Long)
  469.  
  470. override def setMaxFieldSize(max: Int): Unit =
  471. underlying.setMaxFieldSize(max: Int)
  472.  
  473. override def setMaxRows(max: Int): Unit =
  474. underlying.setMaxRows(max: Int)
  475.  
  476. override def setNCharacterStream(parameterIndex: Int, value: Reader, length: Long): Unit =
  477. underlying.setNCharacterStream(parameterIndex: Int, value: Reader, length: Long)
  478.  
  479. override def setNCharacterStream(parameterIndex: Int, value: Reader): Unit =
  480. underlying.setNCharacterStream(parameterIndex: Int, value: Reader)
  481.  
  482. override def setNClob(parameterIndex: Int, reader: Reader, length: Long): Unit =
  483. underlying.setNClob(parameterIndex: Int, reader: Reader, length: Long)
  484.  
  485. override def setNClob(parameterIndex: Int, reader: Reader): Unit =
  486. underlying.setNClob(parameterIndex: Int, reader: Reader)
  487.  
  488. override def setNClob(parameterIndex: Int, value: NClob): Unit =
  489. underlying.setNClob(parameterIndex: Int, value: NClob)
  490.  
  491. override def setNString(parameterIndex: Int, value: String): Unit =
  492. underlying.setNString(parameterIndex: Int, value: String)
  493.  
  494. override def setNull(parameterIndex: Int, sqlType: Int, typeName: String): Unit =
  495. underlying.setNull(parameterIndex: Int, sqlType: Int, typeName: String)
  496.  
  497. override def setNull(parameterIndex: Int, sqlType: Int): Unit =
  498. underlying.setNull(parameterIndex: Int, sqlType: Int)
  499.  
  500. override def setObject(parameterIndex: Int, x: Any, targetSqlType: Int, scaleOrLength: Int): Unit =
  501. underlying.setObject(parameterIndex: Int, x: Any, targetSqlType: Int, scaleOrLength: Int)
  502.  
  503. override def setObject(parameterIndex: Int, x: Any, targetSqlType: Int): Unit =
  504. underlying.setObject(parameterIndex: Int, x: Any, targetSqlType: Int)
  505.  
  506. override def setObject(parameterIndex: Int, x: Any): Unit =
  507. underlying.setObject(parameterIndex: Int, x: Any)
  508.  
  509. override def setPoolable(poolable: Boolean): Unit =
  510. underlying.setPoolable(poolable: Boolean)
  511.  
  512. override def setQueryTimeout(seconds: Int): Unit =
  513. underlying.setQueryTimeout(seconds: Int)
  514.  
  515. override def setRef(parameterIndex: Int, x: Ref): Unit =
  516. underlying.setRef(parameterIndex: Int, x: Ref)
  517.  
  518. override def setRowId(parameterIndex: Int, x: RowId): Unit =
  519. underlying.setRowId(parameterIndex: Int, x: RowId)
  520.  
  521. override def setShort(parameterIndex: Int, x: Short): Unit =
  522. underlying.setShort(parameterIndex: Int, x: Short)
  523.  
  524. override def setSQLXML(parameterIndex: Int, xmlObject: SQLXML): Unit =
  525. underlying.setSQLXML(parameterIndex: Int, xmlObject: SQLXML)
  526.  
  527. override def setString(parameterIndex: Int, x: String): Unit =
  528. underlying.setString(parameterIndex: Int, x: String)
  529.  
  530. override def setTime(parameterIndex: Int, x: Time, cal: Calendar): Unit =
  531. underlying.setTime(parameterIndex: Int, x: Time, cal: Calendar)
  532.  
  533. override def setTime(parameterIndex: Int, x: Time): Unit =
  534. underlying.setTime(parameterIndex: Int, x: Time)
  535.  
  536. override def setTimestamp(parameterIndex: Int, x: Timestamp, cal: Calendar): Unit =
  537. underlying.setTimestamp(parameterIndex: Int, x: Timestamp, cal: Calendar)
  538.  
  539. override def setTimestamp(parameterIndex: Int, x: Timestamp): Unit =
  540. underlying.setTimestamp(parameterIndex: Int, x: Timestamp)
  541.  
  542. @deprecated("", "")
  543. override def setUnicodeStream(parameterIndex: Int, x: InputStream, length: Int): Unit =
  544. underlying.setUnicodeStream(parameterIndex: Int, x: InputStream, length: Int)
  545.  
  546. override def setURL(parameterIndex: Int, x: URL): Unit =
  547. underlying.setURL(parameterIndex: Int, x: URL)
  548.  
  549. override def unwrap[T](iface: Class[T]): T =
  550. underlying.unwrap[T](iface: Class[T])
  551. }
  552. }
Add Comment
Please, Sign In to add comment