Exemplo n.º 1
0
DB_STATUS 
qeq_c2_delete(
QEF_RCB		*v_qer_p,
QEE_DSH		*i_dsh_p )
{
    DB_STATUS	    status = E_DB_OK;
    QES_DDB_SES	    *dds_p = & v_qer_p->qef_cb->qef_c2_ddb_ses;
    QES_QRY_SES	    *qss_p = & dds_p->qes_d8_union.u2_qry_ses;
    QEE_DDB_CB	    *qee_p = i_dsh_p->dsh_ddb_cb;
    QEF_QP_CB	    *qp_p = i_dsh_p->dsh_qp_ptr;
    QEQ_DDQ_CB	    *ddq_p = & qp_p->qp_ddq_cb;	
    bool	    log_qry_55 = FALSE,
                    log_err_59 = FALSE;
    i4         i4_1, i4_2;
    RQR_CB	    rqr,
		    *rqr_p = & rqr;


    if (ult_check_macro(& v_qer_p->qef_cb->qef_trace, QEF_TRACE_DDB_LOG_QRY_55,
        & i4_1, & i4_2))
    {
        log_qry_55 = TRUE;
	qeq_p34_del_csr(v_qer_p, i_dsh_p);
    }
    if (ult_check_macro(& v_qer_p->qef_cb->qef_trace, QEF_TRACE_DDB_LOG_ERR_59,
        & i4_1, & i4_2))
        log_err_59 = TRUE;


    /* 2.  set up to call RQR_DELETE */

    MEfill(sizeof(rqr), '\0', (PTR) & rqr);
    rqr_p->rqr_session = dds_p->qes_d3_rqs_p;   /* RQF session id */
    rqr_p->rqr_tabl_name = ddq_p->qeq_d7_deltable;
    rqr_p->rqr_own_name = ddq_p->qeq_d9_delown;
						/* pass owner/table name for
						** CURSOR DELETE */
    rqr_p->rqr_timeout = QEK_0_TIME_QUANTUM;
    rqr_p->rqr_q_language = qss_p->qes_q2_lang;
    rqr_p->rqr_1_site = qss_p->qes_q3_ldb_p;
    STRUCT_ASSIGN_MACRO(qee_p->qee_d5_local_qid, rqr_p->rqr_qid);

    qss_p->qes_q1_qry_status |= QES_03Q_PHASE2;
						/* enter phase 2 for update */
    status = qed_u3_rqf_call(RQR_DELETE, rqr_p, v_qer_p);
    if (status)
    {
	if (log_err_59 && ! log_qry_55)
	    qeq_p34_del_csr(v_qer_p, i_dsh_p);
    }
    else
    {
    	qss_p->qes_q1_qry_status &= ~QES_03Q_PHASE2;
						/* enter phase 2 for update */
	v_qer_p->qef_rowcount = rqr_p->rqr_tupcount;
	v_qer_p->qef_count = rqr_p->rqr_tupcount;
    }
    return(status);
}
Exemplo n.º 2
0
DB_STATUS
qeq_a2_fetch(
    QEF_RCB		*v_qer_p,
    QEF_AHD		*i_act_p,
    bool		*o_tupread_p,
    bool		*o_eod_p )
{
    DB_STATUS	    status,
                    ignore;
    DB_ERROR	    sav_error;
    QEE_DSH	    *dsh_p = (QEE_DSH *)(v_qer_p->qef_cb->qef_dsh);
    QEE_DDB_CB	    *qee_p = dsh_p->dsh_ddb_cb;
    QES_DDB_SES	    *dds_p = & v_qer_p->qef_cb->qef_c2_ddb_ses;
    QEQ_D1_QRY	    *sub_p = & i_act_p->qhd_obj.qhd_d1_qry;
    RQR_CB	    rqr,
                *rqr_p = & rqr;
    RQB_BIND	    *bind;


    MEfill(sizeof(rqr), '\0', (PTR) & rqr);

    rqr_p->rqr_session = dds_p->qes_d3_rqs_p;   /* RQF session id */
    rqr_p->rqr_q_language = sub_p->qeq_q1_lang;
    rqr_p->rqr_timeout = sub_p->qeq_q2_quantum;
    rqr_p->rqr_1_site = sub_p->qeq_q5_ldb_p;
    rqr_p->rqr_col_count = sub_p->qeq_q6_col_cnt;
    rqr_p->rqr_bind_addrs = (RQB_BIND *) qee_p->qee_d9_bind_p;
    /* must use invariant array */
    status = qed_u3_rqf_call(RQR_T_FETCH, rqr_p, v_qer_p);
    if (status)
    {
        /* must flush before returning */

        STRUCT_ASSIGN_MACRO(v_qer_p->error, sav_error);
        ignore = qeq_a3_flush(v_qer_p, sub_p->qeq_q5_ldb_p);
        STRUCT_ASSIGN_MACRO(sav_error, v_qer_p->error);
        return(status);
    }

    bind = rqr_p->rqr_bind_addrs;

    /* fix for b55503  FIXME: more general fix needed */
    if(bind->rqb_r_dt_id < 0 && bind->rqb_addr[bind->rqb_length-1] > 0)
    {
        /* nullable and null byte on */
        MEfill(bind->rqb_length-1, '\0', (PTR) bind->rqb_addr);
    }

    *o_eod_p = rqr_p->rqr_end_of_data;
    *o_tupread_p = ! rqr_p->rqr_end_of_data;

    return(E_DB_OK);
}
Exemplo n.º 3
0
DB_STATUS
qeq_a3_flush(
    QEF_RCB		*v_qer_p,
    DD_LDB_DESC	*i_ldb_p )
{
    DB_STATUS	    status;
    QES_DDB_SES	    *dds_p = & v_qer_p->qef_cb->qef_c2_ddb_ses;
    RQR_CB	    rqr,
                *rqr_p = & rqr;


    MEfill(sizeof(rqr), '\0', (PTR) & rqr);

    rqr_p->rqr_session = dds_p->qes_d3_rqs_p;
    rqr_p->rqr_1_site = i_ldb_p;

    status = qed_u3_rqf_call(RQR_T_FLUSH, rqr_p, v_qer_p);

    return(status);
}
Exemplo n.º 4
0
DB_STATUS
qeq_c5_replace(
QEF_RCB	    *v_qer_p,
QEE_DSH	    *i_dsh_p )
{
    DB_STATUS	    status = E_DB_OK;
    QEE_DSH	    *ree_p = i_dsh_p->dsh_aqp_dsh;  
						/* must use update dsh for 
						** cursor */
    QEE_DDB_CB	    *uee_p = ree_p->dsh_ddb_cb;
    QES_DDB_SES	    *dds_p = & v_qer_p->qef_cb->qef_c2_ddb_ses;
    QES_QRY_SES	    *qss_p = & dds_p->qes_d8_union.u2_qry_ses;
    QEQ_DDQ_CB	    *ddq_p = & i_dsh_p->dsh_qp_ptr->qp_ddq_cb;
    QEF_AHD	    *act_p = i_dsh_p->dsh_qp_ptr->qp_ahd;
    QEQ_D1_QRY	    *sub_p = & act_p->qhd_obj.qhd_d1_qry;
    bool	    log_qry_55 = FALSE,
                    log_err_59 = FALSE;
    i4         i4_1, i4_2;
    TPR_CB	    tpr,
		    *tpr_p = & tpr;
    RQR_CB	    rqr,
		    *rqr_p = & rqr;


    if (ult_check_macro(& v_qer_p->qef_cb->qef_trace, QEF_TRACE_DDB_LOG_QRY_55,
        & i4_1, & i4_2))
    {
	log_qry_55 = TRUE;
	qeq_p35_upd_csr(v_qer_p, i_dsh_p);
    }

    if (ult_check_macro(& v_qer_p->qef_cb->qef_trace, QEF_TRACE_DDB_LOG_ERR_59,
        & i4_1, & i4_2))
        log_err_59 = TRUE;


    /* 2.  then set up to call RQF to replace */

    MEfill(sizeof(rqr), '\0', (PTR) & rqr);
    rqr_p->rqr_session = dds_p->qes_d3_rqs_p;   /* RQF session id */

    rqr_p->rqr_q_language = qss_p->qes_q2_lang; 
    rqr_p->rqr_timeout = sub_p->qeq_q2_quantum;
    STRUCT_ASSIGN_MACRO(*sub_p->qeq_q4_seg_p->qeq_s2_pkt_p, rqr_p->rqr_msg);
    rqr_p->rqr_1_site = sub_p->qeq_q5_ldb_p;
    if (sub_p->qeq_q8_dv_cnt == 0)
    {
	rqr_p->rqr_dv_cnt = v_qer_p->qef_pcount;
	rqr_p->rqr_dv_p = (DB_DATA_VALUE *) v_qer_p->qef_param;
						/* pass array base */
    }
    else
    {

	rqr_p->rqr_dv_cnt = ddq_p->qeq_d4_total_cnt;
	rqr_p->rqr_dv_p = ddq_p->qeq_d6_fixed_data;
/*	rqr_p->rqr_dv_p = uee_p->qee_d7_dv_p + 1;*/
						/* 1-based, make 0-based */
    }
    rqr_p->rqr_qid_first = sub_p->qeq_q12_qid_first;
    STRUCT_ASSIGN_MACRO(uee_p->qee_d5_local_qid, rqr_p->rqr_qid);
    rqr_p->rqr_tmp = uee_p->qee_d1_tmp_p;

    qss_p->qes_q1_qry_status |= QES_03Q_PHASE2;
						/* enter phase 2 for update */
    status = qed_u3_rqf_call(RQR_UPDATE, rqr_p, v_qer_p);
    if (status)
    {
	if (log_err_59 && !log_qry_55)
	    qeq_p35_upd_csr(v_qer_p, i_dsh_p);
	return(status);
    }	
    else
	qss_p->qes_q1_qry_status &= ~QES_03Q_PHASE2;

    v_qer_p->qef_rowcount = rqr_p->rqr_tupcount;
    v_qer_p->qef_count = rqr_p->rqr_tupcount;
						/* return update row count */
    return(E_DB_OK);
}
Exemplo n.º 5
0
DB_STATUS
qeq_c3_fetch(
QEF_RCB	    *v_qer_p,
QEE_DSH	    *i_dsh_p )
{
    DB_STATUS	    status = E_DB_OK;
    QES_DDB_SES	    *dds_p = & v_qer_p->qef_cb->qef_c2_ddb_ses;
    QES_QRY_SES	    *qss_p = & dds_p->qes_d8_union.u2_qry_ses;
    QEE_DDB_CB	    *qee_p = i_dsh_p->dsh_ddb_cb;
/*
    QEF_QP_CB	    *qph_p = 
		    ((QEE+DSH *)(v_qer_p->qef_cb->qef_dsh))->dsh_qp_ptr;
*/
    bool	    log_qry_55 = FALSE,
                    log_err_59 = FALSE;
    i4         i4_1, i4_2;
    TPR_CB	    tpr,
		    *tpr_p = & tpr;
    RQR_CB	    rqr,
		    *rqr_p = & rqr;


    if (ult_check_macro(& v_qer_p->qef_cb->qef_trace, QEF_TRACE_DDB_LOG_QRY_55,
        & i4_1, & i4_2))
    {
        log_qry_55 = TRUE;
	qeq_p33_fet_csr(v_qer_p, i_dsh_p);
    }
    if (ult_check_macro(& v_qer_p->qef_cb->qef_trace, QEF_TRACE_DDB_LOG_ERR_59,
        & i4_1, & i4_2))
        log_err_59 = TRUE;

    if (! (qee_p->qee_d3_status & QEE_03Q_DEF))
    {
	/* cursor either not opened or closed */

	status = qed_u1_gen_interr(& v_qer_p->error);
	return(status);
    }

    if (qee_p->qee_d3_status & QEE_04Q_EOD)
    {
	/* no more data */

	v_qer_p->qef_rowcount = 0;

	/* must return E_QE0015_NO_MORE_ROWS to signal exhaustion of data */

	v_qer_p->error.err_code = E_QE0015_NO_MORE_ROWS;
	return(E_DB_WARN);
    }

/*
    ** 1.  set up to call TPF for read operation **

    MEfill(sizeof(tpr), '\0', (PTR) & tpr);
    tpr_p->tpr_session = dds_p->qes_d2_tps_p;	** TPF session id **
    tpr_p->tpr_rqf = dds_p->qes_d3_rqs_p;	** RQF session id **
    tpr_p->tpr_lang_type = qss_p->qes_q2_lang;
    tpr_p->tpr_site = & qee_p->qee_d11_ldbdesc;

    status = qed_u17_tpf_call(TPF_READ_DML, tpr_p, v_qer_p);
    if (status)
    {
	return(status);
    }
*/

    /* 2.  set up to call RQF to load data */

    MEfill(sizeof(rqr), '\0', (PTR) & rqr);
    rqr_p->rqr_session = dds_p->qes_d3_rqs_p;   /* RQF session id */

    rqr_p->rqr_q_language = qss_p->qes_q2_lang;
    rqr_p->rqr_timeout = QEK_0_TIME_QUANTUM;
    rqr_p->rqr_1_site = & qee_p->qee_d11_ldbdesc;
    STRUCT_ASSIGN_MACRO(qee_p->qee_d5_local_qid, rqr_p->rqr_qid);
    rqr_p->rqr_inv_parms = (PTR) v_qer_p->qef_param;	

    /* 3.  relay SCF parameters */

    rqr_p->rqr_tupcount = v_qer_p->qef_rowcount;
    rqr_p->rqr_tupdata = (PTR) v_qer_p->qef_output;
    rqr_p->rqr_tupdesc_p = (PTR) NULL;

    status = qed_u3_rqf_call(RQR_FETCH, rqr_p, v_qer_p);
    if (status)
    {
	if (log_err_59 && !log_qry_55)
	    qeq_p33_fet_csr(v_qer_p, i_dsh_p);

	/* it is assumed that RQF has repaired itself before returning */

	dds_p->qes_d7_ses_state = QES_0ST_NONE;	/* reset */
	STRUCT_ASSIGN_MACRO(rqr_p->rqr_error, v_qer_p->error);
	return(status);
    }

    if (rqr_p->rqr_end_of_data)
	qee_p->qee_d3_status |= QEE_04Q_EOD;	/* must set */

    /* return data gotten so far */

    v_qer_p->qef_rowcount = rqr_p->rqr_tupcount;
    v_qer_p->qef_count = rqr_p->rqr_count;

    if ((v_qer_p->qef_rowcount == 0) || (v_qer_p->qef_count == 0))
    {
	/* no more data */

	qee_p->qee_d3_status |= QEE_04Q_EOD;	/* must set */

	/* must return E_QE0015_NO_MORE_ROWS to signal no more data for 
	** subquery */

	v_qer_p->error.err_code = E_QE0015_NO_MORE_ROWS;
	return(E_DB_WARN);
    }
    else if ((v_qer_p->qef_rowcount == 0)
	     && (v_qer_p->qef_count != 0))
    {
	/* Here we emulate an incomplete condition */

	v_qer_p->error.err_code = E_AD0002_INCOMPLETE;
	return(E_DB_INFO);
    }

    return(E_DB_OK);
}
Exemplo n.º 6
0
DB_STATUS
qeq_c1_close(
QEF_RCB	    *v_qer_p,
QEE_DSH	    *i_dsh_p )
{
    DB_STATUS	    status;
    QES_DDB_SES	    *dds_p = & v_qer_p->qef_cb->qef_c2_ddb_ses;
    QEE_DDB_CB	    *qee_p = i_dsh_p->dsh_ddb_cb;
/*
    QES_QRY_SES	    *qss_p = & dds_p->qes_d8_union.u2_qry_ses;
    QEF_QP_CB	    *qp_p = dsh_p->dsh_qp_ptr;
*/
    QEQ_D1_QRY	    *sub_p = & i_dsh_p->dsh_act_ptr->qhd_obj.qhd_d1_qry;
    bool	    log_qry_55 = FALSE,
                    log_err_59 = FALSE;
    i4         i4_1, i4_2;
    RQR_CB	    rqr,
		    *rqr_p = & rqr;


    if (ult_check_macro(& v_qer_p->qef_cb->qef_trace, QEF_TRACE_DDB_LOG_QRY_55,
        & i4_1, & i4_2))
    {
        log_qry_55 = TRUE;
	qeq_p31_opn_csr(v_qer_p, i_dsh_p);
    }
    if (ult_check_macro(& v_qer_p->qef_cb->qef_trace, QEF_TRACE_DDB_LOG_ERR_59,
        & i4_1, & i4_2))
        log_err_59 = TRUE;

    /*
    ** Do actual close only if marked opened. We could be interrupted
    ** between when qef_open_count is incremented, and the actual open
    */

    if (!(qee_p->qee_d3_status & QEE_03Q_DEF))
	return (E_DB_OK);

    MEfill(sizeof(rqr), '\0', (PTR) & rqr);
    rqr_p->rqr_session = dds_p->qes_d3_rqs_p;   /* RQF session id */

    rqr_p->rqr_q_language = sub_p->qeq_q1_lang;
    rqr_p->rqr_timeout = sub_p->qeq_q2_quantum;
    rqr_p->rqr_1_site = sub_p->qeq_q5_ldb_p;
    rqr_p->rqr_tmp = qee_p->qee_d1_tmp_p;

    STRUCT_ASSIGN_MACRO(qee_p->qee_d5_local_qid, rqr_p->rqr_qid);
    rqr_p->rqr_inv_parms = (PTR) NULL;

    status = qed_u3_rqf_call(RQR_CLOSE, rqr_p, v_qer_p);
    if (status)
    {
	if (log_err_59 && !log_qry_55)
	    qeq_p31_opn_csr(v_qer_p, i_dsh_p);
	return(status);
    }	

    qee_p->qee_d3_status &= ~QEE_03Q_DEF;	/* cursor closed */

    return(E_DB_OK);
}
Exemplo n.º 7
0
DB_STATUS
qeq_a1_doagg(
    QEF_RCB		*v_qer_p,
    QEF_AHD		*i_act_p )
{
    DB_STATUS	    status;
    QES_DDB_SES	    *dds_p = & v_qer_p->qef_cb->qef_c2_ddb_ses;
    QEE_DSH	    *dsh_p = (QEE_DSH *)(v_qer_p->qef_cb->qef_dsh);
    QEE_DDB_CB	    *qee_p = dsh_p->dsh_ddb_cb;
    QEF_QP_CB	    *qp_p = dsh_p->dsh_qp_ptr;
    QEQ_DDQ_CB	    *ddq_p = & qp_p->qp_ddq_cb;
    QES_QRY_SES	    *qqs_p = & dds_p->qes_d8_union.u2_qry_ses;
    QEQ_D1_QRY	    *sub_p = & i_act_p->qhd_obj.qhd_d1_qry;
    RQR_CB	    rqr,
                *rqr_p = & rqr;
    i4		    n, size;
    DB_DATA_VALUE   *dv_p;
    char	    **pp,
                *attr_p;
    RQB_BIND	    *bind_p = (RQB_BIND *) qee_p->qee_d9_bind_p;


    /* set up RQB_BIND array for retrieving intermediate result */

    dv_p = qee_p->qee_d7_dv_p;
    dv_p += sub_p->qeq_q11_dv_offset;
    pp = qee_p->qee_d8_attr_pp;
    pp += sub_p->qeq_q11_dv_offset; 		/* get attribute space ptr */
    attr_p = *pp;

    for (n = 0; n < sub_p->qeq_q6_col_cnt; ++n)
    {
        /* set up column types and sizes for fetching with RQF */

        bind_p->rqb_length = dv_p->db_length;
        bind_p->rqb_dt_id = dv_p->db_datatype;
        bind_p->rqb_prec = dv_p->db_prec;
        bind_p->rqb_addr = (PTR) dv_p->db_data;

        bind_p++;
        dv_p++;
    }

    MEfill(sizeof(rqr), '\0', (PTR) & rqr);

    rqr_p->rqr_session = dds_p->qes_d3_rqs_p;   /* RQF session id */

    rqr_p->rqr_q_language = sub_p->qeq_q1_lang;
    rqr_p->rqr_timeout = sub_p->qeq_q2_quantum;
    STRUCT_ASSIGN_MACRO(*sub_p->qeq_q4_seg_p->qeq_s2_pkt_p,
                        rqr_p->rqr_msg);
    rqr_p->rqr_1_site = sub_p->qeq_q5_ldb_p;
    rqr_p->rqr_tmp = dsh_p->dsh_ddb_cb->qee_d1_tmp_p;

    if (sub_p->qeq_q8_dv_cnt == 0)
    {
        rqr_p->rqr_dv_cnt = 0;
        rqr_p->rqr_dv_p = (DB_DATA_VALUE *) NULL;
        rqr_p->rqr_inv_parms = (PTR) v_qer_p->qef_param;
    }
    else
    {
        rqr_p->rqr_dv_cnt = sub_p->qeq_q8_dv_cnt;
        rqr_p->rqr_dv_p = qee_p->qee_d7_dv_p + 1;
        rqr_p->rqr_inv_parms = (PTR) NULL;
    }

    rqr_p->rqr_qid_first = sub_p->qeq_q12_qid_first;
    status = qed_u3_rqf_call(RQR_DATA_VALUES, rqr_p, v_qer_p);

    return(status);
}