static char sccsid[]="%Z% %M% %I% %E% %U%";
/***********************************************/
/* 検索処理                                    */
/*     テーブル結合条件検索関数                */
/*---------------------------------------------*/
/***********************************************/
#include "colmn.h"

/* セレクト文の定義 */
#define SELECT_JNT_TABLE \
		"select vwns_nam, nsra_nam, nsrc_cod from mkkbkenj where nsrk_cod = '%s' and (%s) %s"	/* 12.28 Koba  add %s */
#define SEL_VIEW \
		"(vwns_nam = '%s')"
#define SEL_VIEW_OR \
		"or(vwns_nam = '%s')"
#define SEL_ORDER " order by nsrc_cod"

extern CLPRTBL *pCLprocTable;
extern ViewTBL ViewTbl;

char *get_sel_cond1()
{
	static char buf1[20];
	char   *parm1;
	ScrPrCT     *pScrPrCT;		/* スクリプト・テーブル	*/
	tdtInfoParm *pInfoParm; 	/* パラメータ情報構造体	*/

	/*
	*** 第1項の条件式の生成
	 */
	/* カレント・スクリプト・テーブルの探索 */
	if (!(pScrPrCT=cl_search_src_ct())) {
		ERROROUT(FORMAT(381));		/* カレント・スクリプト・テーブルが見つからない */
		return NULL;
	}

	/* パラメータ1(検索種類コード) の取得 */
	pInfoParm = cl_get_var_ent(pScrPrCT->Vary->pTBL_pasento,1);
	if (pInfoParm->pi_dlen<=0 || pInfoParm->pi_dlen>sizeof(buf1)-1 ||
	    pInfoParm->pi_attr!= DEF_ZOK_CHAR) {
		ERROROUT(FORMAT(382));	/* 検索種類コードが不正です" */
		return NULL;
	}

	/* 文字列に変換 */
	memcpy(buf1, pInfoParm->pi_data, pInfoParm->pi_dlen);
	buf1[pInfoParm->pi_dlen] = '\0';

	/* 検索条件の文字列のポインターをリターン */
	return buf1;
}

char *get_sel_cond2()
{
	static char buf2[BUFSIZ];
	char viewnam[64];
	char flg;
	int   i;

/*
*** 第2項の条件式の生成
 */
	flg = 0;
	memset(buf2,0,sizeof(buf2));
	/* 項目数分ループ */
	for (i=0;i<ViewTbl.iItemNum;i++) {
		/* 対象フラグがONの場合 */
		if (ViewTbl.Line[i].ObjFlag) {
			memset(viewnam,0,sizeof(viewnam));
			/* 2番目以降の条件 -> "or" */
			sprintf(viewnam,(flg) ? SEL_VIEW_OR : SEL_VIEW,
												 ViewTbl.Line[i].ViewName);
			strcat(buf2,viewnam);
			flg++;
		}
	}
	if (flg == 1) return NULL;

	/* 検索条件の文字列のポインターをリターン */
	return buf2;
}

int cl_sl_joint_sqlsnd(pPrmp)
parmList *pPrmp[];
{
	int   i;
	int   iRc;
	static char  buff[BUFSIZ];
	char *cnd1;
	char *cnd2;
	struct BuffHeader {
		tdtCommPackHead CPHead ;
		qDbToCol	  DTDHead ;
	} *BuffHeader;
	ProcCT  *proc;

/*
*** 初期化
 */
	iRc = NORMAL;

/*
*** 検索(select)コマンド発行のための設定
 */
	/* ホストIDをセット */
	pPrmp[0]->prp	= (char *)NULL;
	pPrmp[0]->prmlen = 0;

	/* 属性指定 */
	pPrmp[1]->prp	= (char *)NULL;
	pPrmp[1]->prmlen = 0;

	/* SQLコマンド */
	memset(buff,0, sizeof(buff));
	cnd1 = get_sel_cond1();
	if (!cnd1) return ECL_SCRIPT_ERROR;
	cnd2 = get_sel_cond2();
	if (!cnd2) return 100;
	if (!*cnd1 || !*cnd2) {
		ERROROUT(FORMAT(383));		/* 条件式の生成に失敗 */
		return ECL_SYSTEM_ERROR;
	}
	sprintf(buff,SELECT_JNT_TABLE,cnd1,cnd2,SEL_ORDER);
	pPrmp[2]->prp    = buff;
	pPrmp[2]->prmlen = strlen(pPrmp[2]->prp);

	/* データ格納エリアID */
	pPrmp[3]->prp    = JNT_TABLE_AREAID;
	pPrmp[3]->prmlen = AREA_ID_SIZE;

/*
*** SQL(select) を発行
 */
	if (iRc=cl_process_sqlsnd(4,pPrmp,NULL)) {
		ERROROUT(FORMAT(384));		/* SQLの発行に失敗 */
		return iRc;
	}

/*
*** フラグおよびテーブルのセット
 */
	if (!(pCLprocTable->WaitPacketp = Malloc(sizeof(*BuffHeader))))
		return ECL_MALLOC_ERROR;
	memcpy(pCLprocTable->WaitPacketp, pCLprocTable->WrPacketp, sizeof(*BuffHeader));
	cmn_set_stat(RTN_PR, &pCLprocTable->PrSt, L_ON);
	if (!(proc = cl_search_proc_ct())) return(ECL_SYSTEM_ERROR);
	cmn_set_stat(RTN_PR,&proc->ptype,L_ON);

	return iRc;
}
