Beispiel #1
0
void MET_disable_wal(ISC_STATUS* user_status, isc_db_handle handle)
{
   struct isc_23_struct {
          short isc_24;	/* isc_utility */
   } isc_23;
   struct isc_21_struct {
          short isc_22;	/* isc_utility */
   } isc_21;
   struct isc_19_struct {
          short isc_20;	/* isc_utility */
   } isc_19;
	FB_API_HANDLE request = 0;
	AliceGlobals* tdgbl = AliceGlobals::getSpecific();

	if (!(DB = handle))
		return;

	/*START_TRANSACTION*/
	{
	{
	isc_start_transaction (isc_status, (FB_API_HANDLE*) &gds_trans, (short) 1, &DB, (short) 0, (char*) 0);
	};
	/*ON_ERROR*/
	if (isc_status [1])
	   {
		return_error(user_status);
	/*END_ERROR;*/
	   }
	}

	/*FOR(REQUEST_HANDLE request)
	X IN RDB$LOG_FILES*/
	{
        if (!request)
           isc_compile_request (NULL, (FB_API_HANDLE*) &DB, (FB_API_HANDLE*) &request, (short) sizeof(isc_18), (char*) isc_18);
        isc_start_request (NULL, (FB_API_HANDLE*) &request, (FB_API_HANDLE*) &gds_trans, (short) 0);
	while (1)
	   {
           isc_receive (NULL, (FB_API_HANDLE*) &request, (short) 0, (short) 2, &isc_19, (short) 0);
	   if (!isc_19.isc_20) break;
		/*ERASE X;*/
                isc_send (NULL, (FB_API_HANDLE*) &request, (short) 1, (short) 2, &isc_21, (short) 0);
	/*END_FOR*/
           isc_send (NULL, (FB_API_HANDLE*) &request, (short) 2, (short) 2, &isc_23, (short) 0);
	   }
	}
	/*COMMIT*/
	{
	isc_commit_transaction (isc_status, (FB_API_HANDLE*) &gds_trans);;
	/*ON_ERROR*/
	if (isc_status [1])
	   {
		return_error(user_status);
	/*END_ERROR;*/
	   }
	}
}
Beispiel #2
0
EXPORT RM_ENTRY(rmc_start_request)
{
	ClearParamPool();
	ISC_STATUS *stat = AllocStatusPool();
	isc_start_request(stat,
					  (isc_req_handle *)arg_vector[1].a_address,
					  (isc_tr_handle *)arg_vector[2].a_address,
					  (short)*CobolToShort(&arg_vector[3]));
	StatusToCobol(&arg_vector[0], stat);

	return (0);
}
void detectRuntimeODS()
{
   struct isc_4_struct {
          short isc_5;	/* isc_utility */
   } isc_4;
   struct isc_1_struct {
          char  isc_2 [32];	/* RDB$FIELD_NAME */
          char  isc_3 [32];	/* RDB$RELATION_NAME */
   } isc_1;
   struct isc_9_struct {
          short isc_10;	/* isc_utility */
   } isc_9;
   struct isc_7_struct {
          char  isc_8 [32];	/* RDB$RELATION_NAME */
   } isc_7;
   struct isc_12_struct {
          short isc_13;	/* isc_utility */
   } isc_12;
/**************************************
 *
 *	d e t e c t R u n t i m e O D S
 *
 **************************************
 *
 * Functional description
 *	Find the ODS version number of the database.
 *	Use system_flag to avoid any possibility of ambiguity (someone using the rdb$ prefix).
 *
 **************************************/

	BurpGlobals* tdgbl = BurpGlobals::getSpecific();
	tdgbl->runtimeODS = 0;

	// Detect very old server before IB4 just in case to exit gracefully.
	// select count(*) from rdb$relation_fields
	// where rdb$relation_name in ('RDB$RELATIONS', 'RDB$RELATION_FIELDS')
	// and rdb$field_name = 'RDB$SYSTEM_FLAG';

	int count = 0;
	isc_req_handle req_handle = 0;
	/*FOR (REQUEST_HANDLE req_handle)
		RFR IN RDB$RELATION_FIELDS
		WITH (RFR.RDB$RELATION_NAME = 'RDB$RELATIONS' OR RFR.RDB$RELATION_NAME = 'RDB$RELATION_FIELDS')
		AND RFR.RDB$FIELD_NAME = 'RDB$SYSTEM_FLAG'*/
	{
        if (!req_handle)
           isc_compile_request (isc_status, (FB_API_HANDLE*) &DB, (FB_API_HANDLE*) &req_handle, (short) sizeof(isc_11), (char*) isc_11);
	if (req_handle)
           isc_start_request (isc_status, (FB_API_HANDLE*) &req_handle, (FB_API_HANDLE*) &gds_trans, (short) 0);
	if (!isc_status [1]) {
	while (1)
	   {
           isc_receive (isc_status, (FB_API_HANDLE*) &req_handle, (short) 0, (short) 2, &isc_12, (short) 0);
	   if (!isc_12.isc_13 || isc_status [1]) break;
		++count;
	/*END_FOR;*/
	   }
	   };
	/*ON_ERROR*/
	if (isc_status [1])
	   {
		general_on_error();
	/*END_ERROR;*/
	   }
	}
	MISC_release_request_silent(req_handle);

	if (count != 2)
		return;

	isc_req_handle req_handle2 = 0;
	for (const rel_field_t* rel = relations; rel->relation; ++rel)
	{
		/*FOR (REQUEST_HANDLE req_handle2)
			FIRST 1 X IN RDB$RELATIONS
			WITH X.RDB$RELATION_NAME = rel->relation
			AND X.RDB$SYSTEM_FLAG = 1*/
		{
                if (!req_handle2)
                   isc_compile_request (isc_status, (FB_API_HANDLE*) &DB, (FB_API_HANDLE*) &req_handle2, (short) sizeof(isc_6), (char*) isc_6);
		isc_vtov ((const char*) rel->relation, (char*) isc_7.isc_8, 32);
		if (req_handle2)
                   isc_start_and_send (isc_status, (FB_API_HANDLE*) &req_handle2, (FB_API_HANDLE*) &gds_trans, (short) 0, (short) 32, &isc_7, (short) 0);
		if (!isc_status [1]) {
		while (1)
		   {
                   isc_receive (isc_status, (FB_API_HANDLE*) &req_handle2, (short) 1, (short) 2, &isc_9, (short) 0);
		   if (!isc_9.isc_10 || isc_status [1]) break;
			if (tdgbl->runtimeODS < rel->ods_version)
				tdgbl->runtimeODS = rel->ods_version;
		/*END_FOR;*/
		   }
		   };
		/*ON_ERROR*/
		if (isc_status [1])
		   {
			general_on_error();
		/*END_ERROR;*/
		   }
		}
	}
	MISC_release_request_silent(req_handle2);

	if (tdgbl->runtimeODS < DB_VERSION_DDL8)
		return;

	isc_req_handle req_handle3 = 0;
	for (const rel_field_t* rf = rel_fields; rf->relation; ++rf)
	{
		/*FOR (REQUEST_HANDLE req_handle3)
			FIRST 1 X2 IN RDB$RELATION_FIELDS
			WITH X2.RDB$RELATION_NAME = rf->relation
			AND X2.RDB$FIELD_NAME = rf->field
			AND X2.RDB$SYSTEM_FLAG = 1*/
		{
                if (!req_handle3)
                   isc_compile_request (isc_status, (FB_API_HANDLE*) &DB, (FB_API_HANDLE*) &req_handle3, (short) sizeof(isc_0), (char*) isc_0);
		isc_vtov ((const char*) rf->field, (char*) isc_1.isc_2, 32);
		isc_vtov ((const char*) rf->relation, (char*) isc_1.isc_3, 32);
		if (req_handle3)
                   isc_start_and_send (isc_status, (FB_API_HANDLE*) &req_handle3, (FB_API_HANDLE*) &gds_trans, (short) 0, (short) 64, &isc_1, (short) 0);
		if (!isc_status [1]) {
		while (1)
		   {
                   isc_receive (isc_status, (FB_API_HANDLE*) &req_handle3, (short) 1, (short) 2, &isc_4, (short) 0);
		   if (!isc_4.isc_5 || isc_status [1]) break;
			if (tdgbl->runtimeODS < rf->ods_version)
				tdgbl->runtimeODS = rf->ods_version;
		/*END_FOR;*/
		   }
		   };
		/*ON_ERROR*/
		if (isc_status [1])
		   {
			general_on_error();
		/*END_ERROR;*/
		   }
		}
	}
	MISC_release_request_silent(req_handle3);
}
Beispiel #4
0
ISC_STATUS API_ROUTINE gds__start_request(ISC_STATUS * status_vector,
										  FB_API_HANDLE* req_handle,
										  FB_API_HANDLE* tra_handle, SSHORT req_level)
{
	return isc_start_request(status_vector, req_handle, tra_handle, req_level);
}