예제 #1
0
        public override void Execute(NpgsqlConnector context, NpgsqlExecute execute)
        {
            NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "Execute");
            NpgsqlDescribe describe = new NpgsqlDescribe('P', execute.PortalName);
            Stream         stream   = context.Stream;

            describe.WriteToStream(stream);
            execute.WriteToStream(stream);
            //stream.Flush();
            Sync(context);
        }
예제 #2
0
        public override IEnumerable <IServerResponseObject> ExecuteEnum(NpgsqlConnector context, NpgsqlExecute execute)
        {
            NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "Execute");
            NpgsqlDescribe describe = new NpgsqlDescribe('P', execute.PortalName);
            Stream         stream   = context.Stream;

            describe.WriteToStream(stream);
            execute.WriteToStream(stream);
            //stream.Flush();
            return(SyncEnum(context));
        }
예제 #3
0
 internal IEnumerable <IServerResponseObject> ExecuteEnum(NpgsqlExecute execute)
 {
     return(CurrentState.ExecuteEnum(this, execute));
 }
예제 #4
0
 public virtual void Execute(NpgsqlConnector context, NpgsqlExecute execute)
 {
     throw new InvalidOperationException("Internal Error! " + this);
 }
 internal void Execute (NpgsqlExecute execute)
 {
     CurrentState.Execute(this, execute);
 }
예제 #6
0
        private void PrepareInternal()
        {
            if (m_Connector.BackendProtocolVersion == ProtocolVersion.Version2)
            {
                using (NpgsqlCommand command = new NpgsqlCommand(GetPrepareCommandText(), m_Connector))
                {
                    command.ExecuteBlind();
                    prepared = PrepareStatus.V2Prepared;
                }
            }
            else
            {
                // Use the extended query parsing...
                planName = m_Connector.NextPlanName();
                String portalName = "";
                NpgsqlParse parse = new NpgsqlParse(planName, GetParseCommandText(), new Int32[] { });
                NpgsqlDescribe statementDescribe = new NpgsqlDescribeStatement(planName);
                IEnumerable<IServerResponseObject> responseEnum;
                NpgsqlRowDescription returnRowDesc = null;

                // Write Parse, Describe, and Sync messages to the wire.
                m_Connector.Parse(parse);
                m_Connector.Describe(statementDescribe);
                m_Connector.Sync();

                // Flush and wait for response.
                responseEnum = m_Connector.ProcessBackendResponsesEnum();

                // Look for a NpgsqlRowDescription in the responses, discarding everything else.
                foreach (IServerResponseObject response in responseEnum)
                {
                    if (response is NpgsqlRowDescription)
                    {
                        returnRowDesc = (NpgsqlRowDescription)response;
                    }
                    else if (response is IDisposable)
                    {
                        (response as IDisposable).Dispose();
                    }
                }

                Int16[] resultFormatCodes;

                if (returnRowDesc != null)
                {
                    resultFormatCodes = new Int16[returnRowDesc.NumFields];

                    for (int i = 0; i < returnRowDesc.NumFields; i++)
                    {
                        NpgsqlRowDescription.FieldData returnRowDescData = returnRowDesc[i];

                        if (returnRowDescData.TypeInfo != null)
                        {
                            // Binary format?
                            resultFormatCodes[i] = returnRowDescData.TypeInfo.SupportsBinaryBackendData ? (Int16)FormatCode.Binary : (Int16)FormatCode.Text;
                        }
                        else
                        {
                            // Text Format
                            resultFormatCodes[i] = (Int16)FormatCode.Text;
                        }
                    }
                }
                else
                {
                    resultFormatCodes = new Int16[] { 0 };
                }

                // The Bind and Execute message objects live through multiple Executes.
                // Only Bind changes at all between Executes, which is done in BindParameters().
                bind = new NpgsqlBind(portalName, planName, new Int16[Parameters.Count], null, resultFormatCodes);
                execute = new NpgsqlExecute(portalName, 0);
                prepared = PrepareStatus.V3Prepared;
            }
        }
예제 #7
0
        public override void Execute(NpgsqlConnector context, NpgsqlExecute execute)
        {
            NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "Execute");

            execute.WriteToStream(context.Stream);
        }
예제 #8
0
 public virtual IEnumerable<IServerResponseObject> ExecuteEnum(NpgsqlConnector context, NpgsqlExecute execute)
 {
     throw new InvalidOperationException("Internal Error! " + this);
 }
예제 #9
0
 public virtual void Execute(NpgsqlConnector context, NpgsqlExecute execute)
 {
     throw new InvalidOperationException("¬нутренн¤¤ ќшибка! " + this);
 }
예제 #10
0
        private void PrepareInternal()
        {
            // Use the extended query parsing...
            planName = m_Connector.NextPlanName();
            String portalName = "";

            preparedCommandText = GetCommandText(true, true);
            NpgsqlParse parse = new NpgsqlParse(planName, preparedCommandText, new Int32[] { });
            NpgsqlDescribe statementDescribe = new NpgsqlDescribeStatement(planName);
            IEnumerable<IServerResponseObject> responseEnum;
            NpgsqlRowDescription returnRowDesc = null;

            // Write Parse, Describe, and Sync messages to the wire.
            m_Connector.Parse(parse);
            m_Connector.Describe(statementDescribe);
            m_Connector.Sync();

            // Tell to mediator what command is being sent.
            m_Connector.Mediator.SetSqlSent(preparedCommandText, NpgsqlMediator.SQLSentType.Parse);

            // Flush and wait for response.
            responseEnum = m_Connector.ProcessBackendResponsesEnum();

            // Look for a NpgsqlRowDescription in the responses, discarding everything else.
            foreach (IServerResponseObject response in responseEnum)
            {
                if (response is NpgsqlRowDescription)
                {
                    returnRowDesc = (NpgsqlRowDescription)response;
                }
                else if (response is IDisposable)
                {
                    (response as IDisposable).Dispose();
                }
            }

            Int16[] resultFormatCodes;

            if (returnRowDesc != null)
            {
                resultFormatCodes = new Int16[returnRowDesc.NumFields];

                for (int i = 0; i < returnRowDesc.NumFields; i++)
                {
                    NpgsqlRowDescription.FieldData returnRowDescData = returnRowDesc[i];

                    if (returnRowDescData.TypeInfo != null)
                    {
                        // Binary format?
                        // PG always defaults to text encoding.  We can fix up the row description
                        // here based on support for binary encoding.  Once this is done,
                        // there is no need to request another row description after Bind.
                        returnRowDescData.FormatCode = returnRowDescData.TypeInfo.SupportsBinaryBackendData ? FormatCode.Binary : FormatCode.Text;
                        resultFormatCodes[i] = (Int16)returnRowDescData.FormatCode;
                    }
                    else
                    {
                        // Text format (default).
                        resultFormatCodes[i] = (Int16)FormatCode.Text;
                    }
                }
            }
            else
            {
                resultFormatCodes = new Int16[] { 0 };
            }

            // Save the row description for use with all future Executes.
            currentRowDescription = returnRowDesc;

            // The Bind and Execute message objects live through multiple Executes.
            // Only Bind changes at all between Executes, which is done in BindParameters().
            bind = new NpgsqlBind(portalName, planName, new Int16[Parameters.Count], null, resultFormatCodes);
            execute = new NpgsqlExecute(portalName, 0);

            prepared = PrepareStatus.Prepared;
        }
예제 #11
0
 public virtual IEnumerable <IServerResponseObject> ExecuteEnum(NpgsqlConnector context, NpgsqlExecute execute)
 {
     throw new InvalidOperationException("Internal Error! " + this);
 }
예제 #12
0
 internal void Execute(NpgsqlExecute execute)
 {
     _log.Debug("Sending execute message");
     execute.WriteToStream(Stream);
 }
예제 #13
0
        void UnPrepare()
        {
            if (_prepared == PrepareStatus.Prepared)
            {
                _connector.ExecuteBlind("DEALLOCATE " + _planName);
                _bind = null;
                _execute = null;
                _currentRowDescription = null;
                _prepared = PrepareStatus.NeedsPrepare;
            }

            _preparedCommandText = null;
        }
        private void PrepareInternal()
        {
            if (m_Connector.BackendProtocolVersion == ProtocolVersion.Version2)
            {
                planName            = Connector.NextPlanName();
                preparedCommandText = GetCommandText(true, false);

                ExecuteBlind(m_Connector, preparedCommandText);
                prepared = PrepareStatus.V2Prepared;

                // Tell to mediator what command is being sent.
                m_Connector.Mediator.SetSqlSent(preparedCommandText, NpgsqlMediator.SQLSentType.Prepare);
            }
            else
            {
                // Use the extended query parsing...
                planName = m_Connector.NextPlanName();
                String portalName = "";

                preparedCommandText = GetCommandText(true, true);
                NpgsqlParse    parse             = new NpgsqlParse(planName, preparedCommandText, new Int32[] { });
                NpgsqlDescribe statementDescribe = new NpgsqlDescribeStatement(planName);
                IEnumerable <IServerResponseObject> responseEnum;
                NpgsqlRowDescription returnRowDesc = null;

                // Write Parse, Describe, and Sync messages to the wire.
                m_Connector.Parse(parse);
                m_Connector.Describe(statementDescribe);
                m_Connector.Sync();

                // Tell to mediator what command is being sent.
                m_Connector.Mediator.SetSqlSent(preparedCommandText, NpgsqlMediator.SQLSentType.Parse);

                // Flush and wait for response.
                responseEnum = m_Connector.ProcessBackendResponsesEnum();

                // Look for a NpgsqlRowDescription in the responses, discarding everything else.
                foreach (IServerResponseObject response in responseEnum)
                {
                    if (response is NpgsqlRowDescription)
                    {
                        returnRowDesc = (NpgsqlRowDescription)response;
                    }
                    else if (response is IDisposable)
                    {
                        (response as IDisposable).Dispose();
                    }
                }

                Int16[] resultFormatCodes;

                if (returnRowDesc != null)
                {
                    resultFormatCodes = new Int16[returnRowDesc.NumFields];

                    for (int i = 0; i < returnRowDesc.NumFields; i++)
                    {
                        NpgsqlRowDescription.FieldData returnRowDescData = returnRowDesc[i];

                        if (returnRowDescData.TypeInfo != null)
                        {
                            // Binary format?
                            // PG always defaults to text encoding.  We can fix up the row description
                            // here based on support for binary encoding.  Once this is done,
                            // there is no need to request another row description after Bind.
                            returnRowDescData.FormatCode = returnRowDescData.TypeInfo.SupportsBinaryBackendData ? FormatCode.Binary : FormatCode.Text;
                            resultFormatCodes[i]         = (Int16)returnRowDescData.FormatCode;
                        }
                        else
                        {
                            // Text format (default).
                            resultFormatCodes[i] = (Int16)FormatCode.Text;
                        }
                    }
                }
                else
                {
                    resultFormatCodes = new Int16[] { 0 };
                }

                // Save the row description for use with all future Executes.
                currentRowDescription = returnRowDesc;

                // The Bind and Execute message objects live through multiple Executes.
                // Only Bind changes at all between Executes, which is done in BindParameters().
                bind    = new NpgsqlBind(portalName, planName, new Int16[Parameters.Count], null, resultFormatCodes);
                execute = new NpgsqlExecute(portalName, 0);

                prepared = PrepareStatus.V3Prepared;
            }
        }
		public override void Execute(NpgsqlConnector context, NpgsqlExecute execute)
		{
			NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "Execute");
			NpgsqlDescribe describe = new NpgsqlDescribe('P', execute.PortalName);
			Stream stream = context.Stream;
			describe.WriteToStream(stream);
			execute.WriteToStream(stream);
			//stream.Flush();
			Sync(context);
		}
예제 #16
0
 public virtual void Execute(NpgsqlConnector context, NpgsqlExecute execute)
 {
     throw new InvalidOperationException("Internal Error! " + this);
 }
		public override IEnumerable<IServerResponseObject> ExecuteEnum(NpgsqlConnector context, NpgsqlExecute execute)
		{
			NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "Execute");
			NpgsqlDescribe describe = new NpgsqlDescribe('P', execute.PortalName);
			Stream stream = context.Stream;
			describe.WriteToStream(stream);
			execute.WriteToStream(stream);
			//stream.Flush();
			return SyncEnum(context);
		}
예제 #18
0
 internal IEnumerable<IServerResponseObject> ExecuteEnum(NpgsqlExecute execute)
 {
     return CurrentState.ExecuteEnum(this, execute);
 }
예제 #19
0
 internal void Execute(NpgsqlExecute execute)
 {
     CurrentState.Execute(this, execute);
 }
예제 #20
0
        public override void Execute(NpgsqlConnector context, NpgsqlExecute execute)
        {
            NpgsqlEventLog.LogMethodEnter(LogLevel.Debug, CLASSNAME, "Execute");

            execute.WriteToStream(context.Stream);
        }
예제 #21
0
 private void UnPrepare()
 {
     if (prepared == PrepareStatus.V3Prepared)
     {
         bind = null;
         execute = null;
         portalDescribeSent = false;
         currentRowDescription = null;
         prepared = PrepareStatus.NeedsPrepare;
     }
     else if (prepared == PrepareStatus.V2Prepared)
     {
         planName = String.Empty;
         prepared = PrepareStatus.NeedsPrepare;
     }
 }