Additional tests for resultset_records().
[ZOOM-Perl-moved-to-github.git] / ZOOM.xs
diff --git a/ZOOM.xs b/ZOOM.xs
index 941dd7d..557e4ed 100644 (file)
--- a/ZOOM.xs
+++ b/ZOOM.xs
@@ -1,4 +1,4 @@
-/* $Id: ZOOM.xs,v 1.18 2005-11-01 11:54:42 mike Exp $ */
+/* $Id: ZOOM.xs,v 1.20 2005-11-02 18:23:10 mike Exp $ */
 
 #include "EXTERN.h"
 #include "perl.h"
@@ -250,13 +250,44 @@ size_t
 ZOOM_resultset_size(r)
        ZOOM_resultset r
 
-# UNTESTED
-void
-ZOOM_resultset_records(r, recs, start, count)
-       ZOOM_resultset  r
-       ZOOM_record *   recs
-       size_t  start
-       size_t  count
+# TESTING
+SV *
+ZOOM_resultset_records(r, start, count, return_values)
+       ZOOM_resultset r
+       size_t start
+       size_t count
+       int return_values
+       INIT:
+               ZOOM_record *recs;
+       CODE:
+               /*printf("*** ZOOM_resultset_records(r=0x%lx, start=%lu, count=%lx, return_values=%d)\n", (unsigned long) r, (unsigned long) start, (unsigned long) count, return_values);*/
+               if (return_values) {
+                       /*printf("*** generating space for %ld records\n", (unsigned long) count);*/
+                       recs = (ZOOM_record*) xmalloc(count * sizeof *recs);
+               } else {
+                       /*printf("*** using null pointer for records array\n");*/
+                       recs = 0;
+               }
+               ZOOM_resultset_records(r, recs, start, count);
+               /*printf("*** returned from ZOOM_resultset_records()\n");*/
+               if (return_values) {
+                       AV *av = newAV();
+                       int i;
+                       for (i = 0; i < count; i++) {
+                               SV *tmp = sv_newmortal();
+                               printf("*** recs[%d] = %lu\n", i, (unsigned long) recs[i]);
+                               /* ### Next line fails.  Damn and blast Perl */
+                               sv_setref_pv(tmp, "ZOOM_record", (void*) recs[i]);
+                               av_push(av, tmp);
+                       }
+                       RETVAL = newRV((SV*) av);
+                       printf("*** returning array %lu\n", (unsigned long) RETVAL);
+               } else {
+                       /*printf("*** returning undef\n");*/
+                       RETVAL = &PL_sv_undef;
+               }
+       OUTPUT:
+               RETVAL
 
 # TESTED
 ZOOM_record
@@ -264,16 +295,16 @@ ZOOM_resultset_record(s, pos)
        ZOOM_resultset s
        size_t pos
 
-# UNTESTED
+# TESTED
 ZOOM_record
 ZOOM_resultset_record_immediate(s, pos)
-       ZOOM_resultset  s
-       size_t  pos
+       ZOOM_resultset s
+       size_t pos
 
-# UNTESTED
+# TESTED
 void
 ZOOM_resultset_cache_reset(r)
-       ZOOM_resultset  r
+       ZOOM_resultset r
 
 # See "typemap" for discussion of the "const char *" return-type.
 #