Leon,<br><br>Two things: first, would you mind putting this info into the wiki? Just create this page:<br><a href="http://wiki.freeswitch.org/index.php?title=Mod_odbc&amp;action=edit&amp;redlink=1">http://wiki.freeswitch.org/index.php?title=Mod_odbc&amp;action=edit&amp;redlink=1</a><br>
<br>Second, I was curious what kind of throughput you&#39;ve seen with this? Just curious how much you think it might scale. I&#39;m sure someone will find a way to mix this with SIPp in an effort to break it. :P<br><br>-MC<br>
<br><div class="gmail_quote">On Mon, Sep 14, 2009 at 7:23 PM, Leon de Rooij <span dir="ltr">&lt;<a href="mailto:leon@scarlet-internet.nl">leon@scarlet-internet.nl</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br>
<br>
I wrote a new module mod_odbc_query the last few days and I&#39;m wondering<br>
what other people think of it. It works here, tested it and valgrind<br>
sees no leaks..<br>
<br>
You can check it out here:<br>
<a href="http://fisheye.freeswitch.org/browse/FreeSWITCH/contrib/ledr/c/mod_odbc_query" target="_blank">http://fisheye.freeswitch.org/browse/FreeSWITCH/contrib/ledr/c/mod_odbc_query</a><br>
<br>
It&#39;s pretty flexible and useful for me.<br>
<br>
regards,<br>
<br>
Leon<br>
<br>
---<br>
<br>
mod_odbc_query readme<br>
<br>
This module can be used for doing odbc queries from the dialplan.<br>
<br>
Usage:<br>
<br>
&lt;application name=&quot;odbc_query&quot; data=&quot;SELECT some_column_name AS<br>
    target_channel_variable_name FROM some_table_name WHERE 1;&quot;/&gt;<br>
<br>
or:<br>
<br>
&lt;application name=&quot;odbc_query&quot; data=&quot;my-query&quot;/&gt;<br>
<br>
The module simply checks whether the data attr contains a space. If it<br>
does, then that field will be seen as an SQL query, otherwise it will be<br>
seen as a query &#39;name&#39; which then has to be defined in the modules<br>
configuration in the &lt;queries&gt; section like this:<br>
<br>
&lt;queries&gt;<br>
  &lt;query name=&quot;my-query&quot; value=&quot;SELECT some_column_name AS<br>
     target_channel_variable_name FROM some_table_name WHERE 1;&quot;/&gt;<br>
&lt;/queries&gt;<br>
<br>
The module will do the query and store each returned column name as<br>
channel variable name together with its corresponding value.<br>
<br>
Another feature is, that if only two columns are returned, which have<br>
the column names &quot;name&quot; and &quot;value&quot;, then the channel variables will be<br>
set according to them. This way you can have the query return multiple<br>
rows with different channel variables. If the query returns something<br>
else than column-names &quot;name&quot; and &quot;value&quot; and it returns multiple rows,<br>
then the channel variables will be overwritten with each iteration of<br>
the rows - which is probably useless.<br>
<br>
The query may contain ${blah} variables that will be expanded from<br>
channel variables before the query is performed.<br>
<br>
<br>
For example:<br>
<br>
query: &quot;SELECT foo, bar FROM huk WHERE tilde=&#39;kek&#39;;&quot;<br>
<br>
returns:<br>
<br>
foo    bar<br>
----------<br>
a      b<br>
c      d<br>
<br>
then the channel variables that will be set are:<br>
<br>
foo=c<br>
bar=d<br>
<br>
---<br>
<br>
<br>
query: &quot;SELECT foo AS name, bar AS value FROM huk WHERE tilde=&#39;kek&#39;;&quot;<br>
<br>
returns:<br>
<br>
name   value<br>
------------<br>
a      b<br>
c      d<br>
<br>
then the channel variables that will be set are:<br>
<br>
a=b<br>
c=d<br>
<br>
---<br>
<br>
<br>
So, the first example should only be used when you know that only zero<br>
or one row will be returned, and second one if you know zero or more<br>
rows will be returned.<br>
<br>
If zero rows are returned (in either foo/bar or name/value case) then<br>
no channel variables will be set, overwritten or deleted.<br>
<br>
---<br>
<br>
&lt;configuration name=&quot;odbc_query.conf&quot; description=&quot;ODBC Query Module&quot;&gt;<br>
<br>
  &lt;settings&gt;<br>
    &lt;param name=&quot;odbc-dsn&quot; value=&quot;freeswitch:freeswitch:secret&quot;/&gt;<br>
  &lt;/settings&gt;<br>
<br>
  &lt;queries&gt;<br>
    &lt;!-- the ${foo} variable will be expanded from channel variables at query time --&gt;<br>
    &lt;query name=&quot;map-did-users&quot; value=&quot;<br>
      SELECT<br>
        dir_users.username AS dest_user,<br>
        <a href="http://dir_domains.name" target="_blank">dir_domains.name</a> AS dest_domain<br>
      FROM<br>
        map_did_users, dir_domains, dir_users<br>
      WHERE<br>
        map_did_users.did=&#39;${destination_number}&#39; AND<br>
        <a href="http://dir_users.id" target="_blank">dir_users.id</a> = map_did_users.user_id AND<br>
        <a href="http://dir_domains.id" target="_blank">dir_domains.id</a> = dir_users.dir_domain_id;&quot;/&gt;<br>
  &lt;/queries&gt;<br>
&lt;/configuration&gt;<br>
<br>
<br>
_______________________________________________<br>
FreeSWITCH-dev mailing list<br>
<a href="mailto:FreeSWITCH-dev@lists.freeswitch.org">FreeSWITCH-dev@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev</a><br>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-dev</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
</blockquote></div><br>