/*
 * call-seq:
 *    conn.escape_string( str ) -> String
 *    PGconn.escape_string( str ) -> String  # DEPRECATED
 *
 * Connection instance method for versions of 8.1 and higher of libpq
 * uses PQescapeStringConn, which is safer. Avoid calling as a class method,
 * the class method uses the deprecated PQescapeString() API function.
 * 
 * Returns a SQL-safe version of the String _str_.
 * This is the preferred way to make strings safe for inclusion in 
 * SQL queries.
 * 
 * Consider using exec_params, which avoids the need for passing values 
 * inside of SQL commands.
 */
static VALUE
pgconn_s_escape(VALUE self, VALUE string)
{
        char *escaped;
        int size,error;
        VALUE result;

        Check_Type(string, T_STRING);

        escaped = ALLOC_N(char, RSTRING_LEN(string) * 2 + 1);
        if(CLASS_OF(self) == rb_cPGconn) {
                size = PQescapeStringConn(get_pgconn(self), escaped, 
                        RSTRING_PTR(string), RSTRING_LEN(string), &error);
                if(error) {
                        rb_raise(rb_ePGError, PQerrorMessage(get_pgconn(self)));
                }
        } else {
                size = PQescapeString(escaped, RSTRING_PTR(string),
                        RSTRING_LEN(string));
        }
        result = rb_str_new(escaped, size);
        xfree(escaped);
        OBJ_INFECT(result, string);
        return result;
}