sql >> データベース >  >> RDS >> PostgreSQL

R2DBCと列挙型(PostgreSQL)

    org.springframework.data:spring-data-r2dbc:1.0.0.RELEASEでテスト済み およびio.r2dbc:r2dbc-postgresql:0.8.1.RELEASE

    Kotlinバージョン。

    1. 列挙型クラスを定義する

      enum class Mood {
          UNKNOWN,
          HAPPY,
          SAD
      }
      
    2. カスタムコーデックを作成する

      class MoodCodec(private val allocator: ByteBufAllocator) :  Codec<Mood> {
          override fun canEncodeNull(type: Class<*>): Boolean = false
      
          override fun canEncode(value: Any): Boolean = value is Mood
      
          override fun encode(value: Any): Parameter {
              return Parameter(Format.FORMAT_TEXT, oid) {
                  ByteBufUtils.encode(allocator, (value as Mood).name)
              }
          }
      
          override fun canDecode(dataType: Int, format: Format, type: Class<*>): Boolean = dataType == oid
      
          override fun decode(buffer: ByteBuf?, dataType: Int, format: Format, type: Class<out Mood>): Mood? {
              buffer ?: return null
              return Mood.valueOf(ByteBufUtils.decode(buffer))
          }
      
          override fun type(): Class<*> = Mood::class.java
      
          override fun encodeNull(): Parameter =
              Parameter(Format.FORMAT_TEXT, oid, Parameter.NULL_VALUE)
      
          companion object {
              // Get form `select oid from pg_type where typname = 'mood'`
              private const val oid = YOUR_ENUM_OID
          }
      }
      
    3. コーデックを登録する

      runtimeOnly("io.r2dbc:r2dbc-postgresql")の変更が必要になる場合があります implementation("io.r2dbc:r2dbc-postgresql")

      @Configuration
      @EnableR2dbcRepositories
      class AppConfig : AbstractR2dbcConfiguration() {
          override fun connectionFactory(): ConnectionFactory = PostgresqlConnectionConfiguration.builder()
              .port(5432) // Add your config here.
              .codecRegistrar { _, allocator, registry ->
                  registry.addFirst(MoodCodec(allocator))
                  Mono.empty()
              }.build()
              .let { PostgresqlConnectionFactory(it) }
      }
      



    1. MySQLJava更新構文

    2. UTF-8を使用するようにDjango/MySQLサイトを設定する

    3. PostgreSQLでのCONCAT()関数のしくみ

    4. ハイフンを含むOracle正規表現は、WindowsではUnixと同じ結果にはなりません。