
com.landoop.jdbc4.client.insert.kt Maven / Gradle / Ivy
The newest version!
package com.landoop.jdbc4.client
import com.landoop.jdbc4.client.domain.InsertField
import org.apache.avro.Schema
import org.apache.avro.generic.GenericData
import org.apache.avro.generic.GenericDatumWriter
import org.apache.avro.generic.GenericRecord
import org.apache.avro.io.EncoderFactory
import java.io.ByteArrayOutputStream
fun rowToValueRecord(schema: Schema, fields: List, row: List): GenericRecord {
val record = GenericData.Record(schema)
schema.fields.forEach { field ->
val rowIndex = fields.indexOfFirst { it.name == field.name() }
val value = when (rowIndex) {
// if -1 then the schema field did not exist in the insert statement, so we pad with null
-1 -> null
// otherwise we know the offset into the row
else -> row[rowIndex]
}
record.put(field.name(), value)
}
return record
}
fun recordToJson(record: GenericRecord): String {
val writer = GenericDatumWriter(record.schema)
val baos = ByteArrayOutputStream()
val jsonEncoder = EncoderFactory.get().jsonEncoder(record.schema, baos)
writer.write(record, jsonEncoder)
jsonEncoder.flush()
return String(baos.toByteArray())
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy