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); }
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); }
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); }
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); }
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); }
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); }
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); }