Esempio n. 1
0
VOID
r_rep_load ()
{
	char    *outname;
	char    *tempname;


	/* start of routine */

	r_open_db();		/* open database. If not there, abort */

	STtrmwhite(En_report);

	/* start object-oriented facility for retrieving reports */
	IIOOinit((OO_OBJECT **)NULL);

	En_rid = -1;

	/* set up report environment. */
	if (St_style==RS_NULL && (St_ispec || r_env_set()))
	{	/* report found.  Read in report specifications */
		if (!St_silent)
		{
			SIprintf(ERget(F_RW0005_Reading_report_spec));
			SIflush(stdout);
		}

		r_rco_set();	/* read in the RCOMMANDS table into core */
	}
	else
	{	/* no report found.  Use report name */
		if (St_repspec)
		{	/* error because report does not exist */
			r_error(0x3F7, FATAL, En_report, NULL);
		}
		En_rtype = RT_DEFAULT;
		En_ferslv.name = En_report;
		if  ((En_ferslv.name_dest = (char *)FEreqmem((u_i4)Rst4_tag,
		     (u_i4)(FE_MAXNAME+1),TRUE,(STATUS *)NULL)) == NULL)
		{
			IIUGbmaBadMemoryAllocation(
					ERx("r_rep_loadld - name_dest"));
		}

		if  ((En_ferslv.owner_dest = (char *)FEreqmem((u_i4)Rst4_tag,
		     (u_i4)(FE_MAXNAME+1),TRUE,(STATUS *)NULL)) == NULL)
		{
			IIUGbmaBadMemoryAllocation(
					ERx("r_rep_loadld - owner_dest"));
		}
		/*
		** If the server supports delimited identifiers, then
		** ensure that .DELIMID is enabled since we're doing a report
		** based upon a table, and it may require such services.
		*/
		if  (IIUIdlmcase() != UI_UNDEFCASE)
		{
			St_xns_given = TRUE;
		}
	}

	/*
	** set up (and maybe prompt for) declared variables
	*/
	r_dcl_set(TRUE);

        if ((En_qlang == FEDMLSQL) && (IIUIdbdata()->firstAutoCom == FALSE))
	{
		IIUIautocommit(UI_AC_OFF);
	}

	if( r_sc_qry(Ptr_set_top) == FAIL )
	{
		return;
	}
    
	IIUIdlmcase();          /* Hack for bug 96801 ingcbt198 */

	if(!r_chk_dat())		/* check for a valid data relation */
	{
		return;
	}


	if( !r_sendqry())/* send the query to the backend */
	{
		return;
	}
	

	if (!r_att_dflt())	/* set up ATT structures for each */
	{			/* attribute in the data relation */
		return;
	}


	if (En_rtype == RT_DEFAULT)
	{	/* set up the default report */
		if (!St_silent)
		{
			SIprintf(ERget(F_RW0006_Setting_up_default));
			SIflush(stdout);
		}

		/* Set up first column as a sort column */

		if  (!r_m_dsort())
		{
			r_error(0x416,NONFATAL,NULL);
			return;
		}
	}

	if (!r_srt_set())		/* set up the SORT data structures */
	{	/* bad RSORT */
		r_error(0x0C, FATAL, NULL);
	}
	/* set up the BRK data structures
	** for each sort attribute with a
	** RACTION tuple defined for it
	*/
	if( !r_brk_set())	
	{
		return;
	}


	/* 
	** If there is a .PAGEWIDTH command and no -l flag has been specified 
	** on the commandline, then reset En_lmax. (The -l flag overrides the 
	** .PAGEWIDTH command). (#129, #588)
	*/
        if( STlength(En_pg_width) > 0 && !St_lspec)
	{
		/* If the pagewidth value is preceded by
		* a dollar, evaluate it as a parameter
		*/
		r_g_set(En_pg_width);
		if( r_g_skip() == TK_DOLLAR )
		{
			CMnext(Tokchar);
			outname = r_g_name();
			if( (tempname = r_par_get(outname)) == NULL )
			{
				r_error(0x3F0, FATAL, outname, NULL);
			}
			STcopy(tempname, En_pg_width);
		}
		/* need to convert to a number and set it to En_lmax */
		if (CVan(En_pg_width, &En_lmax) != OK)
		{
			/* Unable to convert so ignore input */
			r_error(0x403, NONFATAL, outname, NULL);
		}
	}
		
	if (En_rtype == RT_DEFAULT)
	{	/* set up default report */
		r_m_rprt();
	}
	else
	{
		Tcmd_tag = FEbegintag();
		r_tcmd_set();		/* set up the tcmd data structures */
		FEendtag();
	}


	r_lnk_agg();		/* set up the CLR and OP structures for
				** fast processing of aggregates.
				*/

	return;
}
Esempio n. 2
0
VOID
r_p_begin()
{
	/* internal declarations */

	char		*aname;			/* name of found attribute */
	char		*delim;
	i4		type;			/* token type */

	/* start of routine */


	if ((type = r_g_skip()) != TK_ENDSTRING)
	{
		switch (type)
		{
			case(TK_ALPHA):
				aname = r_g_name();
				CVlower(aname);
				/* for begin rbfaggs strip agg # */
				/* nop for others		 */
				switch(r_gt_code(aname))
				{
					case(C_WITHIN):
						r_p_within();
						break;

					case(C_BLOCK):
						r_p_flag(P_BLOCK);
						break;

					case(C_FF):
						/* for the hell of it */
						r_p_flag(P_FF);
						break;

					case(C_UL):
						/* for the hell of it */
						r_p_flag(P_UL);
						break;

				/* the rest are RBF internal commands */

					case(C_RBFAGGS):
						/* start of aggs */
						r_p_flag(P_RBFAGGS);
						break;

					case(C_RBFFIELD):
						/* start of field */
						r_p_flag(P_RBFFIELD);
						break;

					case(C_RBFHEAD):
						/* start of column head */
						r_p_flag(P_RBFHEAD);
						break;

					case(C_RBFPBOT):
						/* start of page bottom */
						r_p_flag(P_RBFPBOT);
						break;

					case(C_RBFPTOP):
						/* start of page top */
						r_p_flag(P_RBFPTOP);
						break;

					case(C_RBFSETUP):
						/* start of report setup */
						r_p_flag(P_RBFSETUP);
						break;

					case(C_RBFTITLE):
						/* start of report title */
						r_p_flag(P_RBFTITLE);
						break;

					case(C_RBFTRIM):
						/* start of trim */
						r_p_flag(P_RBFTRIM);
						break;

					default:
						r_p_flag(P_NOOP);
						break;
				}
				break;

			default:
				r_p_flag(P_NOOP);
				break;

		}
		return;
	}

	/* only a plain old .BEGIN will get here */

	Cact_tcmd->tcmd_code = P_BEGIN;

	return;
}