-
-
Save rlawlstjd0077/097d3d349a6343b09091020f18f39cb3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class PrestoTemplate(private val jdbcTemplate: JdbcTemplate) { | |
fun queryForList(sql: String, properties: Map<String, String>): List<Map<String, Any>> { | |
val creator = generatePreparedStatementCreator() | |
return jdbcTemplate.query(creator, ColumnMapRowMapper()) | |
} | |
private fun generatePreparedStatementCreator(sql: String, properties: Map<String, String>): PrestoDelegatePreparedStatementCreator { | |
return PrestoDelegatePreparedStatementCreator(sql = sql) { con -> | |
properties.forEach { con.setClientInfo(it.key, it.value) } | |
con.timeZoneId = ZoneOffset.UTC.id | |
} | |
} | |
} | |
fun interface PrestoConnectionDecorator { | |
fun decorate(connection: PrestoConnection) | |
} | |
class PrestoDelegatePreparedStatementCreator( | |
private val sql: String, | |
private val decorator: PrestoConnectionDecorator | |
) : PreparedStatementCreator { | |
override fun createPreparedStatement(con: Connection): PreparedStatement { | |
val statement = con.unwrap(PrestoConnection::class.java).apply(decorator::decorate).createStatement() | |
return DelegatePreparedStatement(sql, statement) | |
} | |
} | |
class DelegatePreparedStatement( | |
private val sql: String, | |
private val delegate: Statement | |
) : PreparedStatement, Statement by delegate { | |
override fun executeQuery(): ResultSet = delegate.executeQuery(sql) | |
override fun executeUpdate(): Int = delegate.executeUpdate(sql) | |
override fun execute(): Boolean = delegate.execute(sql) | |
override fun addBatch() = delegate.addBatch(sql) | |
private fun notSupported(): Nothing = throw SQLFeatureNotSupportedException() | |
override fun setNull(parameterIndex: Int, sqlType: Int) = notSupported() | |
override fun setNull(parameterIndex: Int, sqlType: Int, typeName: String?) = notSupported() | |
override fun setBoolean(parameterIndex: Int, x: Boolean) = notSupported() | |
override fun setByte(parameterIndex: Int, x: Byte) = notSupported() | |
override fun setShort(parameterIndex: Int, x: Short) = notSupported() | |
override fun setInt(parameterIndex: Int, x: Int) = notSupported() | |
override fun setLong(parameterIndex: Int, x: Long) = notSupported() | |
override fun setFloat(parameterIndex: Int, x: Float) = notSupported() | |
override fun setDouble(parameterIndex: Int, x: Double) = notSupported() | |
override fun setBigDecimal(parameterIndex: Int, x: BigDecimal?) = notSupported() | |
override fun setString(parameterIndex: Int, x: String?) = notSupported() | |
override fun setBytes(parameterIndex: Int, x: ByteArray?) = notSupported() | |
override fun setDate(parameterIndex: Int, x: Date?) = notSupported() | |
override fun setDate(parameterIndex: Int, x: Date?, cal: Calendar?) = notSupported() | |
override fun setTime(parameterIndex: Int, x: Time?) = notSupported() | |
override fun setTime(parameterIndex: Int, x: Time?, cl: Calendar?) = notSupported() | |
override fun setTimestamp(parameterIndex: Int, x: Timestamp?) = notSupported() | |
override fun setTimestamp(parameterIndex: Int, x: Timestamp?, cal: Calendar?) = notSupported() | |
override fun setAsciiStream(parameterIndex: Int, x: InputStream?, length: Int) = notSupported() | |
override fun setAsciiStream(parameterIndex: Int, x: InputStream?, length: Long) = notSupported() | |
override fun setAsciiStream(parameterIndex: Int, x: InputStream?) = notSupported() | |
@Deprecated("Deprecated in Java") | |
override fun setUnicodeStream(parameterIndex: Int, x: InputStream?, length: Int) = notSupported() | |
override fun setBinaryStream(parameterIndex: Int, x: InputStream?, length: Int) = notSupported() | |
override fun setBinaryStream(parameterIndex: Int, x: InputStream?, length: Long) = notSupported() | |
override fun setBinaryStream(parameterIndex: Int, x: InputStream?) = notSupported() | |
override fun clearParameters() = notSupported() | |
override fun setObject(parameterIndex: Int, x: Any?, targetSqlType: Int) = notSupported() | |
override fun setObject(parameterIndex: Int, x: Any?) = notSupported() | |
override fun setObject(parameterIndex: Int, x: Any?, targetSqlType: Int, scaleOrLength: Int) = notSupported() | |
override fun setCharacterStream(parameterIndex: Int, reader: Reader?, length: Int) = notSupported() | |
override fun setCharacterStream(parameterIndex: Int, reader: Reader?, length: Long) = notSupported() | |
override fun setCharacterStream(parameterIndex: Int, reader: Reader?) = notSupported() | |
override fun setRef(parameterIndex: Int, x: Ref?) = notSupported() | |
override fun setBlob(parameterIndex: Int, x: Blob?) = notSupported() | |
override fun setBlob(parameterIndex: Int, inputStream: InputStream?, length: Long) = notSupported() | |
override fun setBlob(parameterIndex: Int, inputStream: InputStream?) = notSupported() | |
override fun setClob(parameterIndex: Int, x: Clob?) = notSupported() | |
override fun setClob(parameterIndex: Int, reader: Reader?, length: Long) = notSupported() | |
override fun setClob(parameterIndex: Int, reader: Reader?) = notSupported() | |
override fun setArray(parameterIndex: Int, x: Array?) = notSupported() | |
override fun getMetaData(): ResultSetMetaData = notSupported() | |
override fun setURL(parameterIndex: Int, x: URL?) = notSupported() | |
override fun getParameterMetaData(): ParameterMetaData = notSupported() | |
override fun setRowId(parameterIndex: Int, x: RowId?) = notSupported() | |
override fun setNString(parameterIndex: Int, value: String?) = notSupported() | |
override fun setNCharacterStream(parameterIndex: Int, value: Reader?, length: Long) = notSupported() | |
override fun setNCharacterStream(parameterIndex: Int, value: Reader?) = notSupported() | |
override fun setNClob(parameterIndex: Int, value: NClob?) = notSupported() | |
override fun setNClob(parameterIndex: Int, reader: Reader?, length: Long) = notSupported() | |
override fun setNClob(parameterIndex: Int, reader: Reader?) = notSupported() | |
override fun setSQLXML(parameterIndex: Int, xmlObject: SQLXML?) = notSupported() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment