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