Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
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);
}
Esempio n. 7
0
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);
}    
Esempio n. 8
0
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);
}    
Esempio n. 9
0
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);
}    
Esempio n. 10
0
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);
}