Sophie

Sophie

distrib > Fedora > 13 > i386 > media > updates-src > by-pkgid > 04267ea2d4e51063a2636815bd20b41f > files > 3

ruby-postgres-0.7.9-2008.01.28.2.fc13.src.rpm

From 45f28a97d00c4cf2b73dd877b6a7499eec3bc035 Mon Sep 17 00:00:00 2001
From: Chris Lalancette <clalance@redhat.com>
Date: Tue, 7 Sep 2010 16:14:07 -0400
Subject: [PATCH] Implement print.

This no longer exists in the upstream ruby-pg project, but this
source is pulled from the older 0.7.1 project to retain
compatibility.

Signed-off-by: Chris Lalancette <clalance@redhat.com>
---
 ext/postgres.c |   65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 65 insertions(+), 0 deletions(-)

diff --git a/ext/postgres.c b/ext/postgres.c
index d3a04bf..8d8083d 100644
--- a/ext/postgres.c
+++ b/ext/postgres.c
@@ -1924,6 +1924,70 @@ pgresult_getisnull(obj, tup_num, field_num)
     return PQgetisnull(result, i, j) ? Qtrue : Qfalse;
 }
 
+static VALUE
+pgresult_print(obj, file, opt)
+    VALUE obj, file, opt;
+{
+    VALUE value;
+    ID mem;
+    OpenFile* fp;
+    PQprintOpt po;
+
+    Check_Type(file, T_FILE);
+    Check_Type(opt,  T_STRUCT);
+    GetOpenFile(file, fp);
+
+    memset(&po, 0, sizeof(po));
+
+    mem = rb_intern("header");
+    value = rb_struct_getmember(opt, mem);
+    po.header = value == Qtrue ? 1 : 0;
+
+    mem = rb_intern("align");
+    value = rb_struct_getmember(opt, mem);
+    po.align = value == Qtrue ? 1 : 0;
+
+    mem = rb_intern("standard");
+    value = rb_struct_getmember(opt, mem);
+    po.standard = value == Qtrue ? 1 : 0;
+
+    mem = rb_intern("html3");
+    value = rb_struct_getmember(opt, mem);
+    po.html3 = value == Qtrue ? 1 : 0;
+
+    mem = rb_intern("expanded");
+    value = rb_struct_getmember(opt, mem);
+    po.expanded = value == Qtrue ? 1 : 0;
+
+    mem = rb_intern("pager");
+    value = rb_struct_getmember(opt, mem);
+    po.pager = value == Qtrue ? 1 : 0;
+
+    mem = rb_intern("fieldSep");
+    value = rb_struct_getmember(opt, mem);
+    if (!NIL_P(value)) {
+      Check_Type(value, T_STRING);
+      po.fieldSep = STR2CSTR(value);
+    }
+
+    mem = rb_intern("tableOpt");
+    value = rb_struct_getmember(opt, mem);
+    if (!NIL_P(value)) {
+      Check_Type(value, T_STRING);
+      po.tableOpt = STR2CSTR(value);
+    }
+
+    mem = rb_intern("caption");
+    value = rb_struct_getmember(opt, mem);
+    if (!NIL_P(value)) {
+      Check_Type(value, T_STRING);
+      po.caption = STR2CSTR(value);
+    }
+
+    PQprint(fp->f2?fp->f2:fp->f, get_pgresult(obj), &po);
+    return obj;
+}
+
 /*
  * call-seq:
  *    res.cmdtuples()
@@ -2791,6 +2855,7 @@ Init_postgres()
 	rb_define_alias(rb_cPGresult, "cmdtuples", "cmd_tuples");
     rb_define_method(rb_cPGresult, "cmdstatus", pgresult_cmdstatus, 0);
     rb_define_method(rb_cPGresult, "oid", pgresult_oid, 0);
+    rb_define_method(rb_cPGresult, "print", pgresult_print, 2);
     rb_define_method(rb_cPGresult, "clear", pgresult_clear, 0);
     rb_define_alias(rb_cPGresult, "close", "clear");
 
-- 
1.7.2.2