internal static void ExecuteBlindSuppressTimeout(NpgsqlConnector connector, NpgsqlQuery query) { // Block the notification thread before writing anything to the wire. using (var blocker = connector.BlockNotificationThread()) { // Write the Query message to the wire. connector.Query(query); // Flush, and wait for and discard all responses. connector.ProcessAndDiscardBackendResponses(); } }
/// <summary> /// Special adaptation of ExecuteBlind() that sets statement_timeout. /// This exists to prevent Connector.SetBackendCommandTimeout() from calling Command.ExecuteBlind(), /// which will cause an endless recursive loop. /// </summary> /// <param name="connector"></param> /// <param name="timeout">Timeout in seconds.</param> internal static void ExecuteSetStatementTimeoutBlind(NpgsqlConnector connector, int timeout) { NpgsqlQuery query; // Bypass cpmmand parsing overhead and send command verbatim. query = NpgsqlQuery.Create(connector.BackendProtocolVersion, string.Format("SET statement_timeout = {0}", timeout * 1000)); // Write the Query message to the wire. connector.Query(query); // Flush, and wait for and discard all responses. connector.ProcessAndDiscardBackendResponses(); }
public void TestNotify(NpgsqlConnector context) { //ZA Hnotifytest CNOTIFY Z //Qlisten notifytest;notify notifytest; Stream stm = context.Stream; // string uuidString = "uuid" + Guid.NewGuid().ToString("N"); string uuidString = string.Format("uuid{0:N}", Guid.NewGuid()); Queue <byte> buffer = new Queue <byte>(); byte[] convertBuffer = new byte[36]; PGUtil.WriteStringNullTerminated(stm, "Qlisten {0};notify {0};", uuidString); for (;;) { int newByte = stm.ReadByte(); if (newByte == -1) { throw new EndOfStreamException(); } buffer.Enqueue((byte)newByte); if (buffer.Count > 35) { buffer.CopyTo(convertBuffer, 0); if (BackendEncoding.UTF8Encoding.GetString(convertBuffer) == uuidString) { for (;;) { switch (stm.ReadByte()) { case -1: throw new EndOfStreamException(); case 'Z': //context.Query(new NpgsqlCommand("UNLISTEN *", context)); using (NpgsqlCommand cmd = new NpgsqlCommand("UNLISTEN *", context)) { context.Query(cmd); } return; } } } else { buffer.Dequeue(); } } } }
private static void ExecuteBlind(NpgsqlConnector connector, NpgsqlQuery query, int timeout) { // Block the notification thread before writing anything to the wire. using (var blocker = connector.BlockNotificationThread()) { // Set statement timeout as needed. connector.SetBackendCommandTimeout(timeout); // Write the Query message to the wire. connector.Query(query); // Flush, and wait for and discard all responses. connector.ProcessAndDiscardBackendResponses(); } }
public void TestNotify(NpgsqlConnector context) { //ZA Hnotifytest CNOTIFY Z //Qlisten notifytest;notify notifytest; Stream stm = context.Stream; string uuidString = "uuid" + Guid.NewGuid().ToString("N"); PGUtil.WriteString("Qlisten " + uuidString + ";notify " + uuidString + ";", stm); Queue <byte> buffer = new Queue <byte>(); byte[] convertBuffer = new byte[36]; for (; ;) { int newByte = stm.ReadByte(); if (newByte == -1) { throw new EndOfStreamException(); } buffer.Enqueue((byte)newByte); if (buffer.Count > 35) { buffer.CopyTo(convertBuffer, 0); if (ENCODING_UTF8.GetString(convertBuffer) == uuidString) { for (; ;) { switch (stm.ReadByte()) { case -1: throw new EndOfStreamException(); case 'Z': //context.Query(new NpgsqlCommand("UNLISTEN *", context)); using (NpgsqlCommand cmd = new NpgsqlCommand("UNLISTEN *", context)) { context.Query(cmd); } return; } } } else { buffer.Dequeue(); } } } }
/// <summary> /// Special adaptation of ExecuteBlind() that sets statement_timeout. /// This exists to prevent Connector.SetBackendCommandTimeout() from calling Command.ExecuteBlind(), /// which will cause an endless recursive loop. /// </summary> /// <param name="connector"></param> /// <param name="timeout">Timeout in seconds.</param> internal static void ExecuteSetStatementTimeoutBlind(NpgsqlConnector connector, int timeout) { NpgsqlQuery query; // Optimize for a few common timeout values. switch (timeout) { case 10: query = NpgsqlQuery.SetStmtTimeout10Sec; break; case 20: query = NpgsqlQuery.SetStmtTimeout20Sec; break; case 30: query = NpgsqlQuery.SetStmtTimeout30Sec; break; case 60: query = NpgsqlQuery.SetStmtTimeout60Sec; break; case 90: query = NpgsqlQuery.SetStmtTimeout90Sec; break; case 120: query = NpgsqlQuery.SetStmtTimeout120Sec; break; default: query = new NpgsqlQuery(string.Format("SET statement_timeout = {0}", timeout * 1000)); break; } // Write the Query message to the wire. connector.Query(query); // Flush, and wait for and discard all responses. connector.ProcessAndDiscardBackendResponses(); }
public void TestNotify(NpgsqlConnector context) { //ZA Hnotifytest CNOTIFY Z //Qlisten notifytest;notify notifytest; Stream stm = context.Stream; string uuidString = "uuid" + Guid.NewGuid().ToString("N"); PGUtil.WriteString("Qlisten " + uuidString + ";notify " + uuidString + ";", stm); Queue<byte> buffer = new Queue<byte>(); byte[] convertBuffer = new byte[36]; for (;;) { int newByte = stm.ReadByte(); if (newByte == -1) { throw new EndOfStreamException(); } buffer.Enqueue((byte) newByte); if (buffer.Count > 35) { buffer.CopyTo(convertBuffer, 0); if (ENCODING_UTF8.GetString(convertBuffer) == uuidString) { for (;;) { switch (stm.ReadByte()) { case -1: throw new EndOfStreamException(); case 'Z': //context.Query(new NpgsqlCommand("UNLISTEN *", context)); using(NpgsqlCommand cmd = new NpgsqlCommand("UNLISTEN *", context)) { context.Query(cmd); } return; } } } else { buffer.Dequeue(); } } } }
/// <summary> /// Special adaptation of ExecuteBlind() that sets statement_timeout. /// This exists to prevent Connector.SetBackendCommandTimeout() from calling Command.ExecuteBlind(), /// which will cause an endless recursive loop. /// </summary> /// <param name="connector"></param> /// <param name="timeout">Timeout in seconds.</param> internal static void ExecuteSetStatementTimeoutBlind(NpgsqlConnector connector, int timeout) { NpgsqlQuery query; // Optimize for a few common timeout values. switch (timeout) { case 10 : query = NpgsqlQuery.SetStmtTimeout10Sec; break; case 20 : query = NpgsqlQuery.SetStmtTimeout20Sec; break; case 30 : query = NpgsqlQuery.SetStmtTimeout30Sec; break; case 60 : query = NpgsqlQuery.SetStmtTimeout60Sec; break; case 90 : query = NpgsqlQuery.SetStmtTimeout90Sec; break; case 120 : query = NpgsqlQuery.SetStmtTimeout120Sec; break; default : query = new NpgsqlQuery(string.Format("SET statement_timeout = {0}", timeout * 1000)); break; } // Write the Query message to the wire. connector.Query(query); // Flush, and wait for and discard all responses. connector.ProcessAndDiscardBackendResponses(); }