DB_STATUS qel_c6_ldb_tables( QEF_RCB *v_qer_p, QEC_LINK *v_lnk_p ) { DB_STATUS status; DD_2LDB_TAB_INFO *tabinfo_p = v_lnk_p->qec_1_ddl_info_p-> qed_d6_tab_info_p; DD_LDB_DESC *ldb_p = v_lnk_p->qec_19_ldb_p; QEQ_1CAN_QRY *sel_p = v_lnk_p->qec_6_select_p; QEC_L16_TABLES *tables_p = v_lnk_p->qec_9_tables_p; /* 1. set up for retrieving from IITABLES */ MEcopy(tabinfo_p->dd_t1_tab_name, DB_TAB_MAXNAME, tables_p->l16_1_tab_name); MEcopy(tabinfo_p->dd_t2_tab_owner, DB_OWN_MAXNAME, tables_p->l16_2_tab_owner); /* if (v_qer_p->qef_r3_ddb_req.qer_d13_ctl_info & QEF_06_REG_PROC) */ if (v_qer_p->qef_r3_ddb_req.qer_d7_ddl_info.qed_d6_tab_info_p-> dd_t3_tab_type == DD_5OBJ_REG_PROC ) sel_p->qeq_c1_can_id = SEL_118_II_PROCEDURES; else sel_p->qeq_c1_can_id = SEL_117_II_TABLES; sel_p->qeq_c2_rqf_bind_p = v_lnk_p->qec_20_rqf_bind_p; sel_p->qeq_c3_ptr_u.l16_tables_p = tables_p; sel_p->qeq_c4_ldb_p = ldb_p; sel_p->qeq_c5_eod_b = FALSE; sel_p->qeq_c6_col_cnt = 0; /* 2. generate and send retrieve query */ status = qel_s4_prepare(v_qer_p, v_lnk_p); if (status) return(status); if (! sel_p->qeq_c5_eod_b) status = qel_s3_flush(v_qer_p, v_lnk_p); if (v_lnk_p->qec_27_select_cnt == 0) { if ((v_lnk_p->qec_10_haves & ~QEC_03_INGRES) && (tabinfo_p->dd_t3_tab_type == DD_4OBJ_INDEX)) v_lnk_p->qec_10_haves |= QEC_08_NO_IITABLES; else status = qed_u2_set_interr( E_QE0902_NO_LDB_TAB_ON_CRE_LINK, & v_qer_p->error); } return(status); }
DB_STATUS qet_t6_ddl_cc( QEF_RCB *v_qer_p) { DB_STATUS status= E_DB_OK; QEF_CB *qef_cb = v_qer_p->qef_cb; QEF_DDB_REQ *ddr_p = & v_qer_p->qef_r3_ddb_req; QES_DDB_SES *dds_p = & v_qer_p->qef_cb->qef_c2_ddb_ses; TPR_CB tpr_cb, *tpr_p = & tpr_cb; /* make sure that this is a legal QEF call */ if (qef_cb->qef_stat != QEF_NOTRAN) { status = qed_u2_set_interr( E_QE0962_DDL_CC_ON_XACTION, & v_qer_p->error); return (E_DB_WARN); /* a warning */ } MEfill(sizeof(tpr_cb), '\0', (PTR) & tpr_cb); tpr_p->tpr_session = dds_p->qes_d2_tps_p; /* TPF session cb ptr */ tpr_p->tpr_rqf = dds_p->qes_d3_rqs_p; /* RQF session cb ptr */ if (ddr_p->qer_d12_ddl_concur_on_b == QEF_ON) { dds_p->qes_d9_ctl_info |= QES_01CTL_DDL_CONCURRENCY_ON; status = qed_u17_tpf_call(TPF_1T_DDL_CC, tpr_p, v_qer_p); } else { dds_p->qes_d9_ctl_info &= ~QES_01CTL_DDL_CONCURRENCY_ON; status = qed_u17_tpf_call(TPF_0F_DDL_CC, tpr_p, v_qer_p); } return(status); }
DB_STATUS qee_d3_agg( QEF_RCB *qef_rcb, QEE_DSH *dsh, ULM_RCB *ulm) { DB_STATUS status = E_DB_OK; QEF_QP_CB *qp_p = dsh->dsh_qp_ptr; QEQ_DDQ_CB *ddq_p = & qp_p->qp_ddq_cb; QEE_DDB_CB *qee_p = dsh->dsh_ddb_cb; QEQ_D1_QRY *sub_p; DB_DATA_VALUE *dv1_p, *dv2_p; if (ddq_p->qeq_d4_total_cnt == 0) return(E_DB_OK); /* no aggregate actions */ qee_p->qee_d6_dynamic_cnt = ddq_p->qeq_d4_total_cnt - ddq_p->qeq_d5_fixed_cnt; /* 1. allocate array for DB_DATA_VALUEs */ ulm->ulm_psize = (ddq_p->qeq_d4_total_cnt + 1) * sizeof(DB_DATA_VALUE); /* 1-based */ if (status = qec_malloc(ulm)) { qef_rcb->error.err_code = ulm->ulm_error.err_code; qed_u10_trap(); return(status); } qee_p->qee_d7_dv_p = (DB_DATA_VALUE *) ulm->ulm_pptr; /* ptr to array */ /* 2. copy user's parameters if any */ if (ddq_p->qeq_d5_fixed_cnt > 0) { i4 m; dv1_p = ddq_p->qeq_d6_fixed_data; dv2_p = qee_p->qee_d7_dv_p + 1; /* 1-based */ for (m = 0; m < ddq_p->qeq_d5_fixed_cnt; ++m) { STRUCT_ASSIGN_MACRO(*dv1_p, *dv2_p); ++dv1_p; ++dv2_p; } } if (qee_p->qee_d6_dynamic_cnt > 0) { QEF_AHD *act_p = qp_p->qp_ahd; i4 maxbind = 0, aggcnt, ptrcnt, i, j; char **pp; /* 3. allocate space for array of ptrs to aggregate spaces */ ptrcnt = ddq_p->qeq_d4_total_cnt + 1; ulm->ulm_psize = ptrcnt * sizeof(char *); /* extra ptr space for safety */ if (status = qec_malloc(ulm)) { qef_rcb->error.err_code = ulm->ulm_error.err_code; qed_u10_trap(); return(status); } qee_p->qee_d8_attr_pp = (char **) ulm->ulm_pptr; /* ptr to ptrs to attribute space */ pp = qee_p->qee_d8_attr_pp; for (i = 0; i < ptrcnt; i++, pp++) *pp = (char *) NULL; pp = qee_p->qee_d8_attr_pp + 1; /* initialize as 1-based */ /* 4. traverse the action list to allocate space for aggregates */ aggcnt = 0; for (i = 0; i < qp_p->qp_ahd_cnt && act_p; ++i) { char *attr_p; i4 curaggsize = 0; if (act_p->ahd_atype == QEA_D6_AGG) { /* 5. allocate space to hold intermediate results ** for current aggregate action */ sub_p = & act_p->qhd_obj.qhd_d1_qry; if (sub_p->qeq_q6_col_cnt > maxbind) maxbind = sub_p->qeq_q6_col_cnt; /* record maximum bind space */ aggcnt += sub_p->qeq_q6_col_cnt; ulm->ulm_psize = sub_p->qeq_q10_agg_size; if (status = qec_malloc(ulm)) { qef_rcb->error.err_code = ulm->ulm_error.err_code; qed_u10_trap(); return(status); } *pp = (char *) ulm->ulm_pptr; /* set ptr to attribute space */ /* 6. set up DB_DATA_VALUE ptr for current aggregate action */ dv1_p = sub_p->qeq_q9_dv_p; /* ptr to expected DB_DATA_VALUEs */ dv2_p = qee_p->qee_d7_dv_p + sub_p->qeq_q11_dv_offset; /* ptr into DB_DATA_VALUE array */ curaggsize = 0; attr_p = *pp; for (j = 0; j < sub_p->qeq_q6_col_cnt; ++j) { STRUCT_ASSIGN_MACRO(*dv1_p, *dv2_p); dv2_p->db_data = (PTR) attr_p; attr_p += DB_ALIGN_MACRO(dv1_p->db_length); curaggsize += DB_ALIGN_MACRO(dv1_p->db_length); ++dv1_p; ++dv2_p; } if (curaggsize != sub_p->qeq_q10_agg_size) { qed_u10_trap(); status = qed_u2_set_interr(E_QE1995_BAD_AGGREGATE_ACTION, & qef_rcb->error); return(status); } ++pp; /* advance to pt to next slot */ } act_p = act_p->ahd_next; /* advance */ } if (aggcnt != qee_p->qee_d6_dynamic_cnt || maxbind <= 0) { qed_u10_trap(); status = qed_u2_set_interr(E_QE1999_BAD_QP, & qef_rcb->error); return(status); } /* 7. allocate max space for RQB_BIND array */ ulm->ulm_psize = maxbind * sizeof(RQB_BIND); if (status = qec_malloc(ulm)) { qef_rcb->error.err_code = ulm->ulm_error.err_code; qed_u10_trap(); return(status); } qee_p->qee_d9_bind_p = (PTR) ulm->ulm_pptr; /* ptr to RQR_BIND array */ } return(status); }
DB_STATUS qeq_c4_open( QEF_RCB *v_qer_p, QEE_DSH *v_dsh_p ) { DB_STATUS status = E_DB_OK; QEF_CB *qef_cb = v_qer_p->qef_cb; QEF_AHD *act_p = (QEF_AHD *) NULL, *def_act_p = (QEF_AHD *) NULL; i4 def_act_cnt = 0, get_act_cnt = 0, lnk_act_cnt = 0; QEQ_D1_QRY *sub_p = (QEQ_D1_QRY *) NULL; bool read_b = FALSE, last_b = FALSE, val_qp_51 = FALSE, log_qry_55 = FALSE, log_err_59 = FALSE; i4 i4_1, i4_2; 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, v_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; /* verify that the following conditions are true of the query plan: ** ** 1) there is exactly one last QEA_D7_OPN action, ** 2) there are no QEA_D2_GET, QEA_D4_LNK actions, ** 3) there are no read actions */ act_p = v_dsh_p->dsh_qp_ptr->qp_ahd; while (act_p != (QEF_AHD *) NULL) { if (act_p->ahd_atype == QEA_D7_OPN) { def_act_cnt++; if (act_p->ahd_next == (QEF_AHD *) NULL) last_b = TRUE; } else if (act_p->ahd_atype == QEA_D2_GET) get_act_cnt++; else if (act_p->ahd_atype == QEA_D4_LNK) lnk_act_cnt++; else if (act_p->ahd_atype == QEA_D1_QRY) { sub_p = & act_p->qhd_obj.qhd_d1_qry; if (sub_p->qeq_q3_ctl_info & QEQ_001_READ_TUPLES) read_b = TRUE; } act_p = act_p->ahd_next; } if (! last_b || def_act_cnt != 1 || get_act_cnt != 0 || lnk_act_cnt != 0 || read_b) { if (log_err_59 && !log_qry_55) qeq_p31_opn_csr(v_qer_p, v_dsh_p);; status = qed_u2_set_interr(E_QE1999_BAD_QP, & v_qer_p->error); return(status); } qee_d1_qid(v_dsh_p); /* generate query id for ** sending to LDB */ /* process each action in the QP */ for (act_p = v_dsh_p->dsh_qp_ptr->qp_ahd; act_p != (QEF_AHD *)NULL; act_p = act_p->ahd_next) { /* check for deferred cursor, only one at a time is allowed */ if (act_p->ahd_flags & QEA_DEF) { v_dsh_p->dsh_qp_status |= DSH_DEFERRED_CURSOR; if (qef_cb->qef_defr_curs) { qed_u10_trap(); v_qer_p->error.err_code = E_QE0026_DEFERRED_EXISTS; return(E_DB_ERROR); } } switch (act_p->ahd_atype) { case QEA_D1_QRY: case QEA_D8_CRE: case QEA_D9_UPD: status = qeq_d1_qry_act(v_qer_p, & act_p); if (status) qed_u10_trap(); break; case QEA_D3_XFR: status = qeq_d5_xfr_act(v_qer_p, act_p); if (status) qed_u10_trap(); break; case QEA_D6_AGG: status = qeq_d10_agg_act(v_qer_p, act_p); if (status) qed_u10_trap(); break; case QEA_D7_OPN: def_act_p = act_p; /* keep track */ status = qeq_d8_def_act(v_qer_p, act_p); if (status) qed_u10_trap(); break; default: status = qed_u1_gen_interr(& v_qer_p->error); qed_u10_trap(); break; } if (! status) v_dsh_p->dsh_act_ptr = act_p; /* promote to current dsh */ } /* cleanup done by caller */ v_dsh_p->dsh_act_ptr = def_act_p; /* pt to define action */ return (status); }
DB_STATUS qeu_d5_alt_tab( QEF_RCB *v_qer_p, DMT_CB *i_dmt_p) { DB_STATUS status; QES_DDB_SES *dds_p = & v_qer_p->qef_cb->qef_c2_ddb_ses; DD_LDB_DESC *cdb_p = & dds_p->qes_d4_ddb_p->dd_d3_cdb_info.dd_i1_ldb_desc; QEC_D9_TABLEINFO tabinfo; /* dummy part of link */ QEC_D6_OBJECTS objects, *objs_p = & objects; QEC_L16_TABLES tables, *tabs_p = & tables; QEQ_1CAN_QRY upd, *upd_p = & upd; QEC_LINK link, *lnk_p = & link; DMT_CHAR_ENTRY *chr_p; bool err_b = FALSE; /* assume no error */ i4 xact_mode; MEfill(sizeof(link), '\0', (PTR) & link); lnk_p->qec_2_tableinfo_p = & tabinfo; lnk_p->qec_13_objects_p = objs_p; /* 1. vefify input parameters */ chr_p = (DMT_CHAR_ENTRY *) i_dmt_p->dmt_char_array.data_address; if (chr_p->char_id != DMT_C_ZOPTSTATS) err_b = TRUE; else { if (chr_p->char_value == DMT_C_ON) { tabs_p->l16_9_stats[0] = 'Y'; tabs_p->l16_9_stats[1] = EOS; } else if (chr_p->char_value == DMT_C_OFF) { tabs_p->l16_9_stats[0] = 'N'; tabs_p->l16_9_stats[1] = EOS; } else err_b = TRUE; } if (err_b) { status = qed_u2_set_interr(E_QE0018_BAD_PARAM_IN_CB, & v_qer_p->error); return(status); } /* 2. inform TPF of update */ /* 2.1 2PC is required if DDL concurrency is off. */ if (dds_p->qes_d9_ctl_info & QES_01CTL_DDL_CONCURRENCY_ON) xact_mode = QEK_4TPF_1PC; else xact_mode = QEK_3TPF_UPDATE; status = qet_t5_register(v_qer_p, cdb_p, DB_SQL, xact_mode); if (status) return(status); /* 3. set up to update TABLE_STATS and MODIFY_DATE of IIDD_TABLES */ qed_u0_trimtail( (char *) & i_dmt_p->dmt_table, DB_TAB_MAXNAME, tabs_p->l16_1_tab_name); qed_u0_trimtail( (char *) & i_dmt_p->dmt_owner, DB_OWN_MAXNAME, tabs_p->l16_2_tab_owner); status = qed_u8_gmt_now(v_qer_p, tabs_p->l16_21_mod_date); if (status) return(status); tabs_p->l16_21_mod_date[DD_25_DATE_SIZE] = EOS; upd_p->qeq_c1_can_id = UPD_731_DD_TABLES; upd_p->qeq_c2_rqf_bind_p = NULL; upd_p->qeq_c3_ptr_u.l16_tables_p = tabs_p; upd_p->qeq_c4_ldb_p = cdb_p; lnk_p->qec_23_update_p = upd_p; status = qel_u1_update(v_qer_p, lnk_p); if (status) { return(status); } return(E_DB_OK); }
DB_STATUS qeu_16_tree( QEF_RCB *i_qer_p, QEUQ_CB *i_quq_p, QEC_LINK *v_lnk_p) { DB_STATUS status; QES_DDB_SES *dds_p = & i_qer_p->qef_cb->qef_c2_ddb_ses; /* QED_DDL_INFO *ddl_p = v_lnk_p->qec_1_ddl_info_p; */ DD_LDB_DESC *cdb_p = & dds_p->qes_d4_ddb_p->dd_d3_cdb_info.dd_i1_ldb_desc; QEC_D6_OBJECTS *objects_p = v_lnk_p->qec_13_objects_p; QEF_DATA *data_p = i_quq_p->qeuq_tre_tup; QEC_D10_TREE tree, *tree_p = & tree; QEQ_1CAN_QRY *ins_p = v_lnk_p->qec_22_insert_p; i4 seq; /* 1. set up constant values for all entries */ tree_p->d10_1_treetabbase = objects_p->d6_3_obj_id.db_tab_base; tree_p->d10_2_treetabidx = objects_p->d6_3_obj_id.db_tab_index; tree_p->d10_3_treeid1 = (i4) objects_p->d6_4_qry_id.db_qry_high_time; tree_p->d10_4_treeid2 = (i4) objects_p->d6_4_qry_id.db_qry_low_time; tree_p->d10_6_treemode = DB_VIEW; tree_p->d10_7_treevers = DD_0TV_UNKNOWN; #ifdef DDB_1TV_VAX tree_p->d10_7_treevers = DD_1TV_VAX; /* VAX binary representation */ #endif for (seq = 0; seq < i_quq_p->qeuq_ct; seq++) { /* 2. fill in specific information for current entry */ tree_p->d10_5_treeseq = seq; /* starts from 0 */ if (data_p->dt_size > QEK_1024_TREE_SIZE + 2) /* include 2-byte length */ { status = qed_u2_set_interr(E_QE0018_BAD_PARAM_IN_CB, & i_qer_p->error); return(status); } else { MEcopy((char *) data_p->dt_data, data_p->dt_size, tree_p->d10_8_treetree); tree_p->d10_8_treetree[data_p->dt_size] = EOS; tree_p->d10_9_treesize = data_p->dt_size; } data_p = data_p->dt_next; /* advance to next item */ /* 3. insert into IIDD_DDB_TREE */ ins_p->qeq_c1_can_id = INS_619_DD_DDB_TREE; ins_p->qeq_c3_ptr_u.d10_tree_p = tree_p; ins_p->qeq_c4_ldb_p = cdb_p; status = qel_i1_insert(i_qer_p, v_lnk_p); if (status) return(status); } return(E_DB_OK); }
DB_STATUS qeu_15_views( QEF_RCB *i_qer_p, QEUQ_CB *i_quq_p, QEC_LINK *v_lnk_p) { DB_STATUS status; QES_DDB_SES *dds_p = & i_qer_p->qef_cb->qef_c2_ddb_ses; QED_DDL_INFO *ddl_p = v_lnk_p->qec_1_ddl_info_p; DD_LDB_DESC *cdb_p = & dds_p->qes_d4_ddb_p->dd_d3_cdb_info.dd_i1_ldb_desc; QEUQ_DDB_CB *ddu_p = & i_quq_p->qeuq_ddb_cb; QEF_DATA *data_p = i_quq_p->qeuq_qry_tup; QEC_L17_VIEWS views, *views_p = & views; QEQ_1CAN_QRY *ins_p = v_lnk_p->qec_22_insert_p; i4 seq; /* 1. set up constant values for all entries */ qed_u0_trimtail( ddl_p->qed_d1_obj_name, DB_OBJ_MAXNAME, views_p->l17_1_tab_name); qed_u0_trimtail( ddl_p->qed_d2_obj_owner, DB_OWN_MAXNAME, views_p->l17_2_tab_owner); if (ddu_p->qeu_1_lang == DB_SQL) views_p->l17_3_dml[0] = 'S'; else if (ddu_p->qeu_1_lang == DB_QUEL) views_p->l17_3_dml[0] = 'Q'; else { status = qed_u2_set_interr(E_QE0018_BAD_PARAM_IN_CB, & i_qer_p->error); return(status); } views_p->l17_3_dml[1] = EOS; if (ddu_p->qeu_2_view_chk_b) views_p->l17_4_chk_option[0] = 'Y'; else views_p->l17_4_chk_option[0] = 'N'; views_p->l17_4_chk_option[1] = EOS; for (seq = 0; seq < i_quq_p->qeuq_cq; seq++) { /* 2. fill in specific information for current entry */ views_p->l17_5_sequence = seq + 1; if (data_p->dt_size > QEK_256_VIEW_SIZE) { status = qed_u2_set_interr(E_QE0018_BAD_PARAM_IN_CB, & i_qer_p->error); return(status); } else { MEcopy((char *) data_p->dt_data, data_p->dt_size, views_p->l17_6_txt_seg); views_p->l17_6_txt_seg[data_p->dt_size] = EOS; views_p->l17_7_txt_size = data_p->dt_size; } data_p = data_p->dt_next; /* advance to next item */ /* 3. insert into IIDD_VIEWS */ ins_p->qeq_c1_can_id = INS_632_DD_VIEWS; ins_p->qeq_c3_ptr_u.l17_views_p = views_p; ins_p->qeq_c4_ldb_p = cdb_p; status = qel_i1_insert(i_qer_p, v_lnk_p); if (status) return(status); } return(E_DB_OK); }
DB_STATUS qeu_14_columns( QEF_RCB *i_qer_p, QEUQ_CB *i_quq_p, QEC_LINK *v_lnk_p) { DB_STATUS status; QES_DDB_SES *dds_p = & i_qer_p->qef_cb->qef_c2_ddb_ses; QED_DDL_INFO *ddl_p = v_lnk_p->qec_1_ddl_info_p; DD_LDB_DESC *cdb_p = & dds_p->qes_d4_ddb_p->dd_d3_cdb_info.dd_i1_ldb_desc; QEC_L3_COLUMNS dd_columns, *columns_p = & dd_columns; /* tuple struct */ QEQ_1CAN_QRY *ins_p = v_lnk_p->qec_22_insert_p; QEP_PTR_UNION ptr_u; DMU_CB *dmu_p; DMF_ATTR_ENTRY **col_pp, *curcol_p; i4 colnum, coltype, postype; QEC_LONGNAT_TO_I4 coerce; ADI_DT_NAME adi_dname; ptr_u.qep_ptr_u.qep_1_ptr = i_quq_p->qeuq_dmf_cb; dmu_p = ptr_u.qep_ptr_u.qep_3_dmu_cb_p; ptr_u.qep_ptr_u.qep_1_ptr = dmu_p->dmu_attr_array.ptr_address; col_pp = ptr_u.qep_ptr_u.qep_4_dmu_attr_pp; /* 1. set up constant values for all columns */ qed_u0_trimtail( ddl_p->qed_d1_obj_name, DB_OBJ_MAXNAME, columns_p->l3_1_tab_name); qed_u0_trimtail( ddl_p->qed_d2_obj_owner, DB_OWN_MAXNAME, columns_p->l3_2_tab_owner); columns_p->l3_10_seq_in_key = 0; for (colnum = 0; colnum < i_quq_p->qeuq_ano; colnum++, col_pp++) { curcol_p = *col_pp; /* 2. fill in specific information for current column */ qed_u0_trimtail( curcol_p->attr_name.db_att_name, DB_ATT_MAXNAME, columns_p->l3_3_col_name); coerce.qec_i4_i4.qec_1_i4 = curcol_p->attr_type; coltype = coerce.qec_i4_i4.qec_2_i4; if (coltype < 0) { columns_p->l3_7_nulls[0] = 'Y'; postype = -coltype; /* must make positive */ } else { columns_p->l3_7_nulls[0] = 'N'; postype = coltype; } columns_p->l3_7_nulls[1] = EOS; /* call adi_tyname to get data type name */ status = adi_tyname(i_qer_p->qef_adf_cb, postype, &adi_dname); if (status == E_DB_OK) STcopy(adi_dname.adi_dtname, columns_p->l3_4_data_type); else { status = qed_u2_set_interr(E_QE0018_BAD_PARAM_IN_CB, & i_qer_p->error); return(status); } coerce.qec_i4_i4.qec_1_i4 = curcol_p->attr_size; columns_p->l3_5_length = coerce.qec_i4_i4.qec_2_i4; coerce.qec_i4_i4.qec_1_i4 = curcol_p->attr_precision; columns_p->l3_6_scale = coerce.qec_i4_i4.qec_2_i4; if (curcol_p->attr_flags_mask & DMU_F_NDEFAULT) columns_p->l3_8_defaults[0] = 'N'; else columns_p->l3_8_defaults[0] = 'Y'; columns_p->l3_8_defaults[1] = EOS; columns_p->l3_9_seq_in_row = colnum + 1; columns_p->l3_10_seq_in_key = 0; /* none */ columns_p->l3_11_sort_dir[0] = 'A'; /* assume ascending */ columns_p->l3_11_sort_dir[1] = EOS; /* null terminate */ columns_p->l3_12_ing_datatype = coltype; /* 3. insert into IIDD_COLUMNS */ ins_p->qeq_c1_can_id = INS_602_DD_COLUMNS; ins_p->qeq_c3_ptr_u.l3_columns_p = columns_p; ins_p->qeq_c4_ldb_p = cdb_p; status = qel_i1_insert(i_qer_p, v_lnk_p); if (status) return(status); } return(E_DB_OK); }
DB_STATUS qel_32_tables( QEF_RCB *i_qer_p, QEC_LINK *v_lnk_p ) { DB_STATUS status; QES_DDB_SES *dds_p = & i_qer_p->qef_cb->qef_c2_ddb_ses; QED_DDL_INFO *ddl_p = v_lnk_p->qec_1_ddl_info_p; DD_2LDB_TAB_INFO *tabinfo_p = ddl_p->qed_d6_tab_info_p; QEC_L16_TABLES *tables_p = v_lnk_p->qec_9_tables_p; QEQ_1CAN_QRY *sel_p = v_lnk_p->qec_6_select_p, *ins_p = v_lnk_p->qec_22_insert_p; /* working structure */ DD_LDB_DESC *cdb_p = & dds_p->qes_d4_ddb_p->dd_d3_cdb_info.dd_i1_ldb_desc, *ldb_p = v_lnk_p->qec_19_ldb_p; u_i4 l_obj; if (v_lnk_p->qec_10_haves & QEC_08_NO_IITABLES) return(E_DB_OK); /* 1. set up to retrieve from IITABLES */ qed_u0_trimtail( tabinfo_p->dd_t1_tab_name, (u_i4) DB_TAB_MAXNAME, tables_p->l16_1_tab_name); qed_u0_trimtail( tabinfo_p->dd_t2_tab_owner, (u_i4) DB_OWN_MAXNAME, tables_p->l16_2_tab_owner); sel_p->qeq_c1_can_id = SEL_117_II_TABLES; sel_p->qeq_c3_ptr_u.l16_tables_p = tables_p; sel_p->qeq_c4_ldb_p = ldb_p; sel_p->qeq_c2_rqf_bind_p = v_lnk_p->qec_20_rqf_bind_p; /* 2. send SELECT query and fetch first tuple */ status = qel_s4_prepare(i_qer_p, v_lnk_p); if (status) return(status); if (! sel_p->qeq_c5_eod_b) { status = qel_s3_flush(i_qer_p, v_lnk_p); if (status) return(status); } if (v_lnk_p->qec_27_select_cnt != 1) { status = qed_u1_gen_interr(& i_qer_p->error); return(status); } if (v_lnk_p->qec_10_haves & QEC_10_USE_PHY_SRC) { /* 3. read remaining information from the LDB's IIPHYSICAL_TABLES */ sel_p->qeq_c1_can_id = SEL_113_II_PHYSICAL_TABLES; /* 3.1 send SELECT query and fetch first tuple */ status = qel_s4_prepare(i_qer_p, v_lnk_p); if (status) return(status); if (! sel_p->qeq_c5_eod_b) { status = qel_s3_flush(i_qer_p, v_lnk_p); if (status) return(status); } if (v_lnk_p->qec_27_select_cnt != 1) { status = qed_u1_gen_interr(& i_qer_p->error); return(status); } } if (v_lnk_p->qec_10_haves & QEC_11_LDB_DIFF_ARCH) { /* binary statistics data cannot be propagated for use due to ** different LDB architecture */ tables_p->l16_9_stats[0] = 'N'; /* declare no statistics */ } else if (! ( (tables_p->l16_9_stats[0] == 'N') || (tables_p->l16_9_stats[0] == 'n') )) v_lnk_p->qec_10_haves |= QEC_05_STATS; if (! ( (tables_p->l16_10_indexes[0] == 'N') || (tables_p->l16_10_indexes[0] == 'n') )) v_lnk_p->qec_10_haves |= QEC_02_INDEXES; /* 3. set up tuple for insertion */ l_obj = (u_i4)qed_u0_trimtail( ddl_p->qed_d1_obj_name, (u_i4)DB_OBJ_MAXNAME, tables_p->l16_1_tab_name); qed_u0_trimtail( ddl_p->qed_d2_obj_owner, (u_i4) DB_OWN_MAXNAME, tables_p->l16_2_tab_owner); STcopy(v_lnk_p->qec_24_cur_time, tables_p->l16_3_cre_date); STcopy(v_lnk_p->qec_24_cur_time, tables_p->l16_4_alt_date); if (tabinfo_p->dd_t3_tab_type == DD_2OBJ_TABLE) tables_p->l16_5_tab_type[0] = 'T'; /* local table */ else if (tabinfo_p->dd_t3_tab_type == DD_3OBJ_VIEW) tables_p->l16_5_tab_type[0] = 'V'; /* local view */ else if (tabinfo_p->dd_t3_tab_type == DD_4OBJ_INDEX) tables_p->l16_5_tab_type[0] = 'I'; /* local index */ else { status = qed_u2_set_interr(E_QE0018_BAD_PARAM_IN_CB, & i_qer_p->error); return(status); } tables_p->l16_5_tab_type[1] = EOS; /* null terminate */ if (ddl_p->qed_d8_obj_type == DD_1OBJ_LINK) tables_p->l16_6_sub_type[0] = 'L'; /* DDB link */ else if (ddl_p->qed_d8_obj_type == DD_2OBJ_TABLE || ddl_p->qed_d8_obj_type == DD_3OBJ_VIEW) tables_p->l16_6_sub_type[0] = 'N'; /* DDB native */ else { status = qed_u2_set_interr(E_QE0018_BAD_PARAM_IN_CB, & i_qer_p->error); return(status); } tables_p->l16_6_sub_type[1] = EOS; /* null terminate */ STcopy(IIQE_42_ing_60, tables_p->l16_7_version); if (dds_p->qes_d9_ctl_info & QES_05CTL_SYSCAT_USER) { char *ch2 = ddl_p->qed_d1_obj_name + CMbytecnt(ddl_p->qed_d1_obj_name); if( ( l_obj >= 2 ) && (CMcmpnocase(ddl_p->qed_d1_obj_name, "i") == 0 ) && (CMcmpnocase(ch2, "i") == 0 )) { tables_p->l16_8_sys_use[0] = 'S'; /* system object */ } else tables_p->l16_8_sys_use[0] = 'U'; /* user object */ } else tables_p->l16_8_sys_use[0] = 'U'; /* user object */ tables_p->l16_8_sys_use[1] = EOS; /* null terminate */ if (! (v_lnk_p->qec_10_haves & QEC_03_INGRES) ) { /* index information NOT propagated for gateways */ tables_p->l16_10_indexes[0] = 'N'; /* N */ tables_p->l16_10_indexes[1] = EOS; /* null terminate */ } tables_p->l16_23_integrities[0] = 'N'; /* always N */ tables_p->l16_23_integrities[1] = EOS; /* null terminate */ tables_p->l16_24_permits[0] = 'N'; /* always N */ tables_p->l16_24_permits[1] = EOS; /* null terminate */ if (tabinfo_p->dd_t3_tab_type == DD_4OBJ_INDEX) tables_p->l16_25_all_to_all[0] = 'N'; /* always N if an index */ else tables_p->l16_25_all_to_all[0] = 'Y'; /* always Y otherwise */ tables_p->l16_25_all_to_all[1] = EOS; /* null terminate */ /* 4. insert into IIDD_TABLES */ ins_p->qeq_c1_can_id = INS_631_DD_TABLES; ins_p->qeq_c3_ptr_u.l16_tables_p = tables_p; ins_p->qeq_c4_ldb_p = cdb_p; status = qel_i1_insert(i_qer_p, v_lnk_p); return(status); }