/* * do_lo_unlink() * * removes a large object out of the database */ bool do_lo_unlink(const char *loid_arg) { int status; Oid loid = atooid(loid_arg); bool own_transaction; if (!start_lo_xact("\\lo_unlink", &own_transaction)) return false; SetCancelConn(); status = lo_unlink(pset.db, loid); ResetCancelConn(); if (status == -1) { psql_error("%s", PQerrorMessage(pset.db)); return fail_lo_xact("\\lo_unlink", own_transaction); } if (!finish_lo_xact("\\lo_unlink", own_transaction)) return false; print_lo_result("lo_unlink %u", loid); return true; }
/* * do_lo_unlink() * * removes a large object out of the database */ bool do_lo_unlink(const char *loid_arg) { int status; Oid loid = atooid(loid_arg); bool own_transaction; if (!start_lo_xact("\\lo_unlink", &own_transaction)) return false; SetCancelConn(); status = lo_unlink(pset.db, loid); ResetCancelConn(); if (status == -1) { fputs(PQerrorMessage(pset.db), stderr); return fail_lo_xact("\\lo_unlink", own_transaction); } if (!finish_lo_xact("\\lo_unlink", own_transaction)) return false; fprintf(pset.queryFout, "lo_unlink %u\n", loid); return true; }
/* * do_lo_export() * * Write a large object to a file */ bool do_lo_export(const char *loid_arg, const char *filename_arg) { int status; bool own_transaction; if (!start_lo_xact("\\lo_export", &own_transaction)) return false; SetCancelConn(); status = lo_export(pset.db, atooid(loid_arg), filename_arg); ResetCancelConn(); /* of course this status is documented nowhere :( */ if (status != 1) { psql_error("%s", PQerrorMessage(pset.db)); return fail_lo_xact("\\lo_export", own_transaction); } if (!finish_lo_xact("\\lo_export", own_transaction)) return false; print_lo_result("lo_export"); return true; }
/* * do_lo_export() * * Write a large object to a file */ bool do_lo_export(const char *loid_arg, const char *filename_arg) { int status; bool own_transaction; if (!start_lo_xact("\\lo_export", &own_transaction)) return false; SetCancelConn(); status = lo_export(pset.db, atooid(loid_arg), filename_arg); ResetCancelConn(); /* of course this status is documented nowhere :( */ if (status != 1) { fputs(PQerrorMessage(pset.db), stderr); return fail_lo_xact("\\lo_export", own_transaction); } if (!finish_lo_xact("\\lo_export", own_transaction)) return false; fprintf(pset.queryFout, "lo_export\n"); return true; }
/* * do_lo_import() * * Copy large object from file to database */ bool do_lo_import(const char *filename_arg, const char *comment_arg) { PGresult *res; Oid loid; char oidbuf[32]; bool own_transaction; if (!start_lo_xact("\\lo_import", &own_transaction)) return false; SetCancelConn(); loid = lo_import(pset.db, filename_arg); ResetCancelConn(); if (loid == InvalidOid) { psql_error("%s", PQerrorMessage(pset.db)); return fail_lo_xact("\\lo_import", own_transaction); } /* insert description if given */ if (comment_arg) { char *cmdbuf; char *bufptr; size_t slen = strlen(comment_arg); cmdbuf = malloc(slen * 2 + 256); if (!cmdbuf) return fail_lo_xact("\\lo_import", own_transaction); sprintf(cmdbuf, "COMMENT ON LARGE OBJECT %u IS '", loid); bufptr = cmdbuf + strlen(cmdbuf); bufptr += PQescapeStringConn(pset.db, bufptr, comment_arg, slen, NULL); strcpy(bufptr, "'"); if (!(res = PSQLexec(cmdbuf, false))) { free(cmdbuf); return fail_lo_xact("\\lo_import", own_transaction); } PQclear(res); free(cmdbuf); } if (!finish_lo_xact("\\lo_import", own_transaction)) return false; print_lo_result("lo_import %u", loid); sprintf(oidbuf, "%u", loid); SetVariable(pset.vars, "LASTOID", oidbuf); return true; }