/// <summary> Имеется ли у текущего пользователя данная роль </summary> public static bool HasRole(this PGSQLDataAccess pgda, string role) { return(Convert.ToInt32(pgda.ExecuteScalar( "SELECT Count(u.usesysid) FROM pg_user u, pg_group g, pg_auth_members um\n" + "WHERE u.usename = user AND Upper(g.groname) = :p0 AND um.member = u.usesysid AND um.roleid = g.grosysid;", role.ToUpperInvariant())) > 0); }
/// <summary> Запись потока в LargeObject</summary> public static bool WriteLargeObject(this PGSQLDataAccess pgda, int loid, System.IO.Stream io, int blockSize = 512 * 1024) { var result = false; pgda.UseTransaction((dc) => { var fd = Convert.ToInt32(new PGSQLCommand("SELECT lo_open(:p0,:p1)", loid, 0x20000).ExecuteScalar(dc)); try { var buff = new byte[blockSize]; int len; try { new PGSQLCommand("SELECT lo_truncate(:p0, 0)", fd).ExecuteNonQuery(dc); var cmd = new PGSQLCommand("SELECT lowrite(:p0, :p1)", fd, buff); do { len = io.Read(buff, 0, blockSize); if (len != blockSize) { var newbuff = new byte[len]; Array.Copy(buff, newbuff, len); buff = newbuff; cmd["p1"] = newbuff; } cmd.ExecuteScalar(dc); }while (len == blockSize); result = true; } catch//(Exception ex) { result = false; } } finally { new PGSQLCommand("SELECT lo_close(:p0)", fd).ExecuteNonQuery(dc); } }); return(result); }
/// <summary> Чтение LargeObject в поток</summary> public static bool ReadLargeObject(this PGSQLDataAccess pgda, int loid, System.IO.Stream io, int blockSize = 512 * 1024) { var result = false; pgda.UseTransaction((dc) => { var fd = Convert.ToInt32(new PGSQLCommand("SELECT lo_open(:p0,:p1)", loid, 0x40000).ExecuteScalar(dc)); try { int len; try { var cmd = new PGSQLCommand("SELECT loread(:p0, :p1)", fd, blockSize); do { var buff = (byte[])cmd.ExecuteScalar(dc); len = buff.Length; if (len > 0) { io.Write(buff, 0, len); } }while (len == blockSize); result = true; } catch//(Exception ex) { result = false; } } finally { new PGSQLCommand("SELECT lo_close(:p0)", fd).ExecuteNonQuery(dc); } }); return(result); }
/// <summary> Удалить LargeObject </summary> public static bool DeleteLargeObject(this PGSQLDataAccess pgda, int loid) { return(Convert.ToInt32(pgda.ExecuteScalar("SELECT lo_unlink(:p0)", loid)) == 1); }
/// <summary> Права на LargeObject </summary> public static void GrantAndOwnLargeObject(this PGSQLDataAccess pgda, int loid, string Role, string Owner = null) { pgda.ExecuteNonQuery("GRANT ALL ON LARGE OBJECT {0} TO {1}; ".FormatStr(loid, Role)); pgda.ExecuteNonQuery("ALTER LARGE OBJECT {0} OWNER TO {1}; ".FormatStr(loid, Owner ?? Role)); }
/// <summary> Создать LargeObject </summary> public static int CreateLargeObject(this PGSQLDataAccess pgda, int loid = 0) { return(Convert.ToInt32(pgda.ExecuteScalar("select lo_create(:p0)", loid))); }