| 718 | } |
| 719 | |
| 720 | int msMySQLJoinNext(joinObj *join) |
| 721 | { |
| 722 | #ifndef USE_MYSQL |
| 723 | msSetError(MS_QUERYERR, "MySQL support not available (compile with --with-mysql)", "msMySQLJoinNext()"); |
| 724 | return(MS_FAILURE); |
| 725 | #else |
| 726 | int i, n; |
| 727 | char qbuf[4000]; |
| 728 | msMySQLJoinInfo *joininfo = join->joininfo; |
| 729 | |
| 730 | if(!joininfo) { |
| 731 | msSetError(MS_JOINERR, "Join connection has not be created.", "msMySQLJoinNext()"); |
| 732 | return(MS_FAILURE); |
| 733 | } |
| 734 | |
| 735 | if(!joininfo->target) { |
| 736 | msSetError(MS_JOINERR, "No target specified, run msMySQLJoinPrepare() first.", "msMySQLJoinNext()"); |
| 737 | return(MS_FAILURE); |
| 738 | } |
| 739 | |
| 740 | /* clear any old data */ |
| 741 | if(join->values) { |
| 742 | msFreeCharArray(join->values, join->numitems); |
| 743 | join->values = NULL; |
| 744 | } |
| 745 | |
| 746 | n = joininfo->rows; |
| 747 | |
| 748 | /* for(i=joininfo->nextrecord; i<n; i++) { // find a match */ |
| 749 | /* if(strcmp(joininfo->target, msMySQLReadStringAttribute(joininfo->conn, i, joininfo->toindex)) == 0) break; */ |
| 750 | /* } */ |
| 751 | snprintf(qbuf, sizeof(qbuf), "SELECT * FROM %s WHERE %s = %s", join->table, joininfo->tocolumn, joininfo->target); |
| 752 | MYDEBUG printf("%s<BR>\n", qbuf); |
| 753 | if ((joininfo->qresult = msMySQLQuery(qbuf, joininfo->conn))) /* There were some rows found, write 'em out for debug */ |
| 754 | { |
| 755 | int numrows = mysql_affected_rows(joininfo->conn); |
| 756 | int numfields = mysql_field_count(joininfo->conn); |
| 757 | MYDEBUG printf("%d rows<br>\n", numrows); |
| 758 | if (numrows > 0) |
| 759 | { |
| 760 | MYSQL_ROW row = mysql_fetch_row(joininfo->qresult); |
| 761 | for(i=0; i<numfields; i++){ |
| 762 | MYDEBUG printf("%s,",row[i]); |
| 763 | } |
| 764 | MYDEBUG printf("<BR>\n"); |
| 765 | free(join->values); |
| 766 | if((join->values = (char **)malloc(sizeof(char *)*join->numitems)) == NULL) { |
| 767 | msSetError(MS_MEMERR, NULL, "msMySQLJoinNext()"); |
| 768 | return(MS_FAILURE); |
| 769 | } |
| 770 | for(i=0; i<join->numitems; i++){ |
| 771 | /* join->values[i] = msStrdup("\0"); */ /* intialize to zero length strings */ |
| 772 | join->values[i] = msStrdup(row[i]); /* intialize to zero length strings */ |
| 773 | /* rows = atoi(row[0]); */ |
| 774 | } |
| 775 | } else { |
| 776 | if((join->values = (char **)malloc(sizeof(char *)*join->numitems)) == NULL) { |
| 777 | msSetError(MS_MEMERR, NULL, "msMySQLJoinNext()"); |
no test coverage detected