Example #1
0
File: result.c Project: jeeb/murphy
double mql_result_rows_get_floating(mql_result_t *r, int colidx, int rowidx)
{
    result_rows_t *rslt = (result_rows_t *)r;
    void *addr;
    double v = 0;

    MDB_CHECKARG(rslt && rslt->type == mql_result_rows &&
                 colidx >= 0 && colidx < rslt->ncol &&
                 rowidx >= 0 && rowidx < rslt->nrow, 0.0);

    if ((addr = get_column_address(rslt, colidx, rowidx))) {
        switch (get_column_type(rslt, colidx)) {
        case mqi_varchar:
            v = strtod(*(char **)addr, NULL);
            break;
        case mqi_integer:
            v = *(int32_t *)addr;
            break;
        case mqi_unsignd:
            v = *(uint32_t *)addr;
            break;
        case mqi_floating:
            v = *(double *)addr;
            break;
        default:
            v = 0;
            break;
        }
    }

    return v;
}
Example #2
0
inline ConstSubspecRef Spec::get_subtable_spec(size_t column_ndx) const noexcept
{
    REALM_ASSERT(column_ndx < get_column_count());
    REALM_ASSERT(get_column_type(column_ndx) == col_type_Table);
    size_t subspec_ndx = get_subspec_ndx(column_ndx);
    return ConstSubspecRef(&m_subspecs, subspec_ndx);
}
Example #3
0
void lar_solver::fill_column_types() {
    m_lar_core_solver_params.m_column_types.clear();
    m_lar_core_solver_params.m_column_types.resize(m_map_from_var_index_to_column_info_with_cls.size(), free_column);
    for (auto t : m_set_of_canonic_left_sides) {
        var_index additional_vj = t->m_additional_var_index;
        unsigned j = get_column_index_from_var_index(additional_vj);
        lean_assert(is_valid(j));
        m_lar_core_solver_params.m_column_types[j] = get_column_type(get_column_info_from_var_index(additional_vj));
    }
}
Example #4
0
File: result.c Project: jeeb/murphy
const char *mql_result_rows_get_string(mql_result_t *r, int colidx, int rowidx,
                                       char *buf, int len)
{
    result_rows_t *rslt = (result_rows_t *)r;
    void *addr;
    char *v = NULL;

    MDB_CHECKARG(rslt && rslt->type == mql_result_rows &&
                 colidx >= 0 && colidx < rslt->ncol &&
                 rowidx >= 0 && rowidx < rslt->nrow &&
                 (!buf || (buf && len > 0)), NULL);

    if ((v = buf))
        *v = '\0';

    if ((addr = get_column_address(rslt, colidx, rowidx))) {
        switch (get_column_type(rslt, colidx)) {
        case mqi_varchar:
            if (!v)
                v = *(char **)addr;
            else {
                strncpy(v, *(char **)addr, len);
                v[len-1] = '\0';
            }
            break;

        case mqi_integer:
            if (!v)
                v = "";
            else
                snprintf(v, len, "%d", *(int32_t *)addr);
            break;

        case mqi_unsignd:
            if (!v)
                v = "";
            else
                snprintf(v, len, "%u", *(uint32_t *)addr);
            break;

        case mqi_floating:
            if (!v)
                v = "";
            else
                snprintf(v, len, "%lf", *(double *)addr);
            break;

        default:
            v = "";
            break;
        }
    }

    return v;
}
Example #5
0
inline void Descriptor::set_link_type(size_t col_ndx, LinkType link_type)
{
    typedef _impl::TableFriend tf;

    if (REALM_UNLIKELY(!is_attached()))
        throw LogicError(LogicError::detached_accessor);
    if (REALM_UNLIKELY(col_ndx >= get_column_count()))
        throw LogicError(LogicError::column_index_out_of_range);
    if (REALM_UNLIKELY(!tf::is_link_type(ColumnType(get_column_type(col_ndx)))))
        throw LogicError(LogicError::illegal_type);

    tf::set_link_type(*get_root_table(), col_ndx, link_type); // Throws
}