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