Query() private method

private Query ( NpgsqlQuery query ) : void
query NpgsqlQuery
return void
        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();
            }
        }
        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();
        }
示例#4
0
        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();
            }
        }
        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();
            }
        }
示例#7
0
        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();
        }
示例#9
0
 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();
        }
        /// <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();
        }