Class: PGresult
Overview
******************************************************************
The class to represent the query result tuples (rows).
An instance of this class is created as the result of every query.
You may need to invoke the #clear method of the instance when finished with
the result for better memory performance.
Example:
require 'pg'
conn = PGconn.open(:dbname => 'test')
res = conn.exec('SELECT 1 AS a, 2 AS b, NULL AS c')
res.getvalue(0,0) # '1'
res[0]['b'] # '2'
res[0]['c'] # nil
Constant Summary collapse
- PGRES_EMPTY_QUERY =
The string sent to the server was empty.
#result_status constant
- PGRES_COMMAND_OK =
Successful completion of a command returning no data.
#result_status constant
- PGRES_TUPLES_OK =
Successful completion of a command returning data
(such as a SELECT or SHOW).
#result_status constant
- PGRES_COPY_OUT =
Copy Out (from server) data transfer started.
#result_status constant
- PGRES_COPY_IN =
Copy In (to server) data transfer started.
#result_status constant
- PGRES_BAD_RESPONSE =
The server’s response was not understood.
#result_status constant
- PGRES_NONFATAL_ERROR =
A nonfatal error (a notice or warning) occurred.
#result_status constant
- PGRES_FATAL_ERROR =
A fatal error occurred.
#result_status constant
- PG_DIAG_SEVERITY =
The severity; the field contents are ERROR, FATAL, or PANIC (in an error message), or WARNING, NOTICE, DEBUG, INFO, or LOG (in a notice message), or a localized translation of one of these. Always present.
#result_error_field argument constant
- PG_DIAG_SQLSTATE =
The SQLSTATE code for the error. The SQLSTATE code identies the type of error that has occurred; it can be used by front-end applications to perform specic operations (such as er- ror handling) in response to a particular database error. For a list of the possible SQLSTATE codes, see Appendix A. This eld is not localizable, and is always present.
#result_error_field argument constant
- PG_DIAG_MESSAGE_PRIMARY =
The primary human-readable error message (typically one line). Always present.
#result_error_field argument constant
- PG_DIAG_MESSAGE_DETAIL =
Detail: an optional secondary error message carrying more detail about the problem. Might run to multiple lines.
#result_error_field argument constant
- PG_DIAG_MESSAGE_HINT =
Hint: an optional suggestion what to do about the problem. This is intended to differ from detail in that it offers advice (potentially inappropriate) rather than hard facts. Might run to multiple lines.
#result_error_field argument constant
- PG_DIAG_STATEMENT_POSITION =
A string containing a decimal integer indicating an error cursor position as an index into the original statement string. The rst character has index 1, and positions are measured in characters not bytes.
#result_error_field argument constant
- PG_DIAG_INTERNAL_POSITION =
This is dened the same as the PG_DIAG_STATEMENT_POSITION eld, but it is used when the cursor position refers to an internally generated command rather than the one submitted by the client. The PG_DIAG_INTERNAL_QUERY eld will always appear when this eld appears.
#result_error_field argument constant
- PG_DIAG_INTERNAL_QUERY =
The text of a failed internally-generated command. This could be, for example, a SQL query issued by a PL/pgSQL function.
#result_error_field argument constant
- PG_DIAG_CONTEXT =
An indication of the context in which the error occurred. Presently this includes a call stack traceback of active procedural language functions and internally-generated queries. The trace is one entry per line, most recent rst.
#result_error_field argument constant
- PG_DIAG_SOURCE_FILE =
The le name of the source-code location where the error was reported.
#result_error_field argument constant
- PG_DIAG_SOURCE_LINE =
The line number of the source-code location where the error was reported.
#result_error_field argument constant
- PG_DIAG_SOURCE_FUNCTION =
The name of the source-code function reporting the error.
#result_error_field argument constant
- InvalidOid =
Invalid OID constant
INT2FIX(InvalidOid)
Instance Method Summary collapse
-
#[](n) ⇒ Hash
Returns tuple n as a hash.
-
#clear ⇒ nil
Clears the PGresult object as the result of the query.
-
#cmd_status ⇒ String
Returns the status string of the last query command.
-
#cmd_tuples ⇒ Fixnum
(also: #cmdtuples)
Returns the number of tuples (rows) affected by the SQL command.
-
#column_values(n) ⇒ Array
Returns an Array of the values from the nth column of each tuple in the result.
-
#each {|tuple| ... } ⇒ Object
Invokes block for each tuple in the result set.
-
#fformat(column_number) ⇒ Fixnum
Returns the format (0 for text, 1 for binary) of column column_number.
-
#field_values(field) ⇒ Array
Returns an Array of the values from the given field of each tuple in the result.
-
#fields ⇒ Array
Returns an array of Strings representing the names of the fields in the result.
-
#fmod(column_number) ⇒ Object
Returns the type modifier associated with column column_number.
-
#fname(index) ⇒ String
Returns the name of the column corresponding to index.
-
#fnumber(name) ⇒ Fixnum
Returns the index of the field specified by the string name.
-
#fsize(index) ⇒ Object
Returns the size of the field type in bytes.
-
#ftable(column_number) ⇒ Fixnum
Returns the Oid of the table from which the column column_number was fetched.
-
#ftablecol(column_number) ⇒ Fixnum
Returns the column number (within its table) of the table from which the column column_number is made up.
-
#ftype(column_number) ⇒ Object
Returns the data type associated with column_number.
-
#getisnull(tuple_position, field_position) ⇒ Boolean
Returns
true
if the specified value isnil
;false
otherwise. -
#getlength(tup_num, field_num) ⇒ Fixnum
Returns the (String) length of the field in bytes.
-
#getvalue(tup_num, field_num) ⇒ Object
Returns the value in tuple number tup_num, field field_num, or
nil
if the field isNULL
. -
#nfields ⇒ Fixnum
(also: #num_fields)
Returns the number of columns in the query result.
-
#nparams ⇒ Fixnum
Returns the number of parameters of a prepared statement.
-
#ntuples ⇒ Fixnum
(also: #num_tuples)
Returns the number of tuples in the query result.
-
#oid_value ⇒ Fixnum
Returns the
oid
of the inserted row if applicable, otherwisenil
. -
#paramtype(param_number) ⇒ Oid
Returns the Oid of the data type of parameter param_number.
-
#res_status(status) ⇒ String
Returns the string representation of status
status
. -
#result_error_field(fieldcode) ⇒ String
Returns the individual field of an error.
-
#result_error_message ⇒ String
Returns the error message of the command as a string.
-
#result_status ⇒ Fixnum
Returns the status of the query.
Instance Method Details
#[](n) ⇒ Hash
Returns tuple n as a hash.
3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 |
# File 'ext/pg.c', line 3511
static VALUE
pgresult_aref(VALUE self, VALUE index)
{
PGresult *result = get_pgresult(self);
int tuple_num = NUM2INT(index);
int field_num;
VALUE fname,val;
VALUE tuple;
if(tuple_num < 0 || tuple_num >= PQntuples(result))
rb_raise(rb_eIndexError, "Index %d is out of range", tuple_num);
tuple = rb_hash_new();
for(field_num = 0; field_num < PQnfields(result); field_num++) {
fname = rb_tainted_str_new2(PQfname(result,field_num));
ASSOCIATE_INDEX(fname, self);
if(PQgetisnull(result, tuple_num, field_num)) {
rb_hash_aset(tuple, fname, Qnil);
}
else {
val = rb_tainted_str_new(PQgetvalue(result, tuple_num, field_num),
PQgetlength(result, tuple_num, field_num));
/* associate client encoding for text format only */
if(0 == PQfformat(result, field_num)) {
fflush( stdout );
ASSOCIATE_INDEX(val, self);
} else {
#ifdef M17N_SUPPORTED
fflush( stdout );
rb_enc_associate(val, rb_ascii8bit_encoding());
#endif
}
rb_hash_aset(tuple, fname, val);
}
}
return tuple;
}
|
#clear ⇒ nil
Clears the PGresult object as the result of the query.
3117 3118 3119 3120 3121 3122 3123 |
# File 'ext/pg.c', line 3117
static VALUE
pgresult_clear(VALUE self)
{
PQclear(get_pgresult(self));
DATA_PTR(self) = NULL;
return Qnil;
}
|
#cmd_status ⇒ String
Returns the status string of the last query command.
3456 3457 3458 3459 3460 3461 3462 |
# File 'ext/pg.c', line 3456
static VALUE
pgresult_cmd_status(VALUE self)
{
VALUE ret = rb_tainted_str_new2(PQcmdStatus(get_pgresult(self)));
ASSOCIATE_INDEX(ret, self);
return ret;
}
|
#cmd_tuples ⇒ Fixnum Also known as: cmdtuples
Returns the number of tuples (rows) affected by the SQL command.
If the SQL command that generated the PGresult was not one of:
-
INSERT
-
UPDATE
-
DELETE
-
MOVE
-
FETCH
or if no tuples were affected, 0
is returned.
3478 3479 3480 3481 3482 3483 3484 |
# File 'ext/pg.c', line 3478
static VALUE
pgresult_cmd_tuples(VALUE self)
{
long n;
n = strtol(PQcmdTuples(get_pgresult(self)),NULL, 10);
return INT2NUM(n);
}
|
#column_values(n) ⇒ Array
Returns an Array of the values from the nth column of each tuple in the result.
3558 3559 3560 3561 3562 3563 |
# File 'ext/pg.c', line 3558
static VALUE
pgresult_column_values(VALUE self, VALUE index)
{
int col = NUM2INT( index );
return make_column_result_array( self, col );
}
|
#each {|tuple| ... } ⇒ Object
Invokes block for each tuple in the result set.
3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 |
# File 'ext/pg.c', line 3628
static VALUE
pgresult_each(VALUE self)
{
PGresult *result = get_pgresult(self);
int tuple_num;
for(tuple_num = 0; tuple_num < PQntuples(result); tuple_num++) {
rb_yield(pgresult_aref(self, INT2NUM(tuple_num)));
}
return self;
}
|
#fformat(column_number) ⇒ Fixnum
Returns the format (0 for text, 1 for binary) of column column_number.
Raises ArgumentError if column_number is out of range.
3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 |
# File 'ext/pg.c', line 3252
static VALUE
pgresult_fformat(VALUE self, VALUE column_number)
{
PGresult *result = get_pgresult(self);
int fnumber = NUM2INT(column_number);
if (fnumber < 0 || fnumber >= PQnfields(result)) {
rb_raise(rb_eArgError, "Column number is out of range: %d",
fnumber);
}
return INT2FIX(PQfformat(result, fnumber));
}
|
#field_values(field) ⇒ Array
Returns an Array of the values from the given field of each tuple in the result.
3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 |
# File 'ext/pg.c', line 3573
static VALUE
pgresult_field_values( VALUE self, VALUE field )
{
PGresult *result = get_pgresult( self );
const char *fieldname = RSTRING_PTR( field );
int fnum = PQfnumber( result, fieldname );
if ( fnum < 0 )
rb_raise( rb_eIndexError, "no such field '%s' in result", fieldname );
return make_column_result_array( self, fnum );
}
|
#fields ⇒ Array
Returns an array of Strings representing the names of the fields in the result.
3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 |
# File 'ext/pg.c', line 3646
static VALUE
pgresult_fields(VALUE self)
{
PGresult *result;
VALUE ary;
int n, i;
result = get_pgresult(self);
n = PQnfields(result);
ary = rb_ary_new2(n);
for (i=0;i<n;i++) {
VALUE val = rb_tainted_str_new2(PQfname(result, i));
ASSOCIATE_INDEX(val, self);
rb_ary_push(ary, val);
}
return ary;
}
|
#fmod(column_number) ⇒ Object
Returns the type modifier associated with column column_number. See the #ftype method for an example of how to use this.
Raises an ArgumentError if column_number is out of range.
3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 |
# File 'ext/pg.c', line 3302
static VALUE
pgresult_fmod(VALUE self, VALUE column_number)
{
PGresult *result = get_pgresult(self);
int fnumber = NUM2INT(column_number);
int modifier;
if (fnumber < 0 || fnumber >= PQnfields(result)) {
rb_raise(rb_eArgError, "Column number is out of range: %d",
fnumber);
}
modifier = PQfmod(result,fnumber);
return INT2NUM(modifier);
}
|
#fname(index) ⇒ String
Returns the name of the column corresponding to index.
3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 |
# File 'ext/pg.c', line 3155
static VALUE
pgresult_fname(VALUE self, VALUE index)
{
VALUE fname;
PGresult *result;
int i = NUM2INT(index);
result = get_pgresult(self);
if (i < 0 || i >= PQnfields(result)) {
rb_raise(rb_eArgError,"invalid field number %d", i);
}
fname = rb_tainted_str_new2(PQfname(result, i));
ASSOCIATE_INDEX(fname, self);
return fname;
}
|
#fnumber(name) ⇒ Fixnum
Returns the index of the field specified by the string name.
Raises an ArgumentError if the specified name isn’t one of the field names; raises a TypeError if name is not a String.
3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 |
# File 'ext/pg.c', line 3180
static VALUE
pgresult_fnumber(VALUE self, VALUE name)
{
int n;
Check_Type(name, T_STRING);
n = PQfnumber(get_pgresult(self), StringValuePtr(name));
if (n == -1) {
rb_raise(rb_eArgError,"Unknown field: %s", StringValuePtr(name));
}
return INT2FIX(n);
}
|
#fsize(index) ⇒ Object
Returns the size of the field type in bytes. Returns -1
if the field is variable sized.
res = conn.exec("SELECT myInt, myVarChar50 FROM foo")
res.size(0) => 4
res.size(1) => -1
3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 |
# File 'ext/pg.c', line 3327
static VALUE
pgresult_fsize(VALUE self, VALUE index)
{
PGresult *result;
int i = NUM2INT(index);
result = get_pgresult(self);
if (i < 0 || i >= PQnfields(result)) {
rb_raise(rb_eArgError,"invalid field number %d", i);
}
return INT2NUM(PQfsize(result, i));
}
|
#ftable(column_number) ⇒ Fixnum
Returns the Oid of the table from which the column column_number was fetched.
Raises ArgumentError if column_number is out of range or if the Oid is undefined for that column.
3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 |
# File 'ext/pg.c', line 3204
static VALUE
pgresult_ftable(VALUE self, VALUE column_number)
{
Oid n ;
int col_number = NUM2INT(column_number);
PGresult *pgresult = get_pgresult(self);
if( col_number < 0 || col_number >= PQnfields(pgresult))
rb_raise(rb_eArgError,"Invalid column index: %d", col_number);
n = PQftable(pgresult, col_number);
return INT2FIX(n);
}
|
#ftablecol(column_number) ⇒ Fixnum
Returns the column number (within its table) of the table from which the column column_number is made up.
Raises ArgumentError if column_number is out of range or if the column number from its table is undefined for that column.
3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 |
# File 'ext/pg.c', line 3228
static VALUE
pgresult_ftablecol(VALUE self, VALUE column_number)
{
int col_number = NUM2INT(column_number);
PGresult *pgresult = get_pgresult(self);
int n;
if( col_number < 0 || col_number >= PQnfields(pgresult))
rb_raise(rb_eArgError,"Invalid column index: %d", col_number);
n = PQftablecol(pgresult, col_number);
return INT2FIX(n);
}
|
#ftype(column_number) ⇒ Object
Returns the data type associated with column_number.
The integer returned is the internal OID
number (in PostgreSQL) of the type. To get a human-readable value for the type, use the returned OID and the field’s #fmod value with the format_type() SQL function:
# Get the type of the second column of the result 'res'
typename = conn.
exec( "SELECT format_type($1,$2)", [res.ftype(1), res.fmod(1)] ).
getvalue( 0, 0 )
Raises an ArgumentError if column_number is out of range.
3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 |
# File 'ext/pg.c', line 3282
static VALUE
pgresult_ftype(VALUE self, VALUE index)
{
PGresult* result = get_pgresult(self);
int i = NUM2INT(index);
if (i < 0 || i >= PQnfields(result)) {
rb_raise(rb_eArgError, "invalid field number %d", i);
}
return INT2NUM(PQftype(result, i));
}
|
#getisnull(tuple_position, field_position) ⇒ Boolean
Returns true
if the specified value is nil
; false
otherwise.
3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 |
# File 'ext/pg.c', line 3376
static VALUE
pgresult_getisnull(VALUE self, VALUE tup_num, VALUE field_num)
{
PGresult *result;
int i = NUM2INT(tup_num);
int j = NUM2INT(field_num);
result = get_pgresult(self);
if (i < 0 || i >= PQntuples(result)) {
rb_raise(rb_eArgError,"invalid tuple number %d", i);
}
if (j < 0 || j >= PQnfields(result)) {
rb_raise(rb_eArgError,"invalid field number %d", j);
}
return PQgetisnull(result, i, j) ? Qtrue : Qfalse;
}
|
#getlength(tup_num, field_num) ⇒ Fixnum
Returns the (String) length of the field in bytes.
Equivalent to res.value(tup_num,field_num).length
.
3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 |
# File 'ext/pg.c', line 3401
static VALUE
pgresult_getlength(VALUE self, VALUE tup_num, VALUE field_num)
{
PGresult *result;
int i = NUM2INT(tup_num);
int j = NUM2INT(field_num);
result = get_pgresult(self);
if (i < 0 || i >= PQntuples(result)) {
rb_raise(rb_eArgError,"invalid tuple number %d", i);
}
if (j < 0 || j >= PQnfields(result)) {
rb_raise(rb_eArgError,"invalid field number %d", j);
}
return INT2FIX(PQgetlength(result, i, j));
}
|
#getvalue(tup_num, field_num) ⇒ Object
Returns the value in tuple number tup_num, field field_num, or nil
if the field is NULL
.
3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 |
# File 'ext/pg.c', line 3347
static VALUE
pgresult_getvalue(VALUE self, VALUE tup_num, VALUE field_num)
{
VALUE ret;
PGresult *result;
int i = NUM2INT(tup_num);
int j = NUM2INT(field_num);
result = get_pgresult(self);
if(i < 0 || i >= PQntuples(result)) {
rb_raise(rb_eArgError,"invalid tuple number %d", i);
}
if(j < 0 || j >= PQnfields(result)) {
rb_raise(rb_eArgError,"invalid field number %d", j);
}
if(PQgetisnull(result, i, j))
return Qnil;
ret = rb_tainted_str_new(PQgetvalue(result, i, j),
PQgetlength(result, i, j));
ASSOCIATE_INDEX(ret, self);
return ret;
}
|
#nfields ⇒ Fixnum Also known as: num_fields
Returns the number of columns in the query result.
3143 3144 3145 3146 3147 |
# File 'ext/pg.c', line 3143
static VALUE
pgresult_nfields(VALUE self)
{
return INT2NUM(PQnfields(get_pgresult(self)));
}
|
#nparams ⇒ Fixnum
Returns the number of parameters of a prepared statement. Only useful for the result returned by conn.describePrepared
3425 3426 3427 3428 3429 3430 3431 3432 |
# File 'ext/pg.c', line 3425
static VALUE
pgresult_nparams(VALUE self)
{
PGresult *result;
result = get_pgresult(self);
return INT2FIX(PQnparams(result));
}
|
#ntuples ⇒ Fixnum Also known as: num_tuples
Returns the number of tuples in the query result.
3131 3132 3133 3134 3135 |
# File 'ext/pg.c', line 3131
static VALUE
pgresult_ntuples(VALUE self)
{
return INT2FIX(PQntuples(get_pgresult(self)));
}
|
#oid_value ⇒ Fixnum
Returns the oid
of the inserted row if applicable, otherwise nil
.
3493 3494 3495 3496 3497 3498 3499 3500 3501 |
# File 'ext/pg.c', line 3493
static VALUE
pgresult_oid_value(VALUE self)
{
Oid n = PQoidValue(get_pgresult(self));
if (n == InvalidOid)
return Qnil;
else
return INT2FIX(n);
}
|
#paramtype(param_number) ⇒ Oid
Returns the Oid of the data type of parameter param_number. Only useful for the result returned by conn.describePrepared
3441 3442 3443 3444 3445 3446 3447 3448 |
# File 'ext/pg.c', line 3441
static VALUE
pgresult_paramtype(VALUE self, VALUE param_number)
{
PGresult *result;
result = get_pgresult(self);
return INT2FIX(PQparamtype(result,NUM2INT(param_number)));
}
|
#res_status(status) ⇒ String
Returns the string representation of status status
.
3059 3060 3061 3062 3063 3064 3065 |
# File 'ext/pg.c', line 3059
static VALUE
pgresult_res_status(VALUE self, VALUE status)
{
VALUE ret = rb_tainted_str_new2(PQresStatus(NUM2INT(status)));
ASSOCIATE_INDEX(ret, self);
return ret;
}
|
#result_error_field(fieldcode) ⇒ String
Returns the individual field of an error.
fieldcode
is one of:
-
PG_DIAG_SEVERITY
-
PG_DIAG_SQLSTATE
-
PG_DIAG_MESSAGE_PRIMARY
-
PG_DIAG_MESSAGE_DETAIL
-
PG_DIAG_MESSAGE_HINT
-
PG_DIAG_STATEMENT_POSITION
-
PG_DIAG_INTERNAL_POSITION
-
PG_DIAG_INTERNAL_QUERY
-
PG_DIAG_CONTEXT
-
PG_DIAG_SOURCE_FILE
-
PG_DIAG_SOURCE_LINE
-
PG_DIAG_SOURCE_FUNCTION
3101 3102 3103 3104 3105 3106 3107 3108 3109 |
# File 'ext/pg.c', line 3101
static VALUE
pgresult_result_error_field(VALUE self, VALUE field)
{
PGresult *result = get_pgresult(self);
int fieldcode = NUM2INT(field);
VALUE ret = rb_tainted_str_new2(PQresultErrorField(result,fieldcode));
ASSOCIATE_INDEX(ret, self);
return ret;
}
|
#result_error_message ⇒ String
Returns the error message of the command as a string.
3073 3074 3075 3076 3077 3078 3079 |
# File 'ext/pg.c', line 3073
static VALUE
pgresult_result_error_message(VALUE self)
{
VALUE ret = rb_tainted_str_new2(PQresultErrorMessage(get_pgresult(self)));
ASSOCIATE_INDEX(ret, self);
return ret;
}
|
#result_status ⇒ Fixnum
Returns the status of the query. The status value is one of:
-
PGRES_EMPTY_QUERY
-
PGRES_COMMAND_OK
-
PGRES_TUPLES_OK
-
PGRES_COPY_OUT
-
PGRES_COPY_IN
-
PGRES_BAD_RESPONSE
-
PGRES_NONFATAL_ERROR
-
PGRES_FATAL_ERROR
3046 3047 3048 3049 3050 |
# File 'ext/pg.c', line 3046
static VALUE
pgresult_result_status(VALUE self)
{
return INT2FIX(PQresultStatus(get_pgresult(self)));
}
|