Пример #1
0
static HB_ERRCODE mysqlGoTo( SQLBASEAREAP pArea, HB_ULONG ulRecNo )
{
   SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;

   if( ulRecNo == 0 || ulRecNo > pArea->ulRecCount )
   {
      pArea->pRecord      = pArea->pRow[ 0 ];
      pArea->bRecordFlags = pArea->pRowFlags[ 0 ];

      pArea->fPositioned = HB_FALSE;
   }
   else
   {
      pArea->pRecord      = pArea->pRow[ ulRecNo ];
      pArea->bRecordFlags = pArea->pRowFlags[ ulRecNo ];

      if( ! ( pArea->bRecordFlags & SQLDD_FLAG_CACHED ) )
      {
         mysql_row_seek( pSDDData->pResult, ( MYSQL_ROW_OFFSET ) pArea->pRecord );
         pSDDData->pNatRecord = mysql_fetch_row( pSDDData->pResult );
         pSDDData->pNatLength = mysql_fetch_lengths( pSDDData->pResult );
      }

      pArea->fPositioned = HB_TRUE;
   }
   return HB_SUCCESS;
}
Пример #2
0
static PyObject* wsql_result_row_seek(wsql_result *self, PyObject *args, PyObject *kwargs)
{
    static char *kwlist[] = {"origin", NULL};

    int origin=SEEK_CUR;
    Py_ssize_t offset;

    MYSQL_ROW_OFFSET r;

    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "n|i:", kwlist, &offset, &origin))

    CHECK_RESULT(self, NULL);
    if (self->use)
    {
        PyErr_SetString(wsql_programming_error, "cannot be used with connection.get_result(use=True)");
        return NULL;
    }

    r = mysql_row_tell(self->result);

    switch (origin)
    {
    case SEEK_CUR:
        r += (size_t)offset;
        break;
    case SEEK_SET:
        r = self->result->data->data + (size_t)offset;
        break;
    default:
        PyErr_SetString(wsql_programming_error, "unsupported origin");
        return NULL;
    };

    mysql_row_seek(self->result, r);
    Py_RETURN_NONE;
}
Пример #3
0
int main(int argc,char **argv)
{
	MYSQL mysql;
	FILE *file;
	MYSQL_RES *Gene_Result,*NFI_Result,*ZDR_Result;
	MYSQL_ROW *Gene_Row,*NFI_Row,*ZDR_Row;
	MYSQL_ROW_OFFSET *NFI_Rollback,*ZDR_Rollback;
	gnuplot_ctrl *g;
	char Order[32],query[4000],NFI_Table1[100],NFI_Table2[100],ZDR_Table1[100],ZDR_Table2[100],Gene_Table1[100],Gene_Table2[100];
	int GenOrd,NfiOrd,ZdrOrd;
	long int i,MinDist,MaxDist,GeneCount1,GeneCount2,NfiZdrGenes1,NfiZdrGenes2,GenePos,NfiStart,NfiStop,NfiBst,ZdrStart,ZdrStop,ZdrBst,NFIPos,ZDRPos;
	double NfiMin,NfiMax,NfiStp,NfiCut,ZdrMin,ZdrMax,ZdrStp,ZdrCut,GenePerc1,GenePerc2,MinDiff,MaxDiff;
	double *NfiScores1,*NfiScores2,*ZdrScores1,*ZdrScores2;

	if(argc!=16)
		return printf("usage:  %s Fasta_File1 Gene_File1 Fasta_File2 Gene_File2 Order MinDist MaxDist NfiMin NfiMax NfiStep ZdrMax ZdrMin ZdrStep OutFile Plot\n",argv[0]);

	sprintf(query,argv[1]);
	for(i=0;i<100;i++)
		switch(query[i])
		{
			case '.':       query[i]='_';       break;
			case '/':       sprintf(query,&query[i+1],100);
					i=0;
		}
	sprintf(NFI_Table1,"NFI_DNA.%s_nfihunt_classeq",query);
	sprintf(ZDR_Table1,"Z_DNA.%s_zhunt_classeq",query);
	sprintf(query,argv[2]);
	for(i=0;i<100;i++)
		switch(query[i])
		{
			case '.':       query[i]='_';   break;
			case '/':       sprintf(query,&query[i+1]);
					i=0;
		}
	sprintf(Gene_Table1,"Genomes.%s",query);
	sprintf(query,argv[3]);
	for(i=0;i<100;i++)
		switch(query[i])
		{
			case '.':       query[i]='_';       break;
			case '/':       sprintf(query,&query[i+1],100);
					i=0;
		}
	sprintf(NFI_Table2,"NFI_DNA.%s_nfihunt_classeq",query);
	sprintf(ZDR_Table2,"Z_DNA.%s_zhunt_classeq",query);
	sprintf(query,argv[4]);
	for(i=0;i<100;i++)
		switch(query[i])
		{
			case '.':       query[i]='_';       break;
			case '/':       sprintf(query,&query[i+1],100);
					i=0;
		}
	sprintf(Gene_Table2,"Genomes.%s",query);

	sprintf(Order,argv[5]);
	MinDist=atoi(argv[6]);
	MaxDist=atoi(argv[7]);
	NfiMin=atof(argv[8]);
	NfiMax=atof(argv[9]);
	NfiStp=atof(argv[10]);
	ZdrMax=atof(argv[11]);
	ZdrMin=atof(argv[12]);
	ZdrStp=atof(argv[13]);

	if(argc==15||strcmp(argv[15],"-r"))
	{
		if(!(strstr(Order,"T")&&strstr(Order,"N")&&strstr(Order,"Z")&&strlen(Order)==3))
			return printf("Improper Order format '%s'\n",Order);

		GenOrd=strstr(Order,"T")-Order;
		NfiOrd=strstr(Order,"N")-Order;
		ZdrOrd=strstr(Order,"Z")-Order;

		mysql_apps_logon(&mysql);

		fprintf(stderr,"Populating internal table 1\n");

		sprintf(query,"select start_site,strand,gene_num,gene_name from %s order by start_site",Gene_Table1);
		printf(mysql_query(&mysql,query)?strcat(strcat(query,"\n"),strcat(mysql_error(&mysql),"\n\n")):"");
		Gene_Result=mysql_store_result(&mysql);
		GeneCount1=mysql_num_rows(Gene_Result);

		sprintf(query,"select position,nfiscore from %s where nfiscore>=%f order by position",NFI_Table1,NfiMin);
		printf(mysql_query(&mysql,query)?strcat(strcat(query,"\n"),strcat(mysql_error(&mysql),"\n\n")):"");
		NFI_Result=mysql_store_result(&mysql);

		sprintf(query,"select position,deltalinking from %s where deltalinking<=%f order by position",ZDR_Table1,ZdrMax);
		printf(mysql_query(&mysql,query)?strcat(strcat(query,"\n"),strcat(mysql_error(&mysql),"\n\n")):"");
		ZDR_Result=mysql_store_result(&mysql);

		NfiScores1=(double*)malloc(GeneCount1*sizeof(double));
		ZdrScores1=(double*)malloc(GeneCount1*sizeof(double));

		NFI_Rollback=mysql_row_tell(NFI_Result);
		ZDR_Rollback=mysql_row_tell(ZDR_Result);

		for(i=0;i<GeneCount1;i++)
		{
			Gene_Row=mysql_fetch_row(Gene_Result);
			if(atoi(Gene_Row[0])-GenePos<=2000)
			{
				mysql_row_seek(NFI_Result,NFI_Rollback);
				mysql_row_seek(ZDR_Result,ZDR_Rollback);
			}
			GenePos=atoi(Gene_Row[0]);
			sprintf(query,Gene_Row[1]);
			switch(query[0])
			{
				case '+':       GenOrd=abs(GenOrd);
						NfiOrd=abs(NfiOrd);
						ZdrOrd=abs(ZdrOrd);
						break;
				case '-':       GenOrd=-abs(GenOrd);
						NfiOrd=-abs(NfiOrd);
						ZdrOrd=-abs(ZdrOrd);
						break;
				default:	return fprintf(stderr,"Invalid Gene Strand '%s\n'",Gene_Row[1]);
			}
			NfiStart=GenOrd<NfiOrd?(GenePos+1):(GenePos-1000);
			NfiStop=GenOrd<NfiOrd?(GenePos+1000):(GenePos-1);
			NfiBst=GenePos+100000;
			NfiScores1[i]=-100;
			while(NFI_Row=mysql_fetch_row(NFI_Result),NFIPos=NFI_Row?atoi(NFI_Row[0]):NfiStop+1,NFIPos<=NfiStop)
				if(NFIPos>=NfiStart&&NfiScores1[i]<=atoi(NFI_Row[1]))
				{
					if(NfiScores1[i]<atoi(NFI_Row[1])||abs(atoi(NFI_Row[0])-GenePos)<abs(NfiBst-GenePos))
					{
						NfiBst=atoi(NFI_Row[0]);
						NfiScores1[i]=atoi(NFI_Row[1]);
					}
				}
			ZdrStart=NfiOrd<ZdrOrd?(NfiBst+MinDist):(NfiBst-MaxDist);
			ZdrStop=NfiOrd<ZdrOrd?(NfiBst+MaxDist):(NfiBst-MinDist);
			ZdrStart=(GenOrd<ZdrOrd&&GenePos>ZdrStart)?GenePos:ZdrStart;
			ZdrStart=(GenOrd>ZdrOrd&&GenePos<ZdrStart)?GenePos:ZdrStart;
			ZdrStop=(GenOrd<ZdrOrd&&GenePos>ZdrStop)?GenePos:ZdrStop;
			ZdrStop=(GenOrd>ZdrOrd&&GenePos<ZdrStop)?GenePos:ZdrStop;
			ZdrBst=GenePos+100000;
			ZdrScores1[i]=100;
			while(ZDR_Row=mysql_fetch_row(ZDR_Result),ZDRPos=ZDR_Row?atoi(ZDR_Row[0]):ZdrStop+1,ZDRPos<=ZdrStop)
				if(ZDRPos>=ZdrStart&&ZdrScores1[i]>=atoi(ZDR_Row[1]))
				{
					if(ZdrScores1[i]>atoi(ZDR_Row[1])||abs(atoi(ZDR_Row[0])-NfiBst)<abs(ZdrBst-NfiBst))
					{
						ZdrBst=atoi(ZDR_Row[0]);
						ZdrScores1[i]=atof(ZDR_Row[1]);
					}
				}
			printf("%3s %d %-16s %4d %4.0f %4d %4.2f %4d\n",Gene_Row[2],GenePos,Gene_Row[3],NfiBst-GenePos,NfiScores1[i],ZdrBst-GenePos,ZdrScores1[i],NfiBst-ZdrBst);
		}

		mysql_free_result(Gene_Result);
		mysql_free_result(NFI_Result);
		mysql_free_result(ZDR_Result);


		fprintf(stderr,"Populating internal table 2\n");

		sprintf(query,"select start_site,strand from %s order by start_site",Gene_Table2);
		printf(mysql_query(&mysql,query)?strcat(strcat(query,"\n"),strcat(mysql_error(&mysql),"\n\n")):"");
		Gene_Result=mysql_store_result(&mysql);
		GeneCount2=mysql_num_rows(Gene_Result);

		sprintf(query,"select position,nfiscore from %s where nfiscore>=%f order by position",NFI_Table2,NfiMin);
		printf(mysql_query(&mysql,query)?strcat(strcat(query,"\n"),strcat(mysql_error(&mysql),"\n\n")):"");
		NFI_Result=mysql_store_result(&mysql);

		sprintf(query,"select position,deltalinking from %s where deltalinking<=%f order by position",ZDR_Table2,ZdrMax);
		printf(mysql_query(&mysql,query)?strcat(strcat(query,"\n"),strcat(mysql_error(&mysql),"\n\n")):"");
		ZDR_Result=mysql_store_result(&mysql);

		NfiScores2=(double*)malloc(GeneCount2*sizeof(double));
		ZdrScores2=(double*)malloc(GeneCount2*sizeof(double));

		NFI_Rollback=mysql_row_tell(NFI_Result);
		ZDR_Rollback=mysql_row_tell(ZDR_Result);

		for(i=0;i<GeneCount2;i++)
		{
			Gene_Row=mysql_fetch_row(Gene_Result);
			if(atoi(Gene_Row[0])-GenePos<=2000)
			{
				mysql_row_seek(NFI_Result,NFI_Rollback);
				mysql_row_seek(ZDR_Result,ZDR_Rollback);
			}
			GenePos=atoi(Gene_Row[0]);
			sprintf(query,Gene_Row[1]);
			switch(query[0])
			{
				case '+':       GenOrd=abs(GenOrd);
						NfiOrd=abs(NfiOrd);
						ZdrOrd=abs(ZdrOrd);
						break;
				case '-':       GenOrd=-abs(GenOrd);
						NfiOrd=-abs(NfiOrd);
						ZdrOrd=-abs(ZdrOrd);
						break;
				default:	return fprintf(stderr,"Invalid Gene Strand '%s\n'",Gene_Row[1]);
			}
			NfiStart=GenOrd<NfiOrd?(GenePos+1):(GenePos-1000);
			NfiStop=GenOrd<NfiOrd?(GenePos+1000):(GenePos-1);
			NfiBst=GenePos+100000;
			NfiScores2[i]=-100;
			while(NFI_Row=mysql_fetch_row(NFI_Result),NFIPos=NFI_Row?atoi(NFI_Row[0]):NfiStop+1,NFIPos<=NfiStop)
				if(NFIPos>=NfiStart&&NfiScores2[i]<=atoi(NFI_Row[1]))
				{
					if(NfiScores2[i]<atoi(NFI_Row[1])||abs(atoi(NFI_Row[0])-GenePos)<abs(NfiBst-GenePos))
					{
						NfiBst=atoi(NFI_Row[0]);
						NfiScores2[i]=atoi(NFI_Row[1]);
					}
				}
			ZdrStart=NfiOrd<ZdrOrd?(NfiBst+MinDist):(NfiBst-MaxDist);
			ZdrStop=NfiOrd<ZdrOrd?(NfiBst+MaxDist):(NfiBst-MinDist);
			ZdrStart=(GenOrd<ZdrOrd&&GenePos>ZdrStart)?GenePos:ZdrStart;
			ZdrStart=(GenOrd>ZdrOrd&&GenePos<ZdrStart)?GenePos:ZdrStart;
			ZdrStop=(GenOrd<ZdrOrd&&GenePos>ZdrStop)?GenePos:ZdrStop;
			ZdrStop=(GenOrd>ZdrOrd&&GenePos<ZdrStop)?GenePos:ZdrStop;
			ZdrBst=GenePos+100000;
			ZdrScores2[i]=100;
			while(ZDR_Row=mysql_fetch_row(ZDR_Result),ZDRPos=ZDR_Row?atoi(ZDR_Row[0]):ZdrStop+1,ZDRPos<=ZdrStop)
				if(ZDRPos>=ZdrStart&&ZdrScores2[i]>=atoi(ZDR_Row[1]))
				{
					if(ZdrScores2[i]>atoi(ZDR_Row[1])||abs(atoi(ZDR_Row[0])-NfiBst)<abs(ZdrBst-NfiBst))
					{
						ZdrBst=atoi(ZDR_Row[0]);
						ZdrScores2[i]=atof(ZDR_Row[1]);
					}
				}
		}


		mysql_free_result(Gene_Result);
		mysql_free_result(NFI_Result);
		mysql_free_result(ZDR_Result);

		mysql_close(&mysql);

		FILE *OutFile=fopen(argv[14],"w");
		if(!OutFile)
			return printf("Could not write to file '%s'\n",argv[14]);

		fprintf(stderr,"Generating results\n");

		MinDiff=100;
		MaxDiff=0;
		for(ZdrCut=ZdrMax;ZdrCut>=ZdrMin;ZdrCut-=ZdrStp)
		{
			for(NfiCut=NfiMin;NfiCut<=NfiMax;NfiCut+=NfiStp)
			{
				NfiZdrGenes1=0;
				for(i=0;i<GeneCount1;i++)
					if(NfiScores1[i]>=NfiCut&&ZdrScores1[i]<=ZdrCut)
						NfiZdrGenes1++;
				NfiZdrGenes2=0;
				for(i=0;i<GeneCount2;i++)
					if(NfiScores2[i]>=NfiCut&&ZdrScores2[i]<=ZdrCut)
						NfiZdrGenes2++;
				GenePerc1=(100.0*NfiZdrGenes1)/GeneCount1;
				GenePerc2=(100.0*NfiZdrGenes2)/GeneCount2;
				fprintf(OutFile,"%f %f %f %f %f\n",NfiCut,ZdrCut,GenePerc1-GenePerc2,GenePerc1,GenePerc2);
				fflush(OutFile);
				MinDiff=MinDiff>GenePerc1-GenePerc2?GenePerc1-GenePerc2:MinDiff;
				MaxDiff=MaxDiff<GenePerc1-GenePerc2?GenePerc1-GenePerc2:MaxDiff;
			}
		}

		fclose(OutFile);
	
	}

	if(argc>15)
	{
		sprintf(NFI_Table1,NFI_Table1+8);
		NFI_Table1[strlen(NFI_Table1)-8]='\0';
		sprintf(NFI_Table2,NFI_Table2+8);
		NFI_Table2[strlen(NFI_Table2)-8]='\0';
		g=gnuplot_init();
		sprintf(query,"set title \"%% Difference Between %s and %s of TSS w/(NFI + Z-DNA-12bps)\\n",NFI_Table1,NFI_Table2);
		for(i=0;i<argc;i++)
		{
			strcat(query,argv[i]);
			strcat(query," ");
		}
		strcat(query,"\"");
		gnuplot_cmd(g,query);
		sprintf(query,"set dgrid3d %.0f,%.0f,8",(ZdrMax-ZdrMin)/ZdrStp,(NfiMax-NfiMin)/NfiStp);
		gnuplot_cmd(g,query);
		sprintf(query,"set xrange [%f:%f]",NfiMin,NfiMax);
		sprintf(query,"set yrange [%f:%f]",ZdrMin,ZdrMax);
		gnuplot_cmd(g,query);
		if(!strcmp(argv[15],"-r"))
		{
			sprintf(query,"set zrange [*:*]");
			gnuplot_cmd(g,query);
			sprintf(query,"set cntrparam levels incremental -10,1,10");
			gnuplot_cmd(g,query);
		}
		else
		{
			sprintf(query,"set zrange [%f:%f]",MinDiff,MaxDiff);
			gnuplot_cmd(g,query);
			sprintf(query,"set cntrparam levels incremental %.0f,%d,%.0f",MinDiff,1+(int)((MaxDiff-MinDiff)/10),MaxDiff);
			gnuplot_cmd(g,query);
		}
		sprintf(query,"call 'Format/%s.format'",argv[0]);
		gnuplot_cmd(g,query);
		sprintf(query,"sp '%s' u 1:2:3 notitle",argv[14]);
		//sprintf(query,"sp '%s' w l lw 2",argv[14]);
		gnuplot_cmd(g,query);
		printf("Hit Enter to continue\n");
		getchar();
	}

	return 0;
}
Пример #4
0
MYSQL_ROW seekandgetrow(value dbresval, int n) {
  /* mysql_row_seek seems to take time O(1), mysql_data_seek takes O(n) */
  mysql_row_seek(DBresult_val(dbresval), 
		 DBresultindex_val(dbresval)[n]);
  return mysql_fetch_row(DBresult_val(dbresval));
}
Пример #5
0
/*	row_seek(offset)	*/
static VALUE row_seek(VALUE obj, VALUE offset)
{
    check_free(obj);
    return INT2NUM((int)mysql_row_seek(GetMysqlRes(obj), (MYSQL_ROWS*)NUM2INT(offset)));
}