From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.5-pre1 Path: eternal-september.org!reader02.eternal-september.org!aioe.org!5WHqCw2XxjHb2npjM9GYbw.user.gioia.aioe.org.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: converting pointer to value Date: Thu, 4 Mar 2021 22:27:04 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <02709d96-50fe-4e87-bdb5-4f430fa2717an@googlegroups.com> NNTP-Posting-Host: 5WHqCw2XxjHb2npjM9GYbw.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 X-Notice: Filtered by postfilter v. 0.9.2 Content-Language: en-US Xref: reader02.eternal-september.org comp.lang.ada:61471 List-Id: On 2021-03-04 20:38, Shark8 wrote: > On Thursday, March 4, 2021 at 10:35:01 AM UTC-7, Dmitry A. Kazakov wrote: >> On 2021-03-04 17:55, Shark8 wrote: >> >>>> type SQLPOINTER is private; >>> .... >>>> private >>>> type SQLPOINTER is new System.Storage_Elements.Integer_Address; >>> >>> And here we have SQLPOINTER, which is private, but which is something of the same representation that Integer_Address has; let's assume that the ADDRESS type is implementation-defined, and a private type. >> SQLPOINTER is System.Address. > > Which is implementation-defined. No, it defined this way typedef void * SQLPOINTER; so for all purposes it is System.Address. > None of that addresses the issue that he asked: "how to get the Pvalue as an SQLRETURN?" OK, then the answer is you don't. As the rule QDBC does not overlay different types. There are special pointer values though, like 1 etc. Integer_Address can be used to encode them. They are constants. P.S. I think the OP refers to SQLParamData/SQLPutData mechanism. There is no overloading either. It works this way: prepare bind to special "address" value, 1, I believe execute if SQLParamData = need_data then loop SQLPutData (next chunk) end loop; end if; I do not think it is worth using, unless the data are so big that they are not in the memory, or read from a stream chunk by chunk etc. Clearly it is a very expensive method. A normal bind would be a better choice for most applications. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de