You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@couchdb.apache.org by Conor Mac Aoidh <co...@gmail.com> on 2014/09/02 14:52:10 UTC

Re: validate_doc_update design function

Hi Jonas,

Thanks for the response. I hadn't actually tested the asynchronous part 
- just that data can be retained between calls of the update function 
using 'this'.

The solution of adding the schema to the design document sounds like it 
should suffice. Though, I will still have to manage updating the schema 
and replicating the updates over a large number of databases. But, this 
is doable.

Thanks

Conor

On 29/08/14 14:58, Jonas Weber wrote:
> Hi Conor,
>
> unless I'm terribly mistaken there is no way to either act 
> asynchronously in validate_doc_update functions or to reliably cache 
> some data for other runs. It sounds like you are using a glitch for 
> your cache, but you should never rely on that.
>
> If you don't want to update the function itself there is an easy way 
> to include the schema directly into the design document as part of 
> design document JSON, and this can be require()d during 
> validate_doc_update.
>
> So yes, there are two compelling reasons: This caching behavior is not 
> intended at all!  And even worse: Validate_doc_update responds sooner 
> (synchronously) than the schema is fetched, so validation always 
> succeeds for the first run!
>
> All the best,
> Jonas
>
> On August 29, 2014, Conor Mac Aoidh <co...@gmail.com> wrote:
>
>> Hi All,
>>
>> I'm writing a validate_doc_update function at the moment. I want to 
>> validate that document inserts comply with a strict schema. I have 
>> been thinking of how to do this, without making the validate function 
>> too inefficient.
>>
>> Since there is no way to pass parameters to the validate_doc_update 
>> function, I was thinking of fetching the schema (contained in a local 
>> JSON file) asynchronously. This could be a terrible idea. However, 
>> I've found that I can request the schema once and then store it. So, 
>> there would be one initial performance hit in fetching the file, and 
>> from then on it would be saved. See the example function:
>> /
>> //function validate(new_doc, old_doc, userCtx){//
>> // if(typeof this.schema == 'undefined')//{//
>> // // get the schema//
>> // }//
>> // // make sure new_doc conforms to the this.schema[new_doc.type]//
>> //}/
>>
>> I'm just wondering, is there a better way to do this? Are there any 
>> compelling reasons not to do this?
>>
>> Also, I have considered just including the schema statically in the 
>> function but the solution above is preferable as the schema changes 
>> often and I don't want to have to update the design functions.
>>
>> Thanks
>>
>> Conor