static PyObject* wsql_result_row_tell(wsql_result *self) { MYSQL_ROW_OFFSET r; CHECK_RESULT(self, NULL); if (self->use) { PyErr_SetString(wsql_programming_error, "cannot be used with connection.use_result()"); return NULL; } r = mysql_row_tell(self->result); return PyLong_FromLong(r - self->result->data->data); }
value dbresult_alloc(MYSQL_RES* dbres) { value res = alloc_final(3, &dbresult_finalize, 1, 10000); MYSQL_ROW_OFFSET* index = NULL; initialize(&Field(res, 1), (value)dbres); if (dbres != NULL) { int numrows = mysql_num_rows(dbres); if (numrows > 0) { int i = 0; MYSQL_ROW row; index = (MYSQL_ROW_OFFSET*) (stat_alloc(sizeof(MYSQL_ROW_OFFSET) * numrows)); for (i=0; i<numrows; i++) { index[i] = mysql_row_tell(dbres); mysql_fetch_row(dbres); } } } initialize(&Field(res, 2), (value)index); return res; }
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; }
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; }
static HB_ERRCODE mysqlOpen( SQLBASEAREAP pArea ) { MYSQL * pMySql = ( ( SDDCONN * ) pArea->pConnection->pSDDConn )->pMySql; SDDDATA * pSDDData; PHB_ITEM pItemEof, pItem; HB_ULONG ulIndex; HB_USHORT uiFields, uiCount; HB_ERRCODE errCode = 0; HB_BOOL bError; DBFIELDINFO pFieldInfo; MYSQL_FIELD * pMyField; void ** pRow; pArea->pSDDData = memset( hb_xgrab( sizeof( SDDDATA ) ), 0, sizeof( SDDDATA ) ); pSDDData = ( SDDDATA * ) pArea->pSDDData; if( mysql_real_query( pMySql, pArea->szQuery, ( unsigned long ) strlen( pArea->szQuery ) ) ) { hb_errRT_MySQLDD( EG_OPEN, ESQLDD_INVALIDQUERY, ( const char * ) mysql_error( pMySql ), pArea->szQuery, mysql_errno( pMySql ) ); return HB_FAILURE; } if( ( pSDDData->pResult = mysql_store_result( pMySql ) ) == NULL ) { hb_errRT_MySQLDD( EG_MEM, ESQLDD_INVALIDQUERY, ( const char * ) mysql_error( pMySql ), pArea->szQuery, mysql_errno( pMySql ) ); return HB_FAILURE; } uiFields = ( HB_USHORT ) mysql_num_fields( pSDDData->pResult ); SELF_SETFIELDEXTENT( ( AREAP ) pArea, uiFields ); pItemEof = hb_itemArrayNew( uiFields ); bError = HB_FALSE; for( uiCount = 0; uiCount < uiFields; uiCount++ ) { pMyField = mysql_fetch_field_direct( pSDDData->pResult, uiCount ); pFieldInfo.atomName = pMyField->name; pFieldInfo.uiLen = ( HB_USHORT ) pMyField->length; pFieldInfo.uiDec = 0; switch( pMyField->type ) { case MYSQL_TYPE_TINY: case MYSQL_TYPE_SHORT: pFieldInfo.uiType = HB_FT_INTEGER; break; case MYSQL_TYPE_LONG: case MYSQL_TYPE_LONGLONG: case MYSQL_TYPE_INT24: pFieldInfo.uiType = HB_FT_LONG; break; case MYSQL_TYPE_DECIMAL: case MYSQL_TYPE_NEWDECIMAL: case MYSQL_TYPE_FLOAT: case MYSQL_TYPE_DOUBLE: pFieldInfo.uiType = HB_FT_DOUBLE; pFieldInfo.uiDec = ( HB_USHORT ) pMyField->decimals; break; case MYSQL_TYPE_STRING: case MYSQL_TYPE_VAR_STRING: case MYSQL_TYPE_ENUM: pFieldInfo.uiType = HB_FT_STRING; break; case MYSQL_TYPE_DATE: pFieldInfo.uiType = HB_FT_DATE; break; case MYSQL_TYPE_TINY_BLOB: case MYSQL_TYPE_MEDIUM_BLOB: case MYSQL_TYPE_LONG_BLOB: case MYSQL_TYPE_BLOB: pFieldInfo.uiType = HB_FT_MEMO; break; case MYSQL_TYPE_TIMESTAMP: case MYSQL_TYPE_DATETIME: pFieldInfo.uiType = HB_FT_TIMESTAMP; pFieldInfo.uiLen = 8; break; case MYSQL_TYPE_TIME: pFieldInfo.uiType = HB_FT_TIME; pFieldInfo.uiLen = 4; break; case MYSQL_TYPE_NULL: case MYSQL_TYPE_YEAR: case MYSQL_TYPE_NEWDATE: case MYSQL_TYPE_SET: case MYSQL_TYPE_VARCHAR: case MYSQL_TYPE_BIT: case MYSQL_TYPE_GEOMETRY: bError = HB_TRUE; errCode = ( HB_ERRCODE ) pMyField->type; pFieldInfo.uiType = 0; break; } if( ! bError ) { switch( pFieldInfo.uiType ) { case HB_FT_STRING: { char * pStr; pStr = ( char * ) hb_xgrab( pFieldInfo.uiLen + 1 ); memset( pStr, ' ', pFieldInfo.uiLen ); pStr[ pFieldInfo.uiLen ] = '\0'; pItem = hb_itemPutCL( NULL, pStr, pFieldInfo.uiLen ); hb_xfree( pStr ); break; } case HB_FT_MEMO: pItem = hb_itemPutC( NULL, NULL ); break; case HB_FT_INTEGER: pItem = hb_itemPutNI( NULL, 0 ); break; case HB_FT_LONG: pItem = hb_itemPutNL( NULL, 0 ); break; case HB_FT_DOUBLE: pItem = hb_itemPutND( NULL, 0.0 ); break; case HB_FT_DATE: pItem = hb_itemPutDS( NULL, NULL ); break; case HB_FT_TIMESTAMP: case HB_FT_TIME: pItem = hb_itemPutTDT( NULL, 0, 0 ); break; default: pItem = hb_itemNew( NULL ); bError = HB_TRUE; break; } hb_arraySetForward( pItemEof, uiCount + 1, pItem ); hb_itemRelease( pItem ); #if 0 if( pFieldInfo.uiType == HB_IT_DOUBLE || pFieldInfo.uiType == HB_IT_INTEGER ) pFieldInfo.uiType = HB_IT_LONG; #endif if( ! bError ) bError = ( SELF_ADDFIELD( ( AREAP ) pArea, &pFieldInfo ) == HB_FAILURE ); } if( bError ) break; } if( bError ) { hb_itemRelease( pItemEof ); hb_errRT_MySQLDD( EG_CORRUPTION, ESQLDD_INVALIDFIELD, "Invalid field type", pArea->szQuery, errCode ); return HB_FAILURE; } pArea->ulRecCount = ( HB_ULONG ) mysql_num_rows( pSDDData->pResult ); pArea->pRow = ( void ** ) hb_xgrab( ( pArea->ulRecCount + 1 ) * sizeof( void * ) ); pArea->pRowFlags = ( HB_BYTE * ) hb_xgrabz( ( pArea->ulRecCount + 1 ) * sizeof( HB_BYTE ) ); pArea->ulRecMax = pArea->ulRecCount + 1; pRow = pArea->pRow; *pRow = pItemEof; pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED; pRow++; for( ulIndex = 1; ulIndex <= pArea->ulRecCount; ulIndex++ ) { *pRow++ = ( void * ) mysql_row_tell( pSDDData->pResult ); mysql_fetch_row( pSDDData->pResult ); } pArea->fFetched = HB_TRUE; return HB_SUCCESS; }
/* row_tell() */ static VALUE row_tell(VALUE obj) { check_free(obj); return INT2NUM((int)mysql_row_tell(GetMysqlRes(obj))); }