You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rivet-dev@tcl.apache.org by Karl Lehenbauer <ka...@gmail.com> on 2009/05/01 18:07:36 UTC

Re: apache_table command for Rivet access to notes table

So you would prefer for it to work like an array?  Have an  
"apache_table exists tableName key" and make "apache_table get  
tableName key" force an error ?

On Apr 29, 2009, at 4:13 AM, Massimo Manghi wrote:

> The syntax you have depicted here seems to be a very natural  
> approach to
> the problem: easy to read and easy to use. This command has to  
> signal a few
> potential error conditions though: table-key-value not existing, but  
> also more specifically
> improper table names or not existing key in a valid table.
>
> I welcomed the new  'try/catch/finally' construct recently  
> introduced for
> Tcl8.6. I wonder if it's possible to adopt a style for raising  
> errors that might
> encourage the programmer to exploit it.  Personally I don't like the  
> idea of checking
> for an empty string in order to understand if a key-value pair  
> exists (but i'm sure long
> time Tcl programmers will shrug at my attitude)
>
> -- Massimo
>
>
> Karl Lehenbauer wrote:
>> Hi Guys,
>>
>> I last brought this up a little over a year ago and other  
>> priorities intervened but I have now implemented an "apache_table"  
>> command and I want to get y'alls' feedback on it.
>>
>> apache_table as currently implemented provides read/write access to  
>> four tables in Apache:  notes, headers_in, headers_out,  
>> err_headers_out and subprocess_env.
>>
>> Here's the syntax of the command:
>>
>> apache_table get tableName key
>>
>>    returns the value of the specified key or an empty string
>>
>> apache_table set tableName keyValueList
>> apache_table set tableName key value
>>
>>    In the first case, takes zero or more key-value pairs in  
>> keyValueList and sets each key in the table with its corresponding  
>> value.
>>
>>    In the second case, takes one key and one value and sets that  
>> key and value into the specified table.
>>
>> apache_table unset tableName key
>>
>>    Unsets the specified key-value pair from the table.  It is not  
>> an error to unset a key that doesn't exist.
>>
>> apache_table names tableName
>>
>>    Returns a list of all the keys in the specified table.
>>
>> apache_table array_get tableName
>>
>>    Returns the key-value pairs of the specified table as a list,  
>> suitable for array set.  For instance:
>>
>>    array set notes [apache_table array_get notes]
>>
>> apache_table clear tableName
>>
>>    Invokes apr_table_clear to clear the contents of the specfied  
>> table.
>>
>> I think the above syntax is pretty reasonable.  The part that's  
>> questionable is providing access to headers_in, headers_out,  
>> err_headers_out and subprocess_env.  I know we already have a  
>> mechanism for access to subprocess_env and would be more than  
>> willing to remove any or all of these, or potentially add access to  
>> other tables, although I'm not aware of other tables that would be  
>> candidates.
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
>> For additional commands, e-mail: rivet-dev-help@tcl.apache.org
>>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
For additional commands, e-mail: rivet-dev-help@tcl.apache.org


Re: apache_table command for Rivet access to notes table

Posted by Massimo Manghi <ma...@unipr.it>.
Karl Lehenbauer wrote:
> How about if "get" still returns an empty string when the key doesn't 
> exist but I implement "exists" for people who want to clearly 
> distinguish between missing and empty?
>
it might work out a compromise.

> I also considered adding an optional argument to "get" of a variable 
> name to load with the value and having it return 1 or 0 on whether or 
> not the key exists...
>
>   if {[apache_table get notes key valueVar]} {
>   }
>
> ...but it seems like overkill.
>

what if 'apache_table get notes key' returns an error if 'key' is not 
existing or  returns $valueVar if  the last argument is present?

if {[catch {apache_table get notes key} errcode]} { ... }

if {[apache_table get notes key ""] == ""} { ... }

this would enable us to use also defaults that are numbers...
> -karl
>
> PS - As an aside, Tcl arrays should have a settable default, "array 
> default arrayName 0" would be cool, although newer incr will 
> instantiate a nonexistent variable at 0.  Also there should be 
> something like "array foreach arrayName var code".
>

yes definitely. Will you bring up a proposal for this on Tclcore?


 -- Massimo

---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
For additional commands, e-mail: rivet-dev-help@tcl.apache.org


Re: apache_table command for Rivet access to notes table

Posted by Karl Lehenbauer <ka...@gmail.com>.
On May 2, 2009, at 10:16 AM, Massimo Manghi wrote:

> On Fri, 1 May 2009 11:07:36 -0500, Karl Lehenbauer wrote
>> So you would prefer for it to work like an array?  Have an
>> "apache_table exists tableName key" and make "apache_table get
>> tableName key" force an error ?
>>
>
> in a word: yes.

How about if "get" still returns an empty string when the key doesn't  
exist but I implement "exists" for people who want to clearly  
distinguish between missing and empty?

I also considered adding an optional argument to "get" of a variable  
name to load with the value and having it return 1 or 0 on whether or  
not the key exists...

   if {[apache_table get notes key valueVar]} {
   }

...but it seems like overkill.

-karl

PS - As an aside, Tcl arrays should have a settable default, "array  
default arrayName 0" would be cool, although newer incr will  
instantiate a nonexistent variable at 0.  Also there should be  
something like "array foreach arrayName var code".



---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
For additional commands, e-mail: rivet-dev-help@tcl.apache.org


Re: apache_table command for Rivet access to notes table

Posted by Massimo Manghi <ma...@unipr.it>.
On Fri, 1 May 2009 11:07:36 -0500, Karl Lehenbauer wrote
> So you would prefer for it to work like an array?  Have an  
> "apache_table exists tableName key" and make "apache_table get  
> tableName key" force an error ?
> 

in a word: yes. 

-- Massimo



---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscribe@tcl.apache.org
For additional commands, e-mail: rivet-dev-help@tcl.apache.org