Hello,

On 11/18/10 3:44 PM, Robert McGilvray wrote:

Hello,

 

I’m interested in using the htable and/or mtree modules to keep my aliases and did lookups in memory to minimize the amount of SQL lookups that are being performed. It’s easy enough to use htable to cache a single value after it is retrieved but what I’m not clear on is how I can do it when SQL returns multiple destinations. Consider the following query and returned results:

 

SELECT username,domain,CAST(q_value AS CHAR) FROM aliases where alias_username = '10001' AND alias_domain = 'us.sip.globeop.com' AND active = '1' ORDER by q_value;

 

+----------+--------------------+-----------------------+

| username | domain             | CAST(q_value AS CHAR) |

+----------+--------------------+-----------------------+

| 8500     | us.sip.globeop.com | 1.000                 |

| 3874     | us.sip.globeop.com | 1.000                 |

| 7050     | us.sip.globeop.com | 1.000                 |

| 2100     | us.sip.globeop.com | 1.000                 |

 

 

 

 

 

In my existing script I just append the results as branches and all works well but I end up with a lot of unnecessary SQL traffic. I see the htable supports array but I’m not sure how to go about assigning multiple values to a single key to use later. How can I take the above results and store them in memory for use by other transactions?

htable gives you a generic container where you can store items (key, value). The key can be any composite, including variables.

Upon a sql query you get the size of result (number of rows) in $dbt(r=>nrows), and values in $dbr(r=>[i,j])

You can compose your key from the index in result and alias uri: $sht(x=>$var(index)::$var(alias))

The value can be formed from the columns of each row, building a sip uri for example. Of course you can store each column as well, making a proper key, e.g., using column name together with row index and alias

So you can practically store all the rows of the sql result in share table. You can store the number of rows as well under a specific key per alias.

Cheers,
Daniel

-- 
Daniel-Constantin Mierla
Kamailio (OpenSER) Advanced Trainings
Nov 22-25, 2010, Berlin, Germany
Jan 24-26, 2011, Irvine, CA, USA
http://www.asipto.com