[GRASS-SVN] r36576 - grass/branches/releasebranch_6_4/db/drivers/dbf

svn_grass at osgeo.org svn_grass at osgeo.org
Fri Apr 3 04:03:36 EDT 2009


Author: mlennert
Date: 2009-04-03 04:03:34 -0400 (Fri, 03 Apr 2009)
New Revision: 36576

Modified:
   grass/branches/releasebranch_6_4/db/drivers/dbf/dbfexe.c
Log:
check for nulls and sort them to the end in ORDER BY clauses (merge from devel6, 36574)


Modified: grass/branches/releasebranch_6_4/db/drivers/dbf/dbfexe.c
===================================================================
--- grass/branches/releasebranch_6_4/db/drivers/dbf/dbfexe.c	2009-04-03 07:55:58 UTC (rev 36575)
+++ grass/branches/releasebranch_6_4/db/drivers/dbf/dbfexe.c	2009-04-03 08:03:34 UTC (rev 36576)
@@ -477,32 +477,47 @@
 
     tbl = &(db.tables[cur_cmp_table]);
 
-    switch (tbl->cols[cur_cmp_ocol].type) {
-    case DBF_CHAR:
-	c1 = tbl->rows[*row1].values[cur_cmp_ocol].c;
-	c2 = tbl->rows[*row2].values[cur_cmp_ocol].c;
-	return (strcmp(c1, c2));
-	break;
-    case DBF_INT:
-	i1 = tbl->rows[*row1].values[cur_cmp_ocol].i;
-	i2 = tbl->rows[*row2].values[cur_cmp_ocol].i;
-	if (i1 < i2)
-	    return -1;
-	if (i1 > i2)
+    if (tbl->rows[*row1].values[cur_cmp_ocol].is_null) {
+	if (tbl->rows[*row2].values[cur_cmp_ocol].is_null) {
+	    return 0;
+	}
+	else {
 	    return 1;
-	return 0;
-	break;
-    case DBF_DOUBLE:
-	d1 = tbl->rows[*row1].values[cur_cmp_ocol].d;
-	d2 = tbl->rows[*row2].values[cur_cmp_ocol].d;
-	if (d1 < d2)
+	}
+    }
+    else {
+	if (tbl->rows[*row2].values[cur_cmp_ocol].is_null) {
 	    return -1;
-	if (d1 > d2)
-	    return 1;
-	return 0;
-	break;
+	}
+	else {
+	    switch (tbl->cols[cur_cmp_ocol].type) {
+	    case DBF_CHAR:
+		c1 = tbl->rows[*row1].values[cur_cmp_ocol].c;
+		c2 = tbl->rows[*row2].values[cur_cmp_ocol].c;
+		return (strcmp(c1, c2));
+		break;
+	    case DBF_INT:
+		i1 = tbl->rows[*row1].values[cur_cmp_ocol].i;
+		i2 = tbl->rows[*row2].values[cur_cmp_ocol].i;
+		if (i1 < i2)
+		    return -1;
+		if (i1 > i2)
+		    return 1;
+		return 0;
+		break;
+	    case DBF_DOUBLE:
+		d1 = tbl->rows[*row1].values[cur_cmp_ocol].d;
+		d2 = tbl->rows[*row2].values[cur_cmp_ocol].d;
+		if (d1 < d2)
+		    return -1;
+		if (d1 > d2)
+		    return 1;
+		return 0;
+		break;
+	    }
+	    return 0;
+	}
     }
-    return 0;
 }
 
 static int cmp_row_desc(const void *pa, const void *pb)



More information about the grass-commit mailing list