Class LocalDateTimeCodec

  • All Implemented Interfaces:
    Codec<java.time.LocalDateTime>

    public class LocalDateTimeCodec
    extends java.lang.Object
    implements Codec<java.time.LocalDateTime>
    LocalDateTime codec
    • Field Detail

      • TIMESTAMP_FORMAT

        public static final java.time.format.DateTimeFormatter TIMESTAMP_FORMAT
        timestamp with fractional part formatter
      • TIMESTAMP_FORMAT_NO_FRACTIONAL

        public static final java.time.format.DateTimeFormatter TIMESTAMP_FORMAT_NO_FRACTIONAL
        timestamp without fractional part formatter
      • MARIADB_LOCAL_DATE_TIME

        public static final java.time.format.DateTimeFormatter MARIADB_LOCAL_DATE_TIME
        formatter
      • COMPATIBLE_TYPES

        private static final java.util.EnumSet<DataType> COMPATIBLE_TYPES
    • Constructor Detail

      • LocalDateTimeCodec

        public LocalDateTimeCodec()
    • Method Detail

      • isDelimiter

        private static boolean isDelimiter​(byte b)
      • isDigit

        private static boolean isDigit​(byte b)
      • adjustNanoPrecision

        private static void adjustNanoPrecision​(int[] parts,
                                                int nanoLength)
      • isZeroTimestamp

        public static boolean isZeroTimestamp​(int[] parts)
      • localDateTimeOf

        static java.time.LocalDateTime localDateTimeOf​(int year,
                                                       int month,
                                                       int dayOfMonth,
                                                       int hour,
                                                       int minutes,
                                                       int seconds,
                                                       int nanos)
                                                throws java.sql.SQLDataException
        LocalDateTime from server values, or SQLDataException when they cannot be represented (zero day or month, permitted by the server when sql_mode doesn't contain NO_ZERO_IN_DATE).
        Parameters:
        year - year
        month - month
        dayOfMonth - day of month
        hour - hour
        minutes - minutes
        seconds - seconds
        nanos - nanoseconds
        Returns:
        LocalDateTime
        Throws:
        java.sql.SQLDataException - if the value is not a valid date-time
      • className

        public java.lang.String className()
        Description copied from interface: Codec
        Codec native type
        Specified by:
        className in interface Codec<java.time.LocalDateTime>
        Returns:
        code native return type
      • canDecode

        public boolean canDecode​(ColumnDecoder column,
                                 java.lang.Class<?> type)
        Description copied from interface: Codec
        If codec can decode this a server datatype to a java class type
        Specified by:
        canDecode in interface Codec<java.time.LocalDateTime>
        Parameters:
        column - server datatype
        type - java return class
        Returns:
        true if codec can decode it
      • canEncode

        public boolean canEncode​(java.lang.Object value)
        Description copied from interface: Codec
        Can Codec encode the java object type
        Specified by:
        canEncode in interface Codec<java.time.LocalDateTime>
        Parameters:
        value - java object type
        Returns:
        true if codec can encode java type
      • decodeText

        public java.time.LocalDateTime decodeText​(ReadableByteBuf buf,
                                                  MutableInt length,
                                                  ColumnDecoder column,
                                                  java.util.Calendar cal,
                                                  Context context)
                                           throws java.sql.SQLDataException
        Description copied from interface: Codec
        Decode from a mysql packet text encoded a value to codec java type
        Specified by:
        decodeText in interface Codec<java.time.LocalDateTime>
        Parameters:
        buf - mysql packet buffer
        length - encoded value length
        column - server column metadata
        cal - calendar
        context - connection context
        Returns:
        decoded value
        Throws:
        java.sql.SQLDataException - if unexpected error occurs during decoding
      • decodeBinary

        public java.time.LocalDateTime decodeBinary​(ReadableByteBuf buf,
                                                    MutableInt length,
                                                    ColumnDecoder column,
                                                    java.util.Calendar cal,
                                                    Context context)
                                             throws java.sql.SQLDataException
        Description copied from interface: Codec
        Decode from a mysql packet binary encoded a value to codec java type
        Specified by:
        decodeBinary in interface Codec<java.time.LocalDateTime>
        Parameters:
        buf - mysql packet buffer
        length - encoded value length
        column - server column metadata
        cal - calendar
        context - connection context
        Returns:
        decoded value
        Throws:
        java.sql.SQLDataException - if unexpected error occurs during decoding
      • fromConnectionTimeZone

        private static java.time.LocalDateTime fromConnectionTimeZone​(java.time.LocalDateTime ldt,
                                                                      java.util.Calendar cal,
                                                                      Context context)
        Apply timezone handling when DECODING a DATETIME/TIMESTAMP wall-clock value as a LocalDateTime. By default the value is returned verbatim (LocalDateTime is zoneless). Only when pureLocalDateTime=false and preserveInstants is set (no Calendar) is the instant converted from the connection time zone to the JVM default. A Calendar has no effect on a zoneless LocalDateTime.
      • toConnectionTimeZone

        private static java.time.LocalDateTime toConnectionTimeZone​(java.time.LocalDateTime ldt,
                                                                    java.util.Calendar cal,
                                                                    Context context)
        Inverse of fromConnectionTimeZone(java.time.LocalDateTime, java.util.Calendar, org.mariadb.jdbc.client.Context), applied when ENCODING a LocalDateTime. By default, the value is sent verbatim. Only when pureLocalDateTime=false and preserveInstants is set (no Calendar) is the value, taken as a JVM-default-zone wall-clock, converted to the connection time zone before being sent (so it round-trips to the same instant).
      • encodeText

        public void encodeText​(Writer encoder,
                               Context context,
                               java.time.LocalDateTime value,
                               java.util.Calendar cal,
                               java.lang.Long maxLen)
                        throws java.io.IOException
        Description copied from interface: Codec
        Text encode value to writer
        Specified by:
        encodeText in interface Codec<java.time.LocalDateTime>
        Parameters:
        encoder - writer
        context - connection context
        value - value to encode
        cal - calendar
        maxLen - maximum value length
        Throws:
        java.io.IOException - if any socket error occurs
      • getApproximateTextProtocolLength

        public int getApproximateTextProtocolLength​(java.time.LocalDateTime value,
                                                    java.lang.Long length)
        Description copied from interface: Codec
        Get approximate text length, or -1 if unknown
        Specified by:
        getApproximateTextProtocolLength in interface Codec<java.time.LocalDateTime>
        Parameters:
        value - parameter object
        length - max length
        Returns:
        max length if known, -1 if unknown
      • encodeBinary

        public void encodeBinary​(Writer encoder,
                                 Context context,
                                 java.time.LocalDateTime value,
                                 java.util.Calendar cal,
                                 java.lang.Long maxLength)
                          throws java.io.IOException
        Description copied from interface: Codec
        Binary encode value to writer
        Specified by:
        encodeBinary in interface Codec<java.time.LocalDateTime>
        Parameters:
        encoder - writer
        context - connection context
        value - value to encode
        cal - calendar
        maxLength - maximum value length
        Throws:
        java.io.IOException - if any socket error occurs
      • getBinaryEncodeType

        public int getBinaryEncodeType()
        Description copied from interface: Codec
        Return server encoding data type
        Specified by:
        getBinaryEncodeType in interface Codec<java.time.LocalDateTime>
        Returns:
        server encoding data type