Dave Ingram wrote:
> Bojan Smojver wrote:
>>> Actually, it turns out that apr_dbd_prepare() is destroying its
>>> arguments no matter whether it succeeds or not. What's going on? Does
>>> anyone have any handy examples of how to use the DBD code?
>>
>> My best bet is that you have pool hierarchy/lifetime problems.
>>
> That's entirely possible - I'm not 100% sure on how I should be using
> them. What would be the best place to find out?
Update: After finding some minimal documentation on the difference
between "cmd->pool" and "cmd->temp_pool", I now allocate prepared_pool
as a sub-pool of cmd->pool and apr_dbd_select() works without any
segfaults, but I'm still having the same problem with apr_dbd_prepare().
I still don't understand how it's changing the contents of my pointer
variables. Am I right to be calling it with NULL for the label argument,
as I'm only using the prepared statement once, in that function? My
reason for using a prepared statement is so that people can use:
<SQLRepeat "SELECT hostname, domain FROM hosts WHERE status = 1">
<VirtualHost *:80>
ServerName ${hostname}.${domain}
<SQLRepeat "SELECT * FROM host_aliases WHERE hostname=? AND domain=?"
"${hostname}" "${domain}">
ServerAlias ${alias}
</SQLRepeat>
# ...
</SQLRepeat>
without worrying about what the hostname/domain strings actually contain.
Dave