conversion_result application_data_buffer::put_date_time()

in modules/platforms/cpp/ignite/odbc/app/application_data_buffer.cpp [841:925]


conversion_result application_data_buffer::put_date_time(const ignite_date_time &value) {
    SQLLEN *res_len_ptr = get_result_len();
    void *data_ptr = get_data();

    switch (m_type) {
        case odbc_native_type::AI_WCHAR:
        case odbc_native_type::AI_CHAR:
        case odbc_native_type::AI_BINARY: {
            const auto val_len = SQLLEN(sizeof("HHHH-MM-DD HH:MM:SS"));
            auto tm_time = time_date_to_tm_for_strftime(value);

            return put_tm_to_string(tm_time, val_len, "%Y-%m-%d %H:%M:%S");
        }

        case odbc_native_type::AI_TDATE: {
            if (data_ptr) {
                auto *buffer = reinterpret_cast<SQL_DATE_STRUCT *>(data_ptr);
                memset(buffer, 0, sizeof(*buffer));

                buffer->year = SQLSMALLINT(value.get_year());
                buffer->month = SQLSMALLINT(value.get_month());
                buffer->day = SQLSMALLINT(value.get_day_of_month());
            }

            if (res_len_ptr)
                *res_len_ptr = static_cast<SQLLEN>(sizeof(SQL_DATE_STRUCT));

            return conversion_result::AI_FRACTIONAL_TRUNCATED;
        }

        case odbc_native_type::AI_TTIME: {
            if (data_ptr) {
                auto *buffer = reinterpret_cast<SQL_TIME_STRUCT *>(data_ptr);
                memset(buffer, 0, sizeof(*buffer));

                buffer->hour = SQLSMALLINT(value.get_hour());
                buffer->minute = SQLSMALLINT(value.get_minute());
                buffer->second = SQLSMALLINT(value.get_second());
            }

            if (res_len_ptr)
                *res_len_ptr = static_cast<SQLLEN>(sizeof(SQL_TIME_STRUCT));

            return conversion_result::AI_FRACTIONAL_TRUNCATED;
        }

        case odbc_native_type::AI_TTIMESTAMP: {
            if (data_ptr) {
                auto *buffer = reinterpret_cast<SQL_TIMESTAMP_STRUCT *>(data_ptr);
                memset(buffer, 0, sizeof(*buffer));

                buffer->year = SQLSMALLINT(value.get_year());
                buffer->month = SQLSMALLINT(value.get_month());
                buffer->day = SQLSMALLINT(value.get_day_of_month());
                buffer->hour = SQLSMALLINT(value.get_hour());
                buffer->minute = SQLSMALLINT(value.get_minute());
                buffer->second = SQLSMALLINT(value.get_second());
                buffer->fraction = value.get_nano();
            }

            if (res_len_ptr)
                *res_len_ptr = static_cast<SQLLEN>(sizeof(SQL_TIMESTAMP_STRUCT));

            return conversion_result::AI_SUCCESS;
        }

        case odbc_native_type::AI_DEFAULT:
        case odbc_native_type::AI_SIGNED_TINYINT:
        case odbc_native_type::AI_BIT:
        case odbc_native_type::AI_UNSIGNED_TINYINT:
        case odbc_native_type::AI_SIGNED_SHORT:
        case odbc_native_type::AI_UNSIGNED_SHORT:
        case odbc_native_type::AI_SIGNED_LONG:
        case odbc_native_type::AI_UNSIGNED_LONG:
        case odbc_native_type::AI_SIGNED_BIGINT:
        case odbc_native_type::AI_UNSIGNED_BIGINT:
        case odbc_native_type::AI_FLOAT:
        case odbc_native_type::AI_DOUBLE:
        case odbc_native_type::AI_NUMERIC:
        default:
            break;
    }

    return conversion_result::AI_UNSUPPORTED_CONVERSION;
}