Fixed resultset_records()
[ZOOM-Perl-moved-to-github.git] / ZOOM.xs
diff --git a/ZOOM.xs b/ZOOM.xs
index 7c6e257..7df5376 100644 (file)
--- a/ZOOM.xs
+++ b/ZOOM.xs
@@ -1,4 +1,4 @@
-/* $Id: ZOOM.xs,v 1.17 2005-10-26 16:27:25 mike Exp $ */
+/* $Id: ZOOM.xs,v 1.21 2005-11-03 15:58:09 mike Exp $ */
 
 #include "EXTERN.h"
 #include "perl.h"
@@ -232,31 +232,51 @@ void
 ZOOM_resultset_destroy(r)
        ZOOM_resultset r
 
-# UNTESTED
+# TESTED
 const char *
 ZOOM_resultset_option_get(r, key)
-       ZOOM_resultset  r
-       const char *    key
+       ZOOM_resultset r
+       const char* key
 
-# UNTESTED
+# TESTED
 void
 ZOOM_resultset_option_set(r, key, val)
-       ZOOM_resultset  r
-       const char *    key
-       const char *    val
+       ZOOM_resultset r
+       const char* key
+       const char* val
 
 # TESTED
 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
+# TESTED
+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 = 0;
+       CODE:
+               if (return_values)
+                       recs = (ZOOM_record*) xmalloc(count * sizeof *recs);
+               ZOOM_resultset_records(r, recs, start, count);
+               if (return_values) {
+                       AV *av = newAV();
+                       int i;
+                       for (i = 0; i < count; i++) {
+                               SV *tmp = newSV(0);
+                               sv_setref_pv(tmp, "ZOOM_record", (void*) recs[i]);
+                               av_push(av, tmp);
+                       }
+                       RETVAL = newRV((SV*) av);
+               } else {
+                       RETVAL = &PL_sv_undef;
+               }
+       OUTPUT:
+               RETVAL
 
 # TESTED
 ZOOM_record
@@ -264,16 +284,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.
 #