--- parser3/src/classes/hash.C 2004/06/22 14:12:57 1.71 +++ parser3/src/classes/hash.C 2005/08/26 12:00:04 1.73.6.2 @@ -1,11 +1,11 @@ /** @file Parser: @b hash parser class. - Copyright (c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_HASH_C="$Date: 2004/06/22 14:12:57 $"; +static const char * const IDENT_HASH_C="$Date: 2005/08/26 12:00:04 $"; #include "classes.h" #include "pa_vmethod_frame.h" @@ -123,10 +123,14 @@ static void _create_or_add(Request& r, M if(params.count()) { Value& vsrc=params.as_no_junction(0, "param must be hash"); if(HashStringValue* src=vsrc.get_hash()) { - HashStringValue* self=&(GET_SELF(r, VHash).hash()); - if(src==self) // same: doing nothing + VHash& self=GET_SELF(r, VHash); + HashStringValue* self_hash=&(self.hash()); + if(src==self_hash) // same: doing nothing return; - src->for_each(copy_all_overwrite_to, self); + src->for_each(copy_all_overwrite_to, self_hash); + + if(VHash* vhash_src=static_cast(vsrc.as(VHASH_TYPE, false))) + self.set_default(vhash_src->get_default()); } } } @@ -229,7 +233,7 @@ static void _sql(Request& r, MethodParam bool distinct=false; if(params.count()>1) { Value& voptions=params.as_no_junction(1, "options must be hash, not code"); - if(!voptions.is_string()) + if(voptions.is_defined() && !voptions.is_string()) if(HashStringValue* options=voptions.get_hash()) { int valid_options=0; if(Value* vbind=options->get(sql_bind_name)) { @@ -275,7 +279,7 @@ static void _sql(Request& r, MethodParam hash); r.connection()->query( statement_cstr, - 0, 0, + placeholders_count, placeholders, offset, limit, handlers, statement_string);