--- parser3/src/classes/string.C 2012/03/16 09:24:08 1.203 +++ parser3/src/classes/string.C 2012/06/08 11:44:02 1.205 @@ -20,7 +20,7 @@ #include "pa_vregex.h" #include "pa_charsets.h" -volatile const char * IDENT_STRING_C="$Id: string.C,v 1.203 2012/03/16 09:24:08 moko Exp $"; +volatile const char * IDENT_STRING_C="$Id: string.C,v 1.205 2012/06/08 11:44:02 misha Exp $"; // class @@ -526,8 +526,7 @@ extern String sql_distinct_name; extern int marshal_binds(HashStringValue& hash, SQL_Driver::Placeholder*& placeholders); extern void unmarshal_bind_updates(HashStringValue& hash, int placeholder_count, SQL_Driver::Placeholder* placeholders); -const String* sql_result_string(Request& r, MethodParams& params, - HashStringValue*& options, Value*& default_code) { +const String* sql_result_string(Request& r, MethodParams& params, Value*& default_code) { Value& statement=params.as_junction(0, "statement must be code"); HashStringValue* bind=0; @@ -535,7 +534,7 @@ const String* sql_result_string(Request& ulong offset=0; default_code=0; if(params.count()>1) - if((options=params.as_hash(1))) { + if(HashStringValue* options=params.as_hash(1, "sql options")) { int valid_options=0; if(Value* vbind=options->get(sql_bind_name)) { valid_options++; @@ -555,8 +554,6 @@ const String* sql_result_string(Request& if(valid_options!=options->count()) throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION); } - else - options=0; SQL_Driver::Placeholder* placeholders=0; uint placeholders_count=0; @@ -587,9 +584,8 @@ const String* sql_result_string(Request& static void _sql(Request& r, MethodParams& params) { - HashStringValue* options; Value* default_code; - const String* string=sql_result_string(r, params, options, default_code); + const String* string=sql_result_string(r, params, default_code); if(!string) { if(default_code) { string=&r.process_to_string(*default_code); @@ -607,11 +603,7 @@ static void _replace(Request& r, MethodP if(params.count()==1) { // ^string.replace[table] - Table* table=params.as_no_junction(0, PARAM_MUST_NOT_BE_CODE).get_table(); - if(!table) - throw Exception(PARSER_RUNTIME, - 0, - "parameter must be table"); + Table* table=params.as_table(0, "param"); Dictionary dict(*table); r.write_assign_lang(src.replace(dict)); } else { @@ -632,6 +624,7 @@ static void _save(Request& r, MethodPara size_t file_name_index=0; if(params.count()>1) if(HashStringValue* options=params.as_no_junction(1, "second parameter should be string or hash").get_hash()){ + // ^file.save[filespec;$.charset[] $.append(true)] int valid_options=0; if(Value* vcharset_name=options->get(PA_CHARSET_NAME)){ asked_charset=&::charsets.get(vcharset_name->as_string().change_case(r.charsets.source(), String::CC_UPPER)); @@ -644,6 +637,7 @@ static void _save(Request& r, MethodPara if(valid_options != options->count()) throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION); } else { + // ^file.save[append;filespec] const String& mode=params.as_string(0, "mode must be string"); if(mode==MODE_APPEND){ do_append=true;