DB_STATUS qel_c5_ldbid_long( QEF_RCB *v_qer_p, QEC_LINK *v_lnk_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, *ldb_p = v_lnk_p->qec_19_ldb_p; QEQ_1CAN_QRY *sel_p = v_lnk_p->qec_6_select_p; QEC_D5_LONG_LDBNAMES *long_p = v_lnk_p->qec_8_longnames_p; /* 1. set up for accessing IIDD_DDB_LDB_LONGNAMES */ sel_p->qeq_c3_ptr_u.d5_long_ldbnames_p = long_p; sel_p->qeq_c4_ldb_p = cdb_p; sel_p->qeq_c5_eod_b = FALSE; sel_p->qeq_c6_col_cnt = 0; qed_u0_trimtail( ldb_p->dd_l3_ldb_name, (u_i4) DD_256_MAXDBNAME, long_p->d5_1_ldb_name); /* 3. retrieve the LDB's 32-char alias if it exists */ sel_p->qeq_c1_can_id = SEL_014_DD_DDB_LONG_LDBNAMES; status = qel_s4_prepare(v_qer_p, v_lnk_p); if (status) return(status); if (! sel_p->qeq_c5_eod_b) { /* no data */ status = qel_s3_flush(v_qer_p, v_lnk_p); if (status) return(status); /* generate alias */ STcopy(IIQE_30_alias_prefix, v_lnk_p->qec_5_ldb_alias); /* prefix */ CVla(v_lnk_p->qec_2_tableinfo_p->d9_1_obj_id.db_tab_base, &v_lnk_p->qec_5_ldb_alias[QEK_5_SIZE_OF_PREFIX]); return(E_DB_OK); } /* 4. send SELECT query to retrieve ldb id if it exists */ status = qel_c4_ldbid_short(TRUE, v_qer_p, v_lnk_p); /* TRUE for using alias */ return(status); }
DB_STATUS qel_c3_obj_base( QEF_RCB *v_qer_p, QEC_LINK *v_lnk_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; QED_DDL_INFO *ddl_p = & v_qer_p->qef_r3_ddb_req.qer_d7_ddl_info; DD_2LDB_TAB_INFO *tab_p = ddl_p->qed_d6_tab_info_p; QEC_D7_OBJECT_BASE obj_base; /* tuple structure */ QEC_D9_TABLEINFO *tabinfo_p = v_lnk_p->qec_2_tableinfo_p; QEQ_1CAN_QRY *sel_p = v_lnk_p->qec_6_select_p; /* 1. retrieve IIDD_DDB_OBJECT_BASE */ sel_p->qeq_c1_can_id = SEL_016_DD_DDB_OBJECT_BASE; sel_p->qeq_c2_rqf_bind_p = v_lnk_p->qec_20_rqf_bind_p; sel_p->qeq_c3_ptr_u.d7_object_base_p = & obj_base; sel_p->qeq_c4_ldb_p = cdb_p; sel_p->qeq_c5_eod_b = FALSE; sel_p->qeq_c6_col_cnt = 0; /* 2. retrieve current OBJECT_BASE value */ 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 (status) return(status); } /* 3. use the already incremented object_base */ if (tab_p->dd_t3_tab_type == DD_4OBJ_INDEX) { tabinfo_p->d9_1_obj_id.db_tab_base = ddl_p->qed_d7_obj_id.db_tab_base; tabinfo_p->d9_1_obj_id.db_tab_index = obj_base.d7_1_obj_base; /* creating link for index */ } else { tabinfo_p->d9_1_obj_id.db_tab_base = obj_base.d7_1_obj_base; tabinfo_p->d9_1_obj_id.db_tab_index = 0; } return(E_DB_OK); }
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 qel_c4_ldbid_short( bool i_alias_b, QEF_RCB *v_qer_p, QEC_LINK *v_lnk_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, *ldb_p = v_lnk_p->qec_19_ldb_p; QEQ_1CAN_QRY *sel_p = v_lnk_p->qec_6_select_p; QEC_D2_LDBIDS *ldbids_p = v_lnk_p->qec_7_ldbids_p; /* 1. must initialize ldb_id to unknown */ ldbids_p->d2_5_ldb_id = 0; /* 2. set up for accessing IIDD_DDB_LDBIDS */ sel_p->qeq_c3_ptr_u.d2_ldbids_p = ldbids_p; sel_p->qeq_c4_ldb_p = cdb_p; sel_p->qeq_c5_eod_b = FALSE; sel_p->qeq_c6_col_cnt = 0; qed_u0_trimtail( ldb_p->dd_l2_node_name, (u_i4) DB_NODE_MAXNAME, ldbids_p->d2_1_ldb_node); qed_u0_trimtail( ldb_p->dd_l4_dbms_name, (u_i4) DB_TYPE_MAXLEN, ldbids_p->d2_2_ldb_dbms); if (i_alias_b) qed_u0_trimtail( v_lnk_p->qec_5_ldb_alias, (u_i4) DB_DB_MAXNAME, ldbids_p->d2_3_ldb_database); /* use alias as database name */ else qed_u0_trimtail( ldb_p->dd_l3_ldb_name, (u_i4) DD_256_MAXDBNAME, ldbids_p->d2_3_ldb_database); /* 4. send SELECT query to retrieve ldb id if it exists */ sel_p->qeq_c1_can_id = SEL_005_DD_DDB_LDBIDS_BY_NAME; 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); return(status); }
DB_STATUS qel_c7_ldb_chrs( QEF_RCB *v_qer_p, QEC_LINK *v_lnk_p ) { DB_STATUS status; DD_LDB_DESC *ldb_p = v_lnk_p->qec_19_ldb_p; QEC_D2_LDBIDS *ldbids_p = v_lnk_p->qec_7_ldbids_p; QEC_L1_DBCONSTANTS dbconsts; /* tuple structure */ QEQ_1CAN_QRY *sel_p = v_lnk_p->qec_6_select_p; /* 1. set up to retrieve from IIDBCONSTANTS */ sel_p->qeq_c1_can_id = SEL_105_II_DBCONSTANTS; sel_p->qeq_c2_rqf_bind_p = v_lnk_p->qec_20_rqf_bind_p; sel_p->qeq_c3_ptr_u.l1_dbconstants_p = & dbconsts; sel_p->qeq_c4_ldb_p = ldb_p; sel_p->qeq_c5_eod_b = FALSE; sel_p->qeq_c6_col_cnt = 0; /* 2. retrieve data */ 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 (status) return(status); } if (dbconsts.l1_1_usr_name[0] == '$') ldbids_p->d2_6_ldb_user[0] = 'N'; /* no user name */ else ldbids_p->d2_6_ldb_user[0] = 'Y'; ldbids_p->d2_6_ldb_user[1] = EOS; /* null terminate */ if (dbconsts.l1_2_dba_name[0] == '$') { ldbids_p->d2_7_ldb_dba[0] = 'N'; /* no DBA name */ ldbids_p->d2_8_ldb_dbaname[0] = EOS; /* set to null string */ } else { ldbids_p->d2_7_ldb_dba[0] = 'Y'; qed_u0_trimtail( dbconsts.l1_2_dba_name, (u_i4) DB_OWN_MAXNAME, ldbids_p->d2_8_ldb_dbaname); } ldbids_p->d2_7_ldb_dba[1] = EOS; /* null terminate */ return(E_DB_OK); }
DB_STATUS qeu_10_get_obj_base( 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; DD_LDB_DESC *cdb_p = & dds_p->qes_d4_ddb_p-> dd_d3_cdb_info.dd_i1_ldb_desc; /* QED_DDL_INFO *ddl_p = & i_qer_p->qef_r3_ddb_req.qer_d7_ddl_info; */ QEC_D7_OBJECT_BASE obj_base; /* tuple structure */ QEC_D6_OBJECTS *objects_p = v_lnk_p->qec_13_objects_p; QEQ_1CAN_QRY *sel_p = v_lnk_p->qec_6_select_p; /* 1. retrieve IIDD_DDB_OBJECT_BASE */ sel_p->qeq_c1_can_id = SEL_016_DD_DDB_OBJECT_BASE; sel_p->qeq_c2_rqf_bind_p = v_lnk_p->qec_20_rqf_bind_p; sel_p->qeq_c3_ptr_u.d7_object_base_p = & obj_base; sel_p->qeq_c4_ldb_p = cdb_p; sel_p->qeq_c5_eod_b = FALSE; sel_p->qeq_c6_col_cnt = 0; /* 2. retrieve current OBJECT_BASE value */ 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); } /* 3. increment to get new object_base */ objects_p->d6_3_obj_id.db_tab_base = obj_base.d7_1_obj_base + 1; objects_p->d6_3_obj_id.db_tab_index = 0; return(E_DB_OK); }
DB_STATUS qeu_d1_cre_tab( QEF_RCB *v_qer_p) { DB_STATUS status; QEF_DDB_REQ *ddr_p = & v_qer_p->qef_r3_ddb_req; QED_QUERY_INFO *ddq_p = & ddr_p->qer_d4_qry_info; QED_DDL_INFO *ddl_p = & ddr_p->qer_d7_ddl_info; DD_LDB_DESC *ldb_p = & ddl_p->qed_d6_tab_info_p->dd_t9_ldb_p-> dd_i1_ldb_desc; DD_1LDB_INFO ldb_info, *ldbinfo_p = & ldb_info; QEC_LINK lnk, *lnk_p = & lnk; QEQ_1CAN_QRY sel, *sel_p = & sel; QEC_L1_DBCONSTANTS dbconsts; /* tuple structure */ RQB_BIND rq_bind[QEC_01I_CC_DBCONSTANTS_2 + 1]; /* 1. execute CREATE TABLE statement */ STRUCT_ASSIGN_MACRO(*ddl_p->qed_d5_qry_info_p, *ddq_p); STRUCT_ASSIGN_MACRO(*ldb_p, ldbinfo_p->dd_i1_ldb_desc); ddr_p->qer_d2_ldb_info_p = ldbinfo_p; status = qed_e4_exec_qry(v_qer_p); if (status) { /* v_qer_p->qef_cb->qef_abort = TRUE; */ return(status); } /* 2. retrieve the user's name from the LDB for locating the created table **/ status = qel_s0_setup(SEL_105_II_DBCONSTANTS, rq_bind, ldb_p, v_qer_p, lnk_p, sel_p); if (status) { v_qer_p->qef_cb->qef_abort = TRUE; return(status); } /* sel_p->qeq_c1_can_id = SEL_105_II_DBCONSTANTS; sel_p->qeq_c2_rqf_bind_p = lnk_p->qec_20_rqf_bind_p; sel_p->qeq_c4_ldb_p = ldb_p; sel_p->qeq_c5_eod_b = FALSE; sel_p->qeq_c6_col_cnt = 0; lnk_p->qec_6_select_p = sel_p; ** must set ** */ sel_p->qeq_c3_ptr_u.l1_dbconstants_p = & dbconsts; /* must set */ status = qel_s4_prepare(v_qer_p, lnk_p); if (status) return(status); if (! sel_p->qeq_c5_eod_b) { status = qel_s3_flush(v_qer_p, lnk_p); if (status) return(status); } /* ** this call wipes out the next field dd_t3_tab_type!!! ** qed_u0_trimtail( dbconsts.l1_2_dba_name, DB_OWN_MAXNAME, ddl_p->qed_d6_tab_info_p->dd_t2_tab_owner); */ /* 3. create the link */ status = qel_c0_cre_lnk(v_qer_p); if (status) v_qer_p->qef_cb->qef_abort = TRUE; return(status); }
DB_STATUS qel_34_altcols( QEF_RCB *i_qer_p, QEC_LINK *v_lnk_p ) { DB_STATUS status, ignore; DB_ERROR sav_error; 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 *ldbtab_p = ddl_p->qed_d6_tab_info_p; 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; QEC_L2_ALT_COLUMNS altcols, *altcols_p = & altcols; /* tuple struct */ QEQ_1CAN_QRY *sel_p = v_lnk_p->qec_6_select_p, *ins_p = v_lnk_p->qec_22_insert_p; DD_COLUMN_DESC **col_descs_pp = ddl_p->qed_d4_ddb_cols_pp, *from_p; i4 tupcnt; /* 1. set up for looping through each retrieved IIALT_COLUMNS tuple */ qed_u0_trimtail( ldbtab_p->dd_t1_tab_name, (u_i4) DB_TAB_MAXNAME, altcols_p->l2_1_tab_name); qed_u0_trimtail( ldbtab_p->dd_t2_tab_owner, (u_i4) DB_OWN_MAXNAME, altcols_p->l2_2_tab_owner); sel_p->qeq_c1_can_id = SEL_101_II_ALT_COLUMNS; sel_p->qeq_c2_rqf_bind_p = v_lnk_p->qec_20_rqf_bind_p; sel_p->qeq_c3_ptr_u.l2_alt_columns_p = altcols_p; sel_p->qeq_c4_ldb_p = ldb_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) return(E_DB_OK); /* no date */ tupcnt = 0; if (col_descs_pp) { col_descs_pp++; /* must start from slot 1 */ from_p = *col_descs_pp; } while (! sel_p->qeq_c5_eod_b && ! status) { /* 3. replace with link name and link owner */ qed_u0_trimtail( ddl_p->qed_d1_obj_name, (u_i4) DB_OBJ_MAXNAME, altcols_p->l2_1_tab_name); qed_u0_trimtail( ddl_p->qed_d2_obj_owner, (u_i4) DB_OWN_MAXNAME, altcols_p->l2_2_tab_owner); /* 4. do column mapping if necessary */ if (col_descs_pp) { /* substitute link col name from inserting into IIDD_ALT_COLUMNS */ qed_u0_trimtail( from_p->dd_c1_col_name, (u_i4) DB_ATT_MAXNAME, altcols_p->l2_4_col_name); } else { qel_a2_case_col(i_qer_p, altcols_p->l2_4_col_name, *i_qer_p->qef_cb->qef_dbxlate, &ldbtab_p->dd_t9_ldb_p->dd_i2_ldb_plus. dd_p3_ldb_caps); } /* 5. insert into IIDD_ALT_COLUMNS */ ins_p->qeq_c1_can_id = INS_601_DD_ALT_COLUMNS; ins_p->qeq_c3_ptr_u.l2_alt_columns_p = altcols_p; ins_p->qeq_c4_ldb_p = cdb_p; status = qel_i1_insert(i_qer_p, v_lnk_p); if (status) { /* must flush sending LDB */ STRUCT_ASSIGN_MACRO(i_qer_p->error, sav_error); ignore = qel_s3_flush(i_qer_p, v_lnk_p); STRUCT_ASSIGN_MACRO(sav_error, i_qer_p->error); return(status); } tupcnt++; if (col_descs_pp) { col_descs_pp++; /* increment to pick up the ** next DD_COLUMN_DESC */ from_p = *col_descs_pp; } /* 6. read next tuple from LDB */ sel_p->qeq_c4_ldb_p = ldb_p; status = qel_s2_fetch(i_qer_p, v_lnk_p); if (status) return(status); } return(status); }
DB_STATUS qel_33_columns( QEF_RCB *i_qer_p, QEC_LINK *v_lnk_p ) { DB_STATUS status, ignore; DB_ERROR sav_error; 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 *ldbtab_p = ddl_p->qed_d6_tab_info_p; 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; QEC_D9_TABLEINFO *tabinfo_p = v_lnk_p->qec_2_tableinfo_p; QEC_L3_COLUMNS dd_columns, *ddcolumns_p = & dd_columns; /* tuple struct */ QEQ_1CAN_QRY *sel_p = v_lnk_p->qec_6_select_p, *ins_p = v_lnk_p->qec_22_insert_p; DD_COLUMN_DESC **col_descs_pp = ddl_p->qed_d4_ddb_cols_pp, *name_p; i4 tupcnt; if (v_lnk_p->qec_10_haves & QEC_08_NO_IITABLES) return(E_DB_OK); /* 1. set up for looping through each retrieved local column */ qed_u0_trimtail( ldbtab_p->dd_t1_tab_name, (u_i4) DB_TAB_MAXNAME, ddcolumns_p->l3_1_tab_name); qed_u0_trimtail( ldbtab_p->dd_t2_tab_owner, (u_i4) DB_OWN_MAXNAME, ddcolumns_p->l3_2_tab_owner); sel_p->qeq_c1_can_id = SEL_102_II_COLUMNS; sel_p->qeq_c2_rqf_bind_p = v_lnk_p->qec_20_rqf_bind_p; sel_p->qeq_c3_ptr_u.l3_columns_p = ddcolumns_p; sel_p->qeq_c4_ldb_p = ldb_p; ddcolumns_p->l3_15_internal_ingtype = 0; /* init in case not ingres */ /* 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) { /* no data ! */ status = qed_u1_gen_interr(& i_qer_p->error); return(status); } tupcnt = 0; if (col_descs_pp) { col_descs_pp++; /* must start from slot 1 */ name_p = *col_descs_pp; } while (! sel_p->qeq_c5_eod_b && ! status) { /* 4. do column mapping if necessary */ if (col_descs_pp) { /* 4. set up for insertion */ /* substitue the link column name for inserting into IIDD_COLUMNS */ qed_u0_trimtail( name_p->dd_c1_col_name, (u_i4) DB_ATT_MAXNAME, ddcolumns_p->l3_3_col_name); } else { qel_a2_case_col(i_qer_p, ddcolumns_p->l3_3_col_name, *i_qer_p->qef_cb->qef_dbxlate, &ldbtab_p->dd_t9_ldb_p->dd_i2_ldb_plus. dd_p3_ldb_caps); } /* 4+. handle special datatypes (if any) */ if(ddcolumns_p->l3_15_internal_ingtype >= 16384 || ddcolumns_p->l3_15_internal_ingtype <= -16384) /* user datatype */ { /* copy internal type, length, ingtype into external for 6.2 cats */ MEcopy((PTR)ddcolumns_p->l3_13_internal_datatype, DB_TYPE_MAXLEN +1, (PTR)ddcolumns_p->l3_4_data_type); ddcolumns_p->l3_5_length = ddcolumns_p->l3_14_internal_length; ddcolumns_p->l3_12_ing_datatype = ddcolumns_p->l3_15_internal_ingtype; } ddcolumns_p->l3_15_internal_ingtype = 0; /* init for next */ /* 5. replace with link name, link owner, and link creation date */ qed_u0_trimtail( ddl_p->qed_d1_obj_name, (u_i4) DB_OBJ_MAXNAME, ddcolumns_p->l3_1_tab_name); qed_u0_trimtail( ddl_p->qed_d2_obj_owner, (u_i4) DB_OWN_MAXNAME, ddcolumns_p->l3_2_tab_owner); /* 6. insert into IIDD_COLUMNS */ ins_p->qeq_c1_can_id = INS_602_DD_COLUMNS; ins_p->qeq_c3_ptr_u.l3_columns_p = ddcolumns_p; ins_p->qeq_c4_ldb_p = cdb_p; status = qel_i1_insert(i_qer_p, v_lnk_p); if (status) { /* must flush sending LDB */ STRUCT_ASSIGN_MACRO(i_qer_p->error, sav_error); ignore = qel_s3_flush(i_qer_p, v_lnk_p); STRUCT_ASSIGN_MACRO(sav_error, i_qer_p->error); return(status); } tupcnt++; if (col_descs_pp) { col_descs_pp++; /* increment to pick up the ** next DD_COLUMN_DESC */ name_p = *col_descs_pp; } /* 3. retrieve next tuple */ sel_p->qeq_c4_ldb_p = ldb_p; status = qel_s2_fetch(i_qer_p, v_lnk_p); if (status) return(status); } /* end while */ /* the following check cannot be applied in the following 2 cases: ** ** 1) an INGRES index because the count from IIINDEX_COLUMNS may be ** one less than the count from II_COLUMNS which includes "tidp" ** as an column, ** 2) on a REFRESH on an LDB table whose old schema can be a proper ** subset of the new schema */ if (ldbtab_p->dd_t3_tab_type == DD_2OBJ_TABLE && dds_p->qes_d7_ses_state != QES_4ST_REFRESH) { if (tupcnt != ddl_p->qed_d3_col_count) { status = qed_u1_gen_interr(& i_qer_p->error); return(status); } } return(status); }
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); }