/*
* call-seq:
* PGconn.quote( obj )
* PGconn.quote( obj ) { |obj| ... }
* PGconn.format( obj )
* PGconn.format( obj ) { |obj| ... }
*
* If _obj_ is a Number, String, Array, +nil+, +true+, or +false+ then
* #quote returns a String representation of that object safe for use in PostgreSQL.
*
* If _obj_ is not one of the above classes and a block is supplied to #quote,
* the block is invoked, passing along the object. The return value from the
* block is returned as a string.
*
* If _obj_ is not one of the recognized classes andno block is supplied,
* a PGError is raised.
*/
static VALUE
pgconn_s_quote(self, obj)
VALUE self, obj;
{
char* quoted;
int size;
VALUE result;
if (TYPE(obj) == T_STRING) {
/* length * 2 because every char could require escaping */
/* + 2 for the quotes, + 1 for the null terminator */
quoted = ALLOCA_N(char, RSTRING(obj)->len * 2 + 2 + 1);
size = PQescapeString(quoted + 1, RSTRING(obj)->ptr, RSTRING(obj)->len);
*quoted = *(quoted + size + 1) = SINGLE_QUOTE;
result = rb_str_new(quoted, size + 2);
OBJ_INFECT(result, obj);
return result;
}
else {
return pgconn_s_format(self, obj);
}
}